ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / applications / solvers / heatTransfer / buoyantSimpleFoam / pEqn.H
blob17bf590f2958c9df5fb4aac55953e441a830d497
2     rho = thermo.rho();
3     rho.relax();
5     volScalarField rAU(1.0/UEqn().A());
6     surfaceScalarField rhorAUf("(rho*(1|A(U)))", fvc::interpolate(rho*rAU));
8     U = rAU*UEqn().H();
9     UEqn.clear();
11     phi = fvc::interpolate(rho)*(fvc::interpolate(U) & mesh.Sf());
12     bool closedVolume = adjustPhi(phi, U, p_rgh);
14     surfaceScalarField buoyancyPhi(rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf());
15     phi -= buoyancyPhi;
17     for (int nonOrth=0; nonOrth<=simple.nNonOrthCorr(); nonOrth++)
18     {
19         fvScalarMatrix p_rghEqn
20         (
21             fvm::laplacian(rhorAUf, p_rgh) == fvc::div(phi)
22         );
24         p_rghEqn.setReference(pRefCell, getRefCellValue(p_rgh, pRefCell));
25         p_rghEqn.solve();
27         if (nonOrth == simple.nNonOrthCorr())
28         {
29             // Calculate the conservative fluxes
30             phi -= p_rghEqn.flux();
32             // Explicitly relax pressure for momentum corrector
33             p_rgh.relax();
35             // Correct the momentum source with the pressure gradient flux
36             // calculated from the relaxed pressure
37             U -= rAU*fvc::reconstruct((buoyancyPhi + p_rghEqn.flux())/rhorAUf);
38             U.correctBoundaryConditions();
39         }
40     }
42     #include "continuityErrs.H"
44     p = p_rgh + rho*gh;
46     // For closed-volume cases adjust the pressure level
47     // to obey overall mass continuity
48     if (closedVolume)
49     {
50         p += (initialMass - fvc::domainIntegrate(psi*p))
51             /fvc::domainIntegrate(psi);
52         p_rgh = p - rho*gh;
53     }
55     rho = thermo.rho();
56     rho.relax();
57     Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value()
58         << endl;