From 499933dbab825027d62b15cc930978c4412d536e Mon Sep 17 00:00:00 2001 From: sergio <s.ferraris@opencfd.co.uk> Date: Tue, 4 Feb 2020 13:14:04 -0800 Subject: [PATCH 1/4] ENH: Adding features for phase change solvers 1) Adding interfaceHeight FO 2) Adding interfaceHeatResistance mass transfer model to interCondensatingEvaporatingFoam with spread source approach 3) Reworking framework for icoReactingMultiphaseInterFoam --- .../icoReactingMultiphaseInterFoam/TEqn.H | 4 +- .../icoReactingMultiphaseInterFoam/UEqn.H | 2 +- .../icoReactingMultiphaseInterFoam.C | 4 +- .../massTransferModels/Lee/Lee.C | 107 +- .../massTransferModels/Lee/Lee.H | 19 +- .../interfaceCompositionModel.C | 6 + .../interfaceCompositionModel.H | 23 +- .../kineticGasEvaporation.C | 30 +- .../kineticGasEvaporation.H | 15 +- .../icoReactingMultiphaseInterFoam/pEqn.H | 42 +- .../MassTransferPhaseSystem.C | 506 ++++++++- .../MassTransferPhaseSystem.H | 19 +- .../MultiComponentPhaseModel.C | 4 +- .../multiphaseSystem/multiphaseSystem.C | 269 +---- .../multiphaseSystem/multiphaseSystem.H | 5 +- .../multiphaseSystem_backUp.C | 642 +++++++++++ .../phasesSystem/phaseSystem/phaseSystem.C | 29 +- .../phasesSystem/phaseSystem/phaseSystem.H | 28 +- .../Make/options | 12 +- .../interCondensatingEvaporatingFoam/TEqn.H | 19 +- .../alphaCourantNo.H | 59 + .../createFields.H | 32 + .../interCondensatingEvaporatingFoam.C | 89 +- .../interCondensatingEvaporatingFoam/pEqn.H | 3 +- .../Make/files | 1 + .../constant/constant.C | 86 +- .../constant/constant.H | 3 + .../interfaceHeatResistance.C | 409 +++++++ .../interfaceHeatResistance.H | 155 +++ .../temperaturePhaseChangeTwoPhaseMixture.C | 4 +- .../temperaturePhaseChangeTwoPhaseMixture.H | 10 +- .../thermoIncompressibleTwoPhaseMixture.C | 2 +- .../thermoIncompressibleTwoPhaseMixture.H | 2 +- .../twoPhaseMixtureEThermo.C | 146 +-- .../twoPhaseMixtureEThermo.H | 34 +- .../interPhaseChangeFoam/alphaEqn.H | 3 + .../interPhaseChangeFoam/alphaEqnSubCycle.H | 12 +- .../interPhaseChangeFoam/createFields.H | 16 + .../finiteVolume/fvc/fvcSmooth/fvcSmooth.C | 103 ++ .../finiteVolume/fvc/fvcSmooth/fvcSmooth.H | 19 + src/functionObjects/field/Make/files | 2 + .../field/interfaceHeight/interfaceHeight.C | 289 +++++ .../field/interfaceHeight/interfaceHeight.H | 181 +++ .../stefanProblem/0.orig/T | 47 + .../stefanProblem/0.orig/U | 46 + .../stefanProblem/0.orig/alpha.gas | 41 + .../stefanProblem/0.orig/alpha.liquid | 41 + .../stefanProblem/0.orig/p | 48 + .../stefanProblem/0.orig/p_rgh | 48 + .../stefanProblem/Allclean | 12 + .../stefanProblem/Allrun | 19 + .../stefanProblem/constant/g | 22 + .../stefanProblem/constant/phaseProperties | 50 + .../constant/thermophysicalProperties.gas | 54 + .../constant/thermophysicalProperties.liquid | 52 + .../constant/transportProperties | 49 + .../constant/turbulenceProperties | 21 + .../stefanProblem/data.dat | 1001 +++++++++++++++++ .../stefanProblem/plotGraph | 25 + .../stefanProblem/system/blockMeshDict | 63 ++ .../stefanProblem/system/controlDict | 68 ++ .../stefanProblem/system/fvSchemes | 66 ++ .../stefanProblem/system/fvSolution | 111 ++ .../stefanProblem/system/setAlphaFieldDict | 23 + .../system/setAlphaFieldDict.gas | 23 + .../system/setAlphaFieldDict.liquid | 23 + .../stefanProblem/0.orig/T | 45 + .../stefanProblem/0.orig/U | 46 + .../stefanProblem/0.orig/alpha.liquid | 34 + .../stefanProblem/0.orig/p | 48 + .../stefanProblem/0.orig/p_rgh | 48 + .../stefanProblem/Allclean | 12 + .../stefanProblem/Allrun | 14 + .../stefanProblem/constant/g | 22 + .../constant/phaseChangeProperties | 33 + .../constant/thermophysicalProperties | 20 + .../constant/transportProperties | 49 + .../constant/turbulenceProperties | 21 + .../stefanProblem/data.dat | 1001 +++++++++++++++++ .../stefanProblem/plotGraph | 25 + .../stefanProblem/system/blockMeshDict | 63 ++ .../stefanProblem/system/controlDict | 68 ++ .../stefanProblem/system/fvSchemes | 58 + .../stefanProblem/system/fvSolution | 118 ++ .../stefanProblem/system/setAlphaFieldDict | 23 + 85 files changed, 6607 insertions(+), 539 deletions(-) create mode 100644 applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem_backUp.C create mode 100644 applications/solvers/multiphase/interCondensatingEvaporatingFoam/alphaCourantNo.H create mode 100644 applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.C create mode 100644 applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.H create mode 100644 src/functionObjects/field/interfaceHeight/interfaceHeight.C create mode 100644 src/functionObjects/field/interfaceHeight/interfaceHeight.H create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allclean create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun create mode 100644 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid create mode 100644 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties create mode 100644 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/data.dat create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/plotGraph create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas create mode 100755 tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allclean create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun create mode 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties create mode 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties create mode 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/data.dat create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/plotGraph create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution create mode 100755 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/TEqn.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/TEqn.H index 68744f7043b..c0405456173 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/TEqn.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/TEqn.H @@ -1,7 +1,7 @@ { radiation->correct(); rhoCp = rho*fluid.Cp(); - + const surfaceScalarField rhoCpPhi(fvc::interpolate(fluid.Cp())*rhoPhi); const volScalarField kappaEff @@ -31,7 +31,7 @@ fvOptions.correct(T); fluid.correct(); - + Info<< "min/max(T) = " << min(T).value() << ", " << max(T).value() << endl; } diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/UEqn.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/UEqn.H index 4422f0bd578..9d0a424d265 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/UEqn.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/UEqn.H @@ -2,7 +2,7 @@ fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U) - //- fvm::Sp(fvc::ddt(rho) + fvc::div(rhoPhi), U) +//- fvm::Sp(fvc::ddt(rho) + fvc::div(rhoPhi), U) + turbulence->divDevRhoReff(U) == fvOptions(rho, U) diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/icoReactingMultiphaseInterFoam.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/icoReactingMultiphaseInterFoam.C index 0c42797f4ca..9bbe933d8c0 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/icoReactingMultiphaseInterFoam.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/icoReactingMultiphaseInterFoam.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -98,13 +98,13 @@ int main(int argc, char *argv[]) Info<< "Time = " << runTime.timeName() << nl << endl; + fluid.correctMassSources(T); fluid.solve(); rho = fluid.rho(); // --- Pressure-velocity PIMPLE corrector loop while (pimple.loop()) { - solve(fvm::ddt(rho) + fvc::div(rhoPhi)); #include "UEqn.H" #include "YEqns.H" #include "TEqn.H" diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.C index 7588b83c9dc..190b7fbb1d0 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.C @@ -50,6 +50,44 @@ Foam::meltingEvaporationModels::Lee<Thermo, OtherThermo>::Lee template<class Thermo, class OtherThermo> Foam::tmp<Foam::volScalarField> Foam::meltingEvaporationModels::Lee<Thermo, OtherThermo>::Kexp +( + const volScalarField& refValue +) +{ + { + const volScalarField from + ( + min(max(this->pair().from(), scalar(0)), scalar(1)) + ); + + const volScalarField coeff + ( + C_*from*this->pair().from().rho()*pos(from - alphaMin_) + *(refValue - Tactivate_) + /Tactivate_ + ); + + if (sign(C_.value()) > 0) + { + return + ( + coeff*pos(refValue - Tactivate_) + ); + } + else + { + return + ( + coeff*pos(Tactivate_ - refValue) + ); + } + } +} + + +template<class Thermo, class OtherThermo> +Foam::tmp<Foam::volScalarField> +Foam::meltingEvaporationModels::Lee<Thermo, OtherThermo>::KSp ( label variable, const volScalarField& refValue @@ -61,31 +99,68 @@ Foam::meltingEvaporationModels::Lee<Thermo, OtherThermo>::Kexp ( min(max(this->pair().from(), scalar(0)), scalar(1)) ); + + const volScalarField coeff + ( + C_*from*this->pair().from().rho()*pos(from - alphaMin_) + /Tactivate_ + ); if (sign(C_.value()) > 0) { return ( - C_ - * from - * this->pair().from().rho() - * (refValue.oldTime() - Tactivate_) - * pos(from - alphaMin_) - * pos(refValue.oldTime() - Tactivate_)/Tactivate_ + coeff*pos(refValue - Tactivate_) ); } else { return ( - -C_ - * from - * this->pair().from().rho() - * pos(from - alphaMin_) - * (Tactivate_ - refValue.oldTime()) - * pos(Tactivate_ - refValue.oldTime())/Tactivate_ + coeff*pos(Tactivate_ - refValue) ); + } + } + else + { + return tmp<volScalarField> (); + } +} + +template<class Thermo, class OtherThermo> +Foam::tmp<Foam::volScalarField> +Foam::meltingEvaporationModels::Lee<Thermo, OtherThermo>::KSu +( + label variable, + const volScalarField& refValue +) +{ + if (this->modelVariable_ == variable) + { + volScalarField from + ( + min(max(this->pair().from(), scalar(0)), scalar(1)) + ); + + const volScalarField coeff + ( + C_*from*this->pair().from().rho()*pos(from - alphaMin_) + ); + + if (sign(C_.value()) > 0) + { + return + ( + -coeff*pos(refValue - Tactivate_) + ); + } + else + { + return + ( + coeff*pos(Tactivate_ - refValue) + ); } } else @@ -103,4 +178,12 @@ Foam::meltingEvaporationModels::Lee<Thermo, OtherThermo>::Tactivate() const } +template<class Thermo, class OtherThermo> +bool +Foam::meltingEvaporationModels::Lee<Thermo, OtherThermo>::includeDivU() +{ + return true; +} + + // ************************************************************************* // diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.H index 9743ddcfb20..97059d4f299 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/Lee/Lee.H @@ -146,12 +146,29 @@ public: //- Explicit mass transfer coefficient virtual tmp<volScalarField> Kexp ( - label variable, + const volScalarField& field + ); + + //- Implicit mass transfer coefficient + virtual tmp<volScalarField> KSp + ( + label modelVariable, + const volScalarField& field + ); + + //- Explicit mass transfer coefficient + virtual tmp<volScalarField> KSu + ( + label modelVariable, const volScalarField& field ); //- Return T transition between phases virtual const dimensionedScalar& Tactivate() const; + + //- Adds and substract alpha*div(U) as a source term + // for alpha, substituting div(U) = mDot(1/rho1 - 1/rho2) + virtual bool includeDivU(); }; diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.C index 442b484bcd4..8d54a861079 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.C @@ -90,4 +90,10 @@ const Foam::word Foam::interfaceCompositionModel::variable() const } +bool Foam::interfaceCompositionModel::includeDivU() +{ + return true; +} + + // ************************************************************************* // diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.H index a4ccf813a23..498290199b6 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/interfaceCompositionModel/interfaceCompositionModel.H @@ -67,7 +67,8 @@ public: { T, /* temperature based */ P, /* pressure based */ - Y /* mass fraction based */ + Y, /* mass fraction based */ + alpha /* alpha source */ }; static const Enum<modelVariable> modelVariableNames; @@ -170,15 +171,33 @@ public: const volScalarField& Tf ) const = 0; - //- Explicit mass transfer coefficient + //- Explicit full mass transfer virtual tmp<volScalarField> Kexp + ( + const volScalarField& field + ) = 0; + + //- Implicit mass transfer + virtual tmp<volScalarField> KSp + ( + label modelVariable, + const volScalarField& field + ) = 0; + + //- Explicit mass transfer + virtual tmp<volScalarField> KSu ( label modelVariable, const volScalarField& field ) = 0; + //- Reference value virtual const dimensionedScalar& Tactivate() const = 0; + + //- Adds and substract alpha*div(U) as a source term + // for alpha, substituting div(U) = mDot(1/rho1 - 1/rho2) + virtual bool includeDivU(); //- Returns the variable on which the model is based const word variable() const; diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.C index 53a398f44ff..3c544fdaeaa 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.C @@ -88,9 +88,8 @@ Foam::meltingEvaporationModels::kineticGasEvaporation<Thermo, OtherThermo> template<class Thermo, class OtherThermo> Foam::tmp<Foam::volScalarField> Foam::meltingEvaporationModels::kineticGasEvaporation<Thermo, OtherThermo> -::Kexp(label variable, const volScalarField& field) +::Kexp(const volScalarField& field) { - if (this->modelVariable_ == variable) { const volScalarField& to = this->pair().to(); @@ -246,10 +245,29 @@ Foam::meltingEvaporationModels::kineticGasEvaporation<Thermo, OtherThermo> return massFluxEvap*areaDensity*Nl*from; } - else - { - return tmp<volScalarField> (); - } +} + +template<class Thermo, class OtherThermo> +Foam::tmp<Foam::volScalarField> +Foam::meltingEvaporationModels::kineticGasEvaporation<Thermo, OtherThermo>::KSu +( + label variable, + const volScalarField& refValue +) +{ + return tmp<volScalarField> (); +} + + +template<class Thermo, class OtherThermo> +Foam::tmp<Foam::volScalarField> +Foam::meltingEvaporationModels::kineticGasEvaporation<Thermo, OtherThermo>::KSp +( + label variable, + const volScalarField& refValue +) +{ + return tmp<volScalarField> (); } diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.H index 8f6fbace00b..4c85bf2e03b 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/massTransferModels/kineticGasEvaporation/kineticGasEvaporation.H @@ -185,7 +185,20 @@ public: //- Explicit mass transfer coefficient virtual tmp<volScalarField> Kexp ( - label variable, + const volScalarField& field + ); + + //- Implicit mass transfer coefficient + virtual tmp<volScalarField> KSp + ( + label modelVariable, + const volScalarField& field + ); + + //- Explicit mass transfer coefficient + virtual tmp<volScalarField> KSu + ( + label modelVariable, const volScalarField& field ); diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/pEqn.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/pEqn.H index 5dd79906202..463f59da9e4 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/pEqn.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/pEqn.H @@ -33,47 +33,9 @@ ( fvc::div(phiHbyA) - fvm::laplacian(rAUf, p_rgh) + + fluid.volTransfer(p_rgh) ); - - forAllConstIters(fluid.totalPhasePairs(), iter) - { - const phasePair& pair = iter()(); - - const phaseModel& phase1 = pair.phase1(); - const phaseModel& phase2 = pair.phase2(); - - const phasePairKey key12 - ( - phase1.name(), - phase2.name(), - true - ); - - // Mass transfer from phase2 to phase1 - tmp<volScalarField> tdmdt12(fluid.dmdt(key12)); - const volScalarField& dmdt12 = tdmdt12(); - - const phasePairKey key21 - ( - phase2.name(), - phase1.name(), - true - ); - - // Mass transfer from phase1 to phase2 - tmp<volScalarField> tdmdt21(fluid.dmdt(key21)); - const volScalarField& dmdt21 = tdmdt21(); - - const volScalarField dmdtNet(dmdt21 - dmdt12); - - p_rghEqn += - dmdtNet* - ( - - fluid.coeffs(phase1.name()) - + fluid.coeffs(phase2.name()) - ); - } - + p_rghEqn.setReference(pRefCell, pRefValue); p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter()))); diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.C index 59b04864798..73a763bc3bc 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017 OpenCFD Ltd. + Copyright (C) 2017-202 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -32,6 +32,7 @@ License #include "fvcDiv.H" #include "fvmSup.H" #include "fvMatrix.H" +#include "volFields.H" #include "fundamentalConstants.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -152,9 +153,7 @@ Foam::MassTransferPhaseSystem<BasePhaseSystem>::dmdt ( "dmdt", this->mesh().time().timeName(), - this->mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE + this->mesh() ), this->mesh(), dimensionedScalar(dimDensity/dimTime, Zero) @@ -213,15 +212,45 @@ Foam::MassTransferPhaseSystem<BasePhaseSystem>::heatTransfer ( "tdmdtYki", this->mesh().time().timeName(), - this->mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE + this->mesh() ), this->mesh(), dimensionedScalar(dimDensity/dimTime, Zero) ) ); volScalarField& dmdtNetki = tdmdtNetki.ref(); + + tmp<volScalarField> tSp + ( + new volScalarField + ( + IOobject + ( + "Sp", + this->mesh().time().timeName(), + this->mesh() + ), + this->mesh(), + dimensionedScalar(dimDensity/dimTime/dimTemperature, Zero) + ) + ); + volScalarField& Sp = tSp.ref(); + + tmp<volScalarField> tSu + ( + new volScalarField + ( + IOobject + ( + "Su", + this->mesh().time().timeName(), + this->mesh() + ), + this->mesh(), + dimensionedScalar(dimDensity/dimTime, Zero) + ) + ); + volScalarField& Su = tSu.ref(); if (massTransferModels_.found(keyik)) @@ -229,14 +258,28 @@ Foam::MassTransferPhaseSystem<BasePhaseSystem>::heatTransfer autoPtr<interfaceCompositionModel>& interfacePtr = massTransferModels_[keyik]; - // Explicit temperature mass transfer rate - tmp<volScalarField> Kexp = - interfacePtr->Kexp(interfaceCompositionModel::T, T); - - if (Kexp.valid()) + dmdtNetki -= *dmdt_[keyik]; + + tmp<volScalarField> KSp = + interfacePtr->KSp(interfaceCompositionModel::T, T); + + if (KSp.valid()) { - dmdtNetki -= Kexp.ref(); - *dmdt_[keyik] = Kexp.ref(); + Sp -= KSp.ref(); + } + + tmp<volScalarField> KSu = + interfacePtr->KSu(interfaceCompositionModel::T, T); + + if (KSu.valid()) + { + Su -= KSu.ref(); + } + + // If linearization is not provided used full explicit + if (!KSp.valid() && !KSu.valid()) + { + Su -= *dmdt_[keyik]; } } @@ -246,37 +289,438 @@ Foam::MassTransferPhaseSystem<BasePhaseSystem>::heatTransfer autoPtr<interfaceCompositionModel>& interfacePtr = massTransferModels_[keyki]; - // Explicit temperature mass transfer rate - const tmp<volScalarField> Kexp = - interfacePtr->Kexp(interfaceCompositionModel::T, T); + dmdtNetki += *dmdt_[keyki]; - if (Kexp.valid()) + + tmp<volScalarField> KSp = + interfacePtr->KSp(interfaceCompositionModel::T, T); + + if (KSp.valid()) { - dmdtNetki += Kexp.ref(); - *dmdt_[keyki] = Kexp.ref(); + Sp += KSp.ref(); + } + + tmp<volScalarField> KSu = + interfacePtr->KSu(interfaceCompositionModel::T, T); + + if (KSu.valid()) + { + Su += KSu.ref(); + } + + // If linearization is not provided used full explicit + if (!KSp.valid() && !KSu.valid()) + { + Su += *dmdt_[keyki]; } - } - word keyikName(phasei.name() + phasek.name()); - word keykiName(phasek.name() + phasei.name()); + tmp<volScalarField> L = calculateL(dmdtNetki, keyik, keyki, T); - eqn -= - ( - dmdtNetki - *( - calculateL(dmdtNetki, keyik, keyki, T) - - (phasek.Cp() - phasei.Cp()) - * constant::standard::Tstd - ) + //eqn -= dmdtNetki*L; + eqn -= fvm::Sp(Sp*L.ref(), T) + Su*L.ref(); + } + } + } + return tEqnPtr; +} + + +template<class BasePhaseSystem> +Foam::tmp<Foam::fvScalarMatrix> +Foam::MassTransferPhaseSystem<BasePhaseSystem>::volTransfer +( + const volScalarField& p +) +{ + tmp<fvScalarMatrix> tEqnPtr + ( + new fvScalarMatrix(p, dimVolume/dimTime) + ); + + fvScalarMatrix& eqn = tEqnPtr.ref(); + + tmp<volScalarField> tSp + ( + new volScalarField + ( + IOobject + ( + "Sp", + this->mesh().time().timeName(), + this->mesh() + ), + this->mesh(), + dimensionedScalar(dimless/dimTime/dimPressure, Zero) + ) + ); + volScalarField& Sp = tSp.ref(); + + tmp<volScalarField> tSu + ( + new volScalarField + ( + IOobject + ( + "Su", + this->mesh().time().timeName(), + this->mesh() + ), + this->mesh(), + dimensionedScalar(dimless/dimTime, Zero) + ) + ); + volScalarField& Su = tSu.ref(); + + forAllConstIters(this->totalPhasePairs(), iter) + { + const phasePair& pair = iter()(); + + const phaseModel& phase1 = pair.phase1(); + const phaseModel& phase2 = pair.phase2(); + + const phasePairKey key12 + ( + phase1.name(), + phase2.name(), + true + ); + + if (massTransferModels_.found(key12)) + { + autoPtr<interfaceCompositionModel>& interfacePtr = + massTransferModels_[key12]; + + tmp<volScalarField> KSp = + interfacePtr->KSp(interfaceCompositionModel::P, p); + + if (KSp.valid()) + { + Sp += KSp.ref(); + } + + tmp<volScalarField> KSu = + interfacePtr->KSu(interfaceCompositionModel::P, p); + + if (KSu.valid()) + { + Su += KSu.ref(); + } + + // If linearization is not provided used full explicit + if (!KSp.valid() && !KSu.valid()) + { + Su -= + *dmdt_[key12] + *( + - this->coeffs(phase1.name()) + + this->coeffs(phase2.name()) + ); + } + } + + const phasePairKey key21 + ( + phase2.name(), + phase1.name(), + true + ); + + if (massTransferModels_.found(key21)) + { + autoPtr<interfaceCompositionModel>& interfacePtr = + massTransferModels_[key21]; + + tmp<volScalarField> KSp = + interfacePtr->KSp(interfaceCompositionModel::P, p); + + if (KSp.valid()) + { + Sp += KSp.ref(); + } + + tmp<volScalarField> KSu = + interfacePtr->KSu(interfaceCompositionModel::P, p); + + if (KSu.valid()) + { + Su += KSu.ref(); + } + + // If linearization is not provided used full explicit + if (!KSp.valid() && !KSu.valid()) + { + Su += + *dmdt_[key21] + *( + - this->coeffs(phase1.name()) + + this->coeffs(phase2.name()) ); } } + } + + eqn += fvm::Sp(Sp, p) + Su; return tEqnPtr; } +template<class BasePhaseSystem> +void Foam::MassTransferPhaseSystem<BasePhaseSystem>::correctMassSources +( + const volScalarField& T +) +{ + forAllConstIters(this->phaseModels_, iteri) + { + const phaseModel& phasei = iteri()(); + + auto iterk = iteri; + + for (++iterk; iterk != this->phaseModels_.end(); ++iterk) + { + if (iteri()().name() != iterk()().name()) + { + const phaseModel& phasek = iterk()(); + + // Phase i to phase k + const phasePairKey keyik(phasei.name(), phasek.name(), true); + + // Phase k to phase i + const phasePairKey keyki(phasek.name(), phasei.name(), true); + + if (massTransferModels_.found(keyik)) + { + autoPtr<interfaceCompositionModel>& interfacePtr = + massTransferModels_[keyik]; + + tmp<volScalarField> Kexp = interfacePtr->Kexp(T); + + *dmdt_[keyik] = Kexp.ref(); + + } + + if (massTransferModels_.found(keyki)) + { + autoPtr<interfaceCompositionModel>& interfacePtr = + massTransferModels_[keyki]; + + // Explicit temperature mass transfer rate + const tmp<volScalarField> Kexp = interfacePtr->Kexp(T); + + *dmdt_[keyki] = Kexp.ref(); + } + } + } + } +} + + +template<class BasePhaseSystem> +void Foam::MassTransferPhaseSystem<BasePhaseSystem>::alphaTransfer +( + SuSpTable& Su, + SuSpTable& Sp +) +{ + // This term adds and substract alpha*div(U) as a source term + // for alpha, substituting div(U) = mDot(1/rho1 - 1/rho2) + bool includeDivU(true); + + forAllConstIters(this->totalPhasePairs(), iter) + { + const phasePair& pair = iter()(); + + const phaseModel& phase1 = pair.phase1(); + const phaseModel& phase2 = pair.phase2(); + + const volScalarField& alpha1 = pair.phase1(); + const volScalarField& alpha2 = pair.phase2(); + + tmp<volScalarField> tCoeffs1 = this->coeffs(phase1.name()); + const volScalarField& coeffs1 = tCoeffs1(); + + tmp<volScalarField> tCoeffs2 = this->coeffs(phase2.name()); + const volScalarField& coeffs2 = tCoeffs2(); + + // Phase 1 to phase 2 + const phasePairKey key12 + ( + phase1.name(), + phase2.name(), + true + ); + + tmp<volScalarField> tdmdt12(this->dmdt(key12)); + volScalarField& dmdt12 = tdmdt12.ref(); + + if (massTransferModels_.found(key12)) + { + autoPtr<interfaceCompositionModel>& interfacePtr = + massTransferModels_[key12]; + + tmp<volScalarField> KSu = + interfacePtr->KSu(interfaceCompositionModel::alpha, phase1); + + if (KSu.valid()) + { + dmdt12 = KSu.ref(); + } + + includeDivU = interfacePtr->includeDivU(); + } + + + // Phase 2 to phase 1 + const phasePairKey key21 + ( + phase2.name(), + phase1.name(), + true + ); + + tmp<volScalarField> tdmdt21(this->dmdt(key21)); + volScalarField& dmdt21 = tdmdt21.ref(); + + if (massTransferModels_.found(key21)) + { + autoPtr<interfaceCompositionModel>& interfacePtr = + massTransferModels_[key21]; + + tmp<volScalarField> KSu = + interfacePtr->KSu(interfaceCompositionModel::alpha, phase2); + + if (KSu.valid()) + { + dmdt21 = KSu.ref(); + } + + includeDivU = interfacePtr->includeDivU(); + } + + volScalarField::Internal& SpPhase1 = Sp[phase1.name()]; + + volScalarField::Internal& SuPhase1 = Su[phase1.name()]; + + volScalarField::Internal& SpPhase2 = Sp[phase2.name()]; + + volScalarField::Internal& SuPhase2 = Su[phase2.name()]; + + const volScalarField dmdtNet(dmdt21 - dmdt12); + + const volScalarField coeffs12(coeffs1 - coeffs2); + + const surfaceScalarField& phi = this->phi(); + + if (includeDivU) + { + SuPhase1 += + fvc::div(phi)*min(max(alpha1, scalar(0)), scalar(1)); + + SuPhase2 += + fvc::div(phi)*min(max(alpha2, scalar(0)), scalar(1)); + } + + // NOTE: dmdtNet is distributed in terms = + // Source for phase 1 = + // dmdtNet/rho1 + // - alpha1*dmdtNet(1/rho1 - 1/rho2) + + forAll(dmdtNet, celli) + { + scalar dmdt21 = dmdtNet[celli]; + scalar coeffs12Cell = coeffs12[celli]; + + scalar alpha1Limited = max(min(alpha1[celli], 1.0), 0.0); + + // exp. + SuPhase1[celli] += coeffs1[celli]*dmdt21; + + if (includeDivU) + { + if (dmdt21 > 0) + { + if (coeffs12Cell > 0) + { + // imp + SpPhase1[celli] -= dmdt21*coeffs12Cell; + } + else if (coeffs12Cell < 0) + { + // exp + SuPhase1[celli] -= + dmdt21*coeffs12Cell*alpha1Limited; + } + } + else if (dmdt21 < 0) + { + if (coeffs12Cell > 0) + { + // exp + SuPhase1[celli] -= + dmdt21*coeffs12Cell*alpha1Limited; + } + else if (coeffs12Cell < 0) + { + // imp + SpPhase1[celli] -= dmdt21*coeffs12Cell; + } + } + } + } + + forAll(dmdtNet, celli) + { + scalar dmdt12 = -dmdtNet[celli]; + scalar coeffs21Cell = -coeffs12[celli]; + + scalar alpha2Limited = max(min(alpha2[celli], 1.0), 0.0); + + // exp + SuPhase2[celli] += coeffs2[celli]*dmdt12; + + if (includeDivU) + { + if (dmdt12 > 0) + { + if (coeffs21Cell > 0) + { + // imp + SpPhase2[celli] -= dmdt12*coeffs21Cell; + } + else if (coeffs21Cell < 0) + { + // exp + SuPhase2[celli] -= + dmdt12*coeffs21Cell*alpha2Limited; + } + } + else if (dmdt12 < 0) + { + if (coeffs21Cell > 0) + { + // exp + SuPhase2[celli] -= + coeffs21Cell*dmdt12*alpha2Limited; + } + else if (coeffs21Cell < 0) + { + // imp + SpPhase2[celli] -= dmdt12*coeffs21Cell; + } + } + } + + } + + // Update ddtAlphaMax + this->ddtAlphaMax_ = + max(gMax((dmdt21*coeffs1)()), gMax((dmdt12*coeffs2)())); + } +} + + template<class BasePhaseSystem> void Foam::MassTransferPhaseSystem<BasePhaseSystem>::massSpeciesTransfer ( diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.H index fadfe2344ac..0a6e77ab10d 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/MassTransferPhaseSystem/MassTransferPhaseSystem.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -59,7 +59,7 @@ public: // Public typedefs - typedef + typedef HashTable < autoPtr<interfaceCompositionModel>, @@ -67,6 +67,9 @@ public: phasePairKey::hash > massTransferModelTable; + + + typedef HashTable<volScalarField::Internal> SuSpTable; protected: @@ -123,9 +126,17 @@ public: // Mass transfer functions - //- Return the heat transfer matrix and fill dmdt for phases + //- Return the heat transfer matrix virtual tmp<fvScalarMatrix> heatTransfer(const volScalarField& T); - + + //- Return the volumetric rate transfer matrix + virtual tmp<fvScalarMatrix> volTransfer(const volScalarField& p); + + //- Correct/calculates mass sources dmdt for phases + virtual void correctMassSources(const volScalarField& T); + + //- Calculate mass transfer for alpha's + virtual void alphaTransfer(SuSpTable& Su, SuSpTable& Sp); //- Calculate mass transfer for species virtual void massSpeciesTransfer diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseModel/MultiComponentPhaseModel/MultiComponentPhaseModel.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseModel/MultiComponentPhaseModel/MultiComponentPhaseModel.C index 7bf399d3e5f..d06b50380c1 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseModel/MultiComponentPhaseModel/MultiComponentPhaseModel.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseModel/MultiComponentPhaseModel/MultiComponentPhaseModel.C @@ -90,9 +90,7 @@ MultiComponentPhaseModel ( IOobject::groupName("X" + species_[i], phaseName), fluid.mesh().time().timeName(), - fluid.mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE + fluid.mesh() ), Y()[i] ) diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.C index 5fbf895fdee..a6dcf73aa75 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017-2019 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -120,166 +120,60 @@ Foam::multiphaseSystem::multiphaseSystem // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void Foam::multiphaseSystem::calculateSuSp() -{ - forAllConstIters(totalPhasePairs_, iter) - { - const phasePair& pair = iter()(); - - const phaseModel& phase1 = pair.phase1(); - const phaseModel& phase2 = pair.phase2(); - - const volScalarField& alpha1 = pair.phase1(); - const volScalarField& alpha2 = pair.phase2(); - - tmp<volScalarField> tCoeffs1 = this->coeffs(phase1.name()); - const volScalarField& coeffs1 = tCoeffs1(); +{ + this->alphaTransfer(Su_, Sp_); +} - tmp<volScalarField> tCoeffs2 = this->coeffs(phase2.name()); - const volScalarField& coeffs2 = tCoeffs2(); - // Phase 1 to phase 2 - const phasePairKey key12 +void Foam::multiphaseSystem::solve() +{ + const dictionary& alphaControls = mesh_.solverDict("alpha"); + label nAlphaSubCycles(alphaControls.get<label>("nAlphaSubCycles")); + + volScalarField& alpha = phases_.first(); + + if (nAlphaSubCycles > 1) + { + surfaceScalarField rhoPhiSum ( - phase1.name(), - phase2.name(), - true + IOobject + ( + "rhoPhiSum", + mesh_.time().timeName(), + mesh_ + ), + mesh_, + dimensionedScalar(rhoPhi_.dimensions(), Zero) ); + dimensionedScalar totalDeltaT = mesh_.time().deltaT(); - tmp<volScalarField> tdmdt12(this->dmdt(key12)); - const volScalarField& dmdt12 = tdmdt12(); - - // Phase 2 to phase 1 - const phasePairKey key21 + for ( - phase2.name(), - phase1.name(), - true - ); - - tmp<volScalarField> tdmdt21(this->dmdt(key21)); - const volScalarField& dmdt21 = tdmdt21(); - - volScalarField::Internal& SpPhase1 = Sp_[phase1.name()]; - - volScalarField::Internal& SuPhase1 = Su_[phase1.name()]; - - volScalarField::Internal& SpPhase2 = Sp_[phase2.name()]; - - volScalarField::Internal& SuPhase2 = Su_[phase2.name()]; - - const volScalarField dmdtNet(dmdt21 - dmdt12); - - const volScalarField coeffs12(coeffs1 - coeffs2); - - // NOTE: dmdtNet is distributed in terms = - // Source for phase 1 = - // dmdtNet/rho1 - // - alpha1*dmdtNet(1/rho1 - 1/rho2) - - forAll(dmdtNet, celli) + subCycle<volScalarField> alphaSubCycle(alpha, nAlphaSubCycles); + !(++alphaSubCycle).end(); + ) { - scalar dmdt21 = dmdtNet[celli]; - scalar coeffs12Cell = coeffs12[celli]; - - scalar alpha1Limited = max(min(alpha1[celli], 1.0), 0.0); - - // exp. - SuPhase1[celli] += coeffs1[celli]*dmdt21; - - if (dmdt21 > 0) - { - if (coeffs12Cell > 0) - { - // imp - SpPhase1[celli] -= dmdt21*coeffs12Cell; - } - else if (coeffs12Cell < 0) - { - // exp - SuPhase1[celli] -= - dmdt21*coeffs12Cell*alpha1Limited; - } - } - else if (dmdt21 < 0) - { - if (coeffs12Cell > 0) - { - // exp - SuPhase1[celli] -= - dmdt21*coeffs12Cell*alpha1Limited; - } - else if (coeffs12Cell < 0) - { - // imp - SpPhase1[celli] -= dmdt21*coeffs12Cell; - } - } + solveAlphas(); + rhoPhiSum += (mesh_.time().deltaT()/totalDeltaT)*rhoPhi_; } - forAll(dmdtNet, celli) - { - scalar dmdt12 = -dmdtNet[celli]; - scalar coeffs21Cell = -coeffs12[celli]; - - scalar alpha2Limited = max(min(alpha2[celli], 1.0), 0.0); - - // exp - SuPhase2[celli] += coeffs2[celli]*dmdt12; - - if (dmdt12 > 0) - { - if (coeffs21Cell > 0) - { - // imp - SpPhase2[celli] -= dmdt12*coeffs21Cell; - } - else if (coeffs21Cell < 0) - { - // exp - SuPhase2[celli] -= - dmdt12*coeffs21Cell*alpha2Limited; - } - } - else if (dmdt12 < 0) - { - if (coeffs21Cell > 0) - { - // exp - SuPhase2[celli] -= - coeffs21Cell*dmdt12*alpha2Limited; - } - else if (coeffs21Cell < 0) - { - // imp - SpPhase2[celli] -= dmdt12*coeffs21Cell; - } - } - } - - // Update ddtAlphaMax - ddtAlphaMax_ = - max - ( - ddtAlphaMax_.value(), - max(gMax((dmdt21*coeffs1)()), gMax((dmdt12*coeffs2)())) - ); + rhoPhi_ = rhoPhiSum; + } + else + { + solveAlphas(); } + } - -void Foam::multiphaseSystem::solve() +void Foam::multiphaseSystem::solveAlphas() { - const fvMesh& mesh = this->mesh(); - - const dictionary& alphaControls = mesh.solverDict("alpha"); - label nAlphaSubCycles(alphaControls.get<label>("nAlphaSubCycles")); + + mesh_.solverDict("alpha").readEntry("cAlphas", cAlphas_); + const dictionary& alphaControls = mesh_.solverDict("alpha"); label nAlphaCorr(alphaControls.get<label>("nAlphaCorr")); - mesh.solverDict("alpha").readEntry("cAlphas", cAlphas_); - - // Reset ddtAlphaMax - ddtAlphaMax_ = dimensionedScalar(dimless, Zero); - + PtrList<surfaceScalarField> phiAlphaCorrs(phases_.size()); const surfaceScalarField& phi = this->phi(); @@ -389,12 +283,11 @@ void Foam::multiphaseSystem::solve() Sp_[phase.name()] = dimensionedScalar("Sp", dimless/dimTime, Zero); // Add alpha*div(U) - const volScalarField& alpha = phase; - Su_[phase.name()] += - fvc::div(phi)*min(max(alpha, scalar(0)), scalar(1)); + //const volScalarField& alpha = phase; + //Su_[phase.name()] += + // fvc::div(phi)*min(max(alpha, scalar(0)), scalar(1)); } - // Fill Su and Sp calculateSuSp(); @@ -454,12 +347,12 @@ void Foam::multiphaseSystem::solve() //phiAlpha += upwind<scalar>(mesh_, phi).flux(alpha1); fvScalarMatrix alpha1Eqn ( - fv::EulerDdtScheme<scalar>(mesh).fvmDdt(alpha1) + fv::EulerDdtScheme<scalar>(mesh_).fvmDdt(alpha1) + fv::gaussConvectionScheme<scalar> ( - mesh, + mesh_, phi, - upwind<scalar>(mesh, phi) + upwind<scalar>(mesh_, phi) ).fvmDiv(phi, alpha1) == Su + fvm::Sp(Sp, alpha1) @@ -468,60 +361,21 @@ void Foam::multiphaseSystem::solve() alpha1Eqn.solve(); phiAlpha += alpha1Eqn.flux(); + + MULES::explicitSolve + ( + geometricOneField(), + alpha1, + phi, + phiAlpha, + Sp, + Su, + oneField(), + zeroField() + ); - if (nAlphaSubCycles > 1) - { - for - ( - subCycle<volScalarField> alphaSubCycle - ( - alpha1, - nAlphaSubCycles - ); - !(++alphaSubCycle).end(); - ) - { - MULES::explicitSolve - ( - geometricOneField(), - alpha1, - phi, - phiAlpha, - (alphaSubCycle.index()*Sp)(), - (Su - (alphaSubCycle.index() - 1)*Sp*alpha1)(), - oneField(), - zeroField() - ); - - if (alphaSubCycle.index() == 1) - { - phase.alphaPhi() = phiAlpha; - } - else - { - phase.alphaPhi() += phiAlpha; - } - } - - phase.alphaPhi() /= nAlphaSubCycles; - } - else - { - MULES::explicitSolve - ( - geometricOneField(), - alpha1, - phi, - phiAlpha, - Sp, - Su, - oneField(), - zeroField() - ); - - phase.alphaPhi() = phiAlpha; - } - + phase.alphaPhi() = phiAlpha; + ++phasei; } @@ -549,7 +403,6 @@ void Foam::multiphaseSystem::solve() // Update rhoPhi rhoPhi_ += fvc::interpolate(phase.rho()) * phase.alphaPhi(); - } Info<< "Phase-sum volume fraction, min, max = " @@ -566,7 +419,7 @@ void Foam::multiphaseSystem::solve() alpha += alpha*sumCorr; Info<< alpha.name() << " volume fraction = " - << alpha.weightedAverage(mesh.V()).value() + << alpha.weightedAverage(mesh_.V()).value() << " Min(alpha) = " << min(alpha).value() << " Max(alpha) = " << max(alpha).value() << endl; diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.H index 55c206dc24c..9b827bad619 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -89,6 +89,9 @@ protected: //- Calculate Sp and Su void calculateSuSp(); + + //- Solve alphas + void solveAlphas(); public: diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem_backUp.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem_backUp.C new file mode 100644 index 00000000000..681de149fe8 --- /dev/null +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/multiphaseSystem/multiphaseSystem_backUp.C @@ -0,0 +1,642 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2017-2019 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "multiphaseSystem.H" + +#include "fixedValueFvsPatchFields.H" +#include "Time.H" +#include "subCycle.H" +#include "fvcMeshPhi.H" + +#include "surfaceInterpolate.H" +#include "fvcGrad.H" +#include "fvcSnGrad.H" +#include "fvcDiv.H" +#include "fvcDdt.H" +#include "fvcFlux.H" +#include "fvmDdt.H" +#include "fvcAverage.H" +#include "fvMatrix.H" +#include "fvmSup.H" +#include "CMULES.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(multiphaseSystem, 0); + defineRunTimeSelectionTable(multiphaseSystem, dictionary); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::multiphaseSystem::multiphaseSystem +( + const fvMesh& mesh +) +: + phaseSystem(mesh), + cAlphas_(), + ddtAlphaMax_(0.0), + limitedPhiAlphas_(phaseModels_.size()), + Su_(phaseModels_.size()), + Sp_(phaseModels_.size()) +{ + label phasei = 0; + phases_.setSize(phaseModels_.size()); + forAllIters(phaseModels_, iter) + { + phaseModel& pm = iter()(); + phases_.set(phasei++, &pm); + } + + mesh.solverDict("alpha").readEntry("cAlphas", cAlphas_); + + // Initiate Su and Sp + forAllConstIters(phaseModels_, iter) + { + const phaseModel& pm = iter()(); + + Su_.insert + ( + pm.name(), + volScalarField::Internal + ( + IOobject + ( + "Su" + pm.name(), + mesh_.time().timeName(), + mesh_ + ), + mesh_, + dimensionedScalar(dimless/dimTime, Zero) + ) + ); + + Sp_.insert + ( + pm.name(), + volScalarField::Internal + ( + IOobject + ( + "Sp" + pm.name(), + mesh_.time().timeName(), + mesh_ + ), + mesh_, + dimensionedScalar(dimless/dimTime, Zero) + ) + ); + } +} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +void Foam::multiphaseSystem::calculateSuSp() +{ + forAllConstIters(totalPhasePairs_, iter) + { + const phasePair& pair = iter()(); + + const phaseModel& phase1 = pair.phase1(); + const phaseModel& phase2 = pair.phase2(); + + const volScalarField& alpha1 = pair.phase1(); + const volScalarField& alpha2 = pair.phase2(); + + tmp<volScalarField> tCoeffs1 = this->coeffs(phase1.name()); + const volScalarField& coeffs1 = tCoeffs1(); + + tmp<volScalarField> tCoeffs2 = this->coeffs(phase2.name()); + const volScalarField& coeffs2 = tCoeffs2(); + + // Phase 1 to phase 2 + const phasePairKey key12 + ( + phase1.name(), + phase2.name(), + true + ); + + + tmp<volScalarField> tdmdt12(this->dmdt(key12)); + const volScalarField& dmdt12 = tdmdt12(); + + // Phase 2 to phase 1 + const phasePairKey key21 + ( + phase2.name(), + phase1.name(), + true + ); + + tmp<volScalarField> tdmdt21(this->dmdt(key21)); + const volScalarField& dmdt21 = tdmdt21(); + + volScalarField::Internal& SpPhase1 = Sp_[phase1.name()]; + + volScalarField::Internal& SuPhase1 = Su_[phase1.name()]; + + volScalarField::Internal& SpPhase2 = Sp_[phase2.name()]; + + volScalarField::Internal& SuPhase2 = Su_[phase2.name()]; + + const volScalarField dmdtNet(dmdt21 - dmdt12); + + const volScalarField coeffs12(coeffs1 - coeffs2); + + // NOTE: dmdtNet is distributed in terms = + // Source for phase 1 = + // dmdtNet/rho1 + // - alpha1*dmdtNet(1/rho1 - 1/rho2) + + forAll(dmdtNet, celli) + { + scalar dmdt21 = dmdtNet[celli]; + scalar coeffs12Cell = coeffs12[celli]; + + scalar alpha1Limited = max(min(alpha1[celli], 1.0), 0.0); + + // exp. + SuPhase1[celli] += coeffs1[celli]*dmdt21; + + if (dmdt21 > 0) + { + if (coeffs12Cell > 0) + { + // imp + SpPhase1[celli] -= dmdt21*coeffs12Cell; + } + else if (coeffs12Cell < 0) + { + // exp + SuPhase1[celli] -= + dmdt21*coeffs12Cell*alpha1Limited; + } + } + else if (dmdt21 < 0) + { + if (coeffs12Cell > 0) + { + // exp + SuPhase1[celli] -= + dmdt21*coeffs12Cell*alpha1Limited; + } + else if (coeffs12Cell < 0) + { + // imp + SpPhase1[celli] -= dmdt21*coeffs12Cell; + } + } + } + + forAll(dmdtNet, celli) + { + scalar dmdt12 = -dmdtNet[celli]; + scalar coeffs21Cell = -coeffs12[celli]; + + scalar alpha2Limited = max(min(alpha2[celli], 1.0), 0.0); + + // exp + SuPhase2[celli] += coeffs2[celli]*dmdt12; + + if (dmdt12 > 0) + { + if (coeffs21Cell > 0) + { + // imp + SpPhase2[celli] -= dmdt12*coeffs21Cell; + } + else if (coeffs21Cell < 0) + { + // exp + SuPhase2[celli] -= + dmdt12*coeffs21Cell*alpha2Limited; + } + } + else if (dmdt12 < 0) + { + if (coeffs21Cell > 0) + { + // exp + SuPhase2[celli] -= + coeffs21Cell*dmdt12*alpha2Limited; + } + else if (coeffs21Cell < 0) + { + // imp + SpPhase2[celli] -= dmdt12*coeffs21Cell; + } + } + + } + + // Update ddtAlphaMax + ddtAlphaMax_ = + max(gMax((dmdt21*coeffs1)()), gMax((dmdt12*coeffs2)())); + } +} + + +void Foam::multiphaseSystem::solve() +{ + const fvMesh& mesh = this->mesh(); + + const dictionary& alphaControls = mesh.solverDict("alpha"); + label nAlphaSubCycles(alphaControls.get<label>("nAlphaSubCycles")); + label nAlphaCorr(alphaControls.get<label>("nAlphaCorr")); + mesh.solverDict("alpha").readEntry("cAlphas", cAlphas_); + + PtrList<surfaceScalarField> phiAlphaCorrs(phases_.size()); + + const surfaceScalarField& phi = this->phi(); + + surfaceScalarField phic(mag((phi)/mesh_.magSf())); + + // Do not compress interface at non-coupled boundary faces + // (inlets, outlets etc.) + surfaceScalarField::Boundary& phicBf = phic.boundaryFieldRef(); + forAll(phic.boundaryField(), patchi) + { + fvsPatchScalarField& phicp = phicBf[patchi]; + + if (!phicp.coupled()) + { + phicp == 0; + } + } + + for (int acorr=0; acorr<nAlphaCorr; acorr++) + { + label phasei = 0; + for (phaseModel& phase1 : phases_) + { + const volScalarField& alpha1 = phase1; + + phiAlphaCorrs.set + ( + phasei, + new surfaceScalarField + ( + "phi" + alpha1.name() + "Corr", + fvc::flux + ( + phi, + alpha1, + "div(phi," + alpha1.name() + ')' + ) + ) + ); + + surfaceScalarField& phiAlphaCorr = phiAlphaCorrs[phasei]; + + for (phaseModel& phase2 : phases_) + { + const volScalarField& alpha2 = phase2; + + if (&phase2 == &phase1) continue; + + const phasePairKey key12(phase1.name(), phase2.name()); + + if (!cAlphas_.found(key12)) + { + FatalErrorInFunction + << "Phase compression factor (cAlpha) not found for : " + << key12 + << exit(FatalError); + } + scalar cAlpha = cAlphas_.find(key12)(); + + phic = min(cAlpha*phic, max(phic)); + + surfaceScalarField phir(phic*nHatf(alpha1, alpha2)); + + word phirScheme + ( + "div(phir," + alpha2.name() + ',' + alpha1.name() + ')' + ); + + phiAlphaCorr += fvc::flux + ( + -fvc::flux(-phir, alpha2, phirScheme), + alpha1, + phirScheme + ); + } + + // Ensure that the flux at inflow BCs is preserved + forAll(phiAlphaCorr.boundaryField(), patchi) + { + fvsPatchScalarField& phiAlphaCorrp = + phiAlphaCorr.boundaryFieldRef()[patchi]; + + if (!phiAlphaCorrp.coupled()) + { + const scalarField& phi1p = phi.boundaryField()[patchi]; + const scalarField& alpha1p = + alpha1.boundaryField()[patchi]; + + forAll(phiAlphaCorrp, facei) + { + if (phi1p[facei] < 0) + { + phiAlphaCorrp[facei] = alpha1p[facei]*phi1p[facei]; + } + } + } + } + + ++phasei; + } + + // Set Su and Sp to zero + for (const phaseModel& phase : phases_) + { + Su_[phase.name()] = dimensionedScalar("Su", dimless/dimTime, Zero); + Sp_[phase.name()] = dimensionedScalar("Sp", dimless/dimTime, Zero); + + // Add alpha*div(U) + const volScalarField& alpha = phase; + Sp_[phase.name()] += + fvc::div(phi);//*min(max(alpha, scalar(0)), scalar(1)); + } + + + // Fill Su and Sp + calculateSuSp(); + + // Limit phiAlphaCorr on each phase + phasei = 0; + for (phaseModel& phase : phases_) + { + volScalarField& alpha1 = phase; + + surfaceScalarField& phiAlphaCorr = phiAlphaCorrs[phasei]; + + volScalarField::Internal& Su = Su_[phase.name()]; + volScalarField::Internal& Sp = Sp_[phase.name()]; + + MULES::limit + ( + 1.0/mesh_.time().deltaT().value(), + geometricOneField(), + alpha1, + phi, + phiAlphaCorr, + Sp, + Su, + oneField(), + zeroField(), + true + ); + ++phasei; + } + + MULES::limitSum(phiAlphaCorrs); + + volScalarField sumAlpha + ( + IOobject + ( + "sumAlpha", + mesh_.time().timeName(), + mesh_ + ), + mesh_, + dimensionedScalar(dimless, Zero) + ); + + phasei = 0; + for (phaseModel& phase : phases_) + { + volScalarField& alpha1 = phase; + + const volScalarField::Internal& Su = Su_[phase.name()]; + + const volScalarField::Internal& Sp = Sp_[phase.name()]; + + surfaceScalarField& phiAlpha = phiAlphaCorrs[phasei]; + + // Add a bounded upwind U-mean flux + phiAlpha += upwind<scalar>(mesh_, phi).flux(alpha1); +// fvScalarMatrix alpha1Eqn +// ( +// fv::EulerDdtScheme<scalar>(mesh).fvmDdt(alpha1) +// + fv::gaussConvectionScheme<scalar> +// ( +// mesh, +// phi, +// upwind<scalar>(mesh, phi) +// ).fvmDiv(phi, alpha1) +// == +// Su + fvm::Sp(Sp, alpha1) +// ); +// +// alpha1Eqn.solve(); + + //phiAlpha += alpha1Eqn.flux(); + + if (nAlphaSubCycles > 1) + { + for + ( + subCycle<volScalarField> alphaSubCycle + ( + alpha1, + nAlphaSubCycles + ); + !(++alphaSubCycle).end(); + ) + { + MULES::explicitSolve + ( + geometricOneField(), + alpha1, + phi, + phiAlpha, + (alphaSubCycle.index()*Sp)(), + (Su - (alphaSubCycle.index() - 1)*Sp*alpha1)(), + oneField(), + zeroField() + ); + + if (alphaSubCycle.index() == 1) + { + phase.alphaPhi() = phiAlpha; + } + else + { + phase.alphaPhi() += phiAlpha; + } + } + + phase.alphaPhi() /= nAlphaSubCycles; + } + else + { + MULES::explicitSolve + ( + geometricOneField(), + alpha1, + phi, + phiAlpha, + Sp, + Su, + oneField(), + zeroField() + ); + + phase.alphaPhi() = phiAlpha; + } + + ++phasei; + } + + if (acorr == nAlphaCorr - 1) + { + volScalarField sumAlpha + ( + IOobject + ( + "sumAlpha", + mesh_.time().timeName(), + mesh_ + ), + mesh_, + dimensionedScalar(dimless, Zero) + ); + + // Reset rhoPhi + rhoPhi_ = dimensionedScalar("rhoPhi", dimMass/dimTime, Zero); + + for (phaseModel& phase : phases_) + { + volScalarField& alpha1 = phase; + sumAlpha += alpha1; + + // Update rhoPhi + rhoPhi_ += fvc::interpolate(phase.rho()) * phase.alphaPhi(); + } + + Info<< "Phase-sum volume fraction, min, max = " + << sumAlpha.weightedAverage(mesh_.V()).value() + << ' ' << min(sumAlpha).value() + << ' ' << max(sumAlpha).value() + << endl; + + volScalarField sumCorr(1.0 - sumAlpha); + + for (phaseModel& phase : phases_) + { + volScalarField& alpha = phase; + //alpha += alpha*sumCorr; + + Info<< alpha.name() << " volume fraction = " + << alpha.weightedAverage(mesh.V()).value() + << " Min(alpha) = " << min(alpha).value() + << " Max(alpha) = " << max(alpha).value() + << endl; + } + } + } +} + + +const Foam::UPtrList<Foam::phaseModel>& Foam::multiphaseSystem::phases() const +{ + return phases_; +} + + +Foam::UPtrList<Foam::phaseModel>& Foam::multiphaseSystem::phases() +{ + return phases_; +} + + +const Foam::phaseModel& Foam::multiphaseSystem::phase(const label i) const +{ + return phases_[i]; +} + + +Foam::phaseModel& Foam::multiphaseSystem::phase(const label i) +{ + return phases_[i]; +} + + +Foam::dimensionedScalar Foam::multiphaseSystem::ddtAlphaMax() const +{ + return ddtAlphaMax_; +} + + +Foam::scalar Foam::multiphaseSystem::maxDiffNo() const +{ + auto iter = phaseModels_.cbegin(); + + scalar maxVal = max(iter()->diffNo()).value(); + + for (++iter; iter != phaseModels_.cend(); ++iter) + { + maxVal = max(maxVal, max(iter()->diffNo()).value()); + } + + return maxVal * mesh_.time().deltaT().value(); +} + + +const Foam::multiphaseSystem::compressionFluxTable& +Foam::multiphaseSystem::limitedPhiAlphas() const +{ + return limitedPhiAlphas_; +} + + +Foam::multiphaseSystem::SuSpTable& Foam::multiphaseSystem::Su() +{ + return Su_; +} + + +Foam::multiphaseSystem::SuSpTable& Foam::multiphaseSystem::Sp() +{ + return Sp_; +} + + +bool Foam::multiphaseSystem::read() +{ + return true; +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.C index 9e97e714b87..242d9cadec2 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017-2019 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -55,6 +55,12 @@ const Foam::word Foam::phaseSystem::phasePropertiesName("phaseProperties"); // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +void Foam::phaseSystem::calcMu() +{ + mu_ = mu()(); +} + + Foam::phaseSystem::phaseModelTable Foam::phaseSystem::generatePhaseModels(const wordList& phaseNames) const { @@ -202,6 +208,18 @@ Foam::phaseSystem::phaseSystem : basicThermo(mesh, word::null, phasePropertiesName), mesh_(mesh), + mu_ + ( + IOobject + ( + "mu", + mesh_.time().timeName(), + mesh_ + ), + mesh_, + dimensionedScalar(dimViscosity*dimDensity, Zero), + calculatedFvPatchScalarField::typeName + ), phaseNames_(lookup("phases")), phi_ ( @@ -222,9 +240,7 @@ Foam::phaseSystem::phaseSystem ( "rhoPhi", mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE + mesh_ ), mesh_, dimensionedScalar(dimMass/dimTime, Zero) @@ -265,6 +281,9 @@ Foam::phaseSystem::phaseSystem // Total phase pair generatePairsTable(); + + // Update mu_ + calcMu(); } @@ -884,6 +903,8 @@ void Foam::phaseSystem::correct() { iter()->correct(); } + + calcMu(); } diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.H b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.H index 1b4996ba7e3..d3a17be0ea9 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.H +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/phasesSystem/phaseSystem/phaseSystem.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017 OpenCFD Ltd. + Copyright (C) 2017-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -78,6 +78,9 @@ public: typedef HashTable<autoPtr<phaseModel>> phaseModelTable; + + + typedef HashTable<volScalarField::Internal> SuSpTable; protected: @@ -113,6 +116,9 @@ protected: //- Reference to the mesh const fvMesh& mesh_; + + //- Dynamic viscocity + volScalarField mu_; //- Phase names wordList phaseNames_; @@ -148,6 +154,9 @@ protected: // Protected member functions + //- Calculate and return the laminar viscosity + void calcMu(); + //- Generate the phases HashTable<autoPtr<phaseModel>> generatePhaseModels ( @@ -501,9 +510,15 @@ public: ( const volScalarField& T ) = 0; - - //- Calculate mass transfer - //virtual void massTransfer(const volScalarField& T) = 0; + + //- Return the volumetric rate transfer matrix + virtual tmp<fvScalarMatrix> volTransfer + ( + const volScalarField& p + ) = 0; + + //- Calculate mass transfer for alpha's + virtual void alphaTransfer(SuSpTable& Su, SuSpTable& Sp) = 0; //- Calculate mass transfer for species virtual void massSpeciesTransfer @@ -522,6 +537,9 @@ public: //- Correct the mixture thermos virtual void correct(); + + //- Correct mass sources + virtual void correctMassSources(const volScalarField& T) = 0; //- Return the name of the thermo physics virtual word thermoName() const @@ -531,7 +549,7 @@ public: } //- Correct the turbulence - // (NOTE: Each phase could help its own turbulence) + // (NOTE: Each phase could have its own turbulence) virtual void correctTurbulence(); //- Read base phaseProperties dictionary diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/Make/options b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/Make/options index 3f2792391d8..b7f1e28a140 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/Make/options +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/Make/options @@ -1,13 +1,18 @@ -interPhaseChangePath = $(FOAM_SOLVERS)/multiphase/interPhaseChangeFoam +interPhaseChangeFoam = $(FOAM_SOLVERS)/multiphase/interPhaseChangeFoam +interFoam = $(FOAM_SOLVERS)/multiphase/interFoam +VoF = $(FOAM_SOLVERS)/multiphase/VoF EXE_INC = \ -I. \ + -I$(interPhaseChangeFoam) \ + -I$(interFoam) \ + -I$(VoF) \ -ItemperaturePhaseChangeTwoPhaseMixtures/lnInclude \ - -I$(interPhaseChangePath) \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude\ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ + -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/twoPhaseMixture/lnInclude \ @@ -21,6 +26,7 @@ EXE_LIBS = \ -lfvOptions \ -lmeshTools \ -lsampling \ + -ldynamicFvMesh \ -lphaseTemperatureChangeTwoPhaseMixtures \ -ltwoPhaseMixture \ -linterfaceProperties \ @@ -29,3 +35,5 @@ EXE_LIBS = \ -lturbulenceModels \ -lincompressibleTurbulenceModels \ -lfluidThermophysicalModels + + diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/TEqn.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/TEqn.H index b570a71d80d..66eeb0e86cb 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/TEqn.H +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/TEqn.H @@ -1,18 +1,19 @@ { tmp<volScalarField> tcp(thermo->Cp()); const volScalarField& cp = tcp(); + + const dimensionedScalar Cp1 = thermo->Cp1(); + const dimensionedScalar Cp2 = thermo->Cp2(); rhoCp = rho*cp; kappaEff = thermo->kappa() + rho*cp*turbulence->nut()/Prt; - - const surfaceScalarField rhoCpPhi(fvc::interpolate(cp)*rhoPhi); - - Pair<tmp<volScalarField>> vDotAlphal = mixture->mDot(); - - const volScalarField& vDotcAlphal = vDotAlphal[0](); - const volScalarField& vDotvAlphal = vDotAlphal[1](); - const volScalarField vDotvmcAlphal(vDotvAlphal - vDotcAlphal); + + const surfaceScalarField rhoCpPhi + ( + "rhoCpPhi", + rhoPhi*(Cp1 - Cp2) + phi*rho2*Cp2 + ); fvScalarMatrix TEqn ( @@ -20,7 +21,7 @@ + fvm::div(rhoCpPhi, T) - fvm::Sp(fvc::ddt(rhoCp) + fvc::div(rhoCpPhi), T) - fvm::laplacian(kappaEff, T) - + thermo->hc()*vDotvmcAlphal + + mixture->TSource() ); diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/alphaCourantNo.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/alphaCourantNo.H new file mode 100644 index 00000000000..4543f985166 --- /dev/null +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/alphaCourantNo.H @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | + \\/ M anipulation | +------------------------------------------------------------------------------- + | Copyright (C) 2011-2017 OpenFOAM Foundation +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Global + alphaCourantNo + +Description + Calculates and outputs the mean and maximum Courant Numbers. + +\*---------------------------------------------------------------------------*/ + +scalar maxAlphaCo +( + runTime.controlDict().get<scalar>("maxAlphaCo") +); + +scalar alphaCoNum = 0.0; +scalar meanAlphaCoNum = 0.0; + +if (mesh.nInternalFaces()) +{ + scalarField sumPhi + ( + interface.nearInterface()().primitiveField() + *fvc::surfaceSum(mag(phi))().primitiveField() + ); + + alphaCoNum = 0.5*gMax(sumPhi/mesh.V().field())*runTime.deltaTValue(); + + meanAlphaCoNum = + 0.5*(gSum(sumPhi)/gSum(mesh.V().field()))*runTime.deltaTValue(); +} + +Info<< "Interface Courant Number mean: " << meanAlphaCoNum + << " max: " << alphaCoNum << endl; + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/createFields.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/createFields.H index f0de2deffd4..7b2272b81bf 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/createFields.H +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/createFields.H @@ -61,6 +61,20 @@ volScalarField rho ); rho.oldTime(); +// Mass flux +surfaceScalarField rhoPhi +( + IOobject + ( + "rhoPhi", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + fvc::interpolate(rho)*phi +); + // Construct interface from alpha1 distribution interfaceProperties interface ( @@ -106,6 +120,24 @@ if (p_rgh.needReference()) mesh.setFluxRequired(p_rgh.name()); mesh.setFluxRequired(alpha1.name()); +// MULES compressed flux is registered in case scalarTransport FO needs it. +surfaceScalarField alphaPhiUn +( + IOobject + ( + "alphaPhiUn", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionedScalar(phi.dimensions(), Zero) +); + +#include "createMRF.H" +#include "createFvOptions.H" + // Turbulent Prandtl number dimensionedScalar Prt("Prt", dimless, thermo->transportPropertiesDict()); diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/interCondensatingEvaporatingFoam.C b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/interCondensatingEvaporatingFoam.C index cae14408b15..9fad2b220b8 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/interCondensatingEvaporatingFoam.C +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/interCondensatingEvaporatingFoam.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -43,7 +43,11 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" +#include "dynamicFvMesh.H" #include "CMULES.H" +#include "EulerDdtScheme.H" +#include "localEulerDdtScheme.H" +#include "CrankNicolsonDdtScheme.H" #include "subCycle.H" #include "interfaceProperties.H" #include "twoPhaseMixtureEThermo.H" @@ -52,7 +56,8 @@ Description #include "turbulenceModel.H" #include "pimpleControl.H" #include "fvOptions.H" -#include "fixedFluxPressureFvPatchScalarField.H" +#include "CorrectPhi.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -72,11 +77,14 @@ int main(int argc, char *argv[]) #include "addCheckCaseOptions.H" #include "setRootCaseLists.H" #include "createTime.H" - #include "createMesh.H" - #include "createControl.H" + #include "createDynamicFvMesh.H" + #include "initContinuityErrs.H" + #include "createDyMControls.H" #include "createFields.H" - #include "createFvOptions.H" - #include "createTimeControls.H" + #include "createAlphaFluxes.H" + #include "initCorrectPhi.H" + #include "createUfIfPresent.H" + #include "CourantNo.H" #include "setInitialDeltaT.H" @@ -90,9 +98,19 @@ int main(int argc, char *argv[]) while (runTime.run()) { - #include "createTimeControls.H" - #include "CourantNo.H" - #include "setDeltaT.H" + #include "readDyMControls.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("divU", fvc::div(fvc::absolute(phi, U))); + + { + #include "CourantNo.H" + #include "alphaCourantNo.H" + #include "setDeltaT.H" + } ++runTime; @@ -101,28 +119,53 @@ int main(int argc, char *argv[]) // --- Pressure-velocity PIMPLE corrector loop while (pimple.loop()) { - #include "alphaControls.H" + if (pimple.firstIter() || moveMeshOuterCorrectors) + { + mesh.update(); + + if (mesh.changing()) + { + // Do not apply previous time-step mesh compression flux + // if the mesh topology changed + if (mesh.topoChanging()) + { + talphaPhi1Corr0.clear(); + } + + gh = (g & mesh.C()) - ghRef; + ghf = (g & mesh.Cf()) - ghRef; - surfaceScalarField rhoPhi - ( - IOobject - ( - "rhoPhi", - runTime.timeName(), - mesh - ), - mesh, - dimensionedScalar(dimMass/dimTime, Zero) - ); + MRF.update(); + if (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); + + interface.correct(); + } + + if (checkMeshCourantNo) + { + #include "meshCourantNo.H" + } + } + } + mixture->correct(); + #include "alphaControls.H" #include "alphaEqnSubCycle.H" - solve(fvm::ddt(rho) + fvc::div(rhoPhi)); #include "UEqn.H" #include "TEqn.H" - + // --- Pressure corrector loop while (pimple.correct()) { diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/pEqn.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/pEqn.H index 5c7eec6d3c5..88ee90883a2 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/pEqn.H +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/pEqn.H @@ -33,7 +33,8 @@ ( fvc::div(phiHbyA) - fvm::laplacian(rAUf, p_rgh) - - (vDotc - vDotv) + == + vDotv - vDotc ); p_rghEqn.setReference(pRefCell, pRefValue); diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/Make/files b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/Make/files index 407c6046553..3944b9edb1e 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/Make/files +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/Make/files @@ -3,5 +3,6 @@ temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.C thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.C twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.C constant/constant.C +interfaceHeatResistance/interfaceHeatResistance.C LIB = $(FOAM_LIBBIN)/libphaseTemperatureChangeTwoPhaseMixtures diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.C b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.C index c8de08eba14..6350420fe54 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.C +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -29,6 +29,7 @@ License #include "addToRunTimeSelectionTable.H" #include "fvcGrad.H" #include "twoPhaseMixtureEThermo.H" +#include "fvmSup.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -57,11 +58,15 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::constant temperaturePhaseChangeTwoPhaseMixture(mixture, mesh), coeffC_ ( - "coeffC", dimless/dimTime/dimTemperature, subDict(type() + "Coeffs") + "coeffC", + dimless/dimTime/dimTemperature, + optionalSubDict(type() + "Coeffs") ), coeffE_ ( - "coeffE", dimless/dimTime/dimTemperature, subDict(type() + "Coeffs") + "coeffE", + dimless/dimTime/dimTemperature, + optionalSubDict(type() + "Coeffs") ) {} @@ -85,8 +90,8 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDotAlphal() const return Pair<tmp<volScalarField>> ( - coeffC_*mixture_.rho2()*max(TSat - T.oldTime(), T0), - -coeffE_*mixture_.rho1()*max(T.oldTime() - TSat, T0) + coeffC_*mixture_.rho2()*max(TSat - T, T0), + -coeffE_*mixture_.rho1()*max(T - TSat, T0) ); } @@ -116,11 +121,20 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDot() const const dimensionedScalar& TSat = thermo.TSat(); const dimensionedScalar T0(dimTemperature, Zero); + + if (mesh_.time().outputTime()) + { + volScalarField mDot + ( + "mDot", coeffE_*mixture_.rho1()*limitedAlpha1*max(T - TSat, T0) + ); + mDot.write(); + } return Pair<tmp<volScalarField>> ( - coeffC_*mixture_.rho2()*limitedAlpha2*max(TSat - T.oldTime(), T0), - coeffE_*mixture_.rho1()*limitedAlpha1*max(T.oldTime() - TSat, T0) + coeffC_*mixture_.rho2()*limitedAlpha2*max(TSat - T, T0), + -coeffE_*mixture_.rho1()*limitedAlpha1*max(T - TSat, T0) ); } @@ -150,9 +164,63 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDotDeltaT() const return Pair<tmp<volScalarField>> ( - coeffC_*mixture_.rho2()*limitedAlpha2*pos(TSat - T.oldTime()), - coeffE_*mixture_.rho1()*limitedAlpha1*pos(T.oldTime() - TSat) + coeffC_*mixture_.rho2()*limitedAlpha2*pos(TSat - T), + coeffE_*mixture_.rho1()*limitedAlpha1*pos(T - TSat) + ); +} + + +Foam::tmp<Foam::fvScalarMatrix> +Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::TSource() const +{ + + const volScalarField& T = mesh_.lookupObject<volScalarField>("T"); + + tmp<fvScalarMatrix> tTSource + ( + new fvScalarMatrix + ( + T, + dimEnergy/dimTime + ) + ); + + fvScalarMatrix& TSource = tTSource.ref(); + + const twoPhaseMixtureEThermo& thermo = + refCast<const twoPhaseMixtureEThermo> + ( + mesh_.lookupObject<basicThermo>(basicThermo::dictName) + ); + + const dimensionedScalar& TSat = thermo.TSat(); + + dimensionedScalar L = mixture_.Hf2() - mixture_.Hf1(); + + volScalarField limitedAlpha1 + ( + min(max(mixture_.alpha1(), scalar(0)), scalar(1)) ); + + volScalarField limitedAlpha2 + ( + min(max(mixture_.alpha2(), scalar(0)), scalar(1)) + ); + + const volScalarField Vcoeff + ( + coeffE_*mixture_.rho1()*limitedAlpha1*L + ); + const volScalarField Ccoeff + ( + coeffC_*mixture_.rho2()*limitedAlpha2*L + ); + + TSource = + fvm::Sp(Vcoeff, T) - Vcoeff*TSat + - fvm::Sp(Ccoeff, T) + Ccoeff*TSat; + + return tTSource; } diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.H index 9ea7fdb67b2..87d226c1f1e 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.H +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/constant/constant.H @@ -98,6 +98,9 @@ public: // coefficient to multiply (Tsat - T) for the condensation rate // and a coefficient to multiply (T - Tsat) for the vaporisation rate virtual Pair<tmp<volScalarField>> mDotDeltaT() const; + + //- Source for T equarion + virtual tmp<fvScalarMatrix> TSource() const; //- Correct the constant phaseChange model virtual void correct(); diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.C b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.C new file mode 100644 index 00000000000..468cf05c996 --- /dev/null +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.C @@ -0,0 +1,409 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020 Henning Scheufler +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "interfaceHeatResistance.H" +#include "addToRunTimeSelectionTable.H" +#include "twoPhaseMixtureEThermo.H" +#include "isoCutCell.H" +#include "volPointInterpolation.H" +#include "calculatedFvPatchFields.H" +#include "wallPolyPatch.H" +#include "fvcSmooth.H" +#include "fvmSup.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace temperaturePhaseChangeTwoPhaseMixtures +{ + defineTypeNameAndDebug(interfaceHeatResistance, 0); + addToRunTimeSelectionTable + ( + temperaturePhaseChangeTwoPhaseMixture, + interfaceHeatResistance, + components + ); +} +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +interfaceHeatResistance +( + const thermoIncompressibleTwoPhaseMixture& mixture, + const fvMesh& mesh +) +: + temperaturePhaseChangeTwoPhaseMixture(mixture, mesh), + R_ + ( + "R", + dimPower/dimArea/dimTemperature, optionalSubDict(type() + "Coeffs") + ), + + interfaceArea_ + ( + IOobject + ( + "interfaceArea", + mesh_.time().timeName(), + mesh_, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh_, + dimensionedScalar(dimless/dimLength, Zero) + ), + + mDotc_ + ( + IOobject + ( + "mDotc", + mesh_.time().timeName(), + mesh_, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh_, + dimensionedScalar(dimDensity/dimTime, Zero) + ), + + mDote_ + ( + IOobject + ( + "mDote", + mesh_.time().timeName(), + mesh_, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh_, + dimensionedScalar(dimDensity/dimTime, Zero) + ), + + spread_ + ( + optionalSubDict(type() + "Coeffs").get<scalar>("spread") + ) +{ + correct(); +} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +Foam::Pair<Foam::tmp<Foam::volScalarField>> +Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +vDotAlphal() const +{ + dimensionedScalar alphalCoeff(1.0/mixture_.rho1()); + + return Pair<tmp<volScalarField>> + ( + (alphalCoeff*mDotc_)/(mixture_.alpha2() + SMALL), + -(alphalCoeff*mDote_)/(mixture_.alpha1() + SMALL) + ); +} + + +Foam::Pair<Foam::tmp<Foam::volScalarField>> +Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +mDotAlphal() const +{ + volScalarField limitedAlpha1 + ( + min(max(mixture_.alpha1(), scalar(0)), scalar(1)) + ); + + volScalarField limitedAlpha2 + ( + min(max(mixture_.alpha2(), scalar(0)), scalar(1)) + ); + + return Pair<tmp<volScalarField>> + ( + (mDotc_/(limitedAlpha2 + SMALL)), + -(mDote_/(limitedAlpha1 + SMALL)) + ); +} + + +Foam::Pair<Foam::tmp<Foam::volScalarField>> +Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +mDot() const +{ + + return Pair<tmp<volScalarField>> + ( + tmp<volScalarField>(mDotc_), + tmp<volScalarField>(mDote_) + ); +} + + +Foam::Pair<Foam::tmp<Foam::volScalarField>> +Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +mDotDeltaT() const +{ + const twoPhaseMixtureEThermo& thermo = + refCast<const twoPhaseMixtureEThermo> + ( + mesh_.lookupObject<basicThermo>(basicThermo::dictName) + ); + + const volScalarField& T = mesh_.lookupObject<volScalarField>("T"); + + const dimensionedScalar& TSat = thermo.TSat(); + + Pair<tmp<volScalarField>> mDotce(mDot()); + + return Pair<tmp<volScalarField>> + ( + mDotc_*pos(TSat - T.oldTime())/(TSat - T.oldTime()), + -mDote_*pos(T.oldTime() - TSat)/(T.oldTime() - TSat) + ); + + +} + + +Foam::tmp<Foam::fvScalarMatrix> +Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +TSource() const +{ + + const volScalarField& T = mesh_.lookupObject<volScalarField>("T"); + + tmp<fvScalarMatrix> tTSource + ( + new fvScalarMatrix + ( + T, + dimEnergy/dimTime + ) + ); + + fvScalarMatrix& TSource = tTSource.ref(); + + const twoPhaseMixtureEThermo& thermo = + refCast<const twoPhaseMixtureEThermo> + ( + mesh_.lookupObject<basicThermo>(basicThermo::dictName) + ); + + const dimensionedScalar& TSat = thermo.TSat(); + + // interface heat resistance + volScalarField IHRcoeff = interfaceArea_*R_; + + TSource = fvm::Sp(IHRcoeff, T) - IHRcoeff*TSat; + + return tTSource; +} + + +void Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +correct() +{ + + // Update Interface + updateInterface(); + + // Update mDotc_ and mDote_ + const volScalarField& T = mesh_.lookupObject<volScalarField>("T"); + + const twoPhaseMixtureEThermo& thermo = + refCast<const twoPhaseMixtureEThermo> + ( + mesh_.lookupObject<basicThermo>(basicThermo::dictName) + ); + + const dimensionedScalar& TSat = thermo.TSat(); + const dimensionedScalar T0(dimTemperature, Zero); + + dimensionedScalar L = mixture_.Hf2() - mixture_.Hf1(); + + // interface heat resistance + mDotc_ = interfaceArea_*R_*max(TSat - T, T0)/L; + mDote_ = interfaceArea_*R_*(T - TSat)/L; + + forAll(mDotc_, celli) + { + scalar rhobyDt = mixture_.rho1().value()/mesh_.time().deltaTValue(); + scalar maxEvap = mixture_.alpha1()[celli]*rhobyDt; // positive + scalar maxCond = -mixture_.alpha2()[celli]*rhobyDt; // negative + mDote_[celli] = min(max(mDote_[celli], maxCond), maxEvap); + mDotc_[celli] = min(max(mDotc_[celli], maxCond), maxEvap); + } +} + + +void Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +updateInterface() +{ + const volScalarField& T = mesh_.lookupObject<volScalarField>("T"); + const twoPhaseMixtureEThermo& thermo = + refCast<const twoPhaseMixtureEThermo> + ( + mesh_.lookupObject<basicThermo>(basicThermo::dictName) + ); + + const dimensionedScalar& TSat = thermo.TSat(); + + // interface heat resistance + // Interpolating alpha1 cell centre values to mesh points (vertices) + scalarField ap + ( + volPointInterpolation::New(mesh_).interpolate(mixture_.alpha1()) + ); + + isoCutCell cutCell(mesh_, ap); + + forAll(interfaceArea_, celli) + { + label status = cutCell.calcSubCell(celli, 0.5); + interfaceArea_[celli] = 0; + if (status == 0) // cell is cut + { + interfaceArea_[celli] = + mag(cutCell.isoFaceArea())/mesh_.V()[celli]; + } + } + + const polyBoundaryMesh& pbm = mesh_.boundaryMesh(); + + forAll(pbm, patchi) + { + if (isA<wallPolyPatch>(pbm[patchi])) + { + const polyPatch& pp = pbm[patchi]; + forAll(pp.faceCells(),i) + { + const label pCelli = pp.faceCells()[i]; + + if + ( + (TSat.value() - T[pCelli]) > 0 + && mixture_.alpha1()[pCelli] < 0.9 + ) + { + interfaceArea_[pCelli] = + mag(pp.faceAreas()[i])/mesh_.V()[pCelli]; + } + } + } + } +} + +Foam::Pair<Foam::tmp<Foam::volScalarField>> +Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +vDot() const +{ + + dimensionedScalar D + ( + "D", + dimArea, + spread_/sqr(gAverage(mesh_.nonOrthDeltaCoeffs())) + ); + + + const volScalarField& alpha1 = mixture_.alpha1(); + const volScalarField& alpha2 = mixture_.alpha2(); + + const dimensionedScalar MDotMin("MdotMin", mDotc_.dimensions(), 1e-3); + + Pair<tmp<volScalarField>> mDotSpread + ( + tmp<volScalarField>(mDotc_*0.0), + tmp<volScalarField>(mDote_*0.0) + ); + + if (max(mDotc_) > MDotMin) + { + fvc::spreadSource + ( + mDotSpread[0].ref(), + mDotc_, + alpha1, + alpha2, + D, + 1e-3 + ); + } + + if (max(mDote_) > MDotMin) + { + fvc::spreadSource + ( + mDotSpread[1].ref(), + mDote_, + alpha1, + alpha2, + D, + 1e-3 + ); + } + + dimensionedScalar pCoeff(1.0/mixture_.rho1() - 1.0/mixture_.rho2()); + + if (mesh_.time().outputTime()) + { + volScalarField mDotS("mDotSpread", mDotSpread[1].ref()); + mDotS.write(); + } + + return Pair<tmp<volScalarField>> + ( + pCoeff*mDotSpread[0], + -pCoeff*mDotSpread[1] + ); +} + + + +bool Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance:: +read() +{ + if (temperaturePhaseChangeTwoPhaseMixture::read()) + { + optionalSubDict(type() + "Coeffs").readEntry("R", R_); + optionalSubDict(type() + "Coeffs").readEntry("spread", spread_); + + return true; + } + + return false; +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.H new file mode 100644 index 00000000000..836f5a6f729 --- /dev/null +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/interfaceHeatResistance/interfaceHeatResistance.H @@ -0,0 +1,155 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020 Henning Scheufler +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::phaseChangeTwoPhaseMixtures::interfaceHeatResistance + +Description + Interface Heat Resistance type of condensation/saturation model using + spread source distribution following: + + References: + \verbatim + Hardt, S., Wondra, F. (2008). + Evaporation model for interfacial flows based on a continuum- + field representation of the source term + Journal of Computational Physics 227 (2008), 5871-5895 + \endverbatim + + + +SourceFiles + interfaceHeatResistance.C + +\*--------------------------------------------------------------------*/ + +#ifndef interfaceHeatResistance_H +#define interfaceHeatResistance_H + +#include "temperaturePhaseChangeTwoPhaseMixture.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace temperaturePhaseChangeTwoPhaseMixtures +{ + +/*--------------------------------------------------------------------*\ + Class interfaceHeatResistance +\*--------------------------------------------------------------------*/ + +class interfaceHeatResistance +: + public temperaturePhaseChangeTwoPhaseMixture +{ + // Private data + + //- Heat transfer coefficient [1/s/K] + dimensionedScalar R_; + + //- Interface area + volScalarField interfaceArea_; + + //- Mass condensation source + volScalarField mDotc_; + + //- Mass evaporation source + volScalarField mDote_; + + //- Spread for mass source + scalar spread_; + + + // Private member functions + + //- Update interface area + void updateInterface(); + + +public: + + //- Runtime type information + TypeName("interfaceHeatResistance"); + + + // Constructors + + //- Construct from components + interfaceHeatResistance + ( + const thermoIncompressibleTwoPhaseMixture& mixture, + const fvMesh& mesh + ); + + //- Destructor + virtual ~interfaceHeatResistance() + {} + + + // Member Functions + + //- Return the mass condensation and vaporisation rates as a + // coefficient to multiply (1 - alphal) for the condensation rate + // and a coefficient to multiply alphal for the vaporisation rate + virtual Pair<tmp<volScalarField>> mDotAlphal() const; + + //- Return the mass condensation and vaporisation rates as coefficients + virtual Pair<tmp<volScalarField>> mDot() const; + + //- Return the mass condensation and vaporisation rates as a + // coefficient to multiply (Tsat - T) for the condensation rate + // and a coefficient to multiply (T - Tsat) for the vaporisation rate + virtual Pair<tmp<volScalarField>> mDotDeltaT() const; + + //- Source for T equarion + virtual tmp<fvScalarMatrix> TSource() const; + + //- Volumetric source for alpha (used by alphaEq) + virtual Pair<tmp<volScalarField>> vDotAlphal() const; + + //- Return the volumetric condensation and vaporisation rates as + // coefficients (used by p_rghEq) + virtual Pair<tmp<volScalarField>> vDot() const; + + //- Correct the interfaceHeatResistance phaseChange model + virtual void correct(); + + //- Read the transportProperties dictionary and update + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace temperaturePhaseChangeTwoPhaseMixtures +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.C b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.C index bdf626c1770..01c057ccf5a 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.C +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -68,7 +68,7 @@ temperaturePhaseChangeTwoPhaseMixture Foam::Pair<Foam::tmp<Foam::volScalarField>> Foam::temperaturePhaseChangeTwoPhaseMixture::vDotAlphal() const -{ +{ volScalarField alphalCoeff ( 1.0/mixture_.rho1() - mixture_.alpha1() diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.H index 39fa3430afa..8f14c82c962 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.H +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixtures/temperaturePhaseChangeTwoPhaseMixture.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -42,6 +42,7 @@ SourceFiles #include "runTimeSelectionTables.H" #include "volFields.H" #include "dimensionedScalar.H" +#include "fvMatrices.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -140,15 +141,18 @@ public: // coefficient to multiply (Tsat - T) for the condensation rate // and a coefficient to multiply (T - Tsat) for the vaporisation rate virtual Pair<tmp<volScalarField>> mDotDeltaT() const = 0; + + //- Source for T equarion + virtual tmp<fvScalarMatrix> TSource() const = 0; //- Return the volumetric condensation and vaporisation rates as a // coefficient to multiply (1 - alphal) for the condensation rate // and a coefficient to multiply alphal for the vaporisation rate - Pair<tmp<volScalarField>> vDotAlphal() const; + virtual Pair<tmp<volScalarField>> vDotAlphal() const; //- Return the volumetric condensation and vaporisation rates as // coefficients - Pair<tmp<volScalarField>> vDot() const; + virtual Pair<tmp<volScalarField>> vDot() const; //- Correct the phaseChange model virtual void correct() = 0; diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.C b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.C index 130196953e3..249cd5e801c 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.C +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.H index 8da5fb337b7..71a30eab92c 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.H +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/thermoIncompressibleTwoPhaseMixture/thermoIncompressibleTwoPhaseMixture.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.C b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.C index 6967c5df538..26b975263e6 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.C +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2019 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -40,44 +40,6 @@ namespace Foam defineTypeNameAndDebug(twoPhaseMixtureEThermo, 0); } -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void Foam::twoPhaseMixtureEThermo::eBoundaryCorrection(volScalarField& h) -{ - volScalarField::Boundary& hbf = h.boundaryFieldRef(); - - forAll(hbf, patchi) - { - if (isA<gradientEnergyFvPatchScalarField>(hbf[patchi])) - { - refCast<gradientEnergyFvPatchScalarField>(hbf[patchi]).gradient() - = hbf[patchi].fvPatchField::snGrad(); - } - else if (isA<mixedEnergyFvPatchScalarField>(hbf[patchi])) - { - refCast<mixedEnergyFvPatchScalarField>(hbf[patchi]).refGrad() - = hbf[patchi].fvPatchField::snGrad(); - } - } -} - - -void Foam::twoPhaseMixtureEThermo::init() -{ - const volScalarField alpha1Rho1(alpha1()*rho1()); - const volScalarField alpha2Rho2(alpha2()*rho2()); - - e_ = - ( - (T_ - TSat_)*(alpha1Rho1*Cv1() + alpha2Rho2*Cv2()) - + (alpha1Rho1*Hf1() + alpha2Rho2*Hf2()) - ) - /(alpha1Rho1 + alpha2Rho2); - - e_.correctBoundaryConditions(); -} - - // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * // Foam::twoPhaseMixtureEThermo::twoPhaseMixtureEThermo @@ -89,32 +51,8 @@ Foam::twoPhaseMixtureEThermo::twoPhaseMixtureEThermo basicThermo(U.mesh(), word::null), thermoIncompressibleTwoPhaseMixture(U, phi), - e_ - ( - volScalarField - ( - IOobject - ( - "e", - U.mesh().time().timeName(), - U.mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - U.mesh(), - dimensionedScalar(dimEnergy/dimMass, Zero), - heBoundaryTypes() - ) - ), - - TSat_("TSat", dimTemperature, static_cast<const basicThermo&>(*this)), - - pDivU_(basicThermo::lookupOrDefault<Switch>("pDivU", true)) - -{ - // Initialise e - init(); -} + TSat_("TSat", dimTemperature, static_cast<const basicThermo&>(*this)) +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -122,19 +60,6 @@ Foam::twoPhaseMixtureEThermo::twoPhaseMixtureEThermo void Foam::twoPhaseMixtureEThermo::correct() { incompressibleTwoPhaseMixture::correct(); - - const volScalarField alpha1Rho1(alpha1()*rho1()); - const volScalarField alpha2Rho2(alpha2()*rho2()); - - T_ = - ( - (e_*(alpha1Rho1 + alpha2Rho2)) - - (alpha1Rho1*Hf1() + alpha2Rho2*Hf2()) - ) - /(alpha1Rho1*Cv1() + alpha2Rho2*Cv2()) - + TSat_; - - T().correctBoundaryConditions(); } @@ -151,15 +76,8 @@ Foam::tmp<Foam::volScalarField> Foam::twoPhaseMixtureEThermo::he const volScalarField& T ) const { - const volScalarField alpha1Rho1(alpha1()*rho1()); - const volScalarField alpha2Rho2(alpha2()*rho2()); - - return - ( - (T - TSat_)*(alpha1Rho1*Cv1() + alpha2Rho2*Cv2()) - + (alpha1Rho1*Hf1() + alpha2Rho2*Hf2()) - ) - / (alpha1Rho1 + alpha2Rho2); + NotImplemented; + return nullptr; } @@ -170,31 +88,8 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::he const labelList& cells ) const { - tmp<scalarField> the(new scalarField(T.size())); - scalarField& he = the.ref(); - - const volScalarField alpha1Rho1(alpha1()*rho1()); - const volScalarField alpha2Rho2(alpha2()*rho2()); - - forAll(T, i) - { - const label celli = cells[i]; - he[i] = - ( - (T[i] - TSat_.value()) - *( - alpha1Rho1[celli]*Cv1().value() - + alpha2Rho2[celli]*Cv2().value() - ) - + ( - alpha1Rho1[celli]*Hf1().value() - + alpha2Rho2[celli]*Hf2().value() - ) - ) - / (alpha1Rho1[celli] + alpha2Rho2[celli]); - } - - return the; + NotImplemented; + return nullptr; } @@ -205,26 +100,8 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::he const label patchi ) const { - const scalarField& alpha1p = alpha1().boundaryField()[patchi]; - const scalarField& alpha2p = alpha2().boundaryField()[patchi]; - - const scalarField& Tp = T_.boundaryField()[patchi]; - - return - ( - ( - (Tp - TSat_.value()) - *( - alpha1p*rho1().value()*Cv1().value() - + alpha2p*rho2().value()*Cv2().value() - ) - + ( - alpha1p*rho1().value()*Hf1().value() - + alpha2p*rho2().value()*Hf2().value() - ) - ) - / (alpha1p*rho1().value() + alpha2p*rho2().value()) - ); + NotImplemented; + return nullptr; } @@ -252,7 +129,7 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::THE ( const scalarField& h, const scalarField& p, - const scalarField& T0, // starting temperature + const scalarField& T0, const labelList& cells ) const { @@ -265,7 +142,7 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::THE ( const scalarField& h, const scalarField& p, - const scalarField& T0, // starting temperature + const scalarField& T0, const label patchi ) const { @@ -588,7 +465,6 @@ bool Foam::twoPhaseMixtureEThermo::read() { if (basicThermo::read() && thermoIncompressibleTwoPhaseMixture::read()) { - basicThermo::readIfPresent("pDivU", pDivU_); basicThermo::readEntry("TSat", TSat_); return true; } diff --git a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.H b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.H index de841fe63b1..d798857aace 100644 --- a/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.H +++ b/applications/solvers/multiphase/interCondensatingEvaporatingFoam/temperaturePhaseChangeTwoPhaseMixtures/twoPhaseMixtureEThermo/twoPhaseMixtureEThermo.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016 OpenCFD Ltd. + Copyright (C) 2016-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,10 +27,6 @@ Class Foam::twoPhaseMixtureEThermo Description - Two phases thermo Internal energy mixture Defined as: - e1 = Cv1(T - Tsat) + Hv1 - e2 = Cv2(T - Tsat) + Hv2 - e = (alpha1*rho1*e1 + alpha2*rho2*e2) / (alpha1*rho1 + alpha2*rho2) SourceFiles twoPhaseMixtureEThermo.C @@ -64,25 +60,9 @@ protected: // Protected Data - //- Internal energy field [J] - volScalarField e_; - //- Saturation Temperature dimensionedScalar TSat_; - //- Should the p*div(U) term be included in the energy equation - Switch pDivU_; - - - // Protected Member Functions - - //- Correct boundary for e - void eBoundaryCorrection (volScalarField& h); - - //- Initialize - void init(); - - public: TypeName("twoPhaseMixtureEThermo"); @@ -105,13 +85,15 @@ public: //- Return access to the internal energy field [J/Kg] virtual volScalarField& he() { - return e_; + NotImplemented; + return p(); } //- Return access to the internal energy field [J/Kg] virtual const volScalarField& he() const { - return e_; + NotImplemented; + return p(); } //- Enthalpy/Internal energy @@ -306,12 +288,6 @@ public: { return *this; } - - //- Should the dpdt term be included in the enthalpy equation - Switch pDivU() const - { - return pDivU_; - } }; diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqn.H b/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqn.H index e3bbba19d8b..76949b89779 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqn.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqn.H @@ -114,6 +114,9 @@ } rhoPhi = talphaPhi()*(rho1 - rho2) + phi*rho2; + + // Cache alphaPhi + alphaPhi10 = talphaPhi(); Info<< "Liquid phase volume fraction = " << alpha1.weightedAverage(mesh.V()).value() diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqnSubCycle.H b/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqnSubCycle.H index a04fc469475..4acc3c137cc 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqnSubCycle.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/alphaEqnSubCycle.H @@ -14,7 +14,17 @@ if (nAlphaSubCycles > 1) { dimensionedScalar totalDeltaT = runTime.deltaT(); - surfaceScalarField rhoPhiSum("rhoPhiSum", rhoPhi); + surfaceScalarField rhoPhiSum + ( + IOobject + ( + "rhoPhiSum", + runTime.timeName(), + mesh + ), + mesh, + dimensionedScalar(rhoPhi.dimensions(), Zero) + ); for ( diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H b/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H index 28c6b2c4eb7..e1b84a64a68 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H @@ -109,3 +109,19 @@ mesh.setFluxRequired(p_rgh.name()); mesh.setFluxRequired(alpha1.name()); #include "createFvOptions.H" + +IOobject alphaPhi10Header +( + IOobject::groupName("alphaPhi0", alpha1.group()), + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE +); + +// MULES flux from previous time-step +surfaceScalarField alphaPhi10 +( + alphaPhi10Header, + phi*fvc::interpolate(alpha1) +); diff --git a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.C b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.C index 90c71fd9139..dad4ad165d9 100644 --- a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.C +++ b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.C @@ -6,6 +6,8 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020 Henning Scheufler ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -30,6 +32,11 @@ License #include "FaceCellWave.H" #include "smoothData.H" #include "sweepData.H" +#include "fvMatrices.H" +#include "fvcVolumeIntegrate.H" +#include "fvmLaplacian.H" +#include "fvmSup.H" +#include "zeroGradientFvPatchField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -314,4 +321,100 @@ void Foam::fvc::sweep } +void Foam::fvc::spreadSource +( + volScalarField& mDotOut, + const volScalarField& mDotIn, + const volScalarField& alpha1, + const volScalarField& alpha2, + const dimensionedScalar& D, + const scalar cutoff +) +{ + const fvMesh& mesh = alpha1.mesh(); + + volScalarField mDotSmear + ( + IOobject + ( + "mDotSmear", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionedScalar(mDotOut.dimensions(), Zero), + zeroGradientFvPatchField<scalar>::typeName + ); + + //- Smearing of source term field + fvScalarMatrix mSourceEqn + ( + fvm::Sp(scalar(1), mDotSmear) + - fvm::laplacian(D, mDotSmear) + == + mDotIn + ); + + mSourceEqn.solve(); + + // Cut cells with cutoff < alpha1 < 1-cutoff and rescale remaining + // source term field + + dimensionedScalar intvDotLiquid("intvDotLiquid", dimMass/dimTime, 0.0); + dimensionedScalar intvDotVapor ("intvDotVapor", dimMass/dimTime, 0.0); + + const scalarField& Vol = mesh.V(); + + forAll(mesh.C(), celli) + { + if (alpha1[celli] < cutoff) + { + intvDotVapor.value() += + alpha2[celli]*mDotSmear[celli]*Vol[celli]; + } + else if (alpha1[celli] > 1.0 - cutoff) + { + intvDotLiquid.value() += + alpha1[celli]*mDotSmear[celli]*Vol[celli]; + } + } + + reduce(intvDotVapor.value(), sumOp<scalar>()); + reduce(intvDotLiquid.value(), sumOp<scalar>()); + + //- Calculate Nl and Nv + dimensionedScalar Nl ("Nl", dimless, Zero); + dimensionedScalar Nv ("Nv", dimless, Zero); + + const dimensionedScalar intmSource0(fvc::domainIntegrate(mDotIn)); + + if (intvDotVapor.value() > VSMALL) + { + Nv = intmSource0/intvDotVapor; + } + if (intvDotLiquid.value() > VSMALL) + { + Nl = intmSource0/intvDotLiquid; + } + + //- Set source terms in cells with alpha1 < cutoff or alpha1 > 1-cutoff + forAll(mesh.C(), celli) + { + if (alpha1[celli] < cutoff) + { + mDotOut[celli] = Nv.value()*(1 - alpha1[celli])*mDotSmear[celli]; + } + else if (alpha1[celli] > 1.0 - cutoff) + { + //mDotOut[celli] = 0; + mDotOut[celli] = -Nl.value()*alpha1[celli]*mDotSmear[celli]; + } + else + { + mDotOut[celli] = 0; + } + } +} // ************************************************************************* // diff --git a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.H b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.H index fdf2dc298dc..b9181a603b4 100644 --- a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.H +++ b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/fvcSmooth.H @@ -6,6 +6,8 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011 OpenFOAM Foundation + Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020 Henning Scheufler ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -42,6 +44,12 @@ Description gradient of alpha is large (where the difference between the values in neighbouring cells is larger than alphaDiff) away from that starting point of the sweep. + + + spreadSource: spread a source field (mDotIn) for two phase multiphase using + a laplacian operator and diffussivity D. + The spread source (mDotOut) is distributed from alpha1 < cutoff + to alpha1 > 1 - cutoff, and it is zero across the interface SourceFiles fvcSmooth.C @@ -52,6 +60,7 @@ SourceFiles #define fvcSmooth_H #include "volFieldsFwd.H" +#include "dimensionedScalar.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -82,6 +91,16 @@ namespace fvc const label nLayers, const scalar alphaDiff = 0.2 ); + + void spreadSource + ( + volScalarField& mDotOut, + const volScalarField& mDotIn, + const volScalarField& alpha1, + const volScalarField& alpha2, + const dimensionedScalar& D, + const scalar cutoff + ); } } diff --git a/src/functionObjects/field/Make/files b/src/functionObjects/field/Make/files index e4b295aa138..ab1157350a6 100644 --- a/src/functionObjects/field/Make/files +++ b/src/functionObjects/field/Make/files @@ -115,4 +115,6 @@ zeroGradient/zeroGradient.C stabilityBlendingFactor/stabilityBlendingFactor.C +interfaceHeight/interfaceHeight.C + LIB = $(FOAM_LIBBIN)/libfieldFunctionObjects diff --git a/src/functionObjects/field/interfaceHeight/interfaceHeight.C b/src/functionObjects/field/interfaceHeight/interfaceHeight.C new file mode 100644 index 00000000000..889f89c968f --- /dev/null +++ b/src/functionObjects/field/interfaceHeight/interfaceHeight.C @@ -0,0 +1,289 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2017-2019 OpenFOAM Foundation +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "interfaceHeight.H" +#include "fvMesh.H" +#include "interpolation.H" +#include "IOmanip.H" +#include "meshSearch.H" +#include "midPointAndFaceSet.H" +#include "Time.H" +#include "uniformDimensionedFields.H" +#include "volFields.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + defineTypeNameAndDebug(interfaceHeight, 0); + addToRunTimeSelectionTable(functionObject, interfaceHeight, dictionary); +} +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::functionObjects::interfaceHeight::writePositions() +{ + const uniformDimensionedVectorField& g = + mesh_.time().lookupObject<uniformDimensionedVectorField>("g"); + vector gHat = vector::zero; + + if (mag(direction_) > 0.0) + { + gHat = direction_/mag(direction_); + } + else + { + gHat = g.value()/mag(g.value()); + } + + const volScalarField& alpha = + mesh_.lookupObject<volScalarField>(alphaName_); + + autoPtr<interpolation<scalar>> + interpolator + ( + interpolation<scalar>::New(interpolationScheme_, alpha) + ); + + if (Pstream::master()) + { + file(fileID::heightFile) << mesh_.time().timeName() << tab; + file(fileID::positionFile) << mesh_.time().timeName() << tab; + } + + forAll(locations_, li) + { + // Create a set along a ray projected in the direction of gravity + const midPointAndFaceSet set + ( + "", + mesh_, + meshSearch(mesh_), + "xyz", + locations_[li] + gHat*mesh_.bounds().mag(), + locations_[li] - gHat*mesh_.bounds().mag() + ); + + // Find the height of the location above the boundary + scalar hLB = set.size() ? - gHat & (locations_[li] - set[0]) : - GREAT; + reduce(hLB, maxOp<scalar>()); + + // Calculate the integrals of length and length*alpha along the sampling + // line. The latter is equal to the equivalent length with alpha equal + // to one. + scalar sumLength = 0, sumLengthAlpha = 0; + for(label si = 0; si < set.size() - 1; ++ si) + { + if (set.segments()[si] != set.segments()[si+1]) + { + continue; + } + + const vector& p0 = set[si], p1 = set[si+1]; + const label c0 = set.cells()[si], c1 = set.cells()[si+1]; + const label f0 = set.faces()[si], f1 = set.faces()[si+1]; + const scalar a0 = interpolator->interpolate(p0, c0, f0); + const scalar a1 = interpolator->interpolate(p1, c1, f1); + + const scalar l = - gHat & (p1 - p0); + sumLength += l; + sumLengthAlpha += l*(a0 + a1)/2; + } + + reduce(sumLength, sumOp<scalar>()); + reduce(sumLengthAlpha, sumOp<scalar>()); + + // Write out + if (Pstream::master()) + { + // Interface heights above the boundary and location + const scalar hIB = + liquid_ ? sumLengthAlpha : sumLength - sumLengthAlpha; + const scalar hIL = hIB - hLB; + + // Position of the interface + const point p = locations_[li] - gHat*hIL; + + const Foam::Omanip<int> w = valueWidth(1); + + file(fileID::heightFile) << w << hIB << w << hIL; + file(fileID::positionFile) << '(' << w << p.x() << w << p.y() + << valueWidth() << p.z() << ") "; + } + } + + if (Pstream::master()) + { + file(fileID::heightFile).endl(); + file(fileID::positionFile).endl(); + } +} + + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void Foam::functionObjects::interfaceHeight::writeFileHeader(const fileID i) +{ + forAll(locations_, li) + { + writeHeaderValue + ( + file(i), + "Location " + Foam::name(li), + locations_[li] + ); + } + + switch (fileID(i)) + { + case fileID::heightFile: + writeHeaderValue + ( + file(fileID::heightFile), + "hB", + "Interface height above the boundary" + ); + writeHeaderValue + ( + file(fileID::heightFile), + "hL", + "Interface height above the location" + ); + break; + case fileID::positionFile: + writeHeaderValue(file(i), "p", "Interface position"); + break; + } + + const Foam::Omanip<int> w = valueWidth(1); + + writeCommented(file(i), "Location"); + forAll(locations_, li) + { + switch (fileID(i)) + { + case fileID::heightFile: + file(i) << w << li << w << ' '; + break; + case fileID::positionFile: + file(i) << w << li << w << ' ' << w << ' ' << " "; + break; + } + } + file(i).endl(); + + writeCommented(file(i), "Time"); + forAll(locations_, li) + { + switch (fileID(i)) + { + case fileID::heightFile: + file(i) << w << "hB" << w << "hL"; + break; + case fileID::positionFile: + file(i) << w << "p" << w << ' ' << w << ' ' << " "; + break; + } + } + file(i).endl(); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::functionObjects::interfaceHeight::interfaceHeight +( + const word& name, + const Time& runTime, + const dictionary& dict +) +: + fvMeshFunctionObject(name, runTime, dict), + logFiles(obr_, name), + alphaName_("alpha"), + liquid_(true), + locations_(), + interpolationScheme_("cellPoint"), + direction_(vector::zero) +{ + read(dict); + resetNames({"height", "position"}); + + writeFileHeader(fileID::heightFile); + writeFileHeader(fileID::positionFile); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::functionObjects::interfaceHeight::~interfaceHeight() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::functionObjects::interfaceHeight::read(const dictionary& dict) +{ + + dict.readIfPresent("alpha", alphaName_); + dict.readIfPresent("liquid", liquid_); + dict.lookup("locations") >> locations_; + dict.readIfPresent("interpolationScheme", interpolationScheme_); + dict.readIfPresent("direction", direction_); + + return true; +} + + +bool Foam::functionObjects::interfaceHeight::execute() +{ + return true; +} + + +bool Foam::functionObjects::interfaceHeight::end() +{ + return true; +} + + +bool Foam::functionObjects::interfaceHeight::write() +{ + logFiles::write(); + + writePositions(); + + return true; +} + + +// ************************************************************************* // diff --git a/src/functionObjects/field/interfaceHeight/interfaceHeight.H b/src/functionObjects/field/interfaceHeight/interfaceHeight.H new file mode 100644 index 00000000000..b2d403baa61 --- /dev/null +++ b/src/functionObjects/field/interfaceHeight/interfaceHeight.H @@ -0,0 +1,181 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2017-2019 OpenFOAM Foundation +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::functionObjects::interfaceHeight + +Description + This function object reports the height of the interface above a set of + locations. For each location, it writes the vertical distance of the + interface above both the location and the lowest boundary. It also writes + the point on the interface from which these heights are computed. It uses + an integral approach, so if there are multiple interfaces above or below a + location then this method will generate average values. + + Example of function object specification: + \verbatim + interfaceHeight1 + { + type interfaceHeight; + libs ("libfieldFunctionObjects.so"); + alpha alpha.water; + locations ((0 0 0) (10 0 0) (20 0 0)); + } + \endverbatim + +Usage + \table + Property | Description | Required | Default value + type | type name | yes | + alpha | name of the alpha field | no | alpha + locations | list of locations to report the height at | yes | + liquid | is the alpha field that of the liquid | no | true + direction | direction of interface | no | g + \endtable + +SourceFiles + interfaceHeight.C + +\*---------------------------------------------------------------------------*/ + +#ifndef interfaceHeight_H +#define interfaceHeight_H + +#include "fvMeshFunctionObject.H" +#include "logFiles.H" +#include "point.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + +/*---------------------------------------------------------------------------*\ + Class interfaceHeight Declaration +\*---------------------------------------------------------------------------*/ + +class interfaceHeight +: + public fvMeshFunctionObject, + public logFiles +{ + // Private Data + + //- Name of the alpha field + word alphaName_; + + //- Is the alpha field that of the liquid under the wave? + bool liquid_; + + //- List of locations to report the height at + List<point> locations_; + + //- Interpolation scheme + word interpolationScheme_; + + + //- Direction of interface motion + vector direction_; + + + // Private Member Functions + + //- Output positions + void writePositions(); + + + // Private Enumerations + + //- File enumeration + enum class fileID + { + heightFile = 0, + positionFile = 1 + }; + + + Ostream& file(const fileID fid) + { + return logFiles::files(label(fid)); + } + + +protected: + + // Protected Member Functions + + //- Output file header information + virtual void writeFileHeader(const fileID i); + + +public: + + //- Runtime type information + TypeName("interfaceHeight"); + + + // Constructors + + //- Construct from Time and dictionary + interfaceHeight + ( + const word& name, + const Time& runTime, + const dictionary& dict + ); + + + //- Destructor + virtual ~interfaceHeight(); + + + // Member Functions + + //- Read + virtual bool read(const dictionary&); + + //- Execute + virtual bool execute(); + + //- Execute at the final time-loop + virtual bool end(); + + //- Write + virtual bool write(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace functionObjects +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T new file mode 100755 index 00000000000..552d6f52a7a --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 373.15; + +boundaryField +{ + sideWalls + { + type zeroGradient; + } + + faceWall + { + type fixedValue; + value uniform 378.15; + } + + outlet + { + type inletOutlet; + inletValue uniform 373.15; + value uniform 373.15; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U new file mode 100755 index 00000000000..cc77ed99d50 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + sideWalls + { + type slip; + value uniform (0 0 0); + } + + faceWall + { + type noSlip; + } + + frontAndBack + { + type empty; + } + + outlet + { + type pressureInletOutletVelocity; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas new file mode 100755 index 00000000000..e6181c6e812 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alpha.gas; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ".*" + { + type zeroGradient; + } + + outlet + { + type inletOutlet; + inletValue uniform 0; + value uniform 0; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid new file mode 100755 index 00000000000..c1a88243e90 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alpha.liquid; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ".*" + { + type zeroGradient; + } + + outlet + { + type inletOutlet; + inletValue uniform 1; + value uniform 0; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p new file mode 100755 index 00000000000..94ea98497b8 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + sideWalls + { + type fixedFluxPressure; + } + + faceWall + { + type fixedFluxPressure; + } + + outlet + { + //type fixedValue; + type totalPressure; + rho rho; + p0 uniform 1e5; + value uniform 1e5; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh new file mode 100755 index 00000000000..b35272aaf64 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p_rgh; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + sideWalls + { + type fixedFluxPressure; + } + + faceWall + { + type fixedFluxPressure; + } + + outlet + { + //type fixedValue; + type totalPressure; + rho rho; + p0 uniform 1e5; + value uniform 1e5; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allclean b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allclean new file mode 100755 index 00000000000..f576c0f68a1 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allclean @@ -0,0 +1,12 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +rm -rf 0 +rm positionClean.dat +rm OF_vs_Exact.eps + +#------------------------------------------------------------------------------ diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun new file mode 100755 index 00000000000..c7cdbed219d --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun @@ -0,0 +1,19 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +restore0Dir +cp -r 0 1.36 +cp system/setAlphaFieldDict.liquid system/setAlphaFieldDict +runApplication setAlphaField +rm log.setAlphaField + +cp system/setAlphaFieldDict.gas system/setAlphaFieldDict +runApplication setAlphaField + +#runApplication $(getApplication) + +#------------------------------------------------------------------------------ diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g new file mode 100644 index 00000000000..4930967bdd6 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + location "constant"; + object g; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -2 0 0 0 0]; +value (0 0 0); + + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties new file mode 100755 index 00000000000..92421df57cf --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object phaseChangeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +type massTransferMultiphaseSystem; + +phases (liquid gas); + +liquid +{ + type pureMovingPhaseModel; +} + +gas +{ + type pureMovingPhaseModel; +} + +surfaceTension +( + (gas and liquid) + { + type constant; + sigma 0.0; + } +); + +massTransferModel +( + (liquid to gas) + { + type Lee; + C 1700; + Tactivate 373.25; + } +); + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas new file mode 100755 index 00000000000..a17a753b7dd --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState rhoConst; + specie specie; + energy sensibleEnthalpy; +} + +// ************************************************************************* // + +mixture +{ + specie + { + nMoles 1; + molWeight 18.9; + } + equationOfState + { + rho 0.581; + } + thermodynamics + { + Hf 0;//-1.338e7; //[J/kg] + Cp 2030; + } + transport + { + mu 0.9e-05; + Pr 0.7; + } +} + + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid new file mode 100755 index 00000000000..544aaa6c8b8 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type heRhoThermo; + mixture pureMixture; + transport const; + thermo hConst; + equationOfState rhoConst; + specie specie; + energy sensibleEnthalpy; +} + +mixture +{ + specie + { + nMoles 1; + molWeight 18.9; + } + equationOfState + { + rho 958.4; + } + thermodynamics + { + Cp 4216; + Hf 2.26e6;//-1.5833e7;//deltaHv 2.45e6; //[J/Kg] + } + transport + { + mu 959e-6; + Pr 6.62; + } +} + + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties new file mode 100644 index 00000000000..e7f0365ed22 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object transportProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +phases (liquid vapour); // FC-72 + +liquid +{ + transportModel Newtonian; + nu 1e-6; + rho 958.4; + + + Cp 4216; // irrelevant + Cv 4216; // irrelevant + kappa 0.671; // irrelevant + hf 0; +} + +vapour +{ + transportModel Newtonian; + nu 1e-5; // irrelevant + rho 0.581; + + + Cp 2030; // FC72 vapour + Cv 2030; // Cv = Cp - R/w + kappa 0.025; // FC72 vapour // 0.01; + hf 2260.0e3; +} + +sigma 0; + +Prt 0.7; + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties new file mode 100755 index 00000000000..5eec0426726 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/data.dat b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/data.dat new file mode 100644 index 00000000000..b55f154e1eb --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/data.dat @@ -0,0 +1,1001 @@ +t pos +1.3150245415656703 0.0005 +1.4138083007833222 0.0005184398054516621 +1.5125920600009741 0.0005362458985889908 +1.6113758192186263 0.0005534794446321124 +1.7101595784362782 0.0005701923600917754 +1.8089433376539301 0.0005864291597318349 +1.9077270968715823 0.0006022283547463896 +2.006510856089234 0.0006176235286461328 +2.105294615306886 0.0006326441772545272 +2.204078374524538 0.0006473163731057749 +2.30286213374219 0.0006616632971289642 +2.4016458929598423 0.0006757056686489534 +2.500429652177494 0.0006894620965079127 +2.599213411395146 0.0007029493683031827 +2.697997170612798 0.0007161826905717568 +2.79678092983045 0.0007291758897216487 +2.895564689048102 0.0007419415812772021 +2.994348448265754 0.000754491313339572 +3.093132207483406 0.0007668356889071017 +3.1919159667010577 0.0007789844707427657 +3.29069972591871 0.0007909466717390901 +3.389483485136362 0.0008027306331590325 +3.488267244354014 0.0008143440926835894 +3.587051003571666 0.0008257942438437166 +3.6858347627893178 0.0008370877881334626 +3.7846185220069697 0.0008482309808766301 +3.8834022812246216 0.0008592296717384049 +3.9821860404422735 0.0008700893406268371 +4.0809697996599255 0.0008808151296096142 +4.179753558877578 0.0008914118713736983 +4.27853731809523 0.0009018841146747823 +4.377321077312882 0.0009122361471567948 +4.476104836530533 0.0009224720158661888 +4.5748885957481855 0.0009325955457394098 +4.673672354965838 0.0009426103563030404 +4.772456114183489 0.0009525198767933937 +4.871239873401141 0.0009623273598746214 +4.970023632618794 0.0009720358941109204 +5.068807391836446 0.0009816484153284074 +5.167591151054097 0.000991167716985138 +5.266374910271749 0.001000596459653085 +5.365158669489402 0.0010099371797032948 +5.463942428707053 0.0010191922972745634 +5.562726187924705 0.0010283641235965786 +5.661509947142358 0.0010374548677303107 +5.7602937063600095 0.001046466642781352 +5.859077465577661 0.001055401471635714 +5.957861224795312 0.0010642612922621907 +6.056644984012966 0.0010730479626206582 +6.155428743230617 0.001081763265211526 +6.254212502448269 0.0010904089112978945 +6.352996261665922 0.0010989865448287422 +6.451780020883573 0.0011074977460886204 +6.550563780101225 0.0011159440350968013 +6.649347539318876 0.0011243268747765877 +6.74813129853653 0.0011326476739134928 +6.846915057754181 0.0011409077899192392 +6.945698816971833 0.0011491085314169242 +7.044482576189486 0.0011572511606612963 +7.143266335407137 0.0011653368958068197 +7.242050094624789 0.0011733669130350624 +7.34083385384244 0.0011813423485519297 +7.4396176130600935 0.0011892643004643444 +7.538401372277745 0.0011971338305451498 +7.6371851314953965 0.0012049519658942677 +7.73596889071305 0.0012127197005034668 +7.834752649930701 0.0012204379967314912 +7.933536409148353 0.0012281077866957493 +8.032320168366004 0.0012357299735862562 +8.131103927583657 0.001243305432907074 +8.229887686801309 0.001250835013650083 +8.32867144601896 0.0012583195394055362 +8.427455205236612 0.0012657598094135071 +8.526238964454265 0.0012731565995600367 +8.625022723671917 0.0012805106633214862 +8.723806482889568 0.0012878227326603572 +8.822590242107221 0.0012950935188755857 +8.921374001324873 0.0013023237134101122 +9.020157760542524 0.0013095139886183198 +9.118941519760176 0.001316664998495752 +9.217725278977829 0.0013237773793733506 +9.31650903819548 0.0013308517505783027 +9.415292797413132 0.0013378887150634353 +9.514076556630783 0.00134488886000697 +9.612860315848437 0.0013518527573843258 +9.711644075066088 0.0013587809645135458 +9.81042783428374 0.0013656740245758204 +9.909211593501391 0.0013725324671124818 +10.007995352719044 0.0013793568084997563 +10.106779111936696 0.0013861475524024817 +10.205562871154347 0.0013929051902079148 +10.304346630372 0.0013996302014406894 +10.403130389589652 0.0014063230541599117 +10.501914148807304 0.0014129842053393305 +10.600697908024955 0.0014196141012314495 +10.699481667242608 0.0014262131777164077 +10.79826542646026 0.0014327818606363954 +10.897049185677911 0.0014393205661163355 +10.995832944895565 0.001445829700871512 +11.094616704113216 0.001452309662502788 +11.193400463330867 0.0014587608397800236 +11.292184222548519 0.0014651836129142574 +11.390967981766172 0.0014715783538192025 +11.489751740983824 0.0014779454263625538 +11.588535500201475 0.001484285186607597 +11.687319259419128 0.0014905979830455648 +11.78610301863678 0.0014968841568191783 +11.884886777854431 0.001503144041937771 +11.983670537072083 0.0015093779654843835 +12.082454296289736 0.0015155862478151926 +12.181238055507388 0.0015217692027516168 +12.280021814725039 0.0015279271377654263 +12.378805573942692 0.0015340603541571648 +12.477589333160344 0.0015401691472281748 +12.576373092377995 0.0015462538064465097 +12.675156851595647 0.00155231461560699 +12.7739406108133 0.0015583518529856584 +12.872724370030951 0.0015643657914888678 +12.971508129248603 0.0015703566987972349 +13.070291888466254 0.0015763248375046642 +13.169075647683908 0.0015822704652526584 +13.26785940690156 0.0015881938348600967 +13.36664316611921 0.0015940951944486811 +13.465426925336864 0.0015999747875642088 +13.564210684554515 0.0016058328532938578 +13.662994443772167 0.0016116696263796279 +13.761778202989818 0.0016174853373281026 +13.860561962207472 0.0016232802125166696 +13.959345721425123 0.001629054474296339 +14.058129480642775 0.0016348083410912969 +14.156913239860428 0.001640542027495314 +14.25569699907808 0.0016462557443651315 +14.35448075829573 0.0016519496989109415 +14.453264517513382 0.00165762409478407 +14.552048276731036 0.0016632791321619666 +14.650832035948687 0.001668915007830603 +14.749615795166338 0.001674531915264376 +14.848399554383992 0.0016801300447036045 +14.947183313601643 0.001685709583229713 +15.045967072819295 0.0016912707148381808 +15.144750832036946 0.0016968136205093378 +15.2435345912546 0.001702338478277092 +15.342318350472251 0.0017078454632956468 +15.441102109689902 0.0017133347479042964 +15.539885868907554 0.0017188065016903549 +15.638669628125207 0.0017242608915502878 +15.737453387342859 0.00172969808174911 +15.83623714656051 0.001735118233978108 +15.935020905778163 0.001740521507410944 +16.033804664995817 0.0017459080587581988 +16.132588424213466 0.001751278042320402 +16.23137218343112 0.0017566316100396055 +16.330155942648773 0.0017619689115495466 +16.428939701866422 0.0017672900942244459 +16.527723461084076 0.001772595303226489 +16.62650722030173 0.001777884681552031 +16.72529097951938 0.001783158370076568 +16.824074738737032 0.0017884165075985178 +16.92285849795468 0.001793659230881841 +17.021642257172335 0.0017988866746975456 +17.120426016389988 0.0018040989718641136 +17.219209775607638 0.0018092962532868708 +17.31799353482529 0.001814478647996351 +17.41677729404294 0.0018196462831856699 +17.515561053260594 0.0018247992842469498 +17.614344812478247 0.0018299377748068205 +17.713128571695897 0.0018350618767610247 +17.81191233091355 0.001840171710308158 +17.910696090131204 0.0018452673939825658 +18.009479849348853 0.0018503490446864252 +18.108263608566507 0.001855416777721039 +18.20704736778416 0.0018604707068173585 +18.30583112700181 0.0018655109441657633 +18.404614886219463 0.001870537600445122 +18.503398645437112 0.0018755507848511467 +18.602182404654766 0.001880550605124071 +18.70096616387242 0.0018855371675756663 +18.79974992309007 0.0018905105771156172 +18.898533682307722 0.001895470937277272 +18.997317441525375 0.001900418350242793 +19.096101200743025 0.0019053529168677112 +19.194884959960678 0.0019102747367049202 +19.29366871917833 0.0019151839080281063 +19.39245247839598 0.0019200805278546435 +19.491236237613634 0.0019249646919679653 +19.590019996831288 0.0019298364949394242 +19.688803756048937 0.0019346960301496558 +19.78758751526659 0.0019395433898094663 +19.88637127448424 0.001944378664980243 +19.985155033701894 0.0019492019455939166 +20.083938792919547 0.001954013320472475 +20.182722552137196 0.0019588128773470486 +20.28150631135485 0.0019636007028765753 +20.380290070572503 0.0019683768826660557 +20.479073829790153 0.00197314150128441 +20.577857589007806 0.0019778946422819525 +20.67664134822546 0.0019826363882074825 +20.77542510744311 0.0019873668206250115 +20.874208866660762 0.001992086020130136 +20.972992625878412 0.0019967940663660542 +21.071776385096065 0.002001491038039251 +21.17056014431372 0.00200617701293485 +21.269343903531368 0.00201085206793164 +21.36812766274902 0.002015516279016796 +21.466911421966675 0.0020201697213002843 +21.565695181184324 0.002024812469028978 +21.664478940401978 0.0020294445956004765 +21.76326269961963 0.0020340661735766463 +21.86204645883728 0.0020386772746968794 +21.960830218054934 0.00204327796989109 +22.059613977272587 0.0020478683292924405 +22.158397736490237 0.0020524484222498186 +22.25718149570789 0.0020570183173400586 +22.35596525492554 0.0020615780823799233 +22.454749014143193 0.0020661277844378455 +22.553532773360846 0.002070667489845436 +22.652316532578496 0.0020751972642087677 +22.75110029179615 0.0020797171724194403 +22.849884051013802 0.0020842272786654216 +22.948667810231452 0.0020887276464416865 +23.047451569449105 0.002093218338560644 +23.14623532866676 0.0020976994171623686 +23.24501908788441 0.002102170943724629 +23.34380284710206 0.0021066329790727324 +23.442586606319715 0.0021110855833891746 +23.541370365537365 0.0021155288162231136 +23.640154124755018 0.00211996273649966 +23.738937883972667 0.0021243874025289934 +23.83772164319032 0.002128802872015312 +23.936505402407974 0.0021332092020656104 +24.035289161625624 0.0021376064491982977 +24.134072920843277 0.0021419946693516565 +24.23285668006093 0.0021463739178921434 +24.33164043927858 0.002150744249622541 +24.430424198496233 0.0021551057187899586 +24.529207957713886 0.0021594583790936887 +24.627991716931536 0.0021638022836929205 +24.72677547614919 0.0021681374852143154 +24.82555923536684 0.0021724640357594443 +24.924342994584492 0.0021767819869120955 +25.023126753802146 0.0021810913897454473 +25.121910513019795 0.0021853922948291194 +25.22069427223745 0.0021896847522360936 +25.319478031455102 0.002193968811549517 +25.41826179067275 0.0021982445218693835 +25.517045549890405 0.0022025119318191022 +25.615829309108058 0.0022067710895519433 +25.714613068325708 0.0022110220427573823 +25.81339682754336 0.0022152648386673285 +25.912180586761014 0.0022194995240622474 +26.010964345978664 0.0022237261452771784 +26.109748105196317 0.0022279447482076516 +26.208531864413967 0.0022321553783155 +26.30731562363162 0.0022363580806345775 +26.406099382849273 0.0022405528997763765 +26.504883142066923 0.002244739879935554 +26.603666901284576 0.002248919064895365 +26.70245066050223 0.0022530904980330017 +26.80123441971988 0.0022572542223248484 +26.900018178937533 0.002261410280351647 +26.998801938155186 0.002265558714303576 +27.097585697372836 0.002269699565985249 +27.19636945659049 0.002273832876820631 +27.29515321580814 0.002277958687857869 +27.39393697502579 0.0022820770397740517 +27.492720734243445 0.0022861879728798894 +27.591504493461095 0.002290291527124312 +27.690288252678748 0.0022943877420990052 +27.7890720118964 0.0022984766570428618 +27.88785577111405 0.002302558310846369 +27.986639530331704 0.0023066327420559266 +28.085423289549357 0.002310699988878089 +28.184207048767007 0.002314760089183749 +28.28299080798466 0.002318813080512251 +28.381774567202314 0.00232285900007544 +28.480558326419963 0.0023268978847616477 +28.579342085637617 0.002330929771139617 +28.678125844855266 0.0023349546954623645 +28.77690960407292 0.0023389726936709843 +28.875693363290573 0.0023429838013983915 +28.974477122508222 0.0023469880539730096 +29.073260881725876 0.0023509854864224005 +29.17204464094353 0.0023549761334768406 +29.27082840016118 0.0023589600295728383 +29.369612159378832 0.0023629372088566055 +29.468395918596485 0.0023669077051874667 +29.567179677814135 0.0023708715521412287 +29.665963437031788 0.002374828783013486 +29.764747196249438 0.00237877943082289 +29.86353095546709 0.0023827235283143595 +29.962314714684744 0.0023866611079622485 +30.061098473902394 0.0023905922019734657 +30.159882233120047 0.0023945168422905487 +30.2586659923377 0.002398435060594691 +30.35744975155535 0.0024023468883087253 +30.456233510773004 0.0024062523566000665 +30.555017269990657 0.0024101514963836054 +30.653801029208307 0.002414044338324565 +30.75258478842596 0.002417930912841317 +30.851368547643613 0.0024218112501081506 +30.950152306861263 0.002425685380058007 +31.048936066078916 0.0024295533323851768 +31.147719825296566 0.002433415136547949 +31.24650358451422 0.0024372708217712345 +31.345287343731872 0.002441120417049144 +31.444071102949522 0.002444963951147531 +31.542854862167175 0.0024488014526064996 +31.64163862138483 0.00245263294974288 +31.740422380602478 0.002456458470652662 +31.83920613982013 0.0024602780432134035 +31.937989899037785 0.0024640916950865958 +32.036773658255434 0.0024678994537200025 +32.13555741747309 0.0024717013463499684 +32.23434117669074 0.0024754974000036844 +32.333124935908394 0.0024792876415014376 +32.43190869512605 0.0024830720974588147 +32.53069245434369 0.0024868507942888882 +32.62947621356135 0.002490623758204364 +32.728259972779 0.0024943910152197047 +32.82704373199665 0.0024981525911532197 +32.92582749121431 0.0025019085116291333 +33.02461125043196 0.0025056588020796167 +33.123395009649606 0.002509403487746803 +33.22217876886726 0.0025131425936847623 +33.32096252808491 0.0025168761447614645 +33.419746287302566 0.002520604165660703 +33.51853004652021 0.0025243266808840027 +33.617313805737865 0.0025280437147524966 +33.71609756495552 0.002531755291408781 +33.81488132417317 0.0025354614348187428 +33.913665083390825 0.0025391621687733683 +34.01244884260848 0.002542857516890522 +34.111232601826124 0.0025465475026167075 +34.21001636104378 0.0025502321492288003 +34.30880012026143 0.0025539114798357643 +34.407583879479084 0.0025575855173803398 +34.50636763869674 0.002561254284640715 +34.60515139791438 0.0025649178042321695 +34.70393515713204 0.002568576098608708 +34.80271891634969 0.0025722291900646586 +34.90150267556734 0.002575877100736261 +35.000286434785 0.002579519852603233 +35.09907019400265 0.0025831574674903116 +35.197853953220296 0.0025867899670687835 +35.29663771243795 0.0025904173728579873 +35.3954214716556 0.002594039706226802 +35.494205230873256 0.0025976569883951173 +35.59298899009091 0.0026012692404352817 +35.691772749308555 0.0026048764832735357 +35.79055650852621 0.002608478737691427 +35.88934026774386 0.0026120760243272052 +35.988124026961515 0.002615668363677203 +36.08690778617917 0.002619255776097198 +36.18569154539682 0.0026228382818037584 +36.28447530461447 0.002626415900875573 +36.38325906383212 0.0026299886532547634 +36.482042823049774 0.0026335565587481814 +36.58082658226743 0.0026371196370286883 +36.67961034148508 0.0026406779076364227 +36.77839410070273 0.002644231389980051 +36.87717785992038 0.0026477801033380002 +36.97596161913803 0.0026513240668596793 +37.074745378355686 0.0026548632995666848 +37.17352913757334 0.0026583978203539933 +37.27231289679099 0.0026619276479911357 +37.37109665600864 0.0026654528011233617 +37.46988041522629 0.0026689732982727895 +37.568664174443946 0.0026724891578395393 +37.6674479336616 0.0026760003981028567 +37.76623169287925 0.002679507037222221 +37.865015452096905 0.0026830090932384414 +37.96379921131455 0.0026865065840747386 +38.062582970532205 0.0026899995275378166 +38.16136672974986 0.00269348794131892 +38.26015048896751 0.0026969718429948786 +38.358934248185165 0.002700451250029141 +38.45771800740281 0.0027039261797727958 +38.556501766620464 0.002707396649465583 +38.65528552583812 0.0027108626762368877 +38.75406928505577 0.002714324277106731 +38.852853044273424 0.002717781468986742 +38.95163680349108 0.002721234268681124 +39.05042056270872 0.0027246826928876045 +39.149204321926376 0.002728126758198381 +39.24798808114403 0.0027315664811010483 +39.34677184036168 0.0027350018779795236 +39.445555599579336 0.002738432965114954 +39.54433935879698 0.002741859758686617 +39.643123118014636 0.0027452822747728134 +39.74190687723229 0.0027487005293517427 +39.84069063644994 0.002752114538302377 +39.939474395667595 0.0027555243174053217 +40.03825815488525 0.0027589298823436637 +40.137041914102895 0.0027623312487038147 +40.23582567332055 0.0027657284319763456 +40.3346094325382 0.002769121447556805 +40.433393191755854 0.0027725103107465354 +40.53217695097351 0.0027758950367534805 +40.630960710191154 0.002779275640692978 +40.72974446940881 0.002782652137588549 +40.82852822862646 0.0027860245423726756 +40.927311987844114 0.002789392869887574 +41.02609574706177 0.0027927571348859525 +41.12487950627942 0.002796117352031769 +41.223663265497066 0.0027994735359009753 +41.32244702471472 0.002802825700982254 +41.42123078393237 0.002806173861677751 +41.520014543150026 0.0028095180323037938 +41.61879830236768 0.002812858227091607 +41.71758206158533 0.0028161944601880202 +41.81636582080298 0.002819526745656166 +41.91514958002063 0.0028228550974761716 +42.013933339238285 0.0028261795295458437 +42.11271709845594 0.002829500055681343 +42.21150085767359 0.002832816689617858 +42.31028461689124 0.0028361294450102653 +42.40906837610889 0.0028394383354337868 +42.507852135326544 0.0028427433743846366 +42.6066358945442 0.0028460445752806663 +42.70541965376185 0.0028493419514619978 +42.804203412979504 0.0028526355161916537 +42.90298717219715 0.0028559252826561798 +43.001770931414804 0.00285921126396626 +43.10055469063246 0.0028624934731573265 +43.19933844985011 0.002865771923190164 +43.29812220906776 0.002869046626951505 +43.39690596828541 0.002872317597254622 +43.49568972750306 0.0028755848468399125 +43.594473486720716 0.0028788483883754766 +43.69325724593837 0.0028821082344576924 +43.79204100515602 0.002885364397611781 +43.890824764373676 0.002888616890292368 +43.98960852359132 0.002891865724884042 +44.088392282808975 0.0028951109137019026 +44.18717604202663 0.0028983524689921037 +44.28595980124428 0.0029015904029323952 +44.384743560461935 0.0029048247276326567 +44.48352731967958 0.0029080554551354234 +44.582311078897234 0.002911282597416412 +44.68109483811489 0.0029145061663850376 +44.77987859733254 0.0029177261738849254 +44.878662356550194 0.00292094263169442 +44.97744611576785 0.002924155551527087 +45.07622987498549 0.0029273649450322105 +45.17501363420315 0.0029305708237952885 +45.2737973934208 0.002933773199338516 +45.37258115263845 0.002936972083121273 +45.47136491185611 0.0029401674865405995 +45.57014867107376 0.0029433594209316715 +45.668932430291406 0.0029465478975682683 +45.76771618950906 0.0029497329276632384 +45.86649994872671 0.002952914522368959 +45.965283707944366 0.0029560926927777913 +46.06406746716202 0.0029592674499225326 +46.162851226379665 0.0029624388047768627 +46.26163498559732 0.0029656067682557853 +46.36041874481497 0.002968771351216068 +46.459202504032625 0.0029719325644566768 +46.55798626325028 0.002975090418719202 +46.65677002246793 0.002978244924688289 +46.75555378168558 0.0029813960929920584 +46.85433754090323 0.002984543934202522 +46.953121300120884 0.0029876884588359988 +47.05190505933854 0.0029908296773535235 +47.15068881855619 0.002993967600161254 +47.24947257777384 0.002997102237610872 +47.34825633699149 0.0030002335999999826 +47.44704009620914 0.0030033616975725067 +47.5458238554268 0.0030064865405190775 +47.64460761464445 0.0030096081389774194 +47.7433913738621 0.00301272650303274 +47.84217513307975 0.003015841642718105 +47.9409588922974 0.0030189535680148175 +48.039742651515056 0.0030220622888527883 +48.13852641073271 0.003025167815110909 +48.23731016995036 0.0030282701566174157 +48.33609392916801 0.0030313693231502534 +48.43487768838566 0.0030344653244374345 +48.533661447603315 0.0030375581701573948 +48.63244520682097 0.0030406478699393485 +48.73122896603862 0.003043734433363636 +48.830012725256275 0.003046817869962071 +48.92879648447392 0.003049898189218284 +49.027580243691574 0.003052975400568063 +49.12636400290923 0.0030560495133996903 +49.22514776212688 0.003059120537054276 +49.323931521344534 0.00306218848082609 +49.42271528056218 0.0030652533539628915 +49.52149903977983 0.0030683151656662505 +49.620282798997486 0.0030713739250918747 +49.71906655821514 0.0030744296413499246 +49.81785031743279 0.003077482323505333 +49.916634076650446 0.003080531980578118 +50.01541783586809 0.0030835786215436924 +50.114201595085746 0.0030866222553331745 +50.2129853543034 0.0030896628908336932 +50.31176911352105 0.003092700536888687 +50.410552872738705 0.003095735202298208 +50.50933663195636 0.0030987668958192198 +50.608120391174005 0.003101795626165889 +50.70690415039166 0.0031048214020098805 +50.80568790960931 0.0031078442319806437 +50.904471668826965 0.003110864124665703 +51.00325542804462 0.0031138810886109426 +51.102039187262264 0.0031168951323208845 +51.20082294647992 0.003119906264258974 +51.29960670569757 0.0031229144928478494 +51.398390464915224 0.0031259198264696267 +51.49717422413288 0.0031289222734661617 +51.59595798335053 0.0031319218421393294 +51.694741742568176 0.0031349185407512858 +51.79352550178583 0.0031379123775247338 +51.89230926100348 0.0031409033606431902 +51.991093020221136 0.003143891498251243 +52.08987677943879 0.003146876798454811 +52.188660538656436 0.0031498592693214016 +52.28744429787409 0.003152838918880366 +52.38622805709174 0.0031558157551231456 +52.485011816309395 0.0031587897860035304 +52.58379557552705 0.0031617610194378996 +52.6825793347447 0.003164729463305473 +52.78136309396235 0.003167695125448549 +52.88014685318 0.003170658013672754 +52.978930612397654 0.0031736181357472754 +53.07771437161531 0.003176575499405102 +53.17649813083296 0.003179530112343258 +53.27528189005061 0.003182481982223039 +53.37406564926826 0.003185431116670245 +53.472849408485914 0.0031883775232754044 +53.57163316770357 0.003191321209594007 +53.67041692692122 0.0031942621831467298 +53.76920068613887 0.0031972004514196593 +53.86798444535652 0.0032001360218645125 +53.96676820457417 0.0032030689018988623 +54.065551963791826 0.0032059990989063525 +54.16433572300948 0.0032089266202369134 +54.26311948222713 0.003211851473206982 +54.361903241444786 0.0032147736650997086 +54.46068700066243 0.003217693203165176 +54.559470759880085 0.0032206100946206026 +54.65825451909774 0.0032235243466505552 +54.75703827831539 0.00322643596640715 +54.855822037533045 0.003229344961010267 +54.95460579675069 0.0032322513375477404 +55.053389555968344 0.0032351551030755724 +55.152173315186 0.0032380562646181234 +55.25095707440365 0.003240954829168316 +55.349740833621304 0.003243850803687831 +55.44852459283896 0.003246744195107299 +55.547308352056604 0.003249635010326498 +55.64609211127426 0.0032525232562145437 +55.74487587049191 0.0032554089396100785 +55.84365962970956 0.003258292067321463 +55.94244338892722 0.003261172646126962 +56.04122714814486 0.0032640506827749296 +56.140010907362516 0.0032669261839839976 +56.23879466658017 0.0032697991564432523 +56.33757842579782 0.00327266960681242 +56.436362185015476 0.0032755375417220477 +56.53514594423313 0.0032784029677736803 +56.633929703450775 0.003281265891540036 +56.73271346266843 0.003284126319565188 +56.83149722188608 0.0032869842583647317 +56.930280981103735 0.0032898397144259634 +57.02906474032139 0.003292692694208049 +57.127848499539034 0.003295543204142197 +57.22663225875669 0.0032983912506318247 +57.32541601797434 0.003301236840052729 +57.424199777191994 0.0033040799787532513 +57.52298353640965 0.0033069206730544426 +57.6217672956273 0.0033097589292502257 +57.72055105484495 0.0033125947536075642 +57.8193348140626 0.0033154281523666163 +57.91811857328025 0.0033182591317409 +58.01690233249791 0.0033210876979174503 +58.11568609171556 0.0033239138570569766 +58.214469850933206 0.0033267376152940203 +58.31325361015086 0.0033295589787371094 +58.41203736936851 0.003332377953468913 +58.510821128586166 0.003335194545546394 +58.60960488780382 0.003338008761000962 +58.70838864702147 0.003340820605838621 +58.80717240623912 0.0033436300860401245 +58.90595616545677 0.003346437207561117 +59.004739924674425 0.003349241976332287 +59.10352368389208 0.0033520443982595093 +59.20230744310973 0.003354844479223995 +59.301091202327385 0.0033576422250824276 +59.39987496154503 0.0033604376416671135 +59.498658720762684 0.0033632307347861204 +59.59744247998034 0.003366021510223419 +59.69622623919799 0.003368809973739021 +59.795009998415644 0.00337159613106912 +59.89379375763329 0.0033743799879262294 +59.99257751685094 0.003377161549999315 +60.0913612760686 0.0033799408229539364 +60.19014503528625 0.003382717812432378 +60.2889287945039 0.0033854925240537816 +60.387712553721556 0.0033882649634142843 +60.4864963129392 0.0033910351360871447 +60.585280072156856 0.0033938030476228756 +60.68406383137451 0.003396568703549374 +60.78284759059216 0.0033993321093720497 +60.881631349809815 0.003402093270573955 +60.98041510902746 0.0034048521926159066 +61.079198868245115 0.003407608880936617 +61.17798262746277 0.0034103633409528172 +61.27676638668042 0.0034131155780593803 +61.375550145898075 0.0034158655976294465 +61.47433390511573 0.003418613405014544 +61.573117664333374 0.00342135900554471 +61.67190142355103 0.0034241024045286155 +61.77068518276868 0.003426843607253679 +61.869468941986334 0.003429582618986188 +61.96825270120399 0.0034323194449714205 +62.06703646042163 0.0034350540904337554 +62.165820219639286 0.003437786560576796 +62.26460397885694 0.003440516860583478 +62.36338773807459 0.0034432449956161917 +62.462171497292246 0.003445970970816891 +62.5609552565099 0.0034486947913072072 +62.659739015727546 0.003451416462188563 +62.7585227749452 0.003454135988542283 +62.85730653416285 0.0034568533754297036 +62.956090293380505 0.0034595686278922825 +63.05487405259816 0.003462281750951711 +63.15365781181581 0.0034649927496100195 +63.25244157103346 0.003467701628849685 +63.35122533025111 0.0034704083936337405 +63.450009089468765 0.003473113048905877 +63.54879284868642 0.0034758155995905527 +63.64757660790407 0.003478516050593096 +63.74636036712172 0.003481214406799809 +63.84514412633937 0.003483910673078072 +63.943927885557024 0.003486604854276444 +64.04271164477468 0.003489296955224766 +64.14149540399234 0.0034919869807342606 +64.24027916320999 0.0034946749355976355 +64.33906292242763 0.0034973608245891775 +64.43784668164528 0.003500044652464858 +64.53663044086294 0.003502726423962426 +64.63541420008059 0.0035054061438015084 +64.73419795929824 0.0035080838166837063 +64.8329817185159 0.0035107594472926907 +64.93176547773355 0.003513433040294298 +65.0305492369512 0.0035161046003366276 +65.12933299616886 0.003518774132050131 +65.22811675538651 0.00352144164004771 +65.32690051460416 0.0035241071289248095 +65.42568427382182 0.003526770603259507 +65.52446803303947 0.0035294320676126038 +65.62325179225712 0.0035320915265277223 +65.72203555147476 0.00353474898453139 +65.82081931069241 0.003537404446133132 +65.91960306991007 0.00354005791582556 +66.01838682912772 0.0035427093980844606 +66.11717058834537 0.003545358897368886 +66.21595434756303 0.003548006418121236 +66.31473810678068 0.003550651964767349 +66.41352186599833 0.0035532955417165897 +66.51230562521599 0.0035559371533619307 +66.61108938443364 0.00355857680408004 +66.7098731436513 0.003561214498231364 +66.80865690286893 0.003563850240160215 +66.90744066208659 0.003566484034194851 +67.00622442130424 0.0035691158846475604 +67.10500818052189 0.0035717457958147434 +67.20379193973955 0.0035743737719769954 +67.3025756989572 0.0035769998173991856 +67.40135945817485 0.0035796239363305423 +67.5001432173925 0.0035822461330047273 +67.59892697661016 0.0035848664116399204 +67.69771073582781 0.003587484776438897 +67.79649449504547 0.0035901012315891034 +67.8952782542631 0.003592715781262742 +67.99406201348076 0.003595328429616842 +68.09284577269841 0.0035979391807933418 +68.19162953191606 0.0036005480389191616 +68.29041329113372 0.0036031550081062824 +68.38919705035137 0.003605760092451817 +68.48798080956902 0.0036083632960380936 +68.58676456878668 0.003610964622932722 +68.68554832800433 0.003613564077188671 +68.78433208722198 0.0036161616628443438 +68.88311584643964 0.0036187573839236483 +68.98189960565728 0.003621351244436071 +69.08068336487493 0.0036239432483767507 +69.17946712409258 0.003626533399726548 +69.27825088331024 0.003629121702452117 +69.37703464252789 0.0036317081605059774 +69.47581840174554 0.003634292777826584 +69.5746021609632 0.0036368755583383967 +69.67338592018085 0.003639456505951951 +69.7721696793985 0.0036420356245639254 +69.87095343861616 0.0036446129180572107 +69.96973719783381 0.0036471883903009803 +70.06852095705145 0.0036497620451507533 +70.1673047162691 0.0036523338864484674 +70.26608847548675 0.003654903918022542 +70.36487223470441 0.0036574721436879436 +70.46365599392206 0.003660038567246258 +70.56243975313971 0.003662603192485748 +70.66122351235737 0.003665166023181426 +70.76000727157502 0.003667727063095114 +70.85879103079267 0.003670286315975508 +70.95757479001033 0.003672843785558246 +71.05635854922798 0.0036753994755659666 +71.15514230844562 0.003677953389708377 +71.25392606766327 0.003680505531682312 +71.35270982688093 0.0036830559051717984 +71.45149358609858 0.0036856045138481163 +71.55027734531623 0.003688151361369862 +71.64906110453389 0.003690696451383008 +71.74784486375154 0.003693239787520962 +71.84662862296919 0.0036957813734046336 +71.94541238218684 0.003698321212642487 +72.0441961414045 0.0037008593088306064 +72.14297990062215 0.003703395665552752 +72.24176365983979 0.0037059302863804203 +72.34054741905744 0.0037084631748729047 +72.4393311782751 0.003710994334577349 +72.53811493749275 0.0037135237690288105 +72.6368986967104 0.003716051481750313 +72.73568245592806 0.003718577476252909 +72.83446621514571 0.0037211017560357324 +72.93324997436336 0.0037236243245860573 +73.03203373358102 0.0037261451853793518 +73.13081749279867 0.0037286643418793387 +73.22960125201632 0.003731181797538046 +73.32838501123398 0.0037336975557958627 +73.42716877045162 0.0037362116200815977 +73.52595252966927 0.003738723993812529 +73.62473628888692 0.0037412346803944647 +73.72352004810458 0.0037437436832217863 +73.82230380732223 0.0037462510056775135 +73.92108756653988 0.0037487566511333515 +74.01987132575753 0.0037512606229497436 +74.11865508497519 0.003753762924475926 +74.21743884419284 0.0037562635590499788 +74.3162226034105 0.0037587625299988787 +74.41500636262815 0.00376125984063855 +74.51379012184579 0.003763755494273915 +74.61257388106344 0.0037662494941989497 +74.7113576402811 0.003768741843696726 +74.81014139949875 0.0037712325460394717 +74.9089251587164 0.003773721604488613 +75.00770891793405 0.003776209022294829 +75.1064926771517 0.0037786948026980994 +75.20527643636936 0.003781178948927753 +75.30406019558701 0.003783661464202518 +75.40284395480467 0.003786142351730571 +75.50162771402232 0.0037886216147095847 +75.60041147323996 0.003791099256326773 +75.69919523245761 0.003793575279758947 +75.79797899167527 0.003796049688172552 +75.89676275089292 0.003798522484723723 +75.99554651011057 0.0038009936725583275 +76.09433026932822 0.0038034632548120144 +76.19311402854588 0.0038059312346102572 +76.29189778776353 0.003808397615068405 +76.39068154698118 0.0038108623992917233 +76.48946530619884 0.003813325590375444 +76.58824906541649 0.0038157871914048075 +76.68703282463413 0.0038182472054551077 +76.78581658385178 0.0038207056355917418 +76.88460034306944 0.0038231624848702487 +76.98338410228709 0.003825617756336356 +77.08216786150474 0.0038280714530260235 +77.1809516207224 0.003830523577965489 +77.27973537994005 0.003832974134171308 +77.3785191391577 0.003835423124650401 +77.47730289837536 0.0038378705524000937 +77.57608665759301 0.003840316420408162 +77.67487041681066 0.003842760731652872 +77.7736541760283 0.0038452034891030243 +77.87243793524596 0.0038476446957179957 +77.97122169446361 0.0038500843544477807 +78.07000545368126 0.0038525224682330332 +78.16878921289891 0.0038549590400051075 +78.26757297211657 0.0038573940726861003 +78.36635673133422 0.00385982756918889 +78.46514049055187 0.0038622595324171796 +78.56392424976953 0.003864689965265536 +78.66270800898718 0.0038671188706194287 +78.76149176820483 0.0038695462513552727 +78.86027552742247 0.003871972110340466 +78.95905928664013 0.0038743964504334297 +79.05784304585778 0.0038768192744836473 +79.15662680507543 0.0038792405853317054 +79.25541056429309 0.003881660385809329 +79.35419432351074 0.003884078678739423 +79.4529780827284 0.0038864954669361115 +79.55176184194605 0.0038889107532047713 +79.6505456011637 0.003891324540342075 +79.74932936038135 0.0038937368311360255 +79.848113119599 0.0038961476283659955 +79.94689687881664 0.0038985569348027648 +80.0456806380343 0.0039009647532085557 +80.14446439725195 0.0039033710863370704 +80.2432481564696 0.003905775936933531 +80.34203191568726 0.0039081793077347105 +80.44081567490491 0.003910581201468973 +80.53959943412256 0.003912981620856309 +80.63838319334022 0.0039153805686083735 +80.73716695255787 0.003917778047428515 +80.83595071177552 0.003920174060011819 +80.93473447099318 0.003922568609045138 +81.03351823021082 0.003924961697207128 +81.13230198942847 0.003927353327168287 +81.23108574864612 0.003929743501590985 +81.32986950786378 0.003932132223129498 +81.42865326708143 0.003934519494430049 +81.52743702629908 0.003936905318130834 +81.62622078551674 0.003939289696862062 +81.72500454473439 0.003941672633245988 +81.82378830395204 0.003944054129896941 +81.9225720631697 0.003946434189421366 +82.02135582238735 0.003948812814417851 +82.120139581605 0.003951190007477164 +82.21892334082264 0.003953565771182281 +82.3177071000403 0.003955940108108426 +82.41649085925795 0.003958313020823096 +82.5152746184756 0.003960684511886098 +82.61405837769325 0.00396305458384958 +82.71284213691091 0.0039654232392580665 +82.81162589612856 0.003967790480648479 +82.91040965534621 0.0039701563105501835 +83.00919341456387 0.003972520731485011 +83.10797717378152 0.003974883745967291 +83.20676093299917 0.003977245356503885 +83.30554469221681 0.003979605565594218 +83.40432845143447 0.003981964375730304 +83.50311221065212 0.003984321789396784 +83.60189596986977 0.003986677809070949 +83.70067972908743 0.003989032437222779 +83.79946348830508 0.003991385676314964 +83.89824724752273 0.0039937375288029405 +83.99703100674039 0.0039960879971349195 +84.09581476595804 0.0039984370837519165 +84.19459852517569 0.00400078479108778 +84.29338228439335 0.004003131121569221 +84.39216604361098 0.0040054760776158434 +84.49094980282864 0.004007819661640174 +84.58973356204629 0.004010161876047689 +84.68851732126394 0.004012502723236842 +84.7873010804816 0.004014842205599098 +84.88608483969925 0.004017180325518957 +84.9848685989169 0.0040195170853739816 +85.08365235813456 0.0040218524875348305 +85.18243611735221 0.004024186534365282 +85.28121987656986 0.004026519228222265 +85.38000363578752 0.0040288505714558805 +85.47878739500516 0.00403118056640944 +85.57757115422281 0.004033509215419482 +85.67635491344046 0.004035836520815808 +85.77513867265812 0.004038162484921503 +85.87392243187577 0.004040487110052965 +85.97270619109342 0.004042810398519935 +86.07148995031108 0.00404513235262552 +86.17027370952873 0.00404745297466622 +86.26905746874638 0.004049772266931956 +86.36784122796404 0.004052090231706094 +86.46662498718169 0.004054406871265476 +86.56540874639933 0.004056722187880439 +86.66419250561698 0.00405903618381485 +86.76297626483463 0.00406134886132612 +86.86176002405229 0.004063660222665243 +86.96054378326994 0.00406597027007681 +87.0593275424876 0.004068279005799043 +87.15811130170525 0.004070586432063813 +87.2568950609229 0.004072892551096673 +87.35567882014055 0.004075197365116875 +87.45446257935821 0.0040775008763374015 +87.55324633857586 0.004079803086964986 +87.6520300977935 0.004082103999200141 +87.75081385701115 0.00408440361523718 +87.8495976162288 0.004086701937264242 +87.94838137544646 0.004088998967463316 +88.04716513466411 0.004091294708010267 +88.14594889388177 0.00409358916107486 +88.24473265309942 0.00409588232882078 +88.34351641231707 0.004098174213405659 +88.44230017153473 0.004100464816981101 +88.54108393075238 0.0041027541416927 +88.63986768997003 0.004105042189680073 +88.73865144918767 0.00410732896307687 +88.83743520840532 0.0041096144640108126 +88.93621896762298 0.004111898694603703 +89.03500272684063 0.004114181656971456 +89.13378648605828 0.004116463353224117 +89.23257024527594 0.004118743785465892 +89.33135400449359 0.0041210229557951585 +89.43013776371124 0.004123300866304498 +89.5289215229289 0.004125577519080713 +89.62770528214655 0.004127852916204856 +89.7264890413642 0.004130127059752241 +89.82527280058186 0.004132399951792475 +89.9240565597995 0.0041346715943894755 +90.02284031901715 0.0041369419896014935 +90.1216240782348 0.004139211139481135 +90.22040783745246 0.004141479046075385 +90.31919159667011 0.004143745711425622 +90.41797535588776 0.00414601113756765 +90.51675911510542 0.004148275326531708 +90.61554287432307 0.004150538280342504 +90.71432663354072 0.004152800001019224 +90.81311039275838 0.004155060490575561 +90.91189415197603 0.004157319751019734 +91.01067791119367 0.004159577784354505 +91.10946167041132 0.0041618345925772075 +91.20824542962897 0.004164090177679759 +91.30702918884663 0.004166344541648687 +91.40581294806428 0.004168597686465146 +91.50459670728193 0.0041708496141049396 +91.60338046649959 0.004173100326538541 +91.70216422571724 0.004175349825731114 +91.8009479849349 0.004177598113642526 +91.89973174415255 0.004179845192227381 +91.9985155033702 0.004182091063435026 +92.09729926258784 0.00418433572920958 +92.19608302180549 0.004186579191489947 +92.29486678102315 0.004188821452209843 +92.3936505402408 0.004191062513297808 +92.49243429945845 0.004193302376677229 +92.5912180586761 0.004195541044266359 +92.69000181789376 0.004197778517978338 +92.78878557711141 0.004200014799721206 +92.88756933632907 0.004202249891397932 +92.98635309554672 0.004204483794906419 +93.08513685476437 0.004206716512139538 +93.18392061398201 0.004208948044985135 +93.28270437319966 0.004211178395326058 +93.38148813241732 0.004213407565040167 +93.48027189163497 0.00421563555600036 +93.57905565085262 0.0042178623700745875 +93.67783941007028 0.004220088009125873 +93.77662316928793 0.004222312475012329 +93.87540692850558 0.004224535769587173 +93.97419068772324 0.004226757894698755 +94.07297444694089 0.0042289788521905625 +94.17175820615854 0.004231198643901249 +94.27054196537618 0.0042334172716646445 +94.36932572459384 0.0042356347373097795 +94.46810948381149 0.004237851042660896 +94.56689324302914 0.004240066189537469 +94.6656770022468 0.0042422801797542264 +94.76446076146445 0.004244493015121159 +94.8632445206821 0.004246704697443544 +94.96202827989976 0.004248915228521961 +95.06081203911741 0.004251124610152305 +95.15959579833506 0.004253332844125809 +95.25837955755271 0.004255539932229058 +95.35716331677035 0.004257745876244007 +95.455947075988 0.004259950677947998 +95.55473083520566 0.004262154339113773 +95.65351459442331 0.004264356861509497 +95.75229835364097 0.004266558246898767 +95.85108211285862 0.004268758497040637 +95.94986587207627 0.004270957613689627 +96.04864963129393 0.004273155598595744 +96.14743339051158 0.004275352453504496 +96.24621714972923 0.0042775481801569076 +96.34500090894689 0.004279742780289538 +96.44378466816453 0.004281936255634497 +96.54256842738218 0.004284128607919461 +96.64135218659983 0.004286319838867685 +96.74013594581749 0.004288509950198023 +96.83891970503514 0.004290698943624944 +96.93770346425279 0.004292886820858543 +97.03648722347044 0.004295073583604561 +97.1352709826881 0.004297259233564398 +97.23405474190575 0.0042994437724351315 +97.3328385011234 0.004301627201909529 +97.43162226034106 0.0043038095236760604 +97.5304060195587 0.004305990739418922 +97.62918977877635 0.004308170850818044 +97.727973537994 0.00431034985954911 +97.82675729721166 0.004312527767283567 +97.92554105642931 0.004314704575688646 +98.02432481564696 0.004316880286427375 +98.12310857486462 0.004319054901158592 +98.22189233408227 0.004321228421536961 +98.32067609329992 0.004323400849212986 +98.41945985251758 0.004325572185833029 +98.51824361173523 0.004327742433039319 +98.61702737095288 0.004329911592469971 +98.71581113017052 0.004332079665758998 +98.81459488938818 0.004334246654536328 +98.91337864860583 0.004336412560427815 +99.01216240782348 0.004338577385055252 +99.11094616704113 0.0043407411300363935 +99.20972992625879 0.00434290379698496 +99.30851368547644 0.004345065387510658 +99.4072974446941 0.004347225903219189 +99.50608120391175 0.004349385345712272 +99.6048649631294 0.0043515437165876445 +99.70364872234705 0.004353701017439091 +99.8024324815647 0.004355857249856442 +99.90121624078235 0.0043580124154256016 +100.0 0.00436016651572855 diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/plotGraph b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/plotGraph new file mode 100755 index 00000000000..4df5a7c3c84 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/plotGraph @@ -0,0 +1,25 @@ +createGraphs() +{ + OF=$1 + EXPT=$2 + + gnuplot<<EOF + set terminal postscript default + set output "OF_vs_Exact.eps" + set xlabel "t [sec]" + set ylabel "x [mm]" + set grid + + + plot \ + "$EXPT" u 1:2 title "Exact", \ + "$OF" u 1:2 title "OpenFOAM" with line lt -1 lw 1 +EOF +} + +sed -e 's/[()]//g' "postProcessing/interfaceHeight1/1.36/position.dat" > "positionClean.dat" + +OF="positionClean.dat" +EXPT="data.dat" + +createGraphs $OF $EXPT diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict new file mode 100755 index 00000000000..ae1a229613f --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.001; + +vertices +( + (0 0 -0.0) + (10 0 -0.0) + (10 0.2 -0.0) + (0 0.2 -0.0) + (0 0 0.02) + (10 0 0.02) + (10 0.2 0.02) + (0 0.2 0.02) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (400 2 1) + simpleGrading (1 1 1) +); + +patches +( + /* wall sideWalls + ( + (1 5 4 0) + (3 7 6 2) + )*/ + wall faceWall + ( + (0 4 7 3) + ) + + patch outlet + ( + (2 6 5 1) + ) + empty frontAndBack + ( + (0 3 2 1) + (4 5 6 7) + (1 5 4 0) + (3 7 6 2) + + ) +); + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict new file mode 100755 index 00000000000..28ec10d7217 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application icoReactingMultiphaseInterFoam; + +startFrom startTime; + +startTime 1.36; + +stopAt endTime; + +endTime 40; + +deltaT 1e-5; + +writeControl adjustableRunTime; + +writeInterval 4; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 12; + +writeCompression off; + +timeFormat general; + +timePrecision 10; + +runTimeModifiable yes; + +adjustTimeStep yes; + +maxCo 0.01; +maxAlphaCo 0.01; +maxAlphaDdt 0.01; + +functions +{ + interfaceHeight1 + { + type interfaceHeight; + libs ("libfieldFunctionObjects.so"); + alpha alpha.liquid; + locations ((0 0 0)); + direction (1 0 0); + writeControl timeStep; + writeInterval 3; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes new file mode 100755 index 00000000000..124059f30d4 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes @@ -0,0 +1,66 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + div(rhoPhi,U) Gauss linearUpwind grad(U); + "div\(phi,alpha.*\)" Gauss vanLeer; + "div\(phir,alpha.*\)" Gauss linear; + + "div\(phi,.*\.gas.*\)" Gauss vanLeer; + + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; + + div(phi,T) Gauss vanLeer; + + div(rhoPhi,epsilon) Gauss upwind; + div(rhoPhi,k) Gauss upwind; +} + +laplacianSchemes +{ + default Gauss linear uncorrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default uncorrected; +} + + +fluxRequired +{ + default no; + p_rgh; + "alpha.*"; +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution new file mode 100755 index 00000000000..b28aad30b3b --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution @@ -0,0 +1,111 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + "alpha.*" + { + nAlphaCorr 1; + nAlphaSubCycles 1; + cAlphas ((liquid and gas) 0.1); + + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-8; + relTol 0; + } + + rho + { + solver diagonal; + tolerance 1e-7; + relTol 0.1; + } + + rhoFinal + { + $rho; + tolerance 1e-7; + relTol 0; + } + + p_rgh + { + solver PCG; + preconditioner DIC; + tolerance 1e-9; + relTol 0.001; + smoother DIC; + } + + mDotSmearFinal + { + solver PCG; + tolerance 1e-6; + preconditioner DIC; + relTol 0.00; + smoother DIC; + } + + p_rghFinal + { + $p_rgh; + tolerance 1e-9; + relTol 0; + minIter 10; + } + + pcorrFinal + { + $p_rgh; + tolerance 1e-9; + relTol 0; + } + + + "(U|h|T.*|k|epsilon|R)" + { + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-8; + relTol 0.01; + } + + "(U|h|T.*|k|epsilon|R)Final" + { + $U; + tolerance 1e-8; + relTol 0; + } +} + +PIMPLE +{ + momentumPredictor yes; + nCorrectors 4; + nOuterCorrectors 1; + nNonOrthogonalCorrectors 0; +} + +relaxationFactors +{ + equations + { + ".*" 1; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict new file mode 100755 index 00000000000..9c5ecfe7e82 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict @@ -0,0 +1,23 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system/fluid"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +field "alpha.gas"; +type plane; +origin (0.503e-3 0 0); +direction (1 0 0); + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas new file mode 100755 index 00000000000..9c5ecfe7e82 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas @@ -0,0 +1,23 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system/fluid"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +field "alpha.gas"; +type plane; +origin (0.503e-3 0 0); +direction (1 0 0); + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid new file mode 100755 index 00000000000..d8f07547ed0 --- /dev/null +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid @@ -0,0 +1,23 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system/fluid"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +field "alpha.liquid"; +type plane; +origin (0.503e-3 0 0); +direction (-1 0 0); + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T new file mode 100755 index 00000000000..5fac80f7245 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 373.15; + +boundaryField +{ + sideWalls + { + type zeroGradient; + } + + faceWall + { + type fixedValue; + value uniform 378.15; + } + + outlet + { + type zeroGradient; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U new file mode 100755 index 00000000000..cc77ed99d50 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + sideWalls + { + type slip; + value uniform (0 0 0); + } + + faceWall + { + type noSlip; + } + + frontAndBack + { + type empty; + } + + outlet + { + type pressureInletOutletVelocity; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid new file mode 100755 index 00000000000..3141db82d52 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid @@ -0,0 +1,34 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alpha.liquid; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ".*" + { + type zeroGradient; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p new file mode 100755 index 00000000000..94ea98497b8 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + sideWalls + { + type fixedFluxPressure; + } + + faceWall + { + type fixedFluxPressure; + } + + outlet + { + //type fixedValue; + type totalPressure; + rho rho; + p0 uniform 1e5; + value uniform 1e5; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh new file mode 100755 index 00000000000..b35272aaf64 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p_rgh; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + sideWalls + { + type fixedFluxPressure; + } + + faceWall + { + type fixedFluxPressure; + } + + outlet + { + //type fixedValue; + type totalPressure; + rho rho; + p0 uniform 1e5; + value uniform 1e5; + } + + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allclean b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allclean new file mode 100755 index 00000000000..f576c0f68a1 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allclean @@ -0,0 +1,12 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +rm -rf 0 +rm positionClean.dat +rm OF_vs_Exact.eps + +#------------------------------------------------------------------------------ diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun new file mode 100755 index 00000000000..2fbae4635b1 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun @@ -0,0 +1,14 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +restore0Dir +cp -r 0 1.36 +runApplication setAlphaField + +runApplication $(getApplication) + +#------------------------------------------------------------------------------ diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g new file mode 100644 index 00000000000..4930967bdd6 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + location "constant"; + object g; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -2 0 0 0 0]; +value (0 0 0); + + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties new file mode 100755 index 00000000000..04d24b35f73 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties @@ -0,0 +1,33 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object phaseChangeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +phaseChangeTwoPhaseModel constant;//interfaceHeatResistance; + + +R 1e6; +maxAlphaRate 1; +spread 3; + + +coeffC 0; +coeffE 500; + +// interfacePhaseChangeCoeffs +// { +// R_ 1e6; +// } + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties new file mode 100755 index 00000000000..3215af0986c --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +TSat TSat [0 0 0 1 0] 373.15; // saturation temperature + + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties new file mode 100644 index 00000000000..e7f0365ed22 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: v1906 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object transportProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +phases (liquid vapour); // FC-72 + +liquid +{ + transportModel Newtonian; + nu 1e-6; + rho 958.4; + + + Cp 4216; // irrelevant + Cv 4216; // irrelevant + kappa 0.671; // irrelevant + hf 0; +} + +vapour +{ + transportModel Newtonian; + nu 1e-5; // irrelevant + rho 0.581; + + + Cp 2030; // FC72 vapour + Cv 2030; // Cv = Cp - R/w + kappa 0.025; // FC72 vapour // 0.01; + hf 2260.0e3; +} + +sigma 0; + +Prt 0.7; + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties new file mode 100755 index 00000000000..5eec0426726 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/data.dat b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/data.dat new file mode 100644 index 00000000000..b55f154e1eb --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/data.dat @@ -0,0 +1,1001 @@ +t pos +1.3150245415656703 0.0005 +1.4138083007833222 0.0005184398054516621 +1.5125920600009741 0.0005362458985889908 +1.6113758192186263 0.0005534794446321124 +1.7101595784362782 0.0005701923600917754 +1.8089433376539301 0.0005864291597318349 +1.9077270968715823 0.0006022283547463896 +2.006510856089234 0.0006176235286461328 +2.105294615306886 0.0006326441772545272 +2.204078374524538 0.0006473163731057749 +2.30286213374219 0.0006616632971289642 +2.4016458929598423 0.0006757056686489534 +2.500429652177494 0.0006894620965079127 +2.599213411395146 0.0007029493683031827 +2.697997170612798 0.0007161826905717568 +2.79678092983045 0.0007291758897216487 +2.895564689048102 0.0007419415812772021 +2.994348448265754 0.000754491313339572 +3.093132207483406 0.0007668356889071017 +3.1919159667010577 0.0007789844707427657 +3.29069972591871 0.0007909466717390901 +3.389483485136362 0.0008027306331590325 +3.488267244354014 0.0008143440926835894 +3.587051003571666 0.0008257942438437166 +3.6858347627893178 0.0008370877881334626 +3.7846185220069697 0.0008482309808766301 +3.8834022812246216 0.0008592296717384049 +3.9821860404422735 0.0008700893406268371 +4.0809697996599255 0.0008808151296096142 +4.179753558877578 0.0008914118713736983 +4.27853731809523 0.0009018841146747823 +4.377321077312882 0.0009122361471567948 +4.476104836530533 0.0009224720158661888 +4.5748885957481855 0.0009325955457394098 +4.673672354965838 0.0009426103563030404 +4.772456114183489 0.0009525198767933937 +4.871239873401141 0.0009623273598746214 +4.970023632618794 0.0009720358941109204 +5.068807391836446 0.0009816484153284074 +5.167591151054097 0.000991167716985138 +5.266374910271749 0.001000596459653085 +5.365158669489402 0.0010099371797032948 +5.463942428707053 0.0010191922972745634 +5.562726187924705 0.0010283641235965786 +5.661509947142358 0.0010374548677303107 +5.7602937063600095 0.001046466642781352 +5.859077465577661 0.001055401471635714 +5.957861224795312 0.0010642612922621907 +6.056644984012966 0.0010730479626206582 +6.155428743230617 0.001081763265211526 +6.254212502448269 0.0010904089112978945 +6.352996261665922 0.0010989865448287422 +6.451780020883573 0.0011074977460886204 +6.550563780101225 0.0011159440350968013 +6.649347539318876 0.0011243268747765877 +6.74813129853653 0.0011326476739134928 +6.846915057754181 0.0011409077899192392 +6.945698816971833 0.0011491085314169242 +7.044482576189486 0.0011572511606612963 +7.143266335407137 0.0011653368958068197 +7.242050094624789 0.0011733669130350624 +7.34083385384244 0.0011813423485519297 +7.4396176130600935 0.0011892643004643444 +7.538401372277745 0.0011971338305451498 +7.6371851314953965 0.0012049519658942677 +7.73596889071305 0.0012127197005034668 +7.834752649930701 0.0012204379967314912 +7.933536409148353 0.0012281077866957493 +8.032320168366004 0.0012357299735862562 +8.131103927583657 0.001243305432907074 +8.229887686801309 0.001250835013650083 +8.32867144601896 0.0012583195394055362 +8.427455205236612 0.0012657598094135071 +8.526238964454265 0.0012731565995600367 +8.625022723671917 0.0012805106633214862 +8.723806482889568 0.0012878227326603572 +8.822590242107221 0.0012950935188755857 +8.921374001324873 0.0013023237134101122 +9.020157760542524 0.0013095139886183198 +9.118941519760176 0.001316664998495752 +9.217725278977829 0.0013237773793733506 +9.31650903819548 0.0013308517505783027 +9.415292797413132 0.0013378887150634353 +9.514076556630783 0.00134488886000697 +9.612860315848437 0.0013518527573843258 +9.711644075066088 0.0013587809645135458 +9.81042783428374 0.0013656740245758204 +9.909211593501391 0.0013725324671124818 +10.007995352719044 0.0013793568084997563 +10.106779111936696 0.0013861475524024817 +10.205562871154347 0.0013929051902079148 +10.304346630372 0.0013996302014406894 +10.403130389589652 0.0014063230541599117 +10.501914148807304 0.0014129842053393305 +10.600697908024955 0.0014196141012314495 +10.699481667242608 0.0014262131777164077 +10.79826542646026 0.0014327818606363954 +10.897049185677911 0.0014393205661163355 +10.995832944895565 0.001445829700871512 +11.094616704113216 0.001452309662502788 +11.193400463330867 0.0014587608397800236 +11.292184222548519 0.0014651836129142574 +11.390967981766172 0.0014715783538192025 +11.489751740983824 0.0014779454263625538 +11.588535500201475 0.001484285186607597 +11.687319259419128 0.0014905979830455648 +11.78610301863678 0.0014968841568191783 +11.884886777854431 0.001503144041937771 +11.983670537072083 0.0015093779654843835 +12.082454296289736 0.0015155862478151926 +12.181238055507388 0.0015217692027516168 +12.280021814725039 0.0015279271377654263 +12.378805573942692 0.0015340603541571648 +12.477589333160344 0.0015401691472281748 +12.576373092377995 0.0015462538064465097 +12.675156851595647 0.00155231461560699 +12.7739406108133 0.0015583518529856584 +12.872724370030951 0.0015643657914888678 +12.971508129248603 0.0015703566987972349 +13.070291888466254 0.0015763248375046642 +13.169075647683908 0.0015822704652526584 +13.26785940690156 0.0015881938348600967 +13.36664316611921 0.0015940951944486811 +13.465426925336864 0.0015999747875642088 +13.564210684554515 0.0016058328532938578 +13.662994443772167 0.0016116696263796279 +13.761778202989818 0.0016174853373281026 +13.860561962207472 0.0016232802125166696 +13.959345721425123 0.001629054474296339 +14.058129480642775 0.0016348083410912969 +14.156913239860428 0.001640542027495314 +14.25569699907808 0.0016462557443651315 +14.35448075829573 0.0016519496989109415 +14.453264517513382 0.00165762409478407 +14.552048276731036 0.0016632791321619666 +14.650832035948687 0.001668915007830603 +14.749615795166338 0.001674531915264376 +14.848399554383992 0.0016801300447036045 +14.947183313601643 0.001685709583229713 +15.045967072819295 0.0016912707148381808 +15.144750832036946 0.0016968136205093378 +15.2435345912546 0.001702338478277092 +15.342318350472251 0.0017078454632956468 +15.441102109689902 0.0017133347479042964 +15.539885868907554 0.0017188065016903549 +15.638669628125207 0.0017242608915502878 +15.737453387342859 0.00172969808174911 +15.83623714656051 0.001735118233978108 +15.935020905778163 0.001740521507410944 +16.033804664995817 0.0017459080587581988 +16.132588424213466 0.001751278042320402 +16.23137218343112 0.0017566316100396055 +16.330155942648773 0.0017619689115495466 +16.428939701866422 0.0017672900942244459 +16.527723461084076 0.001772595303226489 +16.62650722030173 0.001777884681552031 +16.72529097951938 0.001783158370076568 +16.824074738737032 0.0017884165075985178 +16.92285849795468 0.001793659230881841 +17.021642257172335 0.0017988866746975456 +17.120426016389988 0.0018040989718641136 +17.219209775607638 0.0018092962532868708 +17.31799353482529 0.001814478647996351 +17.41677729404294 0.0018196462831856699 +17.515561053260594 0.0018247992842469498 +17.614344812478247 0.0018299377748068205 +17.713128571695897 0.0018350618767610247 +17.81191233091355 0.001840171710308158 +17.910696090131204 0.0018452673939825658 +18.009479849348853 0.0018503490446864252 +18.108263608566507 0.001855416777721039 +18.20704736778416 0.0018604707068173585 +18.30583112700181 0.0018655109441657633 +18.404614886219463 0.001870537600445122 +18.503398645437112 0.0018755507848511467 +18.602182404654766 0.001880550605124071 +18.70096616387242 0.0018855371675756663 +18.79974992309007 0.0018905105771156172 +18.898533682307722 0.001895470937277272 +18.997317441525375 0.001900418350242793 +19.096101200743025 0.0019053529168677112 +19.194884959960678 0.0019102747367049202 +19.29366871917833 0.0019151839080281063 +19.39245247839598 0.0019200805278546435 +19.491236237613634 0.0019249646919679653 +19.590019996831288 0.0019298364949394242 +19.688803756048937 0.0019346960301496558 +19.78758751526659 0.0019395433898094663 +19.88637127448424 0.001944378664980243 +19.985155033701894 0.0019492019455939166 +20.083938792919547 0.001954013320472475 +20.182722552137196 0.0019588128773470486 +20.28150631135485 0.0019636007028765753 +20.380290070572503 0.0019683768826660557 +20.479073829790153 0.00197314150128441 +20.577857589007806 0.0019778946422819525 +20.67664134822546 0.0019826363882074825 +20.77542510744311 0.0019873668206250115 +20.874208866660762 0.001992086020130136 +20.972992625878412 0.0019967940663660542 +21.071776385096065 0.002001491038039251 +21.17056014431372 0.00200617701293485 +21.269343903531368 0.00201085206793164 +21.36812766274902 0.002015516279016796 +21.466911421966675 0.0020201697213002843 +21.565695181184324 0.002024812469028978 +21.664478940401978 0.0020294445956004765 +21.76326269961963 0.0020340661735766463 +21.86204645883728 0.0020386772746968794 +21.960830218054934 0.00204327796989109 +22.059613977272587 0.0020478683292924405 +22.158397736490237 0.0020524484222498186 +22.25718149570789 0.0020570183173400586 +22.35596525492554 0.0020615780823799233 +22.454749014143193 0.0020661277844378455 +22.553532773360846 0.002070667489845436 +22.652316532578496 0.0020751972642087677 +22.75110029179615 0.0020797171724194403 +22.849884051013802 0.0020842272786654216 +22.948667810231452 0.0020887276464416865 +23.047451569449105 0.002093218338560644 +23.14623532866676 0.0020976994171623686 +23.24501908788441 0.002102170943724629 +23.34380284710206 0.0021066329790727324 +23.442586606319715 0.0021110855833891746 +23.541370365537365 0.0021155288162231136 +23.640154124755018 0.00211996273649966 +23.738937883972667 0.0021243874025289934 +23.83772164319032 0.002128802872015312 +23.936505402407974 0.0021332092020656104 +24.035289161625624 0.0021376064491982977 +24.134072920843277 0.0021419946693516565 +24.23285668006093 0.0021463739178921434 +24.33164043927858 0.002150744249622541 +24.430424198496233 0.0021551057187899586 +24.529207957713886 0.0021594583790936887 +24.627991716931536 0.0021638022836929205 +24.72677547614919 0.0021681374852143154 +24.82555923536684 0.0021724640357594443 +24.924342994584492 0.0021767819869120955 +25.023126753802146 0.0021810913897454473 +25.121910513019795 0.0021853922948291194 +25.22069427223745 0.0021896847522360936 +25.319478031455102 0.002193968811549517 +25.41826179067275 0.0021982445218693835 +25.517045549890405 0.0022025119318191022 +25.615829309108058 0.0022067710895519433 +25.714613068325708 0.0022110220427573823 +25.81339682754336 0.0022152648386673285 +25.912180586761014 0.0022194995240622474 +26.010964345978664 0.0022237261452771784 +26.109748105196317 0.0022279447482076516 +26.208531864413967 0.0022321553783155 +26.30731562363162 0.0022363580806345775 +26.406099382849273 0.0022405528997763765 +26.504883142066923 0.002244739879935554 +26.603666901284576 0.002248919064895365 +26.70245066050223 0.0022530904980330017 +26.80123441971988 0.0022572542223248484 +26.900018178937533 0.002261410280351647 +26.998801938155186 0.002265558714303576 +27.097585697372836 0.002269699565985249 +27.19636945659049 0.002273832876820631 +27.29515321580814 0.002277958687857869 +27.39393697502579 0.0022820770397740517 +27.492720734243445 0.0022861879728798894 +27.591504493461095 0.002290291527124312 +27.690288252678748 0.0022943877420990052 +27.7890720118964 0.0022984766570428618 +27.88785577111405 0.002302558310846369 +27.986639530331704 0.0023066327420559266 +28.085423289549357 0.002310699988878089 +28.184207048767007 0.002314760089183749 +28.28299080798466 0.002318813080512251 +28.381774567202314 0.00232285900007544 +28.480558326419963 0.0023268978847616477 +28.579342085637617 0.002330929771139617 +28.678125844855266 0.0023349546954623645 +28.77690960407292 0.0023389726936709843 +28.875693363290573 0.0023429838013983915 +28.974477122508222 0.0023469880539730096 +29.073260881725876 0.0023509854864224005 +29.17204464094353 0.0023549761334768406 +29.27082840016118 0.0023589600295728383 +29.369612159378832 0.0023629372088566055 +29.468395918596485 0.0023669077051874667 +29.567179677814135 0.0023708715521412287 +29.665963437031788 0.002374828783013486 +29.764747196249438 0.00237877943082289 +29.86353095546709 0.0023827235283143595 +29.962314714684744 0.0023866611079622485 +30.061098473902394 0.0023905922019734657 +30.159882233120047 0.0023945168422905487 +30.2586659923377 0.002398435060594691 +30.35744975155535 0.0024023468883087253 +30.456233510773004 0.0024062523566000665 +30.555017269990657 0.0024101514963836054 +30.653801029208307 0.002414044338324565 +30.75258478842596 0.002417930912841317 +30.851368547643613 0.0024218112501081506 +30.950152306861263 0.002425685380058007 +31.048936066078916 0.0024295533323851768 +31.147719825296566 0.002433415136547949 +31.24650358451422 0.0024372708217712345 +31.345287343731872 0.002441120417049144 +31.444071102949522 0.002444963951147531 +31.542854862167175 0.0024488014526064996 +31.64163862138483 0.00245263294974288 +31.740422380602478 0.002456458470652662 +31.83920613982013 0.0024602780432134035 +31.937989899037785 0.0024640916950865958 +32.036773658255434 0.0024678994537200025 +32.13555741747309 0.0024717013463499684 +32.23434117669074 0.0024754974000036844 +32.333124935908394 0.0024792876415014376 +32.43190869512605 0.0024830720974588147 +32.53069245434369 0.0024868507942888882 +32.62947621356135 0.002490623758204364 +32.728259972779 0.0024943910152197047 +32.82704373199665 0.0024981525911532197 +32.92582749121431 0.0025019085116291333 +33.02461125043196 0.0025056588020796167 +33.123395009649606 0.002509403487746803 +33.22217876886726 0.0025131425936847623 +33.32096252808491 0.0025168761447614645 +33.419746287302566 0.002520604165660703 +33.51853004652021 0.0025243266808840027 +33.617313805737865 0.0025280437147524966 +33.71609756495552 0.002531755291408781 +33.81488132417317 0.0025354614348187428 +33.913665083390825 0.0025391621687733683 +34.01244884260848 0.002542857516890522 +34.111232601826124 0.0025465475026167075 +34.21001636104378 0.0025502321492288003 +34.30880012026143 0.0025539114798357643 +34.407583879479084 0.0025575855173803398 +34.50636763869674 0.002561254284640715 +34.60515139791438 0.0025649178042321695 +34.70393515713204 0.002568576098608708 +34.80271891634969 0.0025722291900646586 +34.90150267556734 0.002575877100736261 +35.000286434785 0.002579519852603233 +35.09907019400265 0.0025831574674903116 +35.197853953220296 0.0025867899670687835 +35.29663771243795 0.0025904173728579873 +35.3954214716556 0.002594039706226802 +35.494205230873256 0.0025976569883951173 +35.59298899009091 0.0026012692404352817 +35.691772749308555 0.0026048764832735357 +35.79055650852621 0.002608478737691427 +35.88934026774386 0.0026120760243272052 +35.988124026961515 0.002615668363677203 +36.08690778617917 0.002619255776097198 +36.18569154539682 0.0026228382818037584 +36.28447530461447 0.002626415900875573 +36.38325906383212 0.0026299886532547634 +36.482042823049774 0.0026335565587481814 +36.58082658226743 0.0026371196370286883 +36.67961034148508 0.0026406779076364227 +36.77839410070273 0.002644231389980051 +36.87717785992038 0.0026477801033380002 +36.97596161913803 0.0026513240668596793 +37.074745378355686 0.0026548632995666848 +37.17352913757334 0.0026583978203539933 +37.27231289679099 0.0026619276479911357 +37.37109665600864 0.0026654528011233617 +37.46988041522629 0.0026689732982727895 +37.568664174443946 0.0026724891578395393 +37.6674479336616 0.0026760003981028567 +37.76623169287925 0.002679507037222221 +37.865015452096905 0.0026830090932384414 +37.96379921131455 0.0026865065840747386 +38.062582970532205 0.0026899995275378166 +38.16136672974986 0.00269348794131892 +38.26015048896751 0.0026969718429948786 +38.358934248185165 0.002700451250029141 +38.45771800740281 0.0027039261797727958 +38.556501766620464 0.002707396649465583 +38.65528552583812 0.0027108626762368877 +38.75406928505577 0.002714324277106731 +38.852853044273424 0.002717781468986742 +38.95163680349108 0.002721234268681124 +39.05042056270872 0.0027246826928876045 +39.149204321926376 0.002728126758198381 +39.24798808114403 0.0027315664811010483 +39.34677184036168 0.0027350018779795236 +39.445555599579336 0.002738432965114954 +39.54433935879698 0.002741859758686617 +39.643123118014636 0.0027452822747728134 +39.74190687723229 0.0027487005293517427 +39.84069063644994 0.002752114538302377 +39.939474395667595 0.0027555243174053217 +40.03825815488525 0.0027589298823436637 +40.137041914102895 0.0027623312487038147 +40.23582567332055 0.0027657284319763456 +40.3346094325382 0.002769121447556805 +40.433393191755854 0.0027725103107465354 +40.53217695097351 0.0027758950367534805 +40.630960710191154 0.002779275640692978 +40.72974446940881 0.002782652137588549 +40.82852822862646 0.0027860245423726756 +40.927311987844114 0.002789392869887574 +41.02609574706177 0.0027927571348859525 +41.12487950627942 0.002796117352031769 +41.223663265497066 0.0027994735359009753 +41.32244702471472 0.002802825700982254 +41.42123078393237 0.002806173861677751 +41.520014543150026 0.0028095180323037938 +41.61879830236768 0.002812858227091607 +41.71758206158533 0.0028161944601880202 +41.81636582080298 0.002819526745656166 +41.91514958002063 0.0028228550974761716 +42.013933339238285 0.0028261795295458437 +42.11271709845594 0.002829500055681343 +42.21150085767359 0.002832816689617858 +42.31028461689124 0.0028361294450102653 +42.40906837610889 0.0028394383354337868 +42.507852135326544 0.0028427433743846366 +42.6066358945442 0.0028460445752806663 +42.70541965376185 0.0028493419514619978 +42.804203412979504 0.0028526355161916537 +42.90298717219715 0.0028559252826561798 +43.001770931414804 0.00285921126396626 +43.10055469063246 0.0028624934731573265 +43.19933844985011 0.002865771923190164 +43.29812220906776 0.002869046626951505 +43.39690596828541 0.002872317597254622 +43.49568972750306 0.0028755848468399125 +43.594473486720716 0.0028788483883754766 +43.69325724593837 0.0028821082344576924 +43.79204100515602 0.002885364397611781 +43.890824764373676 0.002888616890292368 +43.98960852359132 0.002891865724884042 +44.088392282808975 0.0028951109137019026 +44.18717604202663 0.0028983524689921037 +44.28595980124428 0.0029015904029323952 +44.384743560461935 0.0029048247276326567 +44.48352731967958 0.0029080554551354234 +44.582311078897234 0.002911282597416412 +44.68109483811489 0.0029145061663850376 +44.77987859733254 0.0029177261738849254 +44.878662356550194 0.00292094263169442 +44.97744611576785 0.002924155551527087 +45.07622987498549 0.0029273649450322105 +45.17501363420315 0.0029305708237952885 +45.2737973934208 0.002933773199338516 +45.37258115263845 0.002936972083121273 +45.47136491185611 0.0029401674865405995 +45.57014867107376 0.0029433594209316715 +45.668932430291406 0.0029465478975682683 +45.76771618950906 0.0029497329276632384 +45.86649994872671 0.002952914522368959 +45.965283707944366 0.0029560926927777913 +46.06406746716202 0.0029592674499225326 +46.162851226379665 0.0029624388047768627 +46.26163498559732 0.0029656067682557853 +46.36041874481497 0.002968771351216068 +46.459202504032625 0.0029719325644566768 +46.55798626325028 0.002975090418719202 +46.65677002246793 0.002978244924688289 +46.75555378168558 0.0029813960929920584 +46.85433754090323 0.002984543934202522 +46.953121300120884 0.0029876884588359988 +47.05190505933854 0.0029908296773535235 +47.15068881855619 0.002993967600161254 +47.24947257777384 0.002997102237610872 +47.34825633699149 0.0030002335999999826 +47.44704009620914 0.0030033616975725067 +47.5458238554268 0.0030064865405190775 +47.64460761464445 0.0030096081389774194 +47.7433913738621 0.00301272650303274 +47.84217513307975 0.003015841642718105 +47.9409588922974 0.0030189535680148175 +48.039742651515056 0.0030220622888527883 +48.13852641073271 0.003025167815110909 +48.23731016995036 0.0030282701566174157 +48.33609392916801 0.0030313693231502534 +48.43487768838566 0.0030344653244374345 +48.533661447603315 0.0030375581701573948 +48.63244520682097 0.0030406478699393485 +48.73122896603862 0.003043734433363636 +48.830012725256275 0.003046817869962071 +48.92879648447392 0.003049898189218284 +49.027580243691574 0.003052975400568063 +49.12636400290923 0.0030560495133996903 +49.22514776212688 0.003059120537054276 +49.323931521344534 0.00306218848082609 +49.42271528056218 0.0030652533539628915 +49.52149903977983 0.0030683151656662505 +49.620282798997486 0.0030713739250918747 +49.71906655821514 0.0030744296413499246 +49.81785031743279 0.003077482323505333 +49.916634076650446 0.003080531980578118 +50.01541783586809 0.0030835786215436924 +50.114201595085746 0.0030866222553331745 +50.2129853543034 0.0030896628908336932 +50.31176911352105 0.003092700536888687 +50.410552872738705 0.003095735202298208 +50.50933663195636 0.0030987668958192198 +50.608120391174005 0.003101795626165889 +50.70690415039166 0.0031048214020098805 +50.80568790960931 0.0031078442319806437 +50.904471668826965 0.003110864124665703 +51.00325542804462 0.0031138810886109426 +51.102039187262264 0.0031168951323208845 +51.20082294647992 0.003119906264258974 +51.29960670569757 0.0031229144928478494 +51.398390464915224 0.0031259198264696267 +51.49717422413288 0.0031289222734661617 +51.59595798335053 0.0031319218421393294 +51.694741742568176 0.0031349185407512858 +51.79352550178583 0.0031379123775247338 +51.89230926100348 0.0031409033606431902 +51.991093020221136 0.003143891498251243 +52.08987677943879 0.003146876798454811 +52.188660538656436 0.0031498592693214016 +52.28744429787409 0.003152838918880366 +52.38622805709174 0.0031558157551231456 +52.485011816309395 0.0031587897860035304 +52.58379557552705 0.0031617610194378996 +52.6825793347447 0.003164729463305473 +52.78136309396235 0.003167695125448549 +52.88014685318 0.003170658013672754 +52.978930612397654 0.0031736181357472754 +53.07771437161531 0.003176575499405102 +53.17649813083296 0.003179530112343258 +53.27528189005061 0.003182481982223039 +53.37406564926826 0.003185431116670245 +53.472849408485914 0.0031883775232754044 +53.57163316770357 0.003191321209594007 +53.67041692692122 0.0031942621831467298 +53.76920068613887 0.0031972004514196593 +53.86798444535652 0.0032001360218645125 +53.96676820457417 0.0032030689018988623 +54.065551963791826 0.0032059990989063525 +54.16433572300948 0.0032089266202369134 +54.26311948222713 0.003211851473206982 +54.361903241444786 0.0032147736650997086 +54.46068700066243 0.003217693203165176 +54.559470759880085 0.0032206100946206026 +54.65825451909774 0.0032235243466505552 +54.75703827831539 0.00322643596640715 +54.855822037533045 0.003229344961010267 +54.95460579675069 0.0032322513375477404 +55.053389555968344 0.0032351551030755724 +55.152173315186 0.0032380562646181234 +55.25095707440365 0.003240954829168316 +55.349740833621304 0.003243850803687831 +55.44852459283896 0.003246744195107299 +55.547308352056604 0.003249635010326498 +55.64609211127426 0.0032525232562145437 +55.74487587049191 0.0032554089396100785 +55.84365962970956 0.003258292067321463 +55.94244338892722 0.003261172646126962 +56.04122714814486 0.0032640506827749296 +56.140010907362516 0.0032669261839839976 +56.23879466658017 0.0032697991564432523 +56.33757842579782 0.00327266960681242 +56.436362185015476 0.0032755375417220477 +56.53514594423313 0.0032784029677736803 +56.633929703450775 0.003281265891540036 +56.73271346266843 0.003284126319565188 +56.83149722188608 0.0032869842583647317 +56.930280981103735 0.0032898397144259634 +57.02906474032139 0.003292692694208049 +57.127848499539034 0.003295543204142197 +57.22663225875669 0.0032983912506318247 +57.32541601797434 0.003301236840052729 +57.424199777191994 0.0033040799787532513 +57.52298353640965 0.0033069206730544426 +57.6217672956273 0.0033097589292502257 +57.72055105484495 0.0033125947536075642 +57.8193348140626 0.0033154281523666163 +57.91811857328025 0.0033182591317409 +58.01690233249791 0.0033210876979174503 +58.11568609171556 0.0033239138570569766 +58.214469850933206 0.0033267376152940203 +58.31325361015086 0.0033295589787371094 +58.41203736936851 0.003332377953468913 +58.510821128586166 0.003335194545546394 +58.60960488780382 0.003338008761000962 +58.70838864702147 0.003340820605838621 +58.80717240623912 0.0033436300860401245 +58.90595616545677 0.003346437207561117 +59.004739924674425 0.003349241976332287 +59.10352368389208 0.0033520443982595093 +59.20230744310973 0.003354844479223995 +59.301091202327385 0.0033576422250824276 +59.39987496154503 0.0033604376416671135 +59.498658720762684 0.0033632307347861204 +59.59744247998034 0.003366021510223419 +59.69622623919799 0.003368809973739021 +59.795009998415644 0.00337159613106912 +59.89379375763329 0.0033743799879262294 +59.99257751685094 0.003377161549999315 +60.0913612760686 0.0033799408229539364 +60.19014503528625 0.003382717812432378 +60.2889287945039 0.0033854925240537816 +60.387712553721556 0.0033882649634142843 +60.4864963129392 0.0033910351360871447 +60.585280072156856 0.0033938030476228756 +60.68406383137451 0.003396568703549374 +60.78284759059216 0.0033993321093720497 +60.881631349809815 0.003402093270573955 +60.98041510902746 0.0034048521926159066 +61.079198868245115 0.003407608880936617 +61.17798262746277 0.0034103633409528172 +61.27676638668042 0.0034131155780593803 +61.375550145898075 0.0034158655976294465 +61.47433390511573 0.003418613405014544 +61.573117664333374 0.00342135900554471 +61.67190142355103 0.0034241024045286155 +61.77068518276868 0.003426843607253679 +61.869468941986334 0.003429582618986188 +61.96825270120399 0.0034323194449714205 +62.06703646042163 0.0034350540904337554 +62.165820219639286 0.003437786560576796 +62.26460397885694 0.003440516860583478 +62.36338773807459 0.0034432449956161917 +62.462171497292246 0.003445970970816891 +62.5609552565099 0.0034486947913072072 +62.659739015727546 0.003451416462188563 +62.7585227749452 0.003454135988542283 +62.85730653416285 0.0034568533754297036 +62.956090293380505 0.0034595686278922825 +63.05487405259816 0.003462281750951711 +63.15365781181581 0.0034649927496100195 +63.25244157103346 0.003467701628849685 +63.35122533025111 0.0034704083936337405 +63.450009089468765 0.003473113048905877 +63.54879284868642 0.0034758155995905527 +63.64757660790407 0.003478516050593096 +63.74636036712172 0.003481214406799809 +63.84514412633937 0.003483910673078072 +63.943927885557024 0.003486604854276444 +64.04271164477468 0.003489296955224766 +64.14149540399234 0.0034919869807342606 +64.24027916320999 0.0034946749355976355 +64.33906292242763 0.0034973608245891775 +64.43784668164528 0.003500044652464858 +64.53663044086294 0.003502726423962426 +64.63541420008059 0.0035054061438015084 +64.73419795929824 0.0035080838166837063 +64.8329817185159 0.0035107594472926907 +64.93176547773355 0.003513433040294298 +65.0305492369512 0.0035161046003366276 +65.12933299616886 0.003518774132050131 +65.22811675538651 0.00352144164004771 +65.32690051460416 0.0035241071289248095 +65.42568427382182 0.003526770603259507 +65.52446803303947 0.0035294320676126038 +65.62325179225712 0.0035320915265277223 +65.72203555147476 0.00353474898453139 +65.82081931069241 0.003537404446133132 +65.91960306991007 0.00354005791582556 +66.01838682912772 0.0035427093980844606 +66.11717058834537 0.003545358897368886 +66.21595434756303 0.003548006418121236 +66.31473810678068 0.003550651964767349 +66.41352186599833 0.0035532955417165897 +66.51230562521599 0.0035559371533619307 +66.61108938443364 0.00355857680408004 +66.7098731436513 0.003561214498231364 +66.80865690286893 0.003563850240160215 +66.90744066208659 0.003566484034194851 +67.00622442130424 0.0035691158846475604 +67.10500818052189 0.0035717457958147434 +67.20379193973955 0.0035743737719769954 +67.3025756989572 0.0035769998173991856 +67.40135945817485 0.0035796239363305423 +67.5001432173925 0.0035822461330047273 +67.59892697661016 0.0035848664116399204 +67.69771073582781 0.003587484776438897 +67.79649449504547 0.0035901012315891034 +67.8952782542631 0.003592715781262742 +67.99406201348076 0.003595328429616842 +68.09284577269841 0.0035979391807933418 +68.19162953191606 0.0036005480389191616 +68.29041329113372 0.0036031550081062824 +68.38919705035137 0.003605760092451817 +68.48798080956902 0.0036083632960380936 +68.58676456878668 0.003610964622932722 +68.68554832800433 0.003613564077188671 +68.78433208722198 0.0036161616628443438 +68.88311584643964 0.0036187573839236483 +68.98189960565728 0.003621351244436071 +69.08068336487493 0.0036239432483767507 +69.17946712409258 0.003626533399726548 +69.27825088331024 0.003629121702452117 +69.37703464252789 0.0036317081605059774 +69.47581840174554 0.003634292777826584 +69.5746021609632 0.0036368755583383967 +69.67338592018085 0.003639456505951951 +69.7721696793985 0.0036420356245639254 +69.87095343861616 0.0036446129180572107 +69.96973719783381 0.0036471883903009803 +70.06852095705145 0.0036497620451507533 +70.1673047162691 0.0036523338864484674 +70.26608847548675 0.003654903918022542 +70.36487223470441 0.0036574721436879436 +70.46365599392206 0.003660038567246258 +70.56243975313971 0.003662603192485748 +70.66122351235737 0.003665166023181426 +70.76000727157502 0.003667727063095114 +70.85879103079267 0.003670286315975508 +70.95757479001033 0.003672843785558246 +71.05635854922798 0.0036753994755659666 +71.15514230844562 0.003677953389708377 +71.25392606766327 0.003680505531682312 +71.35270982688093 0.0036830559051717984 +71.45149358609858 0.0036856045138481163 +71.55027734531623 0.003688151361369862 +71.64906110453389 0.003690696451383008 +71.74784486375154 0.003693239787520962 +71.84662862296919 0.0036957813734046336 +71.94541238218684 0.003698321212642487 +72.0441961414045 0.0037008593088306064 +72.14297990062215 0.003703395665552752 +72.24176365983979 0.0037059302863804203 +72.34054741905744 0.0037084631748729047 +72.4393311782751 0.003710994334577349 +72.53811493749275 0.0037135237690288105 +72.6368986967104 0.003716051481750313 +72.73568245592806 0.003718577476252909 +72.83446621514571 0.0037211017560357324 +72.93324997436336 0.0037236243245860573 +73.03203373358102 0.0037261451853793518 +73.13081749279867 0.0037286643418793387 +73.22960125201632 0.003731181797538046 +73.32838501123398 0.0037336975557958627 +73.42716877045162 0.0037362116200815977 +73.52595252966927 0.003738723993812529 +73.62473628888692 0.0037412346803944647 +73.72352004810458 0.0037437436832217863 +73.82230380732223 0.0037462510056775135 +73.92108756653988 0.0037487566511333515 +74.01987132575753 0.0037512606229497436 +74.11865508497519 0.003753762924475926 +74.21743884419284 0.0037562635590499788 +74.3162226034105 0.0037587625299988787 +74.41500636262815 0.00376125984063855 +74.51379012184579 0.003763755494273915 +74.61257388106344 0.0037662494941989497 +74.7113576402811 0.003768741843696726 +74.81014139949875 0.0037712325460394717 +74.9089251587164 0.003773721604488613 +75.00770891793405 0.003776209022294829 +75.1064926771517 0.0037786948026980994 +75.20527643636936 0.003781178948927753 +75.30406019558701 0.003783661464202518 +75.40284395480467 0.003786142351730571 +75.50162771402232 0.0037886216147095847 +75.60041147323996 0.003791099256326773 +75.69919523245761 0.003793575279758947 +75.79797899167527 0.003796049688172552 +75.89676275089292 0.003798522484723723 +75.99554651011057 0.0038009936725583275 +76.09433026932822 0.0038034632548120144 +76.19311402854588 0.0038059312346102572 +76.29189778776353 0.003808397615068405 +76.39068154698118 0.0038108623992917233 +76.48946530619884 0.003813325590375444 +76.58824906541649 0.0038157871914048075 +76.68703282463413 0.0038182472054551077 +76.78581658385178 0.0038207056355917418 +76.88460034306944 0.0038231624848702487 +76.98338410228709 0.003825617756336356 +77.08216786150474 0.0038280714530260235 +77.1809516207224 0.003830523577965489 +77.27973537994005 0.003832974134171308 +77.3785191391577 0.003835423124650401 +77.47730289837536 0.0038378705524000937 +77.57608665759301 0.003840316420408162 +77.67487041681066 0.003842760731652872 +77.7736541760283 0.0038452034891030243 +77.87243793524596 0.0038476446957179957 +77.97122169446361 0.0038500843544477807 +78.07000545368126 0.0038525224682330332 +78.16878921289891 0.0038549590400051075 +78.26757297211657 0.0038573940726861003 +78.36635673133422 0.00385982756918889 +78.46514049055187 0.0038622595324171796 +78.56392424976953 0.003864689965265536 +78.66270800898718 0.0038671188706194287 +78.76149176820483 0.0038695462513552727 +78.86027552742247 0.003871972110340466 +78.95905928664013 0.0038743964504334297 +79.05784304585778 0.0038768192744836473 +79.15662680507543 0.0038792405853317054 +79.25541056429309 0.003881660385809329 +79.35419432351074 0.003884078678739423 +79.4529780827284 0.0038864954669361115 +79.55176184194605 0.0038889107532047713 +79.6505456011637 0.003891324540342075 +79.74932936038135 0.0038937368311360255 +79.848113119599 0.0038961476283659955 +79.94689687881664 0.0038985569348027648 +80.0456806380343 0.0039009647532085557 +80.14446439725195 0.0039033710863370704 +80.2432481564696 0.003905775936933531 +80.34203191568726 0.0039081793077347105 +80.44081567490491 0.003910581201468973 +80.53959943412256 0.003912981620856309 +80.63838319334022 0.0039153805686083735 +80.73716695255787 0.003917778047428515 +80.83595071177552 0.003920174060011819 +80.93473447099318 0.003922568609045138 +81.03351823021082 0.003924961697207128 +81.13230198942847 0.003927353327168287 +81.23108574864612 0.003929743501590985 +81.32986950786378 0.003932132223129498 +81.42865326708143 0.003934519494430049 +81.52743702629908 0.003936905318130834 +81.62622078551674 0.003939289696862062 +81.72500454473439 0.003941672633245988 +81.82378830395204 0.003944054129896941 +81.9225720631697 0.003946434189421366 +82.02135582238735 0.003948812814417851 +82.120139581605 0.003951190007477164 +82.21892334082264 0.003953565771182281 +82.3177071000403 0.003955940108108426 +82.41649085925795 0.003958313020823096 +82.5152746184756 0.003960684511886098 +82.61405837769325 0.00396305458384958 +82.71284213691091 0.0039654232392580665 +82.81162589612856 0.003967790480648479 +82.91040965534621 0.0039701563105501835 +83.00919341456387 0.003972520731485011 +83.10797717378152 0.003974883745967291 +83.20676093299917 0.003977245356503885 +83.30554469221681 0.003979605565594218 +83.40432845143447 0.003981964375730304 +83.50311221065212 0.003984321789396784 +83.60189596986977 0.003986677809070949 +83.70067972908743 0.003989032437222779 +83.79946348830508 0.003991385676314964 +83.89824724752273 0.0039937375288029405 +83.99703100674039 0.0039960879971349195 +84.09581476595804 0.0039984370837519165 +84.19459852517569 0.00400078479108778 +84.29338228439335 0.004003131121569221 +84.39216604361098 0.0040054760776158434 +84.49094980282864 0.004007819661640174 +84.58973356204629 0.004010161876047689 +84.68851732126394 0.004012502723236842 +84.7873010804816 0.004014842205599098 +84.88608483969925 0.004017180325518957 +84.9848685989169 0.0040195170853739816 +85.08365235813456 0.0040218524875348305 +85.18243611735221 0.004024186534365282 +85.28121987656986 0.004026519228222265 +85.38000363578752 0.0040288505714558805 +85.47878739500516 0.00403118056640944 +85.57757115422281 0.004033509215419482 +85.67635491344046 0.004035836520815808 +85.77513867265812 0.004038162484921503 +85.87392243187577 0.004040487110052965 +85.97270619109342 0.004042810398519935 +86.07148995031108 0.00404513235262552 +86.17027370952873 0.00404745297466622 +86.26905746874638 0.004049772266931956 +86.36784122796404 0.004052090231706094 +86.46662498718169 0.004054406871265476 +86.56540874639933 0.004056722187880439 +86.66419250561698 0.00405903618381485 +86.76297626483463 0.00406134886132612 +86.86176002405229 0.004063660222665243 +86.96054378326994 0.00406597027007681 +87.0593275424876 0.004068279005799043 +87.15811130170525 0.004070586432063813 +87.2568950609229 0.004072892551096673 +87.35567882014055 0.004075197365116875 +87.45446257935821 0.0040775008763374015 +87.55324633857586 0.004079803086964986 +87.6520300977935 0.004082103999200141 +87.75081385701115 0.00408440361523718 +87.8495976162288 0.004086701937264242 +87.94838137544646 0.004088998967463316 +88.04716513466411 0.004091294708010267 +88.14594889388177 0.00409358916107486 +88.24473265309942 0.00409588232882078 +88.34351641231707 0.004098174213405659 +88.44230017153473 0.004100464816981101 +88.54108393075238 0.0041027541416927 +88.63986768997003 0.004105042189680073 +88.73865144918767 0.00410732896307687 +88.83743520840532 0.0041096144640108126 +88.93621896762298 0.004111898694603703 +89.03500272684063 0.004114181656971456 +89.13378648605828 0.004116463353224117 +89.23257024527594 0.004118743785465892 +89.33135400449359 0.0041210229557951585 +89.43013776371124 0.004123300866304498 +89.5289215229289 0.004125577519080713 +89.62770528214655 0.004127852916204856 +89.7264890413642 0.004130127059752241 +89.82527280058186 0.004132399951792475 +89.9240565597995 0.0041346715943894755 +90.02284031901715 0.0041369419896014935 +90.1216240782348 0.004139211139481135 +90.22040783745246 0.004141479046075385 +90.31919159667011 0.004143745711425622 +90.41797535588776 0.00414601113756765 +90.51675911510542 0.004148275326531708 +90.61554287432307 0.004150538280342504 +90.71432663354072 0.004152800001019224 +90.81311039275838 0.004155060490575561 +90.91189415197603 0.004157319751019734 +91.01067791119367 0.004159577784354505 +91.10946167041132 0.0041618345925772075 +91.20824542962897 0.004164090177679759 +91.30702918884663 0.004166344541648687 +91.40581294806428 0.004168597686465146 +91.50459670728193 0.0041708496141049396 +91.60338046649959 0.004173100326538541 +91.70216422571724 0.004175349825731114 +91.8009479849349 0.004177598113642526 +91.89973174415255 0.004179845192227381 +91.9985155033702 0.004182091063435026 +92.09729926258784 0.00418433572920958 +92.19608302180549 0.004186579191489947 +92.29486678102315 0.004188821452209843 +92.3936505402408 0.004191062513297808 +92.49243429945845 0.004193302376677229 +92.5912180586761 0.004195541044266359 +92.69000181789376 0.004197778517978338 +92.78878557711141 0.004200014799721206 +92.88756933632907 0.004202249891397932 +92.98635309554672 0.004204483794906419 +93.08513685476437 0.004206716512139538 +93.18392061398201 0.004208948044985135 +93.28270437319966 0.004211178395326058 +93.38148813241732 0.004213407565040167 +93.48027189163497 0.00421563555600036 +93.57905565085262 0.0042178623700745875 +93.67783941007028 0.004220088009125873 +93.77662316928793 0.004222312475012329 +93.87540692850558 0.004224535769587173 +93.97419068772324 0.004226757894698755 +94.07297444694089 0.0042289788521905625 +94.17175820615854 0.004231198643901249 +94.27054196537618 0.0042334172716646445 +94.36932572459384 0.0042356347373097795 +94.46810948381149 0.004237851042660896 +94.56689324302914 0.004240066189537469 +94.6656770022468 0.0042422801797542264 +94.76446076146445 0.004244493015121159 +94.8632445206821 0.004246704697443544 +94.96202827989976 0.004248915228521961 +95.06081203911741 0.004251124610152305 +95.15959579833506 0.004253332844125809 +95.25837955755271 0.004255539932229058 +95.35716331677035 0.004257745876244007 +95.455947075988 0.004259950677947998 +95.55473083520566 0.004262154339113773 +95.65351459442331 0.004264356861509497 +95.75229835364097 0.004266558246898767 +95.85108211285862 0.004268758497040637 +95.94986587207627 0.004270957613689627 +96.04864963129393 0.004273155598595744 +96.14743339051158 0.004275352453504496 +96.24621714972923 0.0042775481801569076 +96.34500090894689 0.004279742780289538 +96.44378466816453 0.004281936255634497 +96.54256842738218 0.004284128607919461 +96.64135218659983 0.004286319838867685 +96.74013594581749 0.004288509950198023 +96.83891970503514 0.004290698943624944 +96.93770346425279 0.004292886820858543 +97.03648722347044 0.004295073583604561 +97.1352709826881 0.004297259233564398 +97.23405474190575 0.0042994437724351315 +97.3328385011234 0.004301627201909529 +97.43162226034106 0.0043038095236760604 +97.5304060195587 0.004305990739418922 +97.62918977877635 0.004308170850818044 +97.727973537994 0.00431034985954911 +97.82675729721166 0.004312527767283567 +97.92554105642931 0.004314704575688646 +98.02432481564696 0.004316880286427375 +98.12310857486462 0.004319054901158592 +98.22189233408227 0.004321228421536961 +98.32067609329992 0.004323400849212986 +98.41945985251758 0.004325572185833029 +98.51824361173523 0.004327742433039319 +98.61702737095288 0.004329911592469971 +98.71581113017052 0.004332079665758998 +98.81459488938818 0.004334246654536328 +98.91337864860583 0.004336412560427815 +99.01216240782348 0.004338577385055252 +99.11094616704113 0.0043407411300363935 +99.20972992625879 0.00434290379698496 +99.30851368547644 0.004345065387510658 +99.4072974446941 0.004347225903219189 +99.50608120391175 0.004349385345712272 +99.6048649631294 0.0043515437165876445 +99.70364872234705 0.004353701017439091 +99.8024324815647 0.004355857249856442 +99.90121624078235 0.0043580124154256016 +100.0 0.00436016651572855 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/plotGraph b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/plotGraph new file mode 100755 index 00000000000..4df5a7c3c84 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/plotGraph @@ -0,0 +1,25 @@ +createGraphs() +{ + OF=$1 + EXPT=$2 + + gnuplot<<EOF + set terminal postscript default + set output "OF_vs_Exact.eps" + set xlabel "t [sec]" + set ylabel "x [mm]" + set grid + + + plot \ + "$EXPT" u 1:2 title "Exact", \ + "$OF" u 1:2 title "OpenFOAM" with line lt -1 lw 1 +EOF +} + +sed -e 's/[()]//g' "postProcessing/interfaceHeight1/1.36/position.dat" > "positionClean.dat" + +OF="positionClean.dat" +EXPT="data.dat" + +createGraphs $OF $EXPT diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict new file mode 100755 index 00000000000..ae1a229613f --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.001; + +vertices +( + (0 0 -0.0) + (10 0 -0.0) + (10 0.2 -0.0) + (0 0.2 -0.0) + (0 0 0.02) + (10 0 0.02) + (10 0.2 0.02) + (0 0.2 0.02) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (400 2 1) + simpleGrading (1 1 1) +); + +patches +( + /* wall sideWalls + ( + (1 5 4 0) + (3 7 6 2) + )*/ + wall faceWall + ( + (0 4 7 3) + ) + + patch outlet + ( + (2 6 5 1) + ) + empty frontAndBack + ( + (0 3 2 1) + (4 5 6 7) + (1 5 4 0) + (3 7 6 2) + + ) +); + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict new file mode 100755 index 00000000000..8f295e54578 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application interCondensatingEvaporatingFoam; + +startFrom startTime; + +startTime 1.36; + +stopAt endTime; + +endTime 5; + +deltaT 1e-5; + +writeControl adjustableRunTime; + +writeInterval 0.5; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 12; + +writeCompression off; + +timeFormat general; + +timePrecision 10; + +runTimeModifiable yes; + +adjustTimeStep yes; + +maxCo 0.01; +maxAlphaCo 0.01; +maxDeltaT 0.01; + +functions +{ + interfaceHeight1 + { + type interfaceHeight; + libs ("libfieldFunctionObjects.so"); + alpha alpha.liquid; + locations ((0 0 0)); + direction (1 0 0); + writeControl timeStep; + writeInterval 3; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes new file mode 100755 index 00000000000..c8762d515b8 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes @@ -0,0 +1,58 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + div(phi,alpha) Gauss vanLeer; + div(phirb,alpha) Gauss linear; + div(rhoPhi,U) Gauss vanLeerV; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; + div(rhoCpPhi,T) Gauss vanLeer; + + div((interpolate(cp)*rhoPhi),T) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear uncorrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default uncorrected; +} + +fluxRequired +{ + p_rgh; +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution new file mode 100755 index 00000000000..693896016b2 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution @@ -0,0 +1,118 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + alpha.liquid + { + nAlphaCorr 2; + nAlphaSubCycles 2; + cAlpha 1; + + MULESCorr no; + nLimiterIter 5; + + //solver smoothSolver; + //smoother symGaussSeidel; + //tolerance 1e-8; + //relTol 0; + } + + rho + { + solver diagonal; + tolerance 1e-7; + relTol 0.1; + } + + rhoFinal + { + $rho; + tolerance 1e-7; + relTol 0; + } + + p_rgh + { + //solver GAMG; + tolerance 1e-9; + solver PCG; + preconditioner DIC; + relTol 0.001; + smoother DIC; + } + + mDotSmearFinal + { + solver PCG; + tolerance 1e-6; + preconditioner DIC; + relTol 0.00; + smoother DIC; + } + + p_rghFinal + { + $p_rgh; + tolerance 1e-9; + relTol 0; + minIter 10; + } + + pcorrFinal + { + $p_rgh; + tolerance 1e-9; + relTol 0; + } + + + "(U|h|T.*|k|epsilon|R)" + { + solver smoothSolver; //PBiCGStab; + smoother symGaussSeidel; + //preconditioner DILU; + tolerance 1e-7; + relTol 0.; + minIter 15; + maxIter 50; + } + + "(U|h|T.*|k|epsilon|R)Final" + { + $U; + tolerance 1e-7; + relTol 0; + maxIter 50; + } +} + +PIMPLE +{ + momentumPredictor yes; + nCorrectors 4; + nNonOrthogonalCorrectors 0; +} + +relaxationFactors +{ + equations + { + ".*" 1; + } +} + +// ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict new file mode 100755 index 00000000000..d8f07547ed0 --- /dev/null +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict @@ -0,0 +1,23 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: plus | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system/fluid"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +field "alpha.liquid"; +type plane; +origin (0.503e-3 0 0); +direction (-1 0 0); + +// ************************************************************************* // -- GitLab From 4abb2153a1bca42a842b8293c8ac440bfd25a589 Mon Sep 17 00:00:00 2001 From: sergio <s.ferraris@opencfd.co.uk> Date: Tue, 4 Feb 2020 16:42:32 -0800 Subject: [PATCH 2/4] STY: Updating headers for tutorial --- .../stefanProblem/0.orig/T | 4 ++-- .../stefanProblem/0.orig/U | 4 ++-- .../stefanProblem/0.orig/alpha.gas | 4 ++-- .../stefanProblem/0.orig/alpha.liquid | 4 ++-- .../stefanProblem/0.orig/p | 4 ++-- .../stefanProblem/0.orig/p_rgh | 4 ++-- .../stefanProblem/Allrun | 4 +++- .../stefanProblem/constant/g | 4 ++-- .../stefanProblem/constant/phaseProperties | 4 ++-- .../constant/thermophysicalProperties.gas | 4 ++-- .../constant/thermophysicalProperties.liquid | 4 ++-- .../stefanProblem/constant/transportProperties | 4 ++-- .../stefanProblem/constant/turbulenceProperties | 4 ++-- .../stefanProblem/system/blockMeshDict | 9 ++------- .../stefanProblem/system/controlDict | 8 ++++---- .../stefanProblem/system/fvSchemes | 4 ++-- .../stefanProblem/system/fvSolution | 4 ++-- .../stefanProblem/system/setAlphaFieldDict | 4 ++-- .../stefanProblem/system/setAlphaFieldDict.gas | 4 ++-- .../stefanProblem/system/setAlphaFieldDict.liquid | 4 ++-- .../stefanProblem/0.orig/T | 4 ++-- .../stefanProblem/0.orig/U | 4 ++-- .../stefanProblem/0.orig/alpha.liquid | 4 ++-- .../stefanProblem/0.orig/p | 4 ++-- .../stefanProblem/0.orig/p_rgh | 4 ++-- .../stefanProblem/Allrun | 2 ++ .../stefanProblem/constant/g | 4 ++-- .../stefanProblem/constant/phaseChangeProperties | 11 +++-------- .../constant/thermophysicalProperties | 4 ++-- .../stefanProblem/constant/transportProperties | 14 +++++++------- .../stefanProblem/constant/turbulenceProperties | 4 ++-- .../stefanProblem/system/blockMeshDict | 4 ++-- .../stefanProblem/system/controlDict | 8 ++++---- .../stefanProblem/system/fvSchemes | 4 ++-- .../stefanProblem/system/fvSolution | 12 +++--------- .../stefanProblem/system/setAlphaFieldDict | 4 ++-- 36 files changed, 84 insertions(+), 96 deletions(-) diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T index 552d6f52a7a..758e9c0726e 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/T @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U index cc77ed99d50..53f8be99d75 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/U @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas index e6181c6e812..4e623feb424 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.gas @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid index c1a88243e90..9908be1fb51 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/alpha.liquid @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p index 94ea98497b8..0adf79043dd 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh index b35272aaf64..bf2fa5be7b6 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/0.orig/p_rgh @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun index c7cdbed219d..ecd1f144026 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/Allrun @@ -14,6 +14,8 @@ rm log.setAlphaField cp system/setAlphaFieldDict.gas system/setAlphaFieldDict runApplication setAlphaField -#runApplication $(getApplication) +runApplication $(getApplication) + +./plotGraph #------------------------------------------------------------------------------ diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g index 4930967bdd6..2fe7d8e4dc0 100644 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/g @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties index 92421df57cf..3bed958d7b2 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/phaseProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas index a17a753b7dd..3ee69e62048 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.gas @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid index 544aaa6c8b8..d293d9e1599 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/thermophysicalProperties.liquid @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties index e7f0365ed22..85f51d78b5e 100644 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/transportProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties index 5eec0426726..e35639d9fc9 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/constant/turbulenceProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict index ae1a229613f..d5aa76dd21f 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/blockMeshDict @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -36,11 +36,6 @@ blocks patches ( - /* wall sideWalls - ( - (1 5 4 0) - (3 7 6 2) - )*/ wall faceWall ( (0 4 7 3) diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict index 28ec10d7217..b42e535d9ec 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/controlDict @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -23,13 +23,13 @@ startTime 1.36; stopAt endTime; -endTime 40; +endTime 50; deltaT 1e-5; writeControl adjustableRunTime; -writeInterval 4; +writeInterval 5; purgeWrite 0; diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes index 124059f30d4..fa1829244d5 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSchemes @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution index b28aad30b3b..8c5cf3c07b0 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/fvSolution @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict index 9c5ecfe7e82..af8a43ae308 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas index 9c5ecfe7e82..af8a43ae308 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.gas @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid index d8f07547ed0..b368552a9ed 100755 --- a/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid +++ b/tutorials/verificationAndValidation/icoReactingMultiphaseInterFoam/stefanProblem/system/setAlphaFieldDict.liquid @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T index 5fac80f7245..6c77adb7392 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U index cc77ed99d50..53f8be99d75 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid index 3141db82d52..529bfd1ba9c 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p index 94ea98497b8..0adf79043dd 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh index b35272aaf64..bf2fa5be7b6 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun index 2fbae4635b1..bf837174641 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/Allrun @@ -11,4 +11,6 @@ runApplication setAlphaField runApplication $(getApplication) +./plotGraph + #------------------------------------------------------------------------------ diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g index 4930967bdd6..2fe7d8e4dc0 100644 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/g @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties index 04d24b35f73..e7c5a75ed2a 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -14,7 +14,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -phaseChangeTwoPhaseModel constant;//interfaceHeatResistance; +phaseChangeTwoPhaseModel interfaceHeatResistance;//constant; R 1e6; @@ -25,9 +25,4 @@ spread 3; coeffC 0; coeffE 500; -// interfacePhaseChangeCoeffs -// { -// R_ 1e6; -// } - // ************************************************************************* // diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties index 3215af0986c..17fb3a459c9 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties index e7f0365ed22..d85110937c1 100644 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/transportProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v1906 | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -23,22 +23,22 @@ liquid rho 958.4; - Cp 4216; // irrelevant - Cv 4216; // irrelevant - kappa 0.671; // irrelevant + Cp 4216; + Cv 4216; + kappa 0.671; hf 0; } vapour { transportModel Newtonian; - nu 1e-5; // irrelevant + nu 1e-5; rho 0.581; Cp 2030; // FC72 vapour Cv 2030; // Cv = Cp - R/w - kappa 0.025; // FC72 vapour // 0.01; + kappa 0.025; hf 2260.0e3; } diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties index 5eec0426726..e35639d9fc9 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict index ae1a229613f..15e86f6629d 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict index 8f295e54578..fe8f60ad27f 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -23,13 +23,13 @@ startTime 1.36; stopAt endTime; -endTime 5; +endTime 50; deltaT 1e-5; writeControl adjustableRunTime; -writeInterval 0.5; +writeInterval 5; purgeWrite 0; diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes index c8762d515b8..fba9626cc6d 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution index 693896016b2..eb3c45e5a77 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -24,11 +24,6 @@ solvers MULESCorr no; nLimiterIter 5; - - //solver smoothSolver; - //smoother symGaussSeidel; - //tolerance 1e-8; - //relTol 0; } rho @@ -82,9 +77,8 @@ solvers "(U|h|T.*|k|epsilon|R)" { - solver smoothSolver; //PBiCGStab; + solver smoothSolver; smoother symGaussSeidel; - //preconditioner DILU; tolerance 1e-7; relTol 0.; minIter 15; diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict index d8f07547ed0..b368552a9ed 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: plus | -| \\ / A nd | Web: www.OpenFOAM.com | +| \\ / O peration | Version: v1912 | +| \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile -- GitLab From 31eb7c61b563c489725205e1d89536a07f4645a2 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Tue, 18 Feb 2020 12:32:16 +0000 Subject: [PATCH 3/4] ENH: interfaceHeight: avoid tracking to corner point --- .../stefanProblem/system/controlDict | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict index fe8f60ad27f..35f952a4b84 100755 --- a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict +++ b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict @@ -58,7 +58,7 @@ functions type interfaceHeight; libs ("libfieldFunctionObjects.so"); alpha alpha.liquid; - locations ((0 0 0)); + locations ((0 0.0001 1e-5)); direction (1 0 0); writeControl timeStep; writeInterval 3; -- GitLab From 1319144a72effede439d56186363ac75b2b62b27 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Tue, 18 Feb 2020 12:33:53 +0000 Subject: [PATCH 4/4] STYLE: stefanProblem: cleanup. --- .../interCondensatingEvaporatingFoam/stefanProblem/0.orig/T | 0 .../interCondensatingEvaporatingFoam/stefanProblem/0.orig/U | 0 .../stefanProblem/0.orig/alpha.liquid | 0 .../interCondensatingEvaporatingFoam/stefanProblem/0.orig/p | 0 .../interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh | 0 .../stefanProblem/constant/phaseChangeProperties | 0 .../stefanProblem/constant/thermophysicalProperties | 0 .../stefanProblem/constant/turbulenceProperties | 0 .../stefanProblem/system/blockMeshDict | 0 .../stefanProblem/system/controlDict | 0 .../stefanProblem/system/fvSchemes | 0 .../stefanProblem/system/fvSolution | 0 .../stefanProblem/system/setAlphaFieldDict | 0 13 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution mode change 100755 => 100644 tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/T old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/U old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/alpha.liquid old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/0.orig/p_rgh old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/phaseChangeProperties old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/thermophysicalProperties old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/constant/turbulenceProperties old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/blockMeshDict old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/controlDict old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSchemes old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/fvSolution old mode 100755 new mode 100644 diff --git a/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict b/tutorials/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem/system/setAlphaFieldDict old mode 100755 new mode 100644 -- GitLab