28 std::string
const& name,
30 std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
31 std::vector<ProcessVariable>
const& variables,
32 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
33 std::optional<ParameterLib::CoordinateSystem>
const&
34 local_coordinate_system,
35 unsigned const integration_order,
40 DBUG(
"Create SmallDeformationNonlocalProcess.");
53 DBUG(
"Associate displacement with process variable '{:s}'.",
54 per_process_variables.back().get().getName());
56 if (per_process_variables.back().get().getNumberOfGlobalComponents() !=
60 "Number of components of the process variable '{:s}' is different "
61 "from the displacement dimension: got {:d}, expected {:d}",
62 per_process_variables.back().get().getName(),
63 per_process_variables.back().get().getNumberOfGlobalComponents(),
66 std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>
68 process_variables.push_back(std::move(per_process_variables));
71 auto solid_constitutive_relations =
72 MaterialLib::Solids::createConstitutiveRelations<DisplacementDim>(
73 parameters, local_coordinate_system, config);
76 auto const& solid_density = ParameterLib::findParameter<double>(
79 "solid_density", parameters, 1, &mesh);
80 DBUG(
"Use '{:s}' as solid density parameter.", solid_density.name);
83 Eigen::Matrix<double, DisplacementDim, 1> specific_body_force;
85 std::vector<double>
const b =
88 "specific_body_force");
89 if (b.size() != DisplacementDim)
92 "The size of the specific body force vector does not match the "
93 "displacement dimension. Vector size is {:d}, displacement "
95 b.size(), DisplacementDim);
98 std::copy_n(b.data(), b.size(), specific_body_force.data());
102 const auto& reference_temperature =
105 "reference_temperature", std::numeric_limits<double>::quiet_NaN());
107 auto const internal_length =
112 materialIDs(mesh), std::move(solid_constitutive_relations),
113 solid_density, specific_body_force,
114 reference_temperature, internal_length * internal_length};
120 return std::make_unique<SmallDeformationNonlocalProcess<DisplacementDim>>(
121 std::move(name), mesh, std::move(jacobian_assembler), parameters,
122 integration_order, std::move(process_variables),
123 std::move(process_data), std::move(secondary_variables));