ENH: checkMesh: write surface fields. Fixes #2023

This commit is contained in:
mattijs
2021-03-10 17:55:15 +00:00
parent daf9af461c
commit d10769f5a9
3 changed files with 100 additions and 5 deletions

View File

@ -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);
}
}

View File

@ -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"))

View File

@ -5,6 +5,7 @@ namespace Foam
void writeFields
(
const fvMesh& mesh,
const wordHashSet& selectedFields
const wordHashSet& selectedFields,
const bool writeFaceFields
);
}