mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2455 Non-Darcy Flow : Hide "From Fracture" if no width is available
This commit is contained in:
@@ -357,7 +357,33 @@ void RimFractureTemplate::defineEditorAttribute(const caf::PdmFieldHandle* field
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QList<caf::PdmOptionItemInfo> RimFractureTemplate::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
|
||||
bool* useOptionsOnly)
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
|
||||
if (fieldNeedingOptions == &m_fractureWidthType)
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo(caf::AppEnum<WidthEnum>::uiText(USER_DEFINED_WIDTH), USER_DEFINED_WIDTH));
|
||||
|
||||
auto widthAndCond = widthAndConductivityAtWellPathIntersection();
|
||||
if (widthAndCond.isValid())
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo(caf::AppEnum<WidthEnum>::uiText(WIDTH_FROM_FRACTURE), WIDTH_FROM_FRACTURE));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fractureWidthType = USER_DEFINED_WIDTH;
|
||||
}
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimFractureTemplate::prepareFieldsForUiDisplay()
|
||||
{
|
||||
@@ -404,13 +430,18 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
|
||||
|
||||
// Non Darcy Flow
|
||||
|
||||
auto values = widthAndConductivityAtWellPathIntersection();
|
||||
if (!values.isValid())
|
||||
{
|
||||
m_fractureWidthType = RimFractureTemplate::USER_DEFINED_WIDTH;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -47,6 +47,14 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
bool isValid() const
|
||||
{
|
||||
if (m_width != 0.0) return true;
|
||||
if (m_permeability != 0.0) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
double m_width;
|
||||
double m_permeability;
|
||||
};
|
||||
@@ -93,6 +101,8 @@ public:
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
public:
|
||||
RimFractureTemplate();
|
||||
virtual ~RimFractureTemplate();
|
||||
@@ -134,6 +144,7 @@ protected:
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override;
|
||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
|
||||
|
||||
private:
|
||||
void prepareFieldsForUiDisplay();
|
||||
|
||||
@@ -272,6 +272,8 @@ QList<caf::PdmOptionItemInfo> RimStimPlanFractureTemplate::calculateValueOptions
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
|
||||
options = RimFractureTemplate::calculateValueOptions(fieldNeedingOptions, useOptionsOnly);
|
||||
|
||||
if (fieldNeedingOptions == &m_borderPolygonResultName)
|
||||
{
|
||||
for (std::pair<QString, QString> nameUnit : uiResultNamesWithUnit())
|
||||
@@ -397,18 +399,49 @@ FractureWidthAndConductivity RimStimPlanFractureTemplate::widthAndConductivityAt
|
||||
double conductivity = wellCell.getConductivtyValue();
|
||||
|
||||
std::vector<std::pair<QString, QString> > propertyNamesUnitsOnFile = m_stimPlanFractureDefinitionData->getStimPlanPropertyNamesUnits();
|
||||
for (const auto& nameUnit : propertyNamesUnitsOnFile)
|
||||
|
||||
QString propertyNameForFractureWidth;
|
||||
{
|
||||
if (nameUnit.first.contains("Width", Qt::CaseInsensitive))
|
||||
QString widthParameterName;
|
||||
QString effWidthParameterName;
|
||||
for (const auto& nameUnit : propertyNamesUnitsOnFile)
|
||||
{
|
||||
auto data = m_stimPlanFractureDefinitionData->fractureGridResults(nameUnit.first, nameUnit.second, m_activeTimeStepIndex);
|
||||
|
||||
double width = data[wellCellIndex];
|
||||
|
||||
if (fabs(width) > 1e-7)
|
||||
if (effWidthParameterName.isEmpty() && nameUnit.first.contains("effective width", Qt::CaseInsensitive))
|
||||
{
|
||||
values.m_width = width;
|
||||
values.m_permeability = conductivity / width;
|
||||
effWidthParameterName = nameUnit.first;
|
||||
}
|
||||
|
||||
if (widthParameterName.isEmpty() && nameUnit.first.contains("width", Qt::CaseInsensitive))
|
||||
{
|
||||
widthParameterName = nameUnit.first;
|
||||
}
|
||||
}
|
||||
|
||||
if (!effWidthParameterName.isEmpty())
|
||||
{
|
||||
propertyNameForFractureWidth = effWidthParameterName;
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyNameForFractureWidth = widthParameterName;
|
||||
}
|
||||
}
|
||||
|
||||
if (!propertyNameForFractureWidth.isEmpty())
|
||||
{
|
||||
for (const auto& nameUnit : propertyNamesUnitsOnFile)
|
||||
{
|
||||
if (nameUnit.first == propertyNameForFractureWidth)
|
||||
{
|
||||
auto data = m_stimPlanFractureDefinitionData->fractureGridResults(nameUnit.first, nameUnit.second, m_activeTimeStepIndex);
|
||||
|
||||
double width = data[wellCellIndex];
|
||||
|
||||
if (fabs(width) > 1e-20)
|
||||
{
|
||||
values.m_width = width;
|
||||
values.m_permeability = conductivity / width;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user