18 #ifndef __deal2__mesh_worker_dof_info_h
19 #define __deal2__mesh_worker_dof_info_h
21 #include <deal.II/base/config.h>
22 #include <deal.II/base/quadrature_lib.h>
23 #include <deal.II/base/std_cxx1x/shared_ptr.h>
24 #include <deal.II/dofs/block_info.h>
25 #include <deal.II/fe/fe_values.h>
26 #include <deal.II/meshworker/local_results.h>
27 #include <deal.II/meshworker/vector_selector.h>
68 template<
int dim,
int spacedim = dim,
typename number =
double>
105 std::vector<types::global_dof_index> indices;
131 template <
class DHCellIterator>
132 void reinit(
const DHCellIterator &c);
137 template <
class DHCellIterator,
class DHFaceIterator>
138 void reinit(
const DHCellIterator &c,
139 const DHFaceIterator &f,
140 const unsigned int face_no);
146 template <
class DHCellIterator,
class DHFaceIterator>
147 void reinit(
const DHCellIterator &c,
148 const DHFaceIterator &f,
149 const unsigned int face_no,
150 const unsigned int subface_no);
156 template <
class DHFaceIterator>
157 void set_face (
const DHFaceIterator &f,
158 const unsigned int face_no);
164 template <
class DHFaceIterator>
166 const unsigned int face_no,
167 const unsigned int subface_no);
187 template <
class DHCellIterator>
218 template <
int dim,
class DOFINFO>
249 template <
class ASSEMBLER>
250 void assemble(ASSEMBLER &ass)
const;
287 template <
int dim,
int spacedim,
typename number>
290 std::vector<types::global_dof_index> aux(1);
291 aux[0] = dof_handler.
get_fe().dofs_per_cell;
292 aux_local_indices.reinit(aux);
296 template <
int dim,
int spacedim,
typename number>
297 template <
class DHCellIterator>
301 indices.resize(c->get_fe().dofs_per_cell);
302 if (block_info == 0 || block_info->local().size() == 0)
303 c->get_active_or_mg_dof_indices(indices);
306 indices_org.resize(c->get_fe().dofs_per_cell);
307 c->get_active_or_mg_dof_indices(indices_org);
313 template <
int dim,
int spacedim,
typename number>
314 template <
class DHCellIterator>
319 level_cell = c->is_level_cell();
322 face_number = deal_II_numbers::invalid_unsigned_int;
323 sub_number = deal_II_numbers::invalid_unsigned_int;
331 template<
int dim,
int spacedim,
typename number>
332 template <
class DHFaceIterator>
335 const DHFaceIterator &f,
336 const unsigned int face_no)
339 face_number = face_no;
340 sub_number = deal_II_numbers::invalid_unsigned_int;
344 template<
int dim,
int spacedim,
typename number>
345 template <
class DHCellIterator,
class DHFaceIterator>
348 const DHCellIterator &c,
349 const DHFaceIterator &f,
350 const unsigned int face_no)
355 level_cell = c->is_level_cell();
367 template<
int dim,
int spacedim,
typename number>
368 template <
class DHFaceIterator>
371 const DHFaceIterator &f,
372 const unsigned int face_no,
373 const unsigned int subface_no)
376 face_number = face_no;
377 sub_number = subface_no;
381 template<
int dim,
int spacedim,
typename number>
382 template <
class DHCellIterator,
class DHFaceIterator>
385 const DHCellIterator &c,
386 const DHFaceIterator &f,
387 const unsigned int face_no,
388 const unsigned int subface_no)
393 level_cell = c->is_level_cell();
396 set_subface(f, face_no, subface_no);
405 template<
int dim,
int spacedim,
typename number>
410 return block_info->local();
411 return aux_local_indices;
416 template <
int dim,
class DOFINFO>
422 for (
unsigned int i=0; i<GeometryInfo<dim>::faces_per_cell; ++i)
432 template <
int dim,
class DOFINFO>
438 for (
unsigned int i=0; i<GeometryInfo<dim>::faces_per_cell; ++i)
448 template <
int dim,
class DOFINFO>
452 for (
unsigned int i=0; i<GeometryInfo<dim>::faces_per_cell; ++i)
454 interior_face_available[i] =
false;
455 exterior_face_available[i] =
false;
460 template <
int dim,
class DOFINFO>
461 template <
class ASSEMBLER>
465 assembler.assemble(cell);
466 for (
unsigned int i=0; i<GeometryInfo<dim>::faces_per_cell; ++i)
469 if (interior_face_available[i])
474 if (exterior_face_available[i])
475 assembler.assemble(interior[i], exterior[i]);
477 assembler.assemble(interior[i]);
483 DEAL_II_NAMESPACE_CLOSE
std::size_t memory_consumption() const
void get_indices(const DHCellIterator &c)
Fill index vector with active indices.
Triangulation< dim, spacedim >::cell_iterator cell
The current cell.
std::vector< types::global_dof_index > indices_org
Auxiliary vector.
Iterator points to a valid object.
Auxiliary class aiding in the handling of block structures like in BlockVector or FESystem...
void set_block_indices()
Set up local block indices.
bool exterior_face_available[GeometryInfo< dim >::faces_per_cell]
BlockIndices aux_local_indices
void set_subface(const DHFaceIterator &f, const unsigned int face_no, const unsigned int subface_no)
bool interior_face_available[GeometryInfo< dim >::faces_per_cell]
void assemble(ASSEMBLER &ass) const
SmartPointer< const BlockInfo, DoFInfo< dim, spacedim > > block_info
The block structure of the system.
DoFInfoBox(const DOFINFO &seed)
std::vector< std::vector< types::global_dof_index > > indices_by_block
void reinit(const BlockIndices &local_sizes)
DOFINFO interior[GeometryInfo< dim >::faces_per_cell]
A small class collecting the different BlockIndices involved in global, multilevel and local computat...
DOFINFO exterior[GeometryInfo< dim >::faces_per_cell]
Triangulation< dim, spacedim >::face_iterator face
The current face.
const FiniteElement< dim, spacedim > & get_fe() const
void reinit(const DHCellIterator &c)
void set_face(const DHFaceIterator &f, const unsigned int face_no)