重新看icoFoam



  • 今天重新看OpenFOAM中的icoFoam求解器,有个疑问:在压力修正过程中,感觉每次求解的压力方程中的系数都没有变化。压力修正过程代码如下,压力方程中的rAU和HbyA都是从动量预测方程(UEqn)求出的,UEqn并没有随着U变化而变化,所以压力方程按理并没有发生变化,但是PISO算法中,压力方程中的系数是要随着速度的更新而更新的。那修改压力方程中系数的部分在什么地方?

             while (piso.correct())
             {
                 volScalarField rAU(1.0/UEqn.A());
                 volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
                 surfaceScalarField phiHbyA
                 (
                     "phiHbyA",
                     fvc::flux(HbyA)
                   + fvc::interpolate(rAU)*fvc::ddtCorr(U, phi)
                 );
     
                 adjustPhi(phiHbyA, U, p);
     
                 // Update the pressure BCs to ensure flux consistency
                 constrainPressure(p, U, phiHbyA, rAU);
     
                 // Non-orthogonal pressure corrector loop
                 while (piso.correctNonOrthogonal())
                 {
                     // Pressure corrector
     
                     fvScalarMatrix pEqn
                     (
                         fvm::laplacian(rAU, p) == fvc::div(phiHbyA)
                     );
     
                     pEqn.setReference(pRefCell, pRefValue);
     
                     pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
     
                     if (piso.finalNonOrthogonalIter())
                     {
                         phi = phiHbyA - pEqn.flux();
                     }
                 }
     
                 #include "continuityErrs.H"
     
                 U = HbyA - rAU*fvc::grad(p);
                 U.correctBoundaryConditions();
             }
    

  • 自由表面模型副教授 OpenFOAM教授

    @史浩 UEqn.H()是关于U的一个函数,因此每次迭代更新U以后也会更新phiHbyA



  • 没有修正压力系数。这是可以理解的因为库郎数的作用瞬态计算时间布长内的变化并没有稳态计算那么大。可以这样想:

    1. 如果修正压力系数
    2. 如果每次求解一次压力、更新一次速度

    你就变成了SIMPLE


 

Forest
Mountains