Refactor: move fault reactivation data access to fix ownership problems.

This commit is contained in:
Kristian Bendiksen
2023-12-18 13:46:49 +01:00
parent 78942b0313
commit 9e1a09bcf9
7 changed files with 79 additions and 107 deletions

View File

@@ -46,7 +46,6 @@
#include "RimEclipseView.h"
#include "RimFaultInView.h"
#include "RimFaultInViewCollection.h"
#include "RimFaultReactivationDataAccess.h"
#include "RimFaultReactivationEnums.h"
#include "RimFaultReactivationTools.h"
#include "RimGeoMechCase.h"
@@ -542,22 +541,20 @@ void RimFaultReactivationModel::defineEditorAttribute( const caf::PdmFieldHandle
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseCase* RimFaultReactivationModel::eclipseCase()
RimEclipseCase* RimFaultReactivationModel::eclipseCase() const
{
auto eCase = firstAncestorOrThisOfType<RimEclipseCase>();
if ( eCase == nullptr )
{
eCase = dynamic_cast<RimEclipseCase*>( RiaApplication::instance()->activeGridView()->ownerCase() );
}
return eCase;
if ( eCase != nullptr )
return eCase;
else
return dynamic_cast<RimEclipseCase*>( RiaApplication::instance()->activeGridView()->ownerCase() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimGeoMechCase* RimFaultReactivationModel::geoMechCase()
RimGeoMechCase* RimFaultReactivationModel::geoMechCase() const
{
return m_geomechCase();
}
@@ -602,6 +599,22 @@ std::vector<QDateTime> RimFaultReactivationModel::selectedTimeSteps() const
return dates;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<size_t> RimFaultReactivationModel::selectedTimeStepIndexes() const
{
std::vector<size_t> selectedTimeStepIndexes;
for ( auto& timeStep : selectedTimeSteps() )
{
auto idx = std::find( m_availableTimeSteps.begin(), m_availableTimeSteps.end(), timeStep );
if ( idx == m_availableTimeSteps.end() ) return {};
selectedTimeStepIndexes.push_back( idx - m_availableTimeSteps.begin() );
}
return selectedTimeStepIndexes;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -660,60 +673,6 @@ QString RimFaultReactivationModel::baseFilename() const
return tmp;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimFaultReactivationModel::exportModelSettings()
{
if ( m_2Dmodel.isNull() ) return false;
if ( !m_2Dmodel->isValid() ) return false;
QMap<QString, QVariant> settings;
auto [topPosition, bottomPosition] = m_2Dmodel->faultTopBottom();
auto faultNormal = m_2Dmodel->faultNormal();
// make sure we move horizontally, and along the 2D model
faultNormal.z() = 0.0;
faultNormal.normalize();
faultNormal = faultNormal ^ cvf::Vec3d::Z_AXIS;
RimFaultReactivationTools::addSettingsToMap( settings, faultNormal, topPosition, bottomPosition );
QDir directory( baseDir() );
return ResInsightInternalJson::JsonWriter::encodeFile( settingsFilename(), settings );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimFaultReactivationModel::extractAndExportModelData()
{
if ( m_dataAccess ) m_dataAccess->clearModelData();
if ( !exportModelSettings() ) return false;
auto eCase = eclipseCase();
if ( eCase == nullptr ) return false;
// get the selected time step indexes
std::vector<size_t> selectedTimeStepIndexes;
for ( auto& timeStep : selectedTimeSteps() )
{
auto idx = std::find( m_availableTimeSteps.begin(), m_availableTimeSteps.end(), timeStep );
if ( idx == m_availableTimeSteps.end() ) return false;
selectedTimeStepIndexes.push_back( idx - m_availableTimeSteps.begin() );
}
// extract data for each timestep
m_dataAccess = std::make_shared<RimFaultReactivationDataAccess>( eCase, geoMechCase(), selectedTimeStepIndexes );
m_dataAccess->extractModelData( *model() );
m_dataAccess.reset();
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -741,14 +700,6 @@ std::array<double, 3> RimFaultReactivationModel::materialParameters( ElementSets
return retVal;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::shared_ptr<RimFaultReactivationDataAccess> RimFaultReactivationModel::dataAccess() const
{
return m_dataAccess;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -18,7 +18,6 @@
#pragma once
#include "RimCheckableNamedObject.h"
#include "RimFaultReactivationDataAccess.h"
#include "RimFaultReactivationEnums.h"
#include "RimPolylinePickerInterface.h"
#include "RimPolylinesDataInterface.h"
@@ -53,7 +52,6 @@ class RimTimeStepFilter;
class RivFaultReactivationModelPartMgr;
class RigBasicPlane;
class RigFaultReactivationModel;
class RimFaultReactivationDataAccess;
namespace cvf
{
@@ -102,12 +100,11 @@ public:
cvf::ref<RigFaultReactivationModel> model() const;
bool showModel() const;
bool extractAndExportModelData();
QString baseDir() const;
void setBaseDir( QString path );
std::vector<QDateTime> selectedTimeSteps() const;
std::vector<size_t> selectedTimeStepIndexes() const;
std::array<double, 3> materialParameters( ElementSets elementSet ) const;
@@ -119,8 +116,6 @@ public:
void updateTimeSteps();
std::shared_ptr<RimFaultReactivationDataAccess> dataAccess() const;
bool useGridVoidRatio() const;
bool useGridPorePressure() const;
bool useGridTemperature() const;
@@ -131,6 +126,9 @@ public:
double seaBedDepth() const;
double waterDensity() const;
RimEclipseCase* eclipseCase() const;
RimGeoMechCase* geoMechCase() const;
protected:
caf::PdmFieldHandle* userDescriptionField() override;
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
@@ -139,13 +137,8 @@ protected:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
RimEclipseCase* eclipseCase();
RimGeoMechCase* geoMechCase();
QString baseFilename() const;
bool exportModelSettings();
private:
std::shared_ptr<RicPolylineTargetsPickEventHandler> m_pickTargetsEventHandler;
@@ -197,6 +190,4 @@ private:
caf::PdmChildArrayField<RimParameterGroup*> m_materialParameters;
std::vector<QDateTime> m_availableTimeSteps;
std::shared_ptr<RimFaultReactivationDataAccess> m_dataAccess;
};