diff --git a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp index df5b11d80a6..c99e0f24c34 100644 --- a/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/BrooksCoreyStone2RelativePermeability.hpp @@ -137,7 +137,19 @@ class BrooksCoreyStone2RelativePermeability : public RelativePermeabilityBase static constexpr char const * volFracScaleString() { return "volFracScale"; } }; - arrayView1d< real64 const > getPhaseMinVolumeFraction() const override { return m_phaseMinVolumeFraction; }; + real64 getWettingPhaseMinVolumeFraction() const override + { + integer ipWetting; + std::tie( ipWetting, std::ignore ) = phaseIndex( getPhaseOrder()); + return m_phaseMinVolumeFraction[ipWetting]; + } + + real64 getNonWettingMinVolumeFraction() const override + { + integer ipNonWetting; + std::tie( std::ignore, ipNonWetting ) = phaseIndex( getPhaseOrder()); + return m_phaseMinVolumeFraction[ipNonWetting]; + }; protected: diff --git a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.cpp b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.cpp index 810b22ade82..66419e23fc4 100644 --- a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.cpp +++ b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeability.cpp @@ -202,16 +202,13 @@ void TableRelativePermeability::initializePreSubGroups() phaseRelPermMinEndPoint, phaseRelPermMaxEndPoint ); - - - if( ip == 0 ) // wetting phase is water + if( ip == 0 ) // wetting phase is water { m_phaseMinVolumeFraction[m_phaseOrder[PhaseType::WATER]] = phaseMinVolFrac; } else if( ip == 1 ) // intermediate phase is oil { m_phaseMinVolumeFraction[m_phaseOrder[PhaseType::OIL]] = phaseMinVolFrac; - m_waterOilMaxRelPerm = phaseRelPermEndPoint; } } for( integer ip = 0; ip < m_nonWettingIntermediateRelPermTableNames.size(); ++ip ) diff --git a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp index d29806d34e6..17b00775268 100644 --- a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp +++ b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.cpp @@ -51,55 +51,44 @@ TableRelativePermeabilityHysteresis::TableRelativePermeabilityHysteresis( std::s string( viewKeyStruct::drainageNonWettingIntermediateRelPermTableNamesString() ) + " to specify the table names" ); - << << <<< HEAD - registerWrapper( viewKeyStruct::drainageWettingIntermediateRelPermTableNamesString(), - &m_drainageWettingIntermediateRelPermTableNames ). - ======= - registerWrapper( viewKeyStruct::drainageWettingIntermediateRelPermTableNamesString(), &m_drainageWettingIntermediateRelPermTableNames ). - setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). - >> >> >>> origin/develop - setInputFlag( InputFlags::OPTIONAL ). - setDescription( "List of drainage relative permeability tables for the pair (wetting phase, intermediate phase)\n" - "The expected format is \"{ wettingPhaseRelPermTableName, intermediatePhaseRelPermTableName }\", in that order\n" - "Note that this input is only used for three-phase flow.\n" - "If you want to do a two-phase simulation, please use instead " + - string( viewKeyStruct::drainageWettingNonWettingRelPermTableNamesString() ) + - " to specify the table names" ); - - << << <<< HEAD - registerWrapper( viewKeyStruct::drainageNonWettingIntermediateRelPermTableNamesString(), - &m_drainageNonWettingIntermediateRelPermTableNames ). - ======= - registerWrapper( viewKeyStruct::drainageNonWettingIntermediateRelPermTableNamesString(), &m_drainageNonWettingIntermediateRelPermTableNames ). - setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). - >> >> >>> origin/develop - setInputFlag( InputFlags::OPTIONAL ). - setDescription( "List of drainage relative permeability tables for the pair (non-wetting phase, intermediate phase)\n" - "The expected format is \"{ nonWettingPhaseRelPermTableName, intermediatePhaseRelPermTableName }\", in that order\n" - "Note that this input is only used for three-phase flow.\n" - "If you want to do a two-phase simulation, please use instead " + - string( viewKeyStruct::drainageWettingNonWettingRelPermTableNamesString() ) + - " to specify the table names" ); + registerWrapper( viewKeyStruct::drainageWettingIntermediateRelPermTableNamesString(), + &m_drainageWettingIntermediateRelPermTableNames ). + setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "List of drainage relative permeability tables for the pair (wetting phase, intermediate phase)\n" + "The expected format is \"{ wettingPhaseRelPermTableName, intermediatePhaseRelPermTableName }\", in that order\n" + "Note that this input is only used for three-phase flow.\n" + "If you want to do a two-phase simulation, please use instead " + + string( viewKeyStruct::drainageWettingNonWettingRelPermTableNamesString() ) + + " to specify the table names" ); + + registerWrapper( viewKeyStruct::drainageNonWettingIntermediateRelPermTableNamesString(), + &m_drainageNonWettingIntermediateRelPermTableNames ). + setRTTypeName( rtTypes::CustomTypes::groupNameRefArray ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "List of drainage relative permeability tables for the pair (non-wetting phase, intermediate phase)\n" + "The expected format is \"{ nonWettingPhaseRelPermTableName, intermediatePhaseRelPermTableName }\", in that order\n" + "Note that this input is only used for three-phase flow.\n" + "If you want to do a two-phase simulation, please use instead " + + string( viewKeyStruct::drainageWettingNonWettingRelPermTableNamesString() ) + + " to specify the table names" ); // imbibition table names - registerWrapper( viewKeyStruct::imbibitionWettingRelPermTableNameString(), &m_imbibitionWettingRelPermTableName ). + registerWrapper( viewKeyStruct::imbibitionWettingRelPermTableNameString(), + &m_imbibitionWettingRelPermTableName ). setRTTypeName( rtTypes::CustomTypes::groupNameRef ). setInputFlag( InputFlags::OPTIONAL ). setApplyDefaultValue( "" ). setDescription( "Imbibition relative permeability table name for the wetting phase.\n" "To neglect hysteresis on this phase, just use the same table name for the drainage and imbibition curves" ); - << << <<< HEAD - registerWrapper( viewKeyStruct::imbibitionNonWettingRelPermTableNameString(), - &m_imbibitionNonWettingRelPermTableName ). - ======= - registerWrapper( viewKeyStruct::imbibitionNonWettingRelPermTableNameString(), &m_imbibitionNonWettingRelPermTableName ). - setRTTypeName( rtTypes::CustomTypes::groupNameRef ). - >> >> >>> origin/develop - setInputFlag( InputFlags::OPTIONAL ). - setApplyDefaultValue( "" ). - setDescription( "Imbibition relative permeability table name for the non-wetting phase.\n" - "To neglect hysteresis on this phase, just use the same table name for the drainage and imbibition curves" ); + registerWrapper( viewKeyStruct::imbibitionNonWettingRelPermTableNameString(), + &m_imbibitionNonWettingRelPermTableName ). + setRTTypeName( rtTypes::CustomTypes::groupNameRef ). + setInputFlag( InputFlags::OPTIONAL ). + setApplyDefaultValue( "" ). + setDescription( "Imbibition relative permeability table name for the non-wetting phase.\n" + "To neglect hysteresis on this phase, just use the same table name for the drainage and imbibition curves" ); // hysteresis input parameters registerWrapper( viewKeyStruct::phaseHasHysteresisString(), &m_phaseHasHysteresis ). @@ -148,25 +137,21 @@ TableRelativePermeabilityHysteresis::TableRelativePermeabilityHysteresis( std::s setSizedFromParent( 0 ). setRestartFlags( RestartFlags::NO_WRITE ); - << << <<< HEAD - // register fields - registerField( fields::relperm::phaseMaxHistoricalVolFraction{}, - &m_phaseMaxHistoricalVolFraction ); - registerField( fields::relperm::phaseMinHistoricalVolFraction{}, - &m_phaseMinHistoricalVolFraction ); - ======= - registerWrapper( viewKeyStruct::waterOilMaxRelPermString(), &m_waterOilMaxRelPerm ). - setInputFlag( InputFlags::FALSE ). // will be deduced from tables - setSizedFromParent( 0 ); - + registerWrapper( viewKeyStruct::waterOilMaxRelPermString(), &m_waterOilMaxRelPerm ). + setInputFlag( InputFlags::FALSE ). // will be deduced from tables + setSizedFromParent( 0 ); registerWrapper( viewKeyStruct::threePhaseInterpolatorString(), &m_threePhaseInterpolator ). setInputFlag( InputFlags::OPTIONAL ). setApplyDefaultValue( ThreePhaseInterpolator::BAKER ). setDescription( "Type of Three phase interpolator." "Valid options \n* " + EnumStrings< ThreePhaseInterpolator >::concat( "\n* " ) ); - >> >> >>> origin/develop + // register fields + registerField( fields::relperm::phaseMaxHistoricalVolFraction{}, + &m_phaseMaxHistoricalVolFraction ); + registerField( fields::relperm::phaseMinHistoricalVolFraction{}, + &m_phaseMinHistoricalVolFraction ); } void TableRelativePermeabilityHysteresis::postProcessInput() @@ -293,32 +278,6 @@ void TableRelativePermeabilityHysteresis::checkExistenceAndValidateWettingRelPer drainagePhaseRelPermMinEndPoint, drainagePhaseRelPermMaxEndPoint ); - << << <<< HEAD - ======= - else if( numPhases == 3 ) - { - for( integer ip = 0; ip < m_drainageWettingIntermediateRelPermTableNames.size(); ++ip ) - { - if( ip == 0 ) // wetting phase is water - { - checkExistenceAndValidateRelPermTable( m_drainageWettingIntermediateRelPermTableNames[ip], // input - m_drainagePhaseMinVolFraction[m_phaseOrder[PhaseType::WATER]], // output - m_drainagePhaseMaxVolFraction[m_phaseOrder[PhaseType::WATER]], - m_drainagePhaseRelPermEndPoint[m_phaseOrder[PhaseType::WATER]] ); - } - else if( ip == 1 ) // intermediate phase is oil - { - checkExistenceAndValidateRelPermTable( m_drainageWettingIntermediateRelPermTableNames[ip], // input - m_drainagePhaseMinVolFraction[m_phaseOrder[PhaseType::OIL]], // output - m_drainagePhaseMaxVolFraction[m_phaseOrder[PhaseType::OIL]], - m_drainagePhaseRelPermEndPoint[m_phaseOrder[PhaseType::OIL]] ); - - //store the two extemum values - m_waterOilMaxRelPerm = m_drainagePhaseRelPermEndPoint[m_phaseOrder[PhaseType::OIL]]; - } - } - >> >> >>> origin/develop - // imbibition if provided real64 imbibitionPhaseMinVolFraction = drainagePhaseMinVolFraction; // output real64 imbibitionPhaseMaxVolFraction = drainagePhaseMaxVolFraction; @@ -620,75 +579,56 @@ void TableRelativePermeabilityHysteresis::checkExistenceAndValidateWettingRelPer } - << << <<< HEAD - TableRelativePermeabilityHysteresis::KernelWrapper::KernelWrapper( arrayView1d< TableFunction::KernelWrapper const > const & drainageRelPermKernelWrappers, - arrayView1d< TableFunction::KernelWrapper const > const & imbibitionRelPermKernelWrappers, - arrayView1d< integer const > const & phaseHasHysteresis, - arrayView1d< real64 const > const & landParam, - real64 const & jerauldParam_a, - real64 const & jerauldParam_b, - real64 const & killoughCurvatureParamRelPerm, - KilloughHysteresis::HysteresisCurve const & wettingCurve, - KilloughHysteresis::HysteresisCurve const & nonWettingCurve, - arrayView1d< integer const > const & phaseTypes, - arrayView1d< integer const > const & phaseOrder, - arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMinHistoricalVolFraction, - arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMaxHistoricalVolFraction, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac ) - : - RelativePermeabilityBaseUpdate( phaseTypes, - phaseOrder, - phaseRelPerm, - dPhaseRelPerm_dPhaseVolFrac, - phaseTrappedVolFrac ), - ======= - TableRelativePermeabilityHysteresis::KernelWrapper:: - KernelWrapper( arrayView1d< TableFunction::KernelWrapper const > const & drainageRelPermKernelWrappers, - arrayView1d< TableFunction::KernelWrapper const > const & imbibitionRelPermKernelWrappers, - real64 const & jerauldParam_a, - real64 const & jerauldParam_b, - real64 const & killoughCurvatureParam, - arrayView1d< integer const > const & phaseHasHysteresis, - arrayView1d< real64 const > const & landParam, - arrayView1d< real64 const > const & drainagePhaseMinVolFraction, - arrayView1d< real64 const > const & imbibitionPhaseMinVolFraction, - arrayView1d< real64 const > const & drainagePhaseMaxVolFraction, - arrayView1d< real64 const > const & imbibitionPhaseMaxVolFraction, - arrayView1d< real64 const > const & drainagePhaseRelPermEndPoint, - arrayView1d< real64 const > const & imbibitionPhaseRelPermEndPoint, - arrayView1d< integer const > const & phaseTypes, - arrayView1d< integer const > const & phaseOrder, - ThreePhaseInterpolator const & threePhaseInterpolator, - real64 const & waterOilRelPermMaxValue, - arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMinHistoricalVolFraction, - arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMaxHistoricalVolFraction, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac, - arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, - arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac ) - : RelativePermeabilityBaseUpdate( phaseTypes, - phaseOrder, - phaseRelPerm, - dPhaseRelPerm_dPhaseVolFrac, - phaseTrappedVolFrac ), - >> >> >>> origin/develop - m_drainageRelPermKernelWrappers( drainageRelPermKernelWrappers ), - m_imbibitionRelPermKernelWrappers( imbibitionRelPermKernelWrappers ), - m_phaseHasHysteresis( phaseHasHysteresis ), - m_landParam( landParam ), - m_jerauldParam_a( jerauldParam_a ), - m_jerauldParam_b( jerauldParam_b ), - m_killoughCurvatureParamRelPerm( killoughCurvatureParamRelPerm ), - m_wettingCurve( wettingCurve ), - m_nonWettingCurve( nonWettingCurve ), - m_phaseMinHistoricalVolFraction( phaseMinHistoricalVolFraction ), - m_phaseMaxHistoricalVolFraction( phaseMaxHistoricalVolFraction ), - m_waterOilRelPermMaxValue( waterOilRelPermMaxValue ), - m_threePhaseInterpolator( threePhaseInterpolator ) - {} - - +TableRelativePermeabilityHysteresis::KernelWrapper:: +KernelWrapper( arrayView1d< TableFunction::KernelWrapper const > const & drainageRelPermKernelWrappers, + arrayView1d< TableFunction::KernelWrapper const > const & imbibitionRelPermKernelWrappers, + real64 const & jerauldParam_a, + real64 const & jerauldParam_b, + real64 const & killoughCurvatureParam, + arrayView1d< integer const > const & phaseHasHysteresis, + arrayView1d< real64 const > const & landParam, + arrayView1d< real64 const > const & drainagePhaseMinVolFraction, + arrayView1d< real64 const > const & imbibitionPhaseMinVolFraction, + arrayView1d< real64 const > const & drainagePhaseMaxVolFraction, + arrayView1d< real64 const > const & imbibitionPhaseMaxVolFraction, + arrayView1d< real64 const > const & drainagePhaseRelPermEndPoint, + arrayView1d< real64 const > const & imbibitionPhaseRelPermEndPoint, + KilloughHysteresis::HysteresisCurve const & wettingCurve, + KilloughHysteresis::HysteresisCurve const & nonWettingCurve, + arrayView1d< integer const > const & phaseTypes, + arrayView1d< integer const > const & phaseOrder, + ThreePhaseInterpolator const & threePhaseInterpolator, + real64 const & waterOilRelPermMaxValue, + arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMinHistoricalVolFraction, + arrayView2d< real64 const, compflow::USD_PHASE > const & phaseMaxHistoricalVolFraction, + arrayView3d< real64, relperm::USD_RELPERM > const & phaseTrappedVolFrac, + arrayView3d< real64, relperm::USD_RELPERM > const & phaseRelPerm, + arrayView4d< real64, relperm::USD_RELPERM_DS > const & dPhaseRelPerm_dPhaseVolFrac ) + : RelativePermeabilityBaseUpdate( phaseTypes, + phaseOrder, + phaseRelPerm, + dPhaseRelPerm_dPhaseVolFrac, + phaseTrappedVolFrac ), + m_drainageRelPermKernelWrappers( drainageRelPermKernelWrappers ), + m_imbibitionRelPermKernelWrappers( imbibitionRelPermKernelWrappers ), + m_jerauldParam_a( jerauldParam_a ), + m_jerauldParam_b( jerauldParam_b ), + m_killoughCurvatureParam( killoughCurvatureParam ), + m_phaseHasHysteresis( phaseHasHysteresis ), + m_landParam( landParam ), + m_wettingCurve( wettingCurve ), + m_nonWettingCurve( nonWettingCurve ), + m_drainagePhaseMinVolFraction( drainagePhaseMinVolFraction ), + m_imbibitionPhaseMinVolFraction( imbibitionPhaseMinVolFraction ), + m_drainagePhaseMaxVolFraction( drainagePhaseMaxVolFraction ), + m_imbibitionPhaseMaxVolFraction( imbibitionPhaseMaxVolFraction ), + m_drainagePhaseRelPermEndPoint( drainagePhaseRelPermEndPoint ), + m_imbibitionPhaseRelPermEndPoint( imbibitionPhaseRelPermEndPoint ), + m_phaseMinHistoricalVolFraction( phaseMinHistoricalVolFraction ), + m_phaseMaxHistoricalVolFraction( phaseMaxHistoricalVolFraction ), + m_waterOilRelPermMaxValue( waterOilRelPermMaxValue ), + m_threePhaseInterpolator( threePhaseInterpolator ) +{} REGISTER_CATALOG_ENTRY( ConstitutiveBase, TableRelativePermeabilityHysteresis, std::string const &, Group * const ) diff --git a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp index a8024e29766..eb173df0ae2 100644 --- a/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp +++ b/src/coreComponents/constitutive/relativePermeability/TableRelativePermeabilityHysteresis.hpp @@ -447,19 +447,17 @@ class TableRelativePermeabilityHysteresis : public RelativePermeabilityBase /// Maximum historical phase volume fraction for each phase array2d< real64, compflow::LAYOUT_PHASE > m_phaseMaxHistoricalVolFraction; - << << <<< HEAD /// The wetting phase hysteretic curve KilloughHysteresis::HysteresisCurve m_wettingCurve; /// The non-wetting phase hysteretic curve KilloughHysteresis::HysteresisCurve m_nonWettingCurve; - ======= + /// Max krwo value (unique as krwo and krgo are considred non hysteretical in our implementation) real64 m_waterOilMaxRelPerm; /// enum class to dispatch interpolator (Baker/Eclipse,StoneII) ThreePhaseInterpolator m_threePhaseInterpolator; - >> >> >>> origin/develop }; diff --git a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp index 3e93a8264e5..d8ededad3bc 100644 --- a/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp +++ b/src/coreComponents/constitutive/relativePermeability/VanGenuchtenStone2RelativePermeability.hpp @@ -138,7 +138,19 @@ class VanGenuchtenStone2RelativePermeability : public RelativePermeabilityBase static constexpr char const * volFracScaleString() { return "volFracScale"; } }; - arrayView1d< real64 const > getPhaseMinVolumeFraction() const override { return m_phaseMinVolumeFraction; }; + real64 getWettingPhaseMinVolumeFraction() const override + { + integer ipWetting; + std::tie( ipWetting, std::ignore ) = phaseIndex( getPhaseOrder()); + return m_phaseMinVolumeFraction[ipWetting]; + } + + real64 getNonWettingMinVolumeFraction() const override + { + integer ipNonWetting; + std::tie( std::ignore, ipNonWetting ) = phaseIndex( getPhaseOrder()); + return m_phaseMinVolumeFraction[ipNonWetting]; + }; protected: