From 4359815893a84390aaf48dcb2517360b8b09f53f Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Wed, 18 Jul 2018 17:12:29 +0200 Subject: [PATCH] [HM] Added a reference temperature to HydroMechanics --- .../HydroMechanics/CreateHydroMechanicsProcess.cpp | 8 +++++++- ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h | 9 ++++++--- ProcessLib/HydroMechanics/HydroMechanicsFEM.h | 6 +++--- ProcessLib/HydroMechanics/HydroMechanicsProcessData.h | 11 ++++++++--- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp index 4914d6fce61..b3b09939772 100644 --- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp +++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp @@ -180,6 +180,11 @@ std::unique_ptr<Process> createHydroMechanicsProcess( std::copy_n(b.data(), b.size(), specific_body_force.data()); } + // Reference temperature + const auto& reference_temperature = + //! \ogs_file_param{prj__processes__process__HYDRO_MECHANICS__reference_temperature} + config.getConfigParameterOptional<double>("reference_temperature"); + HydroMechanicsProcessData<DisplacementDim> process_data{ std::move(material), intrinsic_permeability, @@ -189,7 +194,8 @@ std::unique_ptr<Process> createHydroMechanicsProcess( biot_coefficient, porosity, solid_density, - specific_body_force}; + specific_body_force, + *reference_temperature}; SecondaryVariableCollection secondary_variables; diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h index 073740489f0..9e6d1641f28 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h @@ -202,7 +202,8 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement, // eps.noalias() = B * u; - auto C = _ip_data[ip].updateConstitutiveRelation(t, x_position, dt, u); + auto C = _ip_data[ip].updateConstitutiveRelation( + t, x_position, dt, u, _process_data.reference_temperature); local_Jac .template block<displacement_size, displacement_size>( @@ -488,7 +489,8 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement, eps.noalias() = B * u; - auto C = _ip_data[ip].updateConstitutiveRelation(t, x_position, dt, u); + auto C = _ip_data[ip].updateConstitutiveRelation( + t, x_position, dt, u, _process_data.reference_temperature); local_Jac.noalias() += B.transpose() * C * B * w; @@ -574,7 +576,8 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement, auto& eps = _ip_data[ip].eps; eps.noalias() = B * u; - _ip_data[ip].updateConstitutiveRelation(t, x_position, dt, u); + _ip_data[ip].updateConstitutiveRelation( + t, x_position, dt, u, _process_data.reference_temperature); } } diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h index 1b21a0fcb45..26dd8d5a5c7 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h @@ -73,12 +73,12 @@ struct IntegrationPointData final double const t, SpatialPosition const& x_position, double const dt, - DisplacementVectorType const& /*u*/) + DisplacementVectorType const& /*u*/, + double const T) { auto&& solution = solid_material.integrateStress( t, x_position, dt, eps_prev, eps, sigma_eff_prev, - *material_state_variables, - MaterialLib::PhysicalConstant::RoomTemperature); + *material_state_variables, T); if (!solution) OGS_FATAL("Computation of local constitutive relation failed."); diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h b/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h index b8c7b006d32..fea5be6470a 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcessData.h @@ -42,7 +42,8 @@ struct HydroMechanicsProcessData Parameter<double> const& porosity_, Parameter<double> const& solid_density_, Eigen::Matrix<double, DisplacementDim, 1> - specific_body_force_) + specific_body_force_, + double const reference_temperature_) : material{std::move(material_)}, intrinsic_permeability(intrinsic_permeability_), specific_storage(specific_storage_), @@ -51,7 +52,8 @@ struct HydroMechanicsProcessData biot_coefficient(biot_coefficient_), porosity(porosity_), solid_density(solid_density_), - specific_body_force(std::move(specific_body_force_)) + specific_body_force(std::move(specific_body_force_)), + reference_temperature(reference_temperature_) { } @@ -66,7 +68,8 @@ struct HydroMechanicsProcessData solid_density(other.solid_density), specific_body_force(other.specific_body_force), dt(other.dt), - t(other.t) + t(other.t), + reference_temperature(other.reference_temperature) { } @@ -105,6 +108,8 @@ struct HydroMechanicsProcessData double dt = 0.0; double t = 0.0; + double const reference_temperature; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW; }; -- GitLab