18 #ifndef __deal2__mg_transfer_component_templates_h 19 #define __deal2__mg_transfer_component_templates_h 21 #include <deal.II/lac/sparse_matrix.h> 22 #include <deal.II/grid/tria_iterator.h> 23 #include <deal.II/fe/fe.h> 24 #include <deal.II/lac/constraint_matrix.h> 25 #include <deal.II/multigrid/mg_base.h> 26 #include <deal.II/dofs/dof_accessor.h> 27 #include <deal.II/multigrid/mg_tools.h> 28 #include <deal.II/multigrid/mg_transfer_component.h> 29 #include <deal.II/numerics/data_out.h> 41 template <
typename number>
42 template <
int dim,
typename number2,
int spacedim>
49 do_copy_to_mg (mg_dof_handler, dst, src.
block(target_component[selected_component]));
54 template <
typename number>
55 template <
int dim,
typename number2,
int spacedim>
62 do_copy_to_mg (mg_dof_handler, dst, src);
67 template <
typename number>
68 template <
int dim,
typename number2,
int spacedim>
76 do_copy_from_mg (mg_dof_handler,
77 dst.
block(target_component[selected_component]), src);
79 constraints->condense(dst);
84 template <
typename number>
85 template <
int dim,
typename number2,
int spacedim>
93 do_copy_from_mg (mg_dof_handler, dst, src);
104 const unsigned int n_blocks =
105 *std::max_element(target_component.begin(), target_component.end()) + 1;
106 std::vector<types::global_dof_index> dofs_per_block (n_blocks);
110 for (
unsigned int b=0; b<n_blocks; ++b)
111 tmp.
block(b).reinit(dofs_per_block[b]);
113 tmp.
block(target_component[selected_component]) = dst;
114 constraints->condense(tmp);
115 dst = tmp.
block(target_component[selected_component]);
121 template <
typename number>
122 template <
int dim,
typename number2,
int spacedim>
129 do_copy_from_mg_add (mg_dof_handler, dst, src);
134 template <
typename number>
135 template <
int dim,
typename number2,
int spacedim>
142 do_copy_from_mg_add (mg_dof_handler, dst, src);
147 template <
typename number>
148 template <
int dim,
class OutVector,
int spacedim>
161 typename DoFHandler<dim,spacedim>::active_cell_iterator
163 const typename DoFHandler<dim,spacedim>::active_cell_iterator
164 endc = mg_dof_handler.
end();
173 for (; level_cell != endc; ++level_cell)
175 const unsigned int level = level_cell->level();
176 typedef std::vector<std::pair<types::global_dof_index, unsigned int> >::const_iterator IT;
177 for (IT i=copy_to_and_from_indices[level].begin();
178 i != copy_to_and_from_indices[level].end(); ++i)
179 dst(i->first) = src[level](i->second);
184 template <
typename number>
185 template <
int dim,
class OutVector,
int spacedim>
195 std::vector<types::global_dof_index> global_dof_indices (dofs_per_cell);
196 std::vector<types::global_dof_index> level_dof_indices (dofs_per_cell);
198 typename DoFHandler<dim,spacedim>::active_cell_iterator
200 const typename DoFHandler<dim,spacedim>::active_cell_iterator
201 endc = mg_dof_handler.
end();
210 for (; level_cell != endc; ++level_cell)
212 const unsigned int level = level_cell->level();
213 typedef std::vector<std::pair<types::global_dof_index, unsigned int> >::const_iterator IT;
214 for (IT i=copy_to_and_from_indices[level].begin();
215 i != copy_to_and_from_indices[level].end(); ++i)
216 dst(i->first) += src[level](i->second);
221 template <
typename number>
230 DEAL_II_NAMESPACE_CLOSE
active_cell_iterator begin_active(const unsigned int level=0) const
std::size_t memory_consumption() const
cell_iterator end() const
void do_copy_from_mg(const DoFHandler< dim, spacedim > &mg_dof, OutVector &dst, const MGLevelObject< Vector< number > > &src) const
void reinit(const unsigned int num_blocks, const size_type block_size=0, const bool fast=false)
void copy_to_mg(const DoFHandler< dim, spacedim > &mg_dof, MGLevelObject< Vector< number > > &dst, const Vector< number2 > &src) const
std::size_t memory_consumption() const
const unsigned int dofs_per_cell
BlockType & block(const unsigned int i)
void do_copy_from_mg_add(const DoFHandler< dim, spacedim > &mg_dof, OutVector &dst, const MGLevelObject< Vector< number > > &src) const
void copy_from_mg_add(const DoFHandler< dim, spacedim > &mg_dof, Vector< number2 > &dst, const MGLevelObject< Vector< number > > &src) const
void copy_from_mg(const DoFHandler< dim, spacedim > &mg_dof, Vector< number2 > &dst, const MGLevelObject< Vector< number > > &src) const
const FiniteElement< dim, spacedim > & get_fe() const