mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: checkMesh: write surface fields. Fixes #2023
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||
Copyright (C) 2015-2020 OpenCFD Ltd.
|
||||
Copyright (C) 2015-2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -58,6 +58,9 @@ Usage
|
||||
\param -writeAllFields \n
|
||||
Writes all mesh quality measures as fields.
|
||||
|
||||
\param -writeAllSurfaceFields \n
|
||||
Adds writing of surface fields when used in combination with writeAllFields.
|
||||
|
||||
\param -writeFields '(\<fieldName\>)' \n
|
||||
Writes selected mesh quality measures as fields.
|
||||
|
||||
@ -111,6 +114,11 @@ int main(int argc, char *argv[])
|
||||
"writeAllFields",
|
||||
"Write volFields with mesh quality parameters"
|
||||
);
|
||||
argList::addBoolOption
|
||||
(
|
||||
"writeAllSurfaceFields",
|
||||
"Write surfaceFields with mesh quality parameters"
|
||||
);
|
||||
argList::addOption
|
||||
(
|
||||
"writeFields",
|
||||
@ -163,6 +171,7 @@ int main(int argc, char *argv[])
|
||||
"faceZone"
|
||||
});
|
||||
|
||||
const bool writeFaceFields = args.found("writeAllSurfaceFields");
|
||||
wordHashSet selectedFields;
|
||||
if (args.found("writeFields"))
|
||||
{
|
||||
@ -182,6 +191,13 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
selectedFields = allFields;
|
||||
}
|
||||
else if (writeFaceFields)
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Option 'writeAllSurfaceFields' only valid in combination"
|
||||
<< " with 'writeFields' or 'writeAllFields'"
|
||||
<< nl << exit(FatalError);
|
||||
}
|
||||
|
||||
|
||||
if (noTopology)
|
||||
@ -306,7 +322,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
|
||||
// Write selected fields
|
||||
Foam::writeFields(mesh, selectedFields);
|
||||
Foam::writeFields(mesh, selectedFields, writeFaceFields);
|
||||
}
|
||||
else if (state == polyMesh::POINTS_MOVED)
|
||||
{
|
||||
@ -338,7 +354,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
|
||||
// Write selected fields
|
||||
Foam::writeFields(mesh, selectedFields);
|
||||
Foam::writeFields(mesh, selectedFields, writeFaceFields);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -117,10 +117,42 @@ void minFaceToCell
|
||||
}
|
||||
|
||||
|
||||
void writeSurfaceField
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const fileName& fName,
|
||||
const scalarField& faceData
|
||||
)
|
||||
{
|
||||
// Write single surfaceScalarField
|
||||
|
||||
surfaceScalarField fld
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
fName,
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE,
|
||||
false
|
||||
),
|
||||
mesh,
|
||||
dimensionedScalar(dimless, Zero),
|
||||
calculatedFvsPatchScalarField::typeName
|
||||
);
|
||||
fld.primitiveFieldRef() = faceData;
|
||||
//fld.correctBoundaryConditions();
|
||||
Info<< " Writing face data to " << fName << endl;
|
||||
fld.write();
|
||||
}
|
||||
|
||||
|
||||
void Foam::writeFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const wordHashSet& selectedFields
|
||||
const wordHashSet& selectedFields,
|
||||
const bool writeFaceFields
|
||||
)
|
||||
{
|
||||
if (selectedFields.empty())
|
||||
@ -173,6 +205,16 @@ void Foam::writeFields
|
||||
Info<< " Writing non-orthogonality (angle) to "
|
||||
<< cellNonOrthoAngle.name() << endl;
|
||||
cellNonOrthoAngle.write();
|
||||
|
||||
if (writeFaceFields)
|
||||
{
|
||||
writeSurfaceField
|
||||
(
|
||||
mesh,
|
||||
"face_nonOrthoAngle",
|
||||
SubField<scalar>(nonOrthoAngle, mesh.nInternalFaces())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedFields.found("faceWeight"))
|
||||
@ -202,6 +244,11 @@ void Foam::writeFields
|
||||
Info<< " Writing face interpolation weights (0..0.5) to "
|
||||
<< cellWeights.name() << endl;
|
||||
cellWeights.write();
|
||||
|
||||
if (writeFaceFields)
|
||||
{
|
||||
writeSurfaceField(mesh, "face_faceWeight", mesh.weights());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -243,6 +290,16 @@ void Foam::writeFields
|
||||
maxFaceToCell(faceSkewness, cellSkewness);
|
||||
Info<< " Writing face skewness to " << cellSkewness.name() << endl;
|
||||
cellSkewness.write();
|
||||
|
||||
if (writeFaceFields)
|
||||
{
|
||||
writeSurfaceField
|
||||
(
|
||||
mesh,
|
||||
"face_skewness",
|
||||
SubField<scalar>(faceSkewness, mesh.nInternalFaces())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -431,6 +488,16 @@ void Foam::writeFields
|
||||
Info<< " Writing cell volume ratio to "
|
||||
<< cellVolumeRatio.name() << endl;
|
||||
cellVolumeRatio.write();
|
||||
|
||||
if (writeFaceFields)
|
||||
{
|
||||
writeSurfaceField
|
||||
(
|
||||
mesh,
|
||||
"face_cellVolumeRatio",
|
||||
SubField<scalar>(faceVolumeRatio, mesh.nInternalFaces())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// minTetVolume
|
||||
@ -560,6 +627,17 @@ void Foam::writeFields
|
||||
minPyrVolume.correctBoundaryConditions();
|
||||
Info<< " Writing minPyrVolume to " << minPyrVolume.name() << endl;
|
||||
minPyrVolume.write();
|
||||
|
||||
if (writeFaceFields)
|
||||
{
|
||||
scalarField minFacePyrVol(neiPyrVol);
|
||||
minFacePyrVol = min
|
||||
(
|
||||
minFacePyrVol,
|
||||
SubField<scalar>(ownPyrVol, mesh.nInternalFaces())
|
||||
);
|
||||
writeSurfaceField(mesh, "face_minPyrVolume", minFacePyrVol);
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedFields.found("cellRegion"))
|
||||
|
||||
@ -5,6 +5,7 @@ namespace Foam
|
||||
void writeFields
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const wordHashSet& selectedFields
|
||||
const wordHashSet& selectedFields,
|
||||
const bool writeFaceFields
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user