想搞懂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
用法之后再来阅读。
暂无评论内容