/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright held by original author \\/ 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 $Date: 2008/04/02 11:37:10 $ \*---------------------------------------------------------------------------*/ #include "ensightOutputFunctions.H" #include "passiveParticle.H" #include "Cloud.H" #include "IOField.H" #include "volFields.H" #include "surfaceFields.H" #include "OFstream.H" #include "IOmanip.H" namespace Foam { // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // template void ensightCaseEntry ( OFstream& caseFile, const IOobject& fieldObject, const fileName& dataMask, bool measured ) { caseFile.setf(ios_base::left); if (measured) { caseFile << pTraits::typeName << " per measured node: 2 " << setw(15) << ("s" + fieldObject.name()).c_str() << " " << (dataMask/"lagrangian"/fieldObject.name()).c_str() << nl; } else { caseFile << pTraits::typeName << " per element: " << setw(15) << fieldObject.name() << " " << (dataMask/fieldObject.name()).c_str() << nl; } } void ensightParticlePositions ( const polyMesh& mesh, const fileName& dataDir, const fileName& subDir, IOstream::streamFormat format ) { Cloud parcels(mesh); fileName lagrangianDir = subDir/"lagrangian"; fileName postFileName = lagrangianDir/"positions"; // the ITER/lagrangian subdirectory must exist mkDir(dataDir/lagrangianDir); ensightFile os(dataDir/postFileName, format); // tag binary format (just like geometry files) os.writeBinaryHeader(); os.write(postFileName); os.newline(); os.write("particle coordinates"); os.newline(); os.write(parcels.size(), 8); // unusual width os.newline(); // binary write is Ensight6 - first ids, then positions if (format == IOstream::BINARY) { forAll (parcels, i) { os.write(i+1); } forAllIter(Cloud, parcels, elmnt) { const vector& p = elmnt().position(); os.write(p.x()); os.write(p.y()); os.write(p.z()); } } else { label nParcels = 0; forAllIter(Cloud, parcels, elmnt) { const vector& p = elmnt().position(); os.write(++nParcels, 8); // unusual width os.write(p.x()); os.write(p.y()); os.write(p.z()); os.newline(); } } } template void ensightSprayField ( const IOobject& fieldObject, const fileName& dataDir, const fileName& subDir, IOstream::streamFormat format ) { Info<< " " << fieldObject.name() << flush; fileName lagrangianDir = subDir/"lagrangian"; fileName postFileName = lagrangianDir/fieldObject.name(); string title = postFileName + " with " + pTraits::typeName + " values"; ensightFile os(dataDir/postFileName, format); os.write(title); os.newline(); IOField field(fieldObject); // 6 values per line label count = 0; forAll(field, i) { Type val = field[i]; if (mag(val) < 1.0e-90) { val = pTraits::zero; } for (direction cmpt=0; cmpt < pTraits::nComponents; cmpt++) { os.write( component(val, cmpt) ); } count += pTraits::nComponents; if (count % 6 == 0) { os.newline(); } } // add final newline if required if (count % 6) { os.newline(); } } //- write generalized field components template void ensightVolField ( const ensightParts& partsList, const IOobject& fieldObject, const fvMesh& mesh, const fileName& dataDir, const fileName& subDir, IOstream::streamFormat format ) { Info<< " " << fieldObject.name() << flush; fileName postFileName = subDir/fieldObject.name(); ensightFile os(dataDir/postFileName, format); os.write(postFileName); os.newline(); // ie, volField partsList.writeField ( os, GeometricField ( fieldObject, mesh ) ); } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // end namespace Foam // ************************************************************************* //