mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#7493 Handle units in fracture group statistics export.
This commit is contained in:
parent
49c2b16058
commit
acd483f04b
@ -21,6 +21,7 @@
|
|||||||
// #include "RiaEclipseUnitTools.h"
|
// #include "RiaEclipseUnitTools.h"
|
||||||
|
|
||||||
// #include "RimStimPlanModel.h"
|
// #include "RimStimPlanModel.h"
|
||||||
|
#include "RiaDefines.h"
|
||||||
#include "RigSlice2D.h"
|
#include "RigSlice2D.h"
|
||||||
#include "cafAssert.h"
|
#include "cafAssert.h"
|
||||||
|
|
||||||
@ -31,11 +32,12 @@
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RifFractureGroupStatisticsExporter::writeAsStimPlanXml( const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
bool RifFractureGroupStatisticsExporter::writeAsStimPlanXml( const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
||||||
const std::vector<QString>& properties,
|
const std::vector<std::pair<QString, QString>>& properties,
|
||||||
const QString& filePath,
|
const QString& filePath,
|
||||||
const std::vector<double>& gridXs,
|
const std::vector<double>& gridXs,
|
||||||
const std::vector<double>& gridYs,
|
const std::vector<double>& gridYs,
|
||||||
double time )
|
double time,
|
||||||
|
RiaDefines::EclipseUnitSystem unitSystem )
|
||||||
{
|
{
|
||||||
QFile data( filePath );
|
QFile data( filePath );
|
||||||
if ( !data.open( QFile::WriteOnly | QFile::Truncate ) )
|
if ( !data.open( QFile::WriteOnly | QFile::Truncate ) )
|
||||||
@ -45,7 +47,7 @@ bool RifFractureGroupStatisticsExporter::writeAsStimPlanXml( const std::vector<s
|
|||||||
|
|
||||||
QTextStream stream( &data );
|
QTextStream stream( &data );
|
||||||
appendHeaderToStream( stream );
|
appendHeaderToStream( stream );
|
||||||
appendGridDimensionsToStream( stream, gridXs, gridYs );
|
appendGridDimensionsToStream( stream, gridXs, gridYs, unitSystem );
|
||||||
appendPropertiesToStream( stream, statistics, properties, gridYs, time );
|
appendPropertiesToStream( stream, statistics, properties, gridYs, time );
|
||||||
appendFooterToStream( stream );
|
appendFooterToStream( stream );
|
||||||
|
|
||||||
@ -65,9 +67,9 @@ void RifFractureGroupStatisticsExporter::appendHeaderToStream( QTextStream& stre
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RifFractureGroupStatisticsExporter::appendPropertiesToStream( QTextStream& stream,
|
void RifFractureGroupStatisticsExporter::appendPropertiesToStream( QTextStream& stream,
|
||||||
const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
||||||
const std::vector<QString>& properties,
|
const std::vector<std::pair<QString, QString>>& properties,
|
||||||
const std::vector<double>& gridYs,
|
const std::vector<double>& gridYs,
|
||||||
double time )
|
double time )
|
||||||
{
|
{
|
||||||
CAF_ASSERT( statistics.size() == properties.size() );
|
CAF_ASSERT( statistics.size() == properties.size() );
|
||||||
|
|
||||||
@ -75,10 +77,8 @@ void RifFractureGroupStatisticsExporter::appendPropertiesToStream( QTextStream&
|
|||||||
|
|
||||||
for ( size_t s = 0; s < statistics.size(); s++ )
|
for ( size_t s = 0; s < statistics.size(); s++ )
|
||||||
{
|
{
|
||||||
QString propertyName = properties[s];
|
QString propertyName = properties[s].first;
|
||||||
|
QString propertyUnit = properties[s].second;
|
||||||
// TODO:
|
|
||||||
QString propertyUnit = "cm";
|
|
||||||
|
|
||||||
stream << QString( "<property name=\"%1\" uom=\"%2\">" ).arg( propertyName ).arg( propertyUnit ) << endl;
|
stream << QString( "<property name=\"%1\" uom=\"%2\">" ).arg( propertyName ).arg( propertyUnit ) << endl;
|
||||||
stream << QString( "<time value=\"%1\">" ).arg( time ) << endl;
|
stream << QString( "<time value=\"%1\">" ).arg( time ) << endl;
|
||||||
@ -105,11 +105,14 @@ void RifFractureGroupStatisticsExporter::appendPropertiesToStream( QTextStream&
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RifFractureGroupStatisticsExporter::appendGridDimensionsToStream( QTextStream& stream,
|
void RifFractureGroupStatisticsExporter::appendGridDimensionsToStream( QTextStream& stream,
|
||||||
const std::vector<double>& gridXs,
|
const std::vector<double>& gridXs,
|
||||||
const std::vector<double>& gridYs )
|
const std::vector<double>& gridYs,
|
||||||
|
RiaDefines::EclipseUnitSystem unitSystem )
|
||||||
{
|
{
|
||||||
stream << QString( "<grid xCount=\"%1\" yCount=\"%2\">" ).arg( gridXs.size() ).arg( gridYs.size() ) << endl;
|
QString unitString = getStringForUnitSystem( unitSystem );
|
||||||
|
stream << QString( "<grid xCount=\"%1\" yCount=\"%2\" uom=\"%3\">" ).arg( gridXs.size() ).arg( gridYs.size() ).arg( unitString )
|
||||||
|
<< endl;
|
||||||
|
|
||||||
stream << "<xs>[";
|
stream << "<xs>[";
|
||||||
for ( auto x : gridXs )
|
for ( auto x : gridXs )
|
||||||
@ -123,6 +126,7 @@ void RifFractureGroupStatisticsExporter::appendGridDimensionsToStream( QTextStre
|
|||||||
|
|
||||||
stream << "</grid>" << endl;
|
stream << "</grid>" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -130,3 +134,16 @@ void RifFractureGroupStatisticsExporter::appendFooterToStream( QTextStream& stre
|
|||||||
{
|
{
|
||||||
stream << "</contours>" << endl;
|
stream << "</contours>" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString RifFractureGroupStatisticsExporter::getStringForUnitSystem( RiaDefines::EclipseUnitSystem unitSystem )
|
||||||
|
{
|
||||||
|
if ( unitSystem == RiaDefines::EclipseUnitSystem::UNITS_METRIC )
|
||||||
|
return "m";
|
||||||
|
else if ( unitSystem == RiaDefines::EclipseUnitSystem::UNITS_FIELD )
|
||||||
|
return "ft";
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "RiaDefines.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -33,21 +35,25 @@ class RifFractureGroupStatisticsExporter
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static bool writeAsStimPlanXml( const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
static bool writeAsStimPlanXml( const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
||||||
const std::vector<QString>& properties,
|
const std::vector<std::pair<QString, QString>>& properties,
|
||||||
const QString& filePath,
|
const QString& filePath,
|
||||||
const std::vector<double>& gridXs,
|
const std::vector<double>& gridXs,
|
||||||
const std::vector<double>& gridYs,
|
const std::vector<double>& gridYs,
|
||||||
double time );
|
double time,
|
||||||
|
RiaDefines::EclipseUnitSystem unitSystem );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void appendHeaderToStream( QTextStream& stream );
|
static void appendHeaderToStream( QTextStream& stream );
|
||||||
static void appendGridDimensionsToStream( QTextStream& stream,
|
static void appendGridDimensionsToStream( QTextStream& stream,
|
||||||
const std::vector<double>& gridXs,
|
const std::vector<double>& gridXs,
|
||||||
const std::vector<double>& gridYs );
|
const std::vector<double>& gridYs,
|
||||||
|
RiaDefines::EclipseUnitSystem unitSystem );
|
||||||
static void appendPropertiesToStream( QTextStream& stream,
|
static void appendPropertiesToStream( QTextStream& stream,
|
||||||
const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
||||||
const std::vector<QString>& properties,
|
const std::vector<std::pair<QString, QString>>& properties,
|
||||||
const std::vector<double>& gridYs,
|
const std::vector<double>& gridYs,
|
||||||
double time );
|
double time );
|
||||||
static void appendFooterToStream( QTextStream& stream );
|
static void appendFooterToStream( QTextStream& stream );
|
||||||
|
|
||||||
|
static QString getStringForUnitSystem( RiaDefines::EclipseUnitSystem unitSystem );
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "RimFractureGroupStatistics.h"
|
#include "RimFractureGroupStatistics.h"
|
||||||
|
|
||||||
|
#include "RiaDefines.h"
|
||||||
#include "RiaLogging.h"
|
#include "RiaLogging.h"
|
||||||
#include "RiaPreferences.h"
|
#include "RiaPreferences.h"
|
||||||
|
|
||||||
@ -35,6 +36,7 @@
|
|||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
namespace caf
|
namespace caf
|
||||||
@ -139,7 +141,7 @@ void RimFractureGroupStatistics::computeStatistics()
|
|||||||
std::vector<cvf::ref<RigStimPlanFractureDefinition>> stimPlanFractureDefinitions =
|
std::vector<cvf::ref<RigStimPlanFractureDefinition>> stimPlanFractureDefinitions =
|
||||||
readFractureDefinitions( m_filePaths.v(), unitSystem );
|
readFractureDefinitions( m_filePaths.v(), unitSystem );
|
||||||
|
|
||||||
std::set<QString> availableResults = findAllResultNames( stimPlanFractureDefinitions );
|
std::set<std::pair<QString, QString>> availableResults = findAllResultNames( stimPlanFractureDefinitions );
|
||||||
|
|
||||||
std::map<std::pair<RimFractureGroupStatistics::StatisticsType, QString>, std::shared_ptr<RigSlice2D>> statisticsGridsAll;
|
std::map<std::pair<RimFractureGroupStatistics::StatisticsType, QString>, std::shared_ptr<RigSlice2D>> statisticsGridsAll;
|
||||||
|
|
||||||
@ -155,10 +157,10 @@ void RimFractureGroupStatistics::computeStatistics()
|
|||||||
|
|
||||||
for ( auto result : availableResults )
|
for ( auto result : availableResults )
|
||||||
{
|
{
|
||||||
RiaLogging::info( QString( "Creating statistics for result: %1" ).arg( result ) );
|
RiaLogging::info( QString( "Creating statistics for result: %1" ).arg( result.first ) );
|
||||||
|
|
||||||
std::vector<cvf::cref<RigFractureGrid>> fractureGrids =
|
std::vector<cvf::cref<RigFractureGrid>> fractureGrids =
|
||||||
createFractureGrids( stimPlanFractureDefinitions, unitSystem, result );
|
createFractureGrids( stimPlanFractureDefinitions, unitSystem, result.first );
|
||||||
|
|
||||||
auto [minX, maxX, minY, maxY] = findExtentsOfGrids( fractureGrids );
|
auto [minX, maxX, minY, maxY] = findExtentsOfGrids( fractureGrids );
|
||||||
|
|
||||||
@ -193,11 +195,12 @@ void RimFractureGroupStatistics::computeStatistics()
|
|||||||
|
|
||||||
for ( auto [statType, slice] : statisticsGrids )
|
for ( auto [statType, slice] : statisticsGrids )
|
||||||
{
|
{
|
||||||
auto key = std::make_pair( statType, result );
|
auto key = std::make_pair( statType, result.first );
|
||||||
statisticsGridsAll[key] = slice;
|
statisticsGridsAll[key] = slice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString tempDir = QDir::tempPath();
|
||||||
for ( size_t i = 0; i < caf::AppEnum<RimFractureGroupStatistics::StatisticsType>::size(); ++i )
|
for ( size_t i = 0; i < caf::AppEnum<RimFractureGroupStatistics::StatisticsType>::size(); ++i )
|
||||||
{
|
{
|
||||||
caf::AppEnum<RimFractureGroupStatistics::StatisticsType> t =
|
caf::AppEnum<RimFractureGroupStatistics::StatisticsType> t =
|
||||||
@ -206,18 +209,24 @@ void RimFractureGroupStatistics::computeStatistics()
|
|||||||
|
|
||||||
// Get the all the properties for this statistics type
|
// Get the all the properties for this statistics type
|
||||||
std::vector<std::shared_ptr<RigSlice2D>> statisticsSlices;
|
std::vector<std::shared_ptr<RigSlice2D>> statisticsSlices;
|
||||||
std::vector<QString> properties;
|
std::vector<std::pair<QString, QString>> properties;
|
||||||
for ( auto result : availableResults )
|
for ( auto result : availableResults )
|
||||||
{
|
{
|
||||||
properties.push_back( result );
|
properties.push_back( result );
|
||||||
std::shared_ptr<RigSlice2D> slice = statisticsGridsAll[std::make_pair( t.value(), result )];
|
std::shared_ptr<RigSlice2D> slice = statisticsGridsAll[std::make_pair( t.value(), result.first )];
|
||||||
statisticsSlices.push_back( slice );
|
statisticsSlices.push_back( slice );
|
||||||
|
|
||||||
writeStatisticsToCsv( "/tmp/" + text + "-" + result + ".csv", *slice );
|
writeStatisticsToCsv( tempDir + "/" + text + "-" + result.first + ".csv", *slice );
|
||||||
}
|
}
|
||||||
|
|
||||||
QString xmlFilePath = "/tmp/fracture_group/" + text + ".xml";
|
QString xmlFilePath = tempDir + "/fracture_group/" + text + ".xml";
|
||||||
RifFractureGroupStatisticsExporter::writeAsStimPlanXml( statisticsSlices, properties, xmlFilePath, gridXs, gridYs, timeStep );
|
RifFractureGroupStatisticsExporter::writeAsStimPlanXml( statisticsSlices,
|
||||||
|
properties,
|
||||||
|
xmlFilePath,
|
||||||
|
gridXs,
|
||||||
|
gridYs,
|
||||||
|
timeStep,
|
||||||
|
unitSystem );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,15 +267,15 @@ std::vector<cvf::ref<RigStimPlanFractureDefinition>>
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::set<QString> RimFractureGroupStatistics::findAllResultNames(
|
std::set<std::pair<QString, QString>> RimFractureGroupStatistics::findAllResultNames(
|
||||||
const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& stimPlanFractureDefinitions )
|
const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& stimPlanFractureDefinitions )
|
||||||
{
|
{
|
||||||
std::set<QString> resultNames;
|
std::set<std::pair<QString, QString>> resultNames;
|
||||||
for ( auto stimPlanFractureDefinitionData : stimPlanFractureDefinitions )
|
for ( auto stimPlanFractureDefinitionData : stimPlanFractureDefinitions )
|
||||||
{
|
{
|
||||||
for ( auto [resultName, unit] : stimPlanFractureDefinitionData->getStimPlanPropertyNamesUnits() )
|
for ( auto propertyNameWithUnit : stimPlanFractureDefinitionData->getStimPlanPropertyNamesUnits() )
|
||||||
{
|
{
|
||||||
resultNames.insert( resultName );
|
resultNames.insert( propertyNameWithUnit );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ protected:
|
|||||||
RiaDefines::EclipseUnitSystem unitSystem,
|
RiaDefines::EclipseUnitSystem unitSystem,
|
||||||
const QString& resultName );
|
const QString& resultName );
|
||||||
|
|
||||||
static std::set<QString>
|
static std::set<std::pair<QString, QString>>
|
||||||
findAllResultNames( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& stimPlanFractureDefinitions );
|
findAllResultNames( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& stimPlanFractureDefinitions );
|
||||||
|
|
||||||
static std::tuple<double, double, double, double>
|
static std::tuple<double, double, double, double>
|
||||||
|
Loading…
Reference in New Issue
Block a user