OGS
ProcessLib::LargeDeformation Namespace Reference

Namespaces

namespace  ConstitutiveRelations
namespace  detail

Classes

struct  DeformationGradientData
struct  GravityModel
struct  IntegrationPointData
class  LargeDeformationLocalAssembler
struct  LargeDeformationLocalAssemblerInterface
class  LargeDeformationProcess
struct  LargeDeformationProcessData
class  MaterialStateData
struct  MediaData
struct  SecondaryData
struct  SolidDensityModel

Typedefs

template<int DisplacementDim>
using VolumetricBodyForce
using SolidDensity = BaseLib::StrongType<double, struct SolidDensityTag>

Functions

template<int DisplacementDim>
std::unique_ptr< ProcesscreateLargeDeformationProcess (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, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
template std::unique_ptr< ProcesscreateLargeDeformationProcess< 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, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
template std::unique_ptr< ProcesscreateLargeDeformationProcess< 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, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
template<int GlobalDim, template< typename, int > class LocalAssemblerImplementation, typename LocalAssemblerInterface, IntegrationMethodProviderOrIntegrationOrder ProviderOrOrder, typename... ExtraCtorArgs>
void createLocalAssemblers (std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, ProviderOrOrder const &provider_or_order, ExtraCtorArgs &&... extra_ctor_args)
template<int DisplacementDim, typename ShapeMatricesType>
Eigen::Matrix< double, MPL::tensorSize(DisplacementDim), MPL::tensorSize(DisplacementDim)> computeSigmaGeom (Eigen::Matrix3d const &sigma_tensor)

Typedef Documentation

◆ SolidDensity

◆ VolumetricBodyForce

Function Documentation

◆ computeSigmaGeom()

template<int DisplacementDim, typename ShapeMatricesType>
Eigen::Matrix< double, MPL::tensorSize(DisplacementDim), MPL::tensorSize(DisplacementDim)> ProcessLib::LargeDeformation::computeSigmaGeom ( Eigen::Matrix3d const & sigma_tensor)

Definition at line 49 of file LargeDeformationFEM.h.

50{
51 static constexpr auto& sigma_geom_op = MathLib::eigenBlockMatrixView<
52 DisplacementDim,
53 Eigen::Matrix<double, DisplacementDim, DisplacementDim>>;
54
55 using SigmaGeom = Eigen::Matrix<double, MPL::tensorSize(DisplacementDim),
56 MPL::tensorSize(DisplacementDim)>;
57 if constexpr (DisplacementDim == 2)
58 {
59 SigmaGeom sigma_geom = SigmaGeom::Zero(5, 5);
60 sigma_geom.template block<4, 4>(0, 0) =
61 sigma_geom_op(sigma_tensor.template block<2, 2>(0, 0).eval());
62 sigma_geom(4, 4) = sigma_tensor(2, 2);
63
64 return sigma_geom;
65 }
66
67 if constexpr (DisplacementDim == 3)
68 {
69 return sigma_geom_op(sigma_tensor);
70 }
71}
constexpr int tensorSize(int dim)
See Tensor type for details.
Definition Tensor.h:13
constexpr Eigen::CwiseNullaryOp< EigenBlockMatrixViewFunctor< D, M >, typename EigenBlockMatrixViewFunctor< D, M >::Matrix > eigenBlockMatrixView(const Eigen::MatrixBase< M > &matrix)

References MathLib::eigenBlockMatrixView(), and MaterialPropertyLib::tensorSize().

Referenced by ProcessLib::LargeDeformation::LargeDeformationLocalAssembler< ShapeFunction, DisplacementDim >::assembleWithJacobian().

◆ createLargeDeformationProcess()

template<int DisplacementDim>
std::unique_ptr< Process > ProcessLib::LargeDeformation::createLargeDeformationProcess ( 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,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media )
Input File Parameter
prj__processes__process__type

Process Variables

Input File Parameter
prj__processes__process__LARGE_DEFORMATION__process_variables

Primary process variables as they appear in the global component vector:

Input File Parameter
prj__processes__process__LARGE_DEFORMATION__process_variables__process_variable

Process Parameters

Input File Parameter
prj__processes__process__LARGE_DEFORMATION__specific_body_force
Input File Parameter
prj__processes__process__LARGE_DEFORMATION__reference_temperature
Input File Parameter
prj__processes__process__LARGE_DEFORMATION__initial_stress
Input File Parameter
prj__processes__process__LARGE_DEFORMATION__f_bar

Definition at line 21 of file CreateLargeDeformationProcess.cpp.

32{
34 config.checkConfigParameter("type", "LARGE_DEFORMATION");
35 DBUG("Create LargeDeformationProcess.");
36
38
40 auto const pv_config = config.getConfigSubtree("process_variables");
41
43 auto per_process_variables = findProcessVariables(
44 variables, pv_config,
45 {
46 "process_variable"});
47
48 DBUG("Associate displacement with process variable '{:s}'.",
49 per_process_variables.back().get().getName());
50
51 if (per_process_variables.back().get().getNumberOfGlobalComponents() !=
52 DisplacementDim)
53 {
55 "Number of components of the process variable '{:s}' is different "
56 "from the displacement dimension: got {:d}, expected {:d}",
57 per_process_variables.back().get().getName(),
58 per_process_variables.back().get().getNumberOfGlobalComponents(),
59 DisplacementDim);
60 }
61 std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>
62 process_variables;
63 process_variables.push_back(std::move(per_process_variables));
64
66 auto solid_constitutive_relations =
69 parameters, local_coordinate_system, materialIDs(mesh), config);
70
71 // Specific body force
72 Eigen::Matrix<double, DisplacementDim, 1> specific_body_force;
73 {
74 std::vector<double> const b =
76 config.getConfigParameter<std::vector<double>>(
77 "specific_body_force");
78 if (b.size() != DisplacementDim)
79 {
81 "The size of the specific body force vector does not match the "
82 "displacement dimension. Vector size is {:d}, displacement "
83 "dimension is {:d}",
84 b.size(), DisplacementDim);
85 }
86
87 std::copy_n(b.data(), b.size(), specific_body_force.data());
88 }
89
90 auto media_map =
92
93 // Reference temperature
95 double>(
97 config, "reference_temperature", parameters, 1, &mesh);
98 if (reference_temperature)
99 {
100 DBUG("Use '{:s}' as reference temperature parameter.",
101 (*reference_temperature).name);
102 }
103
104 // Initial stress conditions
105 auto const initial_stress = ParameterLib::findOptionalTagParameter<double>(
107 config, "initial_stress", parameters,
108 // Symmetric tensor size, 4 or 6, not a Kelvin vector.
110 &mesh);
111
112 std::string const f_bar_info =
114 config.getConfigParameter<std::string>("f_bar", "");
115
116 if (mesh.isAxiallySymmetric() && f_bar_info != "")
117 {
118 OGS_FATAL(
119 "The F-bar method is not available for axisymmetric problems.");
120 }
121
123 materialIDs(mesh),
124 std::move(media_map),
125 std::move(solid_constitutive_relations),
126 initial_stress,
127 specific_body_force,
130
131 SecondaryVariableCollection secondary_variables;
132
133 ProcessLib::createSecondaryVariables(config, secondary_variables);
134
135 return std::make_unique<LargeDeformationProcess<DisplacementDim>>(
136 std::move(name), mesh, std::move(jacobian_assembler), parameters,
137 integration_order, std::move(process_variables),
138 std::move(process_data), std::move(secondary_variables));
139}
#define OGS_FATAL(...)
Definition Error.h:19
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
bool isAxiallySymmetric() const
Definition Mesh.h:128
MaterialSpatialDistributionMap createMaterialSpatialDistributionMap(std::map< int, std::shared_ptr< Medium > > const &media, MeshLib::Mesh const &mesh)
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
PropertyVector< int > const * materialIDs(Mesh const &mesh)
Definition Mesh.cpp:258
Parameter< ParameterDataType > * findOptionalTagParameter(BaseLib::ConfigTree const &process_config, std::string const &tag, std::vector< std::unique_ptr< ParameterBase > > const &parameters, int const num_components, MeshLib::Mesh const *const mesh=nullptr)
BarDetFType convertStringToDetFBarType(std::string_view const bar_det_f_type_name)
std::vector< std::reference_wrapper< ProcessVariable > > findProcessVariables(std::vector< ProcessVariable > const &variables, BaseLib::ConfigTree const &pv_config, std::initializer_list< std::string > tags)
void createSecondaryVariables(BaseLib::ConfigTree const &config, SecondaryVariableCollection &secondary_variables)
static std::map< int, std::shared_ptr< SolidConstitutiveRelation< DisplacementDim > > > createSolidConstitutiveRelations(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, MeshLib::PropertyVector< int > const *const material_ids, BaseLib::ConfigTree const &config)

References BaseLib::ConfigTree::checkConfigParameter(), ProcessLib::NonLinearFbar::convertStringToDetFBarType(), MaterialPropertyLib::createMaterialSpatialDistributionMap(), ProcessLib::createSecondaryVariables(), ProcessLib::LargeDeformation::ConstitutiveRelations::CreateConstitutiveSetting< DisplacementDim >::createSolidConstitutiveRelations(), DBUG(), ParameterLib::findOptionalTagParameter(), ProcessLib::findProcessVariables(), BaseLib::ConfigTree::getConfigParameter(), BaseLib::ConfigTree::getConfigSubtree(), MeshLib::Mesh::isAxiallySymmetric(), MathLib::KelvinVector::kelvin_vector_dimensions(), and OGS_FATAL.

◆ createLargeDeformationProcess< 2 >()

template std::unique_ptr< Process > ProcessLib::LargeDeformation::createLargeDeformationProcess< 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,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media )

◆ createLargeDeformationProcess< 3 >()

template std::unique_ptr< Process > ProcessLib::LargeDeformation::createLargeDeformationProcess< 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,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media )

◆ createLocalAssemblers()

template<int GlobalDim, template< typename, int > class LocalAssemblerImplementation, typename LocalAssemblerInterface, IntegrationMethodProviderOrIntegrationOrder ProviderOrOrder, typename... ExtraCtorArgs>
void ProcessLib::LargeDeformation::createLocalAssemblers ( std::vector< MeshLib::Element * > const & mesh_elements,
NumLib::LocalToGlobalIndexMap const & dof_table,
std::vector< std::unique_ptr< LocalAssemblerInterface > > & local_assemblers,
ProviderOrOrder const & provider_or_order,
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 70 of file LargeDeformation/CreateLocalAssemblers.h.

76{
77 DBUG("Create local assemblers.");
78
80 dof_table, mesh_elements, local_assemblers, provider_or_order,
81 std::forward<ExtraCtorArgs>(extra_ctor_args)...);
82}
void createLocalAssemblers(NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< MeshLib::Element * > const &mesh_elements, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, ProviderOrOrder const &provider_or_order, ExtraCtorArgs &&... extra_ctor_args)

References createLocalAssemblers(), ProcessLib::LargeDeformation::detail::createLocalAssemblers(), and DBUG().

Referenced by createLocalAssemblers(), and ProcessLib::LargeDeformation::LargeDeformationProcess< DisplacementDim >::initializeConcreteProcess().