#2455 Non-Darcy Flow : Hide "From Fracture" if no width is available

This commit is contained in:
Magne Sjaastad
2018-02-16 14:17:28 +01:00
parent cf11eff319
commit 917cae9e2d
3 changed files with 86 additions and 11 deletions

View File

@@ -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);

View File

@@ -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();

View File

@@ -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;
}
}
}
}