#2455 Non-Darcy Flow : Add support for user defined D-factor

This commit is contained in:
Magne Sjaastad committed 2018-02-16 09:37:55 +01:00
1 parent dda9bd11ea
commit 8dfe181cc3
2 files changed
+63 -15

No files matched your search

@@ -71,6 +71,16 @@ namespace caf
setDefault(RimFractureTemplate::WIDTH_FROM_FRACTURE);
}
template<>
void caf::AppEnum<RimFractureTemplate::NonDarcyFlowEnum>::setUp()
{
addItem(RimFractureTemplate::NON_DARCY_NONE, "None", "None");
addItem(RimFractureTemplate::NON_DARCY_COMPUTED, "Computed", "Computed by Parameters");
addItem(RimFractureTemplate::NON_DARCY_USER_DEFINED, "UserDefined", "User Defined Value");
setDefault(RimFractureTemplate::NON_DARCY_NONE);
}
}
// TODO Move to cafPdmObject.h
@@ -107,7 +117,9 @@ RimFractureTemplate::RimFractureTemplate()
m_fractureContainment.uiCapability()->setUiTreeChildrenHidden(true);
// Non-Darcy Flow options
CAF_PDM_InitField_Basic(&m_useNonDarcyFlow, "UseNonDarcyFlow", false, "Use Non-Darcy Flow");
CAF_PDM_InitFieldNoDefault(&m_nonDarcyFlowType, "NonDarcyFlowType", "Non-Darcy Flow", "", "", "");
CAF_PDM_InitField(&m_userDefinedDFactor, "UserDefinedDFactor", 1.0, "D Factor", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_fractureWidthType, "FractureWidthType", "Type", "", "", "");
CAF_PDM_InitField_Basic(&m_fractureWidth, "FractureWidth", 0.1, "Fracture Width (h)");
@@ -274,8 +286,15 @@ void RimFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder
prepareFieldsForUiDisplay();
auto nonDarcyFlowGroup = uiOrdering.addNewGroup("Non-Darcy Flow");
nonDarcyFlowGroup->setCollapsedByDefault(true);
nonDarcyFlowGroup->add(&m_useNonDarcyFlow);
nonDarcyFlowGroup->add(&m_nonDarcyFlowType);
if (m_nonDarcyFlowType == RimFractureTemplate::NON_DARCY_USER_DEFINED)
{
nonDarcyFlowGroup->add(&m_userDefinedDFactor);
}
if (m_nonDarcyFlowType == RimFractureTemplate::NON_DARCY_COMPUTED)
{
nonDarcyFlowGroup->add(&m_inertialCoefficient);
{
@@ -300,8 +319,10 @@ void RimFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder
group->setCollapsedByDefault(true);
group->add(&m_dFactorSummaryText);
}
}
uiOrdering.add(&m_fractureTemplateUnit);
uiOrdering.skipRemainingFields(true);
}
//--------------------------------------------------------------------------------------------------
@@ -380,20 +401,31 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
}
// Non Darcy Flow
m_inertialCoefficient.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_fractureWidthType.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_fractureWidth.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
bool hideNonDarcyFlowParams = false;
if (m_nonDarcyFlowType == RimFractureTemplate::NON_DARCY_COMPUTED) hideNonDarcyFlowParams = false;
m_permeabilityType.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_relativePermeability.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_userDefinedEffectivePermeability.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_relativeGasDensity.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_gasViscosity.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
if (m_useNonDarcyFlow)
if (m_nonDarcyFlowType == RimFractureTemplate::NON_DARCY_USER_DEFINED)
{
m_userDefinedDFactor.uiCapability()->setUiHidden(false);
}
else
{
m_userDefinedDFactor.uiCapability()->setUiHidden(true);
}
m_inertialCoefficient.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
m_fractureWidthType.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
m_fractureWidth.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
m_permeabilityType.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
m_relativePermeability.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
m_userDefinedEffectivePermeability.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
m_relativeGasDensity.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
m_gasViscosity.uiCapability()->setUiHidden(hideNonDarcyFlowParams);
if (m_fractureWidthType == RimFractureTemplate::USER_DEFINED_WIDTH)
{
m_fractureWidth.uiCapability()->setUiReadOnly(false);
@@ -406,6 +438,8 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
m_fractureWidth.uiCapability()->setUiReadOnly(true);
}
if (hideNonDarcyFlowParams)
{
if (m_permeabilityType == RimFractureTemplate::USER_DEFINED_PERMEABILITY)
{
m_relativePermeability.uiCapability()->setUiHidden(true);
@@ -485,6 +519,11 @@ double RimFractureTemplate::effectivePermeability() const
//--------------------------------------------------------------------------------------------------
double RimFractureTemplate::computeDFactor() const
{
if (m_nonDarcyFlowType == RimFractureTemplate::NON_DARCY_USER_DEFINED)
{
return m_userDefinedDFactor;
}
auto alpha = RiaDefines::nonDarcyFlowAlpha(m_fractureTemplateUnit());
auto beta = m_inertialCoefficient;
auto effPerm = effectivePermeability();
@@ -85,6 +85,14 @@ public:
WIDTH_FROM_FRACTURE,
};
enum NonDarcyFlowEnum
{
NON_DARCY_NONE,
NON_DARCY_COMPUTED,
NON_DARCY_USER_DEFINED,
};
public:
RimFractureTemplate();
virtual ~RimFractureTemplate();
@@ -145,7 +153,8 @@ protected:
caf::PdmField<caf::AppEnum<FracConductivityEnum>> m_conductivityType;
caf::PdmChildField<RimFractureContainment*> m_fractureContainment;
caf::PdmField<bool> m_useNonDarcyFlow;
caf::PdmField<caf::AppEnum<NonDarcyFlowEnum>> m_nonDarcyFlowType;
caf::PdmField<double> m_userDefinedDFactor;
caf::PdmField<caf::AppEnum<WidthEnum>> m_fractureWidthType;
caf::PdmField<double> m_fractureWidth;