#2455 Non-Darcy Flow: Add fields to fracture template

This commit is contained in:
Magne Sjaastad
2018-02-09 07:26:48 +01:00
parent bd0d23520b
commit b068296afd
4 changed files with 72 additions and 22 deletions

View File

@@ -350,7 +350,6 @@ std::vector<std::pair<QString, QString>> RimEllipseFractureTemplate::uiResultNam
//--------------------------------------------------------------------------------------------------
void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
RimFractureTemplate::defineUiOrdering(uiConfigName, uiOrdering);
if (fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_METRIC)
{
@@ -367,7 +366,6 @@ void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pdm
m_wellDiameter.uiCapability()->setUiName("Well Diameter [inches]");
}
if (conductivityType() == FINITE_CONDUCTIVITY)
{
m_permeability.uiCapability()->setUiHidden(false);
@@ -378,7 +376,6 @@ void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pdm
m_permeability.uiCapability()->setUiHidden(true);
m_width.uiCapability()->setUiHidden(true);
}
uiOrdering.add(&m_name);
@@ -400,7 +397,6 @@ void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pdm
propertyGroup->add(&m_perforationEfficiency);
propertyGroup->add(&m_wellDiameter);
uiOrdering.add(&m_fractureTemplateUnit);
uiOrdering.skipRemainingFields(true);
RimFractureTemplate::defineUiOrdering(uiConfigName, uiOrdering);
}

View File

@@ -55,6 +55,9 @@ namespace caf
}
// TODO Move to cafPdmObject.h
#define CAF_PDM_InitField_Basic(field, keyword, default, uiName) CAF_PDM_InitField(field, keyword, default, uiName, "", "", "")
CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimFractureTemplate, "RimFractureTemplate");
@@ -84,6 +87,14 @@ RimFractureTemplate::RimFractureTemplate()
m_fractureContainment = new RimFractureContainment();
m_fractureContainment.uiCapability()->setUiTreeHidden(true);
m_fractureContainment.uiCapability()->setUiTreeChildrenHidden(true);
// Non-Darcy Flow options
CAF_PDM_InitField_Basic(&m_useNonDarcyFlow, "UseNonDarcyFlow", false, "Use Non-Darcy Flow");
CAF_PDM_InitField_Basic(&m_fractureWidth, "FractureWidth", 0.0, "Fracture Width");
CAF_PDM_InitField_Basic(&m_inertialCoefficient, "InertialCoefficient", 0.0, "Inertial Coefficient (beta)");
CAF_PDM_InitField_Basic(&m_effectivePermeability, "EffectivePermeability",0.0, "Effective Permeability");
CAF_PDM_InitField_Basic(&m_specificGasGravity, "SpecificGasGravity", 0.0, "Specific Gas Gravity");
CAF_PDM_InitField_Basic(&m_gasViscosity, "GasViscosity", 0.0, "Gas Viscosity");
}
//--------------------------------------------------------------------------------------------------
@@ -225,7 +236,42 @@ void RimFractureTemplate::fieldChangedByUi(const caf::PdmFieldHandle* changedFie
//--------------------------------------------------------------------------------------------------
void RimFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
prepareFieldsForUiDisplay();
auto group = uiOrdering.addNewGroup("Non-Darcy Flow");
group->setCollapsedByDefault(true);
group->add(&m_useNonDarcyFlow);
group->add(&m_fractureWidth);
group->add(&m_inertialCoefficient);
group->add(&m_effectivePermeability);
group->add(&m_specificGasGravity);
group->add(&m_gasViscosity);
uiOrdering.add(&m_fractureTemplateUnit);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureTemplate::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute)
{
if (field == &m_perforationEfficiency)
{
auto myAttr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>(attribute);
if (myAttr)
{
myAttr->m_minimum = 0;
myAttr->m_maximum = 1.0;
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureTemplate::prepareFieldsForUiDisplay()
{
if (m_fractureTemplateUnit == RiaEclipseUnitTools::UNITS_METRIC)
{
m_wellDiameter.uiCapability()->setUiName("Well Diameter [m]");
@@ -266,26 +312,24 @@ void RimFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder
{
m_wellDiameter.uiCapability()->setUiHidden(true);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureTemplate::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute)
{
if (field == &m_perforationEfficiency)
// Non Darcy Flow
m_fractureWidth.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_inertialCoefficient.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_effectivePermeability.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_specificGasGravity.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
m_gasViscosity.uiCapability()->setUiReadOnly(!m_useNonDarcyFlow);
if (m_orientationType == RimFractureTemplate::ALONG_WELL_PATH)
{
auto myAttr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>(attribute);
if (myAttr)
{
myAttr->m_minimum = 0;
myAttr->m_maximum = 1.0;
}
m_fractureWidth.uiCapability()->setUiHidden(true);
}
else
{
m_fractureWidth.uiCapability()->setUiHidden(false);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -97,6 +97,9 @@ protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override;
private:
void prepareFieldsForUiDisplay();
protected:
caf::PdmField<QString> m_name;
caf::PdmField<RiaEclipseUnitTools::UnitSystemType> m_fractureTemplateUnit;
@@ -108,4 +111,11 @@ protected:
caf::PdmField<double> m_wellDiameter;
caf::PdmField<caf::AppEnum<FracConductivityEnum>> m_conductivityType;
caf::PdmChildField<RimFractureContainment*> m_fractureContainment;
caf::PdmField<bool> m_useNonDarcyFlow;
caf::PdmField<double> m_fractureWidth;
caf::PdmField<double> m_inertialCoefficient;
caf::PdmField<double> m_effectivePermeability;
caf::PdmField<double> m_specificGasGravity;
caf::PdmField<double> m_gasViscosity;
};

View File

@@ -629,8 +629,6 @@ std::vector<cvf::Vec3f> RimStimPlanFractureTemplate::fractureBorderPolygon(RiaEc
//--------------------------------------------------------------------------------------------------
void RimStimPlanFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
RimFractureTemplate::defineUiOrdering(uiConfigName, uiOrdering);
uiOrdering.add(&m_name);
caf::PdmUiGroup* fileGroup = uiOrdering.addNewGroup("Input");
@@ -653,6 +651,8 @@ void RimStimPlanFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pd
propertyGroup->add(&m_perforationLength);
propertyGroup->add(&m_perforationEfficiency);
propertyGroup->add(&m_wellDiameter);
RimFractureTemplate::defineUiOrdering(uiConfigName, uiOrdering);
}
//--------------------------------------------------------------------------------------------------