微分公式OpenFOAM编程
-
遇到一个不是那么常规的微分公式,请大家帮忙看看我编的程序对不对。
数学公式如下$\frac{\partial \beta u_i}{\partial x_i}+\frac{\partial w \beta }{\partial x_3} =0 \qquad \qquad(1) $
其中$\beta$为代求的标量场,$\vec u$为已知速度场,$w$就是一个已知标量,例如$w=0.2$。左边第二项式$\frac{\partial w \beta }{\partial x_3}$只是向$x_3$方向的导数,OpenFOAM里面没有直接能够表这一项的,因此我做了如下转换:
$\frac{\partial w \beta }{\partial x_3}=0\frac{\partial \beta }{\partial x_1}+0\frac{\partial \beta }{\partial x_2}+\frac{\partial w \beta }{\partial x_3}=\frac{\partial 0 \beta }{\partial x_1}+\frac{\partial 0 \beta }{\partial x_2}+\frac{\partial w \beta }{\partial x_3}=\frac{\partial \beta W_i}{\partial x_i}\qquad \qquad(2)$
其中$\vec W=vector(0,0,w)$
此时,式(1)可转化为:$\frac{\partial \beta u_i}{\partial x_i}+\frac{\partial \beta W_i }{\partial x_i} =\frac{\partial \beta (u_i+W_i)}{\partial x_i}=0 \qquad \qquad(3) $
式(3)是div的典型形式,在OF中,我是这样实现的:
#首先构造一个体心向量场 volVectorField W ( IOobject ( "W", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, dimensionedVector ( "", dimensionSet(0,1,-1,0,0,0), vector(0.0,0.0,0.2)#w=0.2 ) ); W+=U; #W+U,速度场已知 surfaceScalarField phiW ( "phiW", fvc::flux(W) ); #方程可写为: fvm::div(phiW, beta)