OGS
ProcessLib::LIE::SmallDeformation Namespace Reference

Namespaces

 detail
 

Classes

struct  IntegrationPointDataFracture
 
struct  IntegrationPointDataMatrix
 
class  LocalDataInitializer
 
struct  SecondaryData
 
class  SmallDeformationLocalAssemblerFracture
 
class  SmallDeformationLocalAssemblerInterface
 
class  SmallDeformationLocalAssemblerMatrix
 
class  SmallDeformationLocalAssemblerMatrixNearFracture
 
class  SmallDeformationProcess
 
struct  SmallDeformationProcessData
 

Functions

template<int DisplacementDim>
std::unique_ptr< ProcesscreateSmallDeformationProcess (std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
 
template std::unique_ptr< ProcesscreateSmallDeformationProcess< 2 > (std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
 
template std::unique_ptr< ProcesscreateSmallDeformationProcess< 3 > (std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
 
template<int GlobalDim, template< typename, typename, int > class LocalAssemblerMatrixImplementation, template< typename, typename, int > class LocalAssemblerMatrixNearFractureImplementation, template< typename, typename, int > class LocalAssemblerFractureImplementation, typename LocalAssemblerInterface , typename... ExtraCtorArgs>
void createLocalAssemblers (std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface >> &local_assemblers, ExtraCtorArgs &&... extra_ctor_args)
 

Function Documentation

◆ createLocalAssemblers()

template<int GlobalDim, template< typename, typename, int > class LocalAssemblerMatrixImplementation, template< typename, typename, int > class LocalAssemblerMatrixNearFractureImplementation, template< typename, typename, int > class LocalAssemblerFractureImplementation, typename LocalAssemblerInterface , typename... ExtraCtorArgs>
void ProcessLib::LIE::SmallDeformation::createLocalAssemblers ( std::vector< MeshLib::Element * > const &  mesh_elements,
NumLib::LocalToGlobalIndexMap const &  dof_table,
std::vector< std::unique_ptr< LocalAssemblerInterface >> &  local_assemblers,
ExtraCtorArgs &&...  extra_ctor_args 
)

Creates local assemblers for each element of the given mesh.

Template Parameters
LocalAssemblerImplementationthe individual local assembler type
LocalAssemblerInterfacethe general local assembler interface
ExtraCtorArgstypes of additional constructor arguments. Those arguments will be passed to the constructor of LocalAssemblerImplementation.

The first two template parameters cannot be deduced from the arguments. Therefore they always have to be provided manually.

Definition at line 81 of file CreateLocalAssemblers.h.

86 {
87  DBUG("Create local assemblers.");
88 
90  GlobalDim, LocalAssemblerMatrixImplementation,
91  LocalAssemblerMatrixNearFractureImplementation,
92  LocalAssemblerFractureImplementation>(
93  dof_table, mesh_elements, local_assemblers,
94  std::forward<ExtraCtorArgs>(extra_ctor_args)...);
95 }
void DBUG(char const *fmt, Args const &... args)
Definition: Logging.h:27
void createLocalAssemblers(const unsigned dimension, std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, const unsigned shapefunction_order, std::vector< std::unique_ptr< LocalAssemblerInterface >> &local_assemblers, ExtraCtorArgs &&... extra_ctor_args)

References ProcessLib::LIE::SmallDeformation::detail::createLocalAssemblers(), and DBUG().

Referenced by ProcessLib::LIE::SmallDeformation::SmallDeformationProcess< DisplacementDim >::initializeConcreteProcess().

◆ createSmallDeformationProcess()

template<int DisplacementDim>
std::unique_ptr< Process > ProcessLib::LIE::SmallDeformation::createSmallDeformationProcess ( std::string  name,
MeshLib::Mesh mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&  jacobian_assembler,
std::vector< ProcessVariable > const &  variables,
std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
unsigned const  integration_order,
BaseLib::ConfigTree const &  config 
)
Input File Parameter:
prj__processes__process__type
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__process_variables
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__process_variables__process_variable
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__fracture_model
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__fracture_model__type
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__fracture_properties
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__fracture_properties__material_id
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__fracture_properties__initial_aperture
Input File Parameter:
prj__processes__process__SMALL_DEFORMATION_WITH_LIE__reference_temperature

Definition at line 31 of file CreateSmallDeformationProcess.cpp.

41 {
43  config.checkConfigParameter("type", "SMALL_DEFORMATION_WITH_LIE");
44  DBUG("Create SmallDeformationProcess with LIE.");
45 
46  // Process variables
48  auto const pv_conf = config.getConfigSubtree("process_variables");
49  auto range =
51  pv_conf.getConfigParameterList<std::string>("process_variable");
52  std::vector<std::reference_wrapper<ProcessVariable>> per_process_variables;
53 
54  std::size_t n_var_du = 0;
55  for (std::string const& pv_name : range)
56  {
57  if (pv_name != "displacement" && pv_name.find("displacement_jump") != 0)
58  {
59  OGS_FATAL(
60  "Found a process variable name '{:s}'. It should be "
61  "'displacement' or 'displacement_jumpN' or "
62  "'displacement_junctionN'");
63  }
64  if (pv_name.find("displacement_jump") == 0)
65  {
66  n_var_du++;
67  }
68 
69  auto variable = std::find_if(variables.cbegin(), variables.cend(),
70  [&pv_name](ProcessVariable const& v)
71  { return v.getName() == pv_name; });
72 
73  if (variable == variables.end())
74  {
75  OGS_FATAL(
76  "Could not find process variable '{:s}' in the provided "
77  "variables "
78  "list for config tag <{:s}>.",
79  pv_name, "process_variable");
80  }
81  DBUG("Found process variable '{:s}' for config tag <{:s}>.",
82  variable->getName(), "process_variable");
83 
84  per_process_variables.emplace_back(
85  const_cast<ProcessVariable&>(*variable));
86  }
87 
88  if (n_var_du < 1)
89  {
90  OGS_FATAL("No displacement jump variables are specified");
91  }
92 
93  DBUG("Associate displacement with process variable '{:s}'.",
94  per_process_variables.back().get().getName());
95 
96  if (per_process_variables.back().get().getNumberOfGlobalComponents() !=
97  DisplacementDim)
98  {
99  OGS_FATAL(
100  "Number of components of the process variable '{:s}' is different "
101  "from the displacement dimension: got {:d}, expected {:d}",
102  per_process_variables.back().get().getName(),
103  per_process_variables.back().get().getNumberOfGlobalComponents(),
104  DisplacementDim);
105  }
106  std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>
107  process_variables;
108  process_variables.push_back(std::move(per_process_variables));
109 
110  auto solid_constitutive_relations =
111  MaterialLib::Solids::createConstitutiveRelations<DisplacementDim>(
112  parameters, local_coordinate_system, config);
113 
114  // Fracture constitutive relation.
115  // read type;
116  auto const fracture_model_config =
118  config.getConfigSubtree("fracture_model");
119 
120  auto const frac_type =
122  fracture_model_config.peekConfigParameter<std::string>("type");
123 
124  std::unique_ptr<MaterialLib::Fracture::FractureModelBase<DisplacementDim>>
125  fracture_model = nullptr;
126  if (frac_type == "LinearElasticIsotropic")
127  {
129  DisplacementDim>(parameters, fracture_model_config);
130  }
131  else if (frac_type == "Coulomb")
132  {
133  fracture_model = MaterialLib::Fracture::createCoulomb<DisplacementDim>(
134  parameters, fracture_model_config);
135  }
136  else if (frac_type == "CohesiveZoneModeI")
137  {
138  fracture_model =
140  DisplacementDim>(parameters, fracture_model_config);
141  }
142  else
143  {
144  OGS_FATAL(
145  "Cannot construct fracture constitutive relation of given type "
146  "'{:s}'.",
147  frac_type);
148  }
149 
150  // Fracture properties
151  std::vector<FractureProperty> fracture_properties;
152  for (
153  auto fracture_properties_config :
155  config.getConfigSubtreeList("fracture_properties"))
156  {
157  fracture_properties.emplace_back(
158  fracture_properties.size(),
160  fracture_properties_config.getConfigParameter<int>("material_id"),
161  ParameterLib::findParameter<double>(
163  fracture_properties_config, "initial_aperture", parameters, 1,
164  &mesh));
165  }
166 
167  if (n_var_du < fracture_properties.size())
168  {
169  OGS_FATAL(
170  "The number of displacement jumps and the number of "
171  "<fracture_properties> are not consistent");
172  }
173 
174  // Reference temperature
175  const auto& reference_temperature =
177  config.getConfigParameter<double>(
178  "reference_temperature", std::numeric_limits<double>::quiet_NaN());
179 
180  SmallDeformationProcessData<DisplacementDim> process_data(
181  materialIDs(mesh), std::move(solid_constitutive_relations),
182  std::move(fracture_model), std::move(fracture_properties),
184 
185  SecondaryVariableCollection secondary_variables;
186 
187  ProcessLib::createSecondaryVariables(config, secondary_variables);
188 
189  return std::make_unique<SmallDeformationProcess<DisplacementDim>>(
190  std::move(name), mesh, std::move(jacobian_assembler), parameters,
191  integration_order, std::move(process_variables),
192  std::move(process_data), std::move(secondary_variables));
193 }
#define OGS_FATAL(...)
Definition: Error.h:26
std::unique_ptr< FractureModelBase< DisplacementDim > > createCohesiveZoneModeI(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, BaseLib::ConfigTree const &config)
std::unique_ptr< FractureModelBase< DisplacementDim > > createLinearElasticIsotropic(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, BaseLib::ConfigTree const &config)
PropertyVector< int > const * materialIDs(Mesh const &mesh)
Definition: Mesh.cpp:258
void createSecondaryVariables(BaseLib::ConfigTree const &config, SecondaryVariableCollection &secondary_variables)

References BaseLib::ConfigTree::checkConfigParameter(), MaterialLib::Fracture::CohesiveZoneModeI::createCohesiveZoneModeI(), MaterialLib::Fracture::createLinearElasticIsotropic(), ProcessLib::createSecondaryVariables(), DBUG(), BaseLib::ConfigTree::getConfigParameter(), BaseLib::ConfigTree::getConfigParameterList(), BaseLib::ConfigTree::getConfigSubtree(), BaseLib::ConfigTree::getConfigSubtreeList(), MeshLib::materialIDs(), MaterialPropertyLib::name, OGS_FATAL, BaseLib::ConfigTree::peekConfigParameter(), and MaterialPropertyLib::reference_temperature.

◆ createSmallDeformationProcess< 2 >()

template std::unique_ptr<Process> ProcessLib::LIE::SmallDeformation::createSmallDeformationProcess< 2 > ( std::string  name,
MeshLib::Mesh mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&  jacobian_assembler,
std::vector< ProcessVariable > const &  variables,
std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
unsigned const  integration_order,
BaseLib::ConfigTree const &  config 
)

◆ createSmallDeformationProcess< 3 >()

template std::unique_ptr<Process> ProcessLib::LIE::SmallDeformation::createSmallDeformationProcess< 3 > ( std::string  name,
MeshLib::Mesh mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&  jacobian_assembler,
std::vector< ProcessVariable > const &  variables,
std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
unsigned const  integration_order,
BaseLib::ConfigTree const &  config 
)