From 223ec55954221a0e8e6aacfeea5bb89db05d7523 Mon Sep 17 00:00:00 2001 From: Gabriel Gerlero Date: Mon, 7 Aug 2023 17:27:00 -0300 Subject: [PATCH] Handle saturated theta values --- .../BrooksAndCorey/BrooksAndCorey.C | 9 ++++--- libraries/unsaturatedFlowModels/LETd/LETd.C | 2 +- libraries/unsaturatedFlowModels/LETxs/LETxs.C | 2 +- .../VanGenuchten/VanGenuchten.C | 8 +++--- tests/test_exhaustible/0/theta | 2 +- tests/test_parallelization/serial/0/theta | 2 +- tests/test_validity/base/0/theta | 2 +- .../validity/base/0/theta | 2 +- .../dispersionTest/0/Utheta | 19 +++----------- .../dispersionTest/0/ampholyte.TARTRAZINE | 21 ++++++---------- .../dispersionTest/0/theta | 25 +++++-------------- 11 files changed, 31 insertions(+), 63 deletions(-) diff --git a/libraries/unsaturatedFlowModels/BrooksAndCorey/BrooksAndCorey.C b/libraries/unsaturatedFlowModels/BrooksAndCorey/BrooksAndCorey.C index 7bbf831..be59157 100644 --- a/libraries/unsaturatedFlowModels/BrooksAndCorey/BrooksAndCorey.C +++ b/libraries/unsaturatedFlowModels/BrooksAndCorey/BrooksAndCorey.C @@ -51,7 +51,9 @@ Foam::Pmt::unsaturatedFlowModels::BrooksAndCorey::BrooksAndCorey Foam::tmp Foam::Pmt::unsaturatedFlowModels::BrooksAndCorey::C(const phaseFractionField& frac) { - volScalarField p{-pc0_*pow(frac.eff(), -alpha_)}; + auto eff = min(frac.eff(), 1 - 1e-7); + + volScalarField p{-pc0_*pow(eff, -alpha_)}; return -neg(p + pc0_)*(frac.max() - frac.min())/(alpha_*p*pow(-p/pc0_, 1/alpha_)); } @@ -59,8 +61,7 @@ Foam::Pmt::unsaturatedFlowModels::BrooksAndCorey::C(const phaseFractionField& fr Foam::tmp Foam::Pmt::unsaturatedFlowModels::BrooksAndCorey::M(const phaseFractionField& frac) { - volScalarField eff{frac.eff()}; + auto eff = min(frac.eff(), 1 - 1e-7); - return medium_.K()/phase_.mu()*pow(eff, n_ + l_ - 1) - + neg0(1 - eff)*dimensionedScalar{dimArea/dimDynamicViscosity, One}; + return medium_.K()/phase_.mu()*pow(eff, n_ + l_ - 1); } diff --git a/libraries/unsaturatedFlowModels/LETd/LETd.C b/libraries/unsaturatedFlowModels/LETd/LETd.C index df4f07e..d8fc7c7 100644 --- a/libraries/unsaturatedFlowModels/LETd/LETd.C +++ b/libraries/unsaturatedFlowModels/LETd/LETd.C @@ -45,7 +45,7 @@ Foam::Pmt::unsaturatedFlowModels::LETd::LETd Foam::tmp Foam::Pmt::unsaturatedFlowModels::LETd::D(const phaseFractionField& frac) { - volScalarField Swp{frac.eff()}; + volScalarField Swp{min(frac.eff(), 1 - 1e-7)}; return Dwt_*pow(Swp, L_)/(pow(Swp, L_) + E_*pow(1 - Swp, T_)); } diff --git a/libraries/unsaturatedFlowModels/LETxs/LETxs.C b/libraries/unsaturatedFlowModels/LETxs/LETxs.C index 1961427..d41d0bf 100644 --- a/libraries/unsaturatedFlowModels/LETxs/LETxs.C +++ b/libraries/unsaturatedFlowModels/LETxs/LETxs.C @@ -54,7 +54,7 @@ Foam::Pmt::unsaturatedFlowModels::LETxs::LETxs Foam::tmp Foam::Pmt::unsaturatedFlowModels::LETxs::D(const phaseFractionField& frac) { - volScalarField Swp{frac.eff()}; + volScalarField Swp{min(frac.eff(), 1 - 1e-7)}; auto Swir = frac.min()/frac.max(); return diff --git a/libraries/unsaturatedFlowModels/VanGenuchten/VanGenuchten.C b/libraries/unsaturatedFlowModels/VanGenuchten/VanGenuchten.C index e389ec0..148caf3 100644 --- a/libraries/unsaturatedFlowModels/VanGenuchten/VanGenuchten.C +++ b/libraries/unsaturatedFlowModels/VanGenuchten/VanGenuchten.C @@ -62,7 +62,7 @@ Foam::Pmt::unsaturatedFlowModels::VanGenuchten::VanGenuchten Foam::tmp Foam::Pmt::unsaturatedFlowModels::VanGenuchten::C(const phaseFractionField& frac) { - volScalarField Se{frac.eff()}; + volScalarField Se{min(frac.eff(), 1 - 1e-7)}; return 1/pc0_*m_/(1 - m_)*(frac.max() - frac.min())*pow(Se, 1/m_)*pow((1 - pow(Se, 1/m_)), m_); } @@ -70,9 +70,7 @@ Foam::Pmt::unsaturatedFlowModels::VanGenuchten::C(const phaseFractionField& frac Foam::tmp Foam::Pmt::unsaturatedFlowModels::VanGenuchten::M(const phaseFractionField& frac) { - volScalarField Se{frac.eff()}; + volScalarField Se{min(frac.eff(), 1 - 1e-7)}; - return - pos(1 - Se)*medium_.K()/phase_.mu()*pow(Se, l_)*pow(1 - pow(1 - pow(Se, 1/m_), m_), 2) - + neg0(1 - Se)*dimensionedScalar{dimArea/dimDynamicViscosity, One}; + return medium_.K()/phase_.mu()*pow(Se, l_)*pow(1 - pow(1 - pow(Se, 1/m_), m_), 2); } diff --git a/tests/test_exhaustible/0/theta b/tests/test_exhaustible/0/theta index ccc3cd4..bd0d112 100644 --- a/tests/test_exhaustible/0/theta +++ b/tests/test_exhaustible/0/theta @@ -16,7 +16,7 @@ boundaryField left { type exhaustible; - value uniform 0.6999999; //= 0.7 - 1e-7 + value uniform 0.7; remaining 2e-8; } right diff --git a/tests/test_parallelization/serial/0/theta b/tests/test_parallelization/serial/0/theta index 0ad26a7..6ee46c1 100644 --- a/tests/test_parallelization/serial/0/theta +++ b/tests/test_parallelization/serial/0/theta @@ -16,7 +16,7 @@ boundaryField left { type fixedValue; - value uniform 0.6999999; //= 0.7 - 1e-7 + value uniform 0.7; } right { diff --git a/tests/test_validity/base/0/theta b/tests/test_validity/base/0/theta index 0ad26a7..6ee46c1 100644 --- a/tests/test_validity/base/0/theta +++ b/tests/test_validity/base/0/theta @@ -16,7 +16,7 @@ boundaryField left { type fixedValue; - value uniform 0.6999999; //= 0.7 - 1e-7 + value uniform 0.7; } right { diff --git a/tutorials/moistureDiffusivityFoam/validity/base/0/theta b/tutorials/moistureDiffusivityFoam/validity/base/0/theta index 0ad26a7..6ee46c1 100644 --- a/tutorials/moistureDiffusivityFoam/validity/base/0/theta +++ b/tutorials/moistureDiffusivityFoam/validity/base/0/theta @@ -16,7 +16,7 @@ boundaryField left { type fixedValue; - value uniform 0.6999999; //= 0.7 - 1e-7 + value uniform 0.7; } right { diff --git a/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/Utheta b/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/Utheta index 9b4646c..a89b7dc 100644 --- a/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/Utheta +++ b/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/Utheta @@ -1,10 +1,3 @@ -/*--------------------------------*- C++ -*----------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | Website: https://openfoam.org - \\ / A nd | Version: 7 - \\/ M anipulation | -\*---------------------------------------------------------------------------*/ FoamFile { version 2.0; @@ -13,7 +6,6 @@ FoamFile location "0"; object Utheta; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 1 -1 0 0 0 0]; @@ -31,21 +23,18 @@ boundaryField } inletU { - type zeroGradient; + type zeroGradient; } inletD { - type zeroGradient; + type zeroGradient; } outletD { - type zeroGradient; + type zeroGradient; } outletU { - type zeroGradient; + type zeroGradient; } } - - -// ************************************************************************* // diff --git a/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/ampholyte.TARTRAZINE b/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/ampholyte.TARTRAZINE index c5f06e4..9af1d03 100644 --- a/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/ampholyte.TARTRAZINE +++ b/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/ampholyte.TARTRAZINE @@ -1,18 +1,11 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \ / O peration | Version: v3.0+ | -| \ / A nd | Web: www.OpenFOAM.com | -| \/ M anipulation | | -\*---------------------------------------------------------------------------*/ - FoamFile{ +FoamFile +{ version 2.0; format ascii; class volScalarField; location "0"; object ampholyte.TARTRAZINE; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 -3 0 0 1 0 0]; @@ -30,7 +23,7 @@ boundaryField } inletU { - type fixedValue; + type fixedValue; value uniform 0.0; } inletD @@ -40,12 +33,12 @@ boundaryField } outletD { - type inletOutlet; - inletValue uniform 0.0; + type inletOutlet; + inletValue uniform 0.0; } outletU { - type inletOutlet; - inletValue uniform 0.0; + type inletOutlet; + inletValue uniform 0.0; } } diff --git a/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/theta b/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/theta index 1ac1f01..d094e62 100644 --- a/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/theta +++ b/tutorials/moistureDiffusivityTransportFoam/dispersionTest/0/theta @@ -1,20 +1,11 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 2112 | -| \\ / A nd | Website: www.openfoam.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; - arch "LSB;label=32;scalar=64"; class volScalarField; location "0"; object theta; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 0 0 0 0]; @@ -32,24 +23,20 @@ boundaryField } inletU { - type fixedValue; - value uniform 0.6999999; + type fixedValue; + value uniform 0.7; } inletD { - type fixedValue; - value uniform 0.6999999; + type fixedValue; + value uniform 0.7; } outletD { - type zeroGradient; + type zeroGradient; } outletU { - type zeroGradient; + type zeroGradient; } } - - - -// ************************************************************************* //