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