40 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
46 unsigned int const mapping_degree_q_cache,
47 dealii::Triangulation<dim>
const & triangulation,
48 std::shared_ptr<dealii::Function<dim>>
const mesh_deformation_function,
49 double const start_time)
51 mesh_deformation_function(mesh_deformation_function),
52 triangulation(triangulation)
54 update(start_time,
false, dealii::numbers::invalid_unsigned_int);
62 bool const print_solver_info,
63 types::time_step time_step_number)
override
65 (void)print_solver_info;
66 (void)time_step_number;
68 mesh_deformation_function->set_time(time);
70 this->do_initialize(triangulation, mesh_deformation_function);
80 do_initialize(dealii::Triangulation<dim>
const & triangulation,
81 std::shared_ptr<dealii::Function<dim>> displacement_function)
83 AssertThrow(dealii::MultithreadInfo::n_threads() == 1, dealii::ExcNotImplemented());
86 dealii::ExcMessage(
"Only implemented for hypercube elements."));
89 dealii::FE_Nothing<dim> dummy_fe;
92 dealii::QGaussLobatto<dim>(this->mapping_q_cache->get_degree() +
94 dealii::update_quadrature_points);
96 this->mapping_q_cache->initialize(
98 [&](
typename dealii::Triangulation<dim>::cell_iterator
const & cell)
99 -> std::vector<dealii::Point<dim>> {
100 fe_values.reinit(cell);
103 std::vector<dealii::Point<dim>> points_moved(fe_values.n_quadrature_points);
104 for(
unsigned int i = 0; i < fe_values.n_quadrature_points; ++i)
107 dealii::Point<dim>
const point =
108 fe_values.quadrature_point(this->hierarchic_to_lexicographic_numbering[i]);
109 dealii::Point<dim> displacement;
110 for(
unsigned int d = 0; d < dim; ++d)
111 displacement[d] = displacement_function->value(point, d);
113 points_moved[i] = point + displacement;
120 std::shared_ptr<dealii::Function<dim>> mesh_deformation_function;
122 dealii::Triangulation<dim>
const & triangulation;