mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Fix grid generation.
Add model thickness parameter. Add support for reloading INP files from recent files Add working directory field to fault reactivation model and put INP export there.
This commit is contained in:
parent
6845c09c0c
commit
3817cea3cf
@ -353,7 +353,7 @@ bool RiaApplication::openFile( const QString& fileName )
|
||||
{
|
||||
loadingSucceded = loadProject( fileName );
|
||||
}
|
||||
else if ( fileType == RiaDefines::ImportFileType::GEOMECH_ODB_FILE )
|
||||
else if ( int( fileType ) & int( RiaDefines::ImportFileType::ANY_GEOMECH_FILE ) )
|
||||
{
|
||||
loadingSucceded = openOdbCaseFromFile( fileName );
|
||||
lastUsedDialogTag = "GEOMECH_MODEL";
|
||||
|
@ -297,6 +297,10 @@ RiaDefines::ImportFileType RiaDefines::obtainFileTypeFromFileName( const QString
|
||||
{
|
||||
return ImportFileType::GEOMECH_ODB_FILE;
|
||||
}
|
||||
else if ( fileName.endsWith( "INP", Qt::CaseInsensitive ) )
|
||||
{
|
||||
return ImportFileType::GEOMECH_INP_FILE;
|
||||
}
|
||||
else if ( fileName.endsWith( ".rsp", Qt::CaseInsensitive ) || fileName.endsWith( ".rip", Qt::CaseInsensitive ) )
|
||||
{
|
||||
return ImportFileType::RESINSIGHT_PROJECT_FILE;
|
||||
|
@ -133,8 +133,10 @@ enum class ImportFileType
|
||||
GEOMECH_ODB_FILE = 0x10,
|
||||
RESINSIGHT_PROJECT_FILE = 0x20,
|
||||
ROFF_FILE = 0x30,
|
||||
GEOMECH_INP_FILE = 0x40,
|
||||
ECLIPSE_RESULT_GRID = ECLIPSE_GRID_FILE | ECLIPSE_EGRID_FILE,
|
||||
ANY_ECLIPSE_FILE = ECLIPSE_RESULT_GRID | ECLIPSE_INPUT_FILE | ECLIPSE_SUMMARY_FILE | ROFF_FILE,
|
||||
ANY_GEOMECH_FILE = GEOMECH_ODB_FILE | GEOMECH_INP_FILE,
|
||||
ANY_IMPORT_FILE = 0xFF
|
||||
};
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include <QAction>
|
||||
#include <QFile>
|
||||
#include <QString>
|
||||
|
||||
CAF_CMD_SOURCE_INIT( RicExportInpFileFeature, "RicExportInpFileFeature" );
|
||||
|
||||
@ -46,8 +47,8 @@ void RicExportInpFileFeature::onActionTriggered( bool isChecked )
|
||||
auto faultReactivationModel = caf::SelectionManager::instance()->selectedItemOfType<RimFaultReactivationModel>();
|
||||
if ( faultReactivationModel )
|
||||
{
|
||||
std::string exportFile = "/tmp/faultreactivation.inp";
|
||||
RifFaultReactivationModelExporter::exportToFile( exportFile, *faultReactivationModel->model() );
|
||||
QString exportFile = faultReactivationModel->baseDir() + "/faultreactivation.inp";
|
||||
RifFaultReactivationModelExporter::exportToFile( exportFile.toStdString(), *faultReactivationModel->model() );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "RiaPreferencesGeoMech.h"
|
||||
|
||||
#include "Riu3DMainWindowTools.h"
|
||||
#include "RiuFileDialogTools.h"
|
||||
#include "RiuViewer.h"
|
||||
|
||||
#include "Rim3dView.h"
|
||||
@ -102,8 +103,14 @@ void RicNewFaultReactModelingFeature::onActionTriggered( bool isChecked )
|
||||
|
||||
if ( camPos.pointDistance( candidate2 ) < camPos.pointDistance( candidate1 ) ) target2 = candidate2;
|
||||
|
||||
RimFaultReactivationModel* model = eclView->faultReactivationModelCollection()->addNewModel( rimFault, target1, target2 );
|
||||
// get base directory for our work, should be a new, empty folder somewhere
|
||||
QString defaultDir =
|
||||
RiaApplication::instance()->lastUsedDialogDirectoryWithFallbackToProjectFolder( "FAULT_REACTIVATION_MODELING" );
|
||||
|
||||
QString baseDir = RiuFileDialogTools::getExistingDirectory( nullptr, tr( "Select Working Directory" ), defaultDir );
|
||||
if ( baseDir.isNull() || baseDir.isEmpty() ) return;
|
||||
|
||||
auto model = eclView->faultReactivationModelCollection()->addNewModel( rimFault, target1, target2, baseDir );
|
||||
if ( model != nullptr )
|
||||
{
|
||||
view->updateAllRequiredEditors();
|
||||
|
@ -58,6 +58,10 @@ RimFaultReactivationModel::RimFaultReactivationModel()
|
||||
|
||||
CAF_PDM_InitField( &m_userDescription, "UserDescription", QString( "Model" ), "Name" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_baseDir, "BaseDirectory", "Working folder" );
|
||||
|
||||
CAF_PDM_InitField( &m_modelThickness, "ModelThickness", 100.0, "Model Cell Thickness" );
|
||||
|
||||
CAF_PDM_InitField( &m_extentHorizontal, "HorizontalExtent", 1000.0, "Horizontal Extent" );
|
||||
CAF_PDM_InitField( &m_extentVerticalAbove, "VerticalExtentAbove", 200.0, "Vertical Extent Above Anchor" );
|
||||
m_extentVerticalAbove.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
|
||||
@ -249,6 +253,8 @@ void RimFaultReactivationModel::updateVisualization()
|
||||
m_numberOfCellsVertUp,
|
||||
m_numberOfCellsVertMid,
|
||||
m_numberOfCellsVertLow );
|
||||
m_modelPlane->setThickness( m_modelThickness );
|
||||
|
||||
m_modelPlane->updateRects();
|
||||
|
||||
view->scheduleCreateDisplayModelAndRedraw();
|
||||
@ -349,6 +355,7 @@ void RimFaultReactivationModel::defineUiOrdering( QString uiConfigName, caf::Pdm
|
||||
auto genGrp = uiOrdering.addNewGroup( "General" );
|
||||
genGrp->add( &m_userDescription );
|
||||
genGrp->add( &m_fault );
|
||||
genGrp->add( &m_baseDir );
|
||||
|
||||
auto faultGrp = uiOrdering.addNewGroup( "Fault Plane" );
|
||||
|
||||
@ -368,6 +375,7 @@ void RimFaultReactivationModel::defineUiOrdering( QString uiConfigName, caf::Pdm
|
||||
|
||||
auto gridModelGrp = modelGrp->addNewGroup( "Grid" );
|
||||
|
||||
gridModelGrp->add( &m_modelThickness );
|
||||
gridModelGrp->add( &m_numberOfCellsHorzPart1 );
|
||||
gridModelGrp->add( &m_numberOfCellsHorzPart2 );
|
||||
gridModelGrp->add( &m_numberOfCellsVertUp );
|
||||
@ -448,3 +456,19 @@ RimEclipseCase* RimFaultReactivationModel::eclipseCase()
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimFaultReactivationModel::setBaseDir( QString path )
|
||||
{
|
||||
m_baseDir = path;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimFaultReactivationModel::baseDir() const
|
||||
{
|
||||
return m_baseDir().path();
|
||||
}
|
||||
|
@ -86,6 +86,9 @@ public:
|
||||
cvf::ref<RigFaultReactivationModel> model() const;
|
||||
bool showModel() const;
|
||||
|
||||
QString baseDir() const;
|
||||
void setBaseDir( QString path );
|
||||
|
||||
protected:
|
||||
caf::PdmFieldHandle* userDescriptionField() override;
|
||||
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
|
||||
@ -103,6 +106,9 @@ private:
|
||||
|
||||
cvf::ref<RivFaultReactivationModelPartMgr> m_partMgr;
|
||||
|
||||
caf::PdmField<caf::FilePath> m_baseDir;
|
||||
caf::PdmField<double> m_modelThickness;
|
||||
|
||||
caf::PdmField<QString> m_userDescription;
|
||||
caf::PdmPtrField<RimFaultInView*> m_fault;
|
||||
caf::PdmChildArrayField<RimPolylineTarget*> m_targets;
|
||||
|
@ -60,10 +60,12 @@ RimFaultReactivationModelCollection::~RimFaultReactivationModelCollection()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimFaultReactivationModel* RimFaultReactivationModelCollection::addNewModel( RimFaultInView* fault, cvf::Vec3d target1, cvf::Vec3d target2 )
|
||||
RimFaultReactivationModel*
|
||||
RimFaultReactivationModelCollection::addNewModel( RimFaultInView* fault, cvf::Vec3d target1, cvf::Vec3d target2, QString baseDir )
|
||||
{
|
||||
auto newModel = new RimFaultReactivationModel();
|
||||
newModel->setFault( fault );
|
||||
newModel->setBaseDir( baseDir );
|
||||
newModel->setUserDescription( fault->name() );
|
||||
newModel->setTargets( target1, target2 );
|
||||
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
RimFaultReactivationModelCollection();
|
||||
~RimFaultReactivationModelCollection() override;
|
||||
|
||||
RimFaultReactivationModel* addNewModel( RimFaultInView* fault, cvf::Vec3d target1, cvf::Vec3d target2 );
|
||||
RimFaultReactivationModel* addNewModel( RimFaultInView* fault, cvf::Vec3d target1, cvf::Vec3d target2, QString baseDir );
|
||||
|
||||
bool empty();
|
||||
int size();
|
||||
|
@ -34,6 +34,7 @@ RigFaultReactivationModel::RigFaultReactivationModel()
|
||||
, m_cellCountVertUpper( 1 )
|
||||
, m_cellCountVertMiddle( 1 )
|
||||
, m_cellCountVertLower( 1 )
|
||||
, m_thickness( 1.0 )
|
||||
|
||||
{
|
||||
for ( auto part : allModelParts() )
|
||||
@ -167,6 +168,16 @@ void RigFaultReactivationModel::setCellCounts( int horzPart1, int horzPart2, int
|
||||
reset();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigFaultReactivationModel::setThickness( double thickness )
|
||||
{
|
||||
m_thickness = thickness;
|
||||
|
||||
reset();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// 7
|
||||
/// 3----------|----------- 11
|
||||
@ -289,12 +300,14 @@ void RigFaultReactivationModel::generateGrids( cvf::Vec3dArray points )
|
||||
m_cellCountHorzPart1,
|
||||
m_cellCountVertLower,
|
||||
m_cellCountVertMiddle,
|
||||
m_cellCountVertUpper );
|
||||
m_cellCountVertUpper,
|
||||
m_thickness );
|
||||
m_3dparts[GridPart::PART2]->generateGeometry( { points[8], points[9], points[10], points[11], points[4], points[5], points[6], points[7] },
|
||||
m_cellCountHorzPart2,
|
||||
m_cellCountVertLower,
|
||||
m_cellCountVertMiddle,
|
||||
m_cellCountVertUpper );
|
||||
m_cellCountVertUpper,
|
||||
m_thickness );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -80,6 +80,7 @@ public:
|
||||
void setMaxExtentFromAnchor( double maxExtentHorz, double minZ, double maxZ );
|
||||
|
||||
void setCellCounts( int horzPart1, int horzPart2, int vertUpper, int vertMiddle, int vertLower );
|
||||
void setThickness( double thickness );
|
||||
|
||||
void updateRects();
|
||||
|
||||
@ -105,6 +106,8 @@ private:
|
||||
double m_minZ;
|
||||
double m_maxZ;
|
||||
|
||||
double m_thickness;
|
||||
|
||||
int m_cellCountHorzPart1;
|
||||
int m_cellCountHorzPart2;
|
||||
int m_cellCountVertUpper;
|
||||
|
@ -24,7 +24,6 @@
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RigGriddedPart3d::RigGriddedPart3d()
|
||||
: m_thickness( 10.0 )
|
||||
{
|
||||
}
|
||||
|
||||
@ -78,7 +77,12 @@ cvf::Vec3d RigGriddedPart3d::stepVector( cvf::Vec3d start, cvf::Vec3d stop, int
|
||||
///
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigGriddedPart3d::generateGeometry( std::vector<cvf::Vec3d> inputPoints, int nHorzCells, int nVertCellsLower, int nVertCellsMiddle, int nVertCellsUpper )
|
||||
void RigGriddedPart3d::generateGeometry( std::vector<cvf::Vec3d> inputPoints,
|
||||
int nHorzCells,
|
||||
int nVertCellsLower,
|
||||
int nVertCellsMiddle,
|
||||
int nVertCellsUpper,
|
||||
double thickness )
|
||||
{
|
||||
reset();
|
||||
|
||||
@ -94,12 +98,13 @@ void RigGriddedPart3d::generateGeometry( std::vector<cvf::Vec3d> inputPoints, in
|
||||
|
||||
cvf::Vec3d tVec = step0to4 ^ step0to1;
|
||||
tVec.normalize();
|
||||
tVec *= m_thickness;
|
||||
tVec *= thickness;
|
||||
|
||||
const std::vector<double> m_thicknessFactors = { -1.0, 0.0, 1.0 };
|
||||
const int nThicknessCells = 2;
|
||||
const int nVertCells = nVertCellsLower + nVertCellsMiddle + nVertCellsUpper;
|
||||
|
||||
const std::vector<int> vertCells = { nVertCellsLower, nVertCellsMiddle, nVertCellsUpper + 1 };
|
||||
const std::vector<int> vertLines = { nVertCellsLower, nVertCellsMiddle, nVertCellsUpper + 1 };
|
||||
const std::vector<cvf::Vec3d> firstSteps = { step0to1, step1to2, step2to3 };
|
||||
const std::vector<cvf::Vec3d> lastSteps = { step4to5, step5to6, step6to7 };
|
||||
|
||||
@ -107,27 +112,26 @@ void RigGriddedPart3d::generateGeometry( std::vector<cvf::Vec3d> inputPoints, in
|
||||
|
||||
m_vertices.reserve( (size_t)( ( nVertCells + 1 ) * ( nHorzCells + 1 ) ) );
|
||||
|
||||
cvf::Vec3d p = inputPoints[0];
|
||||
cvf::Vec3d pLast = inputPoints[4];
|
||||
cvf::Vec3d pFrom = inputPoints[0];
|
||||
cvf::Vec3d pTo = inputPoints[4];
|
||||
|
||||
for ( int i = 0; i < (int)vertCells.size(); i++ )
|
||||
for ( int i = 0; i < (int)vertLines.size(); i++ )
|
||||
{
|
||||
for ( int v = 0; v < vertCells[i]; v++ )
|
||||
for ( int v = 0; v < vertLines[i]; v++ )
|
||||
{
|
||||
cvf::Vec3d stepHorz = stepVector( p, pLast, nHorzCells );
|
||||
cvf::Vec3d p2 = p;
|
||||
cvf::Vec3d stepHorz = stepVector( pFrom, pTo, nHorzCells );
|
||||
cvf::Vec3d p = pFrom;
|
||||
for ( int h = 0; h <= nHorzCells; h++ )
|
||||
{
|
||||
for ( int t = 0; t < (int)m_thicknessFactors.size(); t++ )
|
||||
{
|
||||
m_vertices.push_back( p2 + m_thicknessFactors[t] * tVec );
|
||||
m_vertices.push_back( p + m_thicknessFactors[t] * tVec );
|
||||
}
|
||||
|
||||
p2 += stepHorz;
|
||||
pLast = p2;
|
||||
p += stepHorz;
|
||||
}
|
||||
p += firstSteps[i];
|
||||
pLast += lastSteps[i];
|
||||
pFrom += firstSteps[i];
|
||||
pTo += lastSteps[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,12 @@ public:
|
||||
|
||||
void reset();
|
||||
|
||||
void generateGeometry( std::vector<cvf::Vec3d> inputPoints, int nHorzCells, int nVertCellsLower, int nVertCellsMiddle, int nVertCellsUpper );
|
||||
void generateGeometry( std::vector<cvf::Vec3d> inputPoints,
|
||||
int nHorzCells,
|
||||
int nVertCellsLower,
|
||||
int nVertCellsMiddle,
|
||||
int nVertCellsUpper,
|
||||
double thickness );
|
||||
|
||||
const std::vector<cvf::Vec3d>& vertices() const;
|
||||
const std::vector<std::vector<unsigned int>>& elementIndices() const;
|
||||
@ -60,6 +65,4 @@ private:
|
||||
std::vector<std::vector<unsigned int>> m_elementIndices;
|
||||
std::map<BorderSurface, std::vector<unsigned int>> m_borderSurfaceElements;
|
||||
std::vector<std::vector<cvf::Vec3d>> m_meshLines;
|
||||
|
||||
double m_thickness;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user