OGS
SmallDeformation/ConstitutiveRelations/SolidMechanics.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 "SolidMechanics.h"
5
7{
9{
10template <int DisplacementDim>
12 SpaceTimeData const& x_t,
13 Temperature const& temperature,
14 StrainData<DisplacementDim> const& eps_data,
15 PrevState<StrainData<DisplacementDim>> const& eps_data_prev,
17 PrevState<StressData<DisplacementDim>> const& stress_data_prev,
18 StressData<DisplacementDim>& stress_data,
20 FreeEnergyDensityData& free_energy_density_data) const
21{
22 namespace MPL = MaterialPropertyLib;
23
24 // current state
25 MPL::VariableArray variables;
26 {
27 // thermodynamic forces
28 variables.stress = stress_data.sigma;
29 variables.mechanical_strain = eps_data.eps;
30
31 // external state variables
32 variables.temperature = *temperature;
33 }
34
35 // previous state
36 MPL::VariableArray variables_prev;
37 {
38 // thermodynamic forces
39 variables_prev.stress = stress_data_prev->sigma;
40 variables_prev.mechanical_strain = eps_data_prev->eps;
41
42 // external state variables
43 variables_prev.temperature = *temperature;
44 }
45
46 auto solution = solid_material_.integrateStress(
47 variables_prev, variables, x_t.t, x_t.x, x_t.dt,
48 *mat_state.material_state_variables);
49
50 if (!solution)
51 {
52 OGS_FATAL("Computation of local constitutive relation failed.");
53 }
54
55 std::tie(stress_data.sigma, mat_state.material_state_variables,
56 current_stateless.stiffness_tensor) = std::move(*solution);
57
58 free_energy_density_data.free_energy_density =
59 solid_material_.computeFreeEnergyDensity(
60 x_t.t, x_t.x, x_t.dt, eps_data.eps, stress_data.sigma,
61 *mat_state.material_state_variables);
62}
63
64template struct SolidMechanicsModel<2>;
65template struct SolidMechanicsModel<3>;
66} // namespace ConstitutiveRelations
67} // namespace ProcessLib::SmallDeformation
#define OGS_FATAL(...)
Definition Error.h:19
BaseLib::StrongType< double, struct TemperatureTag > Temperature
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > eps
Definition StrainData.h:14
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > sigma
Definition StressData.h:14
void eval(SpaceTimeData const &x_t, Temperature const &temperature, StrainData< DisplacementDim > const &eps_data, PrevState< StrainData< DisplacementDim > > const &eps_data_prev, MaterialStateData< DisplacementDim > &mat_state, PrevState< StressData< DisplacementDim > > const &stress_data_prev, StressData< DisplacementDim > &stress_data, SolidMechanicsDataStateless< DisplacementDim > &current_stateless, FreeEnergyDensityData &free_energy_density_data) const