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 "RimStimPlanModel.h"
|
||||
#include "RiaDefines.h"
|
||||
#include "RigSlice2D.h"
|
||||
#include "cafAssert.h"
|
||||
|
||||
@ -31,11 +32,12 @@
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
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 std::vector<double>& gridXs,
|
||||
const std::vector<double>& gridYs,
|
||||
double time )
|
||||
double time,
|
||||
RiaDefines::EclipseUnitSystem unitSystem )
|
||||
{
|
||||
QFile data( filePath );
|
||||
if ( !data.open( QFile::WriteOnly | QFile::Truncate ) )
|
||||
@ -45,7 +47,7 @@ bool RifFractureGroupStatisticsExporter::writeAsStimPlanXml( const std::vector<s
|
||||
|
||||
QTextStream stream( &data );
|
||||
appendHeaderToStream( stream );
|
||||
appendGridDimensionsToStream( stream, gridXs, gridYs );
|
||||
appendGridDimensionsToStream( stream, gridXs, gridYs, unitSystem );
|
||||
appendPropertiesToStream( stream, statistics, properties, gridYs, time );
|
||||
appendFooterToStream( stream );
|
||||
|
||||
@ -65,9 +67,9 @@ void RifFractureGroupStatisticsExporter::appendHeaderToStream( QTextStream& stre
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifFractureGroupStatisticsExporter::appendPropertiesToStream( QTextStream& stream,
|
||||
const std::vector<std::shared_ptr<RigSlice2D>>& statistics,
|
||||
const std::vector<QString>& properties,
|
||||
const std::vector<double>& gridYs,
|
||||
double time )
|
||||
const std::vector<std::pair<QString, QString>>& properties,
|
||||
const std::vector<double>& gridYs,
|
||||
double time )
|
||||
{
|
||||
CAF_ASSERT( statistics.size() == properties.size() );
|
||||
|
||||
@ -75,10 +77,8 @@ void RifFractureGroupStatisticsExporter::appendPropertiesToStream( QTextStream&
|
||||
|
||||
for ( size_t s = 0; s < statistics.size(); s++ )
|
||||
{
|
||||
QString propertyName = properties[s];
|
||||
|
||||
// TODO:
|
||||
QString propertyUnit = "cm";
|
||||
QString propertyName = properties[s].first;
|
||||
QString propertyUnit = properties[s].second;
|
||||
|
||||
stream << QString( "<property name=\"%1\" uom=\"%2\">" ).arg( propertyName ).arg( propertyUnit ) << endl;
|
||||
stream << QString( "<time value=\"%1\">" ).arg( time ) << endl;
|
||||
@ -105,11 +105,14 @@ void RifFractureGroupStatisticsExporter::appendPropertiesToStream( QTextStream&
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifFractureGroupStatisticsExporter::appendGridDimensionsToStream( QTextStream& stream,
|
||||
const std::vector<double>& gridXs,
|
||||
const std::vector<double>& gridYs )
|
||||
void RifFractureGroupStatisticsExporter::appendGridDimensionsToStream( QTextStream& stream,
|
||||
const std::vector<double>& gridXs,
|
||||
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>[";
|
||||
for ( auto x : gridXs )
|
||||
@ -123,6 +126,7 @@ void RifFractureGroupStatisticsExporter::appendGridDimensionsToStream( QTextStre
|
||||
|
||||
stream << "</grid>" << endl;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -130,3 +134,16 @@ void RifFractureGroupStatisticsExporter::appendFooterToStream( QTextStream& stre
|
||||
{
|
||||
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
|
||||
|
||||
#include "RiaDefines.h"
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
@ -33,21 +35,25 @@ class RifFractureGroupStatisticsExporter
|
||||
{
|
||||
public:
|
||||
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 std::vector<double>& gridXs,
|
||||
const std::vector<double>& gridYs,
|
||||
double time );
|
||||
double time,
|
||||
RiaDefines::EclipseUnitSystem unitSystem );
|
||||
|
||||
private:
|
||||
static void appendHeaderToStream( QTextStream& stream );
|
||||
static void appendGridDimensionsToStream( QTextStream& stream,
|
||||
const std::vector<double>& gridXs,
|
||||
const std::vector<double>& gridYs );
|
||||
static void appendGridDimensionsToStream( QTextStream& stream,
|
||||
const std::vector<double>& gridXs,
|
||||
const std::vector<double>& gridYs,
|
||||
RiaDefines::EclipseUnitSystem unitSystem );
|
||||
static void appendPropertiesToStream( QTextStream& stream,
|
||||
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,
|
||||
double time );
|
||||
static void appendFooterToStream( QTextStream& stream );
|
||||
|
||||
static QString getStringForUnitSystem( RiaDefines::EclipseUnitSystem unitSystem );
|
||||
};
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#include "RimFractureGroupStatistics.h"
|
||||
|
||||
#include "RiaDefines.h"
|
||||
#include "RiaLogging.h"
|
||||
#include "RiaPreferences.h"
|
||||
|
||||
@ -35,6 +36,7 @@
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
|
||||
namespace caf
|
||||
@ -139,7 +141,7 @@ void RimFractureGroupStatistics::computeStatistics()
|
||||
std::vector<cvf::ref<RigStimPlanFractureDefinition>> stimPlanFractureDefinitions =
|
||||
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;
|
||||
|
||||
@ -155,10 +157,10 @@ void RimFractureGroupStatistics::computeStatistics()
|
||||
|
||||
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 =
|
||||
createFractureGrids( stimPlanFractureDefinitions, unitSystem, result );
|
||||
createFractureGrids( stimPlanFractureDefinitions, unitSystem, result.first );
|
||||
|
||||
auto [minX, maxX, minY, maxY] = findExtentsOfGrids( fractureGrids );
|
||||
|
||||
@ -193,11 +195,12 @@ void RimFractureGroupStatistics::computeStatistics()
|
||||
|
||||
for ( auto [statType, slice] : statisticsGrids )
|
||||
{
|
||||
auto key = std::make_pair( statType, result );
|
||||
auto key = std::make_pair( statType, result.first );
|
||||
statisticsGridsAll[key] = slice;
|
||||
}
|
||||
}
|
||||
|
||||
QString tempDir = QDir::tempPath();
|
||||
for ( size_t i = 0; i < caf::AppEnum<RimFractureGroupStatistics::StatisticsType>::size(); ++i )
|
||||
{
|
||||
caf::AppEnum<RimFractureGroupStatistics::StatisticsType> t =
|
||||
@ -206,18 +209,24 @@ void RimFractureGroupStatistics::computeStatistics()
|
||||
|
||||
// Get the all the properties for this statistics type
|
||||
std::vector<std::shared_ptr<RigSlice2D>> statisticsSlices;
|
||||
std::vector<QString> properties;
|
||||
std::vector<std::pair<QString, QString>> properties;
|
||||
for ( auto result : availableResults )
|
||||
{
|
||||
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 );
|
||||
|
||||
writeStatisticsToCsv( "/tmp/" + text + "-" + result + ".csv", *slice );
|
||||
writeStatisticsToCsv( tempDir + "/" + text + "-" + result.first + ".csv", *slice );
|
||||
}
|
||||
|
||||
QString xmlFilePath = "/tmp/fracture_group/" + text + ".xml";
|
||||
RifFractureGroupStatisticsExporter::writeAsStimPlanXml( statisticsSlices, properties, xmlFilePath, gridXs, gridYs, timeStep );
|
||||
QString xmlFilePath = tempDir + "/fracture_group/" + text + ".xml";
|
||||
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 )
|
||||
{
|
||||
std::set<QString> resultNames;
|
||||
std::set<std::pair<QString, QString>> resultNames;
|
||||
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,
|
||||
const QString& resultName );
|
||||
|
||||
static std::set<QString>
|
||||
static std::set<std::pair<QString, QString>>
|
||||
findAllResultNames( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& stimPlanFractureDefinitions );
|
||||
|
||||
static std::tuple<double, double, double, double>
|
||||
|
Loading…
Reference in New Issue
Block a user