#6595 Fracture Model: Allow azimuth orientation for fracture.

This commit is contained in:
Kristian Bendiksen 2020-09-29 14:21:16 +02:00 committed by rubenthoms
parent 2d268b9e54
commit f9ff4c73df
3 changed files with 21 additions and 4 deletions

View File

@ -58,7 +58,10 @@ bool RifFractureModelPerfsFrkExporter::writeToFile( RimFractureModelPlot* plot,
QTextStream stream( &data ); QTextStream stream( &data );
appendHeaderToStream( stream ); appendHeaderToStream( stream );
bool isTransverse = fractureModel->fractureOrientation() == RimFractureModel::FractureOrientation::TRANSVERSE_WELL_PATH; bool isTransverse =
( fractureModel->fractureOrientation() == RimFractureModel::FractureOrientation::TRANSVERSE_WELL_PATH ||
fractureModel->fractureOrientation() == RimFractureModel::FractureOrientation::AZIMUTH );
appendFractureOrientationToStream( stream, isTransverse ); appendFractureOrientationToStream( stream, isTransverse );
// Unit: meter // Unit: meter

View File

@ -91,6 +91,7 @@ void caf::AppEnum<RimFractureModel::FractureOrientation>::setUp()
addItem( RimFractureModel::FractureOrientation::TRANSVERSE_WELL_PATH, addItem( RimFractureModel::FractureOrientation::TRANSVERSE_WELL_PATH,
"TRANSVERSE_WELL_PATH", "TRANSVERSE_WELL_PATH",
"Transverse (normal) to Well Path" ); "Transverse (normal) to Well Path" );
addItem( RimFractureModel::FractureOrientation::AZIMUTH, "AZIMUTH", "Azimuth" );
setDefault( RimFractureModel::FractureOrientation::TRANSVERSE_WELL_PATH ); setDefault( RimFractureModel::FractureOrientation::TRANSVERSE_WELL_PATH );
} }
@ -161,6 +162,7 @@ RimFractureModel::RimFractureModel()
"", "",
"", "",
"" ); "" );
CAF_PDM_InitScriptableField( &m_azimuthAngle, "AzimuthAngle", 0.0, "Azimuth Angle", "", "", "" );
CAF_PDM_InitScriptableField( &m_formationDip, "FormationDip", 0.0, "Formation Dip", "", "", "" ); CAF_PDM_InitScriptableField( &m_formationDip, "FormationDip", 0.0, "Formation Dip", "", "", "" );
m_formationDip.uiCapability()->setUiReadOnly( true ); m_formationDip.uiCapability()->setUiReadOnly( true );
@ -243,7 +245,7 @@ void RimFractureModel::fieldChangedByUi( const caf::PdmFieldHandle* changedField
if ( changedField == &m_MD || changedField == &m_extractionType || changedField == &m_boundingBoxVertical || if ( changedField == &m_MD || changedField == &m_extractionType || changedField == &m_boundingBoxVertical ||
changedField == &m_boundingBoxHorizontal || changedField == &m_fractureOrientation || changedField == &m_boundingBoxHorizontal || changedField == &m_fractureOrientation ||
changedField == &m_autoComputeBarrier ) changedField == &m_autoComputeBarrier || changedField == &m_azimuthAngle )
{ {
updateThicknessDirection(); updateThicknessDirection();
updateBarrierProperties(); updateBarrierProperties();
@ -549,6 +551,14 @@ void RimFractureModel::updateDistanceToBarrierAndDip()
cvf::Mat3d azimuthRotation = cvf::Mat3d::fromRotation( cvf::Vec3d::Z_AXIS, cvf::Math::toRadians( 90.0 ) ); cvf::Mat3d azimuthRotation = cvf::Mat3d::fromRotation( cvf::Vec3d::Z_AXIS, cvf::Math::toRadians( 90.0 ) );
fractureDirection.transformVector( azimuthRotation ); fractureDirection.transformVector( azimuthRotation );
} }
else if ( m_fractureOrientation == FractureOrientation::AZIMUTH )
{
// Azimuth angle of fracture is relative to north.
double wellAzimuth = wellPathGeometry->wellPathAzimuthAngle( position );
cvf::Mat3d azimuthRotation =
cvf::Mat3d::fromRotation( cvf::Vec3d::Z_AXIS, cvf::Math::toRadians( wellAzimuth - m_azimuthAngle() - 90.0 ) );
fractureDirection.transformVector( azimuthRotation );
}
// The direction to the barrier is normal to the TST // The direction to the barrier is normal to the TST
cvf::Vec3d directionToBarrier = ( thicknessDirection() ^ fractureDirection ).getNormalized(); cvf::Vec3d directionToBarrier = ( thicknessDirection() ^ fractureDirection ).getNormalized();
@ -699,6 +709,7 @@ void RimFractureModel::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin
{ {
m_thicknessDirectionWellPath.uiCapability()->setUiHidden( true ); m_thicknessDirectionWellPath.uiCapability()->setUiHidden( true );
m_barrierAnnotation.uiCapability()->setUiHidden( true ); m_barrierAnnotation.uiCapability()->setUiHidden( true );
m_azimuthAngle.uiCapability()->setUiHidden( m_fractureOrientation() != RimFractureModel::FractureOrientation::AZIMUTH );
uiOrdering.add( nameField(), caf::PdmUiOrdering::LayoutOptions( true, 3, 1 ) ); uiOrdering.add( nameField(), caf::PdmUiOrdering::LayoutOptions( true, 3, 1 ) );
uiOrdering.add( &m_fractureModelTemplate, {true, 2, 1} ); uiOrdering.add( &m_fractureModelTemplate, {true, 2, 1} );
@ -722,6 +733,7 @@ void RimFractureModel::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin
caf::PdmUiOrdering* perforationGroup = uiOrdering.addNewGroup( "Perforation" ); caf::PdmUiOrdering* perforationGroup = uiOrdering.addNewGroup( "Perforation" );
perforationGroup->add( &m_perforationLength ); perforationGroup->add( &m_perforationLength );
perforationGroup->add( &m_fractureOrientation ); perforationGroup->add( &m_fractureOrientation );
perforationGroup->add( &m_azimuthAngle );
caf::PdmUiOrdering* asymmetricGroup = uiOrdering.addNewGroup( "Asymmetric" ); caf::PdmUiOrdering* asymmetricGroup = uiOrdering.addNewGroup( "Asymmetric" );
asymmetricGroup->add( &m_formationDip ); asymmetricGroup->add( &m_formationDip );

View File

@ -59,7 +59,8 @@ public:
enum class FractureOrientation enum class FractureOrientation
{ {
ALONG_WELL_PATH, ALONG_WELL_PATH,
TRANSVERSE_WELL_PATH TRANSVERSE_WELL_PATH,
AZIMUTH
}; };
RimFractureModel( void ); RimFractureModel( void );
@ -164,7 +165,7 @@ private:
static RigEclipseCaseData* getEclipseCaseData(); static RigEclipseCaseData* getEclipseCaseData();
static RimEclipseCase* getEclipseCase(); static RimEclipseCase* getEclipseCase();
void updateBarrierProperties(); void updateBarrierProperties();
void addBarrierAnnotation( const cvf::Vec3d& startPosition, const cvf::Vec3d& endPosition ); void addBarrierAnnotation( const cvf::Vec3d& startPosition, const cvf::Vec3d& endPosition );
void clearBarrierAnnotation(); void clearBarrierAnnotation();
RimAnnotationCollection* annotationCollection(); RimAnnotationCollection* annotationCollection();
@ -198,6 +199,7 @@ protected:
caf::PdmField<bool> m_editFractureModelTemplate; caf::PdmField<bool> m_editFractureModelTemplate;
caf::PdmField<caf::AppEnum<FractureOrientation>> m_fractureOrientation; caf::PdmField<caf::AppEnum<FractureOrientation>> m_fractureOrientation;
caf::PdmField<double> m_azimuthAngle;
caf::PdmField<double> m_perforationLength; caf::PdmField<double> m_perforationLength;
caf::PdmField<double> m_formationDip; caf::PdmField<double> m_formationDip;