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 113 of file EffectiveThermalConductivityPorosityMixing.cpp.

117{
119 {
120 OGS_FATAL(
121 "The derivative of the "
122 "EffectiveThermalConductivityPorosityMixing is implemented only "
123 "w.r.t. temperature.");
124 }
125
126 auto const& medium = std::get<Medium*>(scale_);
127 // Assuming there is either a gas phase or a liquid phase or both.
129 auto const liquid_phase =
131 // Assuming there is always a solid phase.
132 auto const& solid_phase = medium->phase(PhaseName::Solid);
133
134 auto const gas_thermal_conductivity =
136 ? gas_phase
137 ->property(
139 .template value<double>(variable_array, pos, t, dt)
140 : 0.;
141
142 auto const liquid_thermal_conductivity =
145 ->property(
147 .template value<double>(variable_array, pos, t, dt)
148 : 0.;
149
150 auto const porosity = variable_array.porosity;
151
152 auto const S_L = variable_array.liquid_saturation;
153 auto const S_G = 1. - S_L;
154
155 auto const phi_G = porosity * S_G;
156 auto const phi_L = porosity * S_L;
157 auto const phi_S = 1. - porosity;
158
159 // Derivatives of thermal conductivities w.r.t. temperature
162 ? gas_phase
163 ->property(
167 : 0.;
168
172 ->property(
176 : 0.;
177
178 // For volume fractions, we need to consider derivatives w.r.t. porosity and
179 // saturation. Assuming porosity and saturation may depend on temperature
180 // d(phi_G)/dT =
181 // = d(porosity * S_G)/dT
182 // = d(porosity)/dT * S_G + porosity * d(S_G)/dT
183 // = d(porosity)/dT * S_G - porosity * d(S_L)/dT
184 // d(phi_L)/dT =
185 // = d(porosity * S_L)/dT
186 // = d(porosity)/dT * S_L + porosity * d(S_L)/dT
187 // d(phi_S)/dT =
188 // = d(1 - porosity)/dT
189 // = -d(porosity)/dT.
190 double const d_porosity_dT =
193 t, dt);
194 double const d_S_L_dT =
195 // Some processes might not have saturation property (like THM) and
196 // saturation passed in the variable_array is always 1.
201 : 0.;
202
203 auto const d_phi_G_dT = d_porosity_dT * S_G - porosity * d_S_L_dT;
204 auto const d_phi_L_dT = d_porosity_dT * S_L + porosity * d_S_L_dT;
205 auto const d_phi_S_dT = -d_porosity_dT;
206
211
216
217 if constexpr (GlobalDim == 1)
218 {
219 // For 1D, return scalar derivative
220 // Total derivative of effective thermal conductivity w.r.t. temperature
228
230 }
231 else
232 {
233 // For 2D/3D, use tensor operations
234
235 // Local coordinate transformation is only applied for the case that the
236 // initial solid thermal conductivity is given with orthotropic
237 // assumption.
239 {
241 local_coordinate_system_->rotateTensor<GlobalDim>(
244 local_coordinate_system_->rotateTensor<GlobalDim>(
246 }
247
255 I +
258
260 }
261}
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)
Phase const * getOptionalPhase(Medium const &medium, PhaseName phase_name)
Definition Medium.cpp:110

References MaterialPropertyLib::AqueousLiquid, dValue(), MaterialPropertyLib::formEigenTensor(), MaterialPropertyLib::Gas, MaterialPropertyLib::getOptionalPhase(), MaterialPropertyLib::VariableArray::liquid_saturation, local_coordinate_system_, OGS_FATAL, MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, MaterialPropertyLib::saturation, MaterialPropertyLib::Property::scale_, MaterialPropertyLib::Solid, 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.
43 auto const liquid_phase =
45 // Assuming there is always a solid phase.
46 auto const& solid_phase = medium->phase(PhaseName::Solid);
47
48 auto const gas_thermal_conductivity =
50 ? gas_phase
51 ->property(
53 .template value<double>(variable_array, pos, t, dt)
54 : 0.;
55
59 ->property(
61 .template value<double>(variable_array, pos, t, dt)
62 : 0.;
63
68
69 auto const porosity = variable_array.porosity;
70
71 auto const S_L = variable_array.liquid_saturation;
72 auto const S_G = 1. - S_L;
73
74 auto const phi_G = porosity * S_G;
75 auto const phi_L = porosity * S_L;
76 auto const phi_S = 1. - porosity;
77
78 if constexpr (GlobalDim == 1)
79 {
80 // For 1D, return scalar value
85
87 }
88 else
89 {
90 // For 2D/3D, use tensor operations
91
92 // Local coordinate transformation is only applied for the case that the
93 // initial solid thermal conductivity is given with orthotropic
94 // assumption.
96 {
100 }
106 I +
109 }
110}

References MaterialPropertyLib::AqueousLiquid, MaterialPropertyLib::formEigenTensor(), MaterialPropertyLib::Gas, MaterialPropertyLib::getOptionalPhase(), MaterialPropertyLib::VariableArray::liquid_saturation, local_coordinate_system_, MaterialPropertyLib::porosity, MaterialPropertyLib::VariableArray::porosity, MaterialPropertyLib::Property::scale_, MaterialPropertyLib::Solid, 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: