int main(int argc, char *argv[]) { # include "setRootCase.H" # include "createTime.H" # include "createDynamicFvMesh.H" # include "readCombustionProperties.H" # include "readGravitationalAcceleration.H" # include "createFields.H" # include "readPISOControls.H" # include "initContinuityErrs.H" # include "readTimeControls.H" # include "setInitialDeltaT.H" scalar StCoNum = 0.0; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { # include "readTimeControls.H" # include "readPISOControls.H" # include "CourantNo.H" # include "setDeltaT.H" runTime++; Info<< "\n\nTime = " << runTime.timeName() << endl; // Indicators for refinement. Note: before runTime++ // only for postprocessing reasons. tmp<volScalarField> tmagGradP = mag(fvc::grad(p)); volScalarField normalisedGradP ( "normalisedGradP", tmagGradP()/max(tmagGradP()) ); normalisedGradP.writeOpt() = IOobject::AUTO_WRITE; tmagGradP.clear(); bool meshChanged = false; { // Make the fluxes absolute fvc::makeAbsolute(phi, rho, U); // Test : disable refinement for some cells PackedBoolList& protectedCell = refCast<dynamicRefineFvMesh>(mesh).protectedCell(); if (protectedCell.empty()) { protectedCell.setSize(mesh.nCells()); protectedCell = 0; } forAll(betav, cellI) { if (betav[cellI] < 0.99) { protectedCell[cellI] = 1; } } //volScalarField pIndicator("pIndicator", // p*(fvc::laplacian(p)) // / ( // magSqr(fvc::grad(p)) // + dimensionedScalar // ( // "smallish", // sqr(p.dimensions()/dimLength), // 1E-6 // ) // )); //pIndicator.writeOpt() = IOobject::AUTO_WRITE; // Flux estimate for introduced faces. volVectorField rhoU("rhoU", rho*U); // Do any mesh changes meshChanged = mesh.update(); // if (mesh.moving() || meshChanged) // { //# include "correctPhi.H" // } // Make the fluxes relative to the mesh motion fvc::makeRelative(phi, rho, U); } # include "rhoEqn.H" # include "UEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { # include "bEqn.H" # include "ftEqn.H" # include "huEqn.H" # include "hEqn.H" if (!ign.ignited()) { hu == h; } # include "pEqn.H" } turbulence->correct(); runTime.write(); Info<< "\nExecutionTime = " << runTime.elapsedCpuTime() << " s\n" << endl; } Info<< "\n end\n"; return 0; }
int main(int argc, char *argv[]) { #define NO_CONTROL #include "postProcess.H" #include "setRootCase.H" #include "createTime.H" #include "createDynamicFvMesh.H" #include "createFields.H" #include "createFieldRefs.H" #include "createTimeControls.H" turbulence->validate(); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "readFluxScheme.H" dimensionedScalar v_zero("v_zero", dimVolume/dimTime, 0.0); // Courant numbers used to adjust the time-step scalar CoNum = 0.0; scalar meanCoNum = 0.0; Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { #include "readTimeControls.H" #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; // Do any mesh changes mesh.update(); // --- Directed interpolation of primitive fields onto faces surfaceScalarField rho_pos(interpolate(rho, pos)); surfaceScalarField rho_neg(interpolate(rho, neg)); surfaceVectorField rhoU_pos(interpolate(rhoU, pos, U.name())); surfaceVectorField rhoU_neg(interpolate(rhoU, neg, U.name())); volScalarField rPsi("rPsi", 1.0/psi); surfaceScalarField rPsi_pos(interpolate(rPsi, pos, T.name())); surfaceScalarField rPsi_neg(interpolate(rPsi, neg, T.name())); surfaceScalarField e_pos(interpolate(e, pos, T.name())); surfaceScalarField e_neg(interpolate(e, neg, T.name())); surfaceVectorField U_pos("U_pos", rhoU_pos/rho_pos); surfaceVectorField U_neg("U_neg", rhoU_neg/rho_neg); surfaceScalarField p_pos("p_pos", rho_pos*rPsi_pos); surfaceScalarField p_neg("p_neg", rho_neg*rPsi_neg); surfaceScalarField phiv_pos("phiv_pos", U_pos & mesh.Sf()); surfaceScalarField phiv_neg("phiv_neg", U_neg & mesh.Sf()); // Make fluxes relative to mesh-motion if (mesh.moving()) { phiv_pos -= mesh.phi(); phiv_neg -= mesh.phi(); } volScalarField c("c", sqrt(thermo.Cp()/thermo.Cv()*rPsi)); surfaceScalarField cSf_pos ( "cSf_pos", interpolate(c, pos, T.name())*mesh.magSf() ); surfaceScalarField cSf_neg ( "cSf_neg", interpolate(c, neg, T.name())*mesh.magSf() ); surfaceScalarField ap ( "ap", max(max(phiv_pos + cSf_pos, phiv_neg + cSf_neg), v_zero) ); surfaceScalarField am ( "am", min(min(phiv_pos - cSf_pos, phiv_neg - cSf_neg), v_zero) ); surfaceScalarField a_pos("a_pos", ap/(ap - am)); surfaceScalarField amaxSf("amaxSf", max(mag(am), mag(ap))); surfaceScalarField aSf("aSf", am*a_pos); if (fluxScheme == "Tadmor") { aSf = -0.5*amaxSf; a_pos = 0.5; } surfaceScalarField a_neg("a_neg", 1.0 - a_pos); phiv_pos *= a_pos; phiv_neg *= a_neg; surfaceScalarField aphiv_pos("aphiv_pos", phiv_pos - aSf); surfaceScalarField aphiv_neg("aphiv_neg", phiv_neg + aSf); // Reuse amaxSf for the maximum positive and negative fluxes // estimated by the central scheme amaxSf = max(mag(aphiv_pos), mag(aphiv_neg)); #include "centralCourantNo.H" phi = aphiv_pos*rho_pos + aphiv_neg*rho_neg; surfaceVectorField phiUp ( (aphiv_pos*rhoU_pos + aphiv_neg*rhoU_neg) + (a_pos*p_pos + a_neg*p_neg)*mesh.Sf() ); surfaceScalarField phiEp ( "phiEp", aphiv_pos*(rho_pos*(e_pos + 0.5*magSqr(U_pos)) + p_pos) + aphiv_neg*(rho_neg*(e_neg + 0.5*magSqr(U_neg)) + p_neg) + aSf*p_pos - aSf*p_neg ); // Make flux for pressure-work absolute if (mesh.moving()) { phiEp += mesh.phi()*(a_pos*p_pos + a_neg*p_neg); } volScalarField muEff("muEff", turbulence->muEff()); volTensorField tauMC("tauMC", muEff*dev2(Foam::T(fvc::grad(U)))); // --- Solve density solve(fvm::ddt(rho) + fvc::div(phi)); // --- Solve momentum solve(fvm::ddt(rhoU) + fvc::div(phiUp)); U.ref() = rhoU() /rho(); U.correctBoundaryConditions(); rhoU.boundaryFieldRef() == rho.boundaryField()*U.boundaryField(); if (!inviscid) { solve ( fvm::ddt(rho, U) - fvc::ddt(rho, U) - fvm::laplacian(muEff, U) - fvc::div(tauMC) ); rhoU = rho*U; } // --- Solve energy surfaceScalarField sigmaDotU ( "sigmaDotU", ( fvc::interpolate(muEff)*mesh.magSf()*fvc::snGrad(U) + fvc::dotInterpolate(mesh.Sf(), tauMC) ) & (a_pos*U_pos + a_neg*U_neg) ); solve ( fvm::ddt(rhoE) + fvc::div(phiEp) - fvc::div(sigmaDotU) ); e = rhoE/rho - 0.5*magSqr(U); e.correctBoundaryConditions(); thermo.correct(); rhoE.boundaryFieldRef() == rho.boundaryField()* ( e.boundaryField() + 0.5*magSqr(U.boundaryField()) ); if (!inviscid) { solve ( fvm::ddt(rho, e) - fvc::ddt(rho, e) - fvm::laplacian(turbulence->alphaEff(), e) ); thermo.correct(); rhoE = rho*(e + 0.5*magSqr(U)); } p.ref() = rho() /psi(); p.correctBoundaryConditions(); rho.boundaryFieldRef() == psi.boundaryField()*p.boundaryField(); turbulence->correct(); runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; } Info<< "End\n" << endl; return 0; }
int main(int argc, char *argv[]) { #include "postProcess.H" #include "setRootCase.H" #include "createTime.H" #include "createDynamicFvMesh.H" #include "createControl.H" #include "createControls.H" #include "createFields.H" #include "createFieldRefs.H" #include "createRhoUf.H" #include "createFvOptions.H" #include "compressibleCourantNo.H" #include "setInitialDeltaT.H" #include "initContinuityErrs.H" turbulence->validate(); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { #include "readControls.H" { // Store divrhoU from the previous time-step/mesh for the correctPhi volScalarField divrhoU ( "divrhoU", fvc::div(fvc::absolute(phi, rho, U)) ); #include "compressibleCourantNo.H" #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; // Store momentum to set rhoUf for introduced faces. volVectorField rhoU("rhoU", rho*U); // Do any mesh changes mesh.update(); if (mesh.changing() && correctPhi) { // Calculate absolute flux from the mapped surface velocity phi = mesh.Sf() & rhoUf; #include "correctPhi.H" // Make the fluxes relative to the mesh-motion fvc::makeRelative(phi, rho, U); } } if (mesh.changing() && checkMeshCourantNo) { #include "meshCourantNo.H" } parcels.evolve(); #include "rhoEqn.H" // --- Pressure-velocity PIMPLE corrector loop while (pimple.loop()) { #include "UEqn.H" #include "YEqn.H" #include "EEqn.H" // --- Pressure corrector loop while (pimple.correct()) { #include "pEqn.H" } if (pimple.turbCorr()) { turbulence->correct(); } } rho = thermo.rho(); if (runTime.write()) { combustion->dQ()().write(); } Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; } Info<< "End\n" << endl; return 0; }
int main(int argc, char *argv[]) { #include "setRootCase.H" #include "createTime.H" #include "createDynamicFvMesh.H" pimpleControl pimple(mesh); #include "createRDeltaT.H" #include "initContinuityErrs.H" #include "createFields.H" #include "createMRF.H" #include "createFvOptions.H" #include "createRhoUf.H" #include "createControls.H" if (!LTS) { #include "compressibleCourantNo.H" #include "setInitialDeltaT.H" } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { #include "readControls.H" { // Store divrhoU from the previous mesh so that it can be mapped // and used in correctPhi to ensure the corrected phi has the // same divergence volScalarField divrhoU ( "divrhoU", fvc::div(fvc::absolute(phi, rho, U)) ); if (LTS) { #include "setRDeltaT.H" } else { #include "compressibleCourantNo.H" #include "setDeltaT.H" } runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; // Store momentum to set rhoUf for introduced faces. volVectorField rhoU("rhoU", rho*U); // Do any mesh changes mesh.update(); if (mesh.changing() && correctPhi) { // Calculate absolute flux from the mapped surface velocity phi = mesh.Sf() & rhoUf; #include "correctPhi.H" // Make the fluxes relative to the mesh-motion fvc::makeRelative(phi, rho, U); } } if (mesh.changing() && checkMeshCourantNo) { #include "meshCourantNo.H" } #include "rhoEqn.H" Info<< "rhoEqn max/min : " << max(rho).value() << " " << min(rho).value() << endl; // --- Pressure-velocity PIMPLE corrector loop while (pimple.loop()) { #include "UEqn.H" #include "EEqn.H" // --- Pressure corrector loop while (pimple.correct()) { #include "pEqn.H" } if (pimple.turbCorr()) { turbulence->correct(); } } runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; } Info<< "End\n" << endl; return 0; }