OGS
CreateInitialStress.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
5
6#include <string>
7
9#include "InitialStress.h"
11#include "MeshLib/Mesh.h"
12#include "ParameterLib/Utils.h"
13
14namespace ProcessLib
15{
16template <int DisplacementDim>
18 BaseLib::ConfigTree const& config,
19 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
20 MeshLib::Mesh const& mesh, bool const mandatory_stress_type)
21{
22 auto const config_stress0 =
24 config.getConfigSubtreeOptional("initial_stress");
25
26 if (!config_stress0)
27 {
28 return {};
29 }
30
31 auto const stress0_type_opt =
33 config_stress0->getConfigAttributeOptional<std::string>("type");
34
35 // If the type is mandatory required but it is not presented:
36 if (mandatory_stress_type && !stress0_type_opt)
37 {
39 "The attribute \"type\" of the tag \"initial_stress\" is required "
40 "for the current process setting, for example using subtype = "
41 "\"StressSaturation_StrainPressureTemperature\" in TRM. "
42 "However it is missing.");
43 }
44
45 auto const stress0_type_str =
46 stress0_type_opt ? *stress0_type_opt : "effective";
47
48 InitialStress::Type stress0_type;
49 if (stress0_type_str == "total")
50 {
51 stress0_type = InitialStress::Type::Total;
52 }
53 else if (stress0_type_str == "effective")
54 {
55 stress0_type = InitialStress::Type::Effective;
56 }
57 else
58 {
60 "The initial stress type must be \"total\" or "
61 "\"effective\". But the given one is {:s}",
62 stress0_type_str);
63 }
64
65 auto const parameter_name = config_stress0->getValue<std::string>();
66 auto const initial_stress = &ParameterLib::findParameter<double>(
67 parameter_name, parameters,
69 &mesh);
70
71 return {initial_stress, stress0_type};
72}
73
75 BaseLib::ConfigTree const& config,
76 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
77 MeshLib::Mesh const& mesh, bool const mandatory_stress_type);
79 BaseLib::ConfigTree const& config,
80 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
81 MeshLib::Mesh const& mesh, bool const mandatory_stress_type);
82
83}; // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
OGS_NO_DANGLING Parameter< ParameterDataType > & findParameter(std::string const &parameter_name, std::vector< std::unique_ptr< ParameterBase > > const &parameters, int const num_components, MeshLib::Mesh const *const mesh=nullptr)
template InitialStress createInitialStress< 2 >(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, MeshLib::Mesh const &mesh, bool const mandatory_stress_type)
template InitialStress createInitialStress< 3 >(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, MeshLib::Mesh const &mesh, bool const mandatory_stress_type)
InitialStress createInitialStress(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, MeshLib::Mesh const &mesh, bool const mandatory_stress_type)