diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index c30bb9fd6d9..c9a0c08f4ff 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr3779-13734-44eed3f + baseline: integratedTests/baseline_integratedTests-pr3790-13899-bb7b286 allow_fail: all: '' diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index 91fd5145d48..9d19d2adff5 100644 --- a/BASELINE_NOTES.md +++ b/BASELINE_NOTES.md @@ -6,6 +6,10 @@ This file is designed to track changes to the integrated test baselines. Any developer who updates the baseline ID in the .integrated_tests.yaml file is expected to create an entry in this file with the pull request number, date, and their justification for rebaselining. These notes should be in reverse-chronological order, and use the following time format: (YYYY-MM-DD). +PR #3790 (2025-09-29) +===================== +Enable Kozeny-Carman Permeability for PorousSolid. + PR #3779 (2025-09-21) ===================== Add new inputs for function input var scaling. Add new Multiscale linear solver parameters XML block. diff --git a/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_base.xml b/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_base.xml new file mode 100644 index 00000000000..f85c7e1fdbe --- /dev/null +++ b/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_base.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_fim_smoke.xml b/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_fim_smoke.xml new file mode 100644 index 00000000000..daa0e4471c0 --- /dev/null +++ b/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_fim_smoke.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_sequential_smoke.xml b/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_sequential_smoke.xml new file mode 100644 index 00000000000..696d4b7d478 --- /dev/null +++ b/inputFiles/poromechanics/PoroElastic_CarmanKozenyPermeability_sequential_smoke.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/poroElasticCoupling.ats b/inputFiles/poromechanics/poroElasticCoupling.ats index 4627c12c41a..c857d700877 100644 --- a/inputFiles/poromechanics/poroElasticCoupling.ats +++ b/inputFiles/poromechanics/poroElasticCoupling.ats @@ -288,6 +288,26 @@ def _build_PoroElasticGravity_cases(): description, restartcheck_params) +def _build_PoroElasticCarmanKozenyFIM_cases(): + description = Description( + "Poroelastic problem with CarmanKozeny permeability model (fim) ", "auto", + "Jian Huang", True) + restartcheck_params = {"atol": 1.0e-5, "rtol": 2.0e-7} + return _build_poro_elastic_coupling_case( + "PoroElastic_CarmanKozenyPermeability_fim_smoke.xml", (0, 50), + ((1, 1, 1), (2, 2, 1)), description, restartcheck_params) + + +def _build_PoroElasticCarmanKozenySequential_cases(): + description = Description( + "Poroelastic problem with CarmanKozeny permeability model (Sequential) ", "auto", + "Jian Huang", True) + restartcheck_params = {"atol": 1.0e-5, "rtol": 2.0e-7} + return _build_poro_elastic_coupling_case( + "PoroElastic_CarmanKozenyPermeability_sequential_smoke.xml", (0, 50), + ((1, 1, 1), (2, 2, 1)), description, restartcheck_params) + + def test_poro_elastic_coupling_cases(): deck_instances = [ _build_Terzaghi_cases(), @@ -308,7 +328,9 @@ def test_poro_elastic_coupling_cases(): _build_PoroStaircaseCO2PeacemanWell_sequential_cases(), _build_PoroElasticPEBICO2FIM_cases(), _build_PoroElasticPEBICO2Sequential_cases(), - _build_PoroElasticGravity_cases() + _build_PoroElasticGravity_cases(), + _build_PoroElasticCarmanKozenyFIM_cases(), + _build_PoroElasticCarmanKozenySequential_cases() ] generate_geos_tests(deck_instances) diff --git a/src/coreComponents/constitutive/ConstitutivePassThru.hpp b/src/coreComponents/constitutive/ConstitutivePassThru.hpp index 65314e99b1e..48467e5c1d8 100644 --- a/src/coreComponents/constitutive/ConstitutivePassThru.hpp +++ b/src/coreComponents/constitutive/ConstitutivePassThru.hpp @@ -267,29 +267,6 @@ struct ConstitutivePassThru< NullModel > }; -/** - * Specialization for the PorousSolid< ElasticIsotropic > model. - */ -template<> -struct ConstitutivePassThru< PorousSolid< ElasticIsotropic > > -{ - template< typename LAMBDA > - static - void execute( ConstitutiveBase & constitutiveRelation, LAMBDA && lambda ) - { - if( auto * const ptr = dynamic_cast< PorousSolid< ElasticIsotropic > * >( &constitutiveRelation ) ) - { - lambda( *ptr ); - } - else - { - GEOS_ERROR( "ConstitutivePassThru< PorousSolid< ElasticIsotropic > >::execute failed on constitutive relation " - << constitutiveRelation.getDataContext() << " with type " - << LvArray::system::demangleType( constitutiveRelation ) ); - } - } -}; - /** * Specialization for the Damage models. */ @@ -318,18 +295,29 @@ struct ConstitutivePassThru< PorousSolidBase > template< typename LAMBDA > static void execute( ConstitutiveBase & constitutiveRelation, LAMBDA && lambda ) { - ConstitutivePassThruHandler< PorousSolid< DruckerPragerExtended >, - PorousSolid< ModifiedCamClay >, - PorousSolid< DelftEgg >, - PorousSolid< DruckerPrager >, - PorousSolid< DuvautLionsSolid< DruckerPrager > >, - PorousSolid< DuvautLionsSolid< DruckerPragerExtended > >, - PorousSolid< DuvautLionsSolid< ModifiedCamClay > >, - PorousSolid< ElasticIsotropic >, - PorousSolid< ElasticTransverseIsotropic >, - PorousSolid< ElasticIsotropicPressureDependent >, - PorousSolid< ElasticOrthotropic > >::execute( constitutiveRelation, - std::forward< LAMBDA >( lambda ) ); + ConstitutivePassThruHandler< PorousSolid< DruckerPragerExtended, ConstantPermeability >, + PorousSolid< ModifiedCamClay, ConstantPermeability >, + PorousSolid< DelftEgg, ConstantPermeability >, + PorousSolid< DruckerPrager, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPrager >, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< ModifiedCamClay >, ConstantPermeability >, + PorousSolid< ElasticIsotropic, ConstantPermeability >, + PorousSolid< ElasticTransverseIsotropic, ConstantPermeability >, + PorousSolid< ElasticIsotropicPressureDependent, ConstantPermeability >, + PorousSolid< ElasticOrthotropic, ConstantPermeability >, + PorousSolid< DruckerPragerExtended, CarmanKozenyPermeability >, + PorousSolid< ModifiedCamClay, CarmanKozenyPermeability >, + PorousSolid< DelftEgg, CarmanKozenyPermeability >, + PorousSolid< DruckerPrager, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPrager >, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< ModifiedCamClay >, CarmanKozenyPermeability >, + PorousSolid< ElasticIsotropic, CarmanKozenyPermeability >, + PorousSolid< ElasticTransverseIsotropic, CarmanKozenyPermeability >, + PorousSolid< ElasticIsotropicPressureDependent, CarmanKozenyPermeability >, + PorousSolid< ElasticOrthotropic, CarmanKozenyPermeability > >::execute( constitutiveRelation, + std::forward< LAMBDA >( lambda ) ); } }; @@ -424,17 +412,28 @@ struct ConstitutivePassThru< CoupledSolidBase > CompressibleSolid< PressurePorosity, PressurePermeability >, CompressibleSolid< PressurePorosity, SlipDependentPermeability >, CompressibleSolid< PressurePorosity, WillisRichardsPermeability >, - PorousSolid< DruckerPragerExtended >, - PorousSolid< ModifiedCamClay >, - PorousSolid< DelftEgg >, - PorousSolid< DruckerPrager >, - PorousSolid< DuvautLionsSolid< DruckerPrager > >, - PorousSolid< DuvautLionsSolid< DruckerPragerExtended > >, - PorousSolid< DuvautLionsSolid< ModifiedCamClay > >, - PorousSolid< ElasticIsotropic >, - PorousSolid< ElasticTransverseIsotropic >, - PorousSolid< ElasticIsotropicPressureDependent >, - PorousSolid< ElasticOrthotropic >, + PorousSolid< DruckerPragerExtended, ConstantPermeability >, + PorousSolid< ModifiedCamClay, ConstantPermeability >, + PorousSolid< DelftEgg, ConstantPermeability >, + PorousSolid< DruckerPrager, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPrager >, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< ModifiedCamClay >, ConstantPermeability >, + PorousSolid< ElasticIsotropic, ConstantPermeability >, + PorousSolid< ElasticTransverseIsotropic, ConstantPermeability >, + PorousSolid< ElasticIsotropicPressureDependent, ConstantPermeability >, + PorousSolid< ElasticOrthotropic, ConstantPermeability >, + PorousSolid< DruckerPragerExtended, CarmanKozenyPermeability >, + PorousSolid< ModifiedCamClay, CarmanKozenyPermeability >, + PorousSolid< DelftEgg, CarmanKozenyPermeability >, + PorousSolid< DruckerPrager, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPrager >, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< ModifiedCamClay >, CarmanKozenyPermeability >, + PorousSolid< ElasticIsotropic, CarmanKozenyPermeability >, + PorousSolid< ElasticTransverseIsotropic, CarmanKozenyPermeability >, + PorousSolid< ElasticIsotropicPressureDependent, CarmanKozenyPermeability >, + PorousSolid< ElasticOrthotropic, CarmanKozenyPermeability >, PorousDamageSolid< DamageSpectral< ElasticIsotropic > >, PorousDamageSolid< DamageVolDev< ElasticIsotropic > >, PorousDamageSolid< Damage< ElasticIsotropic > > >::execute( constitutiveRelation, @@ -451,17 +450,28 @@ struct ConstitutivePassThru< CoupledSolidBase > CompressibleSolid< PressurePorosity, PressurePermeability >, CompressibleSolid< PressurePorosity, SlipDependentPermeability >, CompressibleSolid< PressurePorosity, WillisRichardsPermeability >, - PorousSolid< DruckerPragerExtended >, - PorousSolid< ModifiedCamClay >, - PorousSolid< DelftEgg >, - PorousSolid< DruckerPrager >, - PorousSolid< DuvautLionsSolid< DruckerPrager > >, - PorousSolid< DuvautLionsSolid< DruckerPragerExtended > >, - PorousSolid< DuvautLionsSolid< ModifiedCamClay > >, - PorousSolid< ElasticIsotropic >, - PorousSolid< ElasticTransverseIsotropic >, - PorousSolid< ElasticIsotropicPressureDependent >, - PorousSolid< ElasticOrthotropic >, + PorousSolid< DruckerPragerExtended, ConstantPermeability >, + PorousSolid< ModifiedCamClay, ConstantPermeability >, + PorousSolid< DelftEgg, ConstantPermeability >, + PorousSolid< DruckerPrager, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPrager >, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, ConstantPermeability >, + PorousSolid< DuvautLionsSolid< ModifiedCamClay >, ConstantPermeability >, + PorousSolid< ElasticIsotropic, ConstantPermeability >, + PorousSolid< ElasticTransverseIsotropic, ConstantPermeability >, + PorousSolid< ElasticIsotropicPressureDependent, ConstantPermeability >, + PorousSolid< ElasticOrthotropic, ConstantPermeability >, + PorousSolid< DruckerPragerExtended, CarmanKozenyPermeability >, + PorousSolid< ModifiedCamClay, CarmanKozenyPermeability >, + PorousSolid< DelftEgg, CarmanKozenyPermeability >, + PorousSolid< DruckerPrager, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPrager >, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, CarmanKozenyPermeability >, + PorousSolid< DuvautLionsSolid< ModifiedCamClay >, CarmanKozenyPermeability >, + PorousSolid< ElasticIsotropic, CarmanKozenyPermeability >, + PorousSolid< ElasticTransverseIsotropic, CarmanKozenyPermeability >, + PorousSolid< ElasticIsotropicPressureDependent, CarmanKozenyPermeability >, + PorousSolid< ElasticOrthotropic, CarmanKozenyPermeability >, PorousDamageSolid< DamageSpectral< ElasticIsotropic > >, PorousDamageSolid< DamageVolDev< ElasticIsotropic > >, PorousDamageSolid< Damage< ElasticIsotropic > > >::execute( constitutiveRelation, diff --git a/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.cpp b/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.cpp index f0958c5734f..ccd578d5975 100644 --- a/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.cpp +++ b/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.cpp @@ -63,6 +63,35 @@ void CarmanKozenyPermeability::allocateConstitutiveData( Group & parent, PermeabilityBase::allocateConstitutiveData( parent, numPts ); } +void CarmanKozenyPermeability::initializeState() const +{ + localIndex const numE = m_permeability.size( 0 ); + integer constexpr numQuad = 1; // NOTE: enforcing 1 quadrature point + + auto permView = m_permeability.toView(); + real64 const permComponents[3] = { m_particleDiameter, + m_particleDiameter, + m_particleDiameter }; + + forAll< parallelDevicePolicy<> >( numE, [=] GEOS_HOST_DEVICE ( localIndex const ei ) + { + for( localIndex q = 0; q < numQuad; ++q ) + { + for( integer dim=0; dim < 3; ++dim ) + { + // The default value is -1 so if it still -1 it needs to be set to something physical + if( permView[ei][q][dim] < 0 ) + { + permView[ei][q][dim] = permComponents[dim]; + } + } + } + } ); +} + +void CarmanKozenyPermeability::postInputInitialization() +{} + REGISTER_CATALOG_ENTRY( ConstitutiveBase, CarmanKozenyPermeability, string const &, Group * const ) } diff --git a/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.hpp b/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.hpp index d2f85582c05..2a121e0d36c 100644 --- a/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.hpp +++ b/src/coreComponents/constitutive/permeability/CarmanKozenyPermeability.hpp @@ -121,6 +121,12 @@ class CarmanKozenyPermeability : public PermeabilityBase static constexpr char const * anisotropyString() { return "anisotropy"; } }; + virtual void initializeState() const override final; + +protected: + + virtual void postInputInitialization() override; + private: /// dPermeability_dPorosity @@ -143,7 +149,7 @@ void CarmanKozenyPermeabilityUpdate::compute( real64 const & porosity, arraySlice1d< real64 > const & permeability, arraySlice1d< real64 > const & dPerm_dPorosity ) const { - real64 const constant = pow( m_sphericity*m_particleDiameter, 2 ) / 180; + real64 const constant = pow( m_sphericity*m_particleDiameter, 2 ) / 150; real64 const permValue = constant * pow( porosity, 3 )/ pow( (1 - porosity), 2 ); diff --git a/src/coreComponents/constitutive/solid/PorousSolid.cpp b/src/coreComponents/constitutive/solid/PorousSolid.cpp index 7fb15c8bf44..5b871f186e6 100644 --- a/src/coreComponents/constitutive/solid/PorousSolid.cpp +++ b/src/coreComponents/constitutive/solid/PorousSolid.cpp @@ -27,6 +27,8 @@ #include "DruckerPragerExtended.hpp" #include "ModifiedCamClay.hpp" #include "DuvautLionsSolid.hpp" +#include "constitutive/permeability/ConstantPermeability.hpp" +#include "constitutive/permeability/CarmanKozenyPermeability.hpp" namespace geos { @@ -36,40 +38,62 @@ using namespace dataRepository; namespace constitutive { -template< typename SOLID_TYPE > -PorousSolid< SOLID_TYPE >::PorousSolid( string const & name, Group * const parent ): - CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPermeability >( name, parent ) +template< typename SOLID_TYPE, + typename PERM_TYPE > +PorousSolid< SOLID_TYPE, PERM_TYPE >::PorousSolid( string const & name, Group * const parent ): + CoupledSolid< SOLID_TYPE, BiotPorosity, PERM_TYPE >( name, parent ) {} -template< typename SOLID_TYPE > -void PorousSolid< SOLID_TYPE >::initializeState() const +template< typename SOLID_TYPE, + typename PERM_TYPE > +void PorousSolid< SOLID_TYPE, PERM_TYPE >::initializeState() const { - CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPermeability >::initializeState(); + CoupledSolid< SOLID_TYPE, BiotPorosity, PERM_TYPE >::initializeState(); } // Register all PorousSolid model types. -typedef PorousSolid< ElasticIsotropic > PorousElasticIsotropic; -typedef PorousSolid< ElasticTransverseIsotropic > PorousElasticTransverseIsotropic; -typedef PorousSolid< ElasticOrthotropic > PorousElasticOrthotropic; -typedef PorousSolid< DelftEgg > PorousDelftEgg; -typedef PorousSolid< DruckerPrager > PorousDruckerPrager; -typedef PorousSolid< DruckerPragerExtended > PorousDruckerPragerExtended; -typedef PorousSolid< DuvautLionsSolid< DruckerPrager > > PorousViscoDruckerPrager; -typedef PorousSolid< DuvautLionsSolid< DruckerPragerExtended > > PorousViscoDruckerPragerExtended; -typedef PorousSolid< DuvautLionsSolid< ModifiedCamClay > > PorousViscoModifiedCamClay; -typedef PorousSolid< ModifiedCamClay > PorousModifiedCamClay; +typedef PorousSolid< ElasticIsotropic, ConstantPermeability > PorousElasticIsotropicConstant; +typedef PorousSolid< ElasticTransverseIsotropic, ConstantPermeability > PorousElasticTransverseIsotropicConstant; +typedef PorousSolid< ElasticOrthotropic, ConstantPermeability > PorousElasticOrthotropicConstant; +typedef PorousSolid< DelftEgg, ConstantPermeability > PorousDelftEggConstant; +typedef PorousSolid< DruckerPrager, ConstantPermeability > PorousDruckerPragerConstant; +typedef PorousSolid< DruckerPragerExtended, ConstantPermeability > PorousDruckerPragerExtendedConstant; +typedef PorousSolid< DuvautLionsSolid< DruckerPrager >, ConstantPermeability > PorousViscoDruckerPragerConstant; +typedef PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, ConstantPermeability > PorousViscoDruckerPragerExtendedConstant; +typedef PorousSolid< DuvautLionsSolid< ModifiedCamClay >, ConstantPermeability > PorousViscoModifiedCamClayConstant; +typedef PorousSolid< ModifiedCamClay, ConstantPermeability > PorousModifiedCamClayConstant; +typedef PorousSolid< ElasticIsotropic, CarmanKozenyPermeability > PorousElasticIsotropicCK; +typedef PorousSolid< ElasticTransverseIsotropic, CarmanKozenyPermeability > PorousElasticTransverseIsotropicCK; +typedef PorousSolid< ElasticOrthotropic, CarmanKozenyPermeability > PorousElasticOrthotropicCK; +typedef PorousSolid< DelftEgg, CarmanKozenyPermeability > PorousDelftEggCK; +typedef PorousSolid< DruckerPrager, CarmanKozenyPermeability > PorousDruckerPragerCK; +typedef PorousSolid< DruckerPragerExtended, CarmanKozenyPermeability > PorousDruckerPragerExtendedCK; +typedef PorousSolid< DuvautLionsSolid< DruckerPrager >, CarmanKozenyPermeability > PorousViscoDruckerPragerCK; +typedef PorousSolid< DuvautLionsSolid< DruckerPragerExtended >, CarmanKozenyPermeability > PorousViscoDruckerPragerExtendedCK; +typedef PorousSolid< DuvautLionsSolid< ModifiedCamClay >, CarmanKozenyPermeability > PorousViscoModifiedCamClayCK; +typedef PorousSolid< ModifiedCamClay, CarmanKozenyPermeability > PorousModifiedCamClayCK; -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticIsotropic, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticTransverseIsotropic, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticOrthotropic, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDelftEgg, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDruckerPrager, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDruckerPragerExtended, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousModifiedCamClay, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoDruckerPrager, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoDruckerPragerExtended, string const &, Group * const ) -REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoModifiedCamClay, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticIsotropicConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticTransverseIsotropicConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticOrthotropicConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDelftEggConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDruckerPragerConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDruckerPragerExtendedConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousModifiedCamClayConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoDruckerPragerConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoDruckerPragerExtendedConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoModifiedCamClayConstant, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticIsotropicCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticTransverseIsotropicCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousElasticOrthotropicCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDelftEggCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDruckerPragerCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousDruckerPragerExtendedCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousModifiedCamClayCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoDruckerPragerCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoDruckerPragerExtendedCK, string const &, Group * const ) +REGISTER_CATALOG_ENTRY( ConstitutiveBase, PorousViscoModifiedCamClayCK, string const &, Group * const ) } diff --git a/src/coreComponents/constitutive/solid/PorousSolid.hpp b/src/coreComponents/constitutive/solid/PorousSolid.hpp index 537c0f69d9b..1edd995d78b 100644 --- a/src/coreComponents/constitutive/solid/PorousSolid.hpp +++ b/src/coreComponents/constitutive/solid/PorousSolid.hpp @@ -37,8 +37,9 @@ namespace constitutive * * @tparam SOLID_TYPE type of the porosity model */ -template< typename SOLID_TYPE > -class PorousSolidUpdates : public CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, ConstantPermeability > +template< typename SOLID_TYPE, + typename PERM_TYPE > +class PorousSolidUpdates : public CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, PERM_TYPE > { public: @@ -49,8 +50,8 @@ class PorousSolidUpdates : public CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, */ PorousSolidUpdates( SOLID_TYPE const & solidModel, BiotPorosity const & porosityModel, - ConstantPermeability const & permModel ): - CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, ConstantPermeability >( solidModel, porosityModel, permModel ) + PERM_TYPE const & permModel ): + CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, PERM_TYPE >( solidModel, porosityModel, permModel ) {} GEOS_HOST_DEVICE @@ -216,9 +217,9 @@ class PorousSolidUpdates : public CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, private: - using CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, ConstantPermeability >::m_solidUpdate; - using CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, ConstantPermeability >::m_porosityUpdate; - using CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, ConstantPermeability >::m_permUpdate; + using CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, PERM_TYPE >::m_solidUpdate; + using CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, PERM_TYPE >::m_porosityUpdate; + using CoupledSolidUpdates< SOLID_TYPE, BiotPorosity, PERM_TYPE >::m_permUpdate; GEOS_HOST_DEVICE @@ -329,13 +330,14 @@ class PorousSolidBase * * @tparam SOLID_TYPE type of solid model */ -template< typename SOLID_TYPE > -class PorousSolid : public CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPermeability > +template< typename SOLID_TYPE, + typename PERM_TYPE > +class PorousSolid : public CoupledSolid< SOLID_TYPE, BiotPorosity, PERM_TYPE > { public: /// Alias for ElasticIsotropicUpdates - using KernelWrapper = PorousSolidUpdates< SOLID_TYPE >; + using KernelWrapper = PorousSolidUpdates< SOLID_TYPE, PERM_TYPE >; /** * @brief Constructor @@ -348,7 +350,17 @@ class PorousSolid : public CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPerme * @brief Catalog name * @return Static catalog string */ - static string catalogName() { return string( "Porous" ) + SOLID_TYPE::catalogName(); } + static string catalogName() + { + if constexpr ( std::is_same_v< PERM_TYPE, ConstantPermeability > ) // default case + { + return string( "Porous" ) + SOLID_TYPE::catalogName(); + } + else // special cases + { + return string( "Porous" ) + SOLID_TYPE::catalogName() + PERM_TYPE::catalogName(); + } + } /** * @brief Get catalog name @@ -411,9 +423,9 @@ class PorousSolid : public CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPerme private: - using CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPermeability >::getSolidModel; - using CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPermeability >::getPorosityModel; - using CoupledSolid< SOLID_TYPE, BiotPorosity, ConstantPermeability >::getPermModel; + using CoupledSolid< SOLID_TYPE, BiotPorosity, PERM_TYPE >::getSolidModel; + using CoupledSolid< SOLID_TYPE, BiotPorosity, PERM_TYPE >::getPorosityModel; + using CoupledSolid< SOLID_TYPE, BiotPorosity, PERM_TYPE >::getPermModel; }; diff --git a/src/coreComponents/physicsSolvers/multiphysics/kernelSpecs.json b/src/coreComponents/physicsSolvers/multiphysics/kernelSpecs.json index 7acbc5cb996..bf248e898f3 100644 --- a/src/coreComponents/physicsSolvers/multiphysics/kernelSpecs.json +++ b/src/coreComponents/physicsSolvers/multiphysics/kernelSpecs.json @@ -39,17 +39,28 @@ "CellElementSubRegion" ], "CONSTITUTIVE_TYPE": [ - "PorousSolid", - "PorousSolid", - "PorousSolid", - "PorousSolid", - "PorousSolid", - "PorousSolid", - "PorousSolid", - "PorousSolid", - "PorousSolid>", - "PorousSolid>", - "PorousSolid>", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid, ConstantPermeability>", + "PorousSolid, ConstantPermeability>", + "PorousSolid, ConstantPermeability>", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid, CarmanKozenyPermeability>", + "PorousSolid, CarmanKozenyPermeability>", + "PorousSolid, CarmanKozenyPermeability>", "PorousDamageSolid>", "PorousDamageSolid>", "PorousDamageSolid>" @@ -62,16 +73,16 @@ "H1_Pyramid_Lagrange1_Gauss5" ] }, - "explicit": [ "CellElementSubRegion#PorousSolid#H1_Tetrahedron_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Prism5_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Prism6_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Prism7_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Prism8_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Prism9_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Prism10_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Hexahedron_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Wedge_VEM_Gauss1", - "CellElementSubRegion#PorousSolid#H1_Prism11_VEM_Gauss1" ] + "explicit": [ "CellElementSubRegion#PorousSolid#H1_Tetrahedron_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Prism5_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Prism6_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Prism7_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Prism8_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Prism9_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Prism10_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Hexahedron_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Wedge_VEM_Gauss1", + "CellElementSubRegion#PorousSolid#H1_Prism11_VEM_Gauss1" ] }, "PoromechanicsEFEMKernels": { @@ -88,7 +99,8 @@ "CellElementSubRegion" ], "CONSTITUTIVE_TYPE": [ - "PorousSolid" + "PorousSolid", + "PorousSolid" ], "FE_TYPE": [ "H1_Hexahedron_Lagrange1_GaussLegendre2", @@ -117,10 +129,14 @@ "CellElementSubRegion" ], "CONSTITUTIVE_TYPE": [ - "PorousSolid", - "PorousSolid", - "PorousSolid", - "PorousSolid" + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid" ], "FE_TYPE": [ "H1_Hexahedron_Lagrange1_GaussLegendre2", diff --git a/src/coreComponents/physicsSolvers/solidMechanics/kernelSpecs.json b/src/coreComponents/physicsSolvers/solidMechanics/kernelSpecs.json index e3be388988d..ca527443f5a 100644 --- a/src/coreComponents/physicsSolvers/solidMechanics/kernelSpecs.json +++ b/src/coreComponents/physicsSolvers/solidMechanics/kernelSpecs.json @@ -92,9 +92,12 @@ "CellElementSubRegion" ], "CONSTITUTIVE_TYPE": [ - "PorousSolid", - "PorousSolid", - "PorousSolid>" + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid", + "PorousSolid, ConstantPermeability>", + "PorousSolid, CarmanKozenyPermeability>" ], "FE_TYPE": [ "H1_Hexahedron_Lagrange1_GaussLegendre2", @@ -130,7 +133,8 @@ "CellElementSubRegion" ], "CONSTITUTIVE_TYPE": [ - "PorousSolid" + "PorousSolid", + "PorousSolid" ], "FE_TYPE": [ "H1_Hexahedron_Lagrange1_GaussLegendre2",