OGS
MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim > Class Template Referencefinal

Detailed Description

template<int GlobalDim>
class MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim >

Porosity mixing based model for effective heat conduction

This property is a medium property. The corresponding values are taken from the liquid/solid phase.

Definition at line 22 of file EffectiveThermalConductivityPorosityMixing.h.

#include <EffectiveThermalConductivityPorosityMixing.h>

Inheritance diagram for MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim >:
[legend]
Collaboration diagram for MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim >:
[legend]

Public Member Functions

 EffectiveThermalConductivityPorosityMixing (std::string name, ParameterLib::CoordinateSystem const *const local_coordinate_system)
void checkScale () const override
PropertyDataType value (VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
PropertyDataType dValue (VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
Public Member Functions inherited from MaterialPropertyLib::Property
virtual ~Property ()
virtual PropertyDataType initialValue (ParameterLib::SpatialPosition const &pos, double const t) const
virtual PropertyDataType value () const
virtual PropertyDataType value (VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
virtual PropertyDataType dValue (VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
virtual PropertyDataType d2Value (VariableArray const &variable_array, Variable const variable1, Variable const variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 Default implementation: 2nd derivative of any constant property is zero.
virtual void setProperties (std::vector< std::unique_ptr< Phase > > const &phases)
 Default implementation:
void setScale (std::variant< Medium *, Phase *, Component * > scale)
template<typename T>
initialValue (ParameterLib::SpatialPosition const &pos, double const t) const
template<typename T>
value () const
template<typename T>
value (VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
value (VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
dValue (VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
dValue (VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
d2Value (VariableArray const &variable_array, Variable const &variable1, Variable const &variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const

Private Attributes

ParameterLib::CoordinateSystem const *const local_coordinate_system_

Additional Inherited Members

Protected Attributes inherited from MaterialPropertyLib::Property
std::string name_
PropertyDataType value_
 The single value of a property.
PropertyDataType dvalue_
std::variant< Medium *, Phase *, Component * > scale_

Constructor & Destructor Documentation

◆ EffectiveThermalConductivityPorosityMixing()

Member Function Documentation

◆ checkScale()

template<int GlobalDim>
void MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim >::checkScale ( ) const
overridevirtual

Reimplemented from MaterialPropertyLib::Property.

Definition at line 24 of file EffectiveThermalConductivityPorosityMixing.cpp.

25{
27 {
29 "The property 'EffectiveThermalConductivityPorosityMixing' is "
30 "implemented on the 'medium' scale only.");
31 }
32}
#define OGS_FATAL(...)
Definition Error.h:19
std::variant< Medium *, Phase *, Component * > scale_

References OGS_FATAL, and MaterialPropertyLib::Property::scale_.

◆ dValue()

template<int GlobalDim>
PropertyDataType MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim >::dValue ( VariableArray const & variable_array,
Variable const variable,
ParameterLib::SpatialPosition const & pos,
double const t,
double const dt ) const
overridevirtual

This virtual method will compute the property derivative value based on the variables that are passed as arguments with the default implementation using empty variables array for the previous time step.

The default implementation of this method only returns the property value derivative without altering it.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 115 of file EffectiveThermalConductivityPorosityMixing.cpp.

119{
121 {
122 OGS_FATAL(
123 "The derivative of the "
124 "EffectiveThermalConductivityPorosityMixing is implemented only "
125 "w.r.t. temperature.");
126 }
127
128 auto const& medium = std::get<Medium*>(scale_);
129 // Assuming there is either a gas phase or a liquid phase or both.
130 auto const gas_phase =
131 medium->hasPhase("Gas") ? &medium->phase("Gas") : nullptr;
132 auto const liquid_phase = medium->hasPhase("AqueousLiquid")
133 ? &medium->phase("AqueousLiquid")
134 : nullptr;
135 // Assuming there is always a solid phase.
136 auto const& solid_phase = medium->phase("Solid");
137
138 auto const gas_thermal_conductivity =
140 ? gas_phase
141 ->property(
143 .template value<double>(variable_array, pos, t, dt)
144 : 0.;
145
146 auto const liquid_thermal_conductivity =
149 ->property(
151 .template value<double>(variable_array, pos, t, dt)
152 : 0.;
153
154 auto const porosity = variable_array.porosity;
155
156 auto const S_L = variable_array.liquid_saturation;
157 auto const S_G = 1. - S_L;
158
159 auto const phi_G = porosity * S_G;
160 auto const phi_L = porosity * S_L;
161 auto const phi_S = 1. - porosity;
162
163 // Derivatives of thermal conductivities w.r.t. temperature
166 ? gas_phase
167 ->property(
171 : 0.;
172
176 ->property(
180 : 0.;
181
182 // For volume fractions, we need to consider derivatives w.r.t. porosity and
183 // saturation. Assuming porosity and saturation may depend on temperature
184 // d(phi_G)/dT =
185 // = d(porosity * S_G)/dT
186 // = d(porosity)/dT * S_G + porosity * d(S_G)/dT
187 // = d(porosity)/dT * S_G - porosity * d(S_L)/dT
188 // d(phi_L)/dT =
189 // = d(porosity * S_L)/dT
190 // = d(porosity)/dT * S_L + porosity * d(S_L)/dT
191 // d(phi_S)/dT =
192 // = d(1 - porosity)/dT
193 // = -d(porosity)/dT.
194 double const d_porosity_dT =
197 t, dt);
198 double const d_S_L_dT =
199 // Some processes might not have saturation property (like THM) and
200 // saturation passed in the variable_array is always 1.
205 : 0.;
206
207 auto const d_phi_G_dT = d_porosity_dT * S_G - porosity * d_S_L_dT;
208 auto const d_phi_L_dT = d_porosity_dT * S_L + porosity * d_S_L_dT;
209 auto const d_phi_S_dT = -d_porosity_dT;
210
215
220
221 if constexpr (GlobalDim == 1)
222 {
223 // For 1D, return scalar derivative
224 // Total derivative of effective thermal conductivity w.r.t. temperature
232
234 }
235 else
236 {
237 // For 2D/3D, use tensor operations
238
239 // Local coordinate transformation is only applied for the case that the
240 // initial solid thermal conductivity is given with orthotropic
241 // assumption.
243 {
245 local_coordinate_system_->rotateTensor<GlobalDim>(
248 local_coordinate_system_->rotateTensor<GlobalDim>(
250 }
251
259 I +
262
264 }
265}
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
virtual PropertyDataType value() const
constexpr Eigen::Matrix< double, GlobalDim, GlobalDim > formEigenTensor(MaterialPropertyLib::PropertyDataType const &values)

References dValue(), MaterialPropertyLib::formEigenTensor(), MaterialPropertyLib::VariableArray::liquid_saturation, local_coordinate_system_, OGS_FATAL, MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, MaterialPropertyLib::saturation, MaterialPropertyLib::Property::scale_, MaterialPropertyLib::temperature, MaterialPropertyLib::thermal_conductivity, and value().

Referenced by dValue().

◆ value()

template<int GlobalDim>
PropertyDataType MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim >::value ( VariableArray const & variable_array,
ParameterLib::SpatialPosition const & pos,
double const t,
double const dt ) const
overridevirtual

This virtual method will compute the property value based on the variables that are passed as arguments with the default implementation using empty variables array for the previous time step.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 35 of file EffectiveThermalConductivityPorosityMixing.cpp.

39{
40 auto const& medium = std::get<Medium*>(scale_);
41 // Assuming there is either a gas phase or a liquid phase or both.
42 auto const gas_phase =
43 medium->hasPhase("Gas") ? &medium->phase("Gas") : nullptr;
44 auto const liquid_phase = medium->hasPhase("AqueousLiquid")
45 ? &medium->phase("AqueousLiquid")
46 : nullptr;
47 // Assuming there is always a solid phase.
48 auto const& solid_phase = medium->phase("Solid");
49
50 auto const gas_thermal_conductivity =
52 ? gas_phase
53 ->property(
55 .template value<double>(variable_array, pos, t, dt)
56 : 0.;
57
61 ->property(
63 .template value<double>(variable_array, pos, t, dt)
64 : 0.;
65
70
71 auto const porosity = variable_array.porosity;
72
73 auto const S_L = variable_array.liquid_saturation;
74 auto const S_G = 1. - S_L;
75
76 auto const phi_G = porosity * S_G;
77 auto const phi_L = porosity * S_L;
78 auto const phi_S = 1. - porosity;
79
80 if constexpr (GlobalDim == 1)
81 {
82 // For 1D, return scalar value
87
89 }
90 else
91 {
92 // For 2D/3D, use tensor operations
93
94 // Local coordinate transformation is only applied for the case that the
95 // initial solid thermal conductivity is given with orthotropic
96 // assumption.
98 {
100 local_coordinate_system_->rotateTensor<GlobalDim>(
102 }
108 I +
111 }
112}

References MaterialPropertyLib::formEigenTensor(), MaterialPropertyLib::VariableArray::liquid_saturation, local_coordinate_system_, MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, MaterialPropertyLib::Property::scale_, MaterialPropertyLib::thermal_conductivity, and value().

Referenced by dValue(), and value().

Member Data Documentation

◆ local_coordinate_system_

template<int GlobalDim>
ParameterLib::CoordinateSystem const* const MaterialPropertyLib::EffectiveThermalConductivityPorosityMixing< GlobalDim >::local_coordinate_system_
private

The documentation for this class was generated from the following files: