OGS
TH2M/ConstitutiveRelations/Swelling.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "Swelling.h"
5
6#include <Eigen/LU>
7
9
10namespace ProcessLib::TH2M
11{
13{
14template <int DisplacementDim>
16 SpaceTimeData const& x_t, MediaData const& media_data,
18 SaturationData const& S_L_data,
19 PrevState<SaturationData> const& S_L_prev_data,
23{
24 namespace MPL = MaterialPropertyLib;
25
26 if (media_data.swelling_stress_rate_solid == nullptr)
27 {
28 out.eps_m.setZero();
29 state.sigma_sw.setZero();
30 return;
31 }
32
33 MPL::VariableArray variables;
34 variables.liquid_saturation = S_L_data.S_L;
35
36 MPL::VariableArray variables_prev;
37 variables_prev.liquid_saturation = S_L_prev_data->S_L;
38
39 // Swelling and possibly volumetric strain rate update.
40
41 // If there is swelling, compute it. Update volumetric strain rate,
42 // s.t. it corresponds to the mechanical part only.
43 state.sigma_sw = prev_state->sigma_sw;
44
45 auto const sigma_sw_dot =
49 variables, variables_prev, x_t.x, x_t.t, x_t.dt)));
50 state.sigma_sw += sigma_sw_dot * x_t.dt;
51
52 auto const C_el_inv = C_el_data.stiffness_tensor.inverse().eval();
53
54 out.eps_m.noalias() = C_el_inv * (state.sigma_sw - prev_state->sigma_sw);
55}
56
57template struct SwellingModel<2>;
58template struct SwellingModel<3>;
59} // namespace ConstitutiveRelations
60} // namespace ProcessLib::TH2M
virtual PropertyDataType value() const
constexpr Eigen::Matrix< double, GlobalDim, GlobalDim > formEigenTensor(MaterialPropertyLib::PropertyDataType const &values)
KelvinVectorType< DisplacementDim > tensorToKelvin(Eigen::Matrix< double, 3, 3 > const &m)
void eval(SpaceTimeData const &x_t, MediaData const &media_data, ElasticTangentStiffnessData< DisplacementDim > const &C_el_data, SaturationData const &S_L_data, PrevState< SaturationData > const &S_L_prev_data, PrevState< SwellingDataStateful< DisplacementDim > > const &prev_state, SwellingDataStateful< DisplacementDim > &state, SwellingDataStateless< DisplacementDim > &out) const