41 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
47 unsigned int const mapping_degree_q_cache,
48 dealii::Triangulation<dim>
const & triangulation,
49 std::shared_ptr<dealii::Function<dim>>
const mesh_deformation_function,
50 double const start_time)
52 mesh_deformation_function(mesh_deformation_function),
53 triangulation(triangulation)
55 update(start_time,
false, dealii::numbers::invalid_unsigned_int);
63 bool const print_solver_info,
64 types::time_step time_step_number)
override
66 (void)print_solver_info;
67 (void)time_step_number;
69 mesh_deformation_function->set_time(time);
71 this->do_initialize(triangulation, mesh_deformation_function);
81 do_initialize(dealii::Triangulation<dim>
const & triangulation,
82 std::shared_ptr<dealii::Function<dim>> displacement_function)
84 AssertThrow(dealii::MultithreadInfo::n_threads() == 1, dealii::ExcNotImplemented());
87 dealii::ExcMessage(
"Only implemented for hypercube elements."));
90 dealii::FE_Nothing<dim> dummy_fe;
93 dealii::QGaussLobatto<dim>(this->mapping_q_cache->get_degree() +
95 dealii::update_quadrature_points);
97 this->mapping_q_cache->initialize(
99 [&](
typename dealii::Triangulation<dim>::cell_iterator
const & cell)
100 -> std::vector<dealii::Point<dim>> {
101 fe_values.reinit(cell);
104 std::vector<dealii::Point<dim>> points_moved(fe_values.n_quadrature_points);
105 for(
unsigned int i = 0; i < fe_values.n_quadrature_points; ++i)
108 dealii::Point<dim>
const point =
109 fe_values.quadrature_point(this->hierarchic_to_lexicographic_numbering[i]);
110 dealii::Point<dim> displacement;
111 for(
unsigned int d = 0; d < dim; ++d)
112 displacement[d] = displacement_function->value(point, d);
114 points_moved[i] = point + displacement;
121 std::shared_ptr<dealii::Function<dim>> mesh_deformation_function;
123 dealii::Triangulation<dim>
const & triangulation;