From 70212b9634b76eb4400471fadacf0d67d4f45501 Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Mon, 29 Jul 2019 18:06:01 +0200 Subject: [PATCH] [THM] Replaced the material parameters with a MPL instance --- .../CreateThermoHydroMechanicsProcess.cpp | 122 ---------- .../ThermoHydroMechanicsFEM-impl.h | 224 +++++++++++++----- .../ThermoHydroMechanicsFEM.h | 6 + .../ThermoHydroMechanicsProcessData.h | 25 -- 4 files changed, 171 insertions(+), 206 deletions(-) diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp index d29c4946f52..ddd4c8a8d29 100644 --- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp +++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp @@ -128,115 +128,6 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess( MaterialLib::Solids::createConstitutiveRelations<DisplacementDim>( parameters, local_coordinate_system, config); - // Intrinsic permeability (only one scalar per element, i.e. the isotropic - // case is handled at the moment) - auto& intrinsic_permeability = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__intrinsic_permeability} - "intrinsic_permeability", parameters, 1, &mesh); - - DBUG("Use '%s' as intrinsic conductivity parameter.", - intrinsic_permeability.name.c_str()); - - // Storage coefficient - auto& specific_storage = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__specific_storage} - "specific_storage", parameters, 1, &mesh); - - DBUG("Use '%s' as storage coefficient parameter.", - specific_storage.name.c_str()); - - // Fluid viscosity - auto& fluid_viscosity = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__fluid_viscosity} - "fluid_viscosity", parameters, 1, &mesh); - DBUG("Use '%s' as fluid viscosity parameter.", - fluid_viscosity.name.c_str()); - - // Fluid density - auto& fluid_density = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__fluid_density} - "fluid_density", parameters, 1, &mesh); - DBUG("Use '%s' as fluid density parameter.", fluid_density.name.c_str()); - - // Biot coefficient - auto& biot_coefficient = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__biot_coefficient} - "biot_coefficient", parameters, 1, &mesh); - DBUG("Use '%s' as Biot coefficient parameter.", - biot_coefficient.name.c_str()); - - // Porosity - auto& porosity = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__porosity} - "porosity", parameters, 1, &mesh); - DBUG("Use '%s' as porosity parameter.", porosity.name.c_str()); - - // Solid density - auto& solid_density = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__solid_density} - "solid_density", parameters, 1, &mesh); - DBUG("Use '%s' as solid density parameter.", solid_density.name.c_str()); - - // linear thermal expansion coefficient for solid - auto const& solid_linear_thermal_expansion_coefficient = - ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__solid_linear_thermal_expansion_coefficient} - "solid_linear_thermal_expansion_coefficient", parameters, 1, &mesh); - DBUG("Use '%s' as solid linear thermal expansion coefficient parameter.", - solid_linear_thermal_expansion_coefficient.name.c_str()); - - // volumetric thermal expansion coefficient for fluid - auto const& fluid_volumetric_thermal_expansion_coefficient = - ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__fluid_volumetric_thermal_expansion_coefficient} - "fluid_volumetric_thermal_expansion_coefficient", parameters, 1, - &mesh); - DBUG( - "Use '%s' as fluid volumetric thermal expansion coefficient " - "parameter.", - fluid_volumetric_thermal_expansion_coefficient.name.c_str()); - - // specific heat capacity for solid - auto& solid_specific_heat_capacity = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__solid_specific_heat_capacity} - "solid_specific_heat_capacity", parameters, 1, &mesh); - DBUG("Use '%s' as solid specific heat capacity parameter.", - solid_specific_heat_capacity.name.c_str()); - - // specific heat capacity for fluid - auto& fluid_specific_heat_capacity = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__fluid_specific_heat_capacity} - "fluid_specific_heat_capacity", parameters, 1, &mesh); - DBUG("Use '%s' as fluid specific heat capacity parameter.", - fluid_specific_heat_capacity.name.c_str()); - - // thermal conductivity for solid // currently only considers isotropic - auto& solid_thermal_conductivity = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__solid_thermal_conductivity} - "solid_thermal_conductivity", parameters, 1, &mesh); - DBUG("Use '%s' as solid thermal conductivity parameter.", - solid_thermal_conductivity.name.c_str()); - - // thermal conductivity for fluid // currently only considers isotropic - auto& fluid_thermal_conductivity = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__THERMO_HYDRO_MECHANICS__fluid_thermal_conductivity} - "fluid_thermal_conductivity", parameters, 1, &mesh); - DBUG("Use '%s' as fluid thermal conductivity parameter.", - fluid_thermal_conductivity.name.c_str()); - // reference temperature auto& reference_temperature = ParameterLib::findParameter<double>( config, @@ -271,19 +162,6 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess( materialIDs(mesh), std::move(media_map), std::move(solid_constitutive_relations), - intrinsic_permeability, - specific_storage, - fluid_viscosity, - fluid_density, - biot_coefficient, - porosity, - solid_density, - solid_linear_thermal_expansion_coefficient, - fluid_volumetric_thermal_expansion_coefficient, - solid_specific_heat_capacity, - fluid_specific_heat_capacity, - solid_thermal_conductivity, - fluid_thermal_conductivity, reference_temperature, specific_body_force}; diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h index a0095d5b58b..aa021fd0583 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h @@ -13,6 +13,11 @@ #include "ThermoHydroMechanicsFEM.h" #include "MaterialLib/SolidModels/SelectSolidConstitutiveRelation.h" +#include "MaterialLib/MPL/Medium.h" +#include "MaterialLib/MPL/Property.h" +#include "MaterialLib/MPL/Utils/FormEffectiveThermalConductivity.h" +#include "MaterialLib/MPL/Utils/FormEigenTensor.h" + #include "MathLib/KelvinVector.h" #include "NumLib/Function/Interpolation.h" #include "ProcessLib/CoupledSolutionsForStaggeredScheme.h" @@ -181,6 +186,11 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, ParameterLib::SpatialPosition x_position; x_position.setElementID(_element.getID()); + auto const& medium = _process_data.media_map->getMedium(_element.getID()); + auto const& liquid_phase = medium->phase("AqueousLiquid"); + auto const& solid_phase = medium->phase("Solid"); + MaterialPropertyLib::VariableArray vars; + unsigned const n_integration_points = _integration_method.getNumberOfPoints(); for (unsigned ip = 0; ip < n_integration_points; ip++) @@ -215,51 +225,76 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, auto& eps = _ip_data[ip].eps; auto const& sigma_eff = _ip_data[ip].sigma_eff; - double const S = _process_data.specific_storage(t, x_position)[0]; - // TODO: change it like auto const K_over_mu - // hydraulicConductivity<GlobalDim>(_process_data.intrinsic_permeability(t, - // x_position)/... - double const K_over_mu = - _process_data.intrinsic_permeability(t, x_position)[0] / - _process_data.fluid_viscosity(t, x_position)[0]; - double const alpha_s = - _process_data.solid_linear_thermal_expansion_coefficient( - t, x_position)[0]; - double const beta_f = - _process_data.fluid_volumetric_thermal_expansion_coefficient( - t, x_position)[0]; - // TODO: change it like auto const lambda_f = - // hydraulicConductivity<GlobalDim>(_process_data.intrinsic_permeability(t, - // x_position)/... - double const lambda_f = - _process_data.fluid_thermal_conductivity(t, x_position)[0]; - // TODO: change it like auto const lambda_s = - // hydraulicConductivity<GlobalDim>(_process_data.intrinsic_permeability(t, - // x_position)/... - double const lambda_s = - _process_data.solid_thermal_conductivity(t, x_position)[0]; - double const C_f = - _process_data.fluid_specific_heat_capacity(t, x_position)[0]; - double const C_s = - _process_data.solid_specific_heat_capacity(t, x_position)[0]; + vars[static_cast<int>(MaterialPropertyLib::Variable::temperature)] = + T_int_pt; + vars[static_cast<int>(MaterialPropertyLib::Variable::phase_pressure)] = + N_p * p; + + auto const solid_density = + solid_phase.property(MaterialPropertyLib::PropertyType::density) + .template value<double>(vars); + auto const specific_storage = + solid_phase.property(MaterialPropertyLib::PropertyType::storage) + .template value<double>(vars); + auto const solid_linear_thermal_expansion_coefficient = + solid_phase + .property( + MaterialPropertyLib::PropertyType::thermal_expansivity) + .template value<double>(vars); + + auto const porosity = + solid_phase.property(MaterialPropertyLib::PropertyType::porosity) + .template value<double>(vars); + + auto const intrinsic_permeability = + MaterialPropertyLib::formEigenTensor<DisplacementDim>( + solid_phase + .property(MaterialPropertyLib::PropertyType::permeability) + .value(vars)); + + auto const fluid_density = + liquid_phase.property(MaterialPropertyLib::PropertyType::density) + .template value<double>(vars); + + auto const fluid_thermal_expansivity_ptr = &liquid_phase.property( + MaterialPropertyLib::PropertyType::thermal_expansivity); + + double const fluid_volumetric_thermal_expansion_coefficient = + fluid_thermal_expansivity_ptr + ? (*fluid_thermal_expansivity_ptr).template value<double>(vars) + : (fluid_density == 0.0) + ? 0.0 + : -liquid_phase + .property( + MaterialPropertyLib::PropertyType::density) + .template dValue<double>( + vars, + MaterialPropertyLib::Variable:: + temperature) / + fluid_density; + + // Use the viscosity model to compute the viscosity + auto const viscosity = + liquid_phase.property(MaterialPropertyLib::PropertyType::viscosity) + .template value<double>(vars); + GlobalDimMatrixType K_over_mu = intrinsic_permeability / viscosity; + double const T0 = _process_data.reference_temperature(t, x_position)[0]; - auto const alpha = _process_data.biot_coefficient(t, x_position)[0]; - auto const rho_sr = _process_data.solid_density(t, x_position)[0]; - auto const rho_fr = _process_data.fluid_density(t, x_position)[0]; - auto const porosity = _process_data.porosity(t, x_position)[0]; + auto const& b = _process_data.specific_body_force; auto const& identity2 = MathLib::KelvinVector::Invariants< MathLib::KelvinVector::KelvinVectorDimensions< DisplacementDim>::value>::identity2; + //TODO: Change dT to time step wise increment double const delta_T(T_int_pt - T0); - double const thermal_strain = alpha_s * delta_T; + double const thermal_strain = + solid_linear_thermal_expansion_coefficient * delta_T; - double const rho_s = rho_sr * (1 - 3 * thermal_strain); + double const rho_s = solid_density * (1 - 3 * thermal_strain); auto velocity = (-K_over_mu * dNdx_p * p).eval(); - double const rho_f = rho_fr * (1 - beta_f * delta_T); - velocity += K_over_mu * rho_f * b; + velocity += K_over_mu * fluid_density * b; // // displacement equation, displacement part @@ -275,7 +310,7 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, displacement_index, displacement_index) .noalias() += B.transpose() * C * B * w; - auto const rho = rho_s * (1 - porosity) + porosity * rho_f; + auto const rho = rho_s * (1 - porosity) + porosity * fluid_density; local_rhs.template segment<displacement_size>(displacement_index) .noalias() -= (B.transpose() * sigma_eff - N_u_op.transpose() * rho * b) * w; @@ -283,6 +318,11 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, // // displacement equation, pressure part (K_up) // + auto const alpha = + solid_phase + .property(MaterialPropertyLib::PropertyType::biot_coefficient) + .template value<double>(vars); + Kup.noalias() += B.transpose() * alpha * identity2 * N_p * w; // @@ -290,16 +330,18 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, // laplace_p.noalias() += dNdx_p.transpose() * K_over_mu * dNdx_p * w; - storage_p.noalias() += N_p.transpose() * S * N_p * w; + storage_p.noalias() += N_p.transpose() * specific_storage * N_p * w; // // RHS, pressure part // local_rhs.template segment<pressure_size>(pressure_index).noalias() += - dNdx_p.transpose() * rho_f * K_over_mu * b * w; + dNdx_p.transpose() * fluid_density * K_over_mu * b * w; // // pressure equation, temperature part (M_pT) // - auto const beta = porosity * beta_f + (1 - porosity) * 3 * alpha_s; + auto const beta = + porosity * fluid_volumetric_thermal_expansion_coefficient + + (1 - porosity) * 3 * solid_linear_thermal_expansion_coefficient; storage_T.noalias() += N_T.transpose() * beta * N_T * w; // @@ -310,20 +352,46 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, // // temperature equation, temperature part. // - auto const lambda = porosity * lambda_f + (1 - porosity) * lambda_s; - KTT.noalias() += (dNdx_T.transpose() * lambda * dNdx_T + - dNdx_T.transpose() * velocity * N_p * rho_f * C_f) * - w; - // coefficient matrix which is used for calculating the residual - auto const heat_capacity = - porosity * C_f * rho_f + (1 - porosity) * C_s * rho_sr; - MTT.noalias() += N_T.transpose() * heat_capacity * N_T * w; + const double c_f = + liquid_phase + .property( + MaterialPropertyLib::PropertyType::specific_heat_capacity) + .template value<double>(vars); + auto const fluid_thermal_conductivity = + liquid_phase + .property( + MaterialPropertyLib::PropertyType::thermal_conductivity) + .template value<double>(vars); + GlobalDimMatrixType effective_thermal_condictivity = + MaterialPropertyLib::formEffectiveThermalConductivity< + DisplacementDim>( + solid_phase + .property( + MaterialPropertyLib::PropertyType::thermal_conductivity) + .value(vars), + fluid_thermal_conductivity, porosity); + + KTT.noalias() += + (dNdx_T.transpose() * effective_thermal_condictivity * dNdx_T + + dNdx_T.transpose() * velocity * N_p * fluid_density * c_f) * + w; + + auto const effective_volumetric_heat_capacity = + porosity * fluid_density * c_f + + (1.0 - porosity) * solid_density * + solid_phase + .property(MaterialPropertyLib::PropertyType:: + specific_heat_capacity) + .template value<double>(vars); + + MTT.noalias() += + N_T.transpose() * effective_volumetric_heat_capacity * N_T * w; // // temperature equation, pressure part // - KTp.noalias() += K_over_mu * rho_f * C_f * N_T.transpose() * - (dNdx_T * T).transpose() * dNdx_T * w; + KTp.noalias() += fluid_density * c_f * N_T.transpose() * + (dNdx_T * T).transpose() * K_over_mu * dNdx_p * w; } // temperature equation, temperature part local_Jac @@ -384,7 +452,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, typename IntegrationMethod, int DisplacementDim> std::vector<double> const& ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, IntegrationMethod, - DisplacementDim>::getIntPtDarcyVelocity(const double t, + DisplacementDim>::getIntPtDarcyVelocity(const double /*t*/, GlobalVector const& current_solution, NumLib::LocalToGlobalIndexMap const& @@ -407,26 +475,51 @@ std::vector<double> const& ThermoHydroMechanicsLocalAssembler< auto p = Eigen::Map<typename ShapeMatricesTypePressure::template VectorType< pressure_size> const>(local_x.data() + pressure_index, pressure_size); + auto T = Eigen::Map<typename ShapeMatricesTypePressure::template VectorType< + temperature_size> const>(local_x.data() + temperature_index, + temperature_size); unsigned const n_integration_points = _integration_method.getNumberOfPoints(); ParameterLib::SpatialPosition x_position; x_position.setElementID(_element.getID()); + + auto const& medium = _process_data.media_map->getMedium(_element.getID()); + auto const& liquid_phase = medium->phase("AqueousLiquid"); + auto const& solid_phase = medium->phase("Solid"); + MaterialPropertyLib::VariableArray vars; + for (unsigned ip = 0; ip < n_integration_points; ip++) { x_position.setIntegrationPoint(ip); - double const K_over_mu = - _process_data.intrinsic_permeability(t, x_position)[0] / - _process_data.fluid_viscosity(t, x_position)[0]; - auto const rho_fr = _process_data.fluid_density(t, x_position)[0]; + auto const& N_p = _ip_data[ip].N_p; + + vars[static_cast<int>(MaterialPropertyLib::Variable::temperature)] = + N_p * T; // N_p = N_T + vars[static_cast<int>(MaterialPropertyLib::Variable::phase_pressure)] = + N_p * p; + + auto const viscosity = + liquid_phase.property(MaterialPropertyLib::PropertyType::viscosity) + .template value<double>(vars); + GlobalDimMatrixType K_over_mu = + MaterialPropertyLib::formEigenTensor<DisplacementDim>( + solid_phase + .property(MaterialPropertyLib::PropertyType::permeability) + .value(vars)) / + viscosity; + + auto const fluid_density = + liquid_phase.property(MaterialPropertyLib::PropertyType::density) + .template value<double>(vars); auto const& b = _process_data.specific_body_force; // Compute the velocity auto const& dNdx_p = _ip_data[ip].dNdx_p; cache_matrix.col(ip).noalias() = - -K_over_mu * dNdx_p * p + K_over_mu * rho_fr * b; + -K_over_mu * dNdx_p * p + K_over_mu * fluid_density * b; } return cache; @@ -452,10 +545,15 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, auto T = Eigen::Map<typename ShapeMatricesTypePressure::template VectorType< temperature_size> const>(local_x.data() + temperature_index, temperature_size); + auto p = Eigen::Map<typename ShapeMatricesTypePressure::template VectorType< + pressure_size> const>(local_x.data() + pressure_index, pressure_size); double const& dt = _process_data.dt; ParameterLib::SpatialPosition x_position; x_position.setElementID(_element.getID()); + auto const& medium = _process_data.media_map->getMedium(_element.getID()); + auto const& solid_phase = medium->phase("Solid"); + MaterialPropertyLib::VariableArray vars; int const n_integration_points = _integration_method.getNumberOfPoints(); for (int ip = 0; ip < n_integration_points; ip++) @@ -476,14 +574,22 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, dNdx_u, N_u, x_coord, _is_axially_symmetric); double const T0 = _process_data.reference_temperature(t, x_position)[0]; - double const alpha_s = - _process_data.solid_linear_thermal_expansion_coefficient( - t, x_position)[0]; double const T_int_pt = N_T * T; + vars[static_cast<int>(MaterialPropertyLib::Variable::temperature)] = + T_int_pt; + vars[static_cast<int>(MaterialPropertyLib::Variable::phase_pressure)] = + N_T * p; // N_T = N_p + + auto const solid_linear_thermal_expansion_coefficient = + solid_phase + .property( + MaterialPropertyLib::PropertyType::thermal_expansivity) + .template value<double>(vars); double const delta_T(T_int_pt - T0); - double const thermal_strain = alpha_s * delta_T; + double const thermal_strain = + solid_linear_thermal_expansion_coefficient * delta_T; auto& eps = _ip_data[ip].eps; eps.noalias() = B * u; diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h index 18fb21dcb04..eb66005fdcd 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h @@ -53,6 +53,12 @@ public: using ShapeMatricesTypePressure = ShapeMatrixPolicyType<ShapeFunctionPressure, DisplacementDim>; + using GlobalDimMatrixType = + typename ShapeMatricesTypePressure::GlobalDimMatrixType; + + using GlobalDimVectorType = + typename ShapeMatricesTypePressure::GlobalDimVectorType; + static int const KelvinVectorSize = MathLib::KelvinVector::KelvinVectorDimensions<DisplacementDim>::value; using Invariants = MathLib::KelvinVector::Invariants<KelvinVectorSize>; diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h index 1112297ef80..cab217a599a 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcessData.h @@ -45,31 +45,6 @@ struct ThermoHydroMechanicsProcessData int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>> solid_materials; - /// Permeability of the solid. A scalar quantity, - /// ParameterLib::Parameter<double>. - ParameterLib::Parameter<double> const& intrinsic_permeability; - /// Volumetric average specific storage of the solid and fluid phases. - /// A scalar quantity, ParameterLib::Parameter<double>. - ParameterLib::Parameter<double> const& specific_storage; - /// Fluid's viscosity. A scalar quantity, ParameterLib::Parameter<double>. - ParameterLib::Parameter<double> const& fluid_viscosity; - /// Fluid's density. A scalar quantity, ParameterLib::Parameter<double>. - ParameterLib::Parameter<double> const& fluid_density; - /// Biot coefficient. A scalar quantity, ParameterLib::Parameter<double>. - ParameterLib::Parameter<double> const& biot_coefficient; - /// Porosity of the solid. A scalar quantity, - /// ParameterLib::Parameter<double>. - ParameterLib::Parameter<double> const& porosity; - /// Solid's density. A scalar quantity, ParameterLib::Parameter<double>. - ParameterLib::Parameter<double> const& solid_density; - ParameterLib::Parameter<double> const& - solid_linear_thermal_expansion_coefficient; - ParameterLib::Parameter<double> const& - fluid_volumetric_thermal_expansion_coefficient; - ParameterLib::Parameter<double> const& solid_specific_heat_capacity; - ParameterLib::Parameter<double> const& fluid_specific_heat_capacity; - ParameterLib::Parameter<double> const& solid_thermal_conductivity; - ParameterLib::Parameter<double> const& fluid_thermal_conductivity; ParameterLib::Parameter<double> const& reference_temperature; /// Specific body forces applied to solid and fluid. /// It is usually used to apply gravitational forces. -- GitLab