mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#6364 Stimplan: add curve and export for reservoir temperature.
This commit is contained in:
parent
ddc23fa5ea
commit
d0322a98ba
@ -41,6 +41,7 @@ void AppEnum<RiaDefines::CurveProperty>::setUp()
|
||||
addItem( RiaDefines::CurveProperty::K0, "K0", "k0" );
|
||||
addItem( RiaDefines::CurveProperty::FLUID_LOSS_COEFFICIENT, "FLUID_LOSS_COEFFICIENT", "Fluid Loss Coefficient" );
|
||||
addItem( RiaDefines::CurveProperty::SPURT_LOSS, "SPURT_LOSS", "Spurt Loss" );
|
||||
addItem( RiaDefines::CurveProperty::TEMPERATURE, "TEMPERATURE", "Temperature" );
|
||||
setDefault( RiaDefines::CurveProperty::UNDEFINED );
|
||||
}
|
||||
}; // namespace caf
|
||||
|
@ -43,6 +43,7 @@ enum class CurveProperty
|
||||
BIOT_COEFFICIENT,
|
||||
K0,
|
||||
FLUID_LOSS_COEFFICIENT,
|
||||
SPURT_LOSS
|
||||
SPURT_LOSS,
|
||||
TEMPERATURE,
|
||||
};
|
||||
}; // namespace RiaDefines
|
||||
|
@ -152,6 +152,7 @@ RimFractureModelPlot*
|
||||
auto task = progInfo.task( "Creating stress track", 2 );
|
||||
createStressTrack( plot, fractureModel, eclipseCase, timeStep, RiaDefines::CurveProperty::STRESS );
|
||||
createStressTrack( plot, fractureModel, eclipseCase, timeStep, RiaDefines::CurveProperty::STRESS_GRADIENT );
|
||||
createStressTrack( plot, fractureModel, eclipseCase, timeStep, RiaDefines::CurveProperty::TEMPERATURE );
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -168,6 +168,22 @@ RimFractureModel::RimFractureModel()
|
||||
"",
|
||||
"" );
|
||||
|
||||
CAF_PDM_InitScriptableField( &m_referenceTemperature, "ReferenceTemperature", 20.0, "Temperature [C]", "", "", "" );
|
||||
CAF_PDM_InitScriptableField( &m_referenceTemperatureGradient,
|
||||
"ReferenceTemperatureGradient",
|
||||
0.025,
|
||||
"Temperature Gradient [C/m]",
|
||||
"",
|
||||
"",
|
||||
"" );
|
||||
CAF_PDM_InitScriptableField( &m_referenceTemperatureDepth,
|
||||
"ReferenceTemperatureDepth",
|
||||
1000.0,
|
||||
"Temperature Depth [m]",
|
||||
"",
|
||||
"",
|
||||
"" );
|
||||
|
||||
CAF_PDM_InitScriptableField( &m_useDetailedFluidLoss, "UseDetailedFluidLoss", true, "Use Detailed Fluid Loss", "", "", "" );
|
||||
|
||||
CAF_PDM_InitScriptableFieldNoDefault( &m_elasticProperties, "ElasticProperties", "Elastic Properties", "", "", "" );
|
||||
@ -850,3 +866,27 @@ void RimFractureModel::setMD( double md )
|
||||
updatePositionFromMeasuredDepth();
|
||||
updateThicknessDirection();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimFractureModel::referenceTemperature() const
|
||||
{
|
||||
return m_referenceTemperature;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimFractureModel::referenceTemperatureGradient() const
|
||||
{
|
||||
return m_referenceTemperatureGradient;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimFractureModel::referenceTemperatureDepth() const
|
||||
{
|
||||
return m_referenceTemperatureDepth;
|
||||
}
|
||||
|
@ -85,6 +85,10 @@ public:
|
||||
QString underburdenFormation() const;
|
||||
QString underburdenFacies() const;
|
||||
|
||||
double referenceTemperature() const;
|
||||
double referenceTemperatureGradient() const;
|
||||
double referenceTemperatureDepth() const;
|
||||
|
||||
bool useDetailedFluidLoss() const;
|
||||
|
||||
// RimWellPathCompletionsInterface overrides.
|
||||
@ -153,5 +157,8 @@ protected:
|
||||
caf::PdmField<QString> m_underburdenFormation;
|
||||
caf::PdmField<QString> m_underburdenFacies;
|
||||
caf::PdmField<double> m_underburdenFluidDensity;
|
||||
caf::PdmField<double> m_referenceTemperature;
|
||||
caf::PdmField<double> m_referenceTemperatureGradient;
|
||||
caf::PdmField<double> m_referenceTemperatureDepth;
|
||||
caf::PdmField<bool> m_useDetailedFluidLoss;
|
||||
};
|
||||
|
@ -480,6 +480,39 @@ std::vector<double> RimFractureModelPlot::calculateStressGradient() const
|
||||
return stressGradients;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimFractureModelPlot::calculateTemperature( std::vector<double>& temperatures ) const
|
||||
{
|
||||
// Reference temperature. Unit: degrees celsius
|
||||
const double referenceTemperature = m_fractureModel->referenceTemperature();
|
||||
|
||||
// Reference temperature gradient. Unit: degrees Celsius per meter
|
||||
const double referenceTemperatureGradient = m_fractureModel->referenceTemperatureGradient();
|
||||
|
||||
// Reference depth for temperature. Unit: meter.
|
||||
const double referenceTemperatureDepth = m_fractureModel->referenceTemperatureDepth();
|
||||
|
||||
std::vector<std::pair<double, double>> layerBoundaryDepths;
|
||||
std::vector<std::pair<size_t, size_t>> layerBoundaryIndexes;
|
||||
calculateLayers( layerBoundaryDepths, layerBoundaryIndexes );
|
||||
|
||||
// Calculate the temperatures
|
||||
for ( size_t i = 0; i < layerBoundaryDepths.size(); i++ )
|
||||
{
|
||||
double depthTopOfZone = layerBoundaryDepths[i].first;
|
||||
|
||||
// Use difference between reference depth and depth of top of zone
|
||||
double depthDiff = depthTopOfZone - referenceTemperatureDepth;
|
||||
double temperature = referenceTemperature + referenceTemperatureGradient * depthDiff;
|
||||
|
||||
temperatures.push_back( temperature );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -548,7 +581,17 @@ std::vector<double> RimFractureModelPlot::calculateImmobileFluidSaturation() con
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<double> RimFractureModelPlot::calculateTemperature() const
|
||||
{
|
||||
return std::vector<double>();
|
||||
std::vector<double> temperaturesCelsius;
|
||||
calculateTemperature( temperaturesCelsius );
|
||||
|
||||
// Convert to Fahrenheit
|
||||
std::vector<double> temperaturesFahrenheit;
|
||||
for ( double t : temperaturesCelsius )
|
||||
{
|
||||
temperaturesFahrenheit.push_back( t * 1.8 + 32.0 );
|
||||
}
|
||||
|
||||
return temperaturesFahrenheit;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -93,6 +93,8 @@ protected:
|
||||
RimWellLogExtractionCurve* findCurveByProperty( RiaDefines::CurveProperty curveProperty ) const;
|
||||
bool calculateStressWithGradients( std::vector<double>& stress, std::vector<double>& stressGradients ) const;
|
||||
|
||||
bool calculateTemperature( std::vector<double>& temperatures ) const;
|
||||
|
||||
static double findValueAtTopOfLayer( const std::vector<double>& values,
|
||||
const std::vector<std::pair<size_t, size_t>>& layerBoundaryIndexes,
|
||||
size_t layerNo );
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "RimFractureModelStressCurve.h"
|
||||
|
||||
#include "RiaDefines.h"
|
||||
#include "RiaFractureModelDefines.h"
|
||||
#include "RigEclipseCaseData.h"
|
||||
#include "RigEclipseWellLogExtractor.h"
|
||||
#include "RigResultAccessorFactory.h"
|
||||
@ -121,15 +122,19 @@ void RimFractureModelStressCurve::performDataExtraction( bool* isUsingPseudoLeng
|
||||
tvDepthValues.push_back( RiaEclipseUnitTools::feetToMeter( f ) );
|
||||
}
|
||||
|
||||
std::vector<double> stressGradients = fractureModelPlot->calculateStressGradient();
|
||||
if ( m_curveProperty() == RiaDefines::CurveProperty::STRESS )
|
||||
{
|
||||
values = fractureModelPlot->calculateStress();
|
||||
values = fractureModelPlot->calculateStress();
|
||||
std::vector<double> stressGradients = fractureModelPlot->calculateStressGradient();
|
||||
addDatapointsForBottomOfLayers( tvDepthValues, values, stressGradients );
|
||||
}
|
||||
else
|
||||
else if ( m_curveProperty() == RiaDefines::CurveProperty::STRESS_GRADIENT )
|
||||
{
|
||||
values = stressGradients;
|
||||
values = fractureModelPlot->calculateStressGradient();
|
||||
}
|
||||
else if ( m_curveProperty() == RiaDefines::CurveProperty::TEMPERATURE )
|
||||
{
|
||||
values = fractureModelPlot->calculateTemperature();
|
||||
}
|
||||
|
||||
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case.value() );
|
||||
|
Loading…
Reference in New Issue
Block a user