mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: overPotentialFoam: Make consistent. see #1749.
- createFields extends potentialFoam - (so registers 'p' field, same as potentialFoam) - writephi is optional as in potentialFoam
This commit is contained in:
@ -1,125 +1,4 @@
|
|||||||
Info<< "Reading velocity field U\n" << endl;
|
#include "../createFields.H"
|
||||||
volVectorField U
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"U",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::MUST_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
mesh
|
|
||||||
);
|
|
||||||
|
|
||||||
// Initialise the velocity internal field to zero
|
|
||||||
U = dimensionedVector(U.dimensions(), Zero);
|
|
||||||
|
|
||||||
surfaceScalarField phi
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"phi",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
fvc::flux(U)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (args.found("initialiseUBCs"))
|
|
||||||
{
|
|
||||||
U.correctBoundaryConditions();
|
|
||||||
phi = fvc::flux(U);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Construct a pressure field
|
|
||||||
// If it is available read it otherwise construct from the velocity BCs
|
|
||||||
// converting fixed-value BCs to zero-gradient and vice versa.
|
|
||||||
|
|
||||||
// Allow override from command-line -pName option
|
|
||||||
const word pName = args.getOrDefault<word>("pName", "p");
|
|
||||||
|
|
||||||
// Infer the pressure BCs from the velocity
|
|
||||||
wordList pBCTypes
|
|
||||||
(
|
|
||||||
U.boundaryField().size(),
|
|
||||||
fixedValueFvPatchScalarField::typeName
|
|
||||||
);
|
|
||||||
|
|
||||||
forAll(U.boundaryField(), patchi)
|
|
||||||
{
|
|
||||||
if (U.boundaryField()[patchi].fixesValue())
|
|
||||||
{
|
|
||||||
pBCTypes[patchi] = zeroGradientFvPatchScalarField::typeName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note that registerObject is false for the pressure field. The pressure
|
|
||||||
// field in this solver doesn't have a physical value during the solution.
|
|
||||||
// It shouldn't be looked up and used by sub models or boundary conditions.
|
|
||||||
Info<< "Constructing pressure field " << pName << nl << endl;
|
|
||||||
volScalarField p
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
pName,
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar(sqr(dimVelocity), Zero),
|
|
||||||
pBCTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
// Infer the velocity potential BCs from the pressure
|
|
||||||
wordList PhiBCTypes
|
|
||||||
(
|
|
||||||
p.boundaryField().size(),
|
|
||||||
zeroGradientFvPatchScalarField::typeName
|
|
||||||
);
|
|
||||||
|
|
||||||
forAll(p.boundaryField(), patchi)
|
|
||||||
{
|
|
||||||
if (p.boundaryField()[patchi].fixesValue())
|
|
||||||
{
|
|
||||||
PhiBCTypes[patchi] = fixedValueFvPatchScalarField::typeName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< "Constructing velocity potential field Phi\n" << endl;
|
|
||||||
volScalarField Phi
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"Phi",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar(dimLength*dimVelocity, Zero),
|
|
||||||
PhiBCTypes
|
|
||||||
);
|
|
||||||
|
|
||||||
label PhiRefCell = 0;
|
|
||||||
scalar PhiRefValue = 0;
|
|
||||||
setRefCell
|
|
||||||
(
|
|
||||||
Phi,
|
|
||||||
potentialFlow.dict(),
|
|
||||||
PhiRefCell,
|
|
||||||
PhiRefValue
|
|
||||||
);
|
|
||||||
mesh.setFluxRequired(Phi.name());
|
|
||||||
|
|
||||||
#include "createMRF.H"
|
|
||||||
|
|
||||||
// Add solver-specific interpolations
|
// Add solver-specific interpolations
|
||||||
{
|
{
|
||||||
|
|||||||
@ -83,6 +83,7 @@ Description
|
|||||||
\heading Options
|
\heading Options
|
||||||
\plaintable
|
\plaintable
|
||||||
-writep | write the Euler pressure
|
-writep | write the Euler pressure
|
||||||
|
-writephi | Write the final volumetric flux
|
||||||
-writePhi | Write the final velocity potential
|
-writePhi | Write the final velocity potential
|
||||||
-initialiseUBCs | Update the velocity boundaries before solving for Phi
|
-initialiseUBCs | Update the velocity boundaries before solving for Phi
|
||||||
\endplaintable
|
\endplaintable
|
||||||
@ -117,6 +118,12 @@ int main(int argc, char *argv[])
|
|||||||
"Initialise U boundary conditions"
|
"Initialise U boundary conditions"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"writephi",
|
||||||
|
"Write the final volumetric flux field"
|
||||||
|
);
|
||||||
|
|
||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
"writePhi",
|
"writePhi",
|
||||||
@ -135,6 +142,8 @@ int main(int argc, char *argv[])
|
|||||||
"Execute functionObjects"
|
"Execute functionObjects"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#include "addRegionOption.H"
|
||||||
|
#include "addCheckCaseOptions.H"
|
||||||
#include "setRootCaseLists.H"
|
#include "setRootCaseLists.H"
|
||||||
#include "createTime.H"
|
#include "createTime.H"
|
||||||
#include "createNamedDynamicFvMesh.H"
|
#include "createNamedDynamicFvMesh.H"
|
||||||
@ -194,11 +203,16 @@ int main(int argc, char *argv[])
|
|||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write U and phi
|
// Write U
|
||||||
U.write();
|
U.write();
|
||||||
phi.write();
|
|
||||||
|
|
||||||
// Optionally write Phi
|
// Optionally write the volumetric flux, phi
|
||||||
|
if (args.found("writephi"))
|
||||||
|
{
|
||||||
|
phi.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optionally write velocity potential, Phi
|
||||||
if (args.found("writePhi"))
|
if (args.found("writePhi"))
|
||||||
{
|
{
|
||||||
Phi.write();
|
Phi.write();
|
||||||
|
|||||||
Reference in New Issue
Block a user