mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-10 07:26:03 -06:00
#2509 Fracture : Add support for unit conversion of stimplan grid coords
This commit is contained in:
parent
82e706375a
commit
35febab8db
@ -55,11 +55,20 @@ void RicConvertFractureTemplateUnitFeature::onActionTriggered(bool isChecked)
|
||||
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(pdmUiItem);
|
||||
if (!objHandle) return;
|
||||
|
||||
RimEllipseFractureTemplate* ellipseFractureTemplate = nullptr;
|
||||
objHandle->firstAncestorOrThisOfType(ellipseFractureTemplate);
|
||||
RimFractureTemplate* fractureTemplate = nullptr;
|
||||
objHandle->firstAncestorOrThisOfType(fractureTemplate);
|
||||
|
||||
ellipseFractureTemplate->changeUnits();
|
||||
auto currentUnit = fractureTemplate->fractureTemplateUnit();
|
||||
if (currentUnit == RiaEclipseUnitTools::UNITS_METRIC)
|
||||
{
|
||||
fractureTemplate->convertToUnitSystem(RiaEclipseUnitTools::UNITS_FIELD);
|
||||
}
|
||||
else
|
||||
{
|
||||
fractureTemplate->convertToUnitSystem(RiaEclipseUnitTools::UNITS_METRIC);
|
||||
}
|
||||
|
||||
fractureTemplate->updateConnectedEditors();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -73,16 +82,16 @@ void RicConvertFractureTemplateUnitFeature::setupActionLook(QAction* actionToSet
|
||||
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(pdmUiItem);
|
||||
if (!objHandle) return;
|
||||
|
||||
RimEllipseFractureTemplate* ellipseFractureTemplate = nullptr;
|
||||
objHandle->firstAncestorOrThisOfType(ellipseFractureTemplate);
|
||||
if (!ellipseFractureTemplate) return;
|
||||
RimFractureTemplate* fractureTemplate = nullptr;
|
||||
objHandle->firstAncestorOrThisOfType(fractureTemplate);
|
||||
if (!fractureTemplate) return;
|
||||
|
||||
QString text = "Convert Values to ";
|
||||
if (ellipseFractureTemplate->fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_METRIC)
|
||||
if (fractureTemplate->fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_METRIC)
|
||||
{
|
||||
text += "Field";
|
||||
}
|
||||
else if (ellipseFractureTemplate->fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_FIELD)
|
||||
else if (fractureTemplate->fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_FIELD)
|
||||
{
|
||||
text += "Metric";
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ bool hasNegativeValues(std::vector<double> xs);
|
||||
cvf::ref<RigStimPlanFractureDefinition> RifStimPlanXmlReader::readStimPlanXMLFile(const QString& stimPlanFileName,
|
||||
double conductivityScalingFactor,
|
||||
MirrorMode mirrorMode,
|
||||
RiaEclipseUnitTools::UnitSystem requiredUnit,
|
||||
QString * errorMessage)
|
||||
{
|
||||
RiaLogging::info(QString("Starting to open StimPlan XML file: '%1'").arg(stimPlanFileName));
|
||||
@ -56,7 +57,7 @@ cvf::ref<RigStimPlanFractureDefinition> RifStimPlanXmlReader::readStimPlanXMLFil
|
||||
QXmlStreamReader xmlStream;
|
||||
xmlStream.setDevice(&dataFile);
|
||||
xmlStream.readNext();
|
||||
readStimplanGridAndTimesteps(xmlStream, stimPlanFileData.p(), mirrorMode);
|
||||
readStimplanGridAndTimesteps(xmlStream, stimPlanFileData.p(), mirrorMode, requiredUnit);
|
||||
|
||||
RiaEclipseUnitTools::UnitSystemType unitSystem = stimPlanFileData->unitSet();
|
||||
|
||||
@ -167,8 +168,9 @@ cvf::ref<RigStimPlanFractureDefinition> RifStimPlanXmlReader::readStimPlanXMLFil
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifStimPlanXmlReader::readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream,
|
||||
RigStimPlanFractureDefinition* stimPlanFileData,
|
||||
MirrorMode mirrorMode)
|
||||
RigStimPlanFractureDefinition* stimPlanFileData,
|
||||
MirrorMode mirrorMode,
|
||||
RiaEclipseUnitTools::UnitSystem requiredUnit)
|
||||
{
|
||||
size_t startNegValuesYs = 0;
|
||||
QString gridunit = "unknown";
|
||||
@ -199,22 +201,33 @@ void RifStimPlanXmlReader::readStimplanGridAndTimesteps(QXmlStreamReader &xmlStr
|
||||
|
||||
if (xmlStream.name() == "xs")
|
||||
{
|
||||
size_t dummy;
|
||||
std::vector<double> gridValues;
|
||||
getGriddingValues(xmlStream, gridValues, dummy);
|
||||
stimPlanFileData->m_fileXs = gridValues;
|
||||
std::vector<double> gridValuesXs;
|
||||
{
|
||||
size_t dummy;
|
||||
std::vector<double> gridValues;
|
||||
getGriddingValues(xmlStream, gridValues, dummy);
|
||||
|
||||
stimPlanFileData->generateXsFromFileXs(mirrorMode == MIRROR_AUTO ? !hasNegativeValues(gridValues) : (bool)mirrorMode);
|
||||
gridValuesXs = RifStimPlanXmlReader::valuesInRequiredUnitSystem(stimPlanFileData->m_unitSet, requiredUnit, gridValues);
|
||||
}
|
||||
|
||||
stimPlanFileData->m_fileXs = gridValuesXs;
|
||||
|
||||
stimPlanFileData->generateXsFromFileXs(mirrorMode == MIRROR_AUTO ? !hasNegativeValues(gridValuesXs) : (bool)mirrorMode);
|
||||
}
|
||||
|
||||
else if (xmlStream.name() == "ys")
|
||||
{
|
||||
std::vector<double> gridValues;
|
||||
getGriddingValues(xmlStream, gridValues, startNegValuesYs);
|
||||
std::vector<double> gridValuesYs;
|
||||
{
|
||||
std::vector<double> gridValues;
|
||||
getGriddingValues(xmlStream, gridValues, startNegValuesYs);
|
||||
|
||||
gridValuesYs = RifStimPlanXmlReader::valuesInRequiredUnitSystem(stimPlanFileData->m_unitSet, requiredUnit, gridValues);
|
||||
}
|
||||
|
||||
// Reorder and change sign
|
||||
std::vector<double> ys;
|
||||
for (double y : gridValues)
|
||||
for (double y : gridValuesYs)
|
||||
{
|
||||
ys.insert(ys.begin(), -y);
|
||||
}
|
||||
@ -273,6 +286,37 @@ std::vector<std::vector<double>> RifStimPlanXmlReader::getAllDepthDataAtTimeSte
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<double> RifStimPlanXmlReader::valuesInRequiredUnitSystem(RiaEclipseUnitTools::UnitSystem sourceUnit,
|
||||
RiaEclipseUnitTools::UnitSystem requiredUnit,
|
||||
const std::vector<double>& values)
|
||||
{
|
||||
if (sourceUnit == RiaEclipseUnitTools::UNITS_FIELD && requiredUnit == RiaEclipseUnitTools::UNITS_METRIC)
|
||||
{
|
||||
std::vector<double> convertedValues;
|
||||
for (const auto &valueInFeet : values)
|
||||
{
|
||||
convertedValues.push_back(RiaEclipseUnitTools::feetToMeter(valueInFeet));
|
||||
}
|
||||
|
||||
return convertedValues;
|
||||
}
|
||||
else if (sourceUnit == RiaEclipseUnitTools::UNITS_METRIC && requiredUnit == RiaEclipseUnitTools::UNITS_FIELD)
|
||||
{
|
||||
std::vector<double> convertedValues;
|
||||
for (const auto &valueInMeter : values)
|
||||
{
|
||||
convertedValues.push_back(RiaEclipseUnitTools::meterToFeet(valueInMeter));
|
||||
}
|
||||
|
||||
return convertedValues;
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -38,12 +38,14 @@ public:
|
||||
static cvf::ref<RigStimPlanFractureDefinition> readStimPlanXMLFile(const QString& stimPlanFileName,
|
||||
double conductivityScalingFactor,
|
||||
MirrorMode mirrorMode,
|
||||
RiaEclipseUnitTools::UnitSystem requiredUnit,
|
||||
QString * errorMessage);
|
||||
|
||||
private:
|
||||
static void readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream,
|
||||
RigStimPlanFractureDefinition* stimPlanFileData,
|
||||
MirrorMode mirrorMode);
|
||||
MirrorMode mirrorMode,
|
||||
RiaEclipseUnitTools::UnitSystem requiredUnit);
|
||||
|
||||
static double getAttributeValueDouble(QXmlStreamReader &xmlStream, QString parameterName);
|
||||
static QString getAttributeValueString(QXmlStreamReader &xmlStream, QString parameterName);
|
||||
@ -51,6 +53,9 @@ private:
|
||||
|
||||
static std::vector<std::vector<double>> getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream);
|
||||
|
||||
static std::vector<double> valuesInRequiredUnitSystem(RiaEclipseUnitTools::UnitSystem sourceUnit,
|
||||
RiaEclipseUnitTools::UnitSystem requiredUnit,
|
||||
const std::vector<double>& values);
|
||||
};
|
||||
|
||||
|
||||
|
@ -175,23 +175,11 @@ void RimEllipseFractureTemplate::changeUnits()
|
||||
{
|
||||
if (fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_METRIC)
|
||||
{
|
||||
m_halfLength = RiaEclipseUnitTools::meterToFeet(m_halfLength);
|
||||
m_height = RiaEclipseUnitTools::meterToFeet(m_height);
|
||||
m_width = RiaEclipseUnitTools::meterToInch(m_width);
|
||||
m_wellDiameter = RiaEclipseUnitTools::meterToInch(m_wellDiameter);
|
||||
m_perforationLength = RiaEclipseUnitTools::meterToFeet(m_perforationLength);
|
||||
|
||||
setFractureTemplateUnit(RiaEclipseUnitTools::UNITS_FIELD);
|
||||
convertToUnitSystem(RiaEclipseUnitTools::UNITS_FIELD);
|
||||
}
|
||||
else if (fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_FIELD)
|
||||
{
|
||||
m_halfLength = RiaEclipseUnitTools::feetToMeter(m_halfLength);
|
||||
m_height = RiaEclipseUnitTools::feetToMeter(m_height);
|
||||
m_width = RiaEclipseUnitTools::inchToMeter(m_width);
|
||||
m_wellDiameter = RiaEclipseUnitTools::inchToMeter(m_wellDiameter);
|
||||
m_perforationLength = RiaEclipseUnitTools::feetToMeter(m_perforationLength);
|
||||
|
||||
setFractureTemplateUnit(RiaEclipseUnitTools::UNITS_METRIC);
|
||||
convertToUnitSystem(RiaEclipseUnitTools::UNITS_METRIC);
|
||||
}
|
||||
|
||||
this->updateConnectedEditors();
|
||||
@ -357,6 +345,38 @@ std::vector<std::pair<QString, QString>> RimEllipseFractureTemplate::uiResultNam
|
||||
return propertyNamesAndUnits;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEllipseFractureTemplate::convertToUnitSystem(RiaEclipseUnitTools::UnitSystem neededUnit)
|
||||
{
|
||||
if (neededUnit == fractureTemplateUnit())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (neededUnit == RiaEclipseUnitTools::UNITS_FIELD)
|
||||
{
|
||||
m_halfLength = RiaEclipseUnitTools::meterToFeet(m_halfLength);
|
||||
m_height = RiaEclipseUnitTools::meterToFeet(m_height);
|
||||
m_width = RiaEclipseUnitTools::meterToInch(m_width);
|
||||
m_wellDiameter = RiaEclipseUnitTools::meterToInch(m_wellDiameter);
|
||||
m_perforationLength = RiaEclipseUnitTools::meterToFeet(m_perforationLength);
|
||||
|
||||
setFractureTemplateUnit(RiaEclipseUnitTools::UNITS_FIELD);
|
||||
}
|
||||
else if (neededUnit == RiaEclipseUnitTools::UNITS_METRIC)
|
||||
{
|
||||
m_halfLength = RiaEclipseUnitTools::feetToMeter(m_halfLength);
|
||||
m_height = RiaEclipseUnitTools::feetToMeter(m_height);
|
||||
m_width = RiaEclipseUnitTools::inchToMeter(m_width);
|
||||
m_wellDiameter = RiaEclipseUnitTools::inchToMeter(m_wellDiameter);
|
||||
m_perforationLength = RiaEclipseUnitTools::feetToMeter(m_perforationLength);
|
||||
|
||||
setFractureTemplateUnit(RiaEclipseUnitTools::UNITS_METRIC);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -66,6 +66,9 @@ public:
|
||||
|
||||
virtual std::vector<std::pair<QString, QString>> uiResultNamesWithUnit() const override;
|
||||
|
||||
|
||||
virtual void convertToUnitSystem(RiaEclipseUnitTools::UnitSystem neededUnit) override;
|
||||
|
||||
protected:
|
||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering);
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
|
@ -141,6 +141,9 @@ public:
|
||||
double dFactor() const;
|
||||
double kh() const;
|
||||
|
||||
virtual void convertToUnitSystem(RiaEclipseUnitTools::UnitSystem neededUnit) = 0;
|
||||
|
||||
|
||||
protected:
|
||||
virtual caf::PdmFieldHandle* userDescriptionField() override;
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
|
@ -242,12 +242,17 @@ void RimStimPlanFractureTemplate::loadDataAndUpdate()
|
||||
m_stimPlanFractureDefinitionData = RifStimPlanXmlReader::readStimPlanXMLFile( m_stimPlanFileName(),
|
||||
m_conductivityScalingFactor(),
|
||||
RifStimPlanXmlReader::MIRROR_AUTO,
|
||||
fractureTemplateUnit(),
|
||||
&errorMessage);
|
||||
if (errorMessage.size() > 0) RiaLogging::error(errorMessage);
|
||||
|
||||
if (m_stimPlanFractureDefinitionData.notNull())
|
||||
{
|
||||
setFractureTemplateUnit(m_stimPlanFractureDefinitionData->unitSet());
|
||||
if (fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_UNKNOWN)
|
||||
{
|
||||
setFractureTemplateUnit(m_stimPlanFractureDefinitionData->unitSet());
|
||||
}
|
||||
|
||||
m_readError = false;
|
||||
}
|
||||
else
|
||||
@ -491,6 +496,18 @@ bool RimStimPlanFractureTemplate::showStimPlanMesh() const
|
||||
return m_showStimPlanMesh_OBSOLETE();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimStimPlanFractureTemplate::convertToUnitSystem(RiaEclipseUnitTools::UnitSystem neededUnit)
|
||||
{
|
||||
setFractureTemplateUnit(neededUnit);
|
||||
|
||||
m_readError = false;
|
||||
loadDataAndUpdate();
|
||||
setDefaultsBasedOnXMLfile();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -90,6 +90,9 @@ public:
|
||||
|
||||
bool showStimPlanMesh() const;
|
||||
|
||||
|
||||
virtual void convertToUnitSystem(RiaEclipseUnitTools::UnitSystem neededUnit) override;
|
||||
|
||||
protected:
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
|
||||
|
@ -542,10 +542,12 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
|
||||
}
|
||||
else if (dynamic_cast<RimStimPlanFractureTemplate*>(uiItem))
|
||||
{
|
||||
menuBuilder << "RicPasteEllipseFractureFeature";
|
||||
//menuBuilder << "RicPasteEllipseFractureFeature";
|
||||
menuBuilder.addSeparator();
|
||||
menuBuilder << "RicNewEllipseFractureTemplateFeature";
|
||||
menuBuilder << "RicNewStimPlanFractureTemplateFeature";
|
||||
menuBuilder << "Separator";
|
||||
menuBuilder << "RicConvertFractureTemplateUnitFeature";
|
||||
}
|
||||
else if (dynamic_cast<RimEllipseFractureTemplate*>(uiItem))
|
||||
{
|
||||
|
@ -125,7 +125,7 @@ private:
|
||||
double maxY() const;
|
||||
|
||||
private:
|
||||
RiaEclipseUnitTools::UnitSystem m_unitSet;
|
||||
RiaEclipseUnitTools::UnitSystem m_unitSet; // To be deleted
|
||||
std::vector<double> m_fileXs;
|
||||
std::vector<double> m_Ys;
|
||||
std::vector<double> m_timeSteps;
|
||||
|
Loading…
Reference in New Issue
Block a user