-
Notifications
You must be signed in to change notification settings - Fork 91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: enable BartonBandis model for contact solver #3556
base: develop
Are you sure you want to change the base?
Conversation
real64 const hydraulicAperture = ( aperture >= 0.0 ) ? (aperture + m_aperture0) : m_aperture0 / ( 1 + 9*normalTraction/m_referenceNormalStress ); | ||
dHydraulicAperture_dNormalStress = ( aperture >= 0.0 ) ? 0.0 : -hydraulicAperture / ( 1 + 9*normalTraction/m_referenceNormalStress ) * 9/m_referenceNormalStress; | ||
dHydraulicAperture_aperture = ( aperture >= 0.0 ) ? 1.0 : 0.0; | ||
real64 const hydraulicAperture = ( fractureState >= 3.0 ) ? (aperture + m_aperture0) : m_aperture0 / ( 1 + 9*normalTraction/m_referenceNormalStress ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We may want to be cautious about the convention of the normalTraction
here. Here normalTraction
is defined as positive for compression.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, we need to ensure that the sign convention for normalTraction
and referenceNormalStress
is consistent.
dHydraulicAperture_dNormalStress = ( aperture >= 0.0 ) ? 0.0 : -hydraulicAperture / ( 1 + 9*normalTraction/m_referenceNormalStress ) * 9/m_referenceNormalStress; | ||
dHydraulicAperture_aperture = ( aperture >= 0.0 ) ? 1.0 : 0.0; | ||
real64 const hydraulicAperture = ( fractureState >= 3.0 ) ? (aperture + m_aperture0) : m_aperture0 / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ); | ||
dHydraulicAperture_dNormalStress = ( fractureState >= 3.0 ) ? 0.0 : -hydraulicAperture / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ) * 9/m_referenceNormalStress; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dHydraulicAperture_dNormalStress = ( fractureState >= 3.0 ) ? 0.0 : -hydraulicAperture / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ) * 9/m_referenceNormalStress; | |
dHydraulicAperture_dNormalStress = ( fractureState == FractureState::Open ) ? 0.0 : -hydraulicAperture / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ) * 9/m_referenceNormalStress; |
dHydraulicAperture_aperture = ( aperture >= 0.0 ) ? 1.0 : 0.0; | ||
real64 const hydraulicAperture = ( fractureState >= 3.0 ) ? (aperture + m_aperture0) : m_aperture0 / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ); | ||
dHydraulicAperture_dNormalStress = ( fractureState >= 3.0 ) ? 0.0 : -hydraulicAperture / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ) * 9/m_referenceNormalStress; | ||
dHydraulicAperture_aperture = ( fractureState >= 3.0 ) ? 1.0 : 0.0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dHydraulicAperture_aperture = ( fractureState >= 3.0 ) ? 1.0 : 0.0; | |
dHydraulicAperture_aperture = ( fractureState >= fractureState == FractureState::Open ) ? 1.0 : 0.0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you may just need to include FractureState.hpp
@@ -156,10 +157,11 @@ GEOS_HOST_DEVICE | |||
GEOS_FORCE_INLINE | |||
real64 HydraulicApertureTableUpdates::computeHydraulicAperture( real64 const aperture, | |||
real64 const normalTraction, | |||
integer const fractureState, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
integer const fractureState, | |
FractureState const fractureState, |
@@ -770,6 +770,7 @@ void SinglePhasePoromechanicsConformingFractures< FLOW_SOLVER >::updateHydraulic | |||
arrayView1d< real64 > const aperture = subRegion.getElementAperture(); | |||
arrayView1d< real64 > const hydraulicAperture = subRegion.getField< flow::hydraulicAperture >(); | |||
arrayView1d< real64 > const deltaVolume = subRegion.getField< flow::deltaVolume >(); | |||
arrayView1d< integer > const & fractureState = subRegion.getField< contact::fractureState >(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
arrayView1d< integer > const & fractureState = subRegion.getField< contact::fractureState >(); | |
arrayView1d< FractureState > const & fractureState = subRegion.getField< contact::fractureState >(); |
@@ -505,6 +505,8 @@ void SinglePhasePoromechanicsEmbeddedFractures::updateState( DomainPartition & d | |||
|
|||
arrayView2d< real64 > const & fractureContactTraction = subRegion.template getField< contact::traction >(); | |||
|
|||
arrayView1d< integer > const & fractureState = subRegion.template getField< contact::fractureState >(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
arrayView1d< integer > const & fractureState = subRegion.template getField< contact::fractureState >(); | |
arrayView1d< FractureState > const & fractureState = subRegion.template getField< contact::fractureState >(); |
@@ -341,7 +341,8 @@ struct StateUpdateKernel | |||
arrayView1d< real64 > const & aperture, | |||
arrayView1d< real64 const > const & oldHydraulicAperture, | |||
arrayView1d< real64 > const & hydraulicAperture, | |||
arrayView2d< real64 > const & fractureEffectiveTraction ) | |||
arrayView2d< real64 > const & fractureEffectiveTraction, | |||
arrayView1d< integer > const & fractureState ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
arrayView1d< integer > const & fractureState ) | |
arrayView1d< FractureState > const & fractureState ) |
@@ -150,8 +152,10 @@ struct FluidMassResidualDerivativeAssemblyKernel | |||
real64 dHydraulicAperture_dNormalJump = 0.0; | |||
real64 dHydraulicAperture_dTraction = 0.0; | |||
real64 fractureTraction = 0.0; | |||
integer fractureState = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why forcing this to be 0?
using namespace fields::contact; | ||
|
||
real64 const hydraulicAperture = ( fractureState == FractureState::Open ) ? (aperture + m_aperture0) : m_aperture0 / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ); | ||
dHydraulicAperture_dNormalStress = ( fractureState == FractureState::Open ) ? 0.0 : -hydraulicAperture / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ) * 9/m_referenceNormalStress; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For fractureState != FractureState::Open
, shouldn't it be dHydraulicAperture_dNormalStress = -hydraulicAperture / ( 1 + 9*abs(normalTraction)/m_referenceNormalStress ) * 9/m_referenceNormalStress * normalTraction/abs(normalTraction)
?
|
||
real64 const hydraulicAperture = ( fractureState == FractureState::Open ) ? (aperture + m_aperture0) : m_aperture0 / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ); | ||
dHydraulicAperture_dNormalStress = ( fractureState == FractureState::Open ) ? 0.0 : -hydraulicAperture / ( 1 + 9*LvArray::math::abs(normalTraction)/m_referenceNormalStress ) * 9/m_referenceNormalStress; | ||
dHydraulicAperture_aperture = ( fractureState == FractureState::Open ) ? 1.0 : 0.0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For current HydroFractureSolver
, if the fracture is not open, this cannot be zero if we update HydraulicAperture
implicitly using the current aperture
. It should be something like dHydraulicAperture_aperture = dHydraulicAperture_dNormalStress * dNormalStress_dAperture
where dNormalStress_dAperture = penaltyStiffness
.
Following #3197, this PR