-div(phi,T) 和div(-phi,T)结果为何不同?



  • 各位前辈,我在做拓扑优化,里面求解伴随温度的方程如下:

    fvScalarMatrix TtEqn
    (
        fvm::div(-phi,Tt)
      + Tt*fvc::div(-U)
      + fvm::laplacian(-ka,Tt)
    );
    
    TtEqn.relax();
    TtEqn.solve();
    

    Tt 在inlet 和wall 是fixedValue 0,在outlet是定制的边界条件,通过计算得到。
    结算结果在靠近inlet第一层网格莫名升高,如下图:
    0_1532543739887_d3f3c04f-5f3b-498d-a58a-3a8f1541d865-image.png

    如果把 div(-phi,T)换成 -div(phi,T),会出现栅格分布,如下图:
    0_1532543614673_7c12b2a0-ea1e-4db3-b821-da1f4d7e58dc-image.png

    貌似div(-phi,T)是从下有获得信息,逐步向前更新,-div(phi,T)是从上有更新信息。
    为何结果会如此不同?



  • 貌似div(-phi,T)是从下游获得信息,逐步向前更新,-div(phi,T)是从上有更新信息。

    你理解的非常正确。你应该是用了迎风格式。div(-phi,T)+迎风等于下风格式,是从下游获取信息。-div(phi,T)就是减去上游的信息。下风格式压缩性非常厉害,过分的使用会导致非常不稳定。



  • @东岳 改成了下面的方程,div(phi,T)采用Gauss upwind格式

    fvScalarMatrix TtEqn
    (
        fvm::div(phi,Tt)
      + Tt*fvc::div(U)
      + fvm::laplacian(ka,Tt)
    );
    
    TtEqn.relax();
    TtEqn.solve();
    

    计算结果如下:
    0_1532618120904_a763a94c-4faa-4cae-9ed8-a1f81d0ea569-image.png

    的确是从inlet开始更新,但在从壁面开始出现了严重的震荡,什么样的格式会好一些?



  • \begin{equation}
    \nabla\cdot(\bfU T)+T\nabla\cdot\bfU+\nabla\cdot(k\nabla T)
    \end{equation}
    解这个方程?你这个瞬态稳态?



  • @东岳 对是这个方程,稳态。inlet 和wall 都是fixed value 为 0。
    出口边界条件是,Tu∙n+k∇T∙n-u_n=0,我单独编写了一个出口的边界条件。



  • 方程3的第二项可以删掉么?



  • @东岳 可以删掉,这一项本来为零,疏漏了。 删掉后结果一样,在壁面处有剧烈震荡。 相对于一般温度方程,导热项前面是 “+”。



  • 你植入在了simpleFoam里面?



  • @东岳 对,我植入在simpleFoam 里面,增加了一个TEqn.H的头文件



  • fvScalarMatrix TEqn
    			(
    				fvm::div(phi, T)
    			  - fvm::laplacian(Tnu, T)
    			);
    
    			TEqn.relax();
    			TEqn.solve();
    

    我加了一下,没有任何问题?你是要植入上面的方程吧?

    0_1533081506523_2018-08-01 07-58-00屏幕截图.png



  • 楼主你好,我也准备用OpenFOAM做拓扑优化,请问可以指导与交流一下吗?谢谢



  • 这是div(phi,T)-div(phi,T)等的解释

    微信图片_20200320103052.jpg


Log in to reply