potentialFOAM代码中的几个问题求解



  • while (potentialFlow.correctNonOrthogonal())
    {
        fvScalarMatrix PhiEqn
        (
            fvm::laplacian(dimensionedScalar("1", dimless, 1), Phi)
         ==
            fvc::div(phi)//为什么此处方程的右侧是通量的散度而不是0?
        );
        PhiEqn.setReference(PhiRefCell, PhiRefValue);
        PhiEqn.solve();
    
        if (potentialFlow.finalNonOrthogonalIter())
        {
            phi -= PhiEqn.flux();//此处为什么要在当前通量的基础上减去由速度势建构出来的通量?
        }
    }
    
    MRF.makeAbsolute(phi);//此处的makeAbsolute按字面意思是取绝对值,那这个对下文中重构速度场不会产生影响么?
    
    Info<< "Continuity error = "
        << mag(fvc::div(phi))().weightedAverage(mesh.V()).value()
        << endl;
    
    U = fvc::reconstruct(phi);
    U.correctBoundaryConditions();
    

    论坛里的各位前辈,对代码中不理解的地方已经用备注说明,还请各位赐教!


  • 网格教授 OpenFOAM教授 管理员

    过几天我整理一下potentialFoam解析,顺便回答下各个问题。



  • @东岳 好的,有劳李老师了。
    另外,求解器的名字我写错了,应该是potentialFoam,抱歉。


  • 网格教授 OpenFOAM教授 管理员



  • @东岳 李老师,您好,辛苦李老师更新求解器说明。对说明中仍有一处不是很理解:

    if  (potentialFlow.finalNonOrthogonalIter())
    {
         phi -= PhiEqn.flux();
    }
    

    此处的“-=”的使用在编程语言中不是应该等效于“phi=phi-PhiEqn.flux();”么?那这与您在说明中给出的公式(3)和(6)似乎就不一致了。


  • 网格教授 OpenFOAM教授 管理员

    phi初始化为0了已经。



  • if  (potentialFlow.finalNonOrthogonalIter())
    {
         phi -= PhiEqn.flux();
    }
    

    这段我觉得倒不是因为phi被初始化了,好像上面求解的Phi方程就不是 http://dyfluid.com/potentialFoam.html 里头的方程(6),而应该是
    ▽(▽P)=▽(U-▽P)
    也就是代码中的phi=(U-▽P),这样子的话也能解释速度边界条件是怎么添加到Phi 方程中的了。但有一点不很明白,就是代码中好像表达的并不完全是phi=(U-▽P)的意思,所以还是有些糊涂。

    另,

    MRF.makeAbsolute(phi);//此处的makeAbsolute按字面意思是取绝对值,那这个对下文中重构速度场不会产生影响么?
    

    这句话应该不是取绝对值,可能用了多重坐标系,之前有个变换,现在变回来了,但不是很确定是不是这个意思
    @东岳 @张某人
    上面是我的理解,如果有不对的地方还请直接指出来,一起讨论讨论