13 #ifndef __deal2__mesh_worker_integration_info_h
14 #define __deal2__mesh_worker_integration_info_h
16 #include <deal.II/base/config.h>
17 #include <deal.II/base/quadrature_lib.h>
18 #include <deal.II/base/std_cxx1x/shared_ptr.h>
19 #include <deal.II/dofs/block_info.h>
20 #include <deal.II/fe/fe_values.h>
21 #include <deal.II/meshworker/local_results.h>
22 #include <deal.II/meshworker/dof_info.h>
23 #include <deal.II/meshworker/vector_selector.h>
25 DEAL_II_NAMESPACE_OPEN
72 template<
int dim,
int spacedim = dim>
77 std::vector<std_cxx1x::shared_ptr<FEValuesBase<dim, spacedim> > >
fevalv;
79 static const unsigned int dimension = dim;
80 static const unsigned int space_dimension = spacedim;
127 template <
class FEVALUES>
185 std::vector<std::vector<std::vector<double> > >
values;
201 std::vector<std::vector<std::vector<Tensor<1,dim> > > >
gradients;
217 std::vector<std::vector<std::vector<Tensor<2,dim> > > >
hessians;
223 template <
typename number>
233 template<
typename number>
242 std_cxx1x::shared_ptr<VectorDataBase<dim, spacedim> >
global_data;
259 template <
typename TYPE>
261 std::vector<std::vector<std::vector<TYPE> > > &data,
263 bool split_fevalues)
const;
327 template <
int dim,
int spacedim=dim>
373 template <
typename VECTOR>
392 template <
typename VECTOR>
463 const bool cell =
true,
465 const bool face =
true,
485 unsigned int n_boundary_points,
486 unsigned int n_face_points,
487 const bool force =
true);
601 std_cxx1x::shared_ptr<MeshWorker::VectorDataBase<dim, spacedim> > cell_data;
602 std_cxx1x::shared_ptr<MeshWorker::VectorDataBase<dim, spacedim> > boundary_data;
603 std_cxx1x::shared_ptr<MeshWorker::VectorDataBase<dim, spacedim> > face_data;
642 template <
class DOFINFO>
675 template <
class DOFINFO>
713 template<
int dim,
int sdim>
723 template<
int dim,
int sdim>
727 multigrid(other.multigrid),
728 values(other.values),
729 gradients(other.gradients),
730 hessians(other.hessians),
731 global_data(other.global_data),
732 n_components(other.n_components)
735 for (
unsigned int i=0; i<other.
fevalv.size(); ++i)
743 fevalv[i] = std_cxx1x::shared_ptr<FEValuesBase<dim,sdim> > (
747 fevalv[i] = std_cxx1x::shared_ptr<FEValuesBase<dim,sdim> > (
750 fevalv[i] = std_cxx1x::shared_ptr<FEValuesBase<dim,sdim> > (
759 template<
int dim,
int sdim>
760 template <
class FEVALUES>
769 if (block_info == 0 || block_info->
local().
size() == 0)
772 fevalv[0] = std_cxx1x::shared_ptr<FEValuesBase<dim,sdim> > (
773 new FEVALUES (mapping, el, quadrature, flags));
778 for (
unsigned int i=0; i<fevalv.size(); ++i)
780 fevalv[i] = std_cxx1x::shared_ptr<FEValuesBase<dim,sdim> > (
781 new FEVALUES (mapping, el.
base_element(i), quadrature, flags));
788 template <
int dim,
int spacedim>
797 template <
int dim,
int spacedim>
806 template <
int dim,
int spacedim>
807 template <
typename number>
811 for (
unsigned int i=0; i<fevalv.size(); ++i)
814 if (info.
sub_number != deal_II_numbers::invalid_unsigned_int)
820 else if (info.
face_number != deal_II_numbers::invalid_unsigned_int)
834 const bool split_fevalues = info.
block_info != 0;
835 if (!global_data->empty())
836 fill_local_data(info, split_fevalues);
844 template <
int dim,
int sdim>
853 if (force || cell_quadrature.size() == 0)
855 if (force || boundary_quadrature.size() == 0)
857 if (force || face_quadrature.size() == 0)
862 template <
int dim,
int sdim>
867 add_update_flags(flags,
true,
true,
true,
true);
871 template <
int dim,
int sdim>
876 add_update_flags(flags,
true,
false,
false,
false);
880 template <
int dim,
int sdim>
885 add_update_flags(flags,
false,
true,
false,
false);
889 template <
int dim,
int sdim>
894 add_update_flags(flags,
false,
false,
true,
true);
898 template <
int dim,
int sdim>
906 initialize_update_flags();
907 initialize_gauss_quadrature(
912 cell.template initialize<FEValues<dim,sdim> >(el, mapping, cell_quadrature,
913 cell_flags, block_info);
914 boundary.template initialize<FEFaceValues<dim,sdim> >(el, mapping, boundary_quadrature,
915 boundary_flags, block_info);
916 face.template initialize<FEFaceValues<dim,sdim> >(el, mapping, face_quadrature,
917 face_flags, block_info);
918 subface.template initialize<FESubfaceValues<dim,sdim> >(el, mapping, face_quadrature,
919 face_flags, block_info);
920 neighbor.template initialize<FEFaceValues<dim,sdim> >(el, mapping, face_quadrature,
921 neighbor_flags, block_info);
925 template <
int dim,
int sdim>
926 template <
typename VECTOR>
934 initialize(el, mapping, block_info);
935 std_cxx1x::shared_ptr<VectorData<VECTOR, dim, sdim> > p;
940 cell.initialize_data(p);
945 boundary.initialize_data(p);
950 face.initialize_data(p);
951 subface.initialize_data(p);
952 neighbor.initialize_data(p);
956 template <
int dim,
int sdim>
957 template <
typename VECTOR>
965 initialize(el, mapping, block_info);
966 std_cxx1x::shared_ptr<MGVectorData<VECTOR, dim, sdim> > p;
971 cell.initialize_data(p);
976 boundary.initialize_data(p);
981 face.initialize_data(p);
982 subface.initialize_data(p);
983 neighbor.initialize_data(p);
987 template <
int dim,
int sdim>
988 template <
class DOFINFO>
994 template <
int dim,
int sdim>
995 template <
class DOFINFO>
1003 DEAL_II_NAMESPACE_CLOSE