OpenFoam的学习总结
(2011-05-24 11:31:35)
标签:
杂谈 |
OpenFoam的学习总结
OpenFoam与Fluent,Star-CD等相比较,具有更高的求解效率与灵活性,并且可以根据用户的需要自己构建求解器和定义相应的离散方法。
一、
1、
2、 求解实例的步骤:
1)
2)
3)
4)
5)
6)
7)
8)
9)
10) 用Fluent等软件查看计算结果。
3、并行求解实例
1)在需要并行求解的例子目录下面创建decomposeParDict文件,对其中包含的内容进行设置。
注:在decomposeParDict文件中包含的内容有:需要的并行处理器的个数;分割数据的方法,包括simple(按照xyz的顺序,对各个方向的分块数进行设定),hierarchical(对各个方向的分块数进行设定,各方向的顺序可以更改),metis(按照各个处理器需要分配的比重进行分配),manual(手动进行人工分配,需包含分配的文件);分散后的数据是否需要分配在不同的磁盘,如果需要则应该写明分配磁盘的路径。
2)执行分散命令,如decomposePar –case case1
3)执行并行运算命令,其格式为:mpirun --hostfile <machines> -np <nProcs> <foamExec> <otherArgs> -parallel > log &
4)对计算后的结果进行重组,如reconstructPar –case case1
4、controDict文件中各个选项包含的内容:
controlDict |
|||
Time control |
startFrom |
firstTime |
所有时间目录中最早的时间步 |
startTime |
startFrom startTime连用表示计算开始的时间 |
||
latestTime |
所有时间目录中最近的时间步 |
||
stopAt |
endTime |
stopAt endTime连用表示就算的结束时间 |
|
writeNow |
当前时间步完成时结束计算并且写数据 |
||
noWriteNow |
当前时间步完成时结束计算但不写数据 |
||
nextWrite |
按计划的下一个时间步完成时结束计算 |
||
deltaT |
计算的时间步 |
||
Data writing |
writeControl |
timeStep |
每个写的时间间隔(writeInterval)需要的时间步 |
runTime |
每个写的时间间隔(writeInterval)需要的时间 |
||
adjustableRunTime |
用在时间步是自动调节的情况下的每个写的时间间隔(writeInterval)需要的时间 |
||
cpuTime |
每个写的时间间隔(writeInterval)需要花费的CPU时间 |
||
clockTime |
每个写的时间间隔(writeInterval)需要的真实时间 |
||
writeInterval |
和writeControl连用标量,表示写的间隔 |
||
purgeWrite |
用整数来表示对时间目录数量进行限制 |
||
writeFormat |
ascii |
十进制形式 |
|
binary |
二进制形式 |
||
writePrecision |
与writeFormat连用,用整数表示输出的精度 |
||
writeCompression |
uncompressed |
输出的数据不进行压缩 |
|
compressed |
输出的数据进行压缩 |
||
timeFormat |
fixed |
±m.dddddd |
|
scientific |
±m.dddddd±xx |
||
general |
指数在-4~4之间用fixed格式,之外用scientific |
||
timePrecision |
与timeFormat连用,用整数表示时间的精度 |
||
graphFormat |
raw |
原ASCII格式列 |
|
gnuplot |
数据采用gunplot格式 |
||
xmgr |
数据采用Grace/xmgr格式 |
||
jplot |
数据采用jPlot格式 |
||
Dat reading |
runTimeModifiable |
yes |
OpenFoam在每个时间步的开始读入各个目录 |
no |
OpenFoam不是在每个时间步的开始读入各个目录 |
||
Run-time loadable functionality |
libs |
增加的库的列表在运行时间开始下载 |
|
functions |
函数的列表在运行时间开始下载 |
5、fvShemes中包含的内容:
fvSchemes |
||
interpolationSchemes |
Centred schemes |
linear |
cubicCorrection |
||
midPiont |
||
Upwinded convection schemes |
upwind |
|
linearUpwind |
||
skewLinear |
||
QUICK |
||
TVD schemes |
limitedLinear |
|
vanLeer |
||
MUSCL |
||
limitedCubic |
||
NVD shemes |
SFCD |
|
Gamma∮ |
||
snGradSchemes |
corrected |
|
uncorrected |
||
limited∮ |
||
bounded |
||
fourth |
||
gradSchemes |
Gauss <interpolationScheme> |
|
leastSquares |
||
fourth |
||
limited<gradScheme> |
||
laplacianSchemes |
Gauss <interpolationScheme> <snGradScheme> |
Gauss <interpolationScheme> corrected |
Gauss <interpolationScheme> uncorrected |
||
Gauss <interpolationScheme> limited∮ |
||
Gauss <interpolationScheme> bounded |
||
Gauss <interpolationScheme> fourth |
||
divShcemes |
Gauss <interpolationScheme> |
Gauss linear |
Gauss skewLinear |
||
Gauss cubicCorrected |
||
Gauss upwind |
||
Gauss linearUpwind |
||
Gauss QUICK |
||
Gauss TVD schemes |
||
Gauss SFCD |
||
Gauss NVD schemes |
二、
1、求解器的结构
newApp为求解器的名称,它是包含求解器源代码的目录;appApp.C求解器的主程序;otherHeader.H为所包含的头文件,达到声明变量,从文件中读入初值的目的,例如包含的CreateFields.H头文件表示场变量的声明和初始化;Make为编译指令,它下面包含的files包括编译需要的源程序的文件名和生成的目标文件的绝对路径,options包括编译选项,设定链接头文件和库的绝对路径(EXE_INC和EXE_LIBS)。
2、使用现有的求解器
对已经存在的求解器,如OpenFoam自带的标准求解器,在执行该求解器时应在相应的路径下输入该求解器的名字或输入该求解器的名字和相应的路径,如:执行icoFoam求解器,则相应的输入命令icoFoam –case case1。
3、创建新的求解器
1)使新创建的求解器包含求解器结构中的所有项(可以从已经存在的求解器中复制得到)。如:copy –r icoFoam myIcoFoam
2)更改相应的内容。更改求解器的名称,如:mv icoFoam myIcoFoam;更改主程序的名称,如:mv icoFoam.C myIcoFoam.C,同时更改myIcoFoam.C文件内的内容,如增加需要求解的方程;增加或删除相应的头文件,同时更改头文件中的内容以满足需求,如在CreatFields.H这个头文件中增加需要读入的初值。
3)如果新求解器的内容最初是从别的求解器复制而来,就必须执行wclean命令,从而删除原求解器中的依靠文件,即扩展名为.dep的文件,以便之后新的求解器的编译。
4)更改Make/files和Make/options中的内容。对于Make/files要将求解器的名称改为新的求解器的名称,目标文件的绝对路径要改为新的求解器的绝对路径。如(红色为需要更改的部分):
myIcoFoam.C
EXE = $(FOAM_USER_APPBIN)/myIcoFoam
对于Make/options,如果又增加或删除相应的头文件或库,则在此文件中增加或删除相应的头文件或库的链接路径。如:
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude
EXE_LIBS = \
-lfiniteVolume
5)在更改Make/files和Make/options文件中的内容后,再次执行wclean命令,删除原求解器中的相对路径文件
6)编译新创建的求解器,即在新创建的求解器目录下执行wmake命令
7)测试新创建的求解器是否可以正常执行,运行一个例子进行验证。如;myIcaoFoam –case case1。
zz:http://blog.163.com/yinqin135@126/blog/static/2173015320104307514753/