openFOAM7几个文件夹的作用

想搞懂openFOAM整个程序的结构,了解程序开发过程中几个命名的文件夹的作用比较重要。这里单独了解一下。

openFOAM7的全部文件夹罗列如下:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7$ ls
Allwmake      bin      doc  platforms   src   tutorials
applications  COPYING  etc  README.org  test  wmake

其中Allwmake为openFOAM中的编译命令,类似make。而COPYING为配置文件。README.ory文件则类似软件开发日志。最重要的是几个主要的文件夹的作用。

tutorials

这个是openFOAM教程中最早介绍的文件夹,内容如下:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/tutorials$ ls
Allclean  combustion       electromagnetics  IO          resources
Allrun    compressible     financial         lagrangian  stressAnalysis
Alltest   discreteMethods  heatTransfer      mesh
basic     DNS              incompressible    multiphase

其实对应的是所有的标准算例,每个文件夹的名字就对应了问题的类型。比如笔者现在比较关注的燃烧,就对应文件夹combustion

applications

对应内容如下:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/applications$ ls
Allwmake  solvers  test  utilities

在打开一层:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/applications/solvers$ ls
basic         discreteMethods   financial       lagrangian
combustion    DNS               heatTransfer    multiphase
compressible  electromagnetics  incompressible  stressAnalysis

对应的是前面tutorials文件夹中的所有算例的程序的源代码,比如现在我们关注的是0维的纯化学燃烧。在标准算例中的路径如下:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/tutorials/combustion/chemFoam$ ls
gri  h2  ic8h18  ic8h18_TDAC  nc7h16  README

我们执行其中的算例使用的是chemFoam,这个命令的源码来自:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM7/applications/solvers/combustion/chemFoam$ ls
chemFoam.C              hEqn.H                   setDeltaT.H
createBaseFields.H      Make                     solveChemistry.H
createControls.H        output.H                 thermoTypeFunctions.H
createFieldRefs.H       pEqn.H                   YEqn.H
createFields.H          readControls.H
createSingleCellMesh.H  readInitialConditions.H

我们注意到其中只有一个.C文件chemFoam.C,这是当前这个源码的主函数,剩下的部分通过头文件的方式添加代码段。

但是需要注意的是当前这个文件夹中并不包含chemFoam这个程序所有的源码段。我们打开其中的Make文件夹,其中还记录了当前源码使用的外链库:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/applications/solvers/combustion/chemFoam/Make$ vim options 

EXE_INC = \\
    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \\
    -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \\
    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \\
    -I$(LIB_SRC)/transportModels/compressible/lnInclude \\
    -I$(LIB_SRC)/ODE/lnInclude\\
    -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \\
    -I$(LIB_SRC)/finiteVolume/lnInclude \\
    -I$(LIB_SRC)/meshTools/lnInclude

EXE_LIBS = \\
    -lchemistryModel \\
    -lfiniteVolume \\
    -lmeshTools

这里的$(LIB_SRC)其实是指根目录下的src这个文件夹,即对应路径:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/src$ 

下面我们再看看这个文件夹

src

内容如下:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/src$ ls
Allwmake                genericPatchFields  rigidBodyDynamics
atmosphericModels       lagrangian          rigidBodyMeshMotion
combustionModels        mesh                rigidBodyState
conversion              meshTools           sampling
dummyThirdParty         ODE                 semiPermeableBaffle
dynamicFvMesh           OpenFOAM            sixDoFRigidBodyMotion
dynamicMesh             OSspecific          sixDoFRigidBodyState
engine                  parallel            surfMesh
fileFormats             Pstream             thermophysicalModels
finiteVolume            radiationModels     topoChangerFvMesh
functionObjects         randomProcesses     transportModels
fvAgglomerationMethods  regionCoupled       triSurface
fvMotionSolver          regionModels        TurbulenceModels
fvOptions               renumber            waves

我们刚才的option配置文件中就使用了其中的部分源码,比如说:

-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \\

就对应了如下这些文件(太多了只罗列了一部分):

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM7/src/thermophysicalModels/specie/lnInclude$ ls
absoluteEnthalpy.H                  logPolynomialTransportI.H
absoluteInternalEnergy.H            makeLangmuirHinshelwoodReactions.C
adiabaticPerfectFluid.C             makeMichaelisMentenReactions.C
adiabaticPerfectFluid.H             makeReaction.H
adiabaticPerfectFluidI.H            makeReactions.C
...

当然这里只是提供了一个路径,告诉源码找头文件可以从这里找,并不是所有的头文件都会被使用。具体使用了哪些需要阅读chemFoam.C的具体内容

我们再查看其中的其他文件,类似的提供了大量的源码。就是说当前文件夹将共用的代码提取到这里作为外链的源文件。

platforms

那么配置文件中的options选项对应哪里,这里就需要看下这个文件夹,首先来看下有什么内容:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/platforms$ l
linux64GccDPInt32Opt/  linux64GccDPInt32OptSYSTEMOPENMPI/

第二个既然标记了openMPI那大概是对应了并行的部分,我们进入第一个文件夹:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt$ ls
applications  bin  lib  src

再进入其中的lib文件夹:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/lib$ ls
dummy
libatmosphericModels.so
libbarotropicCompressibilityModel.so
libblockMesh.so
libchemistryModel.so
libcoalCombustion.so
libcombustionModels.so
libcompressibleEulerianInterfacialModels.so
...

给了非常非常多的.so文件,这里其实就对应我们所要链接的动态库,比如我们使用了配置

-lfiniteVolume \\

就对应了动态库文件

libfiniteVolume.so

我们再查看文件的其他部分,有

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/applications/solvers/combustion/chemFoam$ ls
chemFoam.C.dep  chemFoam.o  options  sourceFiles  variables

我们可以看到这里有.o文件,就是说openFOAM安装的时候编译好的可执行文件都放在platforms这个文件夹中,当前对应了串行和并行两个版本。

doc

首先看下内容

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/doc$ ls 
codingStyleGuide.org  Doxygen  Guides  tools

主要是用户手册之类的文件,Doxygen是一个帮助阅读的软件,有空了解之后再来详细说明

bin

内容如下:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/bin$ ls
buoyantBoussinesqPimpleFoam  foamSequenceVTKFiles
buoyantBoussinesqSimpleFoam  foamTags
cavitatingDyMFoam            icoUncoupledKinematicParcelDyMFoam
compressibleInterDyMFoam     interDyMFoam
...

其实就是预先编译好的可执行程序,不过并不是具体的算例。比如其中的foamCloneCase,是进行初值的复制的。就是说功能性的命令都保存在这里。

etc

百度了一下etc通常用来存储杂项内容,这里适合也是这样,主要是一系列的控制文件:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/etc$ ls
bashrc     cellModels     config.csh  controlDict  paraFoam    templates
caseDicts  codeTemplates  config.sh   cshrc        README.org  thermoData

test

功能似乎类似$FOAM_RUN

wmake

wmake是用Makfile进行功能扩展得到的,其中的源码就写在这个文件夹中:

dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/wmake$ ls
makefiles  wclean              wmakeCheckPwd         wmakePrintBuild
platforms  wcleanLnIncludeAll  wmakeCollect          wmakeScheduler
rules      wcleanPlatform      wmakeFilesAndOptions  wmakeSchedulerUptime
scripts    wdep                wmakeLnInclude        wrmdep
src        wmake               wmakeLnIncludeAll     wrmo

具体的细节要在更加仔细的阅读Makefile用法之后再来阅读。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片