From 6fffe6ff3f134030e8f8bd8965f83a9bf1403c53 Mon Sep 17 00:00:00 2001 From: henry Date: Mon, 9 Jun 2008 13:39:39 +0100 Subject: [PATCH] New foamToEnsight with support for binary files contributed by Francesco. --- .../dataConversion/foamToEnsight/Make/files | 8 + .../dataConversion/foamToEnsight/Make/options | 8 + .../dataConversion/foamToEnsight/cellSets.H | 102 ++ .../dataConversion/foamToEnsight/checkData.H | 18 + .../foamToEnsight/checkMeshMoving.H | 21 + .../foamToEnsight/checkSprayData.H | 13 + .../foamToEnsight/ensightCaseHeader.H | 5 + .../foamToEnsight/ensightCaseTail.H | 33 + .../foamToEnsight/ensightField.C | 898 ++++++++++ .../foamToEnsight/ensightField.H | 80 + .../foamToEnsight/ensightMesh.C | 1533 +++++++++++++++++ .../foamToEnsight/ensightMesh.H | 268 +++ .../foamToEnsight/ensightParticlePositions.C | 91 + .../foamToEnsight/ensightParticlePositions.H | 54 + .../foamToEnsight/ensightSprayField.C | 115 ++ .../foamToEnsight/ensightSprayField.H | 64 + .../foamToEnsight/ensightWriteBinary.C | 79 + .../foamToEnsight/ensightWriteBinary.H | 68 + .../dataConversion/foamToEnsight/faceSets.H | 88 + .../foamToEnsight/foamToEnsight.C | 396 +++++ .../dataConversion/foamToEnsight/itoa.C | 62 + .../dataConversion/foamToEnsight/itoa.H | 48 + .../dataConversion/foamToEnsight/moveMesh.H | 28 + 23 files changed, 4080 insertions(+) create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/files create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/cellSets.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/checkData.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/checkMeshMoving.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/checkSprayData.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightCaseHeader.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightCaseTail.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightField.C create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightField.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightParticlePositions.C create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightParticlePositions.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightSprayField.C create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightSprayField.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightWriteBinary.C create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightWriteBinary.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/faceSets.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/foamToEnsight.C create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/itoa.C create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/itoa.H create mode 100644 applications/utilities/postProcessing/dataConversion/foamToEnsight/moveMesh.H diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/files b/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/files new file mode 100644 index 0000000000..d4c28fa64c --- /dev/null +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/files @@ -0,0 +1,8 @@ +itoa.C +ensightMesh.C +ensightParticlePositions.C +foamToEnsight.C +ensightWriteBinary.C + +EXE = $(FOAM_APPBIN)/foamToEnsight +//EXE = $(FOAM_USER_APPBIN)/foamToEnsight diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options b/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options new file mode 100644 index 0000000000..db2e26ca8b --- /dev/null +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options @@ -0,0 +1,8 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -llagrangian \ + diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/cellSets.H b/applications/utilities/postProcessing/dataConversion/foamToEnsight/cellSets.H new file mode 100644 index 0000000000..72859dff2b --- /dev/null +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/cellSets.H @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::cellSets + +Description + +\*---------------------------------------------------------------------------*/ + +#ifndef cellSets_H +#define cellSets_H + +#include "labelList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class cellSets Declaration +\*---------------------------------------------------------------------------*/ + +class cellSets +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + cellSets(const cellSets&); + + //- Disallow default bitwise assignment + void operator=(const cellSets&); + + +public: + + label nHexesWedges; + label nPrisms; + label nPyrs; + label nTets; + label nPolys; + + labelList tets; + labelList pyrs; + labelList prisms; + labelList wedges; + labelList hexes; + labelList polys; + + + // Constructors + + //- Construct given the number ov cells + cellSets(const label nCells) + : + nHexesWedges(0), + nPrisms(0), + nPyrs(0), + nTets(0), + nPolys(0), + + tets(nCells), + pyrs(nCells), + prisms(nCells), + wedges(nCells), + hexes(nCells), + polys(nCells) + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/checkData.H b/applications/utilities/postProcessing/dataConversion/foamToEnsight/checkData.H new file mode 100644 index 0000000000..59be3c5dc9 --- /dev/null +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/checkData.H @@ -0,0 +1,18 @@ +for (int n1=startTime; n1 2 && fieldName(fieldName.size() - 2, 2) == "_0") + { + variableGood = false; + break; + } + + IOobject fieldObjectHeader + ( + fieldName, + Times[n1].name(), + mesh, + IOobject::NO_READ + ); + + variableGood = variableGood && fieldObjectHeader.headerOk(); +} diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/checkMeshMoving.H b/applications/utilities/postProcessing/dataConversion/foamToEnsight/checkMeshMoving.H new file mode 100644 index 0000000000..e6e46c8f86 --- /dev/null +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/checkMeshMoving.H @@ -0,0 +1,21 @@ +bool meshMoving = true; + +if (Times.size() > 2) +{ + for(label n2=2; n2= scalar(floatScalarVSMALL)) + { + ensightFile << setw(12) << sf[i] << nl; + } + else + { + ensightFile << setw(12) << scalar(0) << nl; + } + } +} + + +template +scalarField map +( + const Field& vf, + const labelList& map, + const label cmpt +) +{ + scalarField mf(map.size()); + + forAll(map, i) + { + mf[i] = component(vf[map[i]], cmpt); + } + + return mf; +} + + +template +scalarField map +( + const Field& vf, + const labelList& map1, + const labelList& map2, + const label cmpt +) +{ + scalarField mf(map1.size() + map2.size()); + + forAll(map1, i) + { + mf[i] = component(vf[map1[i]], cmpt); + } + + label offset = map1.size(); + + forAll(map2, i) + { + mf[i + offset] = component(vf[map2[i]], cmpt); + } + + return mf; +} + + +template +void writeAllData +( + const char* key, + const Field& vf, + const labelList& prims, + const label nPrims, + OFstream& ensightFile +) +{ + if (nPrims) + { + if (Pstream::master()) + { + ensightFile << key << nl; + + for (direction cmpt=0; cmpt::nComponents; cmpt++) + { + writeData(map(vf, prims, cmpt), ensightFile); + + for (int slave=1; slave::nComponents; cmpt++) + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< map(vf, prims, cmpt); + } + } + } +} + + +template +void writeAllDataBinary +( + const char* key, + const Field& vf, + const labelList& prims, + const label nPrims, + std::ofstream& ensightFile +) +{ + if (nPrims) + { + if (Pstream::master()) + { + writeEnsDataBinary(key,ensightFile); + + for (direction cmpt=0; cmpt::nComponents; cmpt++) + { + writeEnsDataBinary(map(vf, prims, cmpt), ensightFile); + + for (int slave=1; slave::nComponents; cmpt++) + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< map(vf, prims, cmpt); + } + } + } +} + + + +template +void writeAllFaceData +( + const char* key, + const labelList& prims, + const label nPrims, + const Field& pf, + const labelList& patchProcessors, + OFstream& ensightFile +) +{ + if (nPrims) + { + if (Pstream::master()) + { + ensightFile << key << nl; + + for (direction cmpt=0; cmpt::nComponents; cmpt++) + { + writeData(map(pf, prims, cmpt), ensightFile); + + forAll (patchProcessors, i) + { + if (patchProcessors[i] != 0) + { + label slave = patchProcessors[i]; + IPstream fromSlave(Pstream::scheduled, slave); + scalarField pf(fromSlave); + + writeData(pf, ensightFile); + } + } + } + } + else + { + for (direction cmpt=0; cmpt::nComponents; cmpt++) + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< map(pf, prims, cmpt); + } + } + } +} + + +template +void writeAllFaceDataBinary +( + const char* key, + const labelList& prims, + const label nPrims, + const Field& pf, + const labelList& patchProcessors, + std::ofstream& ensightFile +) +{ + if (nPrims) + { + if (Pstream::master()) + { + writeEnsDataBinary(key,ensightFile); + + for (direction cmpt=0; cmpt::nComponents; cmpt++) + { + writeEnsDataBinary(map(pf, prims, cmpt), ensightFile); + + forAll (patchProcessors, i) + { + if (patchProcessors[i] != 0) + { + label slave = patchProcessors[i]; + IPstream fromSlave(Pstream::scheduled, slave); + scalarField pf(fromSlave); + + writeEnsDataBinary(pf, ensightFile); + } + } + } + } + else + { + for (direction cmpt=0; cmpt::nComponents; cmpt++) + { + OPstream toMaster(Pstream::scheduled, Pstream::masterNo()); + toMaster<< map(pf, prims, cmpt); + } + } + } +} + + +template +bool writePatchField +( + const Foam::Field& pf, + const Foam::label patchi, + const Foam::label ensightPatchi, + const Foam::faceSets& boundaryFaceSet, + const Foam::ensightMesh::nFacePrims& nfp, + const Foam::labelList& patchProcessors, + Foam::OFstream& ensightFile +) +{ + if (nfp.nTris || nfp.nQuads || nfp.nPolys) + { + if (Pstream::master()) + { + ensightFile + << "part" << nl + << setw(10) << ensightPatchi << nl; + } + + writeAllFaceData + ( + "tria3", + boundaryFaceSet.tris, + nfp.nTris, + pf, + patchProcessors, + ensightFile + ); + + writeAllFaceData + ( + "quad4", + boundaryFaceSet.quads, + nfp.nQuads, + pf, + patchProcessors, + ensightFile + ); + + writeAllFaceData + ( + "nsided", + boundaryFaceSet.polys, + nfp.nPolys, + pf, + patchProcessors, + ensightFile + ); + + return true; + } + else + { + return false; + } +} + + +template +bool writePatchFieldBinary +( + const Foam::Field& pf, + const Foam::label patchi, + const Foam::label ensightPatchi, + const Foam::faceSets& boundaryFaceSet, + const Foam::ensightMesh::nFacePrims& nfp, + const Foam::labelList& patchProcessors, + std::ofstream& ensightFile +) +{ + if (nfp.nTris || nfp.nQuads || nfp.nPolys) + { + if (Pstream::master()) + { + writeEnsDataBinary("part",ensightFile); + writeEnsDataBinary(ensightPatchi,ensightFile); + } + + writeAllFaceDataBinary + ( + "tria3", + boundaryFaceSet.tris, + nfp.nTris, + pf, + patchProcessors, + ensightFile + ); + + writeAllFaceDataBinary + ( + "quad4", + boundaryFaceSet.quads, + nfp.nQuads, + pf, + patchProcessors, + ensightFile + ); + + writeAllFaceDataBinary + ( + "nsided", + boundaryFaceSet.polys, + nfp.nPolys, + pf, + patchProcessors, + ensightFile + ); + + return true; + } + else + { + return false; + } +} + + +template +void writePatchField +( + const Foam::word& fieldName, + const Foam::Field& pf, + const Foam::word& patchName, + const Foam::ensightMesh& eMesh, + const Foam::fileName& postProcPath, + const Foam::word& prepend, + const Foam::label timeIndex, + Foam::Ostream& ensightCaseFile +) +{ + const Time& runTime = eMesh.mesh.time(); + + const List& boundaryFaceSets = eMesh.boundaryFaceSets; + const HashTable& allPatchNames = eMesh.allPatchNames; + const HashTable