#1247 - pre-proto - Adding possibility for reading XML-files with negative coordinates for grid in X-direction (values for neg coordinates are ignored when reading file).

This commit is contained in:
astridkbjorke 2017-02-27 10:50:55 +01:00
parent de8dc2db3c
commit 374ed0130b
2 changed files with 44 additions and 22 deletions

View File

@ -153,6 +153,7 @@ QString RimStimPlanFractureTemplate::fileNameWithOutPath()
void RimStimPlanFractureTemplate::readStimPlanXMLFile(QString * errorMessage) void RimStimPlanFractureTemplate::readStimPlanXMLFile(QString * errorMessage)
{ {
m_stimPlanFractureDefinitionData = new RigStimPlanFractureDefinition; m_stimPlanFractureDefinitionData = new RigStimPlanFractureDefinition;
size_t startingNegXsValues = 0;
{ {
QFile dataFile(m_stimPlanFileName()); QFile dataFile(m_stimPlanFileName());
if (!dataFile.open(QFile::ReadOnly)) if (!dataFile.open(QFile::ReadOnly))
@ -164,7 +165,7 @@ void RimStimPlanFractureTemplate::readStimPlanXMLFile(QString * errorMessage)
QXmlStreamReader xmlStream; QXmlStreamReader xmlStream;
xmlStream.setDevice(&dataFile); xmlStream.setDevice(&dataFile);
xmlStream.readNext(); xmlStream.readNext();
readStimplanGridAndTimesteps(xmlStream); startingNegXsValues = readStimplanGridAndTimesteps(xmlStream);
if (xmlStream.hasError()) if (xmlStream.hasError())
{ {
qDebug() << "Error: Failed to parse file " << dataFile.fileName(); qDebug() << "Error: Failed to parse file " << dataFile.fileName();
@ -208,7 +209,8 @@ void RimStimPlanFractureTemplate::readStimPlanXMLFile(QString * errorMessage)
else if (xmlStream2.name() == "time") else if (xmlStream2.name() == "time")
{ {
double timeStepValue = getAttributeValueDouble(xmlStream2, "value"); double timeStepValue = getAttributeValueDouble(xmlStream2, "value");
std::vector<std::vector<double>> propertyValuesAtTimestep = getAllDepthDataAtTimeStep(xmlStream2);
std::vector<std::vector<double>> propertyValuesAtTimestep = getAllDepthDataAtTimeStep(xmlStream2, startingNegXsValues);
bool valuesOK = numberOfParameterValuesOK(propertyValuesAtTimestep); bool valuesOK = numberOfParameterValuesOK(propertyValuesAtTimestep);
if (!valuesOK) if (!valuesOK)
@ -268,9 +270,12 @@ std::vector<std::vector<double>> RimStimPlanFractureTemplate::getDataAtTimeIndex
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimStimPlanFractureTemplate::readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream) size_t RimStimPlanFractureTemplate::readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream)
{ {
size_t startNegValuesXs = 0;
size_t startNegValuesYs = 0;
xmlStream.readNext(); xmlStream.readNext();
//First, read time steps and grid to establish data structures for putting data into later. //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 (xmlStream.name() == "xs")
{ {
// if (getGriddingValues(xmlStream)[0] < 0.0) std::vector<double> gridValues;
// { getGriddingValues(xmlStream, gridValues, startNegValuesXs);
// qDebug() << getGriddingValues(xmlStream)[0]; m_stimPlanFractureDefinitionData->gridXs = gridValues;
// }
m_stimPlanFractureDefinitionData->gridXs = getGriddingValues(xmlStream);
} }
else if (xmlStream.name() == "ys") else if (xmlStream.name() == "ys")
{ {
m_stimPlanFractureDefinitionData->gridYs = getGriddingValues(xmlStream); std::vector<double> gridValues;
getGriddingValues(xmlStream, gridValues, startNegValuesYs);
m_stimPlanFractureDefinitionData->gridYs = gridValues;
m_stimPlanFractureDefinitionData->reorderYgridToDepths(); 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<std::vector<double>> RimStimPlanFractureTemplate::getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream) std::vector<std::vector<double>> RimStimPlanFractureTemplate::getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream, size_t startingNegValuesXs)
{ {
std::vector<std::vector<double>> propertyValuesAtTimestep; std::vector<std::vector<double>> propertyValuesAtTimestep;
@ -329,11 +342,16 @@ std::vector<std::vector<double>> RimStimPlanFractureTemplate::getAllDepthDataAt
if (xmlStream.isCDATA()) if (xmlStream.isCDATA())
{ {
QString depthDataStr = xmlStream.text().toString(); 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<double> RimStimPlanFractureTemplate::getGriddingValues(QXmlStreamReader &xmlStream) void RimStimPlanFractureTemplate::getGriddingValues(QXmlStreamReader &xmlStream, std::vector<double>& gridValues, size_t& startNegValues)
{ {
std::vector<double> gridValues;
QString gridValuesString = xmlStream.readElementText().replace('\n', ' '); QString gridValuesString = xmlStream.readElementText().replace('\n', ' ');
for (QString value : gridValuesString.split(' ')) 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<cvf::Vec3f>* node
std::vector<double> xCoords = getNegAndPosXcoords(); std::vector<double> xCoords = getNegAndPosXcoords();
//std::vector<double> xCoords = m_stimPlanFractureDefinitionData->gridXs;
cvf::uint lenXcoords = static_cast<cvf::uint>(xCoords.size()); cvf::uint lenXcoords = static_cast<cvf::uint>(xCoords.size());
std::vector<double> adjustedDepths = adjustedDepthCoordsAroundWellPathPosition(); std::vector<double> adjustedDepths = adjustedDepthCoordsAroundWellPathPosition();

View File

@ -80,13 +80,13 @@ private:
void readStimPlanXMLFile(QString * errorMessage); void readStimPlanXMLFile(QString * errorMessage);
void readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream); size_t readStimplanGridAndTimesteps(QXmlStreamReader &xmlStream);
static double getAttributeValueDouble(QXmlStreamReader &xmlStream, QString parameterName); static double getAttributeValueDouble(QXmlStreamReader &xmlStream, QString parameterName);
static QString getAttributeValueString(QXmlStreamReader &xmlStream, QString parameterName); static QString getAttributeValueString(QXmlStreamReader &xmlStream, QString parameterName);
static std::vector<double> getGriddingValues(QXmlStreamReader &xmlStream); void getGriddingValues(QXmlStreamReader &xmlStream, std::vector<double>& gridValues, size_t& startNegValues);
std::vector<std::vector<double>> getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream); std::vector<std::vector<double>> getAllDepthDataAtTimeStep(QXmlStreamReader &xmlStream, size_t startingNegValuesXs);
caf::PdmField<QString> m_stimPlanFileName; caf::PdmField<QString> m_stimPlanFileName;
cvf::ref<RigStimPlanFractureDefinition> m_stimPlanFractureDefinitionData; cvf::ref<RigStimPlanFractureDefinition> m_stimPlanFractureDefinitionData;