CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    微分公式OpenFOAM编程

    OpenFOAM
    2
    3
    780
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • S
      Samuel-Tu 最后由 编辑

      遇到一个不是那么常规的微分公式,请大家帮忙看看我编的程序对不对。
      数学公式如下

      $\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)
      
      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 编辑

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

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

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

        线上CFD课程开始报名:http://www.dyfluid.com/class.html

        CFD高性能服务器 http://dyfluid.com/servers.html

        S 1 条回复 最后回复 回复 引用
        • S
          Samuel-Tu @李东岳 最后由 编辑

          @东岳 在 微分公式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: 。。

          1 条回复 最后回复 回复 引用
          • First post
            Last post