42 dof_handler = &dof_handler_in;
46 prepare_coarsening_and_refinement(std::vector<VectorType *> & vectors)
51 vectors_old_grid.resize(vectors.size());
52 std::vector<VectorType const *> vectors_old_grid_ptr(vectors.size());
53 for(
unsigned int i = 0; i < vectors.size(); ++i)
55 vectors[i]->update_ghost_values();
57 if(is_parallel_distributed_triangulation())
59 vectors_old_grid_ptr[i] = vectors[i];
63 VectorType
const & vector = *vectors[i];
64 dealii::IndexSet indices(vector.size());
65 indices.add_range(0, vector.size());
66 vectors_old_grid[i].reinit(vector.locally_owned_elements(),
68 vector.get_mpi_communicator());
69 vectors_old_grid[i].copy_locally_owned_data_from(vector);
70 vectors_old_grid[i].update_ghost_values();
75 if(is_parallel_distributed_triangulation())
77 pd_solution_transfer =
78 std::make_shared<dealii::parallel::distributed::SolutionTransfer<dim, VectorType>>(
81 pd_solution_transfer->prepare_for_coarsening_and_refinement(vectors_old_grid_ptr);
85 solution_transfer = std::make_shared<dealii::SolutionTransfer<dim, VectorType>>(*dof_handler);
86 solution_transfer->prepare_for_coarsening_and_refinement(vectors_old_grid);
91 interpolate_after_coarsening_and_refinement(std::vector<VectorType *> & vectors)
96 if(is_parallel_distributed_triangulation())
98 pd_solution_transfer->interpolate(vectors);
103 std::vector<VectorType> vectors_new_grid(vectors.size());
104 for(
unsigned int i = 0; i < vectors.size(); ++i)
106 VectorType
const & vector = *vectors[i];
107 dealii::IndexSet indices(vector.size());
108 indices.add_range(0, vector.size());
109 vectors_new_grid[i].reinit(vector.locally_owned_elements(),
111 vector.get_mpi_communicator());
114 solution_transfer->interpolate(vectors_old_grid, vectors_new_grid);
117 for(
unsigned int i = 0; i < vectors.size(); ++i)
119 vectors[i]->copy_locally_owned_data_from(vectors_new_grid[i]);
126 vectors_old_grid.clear();
131 is_parallel_distributed_triangulation()
const
133 return (
dynamic_cast<dealii::parallel::distributed::Triangulation<dim>
const *
>(
134 &dof_handler->get_triangulation()));
137 std::vector<VectorType> vectors_old_grid;
139 std::shared_ptr<dealii::SolutionTransfer<dim, VectorType>> solution_transfer;
140 std::shared_ptr<dealii::parallel::distributed::SolutionTransfer<dim, VectorType>>
141 pd_solution_transfer;
143 dealii::SmartPointer<dealii::DoFHandler<dim>
const> dof_handler;