diff --git a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/UEqns.H b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/UEqns.H index ed150abb88..fe40ce2f49 100644 --- a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/UEqns.H +++ b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/UEqns.H @@ -18,7 +18,7 @@ fvVectorMatrix U2Eqn(U2, U2.dimensions()*dimVol/dimTime); volTensorField Rc1 ( "Rc1", - ((2.0/3.0)*I)*(sqr(Ct)*k + nuEff1*tr(gradU1T)) - nuEff1*gradU1T + (((2.0/3.0)*I)*nuEff1)*tr(gradU1T) - nuEff1*gradU1T ); if (kineticTheory.on()) @@ -28,19 +28,24 @@ fvVectorMatrix U2Eqn(U2, U2.dimensions()*dimVol/dimTime); U1Eqn = ( - (scalar(1) + Cvm*rho2*alpha2/rho1)* + fvm::ddt(alpha1, U1) + + fvm::div(alphaPhi1, U1) + - fvm::Sp(fvc::ddt(alpha1) + fvc::div(alphaPhi1), U1) + + + Cvm*rho2*alpha1*alpha2/rho1* ( - fvm::ddt(alpha1, U1) - + fvm::div(alphaPhi1, U1) - - fvm::Sp(fvc::ddt(alpha1) + fvc::div(alphaPhi1), U1) + fvm::ddt(U1) + + fvm::div(phi1, U1) + - fvm::Sp(fvc::div(phi1), U1) ) + - fvm::laplacian(alpha1*nuEff1, U1) + fvc::div(alpha1*Rc1) == - fvm::Sp(dragCoeff/rho1, U1) - alpha1*alpha2/rho1*(liftForce - Cvm*rho2*DDtU2) ); - + mrfZones.addCoriolis(alpha1, U1Eqn); U1Eqn.relax(); } @@ -49,24 +54,29 @@ fvVectorMatrix U2Eqn(U2, U2.dimensions()*dimVol/dimTime); volTensorField Rc2 ( "Rc2", - ((2.0/3.0)*I)*(k + nuEff2*tr(gradU2T)) - nuEff2*gradU2T + (((2.0/3.0)*I)*nuEff2)*tr(gradU2T) - nuEff2*gradU2T ); U2Eqn = ( - (scalar(1) + Cvm*rho2*alpha1/rho2)* + fvm::ddt(alpha2, U2) + + fvm::div(alphaPhi2, U2) + - fvm::Sp(fvc::ddt(alpha2) + fvc::div(alphaPhi2), U2) + + + Cvm*rho2*alpha1*alpha2/rho2* ( - fvm::ddt(alpha2, U2) - + fvm::div(alphaPhi2, U2) - - fvm::Sp(fvc::ddt(alpha2) + fvc::div(alphaPhi2), U2) + fvm::ddt(U2) + + fvm::div(phi2, U2) + - fvm::Sp(fvc::div(phi2), U2) ) + - fvm::laplacian(alpha2*nuEff2, U2) + fvc::div(alpha2*Rc2) == - fvm::Sp(dragCoeff/rho2, U2) + alpha1*alpha2/rho2*(liftForce + Cvm*rho2*DDtU1) ); - + mrfZones.addCoriolis(alpha2, U2Eqn); U2Eqn.relax(); } } diff --git a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/compressibleTwoPhaseEulerFoam.C b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/compressibleTwoPhaseEulerFoam.C index d29da482ba..78d70a1537 100644 --- a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/compressibleTwoPhaseEulerFoam.C +++ b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/compressibleTwoPhaseEulerFoam.C @@ -45,6 +45,8 @@ Description #include "pimpleControl.H" +#include "MRFZones.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) @@ -55,6 +57,7 @@ int main(int argc, char *argv[]) #include "createMesh.H" #include "readGravitationalAcceleration.H" #include "createFields.H" + #include "createMRFZones.H" #include "readPPProperties.H" #include "initContinuityErrs.H" #include "readTimeControls.H" diff --git a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/createMRFZones.H b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/createMRFZones.H new file mode 100644 index 0000000000..4d5c2bab72 --- /dev/null +++ b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/createMRFZones.H @@ -0,0 +1,4 @@ + MRFZones mrfZones(mesh); + mrfZones.correctBoundaryVelocity(U1); + mrfZones.correctBoundaryVelocity(U2); + mrfZones.correctBoundaryVelocity(U); diff --git a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H index d2ef15776d..aabbc6d4c2 100644 --- a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H @@ -2,6 +2,11 @@ rho1 = rho10 + psi1*p; rho2 = rho20 + psi2*p; + mrfZones.absoluteFlux(phi1.oldTime()); + mrfZones.absoluteFlux(phi1); + mrfZones.absoluteFlux(phi2.oldTime()); + mrfZones.absoluteFlux(phi2); + surfaceScalarField alpha1f(fvc::interpolate(alpha1)); surfaceScalarField alpha2f(scalar(1) - alpha1f); @@ -25,6 +30,7 @@ + fvc::interpolate((1.0/rho1)*rAU1*dragCoeff)*phi2 + rAlphaAU1f*(g & mesh.Sf()) ); + mrfZones.relativeFlux(phiHbyA1); surfaceScalarField phiHbyA2 ( @@ -34,9 +40,13 @@ + fvc::interpolate((1.0/rho2)*rAU2*dragCoeff)*phi1 + rAlphaAU2f*(g & mesh.Sf()) ); + mrfZones.relativeFlux(phiHbyA2); surfaceScalarField phiHbyA("phiHbyA", alpha1f*phiHbyA1 + alpha2f*phiHbyA2); + HbyA1 += (1.0/rho1)*rAU1*dragCoeff*U2; + HbyA2 += (1.0/rho2)*rAU2*dragCoeff*U1; + surfaceScalarField Dp ( "Dp", @@ -94,10 +104,12 @@ phi1.boundaryField() == (fvc::interpolate(U1) & mesh.Sf())().boundaryField(); phi1 = phiHbyA1 + rAlphaAU1f*mSfGradp/fvc::interpolate(rho1); + mrfZones.relativeFlux(phi1.oldTime()); phi2.boundaryField() == (fvc::interpolate(U2) & mesh.Sf())().boundaryField(); phi2 = phiHbyA2 + rAlphaAU2f*mSfGradp/fvc::interpolate(rho2); + mrfZones.relativeFlux(phi2.oldTime()); phi = alpha1f*phi1 + alpha2f*phi2; @@ -110,10 +122,7 @@ p.relax(); mSfGradp = pEqnIncomp.flux()/Dp; - volVectorField U10 = U1; - U1 = HbyA1 - + (1.0/rho1)*rAU1*dragCoeff*U2 + fvc::reconstruct ( rAlphaAU1f*(g & mesh.Sf()) @@ -122,7 +131,6 @@ U1.correctBoundaryConditions(); U2 = HbyA2 - + (1.0/rho2)*rAU2*dragCoeff*U10 + fvc::reconstruct ( rAlphaAU2f*(g & mesh.Sf()) diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H b/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H index bce95f7d5a..b612e6b5d9 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H +++ b/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H @@ -15,12 +15,17 @@ forAllIter(PtrDictionary, fluid.phases(), iter) phasei, new fvVectorMatrix ( - (scalar(1) + fluid.Cvm(phase)/phase.rho())* + fvm::ddt(alpha, U) + + fvm::div(phase.phiAlpha(), U) + - fvm::Sp(fvc::ddt(alpha) + fvc::div(phase.phiAlpha()), U) + + + (alpha/phase.rho())*fluid.Cvm(phase)* ( - fvm::ddt(alpha, U) - + fvm::div(phase.phiAlpha(), U) - - fvm::Sp(fvc::ddt(alpha) + fvc::div(phase.phiAlpha()), U) + fvm::ddt(U) + + fvm::div(phase.phi(), U) + - fvm::Sp(fvc::div(phase.phi()), U) ) + - fvm::laplacian(alpha*nuEff, U) - fvc::div ( diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/pEqn.H b/applications/solvers/multiphase/multiphaseEulerFoam/pEqn.H index 4a817a1001..1c42c7b91a 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/pEqn.H +++ b/applications/solvers/multiphase/multiphaseEulerFoam/pEqn.H @@ -76,6 +76,7 @@ + fvc::ddtPhiCorr(rAUs[phasei], alpha, phase.U(), phase.phi()) + rAlphaAUfs[phasei]*(g & mesh.Sf()) ); + mrfZones.relativeFlux(phiHbyAs[phasei]); multiphaseSystem::dragModelTable::const_iterator dmIter = @@ -89,11 +90,20 @@ ++dmIter, ++dcIter ) { - const phaseModel *phase2Ptr = &dmIter()->phase2(); - if (phase2Ptr == &phase) + const phaseModel *phase2Ptr = NULL; + + if (&phase == &dmIter()->phase1()) + { + phase2Ptr = &dmIter()->phase2(); + } + else if (&phase == &dmIter()->phase2()) { phase2Ptr = &dmIter()->phase1(); } + else + { + continue; + } phiHbyAs[phasei] += fvc::interpolate @@ -105,6 +115,9 @@ (1.0/phase.rho())*rAUs[phasei]*(*dcIter()) *phase2Ptr->U(); + // Alternative flux-pressure consistent drag + // but not momentum conservative + // // HbyAs[phasei] += fvc::reconstruct // ( // fvc::interpolate diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H index 2fc0eff9eb..4d5c2bab72 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/MRFtwoPhaseEulerFoam/createMRFZones.H @@ -1,3 +1,4 @@ MRFZones mrfZones(mesh); mrfZones.correctBoundaryVelocity(U1); mrfZones.correctBoundaryVelocity(U2); + mrfZones.correctBoundaryVelocity(U); diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C index 50c9f30839..7a969e15d1 100644 --- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C +++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C @@ -111,10 +111,18 @@ void filterPatches(polyMesh& mesh, const HashSet& addedPatchNames) // Note: reduce possible since non-proc patches guaranteed in same order if (!isA(pp)) { + + // Add if + // - non zero size + // - or added from the createPatchDict + // - or cyclic (since referred to by other cyclic half or + // proccyclic) + if ( addedPatchNames.found(pp.name()) || returnReduce(pp.size(), sumOp