微分公式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)
    


  • 左边第二项式$\frac{\partial w \beta }{\partial x_3}$只是向$x_3$方向的导数,

    为何不对$w \beta$求梯度然后获取$x_3$方向的分量?

    volVectorField t = fvc::grad(wbeta);
    volScalarField t2 = t.component(2);
    


  • @东岳微分公式OpenFOAM编程 中说:

    volVectorField t = fvc::grad(wbeta);
    volScalarField t2 = t.component(2);

    我有试过求梯度,再求分量,通过源项的方式加入微分方程中:

    volVectorField t = fvc::grad(wbeta);
    volScalarField t2 = t.component(2);
    fvm::div(phi, beta)==-fvc::su(t2, beta);
    

    这样可以吗:134: 。。


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2