代码实现?



  • 0_1509074884146_b03ef296-471c-461c-8af0-bf8d0a5bba73-image.png 图中的式子,我想加在能量方程里,代码该怎么实现?(我还是一个编程菜鸟,不太会编程,希望有人可以帮我一下)



  • OpenFOAM中有考虑粘性耗散项的求解器吗?或者考虑粘耗散的算例?



  • 你这个不是粘性耗散吧?这个方程可以实现,首先对速度求梯度然后提取左下角和右下角分量处理(公式6:http://dyfluid.com/tensor.html

    volTensorField gradU("gradU", fvc::grad(U));
    scalarField parU1 = gradU.xz();
    scalarField parU2 = gradU.zz();
    

    类似这种代码。不过感觉不是很符合物理。这个方程怎么推导出来的?



  • @李东岳 0_1509358905628_2bee5e4f-b581-4df2-98f4-7b42d6bab82d-image.png 这个公式里的最后一项应该是粘性耗散热吧?如果用这个编程0_1509359897951_e66d70a2-d093-425d-9c3f-a85a3f455f3d-image.png ,该怎么实现呢?是不是和这一项是一致的?0_1509359679643_6b623214-0d2f-47a7-a4c5-c346ead08b81-image.png 我研究的模型中,速度在x和y方向的变化很小,忽略以后就是那样的了。(东岳老师给的链接页面不存在了)



  • 在OpenFOAM里面替代文字
    被省略了,如果你要植入的话:

    volTensorField tauU("tauU", tau & U);
    volVectorField unknown("unknown", fvc::div(tauU));
    

    植入这一项打算对比收敛性或者准确性?



  • @李东岳 东岳老师

    volVectorField unknown("unknown", fvc::div(tauU));
    

    这个是不是应该改成

    volScalarField unknown("unknown", fvc::div(tauU));
    

    这一项应该是个标量场?



  • tauU是二阶张量,做div后是矢量



  • @李东岳 这里的tau是μgrad(U)吗?(μ是动力粘度),还是可以在OpenFoam里调用的?



  • tau是$\tau$,需要用Bousinessq假定来计算,参考 http://47.93.231.95/doku.php#boussinesq_approximation



  • @李东岳 请问tau如下定义可以吗?

    volTensorField tau("tau", muEff*(dev2(gradU.T()) + gradU));
    

    因为
    \begin{equation}
    dev2((\nabla u)^{T})=(\nabla u)^{T} - \frac{2}{3}tr((\nabla u)^{T})I = (\nabla u)^{T} - \frac{2}{3}(\nabla . u) I
    \end{equation}
    所以
    \begin{equation}
    \tau = \mu (dev2((\nabla u)^T) + \nabla u)
    \end{equation}



  • @izumi tau应该是这样定义的



  • @izumi
    不建议这么实现,参考rhoCentralFoam的实现,应该是把转置项显式离散,非转置项按laplacian隐式离散。

    因为OF本身的限制,转置项会有各个分量间的耦合,所以必须显式离散,非转置项不用。

    隐式的部分越多,时间步限制通常也越弱一些,所以OF一般实践上喜欢把粘性项拆拆拆之后尽可能多地采用隐式离散。实在不能隐式离散的源项、交叉项才用显式离散。

    参考:https://chengdi123000.github.io/2018/01/05/rhoCentralFoam解析/#粘性应力项



  • @程迪
    谢谢!看rhoCentralFoam时没看懂,看了你的链接清楚一些了。
    我主要是想在能量方程中添加$\nabla \cdot(\tau \cdot u)$,然后计算耗散函数$\tau:(\frac12(\nabla u + (\nabla u)^T))$。
    根据CFD中的能量方程,$\nabla \cdot(\tau \cdot u)$好像没法展开成可以隐式离散的项。
    看rhoCentralFoam中的能量方程,除时间项外,用的都是显式离散。所以,对于能量方程来说,是不是不必拆项并使用隐式格式?
    至于动量方程中的$\nabla \cdot \tau$,对于一般的求解器,应该是包含在UEqn.H里的turbulence->divDevRhoReff(U)吧,不用我们自己定义。

    rhoCentralFoam中的能量方程:

    surfaceScalarField sigmaDotU
            (
                "sigmaDotU",
                (
                    fvc::interpolate(muEff)*mesh.magSf()*fvc::snGrad(U)
                  + fvc::dotInterpolate(mesh.Sf(), tauMC)
                )
              & (a_pos*U_pos + a_neg*U_neg)
            );
    
            solve
            (
                fvm::ddt(rhoE)
              + fvc::div(phiEp)
              - fvc::div(sigmaDotU)
            );
    


  • @izumi
    我的理解是,拆项的话你得把phiEpsigmaDotU表示成rhoE的函数才行,这似乎有点儿困难吧。。



  • @程迪
    rhoE应该是$\frac{\partial \rho e}{\partial t} + \frac{\partial \rho K}{\partial t}$
    phiEp应该是$\nabla \cdot (\rho \mathbf{U} e)+\nabla \cdot (\rho \mathbf{U} K)+\nabla\cdot(p\mathbf{U})$
    sigmaDotU应该是$\nabla \cdot(\tau \cdot \mathbf{U})$
    感觉拆不了。

    另外,请问对定常的求解器也有时间步限制吗?如果没有的话,是不是定常的求解器中,比如buoyanySimpleFoam,就不用管隐式还是显式了?


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待