168 typedef float MultigridNumber;
170 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
176 Operator(std::shared_ptr<
Grid<dim> const> grid_in,
177 std::shared_ptr<dealii::Mapping<dim>
const> mapping_in,
181 std::shared_ptr<MaterialDescriptor const> material_descriptor_in,
183 std::string
const & field_in,
184 bool const setup_scalar_field_in,
185 MPI_Comm
const & mpi_comm_in);
202 setup(std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free,
209 initialize_dof_vector(VectorType & src)
const final;
215 initialize_dof_vector_scalar(VectorType & src)
const;
221 prescribe_initial_displacement(VectorType & displacement,
double const time)
const final;
224 prescribe_initial_velocity(VectorType & velocity,
double const time)
const final;
232 compute_initial_acceleration(VectorType & initial_acceleration,
233 VectorType
const & initial_displacement,
234 double const time)
const final;
237 evaluate_mass_operator(VectorType & dst, VectorType
const & src)
const final;
240 apply_add_damping_operator(VectorType & dst, VectorType
const & src)
const final;
248 evaluate_nonlinear_residual(VectorType & dst,
249 VectorType
const & src,
250 VectorType
const & const_vector,
252 double const time)
const;
255 set_solution_linearization(VectorType
const & vector)
const;
258 assemble_matrix_if_matrix_based()
const;
261 evaluate_elasticity_operator(VectorType & dst,
262 VectorType
const & src,
264 double const time)
const;
267 update_elasticity_operator(
double const factor,
double const time)
const;
270 apply_elasticity_operator(VectorType & dst, VectorType
const & src)
const;
277 std::tuple<unsigned int, unsigned int>
278 solve_nonlinear(VectorType & sol,
279 VectorType
const & const_vector,
280 double const scaling_factor_acceleration,
281 double const scaling_factor_velocity,
283 bool const update_preconditioner)
const final;
290 rhs(VectorType & dst,
double const time)
const final;
298 solve_linear(VectorType & sol,
299 VectorType
const & rhs,
300 double const scaling_factor_acceleration,
301 double const scaling_factor_velocity,
303 bool const update_preconditioner)
const final;
308 std::shared_ptr<dealii::MatrixFree<dim, Number>
const>
309 get_matrix_free()
const;
311 dealii::Mapping<dim>
const &
314 dealii::DoFHandler<dim>
const &
315 get_dof_handler()
const;
317 dealii::DoFHandler<dim>
const &
318 get_dof_handler_scalar()
const;
320 dealii::types::global_dof_index
321 get_number_of_dofs()
const;
324 std::shared_ptr<ContainerInterfaceData<1, dim, double>>
325 get_container_interface_data_neumann()
const;
327 std::shared_ptr<ContainerInterfaceData<1, dim, double>>
328 get_container_interface_data_dirichlet()
const;
332 get_dof_index()
const;
340 compute_displacement_magnitude(VectorType & dst_scalar_valued,
341 VectorType
const & src_vector_valued)
const;
345 compute_displacement_jacobian(VectorType & dst_scalar_valued,
346 VectorType
const & src_vector_valued)
const;
350 compute_max_principal_stress(VectorType & dst_scalar_valued,
351 VectorType
const & src_vector_valued)
const;
358 initialize_dof_handler_and_constraints();
361 get_dof_name()
const;
364 get_dof_name_periodicity_and_hanging_node_constraints()
const;
367 get_dof_name_scalar()
const;
370 get_quad_name()
const;
373 get_quad_gauss_lobatto_name()
const;
376 get_dof_index_periodicity_and_hanging_node_constraints()
const;
379 get_dof_index_scalar()
const;
382 get_quad_index()
const;
385 get_quad_index_gauss_lobatto()
const;
392 compute_scaling_factor_mass(
double const scaling_factor_acceleration,
393 double const scaling_factor_velocity)
const;
399 setup_coupling_boundary_conditions();
411 setup_calculators_for_derived_quantities();
417 setup_preconditioner();
428 std::shared_ptr<Grid<dim>
const> grid;
433 std::shared_ptr<dealii::Mapping<dim>
const> mapping;
435 std::shared_ptr<MultigridMappings<dim, Number>>
const multigrid_mappings;
440 std::shared_ptr<BoundaryDescriptor<dim>
const> boundary_descriptor;
441 std::shared_ptr<FieldFunctions<dim>
const> field_functions;
442 std::shared_ptr<MaterialDescriptor const> material_descriptor;
449 std::string
const field;
454 std::shared_ptr<dealii::FiniteElement<dim>> fe;
455 dealii::DoFHandler<dim> dof_handler;
457 bool setup_scalar_field;
458 std::shared_ptr<dealii::FiniteElement<dim>> fe_scalar;
459 std::shared_ptr<dealii::DoFHandler<dim>> dof_handler_scalar;
465 dealii::AffineConstraints<Number> affine_constraints;
480 dealii::AffineConstraints<Number> affine_constraints_periodicity_and_hanging_nodes;
484 dealii::AffineConstraints<Number> affine_constraints_periodicity_and_hanging_nodes_scalar;
486 std::string
const dof_index =
"dof";
487 std::string
const dof_index_periodicity_and_hanging_node_constraints =
488 "dof_periodicity_hanging_nodes";
489 std::string
const dof_index_scalar =
"dof_scalar";
491 std::string
const quad_index =
"quad";
492 std::string
const quad_index_gauss_lobatto =
"quad_gauss_lobatto";
497 std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free;
498 std::shared_ptr<MatrixFreeData<dim, Number>
const> matrix_free_data;
504 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>> interface_data_dirichlet_cached;
505 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>> interface_data_neumann_cached;
537 std::shared_ptr<NewtonSolver> newton_solver;
542 std::shared_ptr<PreconditionerBase<Number>> preconditioner;
544 std::shared_ptr<Krylov::SolverBase<VectorType>> linear_solver;
564 MPI_Comm
const mpi_comm;
569 dealii::ConditionalOStream pcout;