Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Pavel Tomin committed Dec 14, 2023
1 parent 8eb7c42 commit b9e1ae5
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 157 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 ).
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 )

Expand Down
Loading

0 comments on commit b9e1ae5

Please sign in to comment.