From 14e559cc00f08382e4448abf74882e82a46a19ea Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Mon, 6 May 2019 12:07:55 +0200 Subject: [PATCH] [PL/HT] Use MPL for solid rho, c_s, and lambda_s. --- ProcessLib/HT/CreateHTProcess.cpp | 27 -------------------- ProcessLib/HT/HTFEM.h | 37 +++++++++++++++++++--------- ProcessLib/HT/HTMaterialProperties.h | 11 +-------- ProcessLib/HT/MonolithicHTFEM.h | 6 ++--- ProcessLib/HT/StaggeredHTFEM-impl.h | 4 +-- 5 files changed, 31 insertions(+), 54 deletions(-) diff --git a/ProcessLib/HT/CreateHTProcess.cpp b/ProcessLib/HT/CreateHTProcess.cpp index 20602e81b21..69c8a75f39e 100644 --- a/ProcessLib/HT/CreateHTProcess.cpp +++ b/ProcessLib/HT/CreateHTProcess.cpp @@ -79,30 +79,6 @@ std::unique_ptr<Process> createHTProcess( const int _heat_transport_process_id = 0; const int _hydraulic_process_id = 1; - // Parameter for the density of the solid. - auto& density_solid = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__HT__density_solid} - "density_solid", parameters, 1); - DBUG("Use '%s' as density_solid parameter.", density_solid.name.c_str()); - - // Parameter for the specific heat capacity of the solid. - auto& specific_heat_capacity_solid = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__HT__specific_heat_capacity_solid} - "specific_heat_capacity_solid", parameters, 1); - DBUG("Use '%s' as specific_heat_capacity_solid parameter.", - specific_heat_capacity_solid.name.c_str()); - - // Parameter for the thermal conductivity of the solid (only one scalar per - // element, i.e., the isotropic case is handled at the moment) - auto& thermal_conductivity_solid = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__HT__thermal_conductivity_solid} - "thermal_conductivity_solid", parameters, 1); - DBUG("Use '%s' as thermal_conductivity_solid parameter.", - thermal_conductivity_solid.name.c_str()); - // Specific body force parameter. Eigen::VectorXd specific_body_force; std::vector<double> const b = @@ -164,10 +140,7 @@ std::unique_ptr<Process> createHTProcess( std::unique_ptr<HTMaterialProperties> material_properties = std::make_unique<HTMaterialProperties>( - density_solid, std::move(media_map), - specific_heat_capacity_solid, - thermal_conductivity_solid, has_fluid_thermal_expansion, *solid_thermal_expansion, *biot_constant, diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h index ac841d3c302..55bc5c39575 100644 --- a/ProcessLib/HT/HTFEM.h +++ b/ProcessLib/HT/HTFEM.h @@ -209,39 +209,52 @@ protected: IntegrationPointData<NodalRowVectorType, GlobalDimNodalMatrixType>>> _ip_data; - double getHeatEnergyCoefficient(const double t, - const ParameterLib::SpatialPosition& pos, - const double porosity, - const double fluid_density, - const double specific_heat_capacity_fluid) + double getHeatEnergyCoefficient( + MaterialPropertyLib::VariableArray const& vars, + const double porosity, + const double fluid_density, + const double specific_heat_capacity_fluid) { + auto const& medium = + *_material_properties.media_map->getMedium(this->_element.getID()); + auto const& solid_phase = medium.phase("Solid"); + auto const specific_heat_capacity_solid = - _material_properties.specific_heat_capacity_solid(t, pos)[0]; + solid_phase + .property( + MaterialPropertyLib::PropertyType::specific_heat_capacity) + .template value<double>(vars); auto const solid_density = - _material_properties.density_solid(t, pos)[0]; + solid_phase.property(MaterialPropertyLib::PropertyType::density) + .template value<double>(vars); return solid_density * specific_heat_capacity_solid * (1 - porosity) + fluid_density * specific_heat_capacity_fluid * porosity; } GlobalDimMatrixType getThermalConductivityDispersivity( - const double t, const ParameterLib::SpatialPosition& pos, + MaterialPropertyLib::VariableArray const& vars, const double porosity, const double fluid_density, const double specific_heat_capacity_fluid, const GlobalDimVectorType& velocity, const GlobalDimMatrixType& I) { - auto const thermal_conductivity_solid = - _material_properties.thermal_conductivity_solid(t, pos)[0]; - auto const& medium = *_material_properties.media_map->getMedium(_element.getID()); + auto const& solid_phase = medium.phase("Solid"); auto const& liquid_phase = medium.phase("AqueousLiquid"); + + auto const thermal_conductivity_solid = + solid_phase + .property( + MaterialPropertyLib::PropertyType::thermal_conductivity) + .template value<double>(vars); + auto const thermal_conductivity_fluid = liquid_phase .property( MaterialPropertyLib::PropertyType::thermal_conductivity) - .template value<double>(); + .template value<double>(vars); double const thermal_conductivity = thermal_conductivity_solid * (1 - porosity) + diff --git a/ProcessLib/HT/HTMaterialProperties.h b/ProcessLib/HT/HTMaterialProperties.h index bab6e5e08b7..d0bf9d40b9f 100644 --- a/ProcessLib/HT/HTMaterialProperties.h +++ b/ProcessLib/HT/HTMaterialProperties.h @@ -24,20 +24,14 @@ namespace HT struct HTMaterialProperties final { HTMaterialProperties( - ParameterLib::Parameter<double> const& density_solid_, std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>&& media_map_, - ParameterLib::Parameter<double> const& specific_heat_capacity_solid_, - ParameterLib::Parameter<double> const& thermal_conductivity_solid_, bool const has_fluid_thermal_expansion_, ParameterLib::Parameter<double> const& solid_thermal_expansion_, ParameterLib::Parameter<double> const& biot_constant_, Eigen::VectorXd specific_body_force_, bool const has_gravity_) - : density_solid(density_solid_), - media_map(std::move(media_map_)), - specific_heat_capacity_solid(specific_heat_capacity_solid_), - thermal_conductivity_solid(thermal_conductivity_solid_), + : media_map(std::move(media_map_)), has_fluid_thermal_expansion(has_fluid_thermal_expansion_), solid_thermal_expansion(solid_thermal_expansion_), biot_constant(biot_constant_), @@ -51,11 +45,8 @@ struct HTMaterialProperties final void operator=(HTMaterialProperties&&) = delete; void operator=(HTMaterialProperties const&) = delete; - ParameterLib::Parameter<double> const& density_solid; std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap> media_map; - ParameterLib::Parameter<double> const& specific_heat_capacity_solid; - ParameterLib::Parameter<double> const& thermal_conductivity_solid; bool const has_fluid_thermal_expansion; ParameterLib::Parameter<double> const& solid_thermal_expansion; diff --git a/ProcessLib/HT/MonolithicHTFEM.h b/ProcessLib/HT/MonolithicHTFEM.h index 3b6c268c23d..ebdb438de12 100644 --- a/ProcessLib/HT/MonolithicHTFEM.h +++ b/ProcessLib/HT/MonolithicHTFEM.h @@ -176,8 +176,8 @@ public: // matrix assembly GlobalDimMatrixType const thermal_conductivity_dispersivity = this->getThermalConductivityDispersivity( - t, pos, porosity, fluid_density, - specific_heat_capacity_fluid, velocity, I); + vars, porosity, fluid_density, specific_heat_capacity_fluid, + velocity, I); Ktt.noalias() += (dNdx.transpose() * thermal_conductivity_dispersivity * dNdx + N.transpose() * velocity.transpose() * dNdx * fluid_density * @@ -186,7 +186,7 @@ public: Kpp.noalias() += w * dNdx.transpose() * K_over_mu * dNdx; Mtt.noalias() += w * - this->getHeatEnergyCoefficient(t, pos, porosity, fluid_density, + this->getHeatEnergyCoefficient(vars, porosity, fluid_density, specific_heat_capacity_fluid) * N.transpose() * N; Mpp.noalias() += w * N.transpose() * specific_storage * N; diff --git a/ProcessLib/HT/StaggeredHTFEM-impl.h b/ProcessLib/HT/StaggeredHTFEM-impl.h index 63c3024ae54..dcdd08d1b95 100644 --- a/ProcessLib/HT/StaggeredHTFEM-impl.h +++ b/ProcessLib/HT/StaggeredHTFEM-impl.h @@ -252,7 +252,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: // Assemble mass matrix local_M.noalias() += w * - this->getHeatEnergyCoefficient(t, pos, porosity, fluid_density, + this->getHeatEnergyCoefficient(vars, porosity, fluid_density, specific_heat_capacity_fluid) * N.transpose() * N; @@ -276,7 +276,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: GlobalDimMatrixType const thermal_conductivity_dispersivity = this->getThermalConductivityDispersivity( - t, pos, porosity, fluid_density, specific_heat_capacity_fluid, + vars, porosity, fluid_density, specific_heat_capacity_fluid, velocity, I); local_K.noalias() += -- GitLab