openfoam/tutorials/compressible/rhoPorousSimpleFoam/angledDuct/implicit/system/sampling
Andrew Heather e3796745ed CONFIG: Updated headers to v2106
Minor clean-up
2021-06-28 09:14:42 +01:00

117 lines
3.3 KiB
C++

/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2106 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
cellZoneID
{
type coded;
libs (utilityFunctionObjects);
name cellZoneID;
executeControl writeTime;
localCode
#{
static const word fieldName("cellZoneID");
// Create and populate a "cellZoneID" volScalarField for cellZones.
// Return nullptr if there are not any such zones.
//
// Could be improved for mesh motion etc
// but is fairly low overhead anyhow
volScalarField* getZoneField(const fvMesh& mesh)
{
volScalarField* volZonePtr =
mesh.getObjectPtr<volScalarField>(fieldName);
const cellZoneMesh& zones = mesh.cellZones();
if (!zones.empty())
{
if (!volZonePtr)
{
volZonePtr = &regIOobject::store
(
volScalarField::New
(
fieldName,
mesh,
dimless,
zeroGradientFvPatchField<scalar>::typeName
)
);
Info<< "Creating " << fieldName
<< " field for postProcessing" << nl;
}
}
else
{
Info<< "No cellZones - not creating " << fieldName
<< " field for postProcessing" << nl;
}
if (volZonePtr)
{
// Copy zone id as scalar.
// For consistency, do this whenever the volField exists,
// even if there are no zones.
auto& field = *volZonePtr;
auto& internal = field.primitiveFieldRef();
internal = scalar(-1);
for (const cellZone& zn : zones)
{
UIndirectList<scalar>(internal, zn) = scalar(zn.index());
}
field.correctBoundaryConditions();
}
return volZonePtr;
}
#};
codeExecute
#{
// Don't need the return value, just the contents on the registry.
(void) getZoneField(mesh());
#};
}
plane
{
type surfaces;
libs (sampling);
writeControl writeTime;
surfaceFormat vtk;
fields ( cellZoneID );
surfaces
{
zNormal
{
type cuttingPlane;
planeType pointAndNormal;
pointAndNormalDict
{
point (0 0 0);
normal (0 0 1);
}
interpolate false;
}
}
}
// ************************************************************************* //