potentialFoam: Solve for velocity potential named Phi rather than using the pressure field for this purpose

The Phi field is read if available otherwise created automatically with
boundary conditions obtained automatically from the pressure field if
available (with optional name) otherwise inferred from the velocity
field.  Phi Laplacian scheme and solver specification are required.  See
tutorials for examples.
This commit is contained in:
Henry
2015-02-14 11:03:37 +00:00
parent 2edacf0ceb
commit cdadf4865d
16 changed files with 129 additions and 98 deletions

View File

@ -1,21 +1,4 @@
Info<< "Reading field p\n" << endl;
volScalarField p
(
IOobject
(
"p",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
),
mesh
);
p = dimensionedScalar("zero", p.dimensions(), 0.0);
Info<< "Reading field U\n" << endl;
Info<< "Reading velocity field U\n" << endl;
volVectorField U
(
IOobject
@ -51,12 +34,65 @@
}
label pRefCell = 0;
scalar pRefValue = 0.0;
// Default name for the pressure field
word pName("p");
// Update name of the pressure field from the command-line option
args.optionReadIfPresent("pName", pName);
// Infer the pressure BCs from the velocity BCs
wordList pBCTypes
(
U.boundaryField().size(),
fixedValueFvPatchScalarField::typeName
);
forAll(U.boundaryField(), patchi)
{
if (U.boundaryField()[patchi].fixesValue())
{
pBCTypes[patchi] = zeroGradientFvPatchScalarField::typeName;
}
}
Info<< "Constructing pressure field " << pName << nl << endl;
volScalarField p
(
IOobject
(
pName,
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar(pName, sqr(dimVelocity), 0),
pBCTypes
);
Info<< "Constructing velocity potential field Phi\n" << endl;
volScalarField Phi
(
IOobject
(
"Phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar("Phi", dimLength*dimVelocity, 0),
p.boundaryField().types()
);
label PhiRefCell = 0;
scalar PhiRefValue = 0;
setRefCell
(
p,
potentialFlow,
pRefCell,
pRefValue
Phi,
potentialFlow.dict(),
PhiRefCell,
PhiRefValue
);