Solvers: Rationalized correctPhi
This commit is contained in:
@ -1,63 +1,11 @@
|
|||||||
if (mesh.changing())
|
CorrectPhi
|
||||||
{
|
(
|
||||||
forAll(U.boundaryField(), patchi)
|
U,
|
||||||
{
|
phi,
|
||||||
if (U.boundaryField()[patchi].fixesValue())
|
p,
|
||||||
{
|
rho,
|
||||||
U.boundaryField()[patchi].initEvaluate();
|
psi,
|
||||||
}
|
dimensionedScalar("rAUf", dimTime, 1),
|
||||||
}
|
divrhoU,
|
||||||
|
pimple
|
||||||
forAll(U.boundaryField(), patchi)
|
);
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchi].fixesValue())
|
|
||||||
{
|
|
||||||
U.boundaryField()[patchi].evaluate();
|
|
||||||
|
|
||||||
phi.boundaryField()[patchi] =
|
|
||||||
rho.boundaryField()[patchi]
|
|
||||||
*(
|
|
||||||
U.boundaryField()[patchi]
|
|
||||||
& mesh.Sf().boundaryField()[patchi]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
volScalarField pcorr
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pcorr",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("pcorr", p.dimensions(), 0.0),
|
|
||||||
pcorrTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
|
||||||
{
|
|
||||||
fvScalarMatrix pcorrEqn
|
|
||||||
(
|
|
||||||
fvm::ddt(psi, pcorr)
|
|
||||||
+ fvc::div(phi)
|
|
||||||
- fvm::laplacian(rAUf, pcorr)
|
|
||||||
==
|
|
||||||
divrhoU
|
|
||||||
);
|
|
||||||
|
|
||||||
pcorrEqn.solve();
|
|
||||||
|
|
||||||
if (pimple.finalNonOrthogonalIter())
|
|
||||||
{
|
|
||||||
phi += pcorrEqn.flux();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -42,6 +42,7 @@ Description
|
|||||||
#include "turbulentFluidThermoModel.H"
|
#include "turbulentFluidThermoModel.H"
|
||||||
#include "bound.H"
|
#include "bound.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -58,7 +59,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "readControls.H"
|
#include "readControls.H"
|
||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "createPcorrTypes.H"
|
|
||||||
#include "createRhoUf.H"
|
#include "createRhoUf.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|||||||
@ -38,6 +38,7 @@ Description
|
|||||||
#include "psiThermo.H"
|
#include "psiThermo.H"
|
||||||
#include "turbulentFluidThermoModel.H"
|
#include "turbulentFluidThermoModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -54,7 +55,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "readControls.H"
|
#include "readControls.H"
|
||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "createPcorrTypes.H"
|
|
||||||
#include "createRhoUf.H"
|
#include "createRhoUf.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|||||||
@ -1,59 +1,11 @@
|
|||||||
if (mesh.changing())
|
CorrectPhi
|
||||||
{
|
(
|
||||||
forAll(U.boundaryField(), patchI)
|
U,
|
||||||
{
|
phi,
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
p,
|
||||||
{
|
dimensionedScalar("rAUf", dimTime, 1),
|
||||||
U.boundaryField()[patchI].initEvaluate();
|
geometricZeroField(),
|
||||||
}
|
pimple
|
||||||
}
|
);
|
||||||
|
|
||||||
forAll(U.boundaryField(), patchI)
|
#include "continuityErrs.H"
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
|
||||||
{
|
|
||||||
U.boundaryField()[patchI].evaluate();
|
|
||||||
|
|
||||||
phi.boundaryField()[patchI] =
|
|
||||||
U.boundaryField()[patchI]
|
|
||||||
& mesh.Sf().boundaryField()[patchI];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
volScalarField pcorr
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pcorr",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("pcorr", p.dimensions(), 0.0),
|
|
||||||
pcorrTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
|
||||||
{
|
|
||||||
fvScalarMatrix pcorrEqn
|
|
||||||
(
|
|
||||||
fvm::laplacian(rAUf, pcorr) == fvc::div(phi)
|
|
||||||
);
|
|
||||||
|
|
||||||
pcorrEqn.setReference(pRefCell, pRefValue);
|
|
||||||
pcorrEqn.solve();
|
|
||||||
|
|
||||||
if (pimple.finalNonOrthogonalIter())
|
|
||||||
{
|
|
||||||
phi -= pcorrEqn.flux();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "continuityErrs.H"
|
|
||||||
}
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@ Description
|
|||||||
#include "singlePhaseTransportModel.H"
|
#include "singlePhaseTransportModel.H"
|
||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -54,7 +55,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createUf.H"
|
#include "createUf.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPcorrTypes.H"
|
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@ Description
|
|||||||
#include "barotropicCompressibilityModel.H"
|
#include "barotropicCompressibilityModel.H"
|
||||||
#include "incompressibleTwoPhaseMixture.H"
|
#include "incompressibleTwoPhaseMixture.H"
|
||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -1,25 +1,4 @@
|
|||||||
if (mesh.changing())
|
correctUphiBCs(U, phi);
|
||||||
{
|
|
||||||
forAll(U.boundaryField(), patchI)
|
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
|
||||||
{
|
|
||||||
U.boundaryField()[patchI].initEvaluate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
forAll(U.boundaryField(), patchI)
|
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
|
||||||
{
|
|
||||||
U.boundaryField()[patchI].evaluate();
|
|
||||||
|
|
||||||
phi.boundaryField()[patchI] =
|
|
||||||
U.boundaryField()[patchI]
|
|
||||||
& mesh.Sf().boundaryField()[patchI];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
volScalarField pcorr
|
volScalarField pcorr
|
||||||
|
|||||||
@ -46,6 +46,7 @@ Description
|
|||||||
#include "twoPhaseMixtureThermo.H"
|
#include "twoPhaseMixtureThermo.H"
|
||||||
#include "turbulentFluidThermoModel.H"
|
#include "turbulentFluidThermoModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -63,7 +64,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createUf.H"
|
#include "createUf.H"
|
||||||
#include "readControls.H"
|
#include "readControls.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|
||||||
|
|||||||
@ -1,59 +1,13 @@
|
|||||||
if (mesh.changing())
|
CorrectPhi
|
||||||
{
|
(
|
||||||
forAll(U.boundaryField(), patchi)
|
U,
|
||||||
{
|
phi,
|
||||||
if (U.boundaryField()[patchi].fixesValue())
|
p,
|
||||||
{
|
dimensionedScalar("rAUf", dimTime/rho.dimensions(), 1),
|
||||||
U.boundaryField()[patchi].initEvaluate();
|
divU,
|
||||||
}
|
pimple
|
||||||
}
|
);
|
||||||
|
|
||||||
forAll(U.boundaryField(), patchi)
|
//***HGW phi.oldTime() = phi;
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchi].fixesValue())
|
|
||||||
{
|
|
||||||
U.boundaryField()[patchi].evaluate();
|
|
||||||
|
|
||||||
phi.boundaryField()[patchi] =
|
#include "continuityErrs.H"
|
||||||
U.boundaryField()[patchi] & mesh.Sf().boundaryField()[patchi];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
volScalarField pcorr
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pcorr",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("pcorr", p.dimensions(), 0.0),
|
|
||||||
pcorrTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
dimensionedScalar rAUf("rAUf", dimTime/rho.dimensions(), 1.0);
|
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
|
||||||
{
|
|
||||||
fvScalarMatrix pcorrEqn
|
|
||||||
(
|
|
||||||
fvm::laplacian(rAUf, pcorr) == fvc::div(phi) - divU
|
|
||||||
);
|
|
||||||
|
|
||||||
pcorrEqn.solve();
|
|
||||||
|
|
||||||
if (pimple.finalNonOrthogonalIter())
|
|
||||||
{
|
|
||||||
phi -= pcorrEqn.flux();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
phi.oldTime() = phi;
|
|
||||||
|
|
||||||
#include "continuityErrs.H"
|
|
||||||
}
|
|
||||||
|
|||||||
@ -45,6 +45,7 @@ Description
|
|||||||
#include "fvcSmooth.H"
|
#include "fvcSmooth.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -60,7 +61,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "initContinuityErrs.H"
|
#include "initContinuityErrs.H"
|
||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
#include "correctPhi.H"
|
#include "correctPhi.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialrDeltaT.H"
|
#include "setInitialrDeltaT.H"
|
||||||
|
|||||||
@ -1,40 +1,11 @@
|
|||||||
{
|
CorrectPhi
|
||||||
#include "continuityErrs.H"
|
(
|
||||||
|
U,
|
||||||
|
phi,
|
||||||
|
p_rgh,
|
||||||
|
dimensionedScalar("rAUf", dimTime/rho.dimensions(), 1),
|
||||||
|
geometricZeroField(),
|
||||||
|
pimple
|
||||||
|
);
|
||||||
|
|
||||||
volScalarField pcorr
|
#include "continuityErrs.H"
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pcorr",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("pcorr", p_rgh.dimensions(), 0.0),
|
|
||||||
pcorrTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
dimensionedScalar rAUf("rAUf", dimTime/rho.dimensions(), 1.0);
|
|
||||||
|
|
||||||
adjustPhi(phi, U, pcorr);
|
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
|
||||||
{
|
|
||||||
fvScalarMatrix pcorrEqn
|
|
||||||
(
|
|
||||||
fvm::laplacian(rAUf, pcorr) == fvc::div(phi)
|
|
||||||
);
|
|
||||||
|
|
||||||
pcorrEqn.setReference(pRefCell, pRefValue);
|
|
||||||
pcorrEqn.solve();
|
|
||||||
|
|
||||||
if (pimple.finalNonOrthogonalIter())
|
|
||||||
{
|
|
||||||
phi -= pcorrEqn.flux();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "continuityErrs.H"
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,65 +1,11 @@
|
|||||||
if (mesh.changing())
|
CorrectPhi
|
||||||
{
|
(
|
||||||
forAll(U.boundaryField(), patchI)
|
U,
|
||||||
{
|
phi,
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
p_rgh,
|
||||||
{
|
surfaceScalarField("rAUf", fvc::interpolate(rAU)),
|
||||||
U.boundaryField()[patchI].initEvaluate();
|
geometricZeroField(),
|
||||||
}
|
pimple
|
||||||
}
|
);
|
||||||
|
|
||||||
forAll(U.boundaryField(), patchI)
|
#include "continuityErrs.H"
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
|
||||||
{
|
|
||||||
U.boundaryField()[patchI].evaluate();
|
|
||||||
|
|
||||||
phi.boundaryField()[patchI] =
|
|
||||||
U.boundaryField()[patchI]
|
|
||||||
& mesh.Sf().boundaryField()[patchI];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
volScalarField pcorr
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pcorr",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("pcorr", p_rgh.dimensions(), 0.0),
|
|
||||||
pcorrTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
surfaceScalarField rAUf("rAUf", fvc::interpolate(rAU));
|
|
||||||
|
|
||||||
#ifndef divUCorr
|
|
||||||
#define divUCorr
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
|
||||||
{
|
|
||||||
fvScalarMatrix pcorrEqn
|
|
||||||
(
|
|
||||||
fvm::laplacian(rAUf, pcorr) == fvc::div(phi) divUCorr
|
|
||||||
);
|
|
||||||
|
|
||||||
pcorrEqn.setReference(pRefCell, pRefValue);
|
|
||||||
pcorrEqn.solve();
|
|
||||||
|
|
||||||
if (pimple.finalNonOrthogonalIter())
|
|
||||||
{
|
|
||||||
phi -= pcorrEqn.flux();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef divUCorr
|
|
||||||
|
|
||||||
#include "continuityErrs.H"
|
|
||||||
}
|
|
||||||
|
|||||||
@ -40,6 +40,7 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -56,7 +57,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
|
|
||||||
volScalarField rAU
|
volScalarField rAU
|
||||||
(
|
(
|
||||||
|
|||||||
@ -44,6 +44,7 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -60,7 +61,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
#include "correctPhi.H"
|
#include "correctPhi.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|||||||
@ -37,6 +37,7 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -56,7 +57,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
#include "correctPhi.H"
|
#include "correctPhi.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -46,6 +46,7 @@ Description
|
|||||||
#include "IOporosityModelList.H"
|
#include "IOporosityModelList.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -63,7 +64,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "createPorousZones.H"
|
#include "createPorousZones.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
#include "correctPhi.H"
|
#include "correctPhi.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|||||||
@ -0,0 +1,11 @@
|
|||||||
|
CorrectPhi
|
||||||
|
(
|
||||||
|
U,
|
||||||
|
phi,
|
||||||
|
p_rgh,
|
||||||
|
surfaceScalarField("rAUf", fvc::interpolate(rAU)),
|
||||||
|
divU,
|
||||||
|
pimple
|
||||||
|
);
|
||||||
|
|
||||||
|
#include "continuityErrs.H"
|
||||||
@ -50,6 +50,7 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -67,7 +68,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPcorrTypes.H"
|
|
||||||
|
|
||||||
volScalarField rAU
|
volScalarField rAU
|
||||||
(
|
(
|
||||||
@ -128,8 +128,7 @@ int main(int argc, char *argv[])
|
|||||||
// Calculate absolute flux from the mapped surface velocity
|
// Calculate absolute flux from the mapped surface velocity
|
||||||
phi = mesh.Sf() & Uf;
|
phi = mesh.Sf() & Uf;
|
||||||
|
|
||||||
#define divUCorr -divU
|
#include "correctPhi.H"
|
||||||
#include "../interFoam/interDyMFoam/correctPhi.H"
|
|
||||||
|
|
||||||
// Make the flux relative to the mesh motion
|
// Make the flux relative to the mesh motion
|
||||||
fvc::makeRelative(phi, U);
|
fvc::makeRelative(phi, U);
|
||||||
|
|||||||
@ -65,7 +65,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|
||||||
|
|||||||
@ -1,38 +1,11 @@
|
|||||||
{
|
CorrectPhi
|
||||||
#include "continuityErrs.H"
|
(
|
||||||
|
U,
|
||||||
|
phi,
|
||||||
|
p,
|
||||||
|
dimensionedScalar("rAUf", dimTime/rho.dimensions(), 1),
|
||||||
|
geometricZeroField(),
|
||||||
|
pimple
|
||||||
|
);
|
||||||
|
|
||||||
volScalarField pcorr
|
#include "continuityErrs.H"
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pcorr",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("pcorr", p.dimensions(), 0.0),
|
|
||||||
pcorrTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
dimensionedScalar rAUf("rAUf", dimTime/rho.dimensions(), 1.0);
|
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
|
||||||
{
|
|
||||||
fvScalarMatrix pcorrEqn
|
|
||||||
(
|
|
||||||
fvm::laplacian(rAUf, pcorr) == fvc::div(phi)
|
|
||||||
);
|
|
||||||
|
|
||||||
pcorrEqn.setReference(pRefCell, pRefValue);
|
|
||||||
pcorrEqn.solve();
|
|
||||||
|
|
||||||
if (pimple.finalNonOrthogonalIter())
|
|
||||||
{
|
|
||||||
phi -= pcorrEqn.flux();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "continuityErrs.H"
|
|
||||||
}
|
|
||||||
|
|||||||
@ -39,9 +39,9 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "IOMRFZoneList.H"
|
#include "IOMRFZoneList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@ -57,7 +57,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createMRFZones.H"
|
#include "createMRFZones.H"
|
||||||
#include "initContinuityErrs.H"
|
#include "initContinuityErrs.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPcorrTypes.H"
|
|
||||||
#include "correctPhi.H"
|
#include "correctPhi.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|||||||
@ -38,6 +38,7 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -54,7 +55,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
|
|
||||||
volScalarField rAU
|
volScalarField rAU
|
||||||
(
|
(
|
||||||
|
|||||||
@ -37,6 +37,7 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -53,7 +54,6 @@ int main(int argc, char *argv[])
|
|||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "readTimeControls.H"
|
#include "readTimeControls.H"
|
||||||
#include "createPrghCorrTypes.H"
|
|
||||||
#include "correctPhi.H"
|
#include "correctPhi.H"
|
||||||
#include "CourantNo.H"
|
#include "CourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|||||||
@ -1,58 +1,11 @@
|
|||||||
if (mesh.changing())
|
CorrectPhi
|
||||||
{
|
(
|
||||||
forAll(U.boundaryField(), patchI)
|
U,
|
||||||
{
|
phi,
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
p_gh,
|
||||||
{
|
surfaceScalarField("rAUf", fvc::interpolate(rAU)),
|
||||||
U.boundaryField()[patchI].initEvaluate();
|
geometricZeroField(),
|
||||||
}
|
pimple
|
||||||
}
|
);
|
||||||
|
|
||||||
forAll(U.boundaryField(), patchI)
|
#include "continuityErrs.H"
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchI].fixesValue())
|
|
||||||
{
|
|
||||||
U.boundaryField()[patchI].evaluate();
|
|
||||||
|
|
||||||
phi.boundaryField()[patchI] =
|
|
||||||
U.boundaryField()[patchI]
|
|
||||||
& mesh.Sf().boundaryField()[patchI];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
volScalarField pcorr
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pcorr",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("pcorr", p_gh.dimensions(), 0.0),
|
|
||||||
pcorrTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
surfaceScalarField rAUf("rAUf", fvc::interpolate(rAU));
|
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
|
||||||
{
|
|
||||||
fvScalarMatrix pcorrEqn
|
|
||||||
(
|
|
||||||
fvm::laplacian(rAUf, pcorr) == fvc::div(phi)
|
|
||||||
);
|
|
||||||
|
|
||||||
pcorrEqn.solve();
|
|
||||||
|
|
||||||
if (pimple.finalNonOrthogonalIter())
|
|
||||||
{
|
|
||||||
phi -= pcorrEqn.flux();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "continuityErrs.H"
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,13 +0,0 @@
|
|||||||
wordList pcorrTypes
|
|
||||||
(
|
|
||||||
p_gh.boundaryField().size(),
|
|
||||||
zeroGradientFvPatchScalarField::typeName
|
|
||||||
);
|
|
||||||
|
|
||||||
for (label i=0; i<p_gh.boundaryField().size(); i++)
|
|
||||||
{
|
|
||||||
if (p_gh.boundaryField()[i].fixesValue())
|
|
||||||
{
|
|
||||||
pcorrTypes[i] = fixedValueFvPatchScalarField::typeName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -43,6 +43,7 @@ Description
|
|||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "pimpleControl.H"
|
#include "pimpleControl.H"
|
||||||
#include "fvIOoptionList.H"
|
#include "fvIOoptionList.H"
|
||||||
|
#include "CorrectPhi.H"
|
||||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -58,7 +59,6 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
#include "createPghCorrTypes.H"
|
|
||||||
|
|
||||||
volScalarField rAU
|
volScalarField rAU
|
||||||
(
|
(
|
||||||
|
|||||||
@ -392,6 +392,7 @@ general = cfdTools/general
|
|||||||
$(general)/findRefCell/findRefCell.C
|
$(general)/findRefCell/findRefCell.C
|
||||||
$(general)/adjustPhi/adjustPhi.C
|
$(general)/adjustPhi/adjustPhi.C
|
||||||
$(general)/bound/bound.C
|
$(general)/bound/bound.C
|
||||||
|
$(general)/CorrectPhi/correctUphiBCs.C
|
||||||
|
|
||||||
solutionControl = $(general)/solutionControl
|
solutionControl = $(general)/solutionControl
|
||||||
$(solutionControl)/solutionControl/solutionControl.C
|
$(solutionControl)/solutionControl/solutionControl.C
|
||||||
|
|||||||
176
src/finiteVolume/cfdTools/general/CorrectPhi/CorrectPhi.C
Normal file
176
src/finiteVolume/cfdTools/general/CorrectPhi/CorrectPhi.C
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "CorrectPhi.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "surfaceFields.H"
|
||||||
|
#include "fvScalarMatrix.H"
|
||||||
|
#include "fvmDdt.H"
|
||||||
|
#include "fvmLaplacian.H"
|
||||||
|
#include "fvcDiv.H"
|
||||||
|
#include "fixedValueFvPatchFields.H"
|
||||||
|
#include "adjustPhi.H"
|
||||||
|
#include "pimpleControl.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class RAUfType, class DivUType>
|
||||||
|
void Foam::CorrectPhi
|
||||||
|
(
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi,
|
||||||
|
const volScalarField& p,
|
||||||
|
const RAUfType& rAUf,
|
||||||
|
const DivUType& divU,
|
||||||
|
pimpleControl& pimple
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = U.mesh();
|
||||||
|
const Time& runTime = mesh.time();
|
||||||
|
|
||||||
|
correctUphiBCs(U, phi);
|
||||||
|
|
||||||
|
// Initialize BCs list for pcorr to zero-gradient
|
||||||
|
wordList pcorrTypes
|
||||||
|
(
|
||||||
|
p.boundaryField().size(),
|
||||||
|
zeroGradientFvPatchScalarField::typeName
|
||||||
|
);
|
||||||
|
|
||||||
|
// Set BCs of pcorr to fixed-value for patches at which p is fixed
|
||||||
|
forAll(p.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
if (p.boundaryField()[patchi].fixesValue())
|
||||||
|
{
|
||||||
|
pcorrTypes[patchi] = fixedValueFvPatchScalarField::typeName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
volScalarField pcorr
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"pcorr",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar("pcorr", p.dimensions(), 0.0),
|
||||||
|
pcorrTypes
|
||||||
|
);
|
||||||
|
|
||||||
|
adjustPhi(phi, U, pcorr);
|
||||||
|
|
||||||
|
while (pimple.correctNonOrthogonal())
|
||||||
|
{
|
||||||
|
// Solve for pcorr such that the divergence of the corrected flux
|
||||||
|
// matches the divU provided (from previous iteration, time-step...)
|
||||||
|
fvScalarMatrix pcorrEqn
|
||||||
|
(
|
||||||
|
fvm::laplacian(rAUf, pcorr) == fvc::div(phi) - divU
|
||||||
|
);
|
||||||
|
|
||||||
|
pcorrEqn.setReference(0, 0);
|
||||||
|
pcorrEqn.solve();
|
||||||
|
|
||||||
|
if (pimple.finalNonOrthogonalIter())
|
||||||
|
{
|
||||||
|
phi -= pcorrEqn.flux();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class RAUfType, class DivRhoUType>
|
||||||
|
void Foam::CorrectPhi
|
||||||
|
(
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi,
|
||||||
|
const volScalarField& p,
|
||||||
|
const volScalarField& rho,
|
||||||
|
const volScalarField& psi,
|
||||||
|
const RAUfType& rAUf,
|
||||||
|
const DivRhoUType& divRhoU,
|
||||||
|
pimpleControl& pimple
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = U.mesh();
|
||||||
|
const Time& runTime = mesh.time();
|
||||||
|
|
||||||
|
correctUphiBCs(rho, U, phi);
|
||||||
|
|
||||||
|
// Initialize BCs list for pcorr to zero-gradient
|
||||||
|
wordList pcorrTypes
|
||||||
|
(
|
||||||
|
p.boundaryField().size(),
|
||||||
|
zeroGradientFvPatchScalarField::typeName
|
||||||
|
);
|
||||||
|
|
||||||
|
// Set BCs of pcorr to fixed-value for patches at which p is fixed
|
||||||
|
forAll(p.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
if (p.boundaryField()[patchi].fixesValue())
|
||||||
|
{
|
||||||
|
pcorrTypes[patchi] = fixedValueFvPatchScalarField::typeName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
volScalarField pcorr
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"pcorr",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar("pcorr", p.dimensions(), 0.0),
|
||||||
|
pcorrTypes
|
||||||
|
);
|
||||||
|
|
||||||
|
while (pimple.correctNonOrthogonal())
|
||||||
|
{
|
||||||
|
// Solve for pcorr such that the divergence of the corrected flux
|
||||||
|
// matches the divRhoU provided (from previous iteration, time-step...)
|
||||||
|
fvScalarMatrix pcorrEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(psi, pcorr)
|
||||||
|
+ fvc::div(phi)
|
||||||
|
- fvm::laplacian(rAUf, pcorr)
|
||||||
|
==
|
||||||
|
divRhoU
|
||||||
|
);
|
||||||
|
|
||||||
|
pcorrEqn.solve();
|
||||||
|
|
||||||
|
if (pimple.finalNonOrthogonalIter())
|
||||||
|
{
|
||||||
|
phi += pcorrEqn.flux();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
105
src/finiteVolume/cfdTools/general/CorrectPhi/CorrectPhi.H
Normal file
105
src/finiteVolume/cfdTools/general/CorrectPhi/CorrectPhi.H
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::CorrectPhi
|
||||||
|
|
||||||
|
Description
|
||||||
|
Flux correction functions to ensure continuity.
|
||||||
|
|
||||||
|
Required during start-up, restart, mesh-motion etc. when non-conservative
|
||||||
|
fluxes may adversely affect the prediction-part of the solution algorithm
|
||||||
|
(the part before the first pressure solution which would ensure continuity).
|
||||||
|
This is particularly important for VoF and other multi-phase solver in
|
||||||
|
which non-conservative fluxes cause unboundedness of the phase-fraction.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
CorrectPhi.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef CorrectPhi_H
|
||||||
|
#define CorrectPhi_H
|
||||||
|
|
||||||
|
#include "volFieldsFwd.H"
|
||||||
|
#include "surfaceFieldsFwd.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
class pimpleControl;
|
||||||
|
|
||||||
|
//- If the mesh is moving correct the velocity BCs on the moving walls to
|
||||||
|
// ensure the corrected fluxes and velocity are consistent
|
||||||
|
void correctUphiBCs
|
||||||
|
(
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi
|
||||||
|
);
|
||||||
|
|
||||||
|
//- If the mesh is moving correct the velocity BCs on the moving walls to
|
||||||
|
// ensure the corrected fluxes and velocity are consistent
|
||||||
|
void correctUphiBCs
|
||||||
|
(
|
||||||
|
const volScalarField& rho,
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class RAUfType, class DivUType>
|
||||||
|
void CorrectPhi
|
||||||
|
(
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi,
|
||||||
|
const volScalarField& p,
|
||||||
|
const RAUfType& rAUf,
|
||||||
|
const DivUType& divU,
|
||||||
|
pimpleControl& pimple
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class RAUfType, class DivRhoUType>
|
||||||
|
void CorrectPhi
|
||||||
|
(
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi,
|
||||||
|
const volScalarField& p,
|
||||||
|
const volScalarField& rho,
|
||||||
|
const volScalarField& psi,
|
||||||
|
const RAUfType& rAUf,
|
||||||
|
const DivRhoUType& divRhoU,
|
||||||
|
pimpleControl& pimple
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "CorrectPhi.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
100
src/finiteVolume/cfdTools/general/CorrectPhi/correctUphiBCs.C
Normal file
100
src/finiteVolume/cfdTools/general/CorrectPhi/correctUphiBCs.C
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "CorrectPhi.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::correctUphiBCs
|
||||||
|
(
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = U.mesh();
|
||||||
|
|
||||||
|
if (mesh.changing())
|
||||||
|
{
|
||||||
|
forAll(U.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
if (U.boundaryField()[patchi].fixesValue())
|
||||||
|
{
|
||||||
|
U.boundaryField()[patchi].initEvaluate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(U.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
if (U.boundaryField()[patchi].fixesValue())
|
||||||
|
{
|
||||||
|
U.boundaryField()[patchi].evaluate();
|
||||||
|
|
||||||
|
phi.boundaryField()[patchi] =
|
||||||
|
U.boundaryField()[patchi]
|
||||||
|
& mesh.Sf().boundaryField()[patchi];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::correctUphiBCs
|
||||||
|
(
|
||||||
|
const volScalarField& rho,
|
||||||
|
volVectorField& U,
|
||||||
|
surfaceScalarField& phi
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = U.mesh();
|
||||||
|
|
||||||
|
if (mesh.changing())
|
||||||
|
{
|
||||||
|
forAll(U.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
if (U.boundaryField()[patchi].fixesValue())
|
||||||
|
{
|
||||||
|
U.boundaryField()[patchi].initEvaluate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(U.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
if (U.boundaryField()[patchi].fixesValue())
|
||||||
|
{
|
||||||
|
U.boundaryField()[patchi].evaluate();
|
||||||
|
|
||||||
|
phi.boundaryField()[patchi] =
|
||||||
|
rho.boundaryField()[patchi]
|
||||||
|
*(
|
||||||
|
U.boundaryField()[patchi]
|
||||||
|
& mesh.Sf().boundaryField()[patchi]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -1,13 +0,0 @@
|
|||||||
wordList pcorrTypes
|
|
||||||
(
|
|
||||||
p_rgh.boundaryField().size(),
|
|
||||||
zeroGradientFvPatchScalarField::typeName
|
|
||||||
);
|
|
||||||
|
|
||||||
for (label i=0; i<p_rgh.boundaryField().size(); i++)
|
|
||||||
{
|
|
||||||
if (p_rgh.boundaryField()[i].fixesValue())
|
|
||||||
{
|
|
||||||
pcorrTypes[i] = fixedValueFvPatchScalarField::typeName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user