mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2455 Non-Darcy Flow : Add fields to fracture template
This commit is contained in:
parent
6b246f4671
commit
ac96824640
@ -339,6 +339,8 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
/////
|
||||
// Insert total transmissibility from eclipse-cell to well for this fracture into the map
|
||||
|
||||
std::vector<RigCompletionData> allCompletionsForOneFracture;
|
||||
|
||||
std::set<RigTransmissibilityCondenser::CellAddress> externalCells = transCondenser.externalCells();
|
||||
for (RigTransmissibilityCondenser::CellAddress externalCell : externalCells)
|
||||
{
|
||||
@ -354,10 +356,43 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
|
||||
compDat.setFromFracture(trans, fracture->fractureTemplate()->skinFactor());
|
||||
compDat.addMetadata(fracture->name(), QString::number(trans));
|
||||
fractureCompletions.push_back(compDat);
|
||||
allCompletionsForOneFracture.push_back(compDat);
|
||||
}
|
||||
}
|
||||
|
||||
/////
|
||||
// Compute Non-Dracy Flow parameters
|
||||
|
||||
if (fracture->fractureTemplate()->isNonDarcyFlowEnabled())
|
||||
{
|
||||
double dFactorForFracture = fracture->fractureTemplate()->dFactor();
|
||||
double khForFracture = fracture->fractureTemplate()->kh();
|
||||
|
||||
double sumOfTransmissibilitiesInFracture = 0.0;
|
||||
for (const auto& c : allCompletionsForOneFracture)
|
||||
{
|
||||
sumOfTransmissibilitiesInFracture += c.transmissibility();
|
||||
}
|
||||
|
||||
if (fabs(sumOfTransmissibilitiesInFracture) > 1e-10)
|
||||
{
|
||||
for (auto& c : allCompletionsForOneFracture)
|
||||
{
|
||||
if (fabs(c.transmissibility()) > 1e-10)
|
||||
{
|
||||
double dFactorForOneConnection = dFactorForFracture * sumOfTransmissibilitiesInFracture / c.transmissibility();
|
||||
c.setDFactor(dFactorForOneConnection);
|
||||
}
|
||||
|
||||
double khForOneConnection = khForFracture * c.transmissibility() / sumOfTransmissibilitiesInFracture;
|
||||
|
||||
c.setKh(khForOneConnection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::copy(allCompletionsForOneFracture.begin(), allCompletionsForOneFracture.end(), std::back_inserter(fractureCompletions));
|
||||
|
||||
if ( outputStreamForIntermediateResultsText )
|
||||
{
|
||||
(*outputStreamForIntermediateResultsText) << "\n" << "\n" << "\n----------- All Transimissibilities " << fracture->name() << " -------------------- \n\n";
|
||||
|
@ -325,6 +325,7 @@ RigCompletionData
|
||||
const RicExportCompletionDataSettingsUi& settings)
|
||||
{
|
||||
CVF_ASSERT(!completions.empty());
|
||||
|
||||
QString wellName = completions[0].wellName();
|
||||
RigCompletionDataGridCell cellIndexIJK = completions[0].completionDataGridCell();
|
||||
RigCompletionData::CompletionType completionType = completions[0].completionType();
|
||||
@ -349,6 +350,10 @@ RigCompletionData
|
||||
RigCompletionData resultCompletion(wellName, cellIndexIJK, completions[0].firstOrderingValue());
|
||||
resultCompletion.setSecondOrderingValue(completions[0].secondOrderingValue());
|
||||
|
||||
// NOTE : Kh and DFactor is taken from the first completion
|
||||
resultCompletion.setKh(completions[0].kh());
|
||||
resultCompletion.setDFactor(completions[0].dFactor());
|
||||
|
||||
double totalTrans = 0.0;
|
||||
|
||||
for (const RigCompletionData& completion : completions)
|
||||
@ -634,13 +639,19 @@ void RicWellPathExportCompletionDataFeatureImpl::generateCompdatTable(RifEclipse
|
||||
case SHUT: formatter.add("SHUT"); break;
|
||||
case AUTO: formatter.add("AUTO"); break;
|
||||
}
|
||||
|
||||
if (RigCompletionData::isDefaultValue(data.saturation()))
|
||||
formatter.add("1*");
|
||||
else
|
||||
formatter.add(data.saturation());
|
||||
if (RigCompletionData::isDefaultValue(data.transmissibility()))
|
||||
|
||||
if (!RigCompletionData::isDefaultValue(data.dFactor()) ||
|
||||
RigCompletionData::isDefaultValue(data.transmissibility()))
|
||||
{
|
||||
formatter.add("1*"); // Transmissibility
|
||||
if (RigCompletionData::isDefaultValue(data.transmissibility()))
|
||||
formatter.add("1*");
|
||||
else
|
||||
formatter.add(data.transmissibility());
|
||||
|
||||
if (RigCompletionData::isDefaultValue(data.diameter()))
|
||||
formatter.add("1*");
|
||||
@ -657,7 +668,7 @@ void RicWellPathExportCompletionDataFeatureImpl::generateCompdatTable(RifEclipse
|
||||
if (RigCompletionData::isDefaultValue(data.dFactor()))
|
||||
formatter.add("1*");
|
||||
else
|
||||
formatter.add(data.dFactor());
|
||||
formatter.add(-data.dFactor());
|
||||
|
||||
switch (data.direction())
|
||||
{
|
||||
|
@ -178,6 +178,22 @@ void RigCompletionData::setCombinedValuesImplicitTransWPImult(double wpi
|
||||
m_diameter = wellDiameter;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigCompletionData::setDFactor(double dFactor)
|
||||
{
|
||||
m_dFactor = dFactor;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigCompletionData::setKh(double kh)
|
||||
{
|
||||
m_kh = kh;
|
||||
}
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
//==================================================================================================
|
||||
|
@ -97,6 +97,9 @@ public:
|
||||
double wellDiameter,
|
||||
CompletionType completionType);
|
||||
|
||||
void setDFactor(double dFactor);
|
||||
void setKh(double kh);
|
||||
|
||||
void addMetadata(const QString& name, const QString& comment);
|
||||
static bool isDefaultValue(double val);
|
||||
|
||||
|
@ -76,8 +76,8 @@ namespace caf
|
||||
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");
|
||||
addItem(RimFractureTemplate::NON_DARCY_COMPUTED, "Computed", "Compute D-factor from Parameters");
|
||||
addItem(RimFractureTemplate::NON_DARCY_USER_DEFINED, "UserDefined", "By User Defined D-factor");
|
||||
|
||||
setDefault(RimFractureTemplate::NON_DARCY_NONE);
|
||||
}
|
||||
@ -134,7 +134,7 @@ RimFractureTemplate::RimFractureTemplate()
|
||||
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);
|
||||
m_dFactorDisplayField.registerGetMethod(this, &RimFractureTemplate::dFactor);
|
||||
m_dFactorDisplayField.uiCapability()->setUiReadOnly(true);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_dFactorSummaryText, "dFactorSummaryText", "D Factor Summary", "", "", "");
|
||||
@ -438,18 +438,15 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
|
||||
m_fractureWidth.uiCapability()->setUiReadOnly(true);
|
||||
}
|
||||
|
||||
if (hideNonDarcyFlowParams)
|
||||
if (m_permeabilityType == RimFractureTemplate::USER_DEFINED_PERMEABILITY)
|
||||
{
|
||||
if (m_permeabilityType == RimFractureTemplate::USER_DEFINED_PERMEABILITY)
|
||||
{
|
||||
m_relativePermeability.uiCapability()->setUiHidden(true);
|
||||
m_userDefinedEffectivePermeability.uiCapability()->setUiHidden(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_relativePermeability.uiCapability()->setUiHidden(false);
|
||||
m_userDefinedEffectivePermeability.uiCapability()->setUiHidden(true);
|
||||
}
|
||||
m_relativePermeability.uiCapability()->setUiHidden(true);
|
||||
m_userDefinedEffectivePermeability.uiCapability()->setUiHidden(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_relativePermeability.uiCapability()->setUiHidden(false);
|
||||
m_userDefinedEffectivePermeability.uiCapability()->setUiHidden(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -460,8 +457,8 @@ QString RimFractureTemplate::dFactorSummary() const
|
||||
{
|
||||
QString text;
|
||||
|
||||
auto dFactor = computeDFactor();
|
||||
text += QString("D-factor : %1").arg(dFactor);
|
||||
auto val = dFactor();
|
||||
text += QString("D-factor : %1").arg(val);
|
||||
|
||||
text += "<br>";
|
||||
text += "<br>";
|
||||
@ -517,7 +514,7 @@ double RimFractureTemplate::effectivePermeability() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimFractureTemplate::computeDFactor() const
|
||||
double RimFractureTemplate::dFactor() const
|
||||
{
|
||||
if (m_nonDarcyFlowType == RimFractureTemplate::NON_DARCY_USER_DEFINED)
|
||||
{
|
||||
@ -541,6 +538,14 @@ double RimFractureTemplate::computeDFactor() const
|
||||
return numerator / denumerator;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimFractureTemplate::kh() const
|
||||
{
|
||||
return effectivePermeability() * fractureWidth();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -648,3 +653,11 @@ void RimFractureTemplate::setDefaultWellDiameterFromUnit()
|
||||
m_wellDiameter = 0.216;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimFractureTemplate::isNonDarcyFlowEnabled() const
|
||||
{
|
||||
return m_nonDarcyFlowType() != RimFractureTemplate::NON_DARCY_NONE;
|
||||
}
|
||||
|
@ -125,6 +125,10 @@ public:
|
||||
void setFractureTemplateUnit(RiaEclipseUnitTools::UnitSystemType unitSystem);
|
||||
void setDefaultWellDiameterFromUnit();
|
||||
|
||||
bool isNonDarcyFlowEnabled() const;
|
||||
double dFactor() const;
|
||||
double kh() const;
|
||||
|
||||
protected:
|
||||
virtual caf::PdmFieldHandle* userDescriptionField() override;
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
@ -138,7 +142,6 @@ private:
|
||||
QString dFactorSummary() const;
|
||||
double effectivePermeability() const;
|
||||
|
||||
double computeDFactor() const;
|
||||
double fractureWidth() const;
|
||||
|
||||
protected:
|
||||
|
Loading…
Reference in New Issue
Block a user