24 #ifndef ELEMENTDATACONTAINER_H_
25 #define ELEMENTDATACONTAINER_H_
35 #include <deal.II/dofs/dof_handler.h>
37 #include <deal.II/hp/dof_handler.h>
39 using namespace dealii;
57 template<
template<
int,
int>
class DH,
typename VECTOR,
int dim>
65 "Dummy class, this constructor should never get called.",
66 "ElementDataContainer<dealii::DoFHandler<dim> , VECTOR, dim>::ElementDataContainer"));
80 template<
typename VECTOR,
int dim>
106 template<
template<
int,
int>
class FE,
typename SPARSITYPATTERN,
int dopedim,
int dealdim>
108 UpdateFlags update_flags,
110 dopedim, dealdim>& sth,
112 typename dealii::DoFHandler<dim>::active_cell_iterator>& element,
113 const std::map<std::string,
const Vector<double>*> ¶m_values,
114 const std::map<std::string, const VECTOR*> &domain_values) :
115 edcinternal::ElementDataContainerInternal<VECTOR, dim>(param_values,
116 domain_values), element_(element), state_fe_values_(
117 sth.GetMapping(), (sth.GetFESystem(
"state")), quad,
118 update_flags), control_fe_values_(sth.GetMapping(),
119 (sth.GetFESystem(
"control")), quad, update_flags)
121 state_index_ = sth.GetStateIndex();
122 if (state_index_ == 1)
126 n_q_points_per_element_ = quad.size();
127 n_dofs_per_element_ = element[0]->get_fe().dofs_per_cell;
148 template<
template<
int,
int>
class FE,
typename SPARSITYPATTERN>
150 UpdateFlags update_flags,
154 typename dealii::DoFHandler<dim>::active_cell_iterator>& element,
155 const std::map<std::string,
const Vector<double>*> ¶m_values,
156 const std::map<std::string, const VECTOR*> &domain_values) :
157 edcinternal::ElementDataContainerInternal<VECTOR, dim>(param_values,
158 domain_values), element_(element), state_fe_values_(
159 sth.GetMapping(), (sth.GetFESystem(
"state")), quad,
160 update_flags), control_fe_values_(sth.GetMapping(),
161 (sth.GetFESystem(
"state")), quad, update_flags)
163 state_index_ = sth.GetStateIndex();
164 control_index_ = element.size();
165 n_q_points_per_element_ = quad.size();
166 n_dofs_per_element_ = element[0]->get_fe().dofs_per_cell;
185 GetNDoFsPerElement()
const;
189 GetMaterialId()
const;
191 GetNbrMaterialId(
unsigned int face)
const;
193 GetFaceBoundaryIndicator(
unsigned int face)
const;
195 GetIsAtBoundary()
const;
197 GetElementDiameter()
const;
201 GetFEValuesState()
const;
203 GetFEValuesControl()
const;
209 GetStateIndex()
const;
211 GetControlIndex()
const;
215 unsigned int state_index_;
216 unsigned int control_index_;
218 const std::vector<typename dealii::DoFHandler<dim>::active_cell_iterator> & element_;
222 unsigned int n_q_points_per_element_;
223 unsigned int n_dofs_per_element_;
396 template<
typename VECTOR,
int dim>
422 template<
template<
int,
int>
class FE,
typename SPARSITYPATTERN,
int dopedim,
int dealdim>
424 UpdateFlags update_flags,
426 VECTOR, dopedim, dealdim>& sth,
429 const std::map<std::string,
const Vector<double>*> ¶m_values,
430 const std::map<std::string, const VECTOR*> &domain_values) :
431 edcinternal::ElementDataContainerInternal<VECTOR, dim>(param_values,
432 domain_values), element_(element), state_hp_fe_values_(
433 sth.GetMapping(), (sth.GetFESystem(
"state")), q_collection,
434 update_flags), control_hp_fe_values_(sth.GetMapping(),
435 (sth.GetFESystem(
"control")), q_collection, update_flags), q_collection_(
438 state_index_ = sth.GetStateIndex();
439 if (state_index_ == 1)
462 template<
template<
int,
int>
class FE,
typename SPARSITYPATTERN>
464 UpdateFlags update_flags,
469 const std::map<std::string,
const Vector<double>*> ¶m_values,
470 const std::map<std::string, const VECTOR*> &domain_values) :
471 edcinternal::ElementDataContainerInternal<VECTOR, dim>(param_values,
472 domain_values), element_(element), state_hp_fe_values_(
473 sth.GetMapping(), (sth.GetFESystem(
"state")), q_collection,
474 update_flags), control_hp_fe_values_(sth.GetMapping(),
475 (sth.GetFESystem(
"state")), q_collection, update_flags), q_collection_(
478 state_index_ = sth.GetStateIndex();
479 control_index_ = element.size();
499 GetNDoFsPerElement()
const;
503 GetMaterialId()
const;
505 GetNbrMaterialId(
unsigned int face)
const;
507 GetFaceBoundaryIndicator(
unsigned int face)
const;
509 GetIsAtBoundary()
const;
511 GetElementDiameter()
const;
516 GetFEValuesState()
const;
518 GetFEValuesControl()
const;
522 GetStateIndex()
const;
524 GetControlIndex()
const;
525 const std::map<std::string, const VECTOR*> &
526 GetDomainValues()
const;
534 std::vector<double>& values)
const;
541 std::vector<Vector<double> >& values)
const;
547 template<
int targetdim>
551 std::vector<Tensor<1, targetdim> >& values)
const;
556 template<
int targetdim>
560 std::vector<std::vector<Tensor<1, targetdim> > >& values)
const;
564 unsigned int state_index_;
565 unsigned int control_index_;
568 typename dealii::hp::DoFHandler<dim>::active_cell_iterator> & element_;
572 const hp::QCollection<dim>& q_collection_;
579 template<
typename VECTOR,
int dim>
583 state_fe_values_.reinit(element_[this->GetStateIndex()]);
585 if (this->GetControlIndex() < element_.size())
586 control_fe_values_.reinit(element_[this->GetControlIndex()]);
590 template<
typename VECTOR,
int dim>
594 return n_dofs_per_element_;
598 template<
typename VECTOR,
int dim>
602 return n_q_points_per_element_;
606 template<
typename VECTOR,
int dim>
610 return element_[0]->material_id();
614 template<
typename VECTOR,
int dim>
617 unsigned int face)
const
619 if (element_[0]->neighbor_index(face) != -1)
620 return element_[0]->neighbor(face)->material_id();
623 std::stringstream out;
624 out <<
"There is no neighbor with number " << face;
626 "ElementDataContainer::GetNbrMaterialId");
631 template<
typename VECTOR,
int dim>
634 unsigned int face)
const
636 return element_[0]->face(face)->boundary_indicator();
640 template<
typename VECTOR,
int dim>
644 return element_[0]->at_boundary();
647 template<
typename VECTOR,
int dim>
651 return element_[0]->diameter();
654 template<
typename VECTOR,
int dim>
658 return element_[0]->center();
662 template<
typename VECTOR,
int dim>
666 return state_fe_values_;
670 template<
typename VECTOR,
int dim>
674 return control_fe_values_;
679 template<
typename VECTOR,
int dim>
688 template<
typename VECTOR,
int dim>
690 ElementDataContainer<dealii::DoFHandler, VECTOR, dim>::GetControlIndex()
const
692 return control_index_;
834 template<
typename VECTOR,
int dim>
838 state_hp_fe_values_.reinit(element_[this->GetStateIndex()]);
840 if (this->GetControlIndex() < element_.size())
841 control_hp_fe_values_.reinit(element_[this->GetControlIndex()]);
845 template<
typename VECTOR,
int dim>
849 return element_[0]->get_fe().dofs_per_cell;
852 template<
typename VECTOR,
int dim>
856 return (q_collection_[element_[0]->active_fe_index()]).size();
860 template<
typename VECTOR,
int dim>
864 return element_[0]->material_id();
868 template<
typename VECTOR,
int dim>
871 unsigned int face)
const
873 if (element_[0]->neighbor_index(face) != -1)
874 return element_[0]->neighbor(face)->material_id();
877 std::stringstream out;
878 out <<
"There is no neighbor with number " << face;
880 "HpElementDataContainer::GetNbrMaterialId");
885 template<
typename VECTOR,
int dim>
888 unsigned int face)
const
890 return element_[0]->face(face)->boundary_indicator();
895 template<
typename VECTOR,
int dim>
899 return element_[0]->at_boundary();
904 template<
typename VECTOR,
int dim>
908 return element_[0]->diameter();
912 template<
typename VECTOR,
int dim>
916 return element_[0]->center();
920 template<
typename VECTOR,
int dim>
927 template<
typename VECTOR,
int dim>
935 template<
typename VECTOR,
int dim>
942 template<
typename VECTOR,
int dim>
944 ElementDataContainer<dealii::hp::DoFHandler, VECTOR, dim>::GetControlIndex()
const
946 return control_index_;
ElementDataContainer()
Definition: elementdatacontainer.h:62
ElementDataContainer(const hp::QCollection< dim > &q_collection, UpdateFlags update_flags, SpaceTimeHandler< FE, dealii::hp::DoFHandler, SPARSITYPATTERN, VECTOR, dopedim, dealdim > &sth, const std::vector< typename DOpEWrapper::DoFHandler< dim, dealii::hp::DoFHandler >::active_cell_iterator > &element, const std::map< std::string, const Vector< double > * > ¶m_values, const std::map< std::string, const VECTOR * > &domain_values)
Definition: elementdatacontainer.h:423
Definition: elementdatacontainer.h:58
~ElementDataContainer()
Definition: elementdatacontainer.h:168
ElementDataContainer(const Quadrature< dim > &quad, UpdateFlags update_flags, StateSpaceTimeHandler< FE, dealii::DoFHandler, SPARSITYPATTERN, VECTOR, dim > &sth, const std::vector< typename dealii::DoFHandler< dim >::active_cell_iterator > &element, const std::map< std::string, const Vector< double > * > ¶m_values, const std::map< std::string, const VECTOR * > &domain_values)
Definition: elementdatacontainer.h:149
ElementDataContainer(const Quadrature< dim > &quad, UpdateFlags update_flags, SpaceTimeHandler< FE, dealii::DoFHandler, SPARSITYPATTERN, VECTOR, dopedim, dealdim > &sth, const std::vector< typename dealii::DoFHandler< dim >::active_cell_iterator > &element, const std::map< std::string, const Vector< double > * > ¶m_values, const std::map< std::string, const VECTOR * > &domain_values)
Definition: elementdatacontainer.h:107
Definition: elementdatacontainer_internal.h:46
Definition: dofhandler_wrapper.h:51
Definition: statespacetimehandler.h:59
~ElementDataContainer()
Definition: elementdatacontainer.h:481
Definition: spacetimehandler.h:71
ElementDataContainer(const hp::QCollection< dim > &q_collection, UpdateFlags update_flags, StateSpaceTimeHandler< FE, dealii::hp::DoFHandler, SPARSITYPATTERN, VECTOR, dim > &sth, const std::vector< typename DOpEWrapper::DoFHandler< dim, dealii::hp::DoFHandler >::active_cell_iterator > &element, const std::map< std::string, const Vector< double > * > ¶m_values, const std::map< std::string, const VECTOR * > &domain_values)
Definition: elementdatacontainer.h:463
Definition: fevalues_wrapper.h:43
Definition: dopeexception.h:35
Definition: fevalues_wrapper.h:186