17 #ifndef __deal2__fe_collection_h
18 #define __deal2__fe_collection_h
20 #include <deal.II/base/config.h>
21 #include <deal.II/base/std_cxx1x/shared_ptr.h>
22 #include <deal.II/fe/fe.h>
23 #include <deal.II/fe/fe_values_extractors.h>
24 #include <deal.II/fe/component_mask.h>
52 template <
int dim,
int spacedim=dim>
80 FECollection (
const FECollection<dim,spacedim> &fe_collection);
118 unsigned int size ()
const;
441 std::vector<std_cxx1x::shared_ptr<const FiniteElement<dim,spacedim> > >
finite_elements;
448 template <
int dim,
int spacedim>
453 return finite_elements.size();
457 template <
int dim,
int spacedim>
462 Assert (finite_elements.size () > 0, ExcNoFiniteElements());
472 return finite_elements[0]->n_components ();
476 template <
int dim,
int spacedim>
481 Assert (index < finite_elements.size(),
483 return *finite_elements[index];
488 template <
int dim,
int spacedim>
492 Assert (finite_elements.size() > 0, ExcNoFiniteElements());
494 unsigned int max = 0;
495 for (
unsigned int i=0; i<finite_elements.size(); ++i)
496 if (finite_elements[i]->dofs_per_vertex > max)
497 max = finite_elements[i]->dofs_per_vertex;
504 template <
int dim,
int spacedim>
508 Assert (finite_elements.size() > 0, ExcNoFiniteElements());
510 unsigned int max = 0;
511 for (
unsigned int i=0; i<finite_elements.size(); ++i)
512 if (finite_elements[i]->dofs_per_line > max)
513 max = finite_elements[i]->dofs_per_line;
520 template <
int dim,
int spacedim>
524 Assert (finite_elements.size() > 0, ExcNoFiniteElements());
526 unsigned int max = 0;
527 for (
unsigned int i=0; i<finite_elements.size(); ++i)
528 if (finite_elements[i]->dofs_per_quad > max)
529 max = finite_elements[i]->dofs_per_quad;
536 template <
int dim,
int spacedim>
540 Assert (finite_elements.size() > 0, ExcNoFiniteElements());
542 unsigned int max = 0;
543 for (
unsigned int i=0; i<finite_elements.size(); ++i)
544 if (finite_elements[i]->dofs_per_hex > max)
545 max = finite_elements[i]->dofs_per_hex;
552 template <
int dim,
int spacedim>
556 Assert (finite_elements.size() > 0, ExcNoFiniteElements());
558 unsigned int max = 0;
559 for (
unsigned int i=0; i<finite_elements.size(); ++i)
560 if (finite_elements[i]->dofs_per_face > max)
561 max = finite_elements[i]->dofs_per_face;
568 template <
int dim,
int spacedim>
572 Assert (finite_elements.size() > 0, ExcNoFiniteElements());
574 unsigned int max = 0;
575 for (
unsigned int i=0; i<finite_elements.size(); ++i)
576 if (finite_elements[i]->dofs_per_cell > max)
577 max = finite_elements[i]->dofs_per_cell;
583 template <
int dim,
int spacedim>
587 Assert (finite_elements.size() > 0, ExcNoFiniteElements());
589 bool hp_constraints =
true;
590 for (
unsigned int i=0; i<finite_elements.size(); ++i)
591 hp_constraints = hp_constraints &&
592 finite_elements[i]->hp_constraints_are_implemented();
594 return hp_constraints;
600 DEAL_II_NAMESPACE_CLOSE
unsigned int max_dofs_per_hex() const
unsigned int max_dofs_per_line() const
bool hp_constraints_are_implemented() const
std::vector< std_cxx1x::shared_ptr< const FiniteElement< dim, spacedim > > > finite_elements
BlockMask block_mask(const FEValuesExtractors::Scalar &scalar) const
std::size_t memory_consumption() const
unsigned int max_dofs_per_cell() const
DeclException0(ExcNoFiniteElements)
#define Assert(cond, exc)
unsigned int n_blocks() const
::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
void push_back(const FiniteElement< dim, spacedim > &new_fe)
unsigned int max_dofs_per_face() const
ComponentMask component_mask(const FEValuesExtractors::Scalar &scalar) const
const FiniteElement< dim, spacedim > & operator[](const unsigned int index) const
unsigned int n_components() const
unsigned int size() const
unsigned int max_dofs_per_quad() const
unsigned int max_dofs_per_vertex() const