113 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
119 : dealii::Subscriptor(), pde_operator(
nullptr), scaling_factor_mass(0.0), time(0.0)
126 this->pde_operator = &pde_operator;
134 set_solution_linearization(VectorType
const & solution_linearization)
const
136 pde_operator->set_solution_linearization(solution_linearization);
140 update(
double const scaling_factor_mass,
double const time)
142 this->scaling_factor_mass = scaling_factor_mass;
151 vmult(VectorType & dst, VectorType
const & src)
const
153 pde_operator->apply_linearized_operator(dst, src, scaling_factor_mass, time);
159 double scaling_factor_mass;
167 typedef float MultigridNumber;
169 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
176 std::shared_ptr<dealii::Mapping<dim>
const> mapping,
180 std::shared_ptr<MaterialDescriptor const> material_descriptor,
182 std::string
const & field,
183 MPI_Comm
const & mpi_comm);
200 setup(std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free,
207 initialize_dof_vector(VectorType & src)
const final;
213 prescribe_initial_displacement(VectorType & displacement,
double const time)
const final;
216 prescribe_initial_velocity(VectorType & velocity,
double const time)
const final;
224 compute_initial_acceleration(VectorType & initial_acceleration,
225 VectorType
const & initial_displacement,
226 double const time)
const final;
229 evaluate_mass_operator(VectorType & dst, VectorType
const & src)
const final;
232 apply_add_damping_operator(VectorType & dst, VectorType
const & src)
const final;
240 evaluate_nonlinear_residual(VectorType & dst,
241 VectorType
const & src,
242 VectorType
const & const_vector,
244 double const time)
const;
247 set_solution_linearization(VectorType
const & vector)
const;
250 apply_linearized_operator(VectorType & dst,
251 VectorType
const & src,
253 double const time)
const;
256 evaluate_elasticity_operator(VectorType & dst,
257 VectorType
const & src,
259 double const time)
const;
262 apply_elasticity_operator(VectorType & dst,
263 VectorType
const & src,
264 VectorType
const & linearization,
266 double const time)
const;
273 std::tuple<unsigned int, unsigned int>
274 solve_nonlinear(VectorType & sol,
275 VectorType
const & const_vector,
276 double const scaling_factor_acceleration,
277 double const scaling_factor_velocity,
279 bool const update_preconditioner)
const final;
286 rhs(VectorType & dst,
double const time)
const final;
294 solve_linear(VectorType & sol,
295 VectorType
const & rhs,
296 double const scaling_factor_acceleration,
297 double const scaling_factor_velocity,
299 bool const update_preconditioner)
const final;
304 std::shared_ptr<dealii::MatrixFree<dim, Number>
const>
305 get_matrix_free()
const;
307 dealii::Mapping<dim>
const &
310 dealii::DoFHandler<dim>
const &
311 get_dof_handler()
const;
313 dealii::types::global_dof_index
314 get_number_of_dofs()
const;
317 std::shared_ptr<ContainerInterfaceData<1, dim, double>>
318 get_container_interface_data_neumann()
const;
320 std::shared_ptr<ContainerInterfaceData<1, dim, double>>
321 get_container_interface_data_dirichlet()
const;
325 get_dof_index()
const;
332 initialize_dof_handler_and_constraints();
335 get_dof_name()
const;
338 get_dof_name_periodicity_and_hanging_node_constraints()
const;
341 get_quad_name()
const;
344 get_quad_gauss_lobatto_name()
const;
347 get_dof_index_periodicity_and_hanging_node_constraints()
const;
350 get_quad_index()
const;
353 get_quad_index_gauss_lobatto()
const;
360 compute_scaling_factor_mass(
double const scaling_factor_acceleration,
361 double const scaling_factor_velocity)
const;
367 setup_coupling_boundary_conditions();
379 setup_preconditioner();
390 std::shared_ptr<Grid<dim>
const> grid;
395 std::shared_ptr<dealii::Mapping<dim>
const> mapping;
397 std::shared_ptr<MultigridMappings<dim, Number>>
const multigrid_mappings;
402 std::shared_ptr<BoundaryDescriptor<dim>
const> boundary_descriptor;
403 std::shared_ptr<FieldFunctions<dim>
const> field_functions;
404 std::shared_ptr<MaterialDescriptor const> material_descriptor;
411 std::string
const field;
416 std::shared_ptr<dealii::FiniteElement<dim>> fe;
417 dealii::DoFHandler<dim> dof_handler;
423 dealii::AffineConstraints<Number> affine_constraints;
438 dealii::AffineConstraints<Number> affine_constraints_periodicity_and_hanging_nodes;
440 std::string
const dof_index =
"dof";
441 std::string
const dof_index_periodicity_and_handing_node_constraints =
442 "dof_periodicity_hanging_nodes";
444 std::string
const quad_index =
"quad";
445 std::string
const quad_index_gauss_lobatto =
"quad_gauss_lobatto";
450 std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free;
451 std::shared_ptr<MatrixFreeData<dim, Number>
const> matrix_free_data;
457 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>> interface_data_dirichlet_cached;
458 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>> interface_data_neumann_cached;
490 std::shared_ptr<NewtonSolver> newton_solver;
495 std::shared_ptr<PreconditionerBase<Number>> preconditioner;
497 std::shared_ptr<Krylov::SolverBase<VectorType>> linear_solver;
500 std::shared_ptr<PreconditionerBase<Number>> mass_preconditioner;
501 std::shared_ptr<Krylov::SolverBase<VectorType>> mass_solver;
506 MPI_Comm
const mpi_comm;
511 dealii::ConditionalOStream pcout;