OpenFOAM用法
cavity算例(绝热二维方腔的不可压缩流算例)
复制路径下的cavity文件夹,并复制其所在路径。
mkdir openfoam_files
cd openfoam_files
cp -ar /opt/openfoam9/tutorials/incompressible/icoFoam/cavity/cavity .
在复制的cavity路径下运行以下命令进行处理
cd cavity
# 执行命令生成计算网格
blockMesh
# 在paraview中打开生成的网格(可选)
paraFoam
# 查看网格大小,几何尺寸和一些网格信息(可选)
checkMesh
# 调用求解器进行计算
icoFoam
touch mycavity.foam # 也可以不生成改文件 直接求解器计算完运行paraFoam即可
# 启动paraview 将mycavity.foam文件导入 查看结果
paraview
在/system/controlDict中查看运用的什么求解器进行计算
icoFoam是不可压缩的牛顿流体层流的瞬态解算器
- cavity目录最初包含以下子目录:0,constent,和system。运行之后,它输出0.1、0.2、0.3、0.4、0.5 文件
- 0目录包含在这些时间步长的所有变量的值。一般是P和U,因此,0目录是初始条件。
- constent目录包含运动学粘度的transportProperties字典,一般是一些常数。
- system目录包含网格构建,运行控制设置、离散化方案和求解方案过程的设置。
- icoFoam解决程序读取案例目录中的文件,并根据这些设置运行案例。
有一个速度恒为1的边界带动下面的流体进行运动。
查看压力场:
p表示压强,表示上面有一层水在流动,从左往右流。空腔的左部顶端为低压区,右部顶端为高压区。
带原点的p对每个网格的压力场都进行了插值,这样压力场看起来是连续的。带方框的p,会显示每个网格的压力值,并且整个场的每个网格值并不是连续的。
U表示流速的分布
/system下的文件
/system/blockMeshDict
点信息定义的是上面的八个顶点。
分区的定义:
hex(0 1 2 3 4 5 6 7):表示8个顶点
(20 20 1):表示x方向划分20个网格 y方向20个 z方向1个
simpleGrading(1 1 1):表示网格单元的膨胀率
// 三个参数表示xyz轴方向上的网格膨胀比
// 大小表示某个轴的方向上最后一个网格与第一个网格的宽度比例 中间网格渐进增加
边界定义:
movingWall:按照逆时针的顺序用点来定义一个面 (相当于入口边界,几何的上部)
fixedWalls:固定边界 (几何底部和侧面)
frontAndBack:定义的前后两个面
/system/controlDict
application: 所用的求解器
startFrom : 开始时间
StopAt: 停止时间
deltaT: 计算的间隔时间
writeControl timeStep :按照timeStep的方式输出
writeInterval 20: 写入间隔,如果计算间隔为1s则表示设置20s输出一次结果
purgeWrite: 若等于0则输出所有时刻的结果 若为n,只输出最后n步的结果
writePrecision 6 :表示写入精度为6位
writeCompression off: 表示不对输出结果进行压缩 on表示压缩,一般对大型项目需要压缩
runTimeModifiable: 让每个时间步读取或者不读取所修改的字典文件
/system/fvSchemes
// 用来定义离散格式的求解方式的文件
ddtSchemes : 对时间项的离散,采用欧拉方式
gradSchemes : 对梯度项的离散
divSchemes : 对对流项的离散
laplacianSchemes : 对拉普拉斯项的离散
interpolationSchemes : 从体到面的一个插值方法的选用
snGradSchemes : 面法向梯度的离散方法选择
/system/fvSolution
fvSolution中由两个部分组成:solvers(矩阵求解器)和求解器使用的算法
solvers表示矩阵求解器
p和U表示要求解的内容 压强和流速
solver表示矩阵求解器,下面对应的三个参数是矩阵求解器的参数 tolerance是求解的误差,relTol是相对误差
PISO是求解器使用的算法
下面包含算法的参数
/constant下的文件
polyMesh文件是通过blockMesh命令产生的,里面有一些关于几何体的信息(边界,面等)。
transportProperties是描述液体的物理特性的文件(其中参数nu是液体的运动粘度,值越大,流动性越差,水的运动粘度为 1 0 − 6 10^{-6} 10−6)
本算例中雷诺数为10(设置的运动粘度为0.01
m
2
/
s
m^2/s
m2/s),雷诺数如下定义
R
e
=
d
∣
U
∣
ν
Re = \frac{d|U|}{\nu}
Re=νd∣U∣
其中d和|U|分别是特征长度和速度,
ν
\nu
ν是运动粘度。本算例中d为0.1m,|U|为1m/s,运动粘度为0.01
m
2
/
s
m^2/s
m2/s,所以雷诺数为10。
雷诺数是一种用来表征流体流动情况的无量纲数。
雷诺数可以用来判别流动特性的依据,例如在管流中,雷诺数小于2300的流动时层流,雷诺数等于2300-4000为过渡状态,雷诺数大于4000时是湍流。
还需要设置时间步,即
δ
T
\delta T
δT,当运行icoFoam的时候,为了达到数值稳定以及时间计算精度,库朗数应该小于1。每个网格的库朗数这样定义:
C
o
=
δ
t
∣
U
∣
δ
x
Co = \frac{\delta t |U|}{\delta x}
Co=δxδt∣U∣
二维中的定义:库朗数的物理意义就是时间步长内流体运动距离与矩形网格单位长度的比值
它可以被理解为:在给定时间步长和给定网格中,流体在网格中的运动距离。
上式中 δ t \delta t δt为时间步, ∣ U ∣ |U| ∣U∣为某个玩个单元内的速度矢量的模, δ x \delta x δx为速度方向的网格长度
根据最大速度和最小网格尺寸来计算库朗数,在保证其小于1的前提下指定时间步。网格大小为:
δ
x
=
d
n
=
0.1
20
=
0.005
m
\delta x = \frac{d}{n} = \frac{0.1}{20} = 0.005m
δx=nd=200.1=0.005m
n为网格大小,为了使库朗数在整个流体域都小于或等于1。时间步必须小于或等于:
δ
t
=
C
o
δ
x
∣
U
∣
=
1
∗
0.005
1
=
0.005
s
\delta t = \frac{Co \delta x}{|U|} = \frac{1*0.005}{1} = 0.005s
δt=∣U∣Coδx=11∗0.005=0.005s
# 清理时间步的命令
foamListTimes -rm
通过水的流速场可以看出水的运动状态(只运行了10S的,并且网格细分为60 * 60 * 1,运动粘度改为水的运动粘度 1 0 − 6 10^{-6} 10−6)
/0下的文件夹
p是压力场 U是流速场
文件P的单位
m
2
/
s
2
m^2/s^{2}
m2/s2(运动压力):
文件U的单位
m
/
s
m/s
m/s(流速):
dimensions为单位:中括号中的七个值对应下面表格七个值。
mol:摩尔应用于计算微粒的数量、物质的质量、气体的体积、溶液的浓度、但应过程的热量变化等。
内部均值场:设置为0(在压力场下内部压力设置为0,速度场则内部速度为0)