mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2455 Non-Darcy Flow : Add fracture width
This commit is contained in:
parent
e1619d3d62
commit
dda9bd11ea
@ -55,7 +55,7 @@ namespace caf
|
||||
}
|
||||
|
||||
template<>
|
||||
void caf::AppEnum< RimFractureTemplate::EffectivePermeabilityEnum>::setUp()
|
||||
void caf::AppEnum< RimFractureTemplate::PermeabilityEnum>::setUp()
|
||||
{
|
||||
addItem(RimFractureTemplate::USER_DEFINED_PERMEABILITY, "UserDefinedPermeability", "User Defined");
|
||||
addItem(RimFractureTemplate::CONDUCTIVITY_FROM_FRACTURE, "FractureConductivity", "Use Fracture Conductivity");
|
||||
@ -63,7 +63,14 @@ namespace caf
|
||||
setDefault(RimFractureTemplate::CONDUCTIVITY_FROM_FRACTURE);
|
||||
}
|
||||
|
||||
template<>
|
||||
void caf::AppEnum<RimFractureTemplate::WidthEnum>::setUp()
|
||||
{
|
||||
addItem(RimFractureTemplate::USER_DEFINED_WIDTH, "UserDefinedWidth", "User Defined");
|
||||
addItem(RimFractureTemplate::WIDTH_FROM_FRACTURE, "FractureWidth", "Use Fracture Width");
|
||||
|
||||
setDefault(RimFractureTemplate::WIDTH_FROM_FRACTURE);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Move to cafPdmObject.h
|
||||
@ -101,14 +108,18 @@ RimFractureTemplate::RimFractureTemplate()
|
||||
|
||||
// Non-Darcy Flow options
|
||||
CAF_PDM_InitField_Basic(&m_useNonDarcyFlow, "UseNonDarcyFlow", false, "Use Non-Darcy Flow");
|
||||
CAF_PDM_InitField_Basic(&m_inertialCoefficient, "InertialCoefficient", 0.006083236, "Inertial Coefficient");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_fractureWidthType, "FractureWidthType", "Type", "", "", "");
|
||||
CAF_PDM_InitField_Basic(&m_fractureWidth, "FractureWidth", 0.1, "Fracture Width (h)");
|
||||
|
||||
CAF_PDM_InitField_Basic(&m_inertialCoefficient, "InertialCoefficient", 0.006083236, "<html>Inertial Coefficient (β)</html>");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_permeabilityType, "PermeabilityType", "Type", "", "", "");
|
||||
CAF_PDM_InitField_Basic(&m_relativePermeability, "RelativePermeability", 1.0, "Relative Permeability");
|
||||
CAF_PDM_InitField(&m_userDefinedEffectivePermeability, "EffectivePermeability",0.0, "Effective Permeability [mD]", "", "", "");
|
||||
CAF_PDM_InitField(&m_userDefinedEffectivePermeability, "EffectivePermeability",0.0, "Effective Permeability (Ke) [mD]", "", "", "");
|
||||
|
||||
CAF_PDM_InitField(&m_relativeGasDensity, "RelativeGasDensity", 0.8, "Relative Gas Density", "", "Relative density of gas at surface conditions with respect to air at STP", "");
|
||||
CAF_PDM_InitField(&m_gasViscosity, "GasViscosity", 0.02, "Gas Viscosity", "", "Gas viscosity at bottom hole pressure", "");
|
||||
CAF_PDM_InitField(&m_relativeGasDensity, "RelativeGasDensity", 0.8, "<html>Relative Gas Density (γ)</html>", "", "Relative density of gas at surface conditions with respect to air at STP", "");
|
||||
CAF_PDM_InitField(&m_gasViscosity, "GasViscosity", 0.02, "<html>Gas Viscosity (μ)</html>", "", "Gas viscosity at bottom hole pressure", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_dFactorDisplayField, "dFactorDisplayField", "D Factor", "", "", "");
|
||||
m_dFactorDisplayField.registerGetMethod(this, &RimFractureTemplate::computeDFactor);
|
||||
@ -262,26 +273,32 @@ void RimFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder
|
||||
{
|
||||
prepareFieldsForUiDisplay();
|
||||
|
||||
auto group = uiOrdering.addNewGroup("Non-Darcy Flow");
|
||||
group->setCollapsedByDefault(true);
|
||||
group->add(&m_useNonDarcyFlow);
|
||||
group->add(&m_inertialCoefficient);
|
||||
auto nonDarcyFlowGroup = uiOrdering.addNewGroup("Non-Darcy Flow");
|
||||
nonDarcyFlowGroup->setCollapsedByDefault(true);
|
||||
nonDarcyFlowGroup->add(&m_useNonDarcyFlow);
|
||||
nonDarcyFlowGroup->add(&m_inertialCoefficient);
|
||||
|
||||
{
|
||||
auto permGroup = group->addNewGroup("Effective Permeability");
|
||||
permGroup->add(&m_permeabilityType);
|
||||
permGroup->add(&m_relativePermeability);
|
||||
permGroup->add(&m_userDefinedEffectivePermeability);
|
||||
auto group = nonDarcyFlowGroup->addNewGroup("Effective Permeability");
|
||||
group->add(&m_permeabilityType);
|
||||
group->add(&m_relativePermeability);
|
||||
group->add(&m_userDefinedEffectivePermeability);
|
||||
}
|
||||
|
||||
group->add(&m_relativeGasDensity);
|
||||
group->add(&m_gasViscosity);
|
||||
group->add(&m_dFactorDisplayField);
|
||||
{
|
||||
auto group = nonDarcyFlowGroup->addNewGroup("Width");
|
||||
group->add(&m_fractureWidthType);
|
||||
group->add(&m_fractureWidth);
|
||||
}
|
||||
|
||||
nonDarcyFlowGroup->add(&m_relativeGasDensity);
|
||||
nonDarcyFlowGroup->add(&m_gasViscosity);
|
||||
nonDarcyFlowGroup->add(&m_dFactorDisplayField);
|
||||
|
||||
{
|
||||
auto dFactorGroup = group->addNewGroup("D Factor Details");
|
||||
dFactorGroup->setCollapsedByDefault(true);
|
||||
dFactorGroup->add(&m_dFactorSummaryText);
|
||||
auto group = nonDarcyFlowGroup->addNewGroup("D Factor Details");
|
||||
group->setCollapsedByDefault(true);
|
||||
group->add(&m_dFactorSummaryText);
|
||||
}
|
||||
|
||||
uiOrdering.add(&m_fractureTemplateUnit);
|
||||
@ -365,6 +382,9 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
|
||||
// Non Darcy Flow
|
||||
m_inertialCoefficient.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
|
||||
|
||||
m_fractureWidthType.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
|
||||
m_fractureWidth.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
|
||||
|
||||
m_permeabilityType.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
|
||||
m_relativePermeability.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
|
||||
m_userDefinedEffectivePermeability.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
|
||||
@ -374,6 +394,18 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
|
||||
|
||||
if (m_useNonDarcyFlow)
|
||||
{
|
||||
if (m_fractureWidthType == RimFractureTemplate::USER_DEFINED_WIDTH)
|
||||
{
|
||||
m_fractureWidth.uiCapability()->setUiReadOnly(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto values = widthAndConductivityAtWellPathIntersection();
|
||||
m_fractureWidth = values.m_width;
|
||||
|
||||
m_fractureWidth.uiCapability()->setUiReadOnly(true);
|
||||
}
|
||||
|
||||
if (m_permeabilityType == RimFractureTemplate::USER_DEFINED_PERMEABILITY)
|
||||
{
|
||||
m_relativePermeability.uiCapability()->setUiHidden(true);
|
||||
@ -415,7 +447,7 @@ QString RimFractureTemplate::dFactorSummary() const
|
||||
text += QString("γ : %1").arg(gamma);
|
||||
|
||||
text += "<br>";
|
||||
auto h = nonDarcyH();
|
||||
auto h = fractureWidth();
|
||||
text += QString("h : %1").arg(h);
|
||||
|
||||
text += "<br>";
|
||||
@ -460,7 +492,7 @@ double RimFractureTemplate::computeDFactor() const
|
||||
|
||||
auto radius = m_wellDiameter / 2.0;
|
||||
auto mu = m_gasViscosity;
|
||||
auto h = nonDarcyH();
|
||||
auto h = fractureWidth();
|
||||
|
||||
double numerator = alpha * beta * effPerm * gamma;
|
||||
double denumerator = h * radius * mu;
|
||||
@ -473,18 +505,16 @@ double RimFractureTemplate::computeDFactor() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimFractureTemplate::nonDarcyH() const
|
||||
double RimFractureTemplate::fractureWidth() const
|
||||
{
|
||||
if (m_orientationType() == RimFractureTemplate::ALONG_WELL_PATH)
|
||||
{
|
||||
return m_perforationLength();
|
||||
}
|
||||
else
|
||||
if (m_fractureWidthType == RimFractureTemplate::WIDTH_FROM_FRACTURE)
|
||||
{
|
||||
auto values = widthAndConductivityAtWellPathIntersection();
|
||||
|
||||
return values.m_width;
|
||||
}
|
||||
|
||||
return m_fractureWidth;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -73,12 +73,18 @@ public:
|
||||
FINITE_CONDUCTIVITY,
|
||||
};
|
||||
|
||||
enum EffectivePermeabilityEnum
|
||||
enum PermeabilityEnum
|
||||
{
|
||||
USER_DEFINED_PERMEABILITY,
|
||||
CONDUCTIVITY_FROM_FRACTURE,
|
||||
};
|
||||
|
||||
enum WidthEnum
|
||||
{
|
||||
USER_DEFINED_WIDTH,
|
||||
WIDTH_FROM_FRACTURE,
|
||||
};
|
||||
|
||||
public:
|
||||
RimFractureTemplate();
|
||||
virtual ~RimFractureTemplate();
|
||||
@ -125,8 +131,7 @@ private:
|
||||
double effectivePermeability() const;
|
||||
|
||||
double computeDFactor() const;
|
||||
double nonDarcyH() const;
|
||||
|
||||
double fractureWidth() const;
|
||||
|
||||
protected:
|
||||
caf::PdmField<QString> m_name;
|
||||
@ -141,10 +146,12 @@ protected:
|
||||
caf::PdmChildField<RimFractureContainment*> m_fractureContainment;
|
||||
|
||||
caf::PdmField<bool> m_useNonDarcyFlow;
|
||||
|
||||
caf::PdmField<caf::AppEnum<WidthEnum>> m_fractureWidthType;
|
||||
caf::PdmField<double> m_fractureWidth;
|
||||
caf::PdmField<double> m_inertialCoefficient;
|
||||
|
||||
caf::PdmField<caf::AppEnum<EffectivePermeabilityEnum>>
|
||||
m_permeabilityType;
|
||||
caf::PdmField<caf::AppEnum<PermeabilityEnum>> m_permeabilityType;
|
||||
caf::PdmField<double> m_relativePermeability;
|
||||
caf::PdmField<double> m_userDefinedEffectivePermeability;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user