From a56e19a541820dd4973977bf0a816afc2b79d14b Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Wed, 3 Apr 2024 18:50:29 +0200 Subject: [PATCH] [PL/TH2M] Extract solid heat capacity data/model --- .../ConstitutiveRelations/ConstitutiveData.h | 2 ++ .../ConstitutiveModels.h | 2 ++ .../SolidHeatCapacity.cpp | 36 +++++++++++++++++++ .../ConstitutiveRelations/SolidHeatCapacity.h | 32 +++++++++++++++++ ProcessLib/TH2M/TH2MFEM-impl.h | 14 ++++---- 5 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.cpp create mode 100644 ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.h diff --git a/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveData.h b/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveData.h index 0965f8009c6..f79ba86ea6b 100644 --- a/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveData.h +++ b/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveData.h @@ -28,6 +28,7 @@ #include "Saturation.h" #include "SolidCompressibility.h" #include "SolidDensity.h" +#include "SolidHeatCapacity.h" #include "SolidMechanics.h" #include "SolidThermalExpansion.h" #include "Swelling.h" @@ -138,6 +139,7 @@ struct ConstitutiveTempData PhaseTransitionData phase_transition_data; PorosityDerivativeData porosity_d_data; SolidDensityDerivativeData solid_density_d_data; + SolidHeatCapacityData solid_heat_capacity_data; using DisplacementDimVector = Eigen::Matrix<double, DisplacementDim, 1>; using DisplacementDimMatrix = diff --git a/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveModels.h b/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveModels.h index b9526cdf6d3..50fedd23598 100644 --- a/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveModels.h +++ b/ProcessLib/TH2M/ConstitutiveRelations/ConstitutiveModels.h @@ -20,6 +20,7 @@ #include "Saturation.h" #include "SolidCompressibility.h" #include "SolidDensity.h" +#include "SolidHeatCapacity.h" #include "SolidMechanics.h" #include "SolidThermalExpansion.h" #include "Swelling.h" @@ -69,6 +70,7 @@ struct ConstitutiveModels PorosityModel porosity_model; SolidDensityModel solid_density_model; #endif // NON_CONSTANT_SOLID_PHASE_VOLUME_FRACTION + SolidHeatCapacityModel solid_heat_capacity_model; }; } // namespace ConstitutiveRelations } // namespace ProcessLib::TH2M diff --git a/ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.cpp b/ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.cpp new file mode 100644 index 00000000000..7e1fcef50cd --- /dev/null +++ b/ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.cpp @@ -0,0 +1,36 @@ +/** + * \file + * \copyright + * Copyright (c) 2012-2024, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + */ + +#include "SolidHeatCapacity.h" + +namespace ProcessLib::TH2M +{ +namespace ConstitutiveRelations +{ + +void SolidHeatCapacityModel::eval( + SpaceTimeData const& x_t, + MediaData const& media_data, + TemperatureData const& T_data, + SolidHeatCapacityData& solid_heat_capacity) const +{ + namespace MPL = MaterialPropertyLib; + + MPL::VariableArray variables; + variables.temperature = T_data.T; + + auto const& mpl_cpS = + media_data.solid[MPL::PropertyType::specific_heat_capacity]; + + *solid_heat_capacity = + mpl_cpS.template value<double>(variables, x_t.x, x_t.t, x_t.dt); +} + +} // namespace ConstitutiveRelations +} // namespace ProcessLib::TH2M diff --git a/ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.h b/ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.h new file mode 100644 index 00000000000..4f3b4fae0ad --- /dev/null +++ b/ProcessLib/TH2M/ConstitutiveRelations/SolidHeatCapacity.h @@ -0,0 +1,32 @@ +/** + * \file + * \copyright + * Copyright (c) 2012-2024, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + */ + +#pragma once + +#include "Base.h" +#include "BaseLib/StrongType.h" + +namespace ProcessLib::TH2M +{ +namespace ConstitutiveRelations +{ + +using SolidHeatCapacityData = + BaseLib::StrongType<double, struct SolidHeatCapacityTag>; + +struct SolidHeatCapacityModel +{ + void eval(SpaceTimeData const& x_t, + MediaData const& media_data, + TemperatureData const& T_data, + SolidHeatCapacityData& solid_heat_capacity) const; +}; + +} // namespace ConstitutiveRelations +} // namespace ProcessLib::TH2M diff --git a/ProcessLib/TH2M/TH2MFEM-impl.h b/ProcessLib/TH2M/TH2MFEM-impl.h index 9203a3d5326..df952164fb7 100644 --- a/ProcessLib/TH2M/TH2MFEM-impl.h +++ b/ProcessLib/TH2M/TH2MFEM-impl.h @@ -246,6 +246,9 @@ TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, #endif // NON_CONSTANT_SOLID_PHASE_VOLUME_FRACTION ip_out.solid_density_data, ip_cv.solid_density_d_data); + models.solid_heat_capacity_model.eval({pos, t, dt}, media_data, T_data, + ip_cv.solid_heat_capacity_data); + MPL::VariableArray vars; MPL::VariableArray vars_prev; vars.temperature = T; @@ -276,10 +279,7 @@ TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, MaterialPropertyLib::PropertyType::thermal_conductivity) .value(vars, pos, t, dt)); - auto const cpS = - solid_phase.property(MPL::PropertyType::specific_heat_capacity) - .template value<double>(vars, pos, t, dt); - ip_data.h_S = cpS * T; + ip_data.h_S = ip_cv.solid_heat_capacity_data() * T; auto const u_S = ip_data.h_S; ip_data.rho_u_eff = phi_G * ip_out.fluid_density_data.rho_GR * c.uG + @@ -348,7 +348,8 @@ TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, phi_L * drho_LR_dT * c.uL + phi_L * ip_out.fluid_density_data.rho_LR * c.du_L_dT + phi_S * ip_cv.solid_density_d_data.drho_SR_dT * u_S + - phi_S * ip_out.solid_density_data.rho_SR * cpS - + phi_S * ip_out.solid_density_data.rho_SR * + ip_cv.solid_heat_capacity_data() - ip_cv.porosity_d_data.dphi_dT * ip_out.solid_density_data.rho_SR * u_S; @@ -453,7 +454,8 @@ TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, ip_cv.porosity_d_data.dphi_dT * ip_out.solid_density_data.rho_SR * ip_data.h_S + phi_S * ip_cv.solid_density_d_data.drho_SR_dT * ip_data.h_S + - phi_S * ip_out.solid_density_data.rho_SR * cpS; + phi_S * ip_out.solid_density_data.rho_SR * + ip_cv.solid_heat_capacity_data(); ip_cv.drho_u_eff_dp_GR = /*(dphi_G_dp_GR = 0) * ip_out.fluid_density_data.rho_GR * c.uG +*/ -- GitLab