diff --git a/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.cpp index 4299dca69c..a4726a4ff3 100644 --- a/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.cpp @@ -153,6 +153,7 @@ QString RimStimPlanFractureTemplate::fileNameWithOutPath() void RimStimPlanFractureTemplate::readStimPlanXMLFile(QString * errorMessage) { m_stimPlanFractureDefinitionData = new RigStimPlanFractureDefinition; + size_t startingNegXsValues = 0; { QFile dataFile(m_stimPlanFileName()); if (!dataFile.open(QFile::ReadOnly)) @@ -164,7 +165,7 @@ void RimStimPlanFractureTemplate::readStimPlanXMLFile(QString * errorMessage) QXmlStreamReader xmlStream; xmlStream.setDevice(&dataFile); xmlStream.readNext(); - readStimplanGridAndTimesteps(xmlStream); + startingNegXsValues = readStimplanGridAndTimesteps(xmlStream); if (xmlStream.hasError()) { qDebug() << "Error: Failed to parse file " << dataFile.fileName(); @@ -208,7 +209,8 @@ void RimStimPlanFractureTemplate::readStimPlanXMLFile(QString * errorMessage) else if (xmlStream2.name() == "time") { double timeStepValue = getAttributeValueDouble(xmlStream2, "value"); - std::vector> propertyValuesAtTimestep = getAllDepthDataAtTimeStep(xmlStream2); + + std::vector> propertyValuesAtTimestep = getAllDepthDataAtTimeStep(xmlStream2, startingNegXsValues); bool valuesOK = numberOfParameterValuesOK(propertyValuesAtTimestep); if (!valuesOK) @@ -268,9 +270,12 @@ std::vector> RimStimPlanFractureTemplate::getDataAtTimeIndex //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimStimPlanFractureTemplate::readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream) +size_t RimStimPlanFractureTemplate::readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream) { + size_t startNegValuesXs = 0; + size_t startNegValuesYs = 0; + xmlStream.readNext(); //First, read time steps and grid to establish data structures for putting data into later. @@ -283,16 +288,17 @@ void RimStimPlanFractureTemplate::readStimplanGridAndTimesteps(QXmlStreamReader if (xmlStream.name() == "xs") { -// if (getGriddingValues(xmlStream)[0] < 0.0) -// { -// qDebug() << getGriddingValues(xmlStream)[0]; -// } - m_stimPlanFractureDefinitionData->gridXs = getGriddingValues(xmlStream); + std::vector gridValues; + getGriddingValues(xmlStream, gridValues, startNegValuesXs); + m_stimPlanFractureDefinitionData->gridXs = gridValues; } else if (xmlStream.name() == "ys") { - m_stimPlanFractureDefinitionData->gridYs = getGriddingValues(xmlStream); + std::vector gridValues; + getGriddingValues(xmlStream, gridValues, startNegValuesYs); + m_stimPlanFractureDefinitionData->gridYs = gridValues; + m_stimPlanFractureDefinitionData->reorderYgridToDepths(); } @@ -306,12 +312,19 @@ void RimStimPlanFractureTemplate::readStimplanGridAndTimesteps(QXmlStreamReader } } } + + if (startNegValuesYs > 0) + { + qDebug() << "Error in reading XML file. Negative depth values detected"; + } + return startNegValuesXs; + } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector> RimStimPlanFractureTemplate::getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream) +std::vector> RimStimPlanFractureTemplate::getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream, size_t startingNegValuesXs) { std::vector> propertyValuesAtTimestep; @@ -329,11 +342,16 @@ std::vector> RimStimPlanFractureTemplate::getAllDepthDataAt if (xmlStream.isCDATA()) { QString depthDataStr = xmlStream.text().toString(); - for (QString value : depthDataStr.split(' ')) + for (int i = 0; i < depthDataStr.split(' ').size(); i++) { - if (value != "") + if (i < startingNegValuesXs) continue; + else { - propertyValuesAtDepth.push_back(value.toDouble()); + QString value = depthDataStr.split(' ')[i]; + if ( value != "") + { + propertyValuesAtDepth.push_back(value.toDouble()); + } } } } @@ -377,16 +395,21 @@ void RimStimPlanFractureTemplate::setDepthOfWellPathAtFracture() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector RimStimPlanFractureTemplate::getGriddingValues(QXmlStreamReader &xmlStream) +void RimStimPlanFractureTemplate::getGriddingValues(QXmlStreamReader &xmlStream, std::vector& gridValues, size_t& startNegValues) { - std::vector gridValues; QString gridValuesString = xmlStream.readElementText().replace('\n', ' '); for (QString value : gridValuesString.split(' ')) { - if (value.size()>0) gridValues.push_back(value.toDouble()); + if (value.size() > 0) + { + double gridValue = value.toDouble(); + if (gridValue > -1e-5) //tolerance of 1e-5 + { + gridValues.push_back(gridValue); + } + else startNegValues++; + } } - - return gridValues; } //-------------------------------------------------------------------------------------------------- @@ -435,7 +458,6 @@ void RimStimPlanFractureTemplate::fractureGeometry(std::vector* node std::vector xCoords = getNegAndPosXcoords(); - //std::vector xCoords = m_stimPlanFractureDefinitionData->gridXs; cvf::uint lenXcoords = static_cast(xCoords.size()); std::vector adjustedDepths = adjustedDepthCoordsAroundWellPathPosition(); diff --git a/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h b/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h index e9e4a669f6..6ec12c5cf0 100644 --- a/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h +++ b/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h @@ -80,13 +80,13 @@ private: void readStimPlanXMLFile(QString * errorMessage); - void readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream); + size_t readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream); static double getAttributeValueDouble(QXmlStreamReader &xmlStream, QString parameterName); static QString getAttributeValueString(QXmlStreamReader &xmlStream, QString parameterName); - static std::vector getGriddingValues(QXmlStreamReader &xmlStream); - std::vector> getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream); + void getGriddingValues(QXmlStreamReader &xmlStream, std::vector& gridValues, size_t& startNegValues); + std::vector> getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream, size_t startingNegValuesXs); caf::PdmField m_stimPlanFileName; cvf::ref m_stimPlanFractureDefinitionData;