110class LinearizedOperator :
public dealii::Subscriptor
113 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
119 : dealii::Subscriptor(), pde_operator(
nullptr), scaling_factor_mass(0.0), time(0.0)
124 initialize(PDEOperator
const & pde_operator)
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;
145 pde_operator->update_elasticity_operator(scaling_factor_mass, time);
153 vmult(VectorType & dst, VectorType
const & src)
const
155 pde_operator->apply_linearized_operator(dst, src);
159 PDEOperator
const * pde_operator;
161 double scaling_factor_mass;
169 typedef float MultigridNumber;
171 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
177 Operator(std::shared_ptr<
Grid<dim> const> grid,
178 std::shared_ptr<dealii::Mapping<dim>
const> mapping,
182 std::shared_ptr<MaterialDescriptor const> material_descriptor,
184 std::string
const & field,
185 MPI_Comm
const & mpi_comm);
202 setup(std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free,
209 initialize_dof_vector(VectorType & src)
const final;
215 prescribe_initial_displacement(VectorType & displacement,
double const time)
const final;
218 prescribe_initial_velocity(VectorType & velocity,
double const time)
const final;
226 compute_initial_acceleration(VectorType & initial_acceleration,
227 VectorType
const & initial_displacement,
228 double const time)
const final;
231 evaluate_mass_operator(VectorType & dst, VectorType
const & src)
const final;
234 apply_add_damping_operator(VectorType & dst, VectorType
const & src)
const final;
242 evaluate_nonlinear_residual(VectorType & dst,
243 VectorType
const & src,
244 VectorType
const & const_vector,
246 double const time)
const;
249 set_solution_linearization(VectorType
const & vector)
const;
252 assemble_matrix_if_necessary_for_linear_elasticity_operator()
const;
255 evaluate_elasticity_operator(VectorType & dst,
256 VectorType
const & src,
258 double const time)
const;
261 update_elasticity_operator(
double const factor,
double const time)
const;
264 apply_elasticity_operator(VectorType & dst, VectorType
const & src)
const;
271 std::tuple<unsigned int, unsigned int>
272 solve_nonlinear(VectorType & sol,
273 VectorType
const & const_vector,
274 double const scaling_factor_acceleration,
275 double const scaling_factor_velocity,
277 bool const update_preconditioner)
const final;
284 rhs(VectorType & dst,
double const time)
const final;
292 solve_linear(VectorType & sol,
293 VectorType
const & rhs,
294 double const scaling_factor_acceleration,
295 double const scaling_factor_velocity,
297 bool const update_preconditioner)
const final;
302 std::shared_ptr<dealii::MatrixFree<dim, Number>
const>
303 get_matrix_free()
const;
305 dealii::Mapping<dim>
const &
308 dealii::DoFHandler<dim>
const &
309 get_dof_handler()
const;
311 dealii::types::global_dof_index
312 get_number_of_dofs()
const;
315 std::shared_ptr<ContainerInterfaceData<1, dim, double>>
316 get_container_interface_data_neumann()
const;
318 std::shared_ptr<ContainerInterfaceData<1, dim, double>>
319 get_container_interface_data_dirichlet()
const;
323 get_dof_index()
const;
330 initialize_dof_handler_and_constraints();
333 get_dof_name()
const;
336 get_dof_name_periodicity_and_hanging_node_constraints()
const;
339 get_quad_name()
const;
342 get_quad_gauss_lobatto_name()
const;
345 get_dof_index_periodicity_and_hanging_node_constraints()
const;
348 get_quad_index()
const;
351 get_quad_index_gauss_lobatto()
const;
358 compute_scaling_factor_mass(
double const scaling_factor_acceleration,
359 double const scaling_factor_velocity)
const;
365 setup_coupling_boundary_conditions();
377 setup_preconditioner();
388 std::shared_ptr<Grid<dim>
const> grid;
393 std::shared_ptr<dealii::Mapping<dim>
const> mapping;
395 std::shared_ptr<MultigridMappings<dim, Number>>
const multigrid_mappings;
400 std::shared_ptr<BoundaryDescriptor<dim>
const> boundary_descriptor;
401 std::shared_ptr<FieldFunctions<dim>
const> field_functions;
402 std::shared_ptr<MaterialDescriptor const> material_descriptor;
409 std::string
const field;
414 std::shared_ptr<dealii::FiniteElement<dim>> fe;
415 dealii::DoFHandler<dim> dof_handler;
421 dealii::AffineConstraints<Number> affine_constraints;
436 dealii::AffineConstraints<Number> affine_constraints_periodicity_and_hanging_nodes;
438 std::string
const dof_index =
"dof";
439 std::string
const dof_index_periodicity_and_handing_node_constraints =
440 "dof_periodicity_hanging_nodes";
442 std::string
const quad_index =
"quad";
443 std::string
const quad_index_gauss_lobatto =
"quad_gauss_lobatto";
448 std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free;
449 std::shared_ptr<MatrixFreeData<dim, Number>
const> matrix_free_data;
455 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>> interface_data_dirichlet_cached;
456 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>> interface_data_neumann_cached;
488 std::shared_ptr<NewtonSolver> newton_solver;
493 std::shared_ptr<PreconditionerBase<Number>> preconditioner;
495 std::shared_ptr<Krylov::SolverBase<VectorType>> linear_solver;
498 std::shared_ptr<PreconditionerBase<Number>> mass_preconditioner;
499 std::shared_ptr<Krylov::SolverBase<VectorType>> mass_solver;
504 MPI_Comm
const mpi_comm;
509 dealii::ConditionalOStream pcout;