From 50eb8b7225f187bb06b59a48635d2d5df5addac4 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Thu, 3 Aug 2017 13:39:52 +0200 Subject: [PATCH] #1617 Adding conductivity scaling factor to StimPlan fracture templates, and scaling the conductivity values in file with this value. --- .../FileInterface/RifStimPlanXmlReader.cpp | 6 ++++-- .../FileInterface/RifStimPlanXmlReader.h | 2 +- .../Completions/RimStimPlanFractureTemplate.cpp | 15 +++++++++++++-- .../Completions/RimStimPlanFractureTemplate.h | 1 + .../RigStimPlanFractureDefinition.cpp | 14 +++++++++++++- .../RigStimPlanFractureDefinition.h | 2 +- 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/ApplicationCode/FileInterface/RifStimPlanXmlReader.cpp b/ApplicationCode/FileInterface/RifStimPlanXmlReader.cpp index 028390e510..ab99c3747b 100644 --- a/ApplicationCode/FileInterface/RifStimPlanXmlReader.cpp +++ b/ApplicationCode/FileInterface/RifStimPlanXmlReader.cpp @@ -30,7 +30,9 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -cvf::ref RifStimPlanXmlReader::readStimPlanXMLFile(const QString& stimPlanFileName, QString * errorMessage) +cvf::ref RifStimPlanXmlReader::readStimPlanXMLFile(const QString& stimPlanFileName, + double conductivityScalingFactor, + QString * errorMessage) { RiaLogging::info(QString("Starting to open StimPlan XML file: '%1'").arg(stimPlanFileName)); RiaEclipseUnitTools::UnitSystemType unitSystem = RiaEclipseUnitTools::UNITS_UNKNOWN; @@ -115,7 +117,7 @@ cvf::ref RifStimPlanXmlReader::readStimPlanXMLFil return nullptr; } - stimPlanFileData->setDataAtTimeValue(parameter, unit, propertyValuesAtTimestep, timeStepValue); + stimPlanFileData->setDataAtTimeValue(parameter, unit, propertyValuesAtTimestep, timeStepValue, conductivityScalingFactor); } } diff --git a/ApplicationCode/FileInterface/RifStimPlanXmlReader.h b/ApplicationCode/FileInterface/RifStimPlanXmlReader.h index 71c84b059f..0f0c54b5dd 100644 --- a/ApplicationCode/FileInterface/RifStimPlanXmlReader.h +++ b/ApplicationCode/FileInterface/RifStimPlanXmlReader.h @@ -33,7 +33,7 @@ class QXmlStreamReader; class RifStimPlanXmlReader { public: - static cvf::ref readStimPlanXMLFile(const QString& stimPlanFileName, QString * errorMessage); + static cvf::ref readStimPlanXMLFile(const QString& stimPlanFileName, double conductivityScalingFactor, QString * errorMessage); private: static size_t readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream, RigStimPlanFractureDefinition* stimPlanFileData, RiaEclipseUnitTools::UnitSystemType& unit); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp index fa595e3429..a442721d33 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp @@ -72,6 +72,7 @@ RimStimPlanFractureTemplate::RimStimPlanFractureTemplate(void) CAF_PDM_InitField(&m_activeTimeStepIndex, "activeTimeStepIndex", 0, "Active TimeStep Index", "", "", ""); CAF_PDM_InitField(&m_showStimPlanMesh, "showStimPlanMesh", true, "Show StimPlan Mesh", "", "", ""); + CAF_PDM_InitField(&m_conductivityScalingFactor, "FractureConductivityFactor", 1.0, "Conductivity Scaling Factor", "", "The conductivity values read from file will be scaled with this parameters", ""); m_fractureGrid = new RigFractureGrid(); } @@ -121,8 +122,17 @@ void RimStimPlanFractureTemplate::fieldChangedByUi(const caf::PdmFieldHandle* ch } - if (&m_wellPathDepthAtFracture == changedField || &m_borderPolygonResultName == changedField || &m_activeTimeStepIndex == changedField || &m_showStimPlanMesh == changedField) + if (&m_wellPathDepthAtFracture == changedField + || &m_borderPolygonResultName == changedField + || &m_activeTimeStepIndex == changedField + || &m_showStimPlanMesh == changedField + || &m_conductivityScalingFactor == changedField) { + if (&m_conductivityScalingFactor == changedField) + { + loadDataAndUpdate(); + } + RimProject* proj; this->firstAncestorOrThisOfType(proj); if (proj) @@ -240,7 +250,7 @@ bool RimStimPlanFractureTemplate::setBorderPolygonResultNameToDefault() void RimStimPlanFractureTemplate::loadDataAndUpdate() { QString errorMessage; - m_stimPlanFractureDefinitionData = RifStimPlanXmlReader::readStimPlanXMLFile( m_stimPlanFileName(), &errorMessage); + m_stimPlanFractureDefinitionData = RifStimPlanXmlReader::readStimPlanXMLFile( m_stimPlanFileName(), m_conductivityScalingFactor(), &errorMessage); if (errorMessage.size() > 0) RiaLogging::error(errorMessage); if (m_stimPlanFractureDefinitionData.notNull()) @@ -463,6 +473,7 @@ void RimStimPlanFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pd m_fractureContainment()->defineUiOrdering(uiConfigName, *trGr); caf::PdmUiGroup* propertyGroup = uiOrdering.addNewGroup("Properties"); + propertyGroup->add(&m_conductivityScalingFactor); propertyGroup->add(&conductivityType); propertyGroup->add(&skinFactor); propertyGroup->add(&perforationLength); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h index 83f22c0aa6..5dd794310c 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h @@ -103,6 +103,7 @@ private: caf::PdmField m_stimPlanFileName; cvf::ref m_stimPlanFractureDefinitionData; + caf::PdmField m_conductivityScalingFactor; cvf::ref m_fractureGrid; }; diff --git a/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.cpp b/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.cpp index 28409462ef..3ed1cccb2c 100644 --- a/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.cpp +++ b/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.cpp @@ -517,8 +517,20 @@ size_t RigStimPlanFractureDefinition::resultIndex(const QString& resultName, con //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigStimPlanFractureDefinition::setDataAtTimeValue(QString resultName, QString unit, std::vector> data, double timeStepValue) +void RigStimPlanFractureDefinition::setDataAtTimeValue(QString resultName, QString unit, std::vector> data, double timeStepValue, double condScalingFactor) { + if (resultName == "CONDUCTIVITY") + { + for (std::vector &dataAtDepth : data) + { + for (double &dataValue : dataAtDepth) + { + dataValue = dataValue * condScalingFactor; + } + } + } + + size_t resIndex = resultIndex(resultName, unit); if (resIndex != cvf::UNDEFINED_SIZE_T) diff --git a/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.h b/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.h index 79e20a55b5..9f731d5d21 100644 --- a/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.h +++ b/ApplicationCode/ReservoirDataModel/RigStimPlanFractureDefinition.h @@ -97,7 +97,7 @@ public: std::vector > getStimPlanPropertyNamesUnits() const; bool numberOfParameterValuesOK(std::vector> propertyValuesAtTimestep); size_t totalNumberTimeSteps(); - void setDataAtTimeValue(QString resultName, QString unit, std::vector> data, double timeStepValue); + void setDataAtTimeValue(QString resultName, QString unit, std::vector> data, double timeStepValue, double condScalingFactor); const std::vector>& getDataAtTimeIndex(const QString& resultName, const QString& unit, size_t timeStepIndex) const; std::vector fractureGridResults(const QString& resultName, const QString& unitName,