From 6f72f3452d5b5fe88ac12af17fdcc069a9690886 Mon Sep 17 00:00:00 2001 From: Andrew Heather <a.heather@opencfd.co.uk> Date: Fri, 29 Dec 2017 23:50:10 +0000 Subject: [PATCH] BUG: foamToVTK - only convert finte area if -finiteAreaFields option is specified. Fixes #687 --- .../dataConversion/foamToVTK/foamToVTK.C | 186 +++++++++--------- 1 file changed, 97 insertions(+), 89 deletions(-) diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C index c51ccefdf9e..c847be8b964 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C @@ -400,6 +400,11 @@ int main(int argc, char *argv[]) "write surfaceScalarFields (e.g., phi)" ); argList::addBoolOption + ( + "finiteAreaFields", + "write finite area fields" + ); + argList::addBoolOption ( "nearCellValue", "use cell value on patches instead of patch value itself" @@ -865,115 +870,118 @@ int main(int argc, char *argv[]) // Finite-area mesh and fields - need not exist - autoPtr<faMesh> aMeshPtr; + if (args.optionFound("finiteAreaFields")) { - const bool throwing = FatalError.throwExceptions(); - try + autoPtr<faMesh> aMeshPtr; { - aMeshPtr.reset(new faMesh(meshRef.baseMesh())); + const bool throwing = FatalError.throwExceptions(); + try + { + aMeshPtr.reset(new faMesh(meshRef.baseMesh())); + } + catch (Foam::error& err) + { + aMeshPtr.clear(); + } + FatalError.throwExceptions(throwing); } - catch (Foam::error& err) + + if (aMeshPtr.valid()) { - aMeshPtr.clear(); - } - FatalError.throwExceptions(throwing); - } + // Construct the area fields - if (aMeshPtr.valid()) - { - // Construct the area fields + PtrList<const areaScalarField> aScalarFld; + PtrList<const areaVectorField> aVectorFld; + PtrList<const areaSphericalTensorField> aSphTensorf; + PtrList<const areaSymmTensorField> aSymTensorFld; + PtrList<const areaTensorField> aTensorFld; - PtrList<const areaScalarField> aScalarFld; - PtrList<const areaVectorField> aVectorFld; - PtrList<const areaSphericalTensorField> aSphTensorf; - PtrList<const areaSymmTensorField> aSymTensorFld; - PtrList<const areaTensorField> aTensorFld; + const faMesh& aMesh = aMeshPtr(); - const faMesh& aMesh = aMeshPtr(); + if (!specifiedFields || selectedFields.size()) + { + readFields + ( + aMesh, + objects, + selectedFields, + aScalarFld + ); + print(" areaScalar :", Info, aScalarFld); + + readFields + ( + aMesh, + objects, + selectedFields, + aVectorFld + ); + print(" areaVector :", Info, aVectorFld); + + readFields + ( + aMesh, + objects, + selectedFields, + aSphTensorf + ); + print(" areaSphericalTensor :", Info, aSphTensorf); + + readFields + ( + aMesh, + objects, + selectedFields, + aSymTensorFld + ); + print(" areaSymmTensor :", Info, aSymTensorFld); + + readFields + ( + aMesh, + objects, + selectedFields, + aTensorFld + ); + print(" areaTensor :", Info, aTensorFld); + } - if (!specifiedFields || selectedFields.size()) - { - readFields + const label nAreaFields = ( - aMesh, - objects, - selectedFields, - aScalarFld + aScalarFld.size() + + aVectorFld.size() + + aSphTensorf.size() + + aSymTensorFld.size() + + aTensorFld.size() ); - print(" areaScalar :", Info, aScalarFld); - readFields - ( - aMesh, - objects, - selectedFields, - aVectorFld - ); - print(" areaVector :", Info, aVectorFld); + fileName outputName(fvPath/"finiteArea"); - readFields - ( - aMesh, - objects, - selectedFields, - aSphTensorf - ); - print(" areaSphericalTensor :", Info, aSphTensorf); + mkDir(outputName); - readFields - ( - aMesh, - objects, - selectedFields, - aSymTensorFld - ); - print(" areaSymmTensor :", Info, aSymTensorFld); + const auto& pp = aMesh.patch(); - readFields + vtk::surfaceMeshWriter writer ( - aMesh, - objects, - selectedFields, - aTensorFld + pp, + aMesh.name(), + outputName/"finiteArea" + "_" + timeDesc, + fmtType ); - print(" areaTensor :", Info, aTensorFld); - } - - const label nAreaFields = - ( - aScalarFld.size() - + aVectorFld.size() - + aSphTensorf.size() - + aSymTensorFld.size() - + aTensorFld.size() - ); - - fileName outputName(fvPath/"finiteArea"); - mkDir(outputName); - - const auto& pp = aMesh.patch(); - - vtk::surfaceMeshWriter writer - ( - pp, - aMesh.name(), - outputName/"finiteArea" + "_" + timeDesc, - fmtType - ); - - // Number of fields - writer.beginCellData(nAreaFields); + // Number of fields + writer.beginCellData(nAreaFields); - writer.write(aScalarFld); - writer.write(aVectorFld); - writer.write(aSphTensorf); - writer.write(aSymTensorFld); - writer.write(aTensorFld); + writer.write(aScalarFld); + writer.write(aVectorFld); + writer.write(aSphTensorf); + writer.write(aSymTensorFld); + writer.write(aTensorFld); - writer.endCellData(); + writer.endCellData(); - writer.writeFooter(); + writer.writeFooter(); + } } PtrList<const pointScalarField> pScalarFld; -- GitLab