参考http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/#YEAR_2021
配置
列出环境变量
env | grep WM
env | grep FOAM_
返回环境变量的值
echo $FOAM_APP
命令的简称,可以在$WM_PROJECT_DIR/etc/config.sh/aliases
中找到
alias src='cd $FOAM_SRC'
alias lib='cd $FOAM_LIBBIN'
alias app='cd $FOAM_APP'
alias sol='cd $FOAM_SOLVERS'
alias util='cd $FOAM_UTILITIES'
alias tut='cd $FOAM_TUTORIALS'
alias run='cd $FOAM_RUN'
也可以使用alias
命令显示全部简写
checkMesh
检查网格的质量
controlDict
中的runTimeModifiable true
允许案例运行时被编辑
求解过程
如果不清楚某个字典应该输入什么值,输入dummy,运行求解器后将返回候选项,比如
stopAt dummy;
可以使用#include包含其他字典的内容
#include "boundaryConditions"
可以在字典中定义并引用变量
velocity1 1;
$velocity1
fvSolution字典中可用的线性方程求解器来自$FOAM_SRC/OpenFOAM/matrices/lduMatrix/solvers/
.
├── diagonalSolver
├── GAMG
│ ├── GAMGAgglomerations
│ │ ├── algebraicPairGAMGAgglomeration
│ │ ├── dummyAgglomeration
│ │ ├── GAMGAgglomeration
│ │ └── pairGAMGAgglomeration
│ ├── GAMGProcAgglomerations
│ │ ├── eagerGAMGProcAgglomeration
│ │ ├── GAMGProcAgglomeration
│ │ ├── manualGAMGProcAgglomeration
│ │ ├── masterCoarsestGAMGProcAgglomeration
│ │ ├── noneGAMGProcAgglomeration
│ │ └── procFacesGAMGProcAgglomeration
│ ├── interfaceFields
│ │ ├── cyclicGAMGInterfaceField
│ │ ├── GAMGInterfaceField
│ │ ├── processorCyclicGAMGInterfaceField
│ │ └── processorGAMGInterfaceField
│ └── interfaces
│ ├── cyclicGAMGInterface
│ ├── GAMGInterface
│ ├── processorCyclicGAMGInterface
│ └── processorGAMGInterface
├── PBiCG
├── PBiCGStab
├── PCG
└── smoothSolver
GAMG是多重网格
PBiCG和PCG是预条件共轭梯度法
smoothSolver是高斯赛得尔方法
可以参考http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2008/TimBehrens/tibeh-report-fin.pdf
foamLog
命令可以将计算过程得到的日志转换为可以绘图的数据
后处理
将png图片序列转换为gif
/usr/bin/convert -quality 20% -delay 10 -loop 0 *.png movie.gif
也可以使用在线的转换器https://www.matools.com/gif
编程的方法
$WM_PROJECT_USER_DIR
的目录结构如下
.
├── applications
│ └── solvers
│ └── myInterFoam #这个是自己编写的求解器
│ └── Make
├── platforms
│ └── linux64GccDPInt32Opt
│ ├── bin #编译得到的可执行文件
│ └── lib #编译得到的动态连接库
├── run
│ └── simulationSRM
│ └── VOSPM-phaseChange-burnbackModel_reorg #案例文件
└── src
└── twoPhaseModels
└── twoPhaseChange
├── burnbackModel #这个是自己编写的派生类
├── cavitation
├── lnInclude
├── Make
├── noPhaseChange
└── twoPhaseChangeModel
在src里编写库,使用wmake
命令编译,其中Make/files
文件为
......
LIB = $(FOAM_USER_LIBBIN)/libmyTwoPhaseChangeModels
目的是将编译得到的动态连接库存放在platforms/linux64GccDPInt32Opt/lib
中
在applications里编写求解器,使用wmake
命令编译,其中Make/files
文件为
myInterFoam.C
EXE = $(FOAM_USER_APPBIN)/myInterFoam
目的是将编译得到的可执行文件存放在platforms/linux64GccDPInt32Opt/bin
中
Make/options
文件为
EXE_INC =
......
-I$(WM_PROJECT_USER_DIR)/src/twoPhaseModels/twoPhaseChange/lnInclude \
......
EXE_LIBS = \
......
-L$(FOAM_USER_LIBBIN)\
-lmyTwoPhaseChangeModels
......
可以使用如下代码自动生成一个空求解器
foamNewApp meshAndField
其目的是指明依赖库的头文件和库的地址及名称
编程需要注意的事项
OpenFoam使用国际单位,共7个量纲
有量纲的物理量的定义方式如下
dimensionedTensor sigma
(
"sigma",
dimensionSet( 1, -1, -2, 0, 0, 0, 0),
tensor( 1e6, 0, 0, 0, 1e6, 0, 0, 0, 1e6)
);
通过可以通过value成员函数获得tensor类型的数值
通过fvm和fvc命名空间下的函数实现场的运算。fvm returns an fvMatrix,and fvc returns a geometricField