int main(int argc, char *argv[]) { # include "addTimeOptions.H" # include "setRootCase.H" # include "createTime.H" // Get times list instantList Times = runTime.times(); // set startTime and endTime depending on -time and -latestTime options # include "checkTimeOptions.H" runTime.setTime(Times[startTime], startTime); # include "createMesh.H" # include "readGravitationalAcceleration.H" const dictionary& piso = mesh.solutionDict().subDict("PISO"); label pRefCell = 0; scalar pRefValue = 0.0; int nNonOrthCorr = 0; if (piso.found("nNonOrthogonalCorrectors")) { nNonOrthCorr = readInt(piso.lookup("nNonOrthogonalCorrectors")); } for (label i = startTime; i < endTime; i++) { runTime.setTime(Times[i], i); Info<< "Time = " << runTime.timeName() << endl; IOobject pdHeader ( "pd", runTime.timeName(), mesh, IOobject::MUST_READ ); IOobject gammaHeader ( "gamma", runTime.timeName(), mesh, IOobject::MUST_READ ); IOobject Uheader ( "U", runTime.timeName(), mesh, IOobject::MUST_READ ); IOobject phiHeader ( "phi", runTime.timeName(), mesh, IOobject::MUST_READ ); // Check all fields exists if ( pdHeader.headerOk() && gammaHeader.headerOk() && Uheader.headerOk() && phiHeader.headerOk() ) { mesh.readUpdate(); Info<< " Reading pd" << endl; volScalarField pd(pdHeader, mesh); Info<< " Reading gamma" << endl; volScalarField gamma(gammaHeader, mesh); Info<< " Reading U" << endl; volVectorField U(Uheader, mesh); Info<< " Reading phi" << endl; surfaceScalarField phi(phiHeader, mesh); Info<< "Reading transportProperties\n" << endl; twoPhaseMixture twoPhaseProperties(U, phi, "gamma"); twoPhaseProperties.correct(); // Construct interface from gamma distribution interfaceProperties interface(gamma, U, twoPhaseProperties); // Create momentum matrix const dimensionedScalar& rho1 = twoPhaseProperties.rho1(); const dimensionedScalar& rho2 = twoPhaseProperties.rho2(); volScalarField rho ( IOobject ( "rho", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT ), gamma*rho1 + (scalar(1) - gamma)*rho2, gamma.boundaryField().types() ); surfaceScalarField rhoPhi ( IOobject ( "rho*phi", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), fvc::interpolate(rho)*phi ); surfaceScalarField muf = twoPhaseProperties.muf(); fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U) - fvm::laplacian(muf, U) - (fvc::grad(U) & fvc::grad(muf)) == interface.sigmaK()*fvc::grad(gamma) + rho*g ); // Solve for static pressure volScalarField p ( IOobject ( "p", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ), pd ); setRefCell(p, piso, pRefCell, pRefValue); volScalarField rUA = 1.0/UEqn.A(); surfaceScalarField rUAf = fvc::interpolate(rUA); U = rUA*UEqn.H(); phi = fvc::interpolate(U) & mesh.Sf(); for(int nonOrth = 0; nonOrth <= nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( fvm::laplacian(rUAf, p) == fvc::div(phi) ); pEqn.setReference(pRefCell, pRefValue); pEqn.solve(); } Info << "Writing p" << endl; p.write(); } else { Info << "Not all fields are present. " << endl; if (!pdHeader.headerOk()) { Info << "pd "; } if (!gammaHeader.headerOk()) { Info << "gamma "; } if (!Uheader.headerOk()) { Info << "U "; } if (!phiHeader.headerOk()) { Info << "phi "; } Info << "missing." << endl; } } Info<< "End\n" << endl; return(0); }
int main(int argc, char *argv[]) { #include "setRootCase.H" #include "createTime.H" #include "createMesh.H" pimpleControl pimple(mesh); #include "createFields.H" #include "createFvOptions.H" #include "createTimeControls.H" #include "CourantNo.H" #include "setInitialDeltaT.H" turbulence->validate(); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { #include "createTimeControls.H" #include "CourantNo.H" #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; // --- Pressure-velocity PIMPLE corrector loop while (pimple.loop()) { #include "alphaControls.H" surfaceScalarField rhoPhi ( IOobject ( "rhoPhi", runTime.timeName(), mesh ), mesh, dimensionedScalar("0", dimMass/dimTime, 0) ); mixture->correct(); #include "alphaEqnSubCycle.H" interface.correct(); #include "UEqn.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; }
int main(int argc, char *argv[]) { #include "setRootCase.H" #include "createTime.H" #include "createDynamicFvMesh.H" pimpleControl pimple(mesh); #include "../interFoam/interDyMFoam/createControls.H" #include "initContinuityErrs.H" #include "createFields.H" #include "createFvOptions.H" volScalarField rAU ( IOobject ( "rAU", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), mesh, dimensionedScalar("rAUf", dimTime/rho.dimensions(), 1.0) ); #include "createUf.H" #include "CourantNo.H" #include "setInitialDeltaT.H" turbulence->validate(); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { #include "../interFoam/interDyMFoam/readControls.H" // Store divU from the previous mesh so that it can be mapped // and used in correctPhi to ensure the corrected phi has the // same divergence volScalarField divU("divU0", fvc::div(fvc::absolute(phi, U))); #include "CourantNo.H" #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; // --- Pressure-velocity PIMPLE corrector loop while (pimple.loop()) { if (pimple.firstIter() || moveMeshOuterCorrectors) { scalar timeBeforeMeshUpdate = runTime.elapsedCpuTime(); mesh.update(); if (mesh.changing()) { Info<< "Execution time for mesh.update() = " << runTime.elapsedCpuTime() - timeBeforeMeshUpdate << " s" << endl; gh = (g & mesh.C()) - ghRef; ghf = (g & mesh.Cf()) - ghRef; } if (mesh.changing() && correctPhi) { // Calculate absolute flux from the mapped surface velocity phi = mesh.Sf() & Uf; #include "correctPhi.H" // Make the flux relative to the mesh motion fvc::makeRelative(phi, U); } if (mesh.changing() && checkMeshCourantNo) { #include "meshCourantNo.H" } } #include "alphaControls.H" surfaceScalarField rhoPhi ( IOobject ( "rhoPhi", runTime.timeName(), mesh ), mesh, dimensionedScalar("0", dimMass/dimTime, 0) ); mixture->correct(); #include "alphaEqnSubCycle.H" interface.correct(); #include "UEqn.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; }