加载中…
个人资料
CAECFD创新工场
CAECFD创新工场
  • 博客等级:
  • 博客积分:0
  • 博客访问:6,842
  • 关注人气:541
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

OpenFoam的学习总结

(2011-05-24 11:31:35)
标签:

杂谈

OpenFoam的学习总结

OpenFoamFluentStar-CD等相比较,具有更高的求解效率与灵活性,并且可以根据用户的需要自己构建求解器和定义相应的离散方法。

 

一、        实例操作篇

1、  例子的结构

 

2、 求解实例的步骤

1)  导入网格。将Fluent中生成的网格文件.msh导入到OpenFoam中需要执行fluentMeshToFoam命令。通过该命令导入的网格由于软件转换的不足,需要使用者在执行前检查导入网格的边界条件是否正确,只有在网格边界条件正确的情况下才能执行计算命令。

2)  检查网格。命令为checkMesh

3)  设置相应的物性参数,如在case1/constant/transportProperties路径下设定运动粘度(nu)。

4)  设定初始条件,如在case1/0/p路径下设定初始状态下的压力场。

5)  对计算时间和输入/输出数据的控制。如在case1/system/controlDict路径下设定相应的起始/终止时间,一定的时间步,输出的格式或精度,输出的时间间隔等。

6)  设定各个求解量的离散格式,如在case1/system/fvSchemes路径下设定时间的离散格式为欧拉格式,即:ddtSchemes {default Euler}

7)  设定求解器,求解方法,以及松弛因子等,如在case1/system/fvSolution路径下设定求解方法为PISO方法。

8)  执行求解命令,如icoFaom –case case1

9)  导出数据。如果导出网格数据用foamMeshToFluent命令,如果导出计算结果数据用foamDataToFluent命令。

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

4controDict文件中各个选项包含的内容

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

指数在-44之间用fixed格式,之外用scientific

timePrecision

timeFormat连用,用整数表示时间的精度

graphFormat             (采用一种软件输出图形数据)

raw

ASCII格式列

gnuplot

数据采用gunplot格式

xmgr

数据采用Grace/xmgr格式

jplot

数据采用jPlot格式

Dat reading

runTimeModifiable   (OpenFoam是否是在每个时间步的开始读入各个目录)

yes

OpenFoam在每个时间步的开始读入各个目录

no

OpenFoam不是在每个时间步的开始读入各个目录

Run-time loadable functionality

libs

增加的库的列表在运行时间开始下载

functions

函数的列表在运行时间开始下载

5fvShemes中包含的内容:

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_INCEXE_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/filesMake/options中的内容。对于Make/files要将求解器的名称改为新的求解器的名称,目标文件的绝对路径要改为新的求解器的绝对路径。如(红色为需要更改的部分):

myIcoFoam.C

EXE = $(FOAM_USER_APPBIN)/myIcoFoam

对于Make/options,如果又增加或删除相应的头文件或库,则在此文件中增加或删除相应的头文件或库的链接路径。如:

EXE_INC = \

-I$(LIB_SRC)/finiteVolume/lnInclude

EXE_LIBS = \

-lfiniteVolume

5)在更改Make/filesMake/options文件中的内容后,再次执行wclean命令,删除原求解器中的相对路径文件

6)编译新创建的求解器,即在新创建的求解器目录下执行wmake命令

7)测试新创建的求解器是否可以正常执行,运行一个例子进行验证。如;myIcaoFoam –case case1

 

zz:http://blog.163.com/yinqin135@126/blog/static/2173015320104307514753/

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有