OGS
MaterialPropertyLib::SaturationDependentSwelling Class Referencefinal

Detailed Description

Orthotropic, saturation dependent swelling model. This property must be a solid phase property, it computes the stress increment depending on the saturation. A local coordinate system can be given for orthotropy.

Definition at line 23 of file SaturationDependentSwelling.h.

#include <SaturationDependentSwelling.h>

Inheritance diagram for MaterialPropertyLib::SaturationDependentSwelling:
[legend]
Collaboration diagram for MaterialPropertyLib::SaturationDependentSwelling:
[legend]

Public Member Functions

 SaturationDependentSwelling (std::string name, std::array< double, 3 > swelling_pressures, std::array< double, 3 > exponents, double const lower_saturation_limit, double const upper_saturation_limit, ParameterLib::CoordinateSystem const *const local_coordinate_system)
void checkScale () const override
PropertyDataType value (VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
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 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, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
virtual PropertyDataType dValue (VariableArray const &variable_array, 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

std::array< double, 3 > const p_
 Maximum swelling pressures, one for each spatial dimension.
std::array< double, 3 > const lambda_
 Exponents, one for each spatial dimension.
double const S_min_
double const S_max_
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

◆ SaturationDependentSwelling()

MaterialPropertyLib::SaturationDependentSwelling::SaturationDependentSwelling ( std::string name,
std::array< double, 3 > swelling_pressures,
std::array< double, 3 > exponents,
double const lower_saturation_limit,
double const upper_saturation_limit,
ParameterLib::CoordinateSystem const *const local_coordinate_system )

Definition at line 14 of file SaturationDependentSwelling.cpp.

23 : p_(std::move(swelling_pressures)),
24 lambda_(std::move(exponents)),
25 S_min_(lower_saturation_limit),
26 S_max_(upper_saturation_limit),
27 local_coordinate_system_(local_coordinate_system)
28{
29 name_ = std::move(name);
30}
std::array< double, 3 > const p_
Maximum swelling pressures, one for each spatial dimension.
ParameterLib::CoordinateSystem const *const local_coordinate_system_
std::array< double, 3 > const lambda_
Exponents, one for each spatial dimension.

References lambda_, local_coordinate_system_, MaterialPropertyLib::name, MaterialPropertyLib::Property::name_, p_, S_max_, and S_min_.

Member Function Documentation

◆ checkScale()

void MaterialPropertyLib::SaturationDependentSwelling::checkScale ( ) const
overridevirtual

Reimplemented from MaterialPropertyLib::Property.

Definition at line 32 of file SaturationDependentSwelling.cpp.

33{
34 if (!std::holds_alternative<Phase*>(scale_))
35 {
37 "The property 'SaturationDependentSwelling' is implemented on the "
38 "'phase' scales only.");
39 }
40 auto const phase = std::get<Phase*>(scale_);
41 if (phase->name != "Solid")
42 {
44 "The property 'SaturationDependentSwelling' must be given in the "
45 "'Solid' phase, not in '{:s}' phase.",
46 phase->name);
47 }
48}
#define OGS_FATAL(...)
Definition Error.h:19
std::variant< Medium *, Phase *, Component * > scale_

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

◆ dValue()

PropertyDataType MaterialPropertyLib::SaturationDependentSwelling::dValue ( VariableArray const & variable_array,
VariableArray const & variable_array_prev,
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 and the variables from the previous time step.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 98 of file SaturationDependentSwelling.cpp.

103{
104 if (variable != Variable::liquid_saturation)
105 {
106 OGS_FATAL(
107 "SaturationDependentSwelling::dValue is implemented for "
108 "derivatives with respect to liquid saturation only.");
109 }
110
111 auto const S_L = variable_array.liquid_saturation;
112 auto const S_L_prev = variable_array_prev.liquid_saturation;
113
114 Eigen::Matrix<double, 3, 3> const e =
115 local_coordinate_system_ == nullptr
116 ? Eigen::Matrix<double, 3, 3>::Identity()
117 : local_coordinate_system_->transformation_3d(pos);
118
119 Eigen::Matrix<double, 3, 3> delta_sigma_sw =
120 Eigen::Matrix<double, 3, 3>::Zero();
121
122 if (S_L < S_min_)
123 {
124 return delta_sigma_sw; // still being zero.
125 }
126
127 double const S_eff = std::clamp((S_L - S_min_) / (S_max_ - S_min_), 0., 1.);
128 double const S_eff_prev =
129 std::clamp((S_L_prev - S_min_) / (S_max_ - S_min_), 0., 1.);
130
131 double const delta_S_eff = S_eff - S_eff_prev;
132
133 // Heaviside(delta S_eff,sw)
134 if (std::abs(delta_S_eff) <= 0)
135 {
136 return delta_sigma_sw; // still being zero.
137 }
138
139 for (int i = 0; i < 3; ++i)
140 {
141 Eigen::Matrix<double, 3, 3> const ei_otimes_ei =
142 e.col(i) * e.col(i).transpose();
143
144 delta_sigma_sw +=
145 lambda_[i] * p_[i] * std::pow(S_eff, lambda_[i] - 1) * ei_otimes_ei;
146 }
147 return (delta_sigma_sw / (S_max_ - S_min_)).eval();
148}

References lambda_, MaterialPropertyLib::liquid_saturation, MaterialPropertyLib::VariableArray::liquid_saturation, local_coordinate_system_, OGS_FATAL, p_, S_max_, and S_min_.

◆ value()

PropertyDataType MaterialPropertyLib::SaturationDependentSwelling::value ( VariableArray const & variable_array,
VariableArray const & variable_array_prev,
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 and the variables from the previous time step.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 50 of file SaturationDependentSwelling.cpp.

55{
56 auto const S_L = variable_array.liquid_saturation;
57 auto const S_L_prev = variable_array_prev.liquid_saturation;
58
59 Eigen::Matrix<double, 3, 3> const e =
61 ? Eigen::Matrix<double, 3, 3>::Identity()
62 : local_coordinate_system_->transformation_3d(pos);
63
64 Eigen::Matrix<double, 3, 3> delta_sigma_sw =
65 Eigen::Matrix<double, 3, 3>::Zero();
66
67 if (S_L < S_min_)
68 {
69 return delta_sigma_sw; // still being zero.
70 }
71
72 double const S_eff = std::clamp((S_L - S_min_) / (S_max_ - S_min_), 0., 1.);
73 double const S_eff_prev =
74 std::clamp((S_L_prev - S_min_) / (S_max_ - S_min_), 0., 1.);
75
76 double const delta_S_eff = S_eff - S_eff_prev;
77
78 if (delta_S_eff == 0.)
79 {
80 return delta_sigma_sw; // still being zero.
81 }
82
83 // \Delta\sigma_{sw} = - \sum_i k_i (\lambda p S_{eff}^{(\lambda_i - 1)}
84 // e_i \otimes e_i \Delta S_L / (S_{max} - S_{min}), where
85 // e_i \otimes e_i is a square matrix with e_i,0^2 e_i,0*e_i,1 etc.
86 for (int i = 0; i < 3; ++i)
87 {
88 Eigen::Matrix<double, 3, 3> const ei_otimes_ei =
89 e.col(i) * e.col(i).transpose();
90
91 delta_sigma_sw -=
92 lambda_[i] * p_[i] * std::pow(S_eff, lambda_[i] - 1) * ei_otimes_ei;
93 }
94
95 return (delta_sigma_sw * delta_S_eff / dt).eval();
96}

References lambda_, MaterialPropertyLib::VariableArray::liquid_saturation, local_coordinate_system_, p_, S_max_, and S_min_.

Member Data Documentation

◆ lambda_

std::array<double, 3> const MaterialPropertyLib::SaturationDependentSwelling::lambda_
private

Exponents, one for each spatial dimension.

Definition at line 29 of file SaturationDependentSwelling.h.

Referenced by SaturationDependentSwelling(), dValue(), and value().

◆ local_coordinate_system_

ParameterLib::CoordinateSystem const* const MaterialPropertyLib::SaturationDependentSwelling::local_coordinate_system_
private

Definition at line 32 of file SaturationDependentSwelling.h.

Referenced by SaturationDependentSwelling(), dValue(), and value().

◆ p_

std::array<double, 3> const MaterialPropertyLib::SaturationDependentSwelling::p_
private

Maximum swelling pressures, one for each spatial dimension.

Definition at line 27 of file SaturationDependentSwelling.h.

Referenced by SaturationDependentSwelling(), dValue(), and value().

◆ S_max_

double const MaterialPropertyLib::SaturationDependentSwelling::S_max_
private

Definition at line 31 of file SaturationDependentSwelling.h.

Referenced by SaturationDependentSwelling(), dValue(), and value().

◆ S_min_

double const MaterialPropertyLib::SaturationDependentSwelling::S_min_
private

Definition at line 30 of file SaturationDependentSwelling.h.

Referenced by SaturationDependentSwelling(), dValue(), and value().


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