17 #ifndef dealii__mesh_worker_integration_info_h 18 #define dealii__mesh_worker_integration_info_h 20 #include <deal.II/base/config.h> 21 #include <deal.II/base/quadrature_lib.h> 22 #include <deal.II/base/std_cxx11/shared_ptr.h> 23 #include <deal.II/dofs/block_info.h> 24 #include <deal.II/fe/fe_values.h> 25 #include <deal.II/meshworker/local_results.h> 26 #include <deal.II/meshworker/dof_info.h> 27 #include <deal.II/meshworker/vector_selector.h> 29 DEAL_II_NAMESPACE_OPEN
72 template<
int dim,
int spacedim = dim>
77 std::vector<std_cxx11::shared_ptr<FEValuesBase<dim, spacedim> > >
fevalv;
79 static const unsigned int dimension = dim;
80 static const unsigned int space_dimension = spacedim;
110 template <
class FEVALUES>
158 std::vector<std::vector<std::vector<double> > >
values;
168 std::vector<std::vector<std::vector<Tensor<1,dim> > > >
gradients;
178 std::vector<std::vector<std::vector<Tensor<2,dim> > > >
hessians;
183 template <
typename number>
190 template<
typename number>
197 std_cxx11::shared_ptr<VectorDataBase<dim, spacedim> >
global_data;
215 template <
typename TYPE>
217 std::vector<std::vector<std::vector<TYPE> > > &data,
219 bool split_fevalues)
const;
280 template <
int dim,
int spacedim=dim>
313 template <
typename VectorType>
317 const VectorType &dummy,
326 template <
typename VectorType>
347 void initialize_update_flags(
bool neighbor_geometry =
false);
353 void add_update_flags_all (
const UpdateFlags flags);
358 void add_update_flags_cell(
const UpdateFlags flags);
363 void add_update_flags_boundary(
const UpdateFlags flags);
368 void add_update_flags_face(
const UpdateFlags flags);
377 const bool cell =
true,
378 const bool boundary =
true,
379 const bool face =
true,
380 const bool neighbor =
true);
391 void initialize_gauss_quadrature(
unsigned int n_cell_points,
392 unsigned int n_boundary_points,
393 unsigned int n_face_points,
394 const bool force =
true);
477 std_cxx11::shared_ptr<MeshWorker::VectorDataBase<dim, spacedim> > cell_data;
478 std_cxx11::shared_ptr<MeshWorker::VectorDataBase<dim, spacedim> > boundary_data;
479 std_cxx11::shared_ptr<MeshWorker::VectorDataBase<dim, spacedim> > face_data;
503 template <
class DOFINFO>
522 template <
class DOFINFO>
553 template<
int dim,
int sdim>
563 template<
int dim,
int sdim>
576 for (
unsigned int i=0; i<other.
fevalv.size(); ++i)
584 fevalv[i] = std_cxx11::shared_ptr<FEValuesBase<dim,sdim> > (
588 fevalv[i] = std_cxx11::shared_ptr<FEValuesBase<dim,sdim> > (
591 fevalv[i] = std_cxx11::shared_ptr<FEValuesBase<dim,sdim> > (
594 Assert(
false, ExcInternalError());
600 template<
int dim,
int sdim>
601 template <
class FEVALUES>
611 if (block_info == 0 || block_info->
local().
size() == 0)
614 fevalv[0] = std_cxx11::shared_ptr<FEValuesBase<dim,sdim> > (
615 new FEVALUES (mapping, el, quadrature, flags));
620 for (
unsigned int i=0; i<
fevalv.size(); ++i)
622 fevalv[i] = std_cxx11::shared_ptr<FEValuesBase<dim,sdim> > (
623 new FEVALUES (mapping, el.
base_element(i), quadrature, flags));
630 template <
int dim,
int spacedim>
638 template <
int dim,
int spacedim>
647 template <
int dim,
int spacedim>
656 template <
int dim,
int spacedim>
657 template <
typename number>
661 for (
unsigned int i=0; i<
fevalv.size(); ++i)
684 const bool split_fevalues = info.
block_info != 0;
694 template <
int dim,
int sdim>
703 if (force || cell_quadrature.size() == 0)
705 if (force || boundary_quadrature.size() == 0)
707 if (force || face_quadrature.size() == 0)
712 template <
int dim,
int sdim>
717 add_update_flags(flags,
true,
true,
true,
true);
721 template <
int dim,
int sdim>
726 add_update_flags(flags,
true,
false,
false,
false);
730 template <
int dim,
int sdim>
735 add_update_flags(flags,
false,
true,
false,
false);
739 template <
int dim,
int sdim>
744 add_update_flags(flags,
false,
false,
true,
true);
748 template <
int dim,
int sdim>
756 initialize_update_flags();
757 initialize_gauss_quadrature(
762 cell.template initialize<FEValues<dim,sdim> >(el, mapping, cell_quadrature,
763 cell_flags, block_info);
764 boundary.template initialize<FEFaceValues<dim,sdim> >(el, mapping, boundary_quadrature,
765 boundary_flags, block_info);
766 face.template initialize<FEFaceValues<dim,sdim> >(el, mapping, face_quadrature,
767 face_flags, block_info);
768 subface.template initialize<FESubfaceValues<dim,sdim> >(el, mapping, face_quadrature,
769 face_flags, block_info);
770 neighbor.template initialize<FEFaceValues<dim,sdim> >(el, mapping, face_quadrature,
771 neighbor_flags, block_info);
775 template <
int dim,
int sdim>
776 template <
typename VectorType>
786 std_cxx11::shared_ptr<VectorData<VectorType, dim, sdim> > p;
795 cell.initialize_data(p);
801 boundary.initialize_data(p);
807 face.initialize_data(p);
808 subface.initialize_data(p);
809 neighbor.initialize_data(p);
812 template <
int dim,
int sdim>
813 template <
typename VectorType>
823 std_cxx11::shared_ptr<MGVectorData<VectorType, dim, sdim> > p;
832 cell.initialize_data(p);
838 boundary.initialize_data(p);
844 face.initialize_data(p);
845 subface.initialize_data(p);
846 neighbor.initialize_data(p);
849 template <
int dim,
int sdim>
850 template <
class DOFINFO>
856 template <
int dim,
int sdim>
857 template <
class DOFINFO>
865 DEAL_II_NAMESPACE_CLOSE
std::vector< std::vector< std::vector< double > > > values
Triangulation< dim, spacedim >::cell_iterator cell
The current cell.
static const unsigned int invalid_unsigned_int
#define AssertDimension(dim1, dim2)
void initialize(const FiniteElement< dim, spacedim > &el, const Mapping< dim, spacedim > &mapping, const BlockInfo *block_info=0)
void post_faces(const DoFInfoBox< dim, DOFINFO > &)
Quadrature< dim-1 > boundary_quadrature
UpdateFlags boundary_flags
void add_update_flags_cell(const UpdateFlags flags)
const FEValuesBase< dim, spacedim > & fe_values() const
Access to finite element.
std::vector< std::vector< std::vector< Tensor< 1, dim > > > > gradients
const BlockIndices & local() const
void add_update_flags_all(const UpdateFlags flags)
void fill_local_data(const DoFInfo< dim, spacedim, number > &info, bool split_fevalues)
const FiniteElement< dim, spacedim > & get_fe() const
UpdateFlags get_update_flags() const
void initialize(const FiniteElement< dim, spacedim > &el, const Mapping< dim, spacedim > &mapping, const Quadrature< FEVALUES::integral_dimension > &quadrature, const UpdateFlags flags, const BlockInfo *local_block_info=0)
void add_update_flags_face(const UpdateFlags flags)
const Mapping< dim, spacedim > & get_mapping() const
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access > > &cell, const unsigned int face_no, const unsigned int subface_no)
const FiniteElement< dim, spacedim > & finite_element() const
void reinit(const DoFInfo< dim, spacedim, number > &i)
void initialize_gauss_quadrature(unsigned int n_cell_points, unsigned int n_boundary_points, unsigned int n_face_points, const bool force=true)
Quadrature< dim-1 > face_quadrature
std::size_t memory_consumption() const
MeshWorker::VectorSelector cell_selector
#define Assert(cond, exc)
void post_cell(const DoFInfoBox< dim, DOFINFO > &)
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access > > &cell, const unsigned int face_no)
Abstract base class for mapping classes.
const Quadrature< dim-1 > & get_quadrature() const
Quadrature< dim > cell_quadrature
SmartPointer< const BlockInfo, DoFInfo< dim, spacedim > > block_info
The block structure of the system.
UpdateFlags neighbor_flags
void initialize_data(const std_cxx11::shared_ptr< VectorDataBase< dim, spacedim > > &data)
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const
std::vector< std_cxx11::shared_ptr< FEValuesBase< dim, spacedim > > > fevalv
vector of FEValues objects
void add_update_flags_boundary(const UpdateFlags flags)
const Quadrature< dim > & get_quadrature() const
MeshWorker::VectorSelector boundary_selector
bool multigrid
This is true if we are assembling for multigrid.
unsigned int n_components() const
A small class collecting the different BlockIndices involved in global, multilevel and local computat...
IntegrationInfo< dim, spacedim > CellInfo
SmartPointer< const FiniteElement< dim, spacedim >, IntegrationInfo< dim, spacedim > > fe_pointer
std::vector< std::vector< std::vector< Tensor< 2, dim > > > > hessians
unsigned int n_base_elements() const
unsigned int size() const
void initialize(const AnyData &)
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access > > &cell)
unsigned int n_components
std_cxx11::shared_ptr< VectorDataBase< dim, spacedim > > global_data
MeshWorker::VectorSelector face_selector
unsigned int tensor_degree() const