ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / applications / solvers / lagrangian / LTSReactingParcelFoam / pEqn.H
blobfcbfad3efb21d7d4e0c69296867ccc767fa45959
2     rho = thermo.rho();
4     // Thermodynamic density needs to be updated by psi*d(p) after the
5     // pressure solution - done in 2 parts. Part 1:
6     thermo.rho() -= psi*p;
8     volScalarField rAU(1.0/UEqn.A());
9     U = rAU*UEqn.H();
11     if (pZones.size() > 0)
12     {
13         // ddtPhiCorr not well defined for cases with porosity
14         phi = fvc::interpolate(rho)*(fvc::interpolate(U) & mesh.Sf());
15     }
16     else
17     {
18         phi =
19             fvc::interpolate(rho)
20            *(
21                 (fvc::interpolate(U) & mesh.Sf())
22               + fvc::ddtPhiCorr(rAU, rho, U, phi)
23             );
24     }
26     fvScalarMatrix pDDtEqn
27     (
28         fvc::ddt(rho) + psi*correction(fvm::ddt(p))
29       + fvc::div(phi)
30      ==
31         parcels.Srho()
32       + massSource.SuTot()
33     );
35     for (int nonOrth=0; nonOrth<=pimple.nNonOrthCorr(); nonOrth++)
36     {
37         fvScalarMatrix pEqn
38         (
39             pDDtEqn
40           - fvm::laplacian(rho*rAU, p)
41         );
43         pEqn.solve
44         (
45             mesh.solver(p.select(pimple.finalInnerIter(corr, nonOrth)))
46         );
48         if (nonOrth == pimple.nNonOrthCorr())
49         {
50             phi += pEqn.flux();
51         }
52     }
54     p.relax();
56     // Second part of thermodynamic density update
57     thermo.rho() += psi*p;
59     #include "rhoEqn.H" // NOTE: flux and time scales now inconsistent
60     #include "compressibleContinuityErrs.H"
62     U -= rAU*fvc::grad(p);
63     U.correctBoundaryConditions();
65     rho = thermo.rho();
66     rho = max(rho, rhoMin);
67     rho = min(rho, rhoMax);
69     #include "setPressureWork.H"
71     Info<< "p min/max = " << min(p).value() << ", " << max(p).value() << endl;