




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Unsteady boundary conditions in openFOAMBy Alberto On August 15, 2008 25 CommentsI recently had to help a friend setting up a case in OpenFOAM, where a ramp boundary condition for the velocity was required. Apparently OpenFOAM doesnt offer this boudary condition, or at least it might seem so at a first impression.Actually, OpenFOAM offers a very general way to specify unsteady boundary conditions called timeVaryingFixedValue, which can read a data set from a text file, interpolate them with respect to time and use them to generate the unsteady boundary condition.I will show how to use this boundary condition with a simple example of a ramp for a velocity boundary condition. We want the velocity to ramp from the value U1 = (0, 1, 0) to the value U2 = (0, 3, 0) in the time interval between t1 = 0 and t2 = 5s. The velocity stays constant and equal to U2 for t t2.The ramp is simply defined by the extrema: the interpolation routine will automatically provide the correct values for the times contained inside the interval specified above. So, we need to create a text file with the following format:( (t_0 value_0) . (t_n value_n)In our specific case, we create a file called ramp containing the following lines:( (0.0 (0 1 0) (5.0 (0 3 0)This file must be saved in the main directory of the simulation case, containing the 0, constant and system directories.The boundary condition can be then specified in the velocity dictionary in the 0 directory as follows:rampInlet type timeVaryingUniformFixedValue; fileName ramp; outOfBounds clamp;It is worth to pay attention to the option outOfBounds clamp;which specifies that for all the values of t outside the interval provided by the data, the values ofthe dependent variable are clamped to the last available value. In our case this means that the condition U = U2 for t t2 will be imposed.The clamp option is also useful if we want to specify a ramp that begins for t 0 or to change the final value of the dependent variable when the ramp is completed. Lets consider the previous example again. Now we want the ramp to start at t = 2s and the velocity to go to zero at the end of the ramp. This can be simply accomplished by adding two lines to the dictionary, as follows:( (1.99999 (0 0 0) (2.0 (0 1 0) (5.0 (0 3 0) (5.00001 (0 0 0)The timeVaryingFixedValue boundary condition is of course suitable for all kinds of fields. For a scalar, the dictionary will contain couples of data (t, value), while for tensors each line will have a 9 components tuple.Note: This procedure was tested on OpenFOAM 1.5.130702/bioexplore/33162.html在OpenFOAM中做用户自定义库编译libraryopenfoam自己提供的标准类都是以库的形式提供的,并且利用头文件给出了库的应用接口。这样一来,用户的代码中即使用到了某个类,也不需要对源文件进行重新编译了。这样做有好有坏:好处是提高了效率;坏处是源文件(.c)进行修改了但如果不重新编译的话会导致库文件不会被更新,从而用户代码中用到的还是旧库。缺点可以弥补,那就是在修改了代码之后进行重新编译,但是一般情况下,我们完全可以不去动OpenFOAM的源文件。(前面提到了编译器会根据文件的修改情况决定是否重新编译,针对的是.h文件,而非.c源文件)既然OpenFOAM采用的是上面的这种机制,那么用户在自己定义某个类之后该如何处理呢?标准的做法也是将其生成库文件,就像OpenFOAM本身提供的那样。当然用户很可能会修改自己的这个类,那么在修改之后记得重新编译就好了。那么,如何生成用户自定义的库呢?OpenFOAM提供了一个库:foamUser。如果查看目录$FOAM_LIBBIN会发现该库文件。不过OpenFOAM本身并未给此库提供什么功能,它相当于一个“空库”,等待用户自己去添加。与之对应,在$FOAM_SRC目录下可以找到一个foamUser文件夹,这是一个模版,提供了一个现成的框架,其中Make文件夹中的files和options文件提供了利用wmake进行编译时的选项。其中files文件内容如下: libfoamUser.C /指出源文件 LIB = $(FOAM_LIBBIN)/libfoamUser /LIB指出编译为库,等号后为所添至库的路径编译为库的命令为 wmake libso 。而libfoamUser.C中用到的头文件或者库同样在Make/options文件中说明,方式与编译可执行文件相同,不过关键字EXE要换成 LIB,亦即: LIB_INC = -I . LIB_LIBS = -L . -l . 可见,$FOAM_LIBBIN中的库文件就是由$FOAM_SRC/foamUser下的内容生成的(或者添加,因为每个源文件都可以添加到某一个已经存在的库中,如果该库不存在,则生成。当然也可以同时将很多源文件添加到某库中,这时Make/files文件中源文件的数量就不止一个,从这也可以看出,wmake在进行编译的时候判断依据实际上就是Make文件夹)仿照上面的“标准”方式,我们可以开发自己的库了。针对不同的开发功能,我们将foamUser这个名字替换成我们自己所需要的(名字取得直观一些,采用“驼峰”式)。这样做的好处就是方便代码管理,有条理的工作总能提高效率。建议: 自定义库的源文件统一放在$FOAM_USER/src目录下,以功能分类存储(对应文件夹) 自定义库生成至$FOAM_USER_LIBBIN/ 库的名称与相应文件夹同名总结一下,用户自定义库需要进行以下工作: 1.编写源文件(一个或多个,多个情况建议分文件夹存储) 2.确定wmake范围,建立Make文件夹及options和files文件(Make文件夹应位于工程目录下,最好该目录下所有源文件应都在编译范围内) 3. 修改options文件,确定头文件搜索路径,所引用库文件(搜索路径&库) 4. 修改files文件,确定编译范围和输出位置、输出库文件名 5. wmake libso将自己的源码编译为库,同时做好其应用接口头文件,我们就可以轻松应用自己的库了,就像OpenFOAM自己提供的一样。一个好的习惯是,在编好一个源文件之后,就给出相应的头文件,并且命名相同,OpenFOAM本身就是这样做的130702转载openFOAM基础编译applications和librariesopenFOAM基础编译applications和librariesopenFOAM 是一个库,用户在编程时需要调用此库,当然用的语言是面向对象的c+语言。在使用openFOAM时我们应该将关注点放在顶层使用类以及数值算法上,这就需要对openFOAM Library的调用机制有一个详细的了解。并且由于我们在使用c+语言编程,因此需要对c+的编译过程有所了解。关于编译器,我们可以直接使用LINUX自带的make程序,但openFOAM又提供了一个编译程序wmake,它建立在make的基础上,但比make更强大和简单。并且 wmake不仅可以用于openFOAM library,而且可以用于任何c+代码。openFOAM 中的类,本质上是c+的class,都定义在.c文件中,这些文件在用编译器进行编译之后会生成.so文件(可执行的二进制文件),形成库(library)。openFOAM在提供时都已经生成了.so文件,因此当我们编译一个调用了某class(该class所在文件为 nc.c)的程序app.c时,nc.c不会被重新编译,而是调用直接调用nc.so文件。这种机制称为“动态链接”。而如果对某.c文件进行了修改,则重新编译之后才会生效。c+中,我们在使用一个变量或者对象时,必须确保该变量或对象已经存在,这就需要进行声明。在使用类时同样需要事先声明,这些对类的声明都包装在.h文 件中,我们称之为头文件(header file)。头文件中声明的类一定要能在库中找到,这就要求声明的类与.c文件中定义的类相一致。头文件都必须以#include xx.h的形式被“包含”在使用了该头文件的c文件中(.c或.h文件)。一个c文件要想使用某个类,则必须在文件的开始将声明了该类的.h文件包含进来。这样一来,我们在编译一个程序的时候,可以通过“递归搜索”找到一系列的.h文件名,我们把这些.h文件称为dependences,而这一系列文件名也就是一个dependence list。编译器会判断这个list中的各个.h文件在最后一次进行编译之后是否被修改过,如果修改了,则从新编译,如果没有被修改,那么不再编译。然后,编译器会根据.h文件中的声明和程序中的调用情况在库中找到想要的代码,进而链接出可执行文件来。一方面,只有有了.h文件,我们在写程序代码时才能保证用到的类都是声明过的;另一方面,只有有了.h文件中的声明,我们才能在库中找到自己需要的东西,从这个角度来讲,h文件可以看作是库的接口。(.h文件的用途不仅仅是用来做class declaration。当某程序代码需要调用本身的时候,通常为了增加程序的可读性,也会选择.h文件来组织文件结构。)编译工作都是由 wmake完成的。有了前面的这些概念介绍,我们可以再来看一看wmake的功能和特点:1、自动生成和维护 dependency list2、多平台编译和链接,3、多语言编译和链接,e.g. C, C+, Java.4、多功能 (multi-option)编译和链接,e.g. debug, optimised, parallel and profiling5、Support for source code generation programs, e.g. lex, yacc, IDL, MOC.6、Simple syntax for source file lists.7、自动生成新代码的源文件列表8、Simple handling of multiple shared or static libraries.9、 Extensible to new machine types.10、 Extremely portable, works on any machine with: make; sh, ksh or csh; lex, cc.11、Has been tested on Apollo, SUN, SGI, HP (HPUX), Compaq (DEC), IBM (AIX),Cray, Ardent, Stardent, PC Linux, PPC Linux, NEC, SX4, Fujitsu VP1000.很多功能我们先不管它,现在我们知道wmake可以用来编译和链接程序、并且给出一个可执行文件就行了。我们关注的有这些内容:1)在程序中包含的头文件。wmake需要能找到他们。“包含哪些头文件”在代码中已经说明,“这些头文件在哪”则需要进行说明。2) 程序需要载入的库,wmake也需要能找到他们。(光有.h文件是不够的,我们最终用的是库,.h文件中声明的东西都在这里面)“包含哪些库”和“这些库在哪”都需要进行说明。3)生成的可执行文件。“生成到哪”需要说明。以上各个需要进行说明的地方都是通过程序目录下的make/options和make/files文件实现的。后面会有详细的介绍。我们逐项看一看上面的三条内容:(一)wmake首先要生成 dependency list,然后搜索这些文件。对openFOAM而言,wmake搜索的顺序如下:1)$WM_PROJECT_DIR/src/OpenFOAM/lnInclude2)当前目录下的 lnInclude文件夹3)当前文件夹4)platform dependent paths set in files in the $WM PROJECT DIR/wmake/rules/-$WM ARCH/ directory, e.g. /usr/X11/include and $(MPICH ARCH PATH)/include5)其他在 make/opptions文件中用-I命令给出的路径。(*编译时需要在主程序目录中有make文件夹,内有options、files文件,用以指明 wmake命令的参数)。路径指出方法为:EXE_INC = -I -I . -I(二)然后,wmake需要进行“链接”。链接的过程也就是根据头文件中的声明在库中寻找有用代码,然后植入应用程序的过程。当然我们不可能在整个计算机中进行寻找,这样一来就要限定范围:一是搜寻的范围,二是到底载入哪些库。这些事情并不一定全要用户指定,因为有些事情wmake默认就帮我们做了,下面还是先看看基本情况。搜索范围:wmake 在链接到共享对象库(shared object library)时按以下路径顺序进行搜索(指定路径的命令为-L):1)$FOAM_LIBBIN 路径2)platform dependent paths set in files in the $WM DIR/rules/$WM ARCH/ directory,e.g. /usr/X11/lib and $(MPICH ARCH PATH)/lib3)其他由 Make/options 文件指定的路径。载入的库:如果想载入某库,则要被链接的文件(.so文件,在windows下为.dll文件)需要用-l命令指出时,此时需要去掉前缀(prefix)lib和后缀.so。举例:libnew.so文件在被链接时的命令为-lnew。默认情况下,wmake会载入下面的 libraries:1)$FOAM LIBBIN 目录下的libOpenFOAM.so2)platform dependent libraries specified in set in files in the $WM DIR/rules/$WM ARCH/directory, e.g. libm.so from /usr/X11/lib and liblam.so from $(LAM ARCH PATH)/lib3)其他在 Make/options 文件中指定的库可以想见,要想链接某库,则其必须在库路径的搜索范围内。除了默认搜索的路径和默认载入的库,其他路径或库都可以在Make/options 文件中(同前所述)用下面的方法定义:EXE_LIBS = -L -L . -L -l -l . -l有了编译和链接,就可以生成可执行文件了。可执行文件是在Make/Files 文件中用EXE=指出的,标准习惯取为与工程名(亦即主程序名、主程序文件名)同名。至于存放目录也有约定俗成的习惯:openFOAM提供的标准应用程序(standard released applications)放在$FOAM_APPBIN,用户自己开发的应用程序放在FOAM_USER_APPBIN。至于用户如何组织自己的代码存放,完全可以参考openFOAM提供的标准库的存放方式。好的习惯可以使程序层次更加清晰,便于管理。此外,从上面的介绍可以看出c+面向对象编程思想中需要借鉴的习惯,那就是:将代码都封装到类中,然后编译为库,用头文件来做接口,在使用时以头文件为纽带、编译时用限制参数选择库,对库中有用的内容进行调用。转自:/s /blog_5fdfa7e60100dciw.html2013/06/20将OpenFoam的编译系统介绍一下,并给出了如何在OpenFOAM下编译“hello world”程序。OpenFOAM用的编译器是gcc,他并不是直接运用该编译器,而是将该编译器进行了包装,也就是 wmake。OpenFOAM中的头文件通常为H结尾,而代码文件是以C为扩展名,应当注意,这里的C为大写的,如果写成小写,wmake会出现编译错误,尽管你编写的代码没有错误。运用wmake编译程序,程序所在的文件夹结构必须为如下形式|newApp |-newApp.C |-otherHeader.H |-Make |-files |-optionsMake所在的文件夹中放有主程序,和在主程序用到的所有头文件,这里面的代码文件和头文件名字任意。Make文件夹里面有两个文件files和 options,这两个文件的名字不能改变。 files文件主要干两件事(1)指定哪些文件需要编译,这里的文件是代码文件,也就是.C文件,而不包括.H文件(2)指定你要编译的类型,是编译成库,还是编译成可执行文件,以及编译成的库文件或者可执行文件的名字。下面是icoFoam的Make文件夹下的files文件的内容icoFoam.C EXE = $(FOAM_APPBIN)/icoFoam要编译的代码文件直接将名字写到里面就行了,如果有多个代码文件,直接一个一个列在上面就行了。下面为编译程序类型EXE=,说明要编译成可执行文件,等号右面为编译后的文件放在什么地方。这一行也可以不写,他会将编译的可执行文件放到当前文件夹,名字为OpenFOAM.out.如果你要编译成库的话请采用”“LIB= .”等号后面放编译的库文件所在的目录,一般编译库文件命名为lib.,这是一个习惯,而非规定。 options文件也是干两件事(1)指定编译的头文件所在的目录,如果说所用的头文件在当前文件夹或者标准C+的头文件,无需指定。(2)指定编译当前程序所用到的库。下面为icoFoam下的options文件的内容EXE_INC = -I$(LIB_SRC)/finiteVolume/lnIncludeEXE_LIBS = -lfiniteVolume EXE_INC=用于所运用到的头文件所在的目录,EXE_LIB用来指定所有到的库。注意这里的库为OpenFOAM中的库或者你自己写的库,C+的标准库无需在这添加。因此如果你不使用OpenFOAM中的库,而是自己独立编写C+程序,并且所有的头文件都在当前的根目录,options里无需指定任何东西。下面是一个简单的“Hello world”c+程序,按照我说的方法试一试?第1步:建立一个目录,用于编译当前的Hello world程序?下面为当根目录建立一个hello的文件夹,并进入hello文件夹。cd /进入根目录mkdir hello /建立文件夹,名为hellocd hello /进入hello 第2步: 建立Make文件夹,并进入Make建立files和options文件mkdir Make /建立Make文件夹cd Make /进入Maketouch files /创建files文件touch options /创建options文件cd. /退出Make文件夹第3步:建立程序文件hello.C, 打开hello.C进行编程序touch hello.C /创建hello.Ckate hello.C /打开hello.C输入如下代码 #includeiostreamusing namespace std ;int main ()couthello worldBasic-Incompressible flow-Compressible flow-Multiphase flow-Direct numerical simulation-Combustion-Heat transfer and buoyancy-driven flows-Particle-tracking flows-Molecular dynamics methods-Direct simulation Monte Carlo methods-Electromagnetics-Stress analysis of Solids-Finance1. Basic-laplacianFoam: 求解简单的laplacian方程,如固体的热扩散问题。 求解方程:fvm:ddt(T) - fvm:laplacian(DT, T) T: temperature DT:diffusivity 计算温度梯度:gradT = fvc:grad(T) gradT.component(vector:X) gradT.component(vector:Y) gradT.component(vector:Z)-potentialFoam: 简单的势流求解器,用于建立NS方程求解的初始场 读入标量p,向量U, 表面场phi(界面流率) 求解压力方程,根据表面场重建速度场-scalarTransportFoam: 求解因变量传递方程 求解方程:fvm:ddt(T)+ fvm:div(phi, T)- fvm:laplacian(DT, T)2. Incompressible flow-adjointShapeOptimizationFoam 稳态求解不可压缩的非牛顿流体在变形的管道中受阻湍流流动,计算压力和速度场的变化情况-boundaryFoam 主要用于1维稳态不可压缩湍流模型求解,并生成一个inlet的边界条件用于后续计算 boundaryLaunderSharma boundaryWallFunctions boundaryWallFunctionsProfile-channelFoam channel流的LES求解-icoFoam 瞬态求解不可压缩牛顿流体层流-MRFSimpleFoam 稳态求解不可压缩带MRF(多参考系Multiple reference frame)的非牛顿流体湍流-nonNewtonianIcoFoam 瞬态求解不可压缩非牛顿流体层流-pimpleDyMFoam PIMPLE算法(PISO-SIMPLE合并算法)瞬态求解不可压缩,动网格下的牛顿流体-pimpleFoam 使用PIMPLE算法计算大时间步长瞬态不可压缩流-pisoFoam 使用PISO算法瞬态求解不可压缩流-porousSimpleFoam 用隐式或显式方法处理多孔介质,稳态求解不可压缩湍流-shallowWaterFoam 瞬态求解带旋转的无粘浅水方程(/wiki/Shallow_water_equations)-simpleFoam 使用SIMPLE算法稳态求解不可压缩湍流-SRFsimpleFoam 稳态求解不可压缩非牛顿湍流旋转流-windSimpleFoam 稳态求解不可压缩湍流,动量方程含有外部源项3. Compressible flow-rhoCentralFoam 基于Kurganov & Tadmor中心迎风格式的可压缩流密度求解器-rhoCentralDyMFoam rhoCentralFoam+DyM(动网格)-rhoPimpleFoam HVAC或相似情况下的层流或湍流可压缩流动瞬态求解器 HVAC(暖通空调):/wiki/HVAC-rhoPorousMRFLTSPimpleFoam 支持多孔介质及多重参考系的层流或湍流可压缩流LTS稳态求解器-rhoPorousMRFSimpleFoam 支持多重参考系的显式或隐式多孔介质处理方法的可压缩RANS 湍流稳态求解器-rhoPorousMRFPimpleFoam 支持多重参考系及多孔介质的可压缩层流或湍流瞬态求解器-rhoSimplecFoam 可压缩层流或RANS湍流simplec算法稳态求解器-rhoSimpleFoam 可压缩层流或RANS湍流simple算法稳态求解器-sonicDyMFoam 支持动网格的层流或湍流可压缩跨音速/超音速气流瞬态求解器-sonicFoam 层流或湍流可压缩跨音速/超音速气流瞬态求解器-sonicLiquidFoam 层流或湍流可压缩跨音速/超音速液体流瞬态求解器4. Multiphase flow-bubbleFoam 双组分不可压缩多相流求解器,其中一相是分散相,如液体中的气泡-cavitatingFoam 基于可压缩液/汽混合物获得的均相平衡模型的瞬态空化代码-compressibleInterFoam 采用VOF相分数界面捕捉方法求解2个等温混溶可压缩流体-interFoam 采用VOF相分数界面捕捉方法求解2个等温混溶不可压缩流体-interDyMFoam interFoam+DyM,包括自适应重划分网格的网格运动和网格拓扑变化-interMixingFoam 3个不可压缩流体,其中两个互溶,VOF法捕捉界面-interPhaseChangeFoam 带相变的2个不可压缩等温混溶流体,VOF相分数界面捕捉方法-LTSInterFoam LTS(Local time stepping,稳态)法求解2个不可压缩等温混溶流体,VOF相分数界面捕捉方法-MRFInterFoam 多重参考系下求解2个不可压缩等温混溶流体,VOF相分数界面捕捉方法-multiphaseInterFoam 计算n个不可压缩流的界面,包括各相的表面张力和接触角-porousInterFoam 2个不可压缩等温混溶流体,VOF相分数界面捕捉方法,显式算法处理多孔区域-settlingFoam 分散相沉积的2个不可压缩流的计算-twoLiquidMixingFoam 两个不可压缩流的混合-twoPhaseEulerFoam Euler法计算2个不可压缩流,一相为分散相,如液体中的气泡5. Direct numerical simulation (DNS)-dnsFoam boxes的各相同性湍流的直接数值模拟6. Combustion-chemFoam 化学问题求解,单单元化学求解器,用于比较。类似CHEMKIN-coldEngineFoam 内燃机的cold-flow求解-dieselEngineFoam 柴油发动机的喷射和燃烧-dieselFoam 柴油的喷雾和燃烧-engineFoam 内燃机燃烧-fireFoam 火焰和湍流扩散火焰的瞬态求解-PDRFoam 可压缩预混/部分预混湍流燃烧模型求解-reactingFoam 化学反应求解-rhoReactingFoam 基于密度热力学求解器,求解化学反应-XiFoam 求解可压缩预混/部分预混湍流模型的燃烧7. Heat transfer and buoyancy-driven flows-buoyantBaffleSimpleFoam 稳态求解浮力,可压缩流体湍流,+隔热板-buoyantBoussinesqPimpleFoam 瞬态求解浮力,不可压缩流湍流,Boussinesq+Pimple-buoyantBoussinesqSimpleFoam 稳态求解浮力,不可压缩流湍流,Boussinesq+Simple-buoyantPimpleFoam 瞬态可压缩流的湍流通风和传热-buoyantSimpleFoam 稳态可压缩流的湍流-buoyantSimpleRadiationFoam 稳态求解可压缩流,包括辐射,通风和传热-chtMultiRegionFoam heatConductionFoam和buoyantFoam组合,求解固液间的传热8. Particle-tracking flows-coalChemistryFoam 瞬态,可压缩,湍流,煤和石灰石颗粒包裹注射,燃烧-icoUncoupledKinematicParcelDyMFoam 瞬态,一个粒子的被动运输求解+DyM-icoUncoupledKinematicParcelFoam 瞬态,一个粒子的被动运输求解-LTSReactingParcelFoam 稳态LTS求解可压缩、层流或湍流反应流及非反应流,多相Lagrangian包裹和多孔介质,包括质量、动量、能量显式源项-porousExplicitSourceReactingParcelFoam 瞬态PISO求解可压缩、层流或湍流与多孔介质的多相Lagrangian包裹反应,包括质量、动量、能量显式源项-reactingParcelFilmFoam 瞬态PISO求解可压缩、层流或湍流,Lagrangian包裹和表面薄膜模型-reactingParcelFoam 瞬态PISO求解可压缩、层流或湍流,Lagrangian包裹-uncoupledKinematicParcelFoam 瞬态,一个粒子的被动运输求解9. Molecular dynamics methods-mdEquilibrationFoam 平衡和/或先决条件的分子动力学系统-mdFoam 分子动力学求解流体动力学10. Direct simulation Monte Carlo methods-dsmcFoam 3D瞬态多相流直接Monte Carlo模拟11. Electromagnetics-electrostaticFoam 求解静电-magneticFoam 求解永久磁铁产生的磁场-mhdFoam 磁流体动力学求解不可压缩导电层流在磁场下的作用12. Stress analysis of solids-solidDisplacementFoam 瞬态分离有限体积法求解:固体的线弹性,小应变变形+热扩散和热应力-solidEquilibriumDisplacementFoam 稳态分离有限体积法求解:固体的线弹性,小应变变形+热扩散和热应力13. Finance-financialFoam 求解商品价格的Black-Scholes公式2013/5/14Are you ready for developping OpenFoam?Something important here now!OpenFOAM的程序开发初步1. OpenFOAM应用的类型:使用OpenFOAM进行CFD模拟的,大致可分为三种类型:1)直接利用OpenFOAM的标准的求解器进行模拟,把OpenFOAM替代商业软件来使用,OpenFOAM已基本具有这样的功能和人2. 气,与 Fuent,Star-CD等相比较,OpenFOAM显然具有更高的求解效率和灵活性。2)用户自定义求解器,即利用OpenFOAM的基本类库,如finiteVolume,OpenFOAM库来按照自己的求解流程来编写针对某3. 类应用的求解器。用户需要开发的求解器就是类似于在OpenFOAM的applications中所看到的标准求解器icoFOAM,4. simpleFOAM等。显然这一需求是非常大的,从OpenFOAM问世以来,已有很多用户定义了自己的求解器。这类需求的特5. 点是,并不需要特别关心,离散和求解的最底层的知识,如时间项离散,空间项离散等,关注的重点是求解的步骤或者6. 流程。在编程中,通常是顶层的求解流程的开发,在多数情况下可以不编译OpenFOAM的 finiteVolume和OpenFOAM库7. 。这种顶层的求解器的开发,是我们以前常常忽略的,或者是以前没有能力做到的。需要指出的是,商业软件中的所8. 谓udf,user subroutine和这是不可相比的。3)用户自己定义离散方法等。对于研究离散格式、代数求解器等人来说,更关注时间项ddt,扩散项Laplacian,对流9. 项div是如何离散的,能否有更高效更高精度的离散方法,这需要修改finiteVolume库和OpenFOAM库中对应的代码。10. 尤其是对流项,尽管OpenFOAM已经提供了基于 NVD和TVD的模板和40多种有名的高阶高精度格式,但可以预见,11. 这仍然是不够的,毕竟对流项的离散仍然是目前CFD的重点研究方向。可以肯定的是,目前有很多人关注类型2的应用,毕竟将OpenFOAM当成Fluent或Star-CCM来使用,并不见得方便。12. 但是将OpenFOAM 作为类库来构建自己的求解器,这是其它软件无法实现的.2 OpenFOAM程序开发的基本知识2.1OpenFOAM的基本术语重要的环境变量:$WM_PROJECT_USER_DIR OpenFOAM的用户目录$FOAM_TUTORIALS -OpenFOAM的算例目录$ FOAM _SRC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代持方协议书
- 锅炉设备制造工问题分析深度考核试卷及答案
- 白酒酵母工岗位职业健康及安全技术规程
- 学生保密协议书
- 感光材料乳剂熔化工岗位工艺技术规程
- 公司金属材丝拉拔工设备安全技术规程
- 福建省泉州市泉港一中学、城东中学2026届七年级数学第一学期期末考试模拟试题含解析
- 江苏省泰兴市实验2026届数学八上期末调研模拟试题含解析
- 2026届吉林省白城市名校数学七年级第一学期期末经典模拟试题含解析
- 专职安全员岗前培训总结课件
- 2025年学校少先队知识应知应会题库(含答案)
- 2026中国农业银行秋季校园招聘备考考试题库附答案解析
- 世界粮食日节粮我先行节约粮食我在行动宣传课件
- 工业厂区场地平整建设方案
- (2025秋新版)青岛版科学三年级上册全册教案
- 第14课《渡荆门送别》课件-2025-2026学年统编版语文八年级上册
- 住院病人防止走失课件
- 2025内蒙古锡林郭勒盟西乌珠穆沁旗招聘社区工作者40人笔试模拟试题及答案解析
- 头部手术备皮方法
- 五年级上册生命与健康教案
- 新能源汽车火灾事故处置程序及方法
评论
0/150
提交评论