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用法之後再來閱讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章