void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { bool writeResults = !args.optionFound("noWrite"); IOobject phiHeader ( "phi", runTime.timeName(), mesh, IOobject::MUST_READ ); if (phiHeader.headerOk()) { autoPtr<surfaceScalarField> PePtr; Info<< " Reading phi" << endl; surfaceScalarField phi(phiHeader, mesh); volVectorField U ( IOobject ( "U", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); IOobject RASPropertiesHeader ( "RASProperties", runTime.constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ); IOobject LESPropertiesHeader ( "LESProperties", runTime.constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ); Info<< " Calculating Pe" << endl; if (phi.dimensions() == dimensionSet(0, 3, -1, 0, 0)) { if (RASPropertiesHeader.headerOk()) { IOdictionary RASProperties(RASPropertiesHeader); singlePhaseTransportModel laminarTransport(U, phi); autoPtr<incompressible::RASModel> RASModel ( incompressible::RASModel::New ( U, phi, laminarTransport ) ); PePtr.set ( new surfaceScalarField ( IOobject ( "Pe", runTime.timeName(), mesh, IOobject::NO_READ ), mag(phi) /( mesh.magSf() * mesh.surfaceInterpolation::deltaCoeffs() * fvc::interpolate(RASModel->nuEff()) ) ) ); } else if (LESPropertiesHeader.headerOk()) { IOdictionary LESProperties(LESPropertiesHeader); singlePhaseTransportModel laminarTransport(U, phi); autoPtr<incompressible::LESModel> sgsModel ( incompressible::LESModel::New(U, phi, laminarTransport) ); PePtr.set ( new surfaceScalarField ( IOobject ( "Pe", runTime.timeName(), mesh, IOobject::NO_READ ), mag(phi) /( mesh.magSf() * mesh.surfaceInterpolation::deltaCoeffs() * fvc::interpolate(sgsModel->nuEff()) ) ) ); } else { IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) ); dimensionedScalar nu(transportProperties.lookup("nu")); PePtr.set ( new surfaceScalarField ( IOobject ( "Pe", runTime.timeName(), mesh, IOobject::NO_READ ), mesh.surfaceInterpolation::deltaCoeffs() * (mag(phi)/mesh.magSf())*(runTime.deltaT()/nu) ) ); } } else if (phi.dimensions() == dimensionSet(1, 0, -1, 0, 0)) { if (RASPropertiesHeader.headerOk()) { IOdictionary RASProperties(RASPropertiesHeader); autoPtr<basicPsiThermo> thermo(basicPsiThermo::New(mesh)); volScalarField rho ( IOobject ( "rho", runTime.timeName(), mesh ), thermo->rho() ); autoPtr<compressible::RASModel> RASModel ( compressible::RASModel::New ( rho, U, phi, thermo() ) ); PePtr.set ( new surfaceScalarField ( IOobject ( "Pe", runTime.timeName(), mesh, IOobject::NO_READ ), mag(phi) /( mesh.magSf() * mesh.surfaceInterpolation::deltaCoeffs() * fvc::interpolate(RASModel->muEff()) ) ) ); } else if (LESPropertiesHeader.headerOk()) { IOdictionary LESProperties(LESPropertiesHeader); autoPtr<basicPsiThermo> thermo(basicPsiThermo::New(mesh)); volScalarField rho ( IOobject ( "rho", runTime.timeName(), mesh ), thermo->rho() ); autoPtr<compressible::LESModel> sgsModel ( compressible::LESModel::New(rho, U, phi, thermo()) ); PePtr.set ( new surfaceScalarField ( IOobject ( "Pe", runTime.timeName(), mesh, IOobject::NO_READ ), mag(phi) /( mesh.magSf() * mesh.surfaceInterpolation::deltaCoeffs() * fvc::interpolate(sgsModel->muEff()) ) ) ); } else { IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) ); dimensionedScalar mu(transportProperties.lookup("mu")); PePtr.set ( new surfaceScalarField ( IOobject ( "Pe", runTime.timeName(), mesh, IOobject::NO_READ ), mesh.surfaceInterpolation::deltaCoeffs() * (mag(phi)/(mesh.magSf()))*(runTime.deltaT()/mu) ) ); } } else { FatalErrorIn(args.executable()) << "Incorrect dimensions of phi: " << phi.dimensions() << abort(FatalError); } // can also check how many cells exceed a particular Pe limit /* { label count = 0; label PeLimit = 200; forAll(PePtr(), i) { if (PePtr()[i] > PeLimit) { count++; } } Info<< "Fraction > " << PeLimit << " = " << scalar(count)/Pe.size() << endl; } */ Info << "Pe max : " << max(PePtr()).value() << endl; if (writeResults) { PePtr().write(); } } else { Info<< " No phi" << endl; } Info<< "\nEnd\n" << endl; }
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 Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { bool writeResults = !args.optionFound("noWrite"); IOobject phiHeader ( "phi", runTime.timeName(), mesh, IOobject::MUST_READ ); if (phiHeader.headerOk()) { volScalarField Co ( IOobject ( "Co", runTime.timeName(), mesh, IOobject::NO_READ ), mesh, dimensionedScalar("0", dimless, 0), zeroGradientFvPatchScalarField::typeName ); Info<< " Reading phi" << endl; surfaceScalarField phi(phiHeader, mesh); if (phi.dimensions() == dimensionSet(1, 0, -1, 0, 0)) { Info<< " Calculating compressible Co" << endl; Info<< " Reading rho" << endl; volScalarField rho ( IOobject ( "rho", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); Co.dimensionedInternalField() = (0.5*runTime.deltaT()) *fvc::surfaceSum(mag(phi))().dimensionedInternalField() /(rho*mesh.V()); Co.correctBoundaryConditions(); } else if (phi.dimensions() == dimensionSet(0, 3, -1, 0, 0)) { Info<< " Calculating incompressible Co" << endl; Co.dimensionedInternalField() = (0.5*runTime.deltaT()) *fvc::surfaceSum(mag(phi))().dimensionedInternalField() /mesh.V(); Co.correctBoundaryConditions(); } else { FatalErrorIn(args.executable()) << "Incorrect dimensions of phi: " << phi.dimensions() << abort(FatalError); } Info<< "Co max : " << max(Co).value() << endl; if (writeResults) { Co.write(); } } else { Info<< " No phi" << endl; } Info<< "\nEnd\n" << endl; }