diff --git a/inputFiles/poromechanics/SlipPermeability_embeddedFrac.xml b/inputFiles/poromechanics/SlipPermeability_embeddedFrac.xml
new file mode 100755
index 00000000000..2f4f6c424ac
--- /dev/null
+++ b/inputFiles/poromechanics/SlipPermeability_embeddedFrac.xml
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inputFiles/poromechanics/SlipPermeability_pEDFM_base.xml b/inputFiles/poromechanics/SlipPermeability_pEDFM_base.xml
new file mode 100755
index 00000000000..8a29024eb71
--- /dev/null
+++ b/inputFiles/poromechanics/SlipPermeability_pEDFM_base.xml
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inputFiles/poromechanics/SlipPermeability_pEDFM_smoke.xml b/inputFiles/poromechanics/SlipPermeability_pEDFM_smoke.xml
new file mode 100755
index 00000000000..77b38e05a69
--- /dev/null
+++ b/inputFiles/poromechanics/SlipPermeability_pEDFM_smoke.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/integratedTests b/integratedTests
index 08f1d0f6fae..cea539de248 160000
--- a/integratedTests
+++ b/integratedTests
@@ -1 +1 @@
-Subproject commit 08f1d0f6fae28b3aeba9b2a2b4b26fd6755a8226
+Subproject commit cea539de2481f4907fa2d3ec672362faa8a67985
diff --git a/src/coreComponents/constitutive/CMakeLists.txt b/src/coreComponents/constitutive/CMakeLists.txt
index 8e786cf9d03..1fb06e33f50 100644
--- a/src/coreComponents/constitutive/CMakeLists.txt
+++ b/src/coreComponents/constitutive/CMakeLists.txt
@@ -60,8 +60,8 @@ set( constitutive_headers
permeability/ParallelPlatesPermeability.hpp
permeability/PermeabilityBase.hpp
permeability/PermeabilityExtrinsicData.hpp
- permeability/StrainDependentPermeability.hpp
permeability/ProppantPermeability.hpp
+ permeability/SlipDependentPermeability.hpp
relativePermeability/BrooksCoreyBakerRelativePermeability.hpp
relativePermeability/BrooksCoreyRelativePermeability.hpp
relativePermeability/RelativePermeabilityBase.hpp
@@ -146,8 +146,8 @@ set( constitutive_sources
permeability/ConstantPermeability.cpp
permeability/ParallelPlatesPermeability.cpp
permeability/PermeabilityBase.cpp
- permeability/StrainDependentPermeability.cpp
- permeability/ProppantPermeability.cpp
+ permeability/ProppantPermeability.cpp
+ permeability/SlipDependentPermeability.cpp
relativePermeability/BrooksCoreyBakerRelativePermeability.cpp
relativePermeability/BrooksCoreyRelativePermeability.cpp
relativePermeability/RelativePermeabilityBase.cpp
diff --git a/src/coreComponents/constitutive/ConstitutivePassThru.hpp b/src/coreComponents/constitutive/ConstitutivePassThru.hpp
index 78dd3d42f7a..c2865289397 100644
--- a/src/coreComponents/constitutive/ConstitutivePassThru.hpp
+++ b/src/coreComponents/constitutive/ConstitutivePassThru.hpp
@@ -41,6 +41,8 @@
#include "permeability/CarmanKozenyPermeability.hpp"
#include "permeability/ParallelPlatesPermeability.hpp"
#include "permeability/ProppantPermeability.hpp"
+#include "permeability/SlipDependentPermeability.hpp"
+
namespace geosx
{
@@ -167,8 +169,10 @@ struct ConstitutivePassThru< CompressibleSolidBase >
{
ConstitutivePassThruHandler< CompressibleSolid< PressurePorosity, ConstantPermeability >,
CompressibleSolid< PressurePorosity, CarmanKozenyPermeability >,
- CompressibleSolid< PressurePorosity, ParallelPlatesPermeability > >::execute( constitutiveRelation,
- std::forward< LAMBDA >( lambda ) );
+ CompressibleSolid< PressurePorosity, ParallelPlatesPermeability >,
+ CompressibleSolid< PressurePorosity, SlipDependentPermeability >
+ >::execute( constitutiveRelation,
+ std::forward< LAMBDA >( lambda ) );
}
template< typename LAMBDA >
@@ -176,8 +180,10 @@ struct ConstitutivePassThru< CompressibleSolidBase >
{
ConstitutivePassThruHandler< CompressibleSolid< PressurePorosity, ConstantPermeability >,
CompressibleSolid< PressurePorosity, CarmanKozenyPermeability >,
- CompressibleSolid< PressurePorosity, ParallelPlatesPermeability > >::execute( constitutiveRelation,
- std::forward< LAMBDA >( lambda ) );
+ CompressibleSolid< PressurePorosity, ParallelPlatesPermeability >,
+ CompressibleSolid< PressurePorosity, SlipDependentPermeability >
+ >::execute( constitutiveRelation,
+ std::forward< LAMBDA >( lambda ) );
}
};
@@ -217,6 +223,7 @@ struct ConstitutivePassThru< CoupledSolidBase >
ConstitutivePassThruHandler< CompressibleSolid< PressurePorosity, ConstantPermeability >,
CompressibleSolid< PressurePorosity, CarmanKozenyPermeability >,
CompressibleSolid< PressurePorosity, ParallelPlatesPermeability >,
+ CompressibleSolid< PressurePorosity, SlipDependentPermeability >,
PorousSolid< DruckerPragerExtended >,
PorousSolid< ModifiedCamClay >,
PorousSolid< DelftEgg >,
@@ -237,6 +244,7 @@ struct ConstitutivePassThru< CoupledSolidBase >
ConstitutivePassThruHandler< CompressibleSolid< PressurePorosity, ConstantPermeability >,
CompressibleSolid< PressurePorosity, CarmanKozenyPermeability >,
CompressibleSolid< PressurePorosity, ParallelPlatesPermeability >,
+ CompressibleSolid< PressurePorosity, SlipDependentPermeability >,
PorousSolid< DruckerPragerExtended >,
PorousSolid< ModifiedCamClay >,
PorousSolid< DelftEgg >,
diff --git a/src/coreComponents/constitutive/docs/PermeabilityModels.rst b/src/coreComponents/constitutive/docs/PermeabilityModels.rst
index dac69c3934f..1fc2aee9a15 100644
--- a/src/coreComponents/constitutive/docs/PermeabilityModels.rst
+++ b/src/coreComponents/constitutive/docs/PermeabilityModels.rst
@@ -11,3 +11,5 @@ Permeability models
KozenyCarmanPermeability
ParallelPlatesPermeability
+
+ SlipDependentPermeability
diff --git a/src/coreComponents/constitutive/docs/SlipDependentPermeability.rst b/src/coreComponents/constitutive/docs/SlipDependentPermeability.rst
new file mode 100644
index 00000000000..9c3ad278235
--- /dev/null
+++ b/src/coreComponents/constitutive/docs/SlipDependentPermeability.rst
@@ -0,0 +1,49 @@
+.. _SlipDependentPermeability:
+
+
+####################################################
+Slip Dependent Permeability Model
+####################################################
+
+
+Overview
+======================
+
+The slip dependent permeability model defines the relationship between the relative shear displacement and fracture permeability. In this model, fractrues/faults are represented as slip interfaces.
+
+.. math::
+ k = k_{i} \left[ (M_{mult} - 1) \text{tanh} \left( 3 \frac{ U_{s} }{ U_{s_threshold} } \right) + 1 \right]
+
+where :math:`k_{i}` is the initial fracture permeability; :math:`M_{mult}` is the maximum permeability multiplier; :math:`U_{s}` is the relative shear displacement; :math:`U_{s_threshold}` is the slip threshold.
+
+
+Parameters
+======================
+
+The Slip Dependent Permeability model can be called in the
+```` block of the input XML file.
+This permeability model must be assigned a unique name via the
+``name`` attribute.
+This name is used to assign the model to regions of the physical
+domain via a ``permeabilityModelName`` attribute in the ````
+block.
+
+The following attributes are supported:
+
+.. include:: /coreComponents/schema/docs/SlipDependentPermeability.rst
+
+
+Example
+=======================
+
+.. code-block:: xml
+
+
+ ...
+
+ ...
+
diff --git a/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.cpp b/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.cpp
index db91e21c984..2e15fff03d7 100644
--- a/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.cpp
+++ b/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.cpp
@@ -32,7 +32,7 @@ namespace constitutive
ParallelPlatesPermeability::ParallelPlatesPermeability( string const & name, Group * const parent ):
PermeabilityBase( name, parent )
{
- registerExtrinsicData( extrinsicMeshData::permeability::dPerm_dAperture{}, &m_dPerm_dAperture );
+ registerExtrinsicData( extrinsicMeshData::permeability::dPerm_dDispJump{}, &m_dPerm_dDispJump );
}
std::unique_ptr< ConstitutiveBase >
@@ -46,7 +46,7 @@ void ParallelPlatesPermeability::allocateConstitutiveData( dataRepository::Group
localIndex const numConstitutivePointsPerParentIndex )
{
// NOTE: enforcing 1 quadrature point
- m_dPerm_dAperture.resize( 0, 1, 3 );
+ m_dPerm_dDispJump.resize( 0, 1, 3, 3 );
PermeabilityBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex );
}
diff --git a/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.hpp b/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.hpp
index eb6733e4f4a..58a0d6c0280 100644
--- a/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.hpp
+++ b/src/coreComponents/constitutive/permeability/ParallelPlatesPermeability.hpp
@@ -33,16 +33,16 @@ class ParallelPlatesPermeabilityUpdate : public PermeabilityBaseUpdate
ParallelPlatesPermeabilityUpdate( arrayView3d< real64 > const & permeability,
arrayView3d< real64 > const & dPerm_dPressure,
- arrayView3d< real64 > const & dPerm_dAper )
+ arrayView4d< real64 > const & dPerm_dDispJump )
: PermeabilityBaseUpdate( permeability, dPerm_dPressure ),
- m_dPerm_dAperture( dPerm_dAper )
+ m_dPerm_dDispJump( dPerm_dDispJump )
{}
GEOSX_HOST_DEVICE
void compute( real64 const & oldHydraulicAperture,
real64 const & newHydraulicAperture,
arraySlice1d< real64 > const & permeability,
- arraySlice1d< real64 > const & dPerm_dAperture ) const
+ arraySlice2d< real64 > const & dPerm_dDispJump ) const
{
// TODO: maybe move to this computation or have the possibility of choosing.
// real64 const perm = newHydraulicAperture*newHydraulicAperture*newHydraulicAperture / 12.0;
@@ -61,7 +61,9 @@ class ParallelPlatesPermeabilityUpdate : public PermeabilityBaseUpdate
for( int dim=0; dim < 3; dim++ )
{
permeability[dim] = perm;
- dPerm_dAperture[dim] = dPerm;
+ dPerm_dDispJump[dim][0] = dPerm;
+ dPerm_dDispJump[dim][1] = 0.0;
+ dPerm_dDispJump[dim][2] = 0.0;
}
}
@@ -76,12 +78,24 @@ class ParallelPlatesPermeabilityUpdate : public PermeabilityBaseUpdate
compute( oldHydraulicAperture,
newHydraulicAperture,
m_permeability[k][0],
- m_dPerm_dAperture[k][0] );
+ m_dPerm_dDispJump[k][0] );
+ }
+
+ GEOSX_HOST_DEVICE
+ virtual void updateFromApertureAndShearDisplacement( localIndex const k,
+ localIndex const q,
+ real64 const & oldHydraulicAperture,
+ real64 const & newHydraulicAperture,
+ real64 const ( &dispJump )[3] ) const override final
+ {
+ GEOSX_UNUSED_VAR( dispJump );
+
+ updateFromAperture( k, q, oldHydraulicAperture, newHydraulicAperture );
}
private:
- arrayView3d< real64 > m_dPerm_dAperture;
+ arrayView4d< real64 > m_dPerm_dDispJump;
};
@@ -113,7 +127,7 @@ class ParallelPlatesPermeability : public PermeabilityBase
{
return KernelWrapper( m_permeability,
m_dPerm_dPressure,
- m_dPerm_dAperture );
+ m_dPerm_dDispJump );
}
@@ -124,6 +138,9 @@ class ParallelPlatesPermeability : public PermeabilityBase
array3d< real64 > m_dPerm_dAperture;
+ /// Derivative of fracture permeability w.r.t. displacement jump
+ array4d< real64 > m_dPerm_dDispJump;
+
};
}/* namespace constitutive */
diff --git a/src/coreComponents/constitutive/permeability/PermeabilityBase.hpp b/src/coreComponents/constitutive/permeability/PermeabilityBase.hpp
index 49b0d9ade60..6020c11fbd3 100644
--- a/src/coreComponents/constitutive/permeability/PermeabilityBase.hpp
+++ b/src/coreComponents/constitutive/permeability/PermeabilityBase.hpp
@@ -55,15 +55,6 @@ class PermeabilityBaseUpdate
GEOSX_UNUSED_VAR( k, q, porosity );
}
- GEOSX_HOST_DEVICE
- virtual void updateFromPressureStrain( localIndex const k,
- localIndex const q,
- real64 const & pressure,
- real64 const & volStrain ) const
- {
- GEOSX_UNUSED_VAR( k, q, pressure, volStrain );
- }
-
GEOSX_HOST_DEVICE
virtual void updateFromAperture( localIndex const k,
localIndex const q,
@@ -73,6 +64,16 @@ class PermeabilityBaseUpdate
GEOSX_UNUSED_VAR( k, q, oldHydraulicAperture, newHydraulicAperture );
}
+ GEOSX_HOST_DEVICE
+ virtual void updateFromApertureAndShearDisplacement( localIndex const k,
+ localIndex const q,
+ real64 const & oldHydraulicAperture,
+ real64 const & newHydraulicAperture,
+ real64 const ( &dispJump )[3] ) const
+ {
+ GEOSX_UNUSED_VAR( k, q, oldHydraulicAperture, newHydraulicAperture, dispJump );
+ }
+
GEOSX_HOST_DEVICE
virtual void updateFromApertureAndProppantVolumeFraction ( localIndex const k,
localIndex const q,
@@ -97,7 +98,6 @@ class PermeabilityBaseUpdate
arrayView3d< real64 > m_dPerm_dPressure;
};
-
class PermeabilityBase : public ConstitutiveBase
{
public:
@@ -118,6 +118,9 @@ class PermeabilityBase : public ConstitutiveBase
arrayView3d< real64 const > dPerm_dPressure() const { return m_dPerm_dPressure; }
+ virtual void initializeState() const
+ {}
+
protected:
array3d< real64 > m_permeability;
diff --git a/src/coreComponents/constitutive/permeability/PermeabilityExtrinsicData.hpp b/src/coreComponents/constitutive/permeability/PermeabilityExtrinsicData.hpp
index 49097e2abd0..37951998f41 100644
--- a/src/coreComponents/constitutive/permeability/PermeabilityExtrinsicData.hpp
+++ b/src/coreComponents/constitutive/permeability/PermeabilityExtrinsicData.hpp
@@ -54,6 +54,15 @@ EXTRINSIC_MESH_DATA_TRAIT( dPerm_dAperture,
WRITE_AND_READ,
"Derivative of rock permeability with respect to aperture" );
+EXTRINSIC_MESH_DATA_TRAIT( dPerm_dDispJump,
+ "dPerm_dDispJump",
+ array4d< real64 >,
+ 0,
+ NOPLOT,
+ WRITE_AND_READ,
+ "Derivative of rock permeability with respect to displacement jump" );
+
+
EXTRINSIC_MESH_DATA_TRAIT( permeabilityMultiplier,
"permeabilityMultiplier",
array3d< real64 >,
diff --git a/src/coreComponents/constitutive/permeability/ProppantPermeability.cpp b/src/coreComponents/constitutive/permeability/ProppantPermeability.cpp
index 64fdd48ad6d..898cea16e64 100644
--- a/src/coreComponents/constitutive/permeability/ProppantPermeability.cpp
+++ b/src/coreComponents/constitutive/permeability/ProppantPermeability.cpp
@@ -48,7 +48,7 @@ ProppantPermeability::ProppantPermeability( string const & name, Group * const p
registerWrapper( viewKeyStruct::proppantPackPermeabilityString(), &m_proppantPackPermeability );
- registerExtrinsicData( extrinsicMeshData::permeability::dPerm_dAperture{}, &m_dPerm_dAperture );
+ registerExtrinsicData( extrinsicMeshData::permeability::dPerm_dDispJump{}, &m_dPerm_dDispJump );
registerExtrinsicData( extrinsicMeshData::permeability::permeabilityMultiplier{}, &m_permeabilityMultiplier );
}
@@ -72,7 +72,7 @@ void ProppantPermeability::allocateConstitutiveData( dataRepository::Group & par
localIndex const numConstitutivePointsPerParentIndex )
{
// NOTE: enforcing 1 quadrature point
- m_dPerm_dAperture.resize( 0, 1, 3 );
+ m_dPerm_dDispJump.resize( 0, 1, 3, 3 );
m_permeabilityMultiplier.resize( 0, 1, 3 );
PermeabilityBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex );
}
diff --git a/src/coreComponents/constitutive/permeability/ProppantPermeability.hpp b/src/coreComponents/constitutive/permeability/ProppantPermeability.hpp
index de55be79aaf..f55758bc4c1 100644
--- a/src/coreComponents/constitutive/permeability/ProppantPermeability.hpp
+++ b/src/coreComponents/constitutive/permeability/ProppantPermeability.hpp
@@ -33,11 +33,11 @@ class ProppantPermeabilityUpdate : public PermeabilityBaseUpdate
ProppantPermeabilityUpdate( arrayView3d< real64 > const & permeability,
arrayView3d< real64 > const & dPerm_dPressure,
- arrayView3d< real64 > const & dPerm_dAperture,
+ arrayView4d< real64 > const & dPerm_dDispJump,
arrayView3d< real64 > const & permeabilityMultiplier,
real64 const & proppantPackPermeability )
: PermeabilityBaseUpdate( permeability, dPerm_dPressure ),
- m_dPerm_dAperture( dPerm_dAperture ),
+ m_dPerm_dDispJump( dPerm_dDispJump ),
m_permeabilityMultiplier( permeabilityMultiplier ),
m_proppantPackPermeability( proppantPackPermeability )
{}
@@ -47,7 +47,7 @@ class ProppantPermeabilityUpdate : public PermeabilityBaseUpdate
real64 const & newHydraulicAperture,
real64 const & proppantPackVolumeFraction,
arraySlice1d< real64 > const & permeability,
- arraySlice1d< real64 > const & dPerm_dAperture,
+ arraySlice2d< real64 > const & dPerm_dDispJump,
arraySlice1d< real64 > const & permeabilityMultiplier ) const
{
@@ -71,8 +71,11 @@ class ProppantPermeabilityUpdate : public PermeabilityBaseUpdate
for( int dim=0; dim < 3; dim++ )
{
- permeability[dim] = perm;
- dPerm_dAperture[dim] = dPerm;
+ permeability[dim] = perm;
+ dPerm_dDispJump[dim][0] = dPerm;
+ dPerm_dDispJump[dim][1] = 0.0;
+ dPerm_dDispJump[dim][2] = 0.0;
+
}
}
@@ -89,13 +92,13 @@ class ProppantPermeabilityUpdate : public PermeabilityBaseUpdate
newHydraulicAperture,
proppantPackVolumeFraction,
m_permeability[k][0],
- m_dPerm_dAperture[k][0],
+ m_dPerm_dDispJump[k][0],
m_permeabilityMultiplier[k][0] );
}
private:
- arrayView3d< real64 > m_dPerm_dAperture;
+ arrayView4d< real64 > m_dPerm_dDispJump;
arrayView3d< real64 > m_permeabilityMultiplier;
@@ -131,7 +134,7 @@ class ProppantPermeability : public PermeabilityBase
{
return KernelWrapper( m_permeability,
m_dPerm_dPressure,
- m_dPerm_dAperture,
+ m_dPerm_dDispJump,
m_permeabilityMultiplier,
m_proppantPackPermeability );
}
@@ -152,7 +155,7 @@ class ProppantPermeability : public PermeabilityBase
private:
- array3d< real64 > m_dPerm_dAperture;
+ array4d< real64 > m_dPerm_dDispJump;
array3d< real64 > m_permeabilityMultiplier;
diff --git a/src/coreComponents/constitutive/permeability/SlipDependentPermeability.cpp b/src/coreComponents/constitutive/permeability/SlipDependentPermeability.cpp
new file mode 100644
index 00000000000..9cdaf9b5472
--- /dev/null
+++ b/src/coreComponents/constitutive/permeability/SlipDependentPermeability.cpp
@@ -0,0 +1,69 @@
+/*
+ * ------------------------------------------------------------------------------------------------------------
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
+ * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
+ * Copyright (c) 2018-2020 TotalEnergies
+ * Copyright (c) 2019- GEOSX Contributors
+ * All rights reserved
+ *
+ * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
+ * ------------------------------------------------------------------------------------------------------------
+ */
+
+/**
+ * @file SlipDependentPermeability.cpp
+ */
+
+#include "SlipDependentPermeability.hpp"
+#include "LvArray/src/tensorOps.hpp"
+
+namespace geosx
+{
+
+using namespace dataRepository;
+
+namespace constitutive
+{
+
+
+SlipDependentPermeability::SlipDependentPermeability( string const & name, Group * const parent ):
+ PermeabilityBase( name, parent )
+{
+ registerWrapper( viewKeyStruct::shearDispThresholdString(), &m_shearDispThreshold ).
+ setInputFlag( InputFlags::REQUIRED ).
+ setDescription( "Threshold of shear displacement." );
+
+ registerWrapper( viewKeyStruct::maxPermMultiplierString(), &m_maxPermMultiplier ).
+ setInputFlag( InputFlags::REQUIRED ).
+ setDescription( "Maximum permeability multiplier." );
+
+ registerWrapper( viewKeyStruct::dPerm_dDispJumpString(), &m_dPerm_dDispJump ).
+ setDescription( "Derivative of the permeability w.r.t. the displacement jump." );
+
+ registerWrapper( viewKeyStruct::initialPermeabilityString(), &m_initialPermeability ).
+ setInputFlag( InputFlags::REQUIRED ).
+ setDescription( " initial permeability of the fracture." );
+}
+
+std::unique_ptr< ConstitutiveBase >
+SlipDependentPermeability::deliverClone( string const & name,
+ Group * const parent ) const
+{
+ return ConstitutiveBase::deliverClone( name, parent );
+}
+
+void SlipDependentPermeability::allocateConstitutiveData( dataRepository::Group & parent,
+ localIndex const numConstitutivePointsPerParentIndex )
+{
+// NOTE: enforcing 1 quadrature point
+ m_dPerm_dDispJump.resize( 0, 1, 3, 3 );
+
+ PermeabilityBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex );
+}
+
+REGISTER_CATALOG_ENTRY( ConstitutiveBase, SlipDependentPermeability, string const &, Group * const )
+
+} /* namespace constitutive */
+} /* namespace geosx */
diff --git a/src/coreComponents/constitutive/permeability/SlipDependentPermeability.hpp b/src/coreComponents/constitutive/permeability/SlipDependentPermeability.hpp
new file mode 100644
index 00000000000..a1c6de98130
--- /dev/null
+++ b/src/coreComponents/constitutive/permeability/SlipDependentPermeability.hpp
@@ -0,0 +1,174 @@
+/*
+ * ------------------------------------------------------------------------------------------------------------
+ * SPDX-License-Identifier: LGPL-2.1-only
+ *
+ * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
+ * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
+ * Copyright (c) 2018-2020 TotalEnergies
+ * Copyright (c) 2019- GEOSX Contributors
+ * All rights reserved
+ *
+ * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
+ * ------------------------------------------------------------------------------------------------------------
+ */
+
+/**
+ * @file SlipDependentPermeability.hpp
+ */
+
+#ifndef GEOSX_CONSTITUTIVE_PERMEABILITY_SLIPDEPENDENTPERMEABILITY_HPP_
+#define GEOSX_CONSTITUTIVE_PERMEABILITY_SLIPDEPENDENTPERMEABILITY_HPP_
+
+#include "constitutive/permeability/PermeabilityBase.hpp"
+
+
+namespace geosx
+{
+namespace constitutive
+{
+
+class SlipDependentPermeabilityUpdate : public PermeabilityBaseUpdate
+{
+public:
+
+ SlipDependentPermeabilityUpdate( arrayView3d< real64 > const & permeability,
+ arrayView3d< real64 > const & dPerm_dPressure,
+ arrayView4d< real64 > const & dPerm_dDispJump,
+ real64 const shearDispThreshold,
+ real64 const maxPermMultiplier,
+ R1Tensor const & initialPermeability )
+ : PermeabilityBaseUpdate( permeability, dPerm_dPressure ),
+ m_dPerm_dDispJump( dPerm_dDispJump ),
+ m_shearDispThreshold( shearDispThreshold ),
+ m_maxPermMultiplier( maxPermMultiplier ),
+ m_initialPermeability( initialPermeability )
+ {}
+
+ GEOSX_HOST_DEVICE
+ void compute( real64 const ( &dispJump )[3],
+ R1Tensor const & initialPermeability,
+ arraySlice1d< real64 > const & permeability,
+ arraySlice2d< real64 > const & dPerm_dDispJump ) const;
+
+ GEOSX_HOST_DEVICE
+ virtual void updateFromApertureAndShearDisplacement( localIndex const k,
+ localIndex const q,
+ real64 const & oldHydraulicAperture,
+ real64 const & newHydraulicAperture,
+ real64 const ( &dispJump )[3] ) const override
+ {
+ GEOSX_UNUSED_VAR( q, oldHydraulicAperture, newHydraulicAperture );
+
+ compute( dispJump,
+ m_initialPermeability,
+ m_permeability[k][0],
+ m_dPerm_dDispJump[k][0] );
+ }
+
+private:
+
+ /// Derivative of fracture permeability to shear displacement jump between fracture surfaces
+ arrayView4d< real64 > m_dPerm_dDispJump;
+
+ /// Threshold of shear displacement
+ real64 m_shearDispThreshold;
+
+ /// Maximum permeability multiplier
+ real64 m_maxPermMultiplier;
+
+ /// Initial permeability tensor
+ R1Tensor m_initialPermeability;
+
+};
+
+
+class SlipDependentPermeability : public PermeabilityBase
+{
+public:
+
+ SlipDependentPermeability( string const & name, Group * const parent );
+
+ std::unique_ptr< ConstitutiveBase > deliverClone( string const & name,
+ Group * const parent ) const override;
+
+ virtual void allocateConstitutiveData( dataRepository::Group & parent,
+ localIndex const numConstitutivePointsPerParentIndex ) override;
+
+ static string catalogName() { return "SlipDependentPermeability"; }
+
+ virtual string getCatalogName() const override { return catalogName(); }
+
+ /// Type of kernel wrapper for in-kernel update
+ using KernelWrapper = SlipDependentPermeabilityUpdate;
+
+ /**
+ * @brief Create an update kernel wrapper.
+ * @return the wrapper
+ */
+ KernelWrapper createKernelWrapper() const
+ {
+ return KernelWrapper( m_permeability,
+ m_dPerm_dPressure,
+ m_dPerm_dDispJump,
+ m_shearDispThreshold,
+ m_maxPermMultiplier,
+ m_initialPermeability );
+ }
+
+ struct viewKeyStruct : public PermeabilityBase::viewKeyStruct
+ {
+ static constexpr char const * dPerm_dDispJumpString() { return "dPerm_dDispJump"; }
+ static constexpr char const * shearDispThresholdString() { return "shearDispThreshold"; }
+ static constexpr char const * maxPermMultiplierString() { return "maxPermMultiplier"; }
+ static constexpr char const * initialPermeabilityString() { return "initialPermeability"; }
+ };
+
+private:
+
+ /// Derivative of fracture permeability w.r.t. displacement jump
+ array4d< real64 > m_dPerm_dDispJump;
+
+ /// Threshold of shear displacement
+ real64 m_shearDispThreshold;
+
+ /// Maximum permeability multiplier
+ real64 m_maxPermMultiplier;
+
+ /// Initial permeability tensor
+ R1Tensor m_initialPermeability;
+
+};
+
+
+GEOSX_HOST_DEVICE
+GEOSX_FORCE_INLINE
+void SlipDependentPermeabilityUpdate::compute( real64 const ( &dispJump )[3],
+ R1Tensor const & initialPermeability,
+ arraySlice1d< real64 > const & permeability,
+ arraySlice2d< real64 > const & dPerm_dDispJump ) const
+{
+ real64 const shearMag = std::sqrt( dispJump[1]*dispJump[1] + dispJump[2]*dispJump[2] );
+
+ real64 const tmpTanh = std::tanh ( 3.0 * shearMag/m_shearDispThreshold );
+
+ real64 const permMultiplier = ( m_maxPermMultiplier - 1.0 ) * tmpTanh + 1.0;
+
+ real64 const dpermMultiplier_dshearMag = ( m_maxPermMultiplier - 1.0 ) * ( 1.0 - tmpTanh * tmpTanh ) * 3.0/m_shearDispThreshold;
+
+ for( localIndex i=0; i < permeability.size(); i++ )
+ {
+ permeability[i] = permMultiplier * initialPermeability[i];
+ dPerm_dDispJump[i][0] = 0.0;
+ real64 const tmpValue = shearMag > 0.0 ? initialPermeability[i] * dpermMultiplier_dshearMag /shearMag : 0.0;
+ dPerm_dDispJump[i][1] = tmpValue * dispJump[1];
+ dPerm_dDispJump[i][2] = tmpValue * dispJump[2];
+ }
+}
+
+
+
+} /* namespace constitutive */
+
+} /* namespace geosx */
+
+#endif //GEOSX_CONSTITUTIVE_PERMEABILITY_FRACTUREPERMEABILITY_HPP_
diff --git a/src/coreComponents/constitutive/permeability/StrainDependentPermeability.cpp b/src/coreComponents/constitutive/permeability/StrainDependentPermeability.cpp
deleted file mode 100644
index 15cf020a7ba..00000000000
--- a/src/coreComponents/constitutive/permeability/StrainDependentPermeability.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * ------------------------------------------------------------------------------------------------------------
- * SPDX-License-Identifier: LGPL-2.1-only
- *
- * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
- * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
- * Copyright (c) 2018-2020 TotalEnergies
- * Copyright (c) 2019- GEOSX Contributors
- * All rights reserved
- *
- * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
- * ------------------------------------------------------------------------------------------------------------
- */
-
-/**
- * @file StrainDependentPermeability.cpp
- */
-
-#include "StrainDependentPermeability.hpp"
-
-namespace geosx
-{
-
-using namespace dataRepository;
-
-namespace constitutive
-{
-
-
-StrainDependentPermeability::StrainDependentPermeability( string const & name, Group * const parent ):
- PermeabilityBase( name, parent )
-{}
-
-std::unique_ptr< ConstitutiveBase >
-StrainDependentPermeability::deliverClone( string const & name,
- Group * const parent ) const
-{
- return PermeabilityBase::deliverClone( name, parent );
-}
-
-void StrainDependentPermeability::allocateConstitutiveData( dataRepository::Group & parent,
- localIndex const numConstitutivePointsPerParentIndex )
-{
- PermeabilityBase::allocateConstitutiveData( parent, numConstitutivePointsPerParentIndex );
-}
-
-REGISTER_CATALOG_ENTRY( ConstitutiveBase, StrainDependentPermeability, string const &, Group * const )
-
-}
-} /* namespace geosx */
diff --git a/src/coreComponents/constitutive/permeability/StrainDependentPermeability.hpp b/src/coreComponents/constitutive/permeability/StrainDependentPermeability.hpp
deleted file mode 100644
index fc783c36450..00000000000
--- a/src/coreComponents/constitutive/permeability/StrainDependentPermeability.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * ------------------------------------------------------------------------------------------------------------
- * SPDX-License-Identifier: LGPL-2.1-only
- *
- * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
- * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
- * Copyright (c) 2018-2020 TotalEnergies
- * Copyright (c) 2019- GEOSX Contributors
- * All rights reserved
- *
- * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
- * ------------------------------------------------------------------------------------------------------------
- */
-
-/**
- * @file StrainDependentPermeability.hpp
- */
-
-#ifndef GEOSX_CONSTITUTIVE_PERMEABILITY_STRAINDEPENDENTPERMEABILITY_HPP_
-#define GEOSX_CONSTITUTIVE_PERMEABILITY_STRAINDEPENDENTPERMEABILITY_HPP_
-
-#include "constitutive/permeability/PermeabilityBase.hpp"
-
-
-namespace geosx
-{
-namespace constitutive
-{
-
-class StrainDependentPermeabilityUpdate : public PermeabilityBaseUpdate
-{
-public:
-
- StrainDependentPermeabilityUpdate( arrayView3d< real64 > const & permeability,
- arrayView3d< real64 > const & dPerm_dPressure )
- : PermeabilityBaseUpdate( permeability, dPerm_dPressure )
- {}
-
- GEOSX_HOST_DEVICE
- virtual void updateFromPressureStrain( localIndex const k,
- localIndex const q,
- real64 const & pressure,
- real64 const & volStrain ) const override
- {
- GEOSX_UNUSED_VAR( k );
- GEOSX_UNUSED_VAR( q );
- GEOSX_UNUSED_VAR( pressure );
- GEOSX_UNUSED_VAR( volStrain );
- }
-
-private:
-
-};
-
-
-class StrainDependentPermeability : public PermeabilityBase
-{
-public:
-
- StrainDependentPermeability( string const & name, Group * const parent );
-
- std::unique_ptr< ConstitutiveBase > deliverClone( string const & name,
- Group * const parent ) const override;
-
- virtual void allocateConstitutiveData( dataRepository::Group & parent,
- localIndex const numConstitutivePointsPerParentIndex ) override;
-
- static string catalogName() { return "StrainDependentPermeability"; }
-
- virtual string getCatalogName() const override { return catalogName(); }
-
- /// Type of kernel wrapper for in-kernel update
- using KernelWrapper = StrainDependentPermeabilityUpdate;
-
- /**
- * @brief Create an update kernel wrapper.
- * @return the wrapper
- */
- KernelWrapper createKernelWrapper() const
- {
- return KernelWrapper( m_permeability,
- m_dPerm_dPressure );
- }
-
-private:
-
-};
-
-
-
-}/* namespace constitutive */
-
-} /* namespace geosx */
-
-
-#endif //GEOSX_CONSTITUTIVE_PERMEABILITY_FRACTUREPERMEABILITY_HPP_
diff --git a/src/coreComponents/constitutive/solid/CompressibleSolid.cpp b/src/coreComponents/constitutive/solid/CompressibleSolid.cpp
index 98d6126a5cb..63cfbffd02e 100644
--- a/src/coreComponents/constitutive/solid/CompressibleSolid.cpp
+++ b/src/coreComponents/constitutive/solid/CompressibleSolid.cpp
@@ -22,6 +22,7 @@
#include "constitutive/permeability/ConstantPermeability.hpp"
#include "constitutive/permeability/CarmanKozenyPermeability.hpp"
#include "constitutive/permeability/ParallelPlatesPermeability.hpp"
+#include "constitutive/permeability/SlipDependentPermeability.hpp"
namespace geosx
{
@@ -45,10 +46,12 @@ CompressibleSolid< PORO_TYPE, PERM_TYPE >::~CompressibleSolid() = default;
typedef CompressibleSolid< PressurePorosity, ConstantPermeability > CompressibleRockConstant;
typedef CompressibleSolid< PressurePorosity, CarmanKozenyPermeability > CompressibleRockCK;
typedef CompressibleSolid< PressurePorosity, ParallelPlatesPermeability > FractureRock;
+typedef CompressibleSolid< PressurePorosity, SlipDependentPermeability > Fault;
REGISTER_CATALOG_ENTRY( ConstitutiveBase, CompressibleRockConstant, string const &, Group * const )
REGISTER_CATALOG_ENTRY( ConstitutiveBase, CompressibleRockCK, string const &, Group * const )
REGISTER_CATALOG_ENTRY( ConstitutiveBase, FractureRock, string const &, Group * const )
+REGISTER_CATALOG_ENTRY( ConstitutiveBase, Fault, string const &, Group * const )
}
diff --git a/src/coreComponents/constitutive/solid/CompressibleSolid.hpp b/src/coreComponents/constitutive/solid/CompressibleSolid.hpp
index 673ed260b29..dc347e4cedb 100644
--- a/src/coreComponents/constitutive/solid/CompressibleSolid.hpp
+++ b/src/coreComponents/constitutive/solid/CompressibleSolid.hpp
@@ -73,6 +73,19 @@ class CompressibleSolidUpdates : public CoupledSolidUpdates< NullModel, PORO_TYP
m_permUpdate.updateFromAperture( k, q, oldHydraulicAperture, newHydraulicAperture );
}
+ GEOSX_HOST_DEVICE
+ void updateStateFromPressureApertureAndJump( localIndex const k,
+ localIndex const q,
+ real64 const & pressure,
+ real64 const & deltaPressure,
+ real64 const & oldHydraulicAperture,
+ real64 const & newHydraulicAperture,
+ real64 const ( &dispJump )[3] ) const
+ {
+ m_porosityUpdate.updateFromPressure( k, q, pressure + deltaPressure );
+ m_permUpdate.updateFromApertureAndShearDisplacement( k, q, oldHydraulicAperture, newHydraulicAperture, dispJump );
+ }
+
private:
using CoupledSolidUpdates< NullModel, PORO_TYPE, PERM_TYPE >::m_solidUpdate;
using CoupledSolidUpdates< NullModel, PORO_TYPE, PERM_TYPE >::m_porosityUpdate;
diff --git a/src/coreComponents/constitutive/solid/CoupledSolidBase.hpp b/src/coreComponents/constitutive/solid/CoupledSolidBase.hpp
index b9ac602cdb6..948ca0e9277 100644
--- a/src/coreComponents/constitutive/solid/CoupledSolidBase.hpp
+++ b/src/coreComponents/constitutive/solid/CoupledSolidBase.hpp
@@ -133,6 +133,7 @@ class CoupledSolidBase : public ConstitutiveBase
void initializeState() const
{
getBasePorosityModel().initializeState();
+ getBasePermModel().initializeState();
}
virtual void saveConvergedState() const override final
diff --git a/src/coreComponents/finiteVolume/SurfaceElementStencil.hpp b/src/coreComponents/finiteVolume/SurfaceElementStencil.hpp
index bfd211f53dc..cc07a03b006 100644
--- a/src/coreComponents/finiteVolume/SurfaceElementStencil.hpp
+++ b/src/coreComponents/finiteVolume/SurfaceElementStencil.hpp
@@ -177,10 +177,10 @@ class SurfaceElementStencilWrapper : public StencilWrapperBase< SurfaceElementSt
void computeWeights( localIndex iconn,
CoefficientAccessor< arrayView3d< real64 const > > const & coefficient,
CoefficientAccessor< arrayView3d< real64 const > > const & dCoeff_dVar1,
- CoefficientAccessor< arrayView3d< real64 const > > const & dCoeff_dVar2,
+ CoefficientAccessor< arrayView4d< real64 const > > const & dCoeff_dVar2,
real64 ( &weight )[MAX_NUM_OF_CONNECTIONS][2],
real64 ( &dWeight_dVar1 )[MAX_NUM_OF_CONNECTIONS][2],
- real64 ( &dWeight_dVar2 )[MAX_NUM_OF_CONNECTIONS][2] ) const;
+ real64 ( &dWeight_dVar2 )[MAX_NUM_OF_CONNECTIONS][2][3] ) const;
/**
* @brief Compute weigths and derivatives w.r.t to one variable.
@@ -397,12 +397,11 @@ GEOSX_HOST_DEVICE
inline void SurfaceElementStencilWrapper::computeWeights( localIndex iconn,
CoefficientAccessor< arrayView3d< real64 const > > const & coefficient,
CoefficientAccessor< arrayView3d< real64 const > > const & dCoeff_dVar1,
- CoefficientAccessor< arrayView3d< real64 const > > const & dCoeff_dVar2,
+ CoefficientAccessor< arrayView4d< real64 const > > const & dCoeff_dVar2,
real64 (& weight)[MAX_NUM_OF_CONNECTIONS][2],
real64 (& dWeight_dVar1 )[MAX_NUM_OF_CONNECTIONS][2],
- real64 (& dWeight_dVar2 )[MAX_NUM_OF_CONNECTIONS][2] ) const
+ real64 (& dWeight_dVar2 )[MAX_NUM_OF_CONNECTIONS][2][3] ) const
{
- // TODO: this should become star-delta method
real64 sumOfTrans = 0.0;
for( localIndex k=0; k::assembleFluxTerms( real64 const
flowAccessors.get< extrinsicMeshData::flow::dMobility_dPressure >(),
permAccessors.get< extrinsicMeshData::permeability::permeability >(),
permAccessors.get< extrinsicMeshData::permeability::dPerm_dPressure >(),
- permAccessors.get< extrinsicMeshData::permeability::dPerm_dAperture >(),
+ permAccessors.get< extrinsicMeshData::permeability::dPerm_dDispJump >(),
permAccessors.get< extrinsicMeshData::permeability::permeabilityMultiplier >(),
this->gravityVector(),
localMatrix,
@@ -306,8 +306,8 @@ void SinglePhaseFVM< BASE >::assemblePoroelasticFluxTerms( real64 const GEOSX_UN
jumpDofNumber = mesh.getElemManager().constructArrayViewAccessor< globalIndex, 1 >( jumpDofKey );
jumpDofNumber.setName( this->getName() + "/accessors/" + jumpDofKey );
- ElementRegionManager::ElementViewAccessor< arrayView3d< real64 const > > dPerm_dAper =
- mesh.getElemManager().constructMaterialArrayViewAccessor< real64, 3 >( extrinsicMeshData::permeability::dPerm_dAperture::key(),
+ ElementRegionManager::ElementViewAccessor< arrayView4d< real64 const > > dPerm_dDispJump =
+ mesh.getElemManager().constructMaterialArrayViewAccessor< real64, 4 >( extrinsicMeshData::permeability::dPerm_dDispJump::key(),
targetRegionNames(),
m_permeabilityModelNames,
true );
@@ -335,7 +335,7 @@ void SinglePhaseFVM< BASE >::assemblePoroelasticFluxTerms( real64 const GEOSX_UN
flowAccessors.get< extrinsicMeshData::flow::dMobility_dPressure >(),
permAccessors.get< extrinsicMeshData::permeability::permeability >(),
permAccessors.get< extrinsicMeshData::permeability::dPerm_dPressure >(),
- dPerm_dAper.toNestedViewConst(),
+ dPerm_dDispJump.toNestedViewConst(),
localMatrix,
localRhs );
} );
@@ -364,10 +364,11 @@ void SinglePhaseFVM< BASE >::assembleHydrofracFluxTerms( real64 const GEOSX_UNUS
elemDofNumber = elemManager.constructArrayViewAccessor< globalIndex, 1 >( dofKey );
elemDofNumber.setName( this->getName() + "/accessors/" + dofKey );
- ElementRegionManager::ElementViewAccessor< arrayView3d< real64 const > > dPerm_dAper =
- elemManager.constructMaterialArrayViewAccessor< real64, 3 >( extrinsicMeshData::permeability::dPerm_dAperture::key(),
- targetRegionNames(),
- m_permeabilityModelNames );
+ ElementRegionManager::ElementViewAccessor< arrayView4d< real64 const > > dPerm_dDispJump =
+ mesh.getElemManager().constructMaterialArrayViewAccessor< real64, 4 >( extrinsicMeshData::permeability::dPerm_dDispJump::key(),
+ targetRegionNames(),
+ m_permeabilityModelNames,
+ true );
fluxApprox.forStencils< CellElementStencilTPFA, SurfaceElementStencil, FaceElementToCellStencil >( mesh, [&]( auto & stencil )
{
@@ -391,7 +392,7 @@ void SinglePhaseFVM< BASE >::assembleHydrofracFluxTerms( real64 const GEOSX_UNUS
flowAccessors.get< extrinsicMeshData::flow::dMobility_dPressure >(),
permAccessors.get< extrinsicMeshData::permeability::permeability >(),
permAccessors.get< extrinsicMeshData::permeability::dPerm_dPressure >(),
- dPerm_dAper.toNestedViewConst(),
+ dPerm_dDispJump.toNestedViewConst(),
localMatrix,
localRhs,
dR_dAper );
diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp
index 90dccdf06aa..5aa009f9fcf 100644
--- a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp
+++ b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseFVMKernels.hpp
@@ -80,7 +80,7 @@ struct FluxKernel
using ProppantPermeabilityAccessors =
StencilAccessors< extrinsicMeshData::permeability::permeability,
extrinsicMeshData::permeability::dPerm_dPressure,
- extrinsicMeshData::permeability::dPerm_dAperture,
+ extrinsicMeshData::permeability::dPerm_dDispJump,
extrinsicMeshData::permeability::permeabilityMultiplier >;
diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEFEMKernel.hpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEFEMKernel.hpp
index f0758ff5c0b..2381df42d11 100644
--- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEFEMKernel.hpp
+++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsEFEMKernel.hpp
@@ -607,10 +607,11 @@ struct StateUpdateKernel
* @param[out] fractureTraction the fracture traction
* @param[out] dFractureTraction_dPressure the derivative of the fracture traction wrt pressure
*/
- template< typename POLICY, typename CONTACT_WRAPPER >
+ template< typename POLICY, typename POROUS_WRAPPER >
static void
launch( localIndex const size,
- CONTACT_WRAPPER const & contactWrapper,
+ ContactBase::KernelWrapper const & contactWrapper,
+ POROUS_WRAPPER const & porousMaterialWrapper,
arrayView2d< real64 const > const & dispJump,
arrayView1d< real64 const > const & pressure,
arrayView1d< real64 const > const & deltaPressure,
@@ -618,6 +619,7 @@ struct StateUpdateKernel
arrayView1d< real64 const > const & volume,
arrayView1d< real64 > const & deltaVolume,
arrayView1d< real64 > const & aperture,
+ arrayView1d< real64 const > const & oldHydraulicAperture,
arrayView1d< real64 > const & hydraulicAperture,
arrayView2d< real64 > const & fractureTraction,
arrayView1d< real64 > const & dFractureTraction_dPressure )
@@ -633,6 +635,10 @@ struct StateUpdateKernel
deltaVolume[k] = hydraulicAperture[k] * area[k] - volume[k];
+ real64 const jump[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3 ( dispJump[k] );
+
+ porousMaterialWrapper.updateStateFromPressureApertureAndJump( k, 0, pressure[k], deltaPressure[k], oldHydraulicAperture[k], hydraulicAperture[k], jump );
+
// traction on the fracture to include the pressure contribution
contactWrapper.addPressureToTraction( pressure[k] + deltaPressure[k],
fractureTraction[k],
diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.cpp
index a0dffd883e0..ff8b229ddd0 100644
--- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.cpp
+++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.cpp
@@ -47,12 +47,12 @@ void EmbeddedSurfaceFluxKernel::
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs )
{
GEOSX_UNUSED_VAR( jumpDofNumber );
- GEOSX_UNUSED_VAR( dPerm_dAper );
+ GEOSX_UNUSED_VAR( dPerm_dDispJump );
SinglePhaseFVMKernels::FluxKernel::launch( stencilWrapper,
dt,
@@ -89,12 +89,12 @@ void EmbeddedSurfaceFluxKernel::
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs )
{
GEOSX_UNUSED_VAR( jumpDofNumber );
- GEOSX_UNUSED_VAR( dPerm_dAper );
+ GEOSX_UNUSED_VAR( dPerm_dDispJump );
SinglePhaseFVMKernels::FluxKernel::launch( stencilWrapper,
dt,
@@ -132,7 +132,7 @@ void EmbeddedSurfaceFluxKernel::
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs )
{
@@ -143,30 +143,29 @@ void EmbeddedSurfaceFluxKernel::
typename SurfaceElementStencilWrapper::IndexContainerViewConstType const & sesri = stencilWrapper.getElementSubRegionIndices();
typename SurfaceElementStencilWrapper::IndexContainerViewConstType const & sei = stencilWrapper.getElementIndices();
-
forAll< parallelDevicePolicy<> >( stencilWrapper.size(), [=] GEOSX_HOST_DEVICE ( localIndex const iconn )
{
localIndex const stencilSize = stencilWrapper.stencilSize( iconn );
localIndex const numFluxElems = stencilWrapper.numPointsInFlux( iconn );
- localIndex const numDofs = stencilSize * 2;// pressure and normal jump
+ localIndex const numDofs = stencilSize * 4;// pressure and normal jump (3)
// working arrays
- stackArray1d< globalIndex, MAX_NUM_FLUX_ELEMS > dofColIndices( numDofs );
+ stackArray1d< globalIndex, MAX_NUM_FLUX_ELEMS * 4 > dofColIndices( numDofs );
stackArray1d< real64, MAX_NUM_FLUX_ELEMS > localFlux( numFluxElems );
- stackArray2d< real64, MAX_NUM_FLUX_ELEMS * MAX_STENCIL_SIZE > localFluxJacobian( numFluxElems, numDofs );
+ stackArray2d< real64, MAX_NUM_FLUX_ELEMS * MAX_STENCIL_SIZE * 4 > localFluxJacobian( numFluxElems, numDofs );
// compute transmissibility
real64 transmissibility[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2];
real64 dTrans_dPres[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2];
- real64 dTrans_dAper[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2];
+ real64 dTrans_dDispJump[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2][3];
stencilWrapper.computeWeights( iconn,
permeability,
dPerm_dPres,
- dPerm_dAper,
+ dPerm_dDispJump,
transmissibility,
dTrans_dPres,
- dTrans_dAper );
+ dTrans_dDispJump );
compute( stencilSize,
seri[iconn],
@@ -174,7 +173,7 @@ void EmbeddedSurfaceFluxKernel::
sei[iconn],
transmissibility,
dTrans_dPres,
- dTrans_dAper,
+ dTrans_dDispJump,
pres,
dPres,
gravCoef,
@@ -189,9 +188,11 @@ void EmbeddedSurfaceFluxKernel::
// extract DOF numbers
for( localIndex i = 0; i < stencilSize; ++i )
{
- localIndex localDofIndex = 2 * i;
+ localIndex localDofIndex = 4 * i;
dofColIndices[ localDofIndex ] = pressureDofNumber[seri( iconn, i )][sesri( iconn, i )][sei( iconn, i )];
dofColIndices[ localDofIndex + 1 ] = jumpDofNumber[seri( iconn, i )][sesri( iconn, i )][sei( iconn, i )];
+ dofColIndices[ localDofIndex + 2 ] = jumpDofNumber[seri( iconn, i )][sesri( iconn, i )][sei( iconn, i )] + 1;
+ dofColIndices[ localDofIndex + 3 ] = jumpDofNumber[seri( iconn, i )][sesri( iconn, i )][sei( iconn, i )] + 2;
}
for( localIndex i = 0; i < numFluxElems; ++i )
@@ -223,7 +224,7 @@ void EmbeddedSurfaceFluxKernel::
arraySlice1d< localIndex const > const & sei,
real64 const (&transmissibility)[MAX_NUM_OF_CONNECTIONS][2],
real64 const (&dTrans_dPres)[MAX_NUM_OF_CONNECTIONS][2],
- real64 const (&dTrans_dAper)[MAX_NUM_OF_CONNECTIONS][2],
+ real64 const (&dTrans_dDispJump)[MAX_NUM_OF_CONNECTIONS][2][3],
ElementViewConst< arrayView1d< real64 const > > const & pres,
ElementViewConst< arrayView1d< real64 const > > const & dPres,
ElementViewConst< arrayView1d< real64 const > > const & gravCoef,
@@ -267,18 +268,25 @@ void EmbeddedSurfaceFluxKernel::
flux[0] = dt * fluxVal;
flux[1] = -dt * fluxVal;
- real64 dFlux_dAper[2] = {0.0, 0.0};
- dFlux_dAper[0] = dt * dFlux_dTrans * dTrans_dAper[0][0];
- dFlux_dAper[1] = -dt * dFlux_dTrans * dTrans_dAper[0][1];
-
+ real64 dFlux_dDispJump[2][3] = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}};
+ for( localIndex i=0; i < 3; i++ )
+ {
+ dFlux_dDispJump[0][i] = dt * dFlux_dTrans * dTrans_dDispJump[0][0][i];
+ dFlux_dDispJump[1][i] = -dt * dFlux_dTrans * dTrans_dDispJump[0][1][i];
+ }
for( localIndex ke = 0; ke < 2; ++ke )
{
- localIndex const dofIndex = 2*ke;
+ localIndex const dofIndex = 4*ke;
fluxJacobian[0][dofIndex] = dt * dFlux_dP[ke];
- fluxJacobian[0][dofIndex+1] = dt * dFlux_dAper[ke];
+ fluxJacobian[0][dofIndex+1] = dt * dFlux_dDispJump[ke][0];
+ fluxJacobian[0][dofIndex+2] = dt * dFlux_dDispJump[ke][1];
+ fluxJacobian[0][dofIndex+3] = dt * dFlux_dDispJump[ke][2];
+
fluxJacobian[1][dofIndex] = -dt * dFlux_dP[ke];
- fluxJacobian[1][dofIndex+1] = -dt * dFlux_dAper[ke];
+ fluxJacobian[1][dofIndex+1] = -dt * dFlux_dDispJump[ke][0];
+ fluxJacobian[1][dofIndex+2] = -dt * dFlux_dDispJump[ke][1];
+ fluxJacobian[1][dofIndex+3] = -dt * dFlux_dDispJump[ke][2];
}
}
@@ -300,12 +308,12 @@ void FaceElementFluxKernel::
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs,
CRSMatrixView< real64, localIndex const > const & dR_dAper )
{
- GEOSX_UNUSED_VAR( dPerm_dAper );
+ GEOSX_UNUSED_VAR( dPerm_dDispJump );
GEOSX_UNUSED_VAR( dR_dAper );
SinglePhaseFVMKernels::FluxKernel::launch( stencilWrapper,
@@ -342,12 +350,12 @@ void FaceElementFluxKernel::
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs,
CRSMatrixView< real64, localIndex const > const & dR_dAper )
{
- GEOSX_UNUSED_VAR( dPerm_dAper );
+ GEOSX_UNUSED_VAR( dPerm_dDispJump );
GEOSX_UNUSED_VAR( dR_dAper );
SinglePhaseFVMKernels::FluxKernel::launch( stencilWrapper,
@@ -384,7 +392,7 @@ void FaceElementFluxKernel::
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs,
CRSMatrixView< real64, localIndex const > const & dR_dAper )
@@ -421,15 +429,15 @@ void FaceElementFluxKernel::
// compute transmissibility
real64 transmissibility[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2];
real64 dTrans_dPres[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2];
- real64 dTrans_dAper[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2];
+ real64 dTrans_dDispJump[SurfaceElementStencilWrapper::MAX_NUM_OF_CONNECTIONS][2][3];
stencilWrapper.computeWeights( iconn,
permeability,
dPerm_dPres,
- dPerm_dAper,
+ dPerm_dDispJump,
transmissibility,
dTrans_dPres,
- dTrans_dAper );
+ dTrans_dDispJump );
compute( stencilSize,
seri[iconn],
@@ -437,7 +445,7 @@ void FaceElementFluxKernel::
sei[iconn],
transmissibility,
dTrans_dPres,
- dTrans_dAper,
+ dTrans_dDispJump,
pres,
dPres,
gravCoef,
@@ -498,7 +506,7 @@ void FaceElementFluxKernel::
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
ElementViewConst< arrayView3d< real64 const > > const & permeabilityMultiplier,
R1Tensor const & gravityVector,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
@@ -536,8 +544,8 @@ void FaceElementFluxKernel::
stackArray2d< real64, MAX_NUM_FLUX_ELEMS * MAX_STENCIL_SIZE > dFlux_dAper( numFluxElems, stencilSize );
// compute transmissibility
- real64 transmissibility[MAX_NUM_OF_CONNECTIONS][2], dTrans_dPres[MAX_NUM_OF_CONNECTIONS][2], dTrans_dAper[MAX_NUM_OF_CONNECTIONS][2];
- GEOSX_UNUSED_VAR( dPerm_dPres, dPerm_dAper );
+ real64 transmissibility[MAX_NUM_OF_CONNECTIONS][2], dTrans_dPres[MAX_NUM_OF_CONNECTIONS][2], dTrans_dDispJump[MAX_NUM_OF_CONNECTIONS][2][3];
+ GEOSX_UNUSED_VAR( dPerm_dPres, dPerm_dDispJump );
stencilWrapper.computeWeights( iconn,
permeability,
permeabilityMultiplier,
@@ -550,7 +558,7 @@ void FaceElementFluxKernel::
sei[iconn],
transmissibility,
dTrans_dPres,
- dTrans_dAper,
+ dTrans_dDispJump,
pres,
dPres,
gravCoef,
@@ -603,7 +611,7 @@ FaceElementFluxKernel::compute( localIndex const numFluxElems,
arraySlice1d< localIndex const > const & sei,
real64 const (&transmissibility)[MAX_NUM_OF_CONNECTIONS][2],
real64 const (&dTrans_dPres)[MAX_NUM_OF_CONNECTIONS][2],
- real64 const (&dTrans_dAper)[MAX_NUM_OF_CONNECTIONS][2],
+ real64 const (&dTrans_dDispJump)[MAX_NUM_OF_CONNECTIONS][2][3],
ElementViewConst< arrayView1d< real64 const > > const & pres,
ElementViewConst< arrayView1d< real64 const > > const & dPres,
ElementViewConst< arrayView1d< real64 const > > const & gravCoef,
@@ -651,8 +659,8 @@ FaceElementFluxKernel::compute( localIndex const numFluxElems,
flux[k[1]] -= dt * fluxVal;
real64 dFlux_dAper[2] = {0.0, 0.0};
- dFlux_dAper[0] = dt * dFlux_dTrans * dTrans_dAper[connectionIndex][0];
- dFlux_dAper[1] = -dt * dFlux_dTrans * dTrans_dAper[connectionIndex][1];
+ dFlux_dAper[0] = dt * dFlux_dTrans * dTrans_dDispJump[connectionIndex][0][0];
+ dFlux_dAper[1] = -dt * dFlux_dTrans * dTrans_dDispJump[connectionIndex][1][0];
fluxJacobian[k[0]][k[0]] += dFlux_dP[0] * dt;
fluxJacobian[k[0]][k[1]] += dFlux_dP[1] * dt;
diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.hpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.hpp
index aece90be894..4babbb39a38 100644
--- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.hpp
+++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsFluxKernels.hpp
@@ -79,7 +79,7 @@ struct EmbeddedSurfaceFluxKernel
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs );
@@ -97,7 +97,7 @@ struct EmbeddedSurfaceFluxKernel
arraySlice1d< localIndex const > const & sei,
real64 const (&transmissibility)[MAX_NUM_OF_CONNECTIONS][2],
real64 const (&dTrans_dPres)[MAX_NUM_OF_CONNECTIONS][2],
- real64 const (&dTrans_dAper)[MAX_NUM_OF_CONNECTIONS][2],
+ real64 const (&dTrans_dDispJump)[MAX_NUM_OF_CONNECTIONS][2][3],
ElementViewConst< arrayView1d< real64 const > > const & pres,
ElementViewConst< arrayView1d< real64 const > > const & dPres,
ElementViewConst< arrayView1d< real64 const > > const & gravCoef,
@@ -142,7 +142,7 @@ struct FaceElementFluxKernel
* @param[in] dMob_dPres The derivative of mobility wrt pressure in each element
* @param[in] permeability The permeability in each element
* @param[in] dPerm_dPres The derivative of permeability wrt pressure in each element
- * @param[in] dPerm_dAper The derivative of permeability wrt aperture in each element
+ * @param[in] dPerm_dDispJump The derivative of permeability wrt aperture in each element
* @param[in] permeabilityMultiplier The permeability multiplier
* @param[in] gravityVector The gravity vector
* @param[out] localMatrix The linear system matrix
@@ -164,7 +164,7 @@ struct FaceElementFluxKernel
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
arrayView1d< real64 > const & localRhs,
CRSMatrixView< real64, localIndex const > const & dR_dAper );
@@ -204,7 +204,7 @@ struct FaceElementFluxKernel
ElementViewConst< arrayView1d< real64 const > > const & dMob_dPres,
ElementViewConst< arrayView3d< real64 const > > const & permeability,
ElementViewConst< arrayView3d< real64 const > > const & dPerm_dPres,
- ElementViewConst< arrayView3d< real64 const > > const & dPerm_dAper,
+ ElementViewConst< arrayView4d< real64 const > > const & dPerm_dDispJump,
ElementViewConst< arrayView3d< real64 const > > const & permeabilityMultiplier,
R1Tensor const & gravityVector,
CRSMatrixView< real64, globalIndex const > const & localMatrix,
@@ -226,7 +226,7 @@ struct FaceElementFluxKernel
arraySlice1d< localIndex const > const & sei,
real64 const (&transmissibility)[MAX_NUM_OF_CONNECTIONS][2],
real64 const (&dTrans_dPres)[MAX_NUM_OF_CONNECTIONS][2],
- real64 const (&dTrans_dAper)[MAX_NUM_OF_CONNECTIONS][2],
+ real64 const (&dTrans_dDispJump)[MAX_NUM_OF_CONNECTIONS][2][3],
ElementViewConst< arrayView1d< real64 const > > const & pres,
ElementViewConst< arrayView1d< real64 const > > const & dPres,
ElementViewConst< arrayView1d< real64 const > > const & gravCoef,
diff --git a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsSolverEmbeddedFractures.cpp b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsSolverEmbeddedFractures.cpp
index 40debecdee7..9e2eb35aa2c 100644
--- a/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsSolverEmbeddedFractures.cpp
+++ b/src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoromechanicsSolverEmbeddedFractures.cpp
@@ -269,7 +269,7 @@ void SinglePhasePoromechanicsSolverEmbeddedFractures::addCouplingNumNonzeros( Do
// so we only add the coupling with the jumps of the neighbours.
if( k1 != k0 )
{
- rowLengths[ rowNumber ] += 1;
+ rowLengths[ rowNumber ] += embeddedSurfaceSubRegion.numOfJumpEnrichments(); // number of jump enrichments.
}
}
}
@@ -368,8 +368,12 @@ void SinglePhasePoromechanicsSolverEmbeddedFractures::addCouplingSparsityPattern
// so we only add the coupling with the jumps of the neighbours.
if( k1 != k0 )
{
- globalIndex const colIndex = jumpDofNumber[sei[iconn][k1]];
- pattern.insertNonZero( rowIndex, colIndex );
+ for( localIndex i=0; i const hydraulicAperture =
subRegion.template getExtrinsicData< extrinsicMeshData::flow::hydraulicAperture >();
+ arrayView1d< real64 const > const oldHydraulicAperture =
+ subRegion.template getExtrinsicData< extrinsicMeshData::flow::aperture0 >();
+
arrayView1d< real64 const > const volume = subRegion.getElementVolume();
arrayView1d< real64 > const deltaVolume =
@@ -606,14 +613,18 @@ void SinglePhasePoromechanicsSolverEmbeddedFractures::updateState( DomainPartiti
ContactBase const & contact = getConstitutiveModel< ContactBase >( subRegion, m_fracturesSolver->getContactRelationName() );
- constitutiveUpdatePassThru( contact, [&] ( auto & castedContact )
+ ContactBase::KernelWrapper contactWrapper = contact.createKernelWrapper();
+
+ CoupledSolidBase & porousSolid = subRegion.template getConstitutiveModel< CoupledSolidBase >( m_porousMaterialNames[targetIndex] );
+
+ constitutive::ConstitutivePassThru< CompressibleSolidBase >::execute( porousSolid, [=, &subRegion] ( auto & castedPorousSolid )
{
- using ContactType = TYPEOFREF( castedContact );
- typename ContactType::KernelWrapper contactWrapper = castedContact.createKernelWrapper();
+ typename TYPEOFREF( castedPorousSolid ) ::KernelWrapper porousMaterialWrapper = castedPorousSolid.createKernelUpdates();
PoromechanicsEFEMKernels::StateUpdateKernel::
launch< parallelDevicePolicy<> >( subRegion.size(),
contactWrapper,
+ porousMaterialWrapper,
dispJump,
pressure,
deltaPressure,
@@ -621,14 +632,12 @@ void SinglePhasePoromechanicsSolverEmbeddedFractures::updateState( DomainPartiti
volume,
deltaVolume,
aperture,
+ oldHydraulicAperture,
hydraulicAperture,
fractureTraction,
dTdpf );
} );
-
- // update fracture's permeability and porosity
- m_flowSolver->updatePorosityAndPermeability( subRegion, targetIndex );
// update fluid model
m_flowSolver->updateFluidState( subRegion, targetIndex );
diff --git a/src/coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability.rst b/src/coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability.rst
new file mode 100644
index 00000000000..e15edba5a2f
--- /dev/null
+++ b/src/coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability.rst
@@ -0,0 +1,13 @@
+
+
+============================ ====== ======== ===========================================
+Name Type Default Description
+============================ ====== ======== ===========================================
+name string required A name is required for any non-unique nodes
+permeabilityModelName string required Name of the permeability model.
+porosityModelName string required Name of the porosity model.
+solidInternalEnergyModelName string Name of the solid internal energy model.
+solidModelName string required Name of the solid model.
+============================ ====== ======== ===========================================
+
+
diff --git a/src/coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability_other.rst b/src/coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability_other.rst
new file mode 100644
index 00000000000..adf1c1b8aec
--- /dev/null
+++ b/src/coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability_other.rst
@@ -0,0 +1,9 @@
+
+
+==== ==== ============================
+Name Type Description
+==== ==== ============================
+ (no documentation available)
+==== ==== ============================
+
+
diff --git a/src/coreComponents/schema/docs/Constitutive.rst b/src/coreComponents/schema/docs/Constitutive.rst
index 1696702819f..ae292932ca8 100644
--- a/src/coreComponents/schema/docs/Constitutive.rst
+++ b/src/coreComponents/schema/docs/Constitutive.rst
@@ -16,6 +16,7 @@ CompressibleSinglePhaseFluid node :ref:`XML_CompressibleS
CompressibleSolidCarmanKozenyPermeability node :ref:`XML_CompressibleSolidCarmanKozenyPermeability`
CompressibleSolidConstantPermeability node :ref:`XML_CompressibleSolidConstantPermeability`
CompressibleSolidParallelPlatesPermeability node :ref:`XML_CompressibleSolidParallelPlatesPermeability`
+CompressibleSolidSlipDependentPermeability node :ref:`XML_CompressibleSolidSlipDependentPermeability`
ConstantPermeability node :ref:`XML_ConstantPermeability`
Coulomb node :ref:`XML_Coulomb`
DamageElasticIsotropic node :ref:`XML_DamageElasticIsotropic`
@@ -45,7 +46,7 @@ ProppantPermeability node :ref:`XML_ProppantPerme
ProppantPorosity node :ref:`XML_ProppantPorosity`
ProppantSlurryFluid node :ref:`XML_ProppantSlurryFluid`
ProppantSolidProppantPermeability node :ref:`XML_ProppantSolidProppantPermeability`
-StrainDependentPermeability node :ref:`XML_StrainDependentPermeability`
+SlipDependentPermeability node :ref:`XML_SlipDependentPermeability`
TableCapillaryPressure node :ref:`XML_TableCapillaryPressure`
TableRelativePermeability node :ref:`XML_TableRelativePermeability`
VanGenuchtenBakerRelativePermeability node :ref:`XML_VanGenuchtenBakerRelativePermeability`
diff --git a/src/coreComponents/schema/docs/Constitutive_other.rst b/src/coreComponents/schema/docs/Constitutive_other.rst
index 56a37beefd8..c0b2f0ff85f 100644
--- a/src/coreComponents/schema/docs/Constitutive_other.rst
+++ b/src/coreComponents/schema/docs/Constitutive_other.rst
@@ -16,6 +16,7 @@ CompressibleSinglePhaseFluid node :ref:`DATASTRUCTURE_Compressibl
CompressibleSolidCarmanKozenyPermeability node :ref:`DATASTRUCTURE_CompressibleSolidCarmanKozenyPermeability`
CompressibleSolidConstantPermeability node :ref:`DATASTRUCTURE_CompressibleSolidConstantPermeability`
CompressibleSolidParallelPlatesPermeability node :ref:`DATASTRUCTURE_CompressibleSolidParallelPlatesPermeability`
+CompressibleSolidSlipDependentPermeability node :ref:`DATASTRUCTURE_CompressibleSolidSlipDependentPermeability`
ConstantPermeability node :ref:`DATASTRUCTURE_ConstantPermeability`
Coulomb node :ref:`DATASTRUCTURE_Coulomb`
DamageElasticIsotropic node :ref:`DATASTRUCTURE_DamageElasticIsotropic`
@@ -45,7 +46,7 @@ ProppantPermeability node :ref:`DATASTRUCTURE_ProppantPer
ProppantPorosity node :ref:`DATASTRUCTURE_ProppantPorosity`
ProppantSlurryFluid node :ref:`DATASTRUCTURE_ProppantSlurryFluid`
ProppantSolidProppantPermeability node :ref:`DATASTRUCTURE_ProppantSolidProppantPermeability`
-StrainDependentPermeability node :ref:`DATASTRUCTURE_StrainDependentPermeability`
+SlipDependentPermeability node :ref:`DATASTRUCTURE_SlipDependentPermeability`
TableCapillaryPressure node :ref:`DATASTRUCTURE_TableCapillaryPressure`
TableRelativePermeability node :ref:`DATASTRUCTURE_TableRelativePermeability`
VanGenuchtenBakerRelativePermeability node :ref:`DATASTRUCTURE_VanGenuchtenBakerRelativePermeability`
diff --git a/src/coreComponents/schema/docs/ParallelPlatesPermeability_other.rst b/src/coreComponents/schema/docs/ParallelPlatesPermeability_other.rst
index 85fd5c30ca8..43a2d06a562 100644
--- a/src/coreComponents/schema/docs/ParallelPlatesPermeability_other.rst
+++ b/src/coreComponents/schema/docs/ParallelPlatesPermeability_other.rst
@@ -1,11 +1,11 @@
-=============== ============== ========================================================
-Name Type Description
-=============== ============== ========================================================
-dPerm_dAperture real64_array3d Derivative of rock permeability with respect to aperture
-dPerm_dPressure real64_array3d Derivative of rock permeability with respect to pressure
-permeability real64_array3d Rock permeability
-=============== ============== ========================================================
+=============== ============== =================================================================
+Name Type Description
+=============== ============== =================================================================
+dPerm_dDispJump real64_array4d Derivative of rock permeability with respect to displacement jump
+dPerm_dPressure real64_array3d Derivative of rock permeability with respect to pressure
+permeability real64_array3d Rock permeability
+=============== ============== =================================================================
diff --git a/src/coreComponents/schema/docs/ProppantPermeability_other.rst b/src/coreComponents/schema/docs/ProppantPermeability_other.rst
index eb6f2612352..989c76d45c1 100644
--- a/src/coreComponents/schema/docs/ProppantPermeability_other.rst
+++ b/src/coreComponents/schema/docs/ProppantPermeability_other.rst
@@ -1,13 +1,13 @@
-======================== ============== ========================================================
-Name Type Description
-======================== ============== ========================================================
-dPerm_dAperture real64_array3d Derivative of rock permeability with respect to aperture
-dPerm_dPressure real64_array3d Derivative of rock permeability with respect to pressure
-permeability real64_array3d Rock permeability
-permeabilityMultiplier real64_array3d Rock permeability multiplier
-proppantPackPermeability real64 (no description available)
-======================== ============== ========================================================
+======================== ============== =================================================================
+Name Type Description
+======================== ============== =================================================================
+dPerm_dDispJump real64_array4d Derivative of rock permeability with respect to displacement jump
+dPerm_dPressure real64_array3d Derivative of rock permeability with respect to pressure
+permeability real64_array3d Rock permeability
+permeabilityMultiplier real64_array3d Rock permeability multiplier
+proppantPackPermeability real64 (no description available)
+======================== ============== =================================================================
diff --git a/src/coreComponents/schema/docs/SlipDependentPermeability.rst b/src/coreComponents/schema/docs/SlipDependentPermeability.rst
new file mode 100644
index 00000000000..39ed60a847b
--- /dev/null
+++ b/src/coreComponents/schema/docs/SlipDependentPermeability.rst
@@ -0,0 +1,12 @@
+
+
+=================== ======== ======== ===========================================
+Name Type Default Description
+=================== ======== ======== ===========================================
+initialPermeability R1Tensor required initial permeability of the fracture.
+maxPermMultiplier real64 required Maximum permeability multiplier.
+name string required A name is required for any non-unique nodes
+shearDispThreshold real64 required Threshold of shear displacement.
+=================== ======== ======== ===========================================
+
+
diff --git a/src/coreComponents/schema/docs/StrainDependentPermeability_other.rst b/src/coreComponents/schema/docs/SlipDependentPermeability_other.rst
similarity index 59%
rename from src/coreComponents/schema/docs/StrainDependentPermeability_other.rst
rename to src/coreComponents/schema/docs/SlipDependentPermeability_other.rst
index fa997a57413..de7316445c6 100644
--- a/src/coreComponents/schema/docs/StrainDependentPermeability_other.rst
+++ b/src/coreComponents/schema/docs/SlipDependentPermeability_other.rst
@@ -1,10 +1,11 @@
-=============== ============== ========================================================
-Name Type Description
-=============== ============== ========================================================
-dPerm_dPressure real64_array3d Derivative of rock permeability with respect to pressure
-permeability real64_array3d Rock permeability
-=============== ============== ========================================================
+=============== ============== ============================================================
+Name Type Description
+=============== ============== ============================================================
+dPerm_dDispJump real64_array4d Derivative of the permeability w.r.t. the displacement jump.
+dPerm_dPressure real64_array3d Derivative of rock permeability with respect to pressure
+permeability real64_array3d Rock permeability
+=============== ============== ============================================================
diff --git a/src/coreComponents/schema/docs/StrainDependentPermeability.rst b/src/coreComponents/schema/docs/StrainDependentPermeability.rst
deleted file mode 100644
index ef907f0677c..00000000000
--- a/src/coreComponents/schema/docs/StrainDependentPermeability.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-==== ====== ======== ===========================================
-Name Type Default Description
-==== ====== ======== ===========================================
-name string required A name is required for any non-unique nodes
-==== ====== ======== ===========================================
-
-
diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd
index 6bc6b8685e8..59d274dc39a 100644
--- a/src/coreComponents/schema/schema.xsd
+++ b/src/coreComponents/schema/schema.xsd
@@ -1936,6 +1936,7 @@ Equal to 1 for surface conditions, and to 0 for reservoir conditions-->
+
@@ -1965,7 +1966,7 @@ Equal to 1 for surface conditions, and to 0 for reservoir conditions-->
-
+
@@ -2183,6 +2184,18 @@ The expected format is "{ waterMax, oilMax }", in that order-->
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2665,7 +2678,13 @@ For instance, if "oil" is before "gas" in "phaseNames", the table order should b
-
+
+
+
+
+
+
+
diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other
index 1e948678c28..453c53b8a13 100644
--- a/src/coreComponents/schema/schema.xsd.other
+++ b/src/coreComponents/schema/schema.xsd.other
@@ -784,6 +784,7 @@
+
@@ -813,7 +814,7 @@
-
+
@@ -1121,6 +1122,7 @@
+
@@ -1414,8 +1416,8 @@
-
-
+
+
@@ -1461,8 +1463,8 @@
-
-
+
+
@@ -1521,7 +1523,9 @@
-
+
+
+
diff --git a/src/docs/sphinx/CompleteXMLSchema.rst b/src/docs/sphinx/CompleteXMLSchema.rst
index 85581bba477..1bc2323f9fd 100644
--- a/src/docs/sphinx/CompleteXMLSchema.rst
+++ b/src/docs/sphinx/CompleteXMLSchema.rst
@@ -190,6 +190,13 @@ Element: CompressibleSolidParallelPlatesPermeability
.. include:: ../../coreComponents/schema/docs/CompressibleSolidParallelPlatesPermeability.rst
+.. _XML_CompressibleSolidSlipDependentPermeability:
+
+Element: CompressibleSolidSlipDependentPermeability
+===================================================
+.. include:: ../../coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability.rst
+
+
.. _XML_ConstantPermeability:
Element: ConstantPermeability
@@ -771,6 +778,13 @@ Element: SinglePhaseWell
.. include:: ../../coreComponents/schema/docs/SinglePhaseWell.rst
+.. _XML_SlipDependentPermeability:
+
+Element: SlipDependentPermeability
+==================================
+.. include:: ../../coreComponents/schema/docs/SlipDependentPermeability.rst
+
+
.. _XML_SolidMechanicsEmbeddedFractures:
Element: SolidMechanicsEmbeddedFractures
@@ -813,13 +827,6 @@ Element: SourceFlux
.. include:: ../../coreComponents/schema/docs/SourceFlux.rst
-.. _XML_StrainDependentPermeability:
-
-Element: StrainDependentPermeability
-====================================
-.. include:: ../../coreComponents/schema/docs/StrainDependentPermeability.rst
-
-
.. _XML_SurfaceElementRegion:
Element: SurfaceElementRegion
@@ -1139,6 +1146,13 @@ Datastructure: CompressibleSolidParallelPlatesPermeability
.. include:: ../../coreComponents/schema/docs/CompressibleSolidParallelPlatesPermeability_other.rst
+.. _DATASTRUCTURE_CompressibleSolidSlipDependentPermeability:
+
+Datastructure: CompressibleSolidSlipDependentPermeability
+=========================================================
+.. include:: ../../coreComponents/schema/docs/CompressibleSolidSlipDependentPermeability_other.rst
+
+
.. _DATASTRUCTURE_ConstantPermeability:
Datastructure: ConstantPermeability
@@ -1748,6 +1762,13 @@ Datastructure: SinglePhaseWell
.. include:: ../../coreComponents/schema/docs/SinglePhaseWell_other.rst
+.. _DATASTRUCTURE_SlipDependentPermeability:
+
+Datastructure: SlipDependentPermeability
+========================================
+.. include:: ../../coreComponents/schema/docs/SlipDependentPermeability_other.rst
+
+
.. _DATASTRUCTURE_SolidMechanicsEmbeddedFractures:
Datastructure: SolidMechanicsEmbeddedFractures
@@ -1790,13 +1811,6 @@ Datastructure: SourceFlux
.. include:: ../../coreComponents/schema/docs/SourceFlux_other.rst
-.. _DATASTRUCTURE_StrainDependentPermeability:
-
-Datastructure: StrainDependentPermeability
-==========================================
-.. include:: ../../coreComponents/schema/docs/StrainDependentPermeability_other.rst
-
-
.. _DATASTRUCTURE_SurfaceElementRegion:
Datastructure: SurfaceElementRegion