// Hack to do zones which have Lists in them. See above. bool writeZones(const word& name, const fileName& meshDir, Time& runTime) { IOobject io ( name, runTime.timeName(), meshDir, runTime, IOobject::MUST_READ, IOobject::NO_WRITE, false ); bool writeOk = false; if (io.headerOk()) { Info<< " Reading " << io.headerClassName() << " : " << name << endl; // Switch off type checking (for reading e.g. faceZones as // generic list of dictionaries). const word oldTypeName = IOPtrList<entry>::typeName; const_cast<word&>(IOPtrList<entry>::typeName) = word::null; IOPtrList<entry> meshObject(io); forAll(meshObject, i) { if (meshObject[i].isDict()) { dictionary& d = meshObject[i].dict(); if (d.found("faceLabels")) { d.set("faceLabels", labelList(d.lookup("faceLabels"))); } if (d.found("flipMap")) { d.set("flipMap", boolList(d.lookup("flipMap"))); } if (d.found("cellLabels")) { d.set("cellLabels", labelList(d.lookup("cellLabels"))); } if (d.found("pointLabels")) { d.set("pointLabels", labelList(d.lookup("pointLabels"))); } } } const_cast<word&>(IOPtrList<entry>::typeName) = oldTypeName; // Fake type back to what was in field const_cast<word&>(meshObject.type()) = io.headerClassName(); Info<< " Writing " << name << endl; // Force writing as ascii writeOk = meshObject.regIOobject::writeObject ( IOstream::ASCII, IOstream::currentVersion, runTime.writeCompression() ); }
void Foam::functionObjects::fieldCoordinateSystemTransform::transform ( const word& fieldName ) { typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType; typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType; if (mesh_.foundObject<VolFieldType>(fieldName)) { DebugInfo << type() << ": Field " << fieldName << " already in database" << endl; transformField<VolFieldType> ( mesh_.lookupObject<VolFieldType>(fieldName) ); } else if (mesh_.foundObject<SurfaceFieldType>(fieldName)) { DebugInfo << type() << ": Field " << fieldName << " already in database" << endl; transformField<SurfaceFieldType> ( mesh_.lookupObject<SurfaceFieldType>(fieldName) ); } else { IOobject fieldHeader ( fieldName, mesh_.time().timeName(), mesh_, IOobject::MUST_READ, IOobject::NO_WRITE ); if ( fieldHeader.headerOk() && fieldHeader.headerClassName() == VolFieldType::typeName ) { DebugInfo << type() << ": Field " << fieldName << " read from file" << endl; transformField<VolFieldType> ( mesh_.lookupObject<VolFieldType>(fieldName) ); } else if ( fieldHeader.headerOk() && fieldHeader.headerClassName() == SurfaceFieldType::typeName ) { DebugInfo << type() << ": Field " << fieldName << " read from file" << endl; transformField<SurfaceFieldType> ( mesh_.lookupObject<SurfaceFieldType>(fieldName) ); } } }
int main(int argc, char *argv[]) { timeSelector::addOptions(); #include "addRegionOption.H" argList::validArgs.append("fieldName"); argList::validArgs.append("patchName"); #include "setRootCase.H" #include "createTime.H" instantList timeDirs = timeSelector::select0(runTime, args); #include "createNamedMesh.H" const word fieldName = args[1]; const word patchName = args[2]; forAll(timeDirs, timeI) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; IOobject io ( fieldName, runTime.timeName(), mesh, IOobject::MUST_READ ); // Check field exists if (io.headerOk()) { mesh.readUpdate(); const label patchI = mesh.boundaryMesh().findPatchID(patchName); if (patchI < 0) { FatalError << "Unable to find patch " << patchName << nl << exit(FatalError); } scalar area = gSum(mesh.magSf().boundaryField()[patchI]); bool done = false; printAverage<volScalarField>(mesh, io, area, patchI, done); printAverage<volVectorField>(mesh, io, area, patchI, done); printAverage<volSphericalTensorField>(mesh, io, area, patchI, done); printAverage<volSymmTensorField>(mesh, io, area, patchI, done); printAverage<volTensorField>(mesh, io, area, patchI, done); if (!done) { FatalError << "Only possible to average volFields." << " Field " << fieldName << " is of type " << io.headerClassName() << nl << exit(FatalError); } } else { Info<< " No field " << fieldName << endl; } Info<< endl; }