diff --git a/Documentation/ProjectFile/prj/processes/process/RICHARDS_MECHANICS/t_intrinsic_permeability.md b/Documentation/ProjectFile/prj/processes/process/RICHARDS_MECHANICS/t_intrinsic_permeability.md deleted file mode 100644 index f945fe4d68fe60bacc884d5d1504e0ad52e4f6c7..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RICHARDS_MECHANICS/t_intrinsic_permeability.md +++ /dev/null @@ -1 +0,0 @@ -\copydoc ProcessLib::RichardsMechanics::RichardsMechanicsProcessData::intrinsic_permeability diff --git a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp index 40fe159072d5b2284b36c0fc66f4add87757dbb5..44a939c5534a60e2ca3f3d7ff0a4e8be6174b451 100644 --- a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp +++ b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp @@ -105,15 +105,6 @@ std::unique_ptr<Process> createRichardsMechanicsProcess( MaterialLib::Solids::createConstitutiveRelations<DisplacementDim>( parameters, config); - // Intrinsic permeability - auto& intrinsic_permeability = findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__RICHARDS_MECHANICS__intrinsic_permeability} - "intrinsic_permeability", parameters, 1); - - DBUG("Use '%s' as intrinsic conductivity parameter.", - intrinsic_permeability.name.c_str()); - // Fluid bulk modulus auto& fluid_bulk_modulus = findParameter<double>( config, @@ -197,7 +188,6 @@ std::unique_ptr<Process> createRichardsMechanicsProcess( material_ids, std::move(flow_material), std::move(solid_constitutive_relations), - intrinsic_permeability, fluid_bulk_modulus, biot_coefficient, solid_density, diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h index 250df5ed328f776953e2d48ce266547534bf471a..dc0f58a397f7e664a4285c1fafeb6da13c9b14a1 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h @@ -13,6 +13,8 @@ #include "RichardsMechanicsFEM.h" +#include <cassert> + #include "MaterialLib/SolidModels/SelectSolidConstitutiveRelation.h" #include "MathLib/KelvinVector.h" #include "NumLib/Function/Interpolation.h" @@ -22,6 +24,29 @@ namespace ProcessLib { namespace RichardsMechanics { +template <int DisplacementDim> +Eigen::Matrix<double, DisplacementDim, DisplacementDim> intrinsicPermeability( + double const t, SpatialPosition const& x_position, int const material_id, + RichardsFlow::RichardsFlowMaterialProperties const& material) +{ + const Eigen::MatrixXd& permeability = + material.getPermeability(material_id, t, x_position, DisplacementDim); + if (permeability.rows() == DisplacementDim) + { + return permeability; + } + if (permeability.rows() == 1) + { + return Eigen::Matrix<double, DisplacementDim, + DisplacementDim>::Identity() * + permeability(0, 0); + } + + OGS_FATAL( + "Intrinsic permeability dimension is neither %d nor one, but %dx%d.", + DisplacementDim, permeability.rows(), permeability.cols()); +} + template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, typename IntegrationMethod, int DisplacementDim> RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, @@ -191,12 +216,14 @@ void RichardsMechanicsLocalAssembler< double const k_rel = _process_data.flow_material->getRelativePermeability( t, x_position, -p_cap_ip, temperature, S_L); - auto const mu = _process_data.flow_material->getFluidViscosity( + + double const mu = _process_data.flow_material->getFluidViscosity( -p_cap_ip, temperature); - double const K_intrinsic = - _process_data.intrinsic_permeability(t, x_position)[0]; - double const K_over_mu = K_intrinsic / mu; + GlobalDimMatrixType const rho_K_over_mu = + intrinsicPermeability<DisplacementDim>( + t, x_position, material_id, *_process_data.flow_material) * + (rho_LR * k_rel / mu); // // displacement equation, displacement part @@ -231,11 +258,10 @@ void RichardsMechanicsLocalAssembler< K.template block<pressure_size, pressure_size>(pressure_index, pressure_index) - .noalias() += - dNdx_p.transpose() * rho_LR * k_rel * K_over_mu * dNdx_p * w; + .noalias() += dNdx_p.transpose() * rho_K_over_mu * dNdx_p * w; rhs.template segment<pressure_size>(pressure_index).noalias() += - dNdx_p.transpose() * rho_LR * rho_LR * k_rel * K_over_mu * b * w; + dNdx_p.transpose() * rho_LR * rho_K_over_mu * b * w; // // displacement equation, pressure part @@ -401,12 +427,15 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, double const k_rel = _process_data.flow_material->getRelativePermeability( t, x_position, -p_cap_ip, temperature, S_L); - auto const mu = _process_data.flow_material->getFluidViscosity( + + double const mu = _process_data.flow_material->getFluidViscosity( -p_cap_ip, temperature); - double const K_intrinsic = - _process_data.intrinsic_permeability(t, x_position)[0]; - double const K_over_mu = K_intrinsic / mu; + GlobalDimMatrixType const rho_Ki_over_mu = + intrinsicPermeability<DisplacementDim>( + t, x_position, material_id, *_process_data.flow_material) * + (rho_LR / mu); + // // displacement equation, displacement part // @@ -461,7 +490,7 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, // pressure equation, pressure part. // laplace_p.noalias() += - dNdx_p.transpose() * rho_LR * k_rel * K_over_mu * dNdx_p * w; + dNdx_p.transpose() * k_rel * rho_Ki_over_mu * dNdx_p * w; double const a0 = (alpha - porosity) / K_SR; double const specific_storage = @@ -508,17 +537,17 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, local_Jac .template block<pressure_size, pressure_size>(pressure_index, pressure_index) - .noalias() += dNdx_p.transpose() * rho_LR * K_over_mu * grad_p_cap * + .noalias() += dNdx_p.transpose() * rho_Ki_over_mu * grad_p_cap * dk_rel_dS_l * dS_L_dp_cap * N_p * w; local_Jac .template block<pressure_size, pressure_size>(pressure_index, pressure_index) - .noalias() += dNdx_p.transpose() * rho_LR * rho_LR * K_over_mu * b * + .noalias() += dNdx_p.transpose() * rho_LR * rho_Ki_over_mu * b * dk_rel_dS_l * dS_L_dp_cap * N_p * w; local_rhs.template segment<pressure_size>(pressure_index).noalias() += - dNdx_p.transpose() * rho_LR * rho_LR * k_rel * K_over_mu * b * w; + dNdx_p.transpose() * rho_LR * k_rel * rho_Ki_over_mu * b * w; } // pressure equation, pressure part. @@ -626,6 +655,9 @@ std::vector<double> const& RichardsMechanicsLocalAssembler< pressure_size> const>(local_x.data() + pressure_index, pressure_size); + auto const material_id = + _process_data.flow_material->getMaterialID(_element.getID()); + unsigned const n_integration_points = _integration_method.getNumberOfPoints(); @@ -640,10 +672,11 @@ std::vector<double> const& RichardsMechanicsLocalAssembler< NumLib::shapeFunctionInterpolate(-p_L, N_p, p_cap_ip); auto const temperature = _process_data.temperature(t, x_position)[0]; - auto const mu = _process_data.flow_material->getFluidViscosity( - -p_cap_ip, temperature); - double const K_over_mu = - _process_data.intrinsic_permeability(t, x_position)[0] / mu; + GlobalDimMatrixType const K_over_mu = + intrinsicPermeability<DisplacementDim>( + t, x_position, material_id, *_process_data.flow_material) / + _process_data.flow_material->getFluidViscosity(-p_cap_ip, + temperature); auto const rho_LR = _process_data.flow_material->getFluidDensity( -p_cap_ip, temperature); auto const& b = _process_data.specific_body_force; @@ -651,7 +684,7 @@ std::vector<double> const& RichardsMechanicsLocalAssembler< // Compute the velocity auto const& dNdx_p = _ip_data[ip].dNdx_p; cache_matrix.col(ip).noalias() = - -K_over_mu * dNdx_p * p_L - K_over_mu * rho_LR * b; + -K_over_mu * dNdx_p * p_L - rho_LR * K_over_mu * b; } return cache; diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h index 756705788fb24e340edd595a79956d2f6afb7838..1632ab1a4831e243818819a2166d166054c87cd1 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h @@ -49,6 +49,9 @@ public: using ShapeMatricesTypePressure = ShapeMatrixPolicyType<ShapeFunctionPressure, DisplacementDim>; + using GlobalDimMatrixType = + typename ShapeMatricesTypePressure::GlobalDimMatrixType; + static int const KelvinVectorSize = MathLib::KelvinVector::KelvinVectorDimensions<DisplacementDim>::value; using Invariants = MathLib::KelvinVector::Invariants<KelvinVectorSize>; diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h index 986309cdf133f608abbb02624a89a8cf2da8687c..6b22b03b1de2a6dc1845f7407a3df33e7a148327 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcessData.h @@ -42,7 +42,6 @@ struct RichardsMechanicsProcessData std::unique_ptr< MaterialLib::Solids::MechanicsBase<DisplacementDim>>>&& solid_materials_, - Parameter<double> const& intrinsic_permeability_, Parameter<double> const& fluid_bulk_modulus_, Parameter<double> const& biot_coefficient_, Parameter<double> const& solid_density_, @@ -53,7 +52,6 @@ struct RichardsMechanicsProcessData : material_ids(material_ids_), flow_material{std::move(flow_material_)}, solid_materials{std::move(solid_materials_)}, - intrinsic_permeability(intrinsic_permeability_), fluid_bulk_modulus(fluid_bulk_modulus_), biot_coefficient(biot_coefficient_), solid_density(solid_density_), @@ -83,8 +81,6 @@ struct RichardsMechanicsProcessData int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>> solid_materials; - /// Permeability of the solid. A scalar quantity, Parameter<double>. - Parameter<double> const& intrinsic_permeability; /// Fluid's bulk modulus. A scalar quantity, Parameter<double>. Parameter<double> const& fluid_bulk_modulus; /// Biot coefficient. A scalar quantity, Parameter<double>. diff --git a/Tests/Data/RichardsMechanics/RichardsFlow_2d_quasinewton.prj b/Tests/Data/RichardsMechanics/RichardsFlow_2d_quasinewton.prj index 39d5eb4bf1dcfed4dbd4dbb220895ce9931b7526..e92ab00575c2406c49e3bda627ec3f20dba12e06 100644 --- a/Tests/Data/RichardsMechanics/RichardsFlow_2d_quasinewton.prj +++ b/Tests/Data/RichardsMechanics/RichardsFlow_2d_quasinewton.prj @@ -18,7 +18,6 @@ <youngs_modulus>E</youngs_modulus> <poissons_ratio>nu</poissons_ratio> </constitutive_relation> - <intrinsic_permeability>k</intrinsic_permeability> <solid_bulk_modulus>K_SR</solid_bulk_modulus> <fluid_bulk_modulus>K_LR</fluid_bulk_modulus> <biot_coefficient>alpha</biot_coefficient> diff --git a/Tests/Data/RichardsMechanics/RichardsFlow_2d_small.prj b/Tests/Data/RichardsMechanics/RichardsFlow_2d_small.prj index 76f932e81a12203bf0d47fbab9502ff7bce69b97..3faa5c9cdad4d8b7015bffebeb6e2e68a3ea1d76 100644 --- a/Tests/Data/RichardsMechanics/RichardsFlow_2d_small.prj +++ b/Tests/Data/RichardsMechanics/RichardsFlow_2d_small.prj @@ -13,7 +13,6 @@ <youngs_modulus>E</youngs_modulus> <poissons_ratio>nu</poissons_ratio> </constitutive_relation> - <intrinsic_permeability>k</intrinsic_permeability> <solid_bulk_modulus>K_SR</solid_bulk_modulus> <fluid_bulk_modulus>K_LR</fluid_bulk_modulus> <biot_coefficient>alpha</biot_coefficient> diff --git a/Tests/Data/RichardsMechanics/confined_compression_fully_saturated.prj b/Tests/Data/RichardsMechanics/confined_compression_fully_saturated.prj index 803d2011607593dc89e1cd7b91bcc8f5da92cb93..829d6feb2a7b83a9f8540fd57ba8a16c22ca2208 100644 --- a/Tests/Data/RichardsMechanics/confined_compression_fully_saturated.prj +++ b/Tests/Data/RichardsMechanics/confined_compression_fully_saturated.prj @@ -20,7 +20,6 @@ <youngs_modulus>E</youngs_modulus> <poissons_ratio>nu</poissons_ratio> </constitutive_relation> - <intrinsic_permeability>k</intrinsic_permeability> <solid_bulk_modulus>K_SR</solid_bulk_modulus> <fluid_bulk_modulus>K_LR</fluid_bulk_modulus> <biot_coefficient>alpha</biot_coefficient> diff --git a/Tests/Data/RichardsMechanics/flow_fully_saturated.prj b/Tests/Data/RichardsMechanics/flow_fully_saturated.prj index 0de1a5157f567c7b9fa23cca84d7680cebae2d15..f919f42a3c8285910d92a6ce00bbaa94da99b651 100644 --- a/Tests/Data/RichardsMechanics/flow_fully_saturated.prj +++ b/Tests/Data/RichardsMechanics/flow_fully_saturated.prj @@ -13,7 +13,6 @@ <youngs_modulus>E</youngs_modulus> <poissons_ratio>nu</poissons_ratio> </constitutive_relation> - <intrinsic_permeability>k</intrinsic_permeability> <solid_bulk_modulus>K_SR</solid_bulk_modulus> <fluid_bulk_modulus>K_LR</fluid_bulk_modulus> <biot_coefficient>alpha</biot_coefficient> diff --git a/Tests/Data/RichardsMechanics/gravity.prj b/Tests/Data/RichardsMechanics/gravity.prj index 1871179477170087e99626a8e0938386b3b7ece5..3e492acb986dc113fd3eac96603874453a9d56b2 100644 --- a/Tests/Data/RichardsMechanics/gravity.prj +++ b/Tests/Data/RichardsMechanics/gravity.prj @@ -20,7 +20,6 @@ <youngs_modulus>E</youngs_modulus> <poissons_ratio>nu</poissons_ratio> </constitutive_relation> - <intrinsic_permeability>k</intrinsic_permeability> <solid_bulk_modulus>K_SR</solid_bulk_modulus> <fluid_bulk_modulus>K_LR</fluid_bulk_modulus> <biot_coefficient>alpha</biot_coefficient> @@ -43,7 +42,7 @@ <porous_medium> <porous_medium id="0"> <permeability> - <permeability_tensor_entries>kappa1</permeability_tensor_entries> + <permeability_tensor_entries>k</permeability_tensor_entries> <type>Constant</type> </permeability> <porosity> @@ -200,11 +199,6 @@ <type>Constant</type> <value>293.15</value> </parameter> - <parameter> - <name>kappa1</name> - <type>Constant</type> - <values>4.46e-13</values> - </parameter> <parameter> <name>displacement0</name> <type>Constant</type> diff --git a/Tests/Data/RichardsMechanics/mechanics_linear.prj b/Tests/Data/RichardsMechanics/mechanics_linear.prj index e38e3d1fe87787aaaa76bd086690432b07866301..74dfa7758729a16dedec7a434c589f26f3bcb6f3 100644 --- a/Tests/Data/RichardsMechanics/mechanics_linear.prj +++ b/Tests/Data/RichardsMechanics/mechanics_linear.prj @@ -26,7 +26,6 @@ <youngs_modulus>E</youngs_modulus> <poissons_ratio>nu</poissons_ratio> </constitutive_relation> - <intrinsic_permeability>k</intrinsic_permeability> <solid_bulk_modulus>K_SR</solid_bulk_modulus> <fluid_bulk_modulus>K_LR</fluid_bulk_modulus> <biot_coefficient>alpha</biot_coefficient>