Loading...
Searching...
No Matches
pcEqn.H
Go to the documentation of this file.
1rho = thermo.rho();
2
3volScalarField rAU(1.0 / Ueqn.A());
4volScalarField rAtU(1.0 / (1.0 / rAU - Ueqn.H1()));
5volVectorField HbyA(constrainHbyA(rAU* Ueqn.H(), U, p));
6//volScalarField rAU(1.0/Ueqn_global->A()); // For the new "getUmatrix" formulation
7//volScalarField rAtU(1.0/(1.0/rAU - Ueqn_global->H1())); // For the new "getUmatrix" formulation
8//volVectorField HbyA(constrainHbyA(rAU*Ueqn_global->H(), U, p)); // For the new "getUmatrix" formulation
9//tUEqn.clear();
10
11bool closedVolume = false;
12
13surfaceScalarField phiHbyA("phiHbyA", fvc::interpolate(rho)*fvc::flux(HbyA));
14MRF.makeRelative(fvc::interpolate(rho), phiHbyA);
15
16volScalarField rhorAtU("rhorAtU", rho* rAtU);
17
18// Update the pressure BCs to ensure flux consistency
20
21if (simple.transonic())
22{
23 surfaceScalarField phid
24 (
25 "phid",
26 (fvc::interpolate(psi) / fvc::interpolate(rho))*phiHbyA
27 );
28 phiHbyA +=
29 fvc::interpolate(rho * (rAtU - rAU)) * fvc::snGrad(p) * mesh.magSf()
30 - fvc::interpolate(psi * p) * phiHbyA / fvc::interpolate(rho);
31 HbyA -= (rAU - rAtU) * fvc::grad(p);
32
33 while (simple.correctNonOrthogonal())
34 {
35 fvScalarMatrix pEqn
36 (
37 fvc::div(phiHbyA)
38 + fvm::div(phid, p)
39 - fvm::laplacian(rhorAtU, p)
40 ==
41 fvOptions(psi, p, rho.name())
42 );
43 // Relax the pressure equation to maintain diagonal dominance
44 pEqn.relax();
45 pEqn.setReference
46 (
47 pressureControl.refCell(),
48 pressureControl.refValue()
49 );
50 presidual = pEqn.solve().initialResidual();
51
52 if (simple.finalNonOrthogonalIter())
53 {
54 phi = phiHbyA + pEqn.flux();
55 }
56 }
57}
58else
59{
61 phiHbyA += fvc::interpolate(rho * (rAtU - rAU)) * fvc::snGrad(p) * mesh.magSf();
62 HbyA -= (rAU - rAtU) * fvc::grad(p);
63
64 while (simple.correctNonOrthogonal())
65 {
66 fvScalarMatrix pEqn
67 (
68 fvc::div(phiHbyA)
69 - fvm::laplacian(rhorAtU, p)
70 ==
71 fvOptions(psi, p, rho.name())
72 );
73 pEqn.setReference
74 (
75 pressureControl.refCell(),
76 pressureControl.refValue()
77 );
78 presidual = pEqn.solve().initialResidual();
79
80 if (simple.finalNonOrthogonalIter())
81 {
82 phi = phiHbyA + pEqn.flux();
83 }
84 }
85}
86
87// The incompressibe form of the continuity error check is appropriate for
88// steady-state compressible also.
89#include "incompressible/continuityErrs.H"
90
91// Explicitly relax pressure for momentum corrector
92p.relax();
93
94U = HbyA - rAtU * fvc::grad(p);
95U.correctBoundaryConditions();
96fvOptions.correct(U);
97
99
100// For closed-volume cases adjust the pressure and density levels
101// to obey overall mass continuity
103{
104 p += (initialMass - fvc::domainIntegrate(psi * p))
105 / fvc::domainIntegrate(psi);
106}
107
109{
110 p.correctBoundaryConditions();
111}
112
113rho = thermo.rho();
114
115if (!simple.transonic())
116{
117 rho.relax();
118}
Foam::fvMesh & mesh
Definition createMesh.H:47
fv::options & fvOptions
Definition NLsolve.H:25
dimensionedScalar & initialMass
Definition NLsolve.H:32
bool closedVolume
Definition NLsolve.H:33
volScalarField & psi
Definition NLsolve.H:29
scalar presidual
Definition NLsolve.H:38
pressureControl & pressureControl
Definition NLsolve.H:30
fvScalarMatrix pEqn
Definition CFM.H:31
volScalarField rAtU(1.0/(1.0/rAU - Ueqn.H1()))
volScalarField rhorAtU("rhorAtU", rho *rAtU)
volScalarField rAU(1.0/Ueqn.A())
constrainPressure(p, rho, U, phiHbyA, rhorAtU, MRF)
phiHbyA
Definition pcEqn.H:61
bool pLimited
Definition pcEqn.H:98
HbyA
Definition pcEqn.H:62
simpleControl simple(mesh)
surfaceScalarField & phi
volVectorField & U
volScalarField & p
volScalarField & rho
fluidThermo & thermo
adjustPhi(phiHbyA, U, p)