OGS
MaterialPropertyLib::LinearSaturationSwellingStress Class Referencefinal

Detailed Description

This class defines a linear saturation rate dependent swelling stress model for the materials that swell strongly when water content increases.

Clay materials like bentonite have a high swelling capacity in dry state, and their swelling property can be described by this model.

The original model was proposed in [26] (equations (39) and (40) on pages 758–759). With a simplification of the parameters of the original formula and introducing a constraint to avoid shrinkage stress when saturation is below the initial saturation, the model takes the form

\[ {\mathbf{\sigma}}^{\text{sw}} = {\alpha}_{\text{sw}} (S-S_0) \mathbf{I}, \, \forall S \in [S_0, S_\text{max}] \]

where \({\alpha}_{\text{sw}}\) is a coefficient, and \(S_0\) is the initial saturation, and \(S_{\text{max}}\) is the maximum saturation. The coefficient gives the swelling stress at full saturation, which can be computed as

\[ {\alpha}_{\text{sw}} = \frac{{{\sigma}}^{\text{sw}}_{\text{max}}}{(S_{\text{max}}-S_0)} \]

where \({{\sigma}}^{\text{sw}}_{\text{max}}\) represents the swelling stress at full saturation.

In the numerical analysis, the stress always takes the incremental form. Therefore the model becomes as

\[\Delta {\mathbf{\sigma}}^{\text{sw}} = {\alpha}_{\text{sw}} \Delta S \mathbf{I}, \, \forall S \in [S_0, S_\text{max}] \]

Note:

  • In the property, saturation means water saturation.
  • The upper limit of saturation is not guaranteed, but it is required to be less or equal to \(S_\text{max}\) when calling this property. Therefore it is not checked again in this class.Thus, this model only needs two input parameters: \({\alpha}_{\text{sw}}\) and \(S_0\).

Definition at line 63 of file LinearSaturationSwellingStress.h.

#include <LinearSaturationSwellingStress.h>

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

Public Member Functions

 LinearSaturationSwellingStress (std::string name, double const coefficient, double const reference_saturation)
 
void checkScale () const override
 
PropertyDataType value (VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) 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, 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 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. More...
 
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

double const coefficient_
 
double const reference_saturation_
 

Additional Inherited Members

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

Constructor & Destructor Documentation

◆ LinearSaturationSwellingStress()

MaterialPropertyLib::LinearSaturationSwellingStress::LinearSaturationSwellingStress ( std::string  name,
double const  coefficient,
double const  reference_saturation 
)

Member Function Documentation

◆ checkScale()

void MaterialPropertyLib::LinearSaturationSwellingStress::checkScale ( ) const
inlineoverridevirtual

Reimplemented from MaterialPropertyLib::Property.

Definition at line 70 of file LinearSaturationSwellingStress.h.

71  {
72  if (!std::holds_alternative<Phase*>(scale_))
73  {
74  OGS_FATAL(
75  "The property 'LinearSaturationSwellingStress' is "
76  "implemented on the 'phase' scale only.");
77  }
78  }
#define OGS_FATAL(...)
Definition: Error.h:26
std::variant< Medium *, Phase *, Component * > scale_
Definition: Property.h:287

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

◆ dValue()

PropertyDataType MaterialPropertyLib::LinearSaturationSwellingStress::dValue ( VariableArray const &  variable_array,
Variable const  variable,
ParameterLib::SpatialPosition const &  pos,
double const  t,
double const  dt 
) const
overridevirtual
Returns
\( \frac{ \partial \Delta {{\sigma}}^{\text{sw}}}{\partial S}\).

Reimplemented from MaterialPropertyLib::Property.

Definition at line 59 of file LinearSaturationSwellingStress.cpp.

63 {
64  if (variable != Variable::liquid_saturation)
65  {
66  OGS_FATAL(
67  "LinearSaturationSwellingStress::dValue is implemented for "
68  "derivatives with respect to liquid saturation only.");
69  }
70 
71  // Sl <= S_max is guaranteed by the saturation property or
72  // the saturation calculation.
73  const double Sl = std::get<double>(
74  variable_array[static_cast<int>(Variable::liquid_saturation)]);
75 
76  return Sl < reference_saturation_ ? 0.0 : coefficient_;
77 }

References coefficient_, MaterialPropertyLib::liquid_saturation, OGS_FATAL, and reference_saturation_.

◆ value() [1/2]

PropertyDataType MaterialPropertyLib::LinearSaturationSwellingStress::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 27 of file LinearSaturationSwellingStress.cpp.

31 {
32  OGS_FATAL(
33  "LinearSaturationSwellingStress value call requires previous time step "
34  "values.");
35 }

References OGS_FATAL.

◆ value() [2/2]

PropertyDataType MaterialPropertyLib::LinearSaturationSwellingStress::value ( VariableArray const &  variable_array,
VariableArray const &  variable_array_prev,
ParameterLib::SpatialPosition const &  pos,
double const  t,
double const  dt 
) const
overridevirtual
Returns
\(\Delta {{\sigma}}^{\text{sw}} \).

Reimplemented from MaterialPropertyLib::Property.

Definition at line 37 of file LinearSaturationSwellingStress.cpp.

42 {
43  // Sl <= S_max is guaranteed by the saturation property or
44  // the saturation calculation.
45  const double Sl = std::get<double>(
46  variable_array[static_cast<int>(Variable::liquid_saturation)]);
47 
48  if (Sl < reference_saturation_)
49  {
50  return 0.0;
51  }
52 
53  const double Sl_prev = std::get<double>(
54  variable_array_prev[static_cast<int>(Variable::liquid_saturation)]);
55 
56  return coefficient_ * (Sl - Sl_prev);
57 }

References coefficient_, MaterialPropertyLib::liquid_saturation, and reference_saturation_.

Member Data Documentation

◆ coefficient_

double const MaterialPropertyLib::LinearSaturationSwellingStress::coefficient_
private

The coefficient of the model, which gives the swelling stress at full saturation. The coefficient can be obtained by

\[ {\alpha}_{\text{sw}} = \frac{{{\sigma}}^{\text{sw}}_{\text{max}}}{(S_{\text{max}}-S_0)} \]

with \({{\sigma}}^{\text{sw}}_{\text{max}}\) the swelling stress at full saturation, and \(S_{\text{max}}\) the maximum saturation.

Definition at line 110 of file LinearSaturationSwellingStress.h.

Referenced by dValue(), and value().

◆ reference_saturation_

double const MaterialPropertyLib::LinearSaturationSwellingStress::reference_saturation_
private

The reference saturation, at which the swelling stress is zero.

Definition at line 114 of file LinearSaturationSwellingStress.h.

Referenced by dValue(), and value().


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