void calc ( const argList& args, const Time& runTime, const fvMesh& mesh, functionObjectList& fol ) { if (args.optionFound("noFlow")) { Info<< " Operating in no-flow mode; no models will be loaded." << " All vol, surface and point fields will be loaded." << endl; // Read objects in time directory IOobjectList objects(mesh, runTime.timeName()); // Read vol fields. PtrList<volScalarField> vsFlds; ReadFields(mesh, objects, vsFlds); PtrList<volVectorField> vvFlds; ReadFields(mesh, objects, vvFlds); PtrList<volSphericalTensorField> vstFlds; ReadFields(mesh, objects, vstFlds); PtrList<volSymmTensorField> vsymtFlds; ReadFields(mesh, objects, vsymtFlds); PtrList<volTensorField> vtFlds; ReadFields(mesh, objects, vtFlds); // Read surface fields. PtrList<surfaceScalarField> ssFlds; ReadFields(mesh, objects, ssFlds); PtrList<surfaceVectorField> svFlds; ReadFields(mesh, objects, svFlds); PtrList<surfaceSphericalTensorField> sstFlds; ReadFields(mesh, objects, sstFlds); PtrList<surfaceSymmTensorField> ssymtFlds; ReadFields(mesh, objects, ssymtFlds); PtrList<surfaceTensorField> stFlds; ReadFields(mesh, objects, stFlds); // Read point fields. const pointMesh& pMesh = pointMesh::New(mesh); PtrList<pointScalarField> psFlds; ReadFields(pMesh, objects, psFlds); PtrList<pointVectorField> pvFlds; ReadFields(pMesh, objects, pvFlds); PtrList<pointSphericalTensorField> pstFlds; ReadFields(pMesh, objects, pstFlds); PtrList<pointSymmTensorField> psymtFlds; ReadFields(pMesh, objects, psymtFlds); PtrList<pointTensorField> ptFlds; ReadFields(pMesh, objects, ptFlds); fol.execute(true); } else { Info<< " Reading phi" << endl; surfaceScalarField phi ( IOobject ( "phi", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); Info<< " Reading U" << endl; volVectorField U ( IOobject ( "U", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); Info<< " Reading p" << endl; volScalarField p ( IOobject ( "p", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); #include "createFvOptions.H" if (phi.dimensions() == dimVolume/dimTime) { IOobject RASPropertiesHeader ( "RASProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE, false ); IOobject LESPropertiesHeader ( "LESProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE, false ); if (RASPropertiesHeader.headerOk()) { IOdictionary RASProperties(RASPropertiesHeader); singlePhaseTransportModel laminarTransport(U, phi); autoPtr<incompressible::RASModel> RASModel ( incompressible::RASModel::New ( U, phi, laminarTransport ) ); fol.execute(true); } else if (LESPropertiesHeader.headerOk()) { IOdictionary LESProperties(LESPropertiesHeader); singlePhaseTransportModel laminarTransport(U, phi); autoPtr<incompressible::LESModel> sgsModel ( incompressible::LESModel::New(U, phi, laminarTransport) ); fol.execute(true); } else { IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) ); fol.execute(true); } } else if (phi.dimensions() == dimMass/dimTime) { autoPtr<fluidThermo> thermo(fluidThermo::New(mesh)); volScalarField rho ( IOobject ( "rho", runTime.timeName(), mesh ), thermo->rho() ); IOobject RASPropertiesHeader ( "RASProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE, false ); IOobject LESPropertiesHeader ( "LESProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE, false ); if (RASPropertiesHeader.headerOk()) { IOdictionary RASProperties(RASPropertiesHeader); autoPtr<compressible::RASModel> RASModel ( compressible::RASModel::New ( rho, U, phi, thermo() ) ); fol.execute(true); } else if (LESPropertiesHeader.headerOk()) { IOdictionary LESProperties(LESPropertiesHeader); autoPtr<compressible::LESModel> sgsModel ( compressible::LESModel::New(rho, U, phi, thermo()) ); fol.execute(true); } else { IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) ); fol.execute(true); } } else { FatalErrorIn(args.executable()) << "Incorrect dimensions of phi: " << phi.dimensions() << nl << exit(FatalError); } } }
void executeFunctionObjects ( const argList& args, const Time& runTime, fvMesh& mesh, const HashSet<word>& selectedFields, functionObjectList& functions ) { Info<< nl << "Reading fields:" << endl; // Maintain a stack of the stored objects to clear after executing // the functionObjects LIFOStack<regIOobject*> storedObjects; // Read objects in time directory IOobjectList objects(mesh, runTime.timeName()); // Read volFields ReadFields(volScalarField); ReadFields(volVectorField); ReadFields(volSphericalTensorField); ReadFields(volSymmTensorField); ReadFields(volTensorField); // Read internal fields ReadFields(volScalarField::Internal); ReadFields(volVectorField::Internal); ReadFields(volSphericalTensorField::Internal); ReadFields(volSymmTensorField::Internal); ReadFields(volTensorField::Internal); // Read surface fields ReadFields(surfaceScalarField); ReadFields(surfaceVectorField); ReadFields(surfaceSphericalTensorField); ReadFields(surfaceSymmTensorField); ReadFields(surfaceTensorField); // Read point fields. const pointMesh& pMesh = pointMesh::New(mesh); ReadPointFields(pointScalarField) ReadPointFields(pointVectorField); ReadPointFields(pointSphericalTensorField); ReadPointFields(pointSymmTensorField); ReadPointFields(pointTensorField); // Read uniform dimensioned fields IOobjectList constantObjects(mesh, runTime.constant()); ReadUniformFields(uniformDimensionedScalarField); ReadUniformFields(uniformDimensionedVectorField); ReadUniformFields(uniformDimensionedSphericalTensorField); ReadUniformFields(uniformDimensionedSymmTensorField); ReadUniformFields(uniformDimensionedTensorField); Info<< nl << "Executing functionObjects" << endl; // Execute the functionObjects in post-processing mode functions.execute(); while (!storedObjects.empty()) { storedObjects.pop()->checkOut(); } }