Reference documentation for deal.II version 9.0.0
fe_system.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1999 - 2018 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_fe_system_h
17 #define dealii_fe_system_h
18 
19 
20 /*---------------------------- fe_system.h ---------------------------*/
21 
22 
23 #include <deal.II/base/config.h>
24 #include <deal.II/base/thread_management.h>
25 #include <deal.II/fe/fe.h>
26 #include <deal.II/fe/fe_tools.h>
27 
28 #include <vector>
29 #include <memory>
30 #include <utility>
31 #include <type_traits>
32 
33 
34 DEAL_II_NAMESPACE_OPEN
35 
36 template <int dim, int spacedim> class FE_Enriched;
37 
38 
166 template <int dim, int spacedim=dim>
167 class FESystem : public FiniteElement<dim,spacedim>
168 {
169 public:
170 
202  const unsigned int n_elements);
203 
210  FESystem (const FiniteElement<dim,spacedim> &fe1, const unsigned int n1,
211  const FiniteElement<dim,spacedim> &fe2, const unsigned int n2);
212 
219  FESystem (const FiniteElement<dim,spacedim> &fe1, const unsigned int n1,
220  const FiniteElement<dim,spacedim> &fe2, const unsigned int n2,
221  const FiniteElement<dim,spacedim> &fe3, const unsigned int n3);
222 
229  FESystem (const FiniteElement<dim,spacedim> &fe1, const unsigned int n1,
230  const FiniteElement<dim,spacedim> &fe2, const unsigned int n2,
231  const FiniteElement<dim,spacedim> &fe3, const unsigned int n3,
232  const FiniteElement<dim,spacedim> &fe4, const unsigned int n4);
233 
240  FESystem (const FiniteElement<dim,spacedim> &fe1, const unsigned int n1,
241  const FiniteElement<dim,spacedim> &fe2, const unsigned int n2,
242  const FiniteElement<dim,spacedim> &fe3, const unsigned int n3,
243  const FiniteElement<dim,spacedim> &fe4, const unsigned int n4,
244  const FiniteElement<dim,spacedim> &fe5, const unsigned int n5);
245 
423  FESystem (const std::vector<const FiniteElement<dim,spacedim>*> &fes,
424  const std::vector<unsigned int> &multiplicities);
425 
463  template <class... FEPairs,
464  typename = typename enable_if_all<
465  (std::is_same<typename std::decay<FEPairs>::type,
466  std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>::value
467  ||
468  std::is_base_of<FiniteElement<dim, spacedim>,
469  typename std::decay<FEPairs>::type>::value)
470  ...
471  >::type
472  >
473  FESystem (FEPairs &&... fe_pairs);
474 
483  FESystem (const std::initializer_list<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
484  unsigned int>> &fe_systems);
485 
490  FESystem (const FESystem<dim,spacedim> &) = delete;
491 
495  FESystem (FESystem<dim,spacedim> &&) = default; // NOLINT
496 
500  virtual ~FESystem () = default;
501 
510  virtual std::string get_name () const;
511 
512  virtual
513  std::unique_ptr<FiniteElement<dim,spacedim> >
514  clone() const;
515 
516  virtual
518  requires_update_flags (const UpdateFlags update_flags) const;
519 
520  // make variant with ComponentMask also available:
522 
526  virtual
528  get_sub_fe (const unsigned int first_component,
529  const unsigned int n_selected_components) const;
530 
543  virtual double shape_value (const unsigned int i,
544  const Point<dim> &p) const;
545 
554  virtual double shape_value_component (const unsigned int i,
555  const Point<dim> &p,
556  const unsigned int component) const;
557 
572  virtual Tensor<1,dim> shape_grad (const unsigned int i,
573  const Point<dim> &p) const;
574 
583  virtual Tensor<1,dim> shape_grad_component (const unsigned int i,
584  const Point<dim> &p,
585  const unsigned int component) const;
586 
601  virtual Tensor<2,dim> shape_grad_grad (const unsigned int i,
602  const Point<dim> &p) const;
603 
612  virtual
614  shape_grad_grad_component (const unsigned int i,
615  const Point<dim> &p,
616  const unsigned int component) const;
617 
632  virtual Tensor<3,dim> shape_3rd_derivative (const unsigned int i,
633  const Point<dim> &p) const;
634 
643  virtual Tensor<3,dim> shape_3rd_derivative_component (const unsigned int i,
644  const Point<dim> &p,
645  const unsigned int component) const;
646 
661  virtual Tensor<4,dim> shape_4th_derivative (const unsigned int i,
662  const Point<dim> &p) const;
663 
672  virtual Tensor<4,dim> shape_4th_derivative_component (const unsigned int i,
673  const Point<dim> &p,
674  const unsigned int component) const;
675 
687  virtual void
689  FullMatrix<double> &matrix) const;
690 
697  virtual const FiniteElement<dim,spacedim> &
698  base_element (const unsigned int index) const;
699 
704  virtual bool has_support_on_face (const unsigned int shape_index,
705  const unsigned int face_index) const;
706 
730  virtual const FullMatrix<double> &
731  get_restriction_matrix (const unsigned int child,
733 
761  virtual const FullMatrix<double> &
762  get_prolongation_matrix (const unsigned int child,
764 
803  virtual
804  unsigned int face_to_cell_index (const unsigned int face_dof_index,
805  const unsigned int face,
806  const bool face_orientation = true,
807  const bool face_flip = false,
808  const bool face_rotation = false) const;
809 
813  virtual
814  Point<dim>
815  unit_support_point (const unsigned int index) const;
816 
820  virtual
821  Point<dim-1>
822  unit_face_support_point (const unsigned int index) const;
823 
831  virtual std::pair<Table<2,bool>, std::vector<unsigned int> >
832  get_constant_modes () const;
833 
846  virtual bool hp_constraints_are_implemented () const;
847 
860  virtual void
862  FullMatrix<double> &matrix) const;
863 
864 
877  virtual void
879  const unsigned int subface,
880  FullMatrix<double> &matrix) const;
881 
897  virtual
898  std::vector<std::pair<unsigned int, unsigned int> >
900 
905  virtual
906  std::vector<std::pair<unsigned int, unsigned int> >
907  hp_line_dof_identities (const FiniteElement<dim,spacedim> &fe_other) const;
908 
913  virtual
914  std::vector<std::pair<unsigned int, unsigned int> >
915  hp_quad_dof_identities (const FiniteElement<dim,spacedim> &fe_other) const;
916 
926  virtual
930 
945  virtual
946  void
947  convert_generalized_support_point_values_to_dof_values (const std::vector<Vector<double> > &support_point_values,
948  std::vector<double> &dof_values) const;
949 
958  virtual std::size_t memory_consumption () const;
959 
960 protected:
961 
962  virtual
963  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
964  get_data (const UpdateFlags update_flags,
965  const Mapping<dim,spacedim> &mapping,
966  const Quadrature<dim> &quadrature,
968 
969  virtual
970  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
971  get_face_data (const UpdateFlags update_flags,
972  const Mapping<dim,spacedim> &mapping,
973  const Quadrature<dim-1> &quadrature,
975 
976  virtual
977  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
978  get_subface_data (const UpdateFlags update_flags,
979  const Mapping<dim,spacedim> &mapping,
980  const Quadrature<dim-1> &quadrature,
982 
983  virtual
984  void
985  fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
986  const CellSimilarity::Similarity cell_similarity,
987  const Quadrature<dim> &quadrature,
988  const Mapping<dim,spacedim> &mapping,
989  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
990  const ::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim> &mapping_data,
991  const typename FiniteElement<dim,spacedim>::InternalDataBase &fe_internal,
993 
994  virtual
995  void
996  fill_fe_face_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
997  const unsigned int face_no,
998  const Quadrature<dim-1> &quadrature,
999  const Mapping<dim,spacedim> &mapping,
1000  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
1001  const ::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim> &mapping_data,
1002  const typename FiniteElement<dim,spacedim>::InternalDataBase &fe_internal,
1004 
1005  virtual
1006  void
1007  fill_fe_subface_values (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
1008  const unsigned int face_no,
1009  const unsigned int sub_no,
1010  const Quadrature<dim-1> &quadrature,
1011  const Mapping<dim,spacedim> &mapping,
1012  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
1013  const ::internal::FEValuesImplementation::MappingRelatedData<dim, spacedim> &mapping_data,
1014  const typename FiniteElement<dim,spacedim>::InternalDataBase &fe_internal,
1016 
1027  template <int dim_1>
1028  void compute_fill (const Mapping<dim,spacedim> &mapping,
1029  const typename Triangulation<dim,spacedim>::cell_iterator &cell,
1030  const unsigned int face_no,
1031  const unsigned int sub_no,
1032  const Quadrature<dim_1> &quadrature,
1033  const CellSimilarity::Similarity cell_similarity,
1034  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_internal,
1035  const typename FiniteElement<dim,spacedim>::InternalDataBase &fe_data,
1038 
1039 private:
1040 
1045 
1053  std::vector<std::pair<std::unique_ptr<const FiniteElement<dim,spacedim> >,
1054  unsigned int> >
1056 
1069  std::vector<std::vector<std::size_t>> generalized_support_points_index_table;
1070 
1076  void initialize (const std::vector<const FiniteElement<dim,spacedim>*> &fes,
1077  const std::vector<unsigned int> &multiplicities);
1078 
1083 
1089  template <int structdim>
1090  std::vector<std::pair<unsigned int, unsigned int> >
1091  hp_object_dof_identities (const FiniteElement<dim,spacedim> &fe_other) const;
1092 
1099  class InternalData : public FiniteElement<dim,spacedim>::InternalDataBase
1100  {
1101  public:
1106  InternalData (const unsigned int n_base_elements);
1107 
1112  ~InternalData();
1113 
1118  void set_fe_data(const unsigned int base_no,
1119  std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>);
1120 
1126  get_fe_data (const unsigned int base_no) const;
1127 
1134  get_fe_output_object (const unsigned int base_no) const;
1135 
1136  private:
1137 
1148  typename std::vector<std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase > > base_fe_datas;
1149 
1158  mutable std::vector<internal::FEValuesImplementation::FiniteElementRelatedData<dim,spacedim> > base_fe_output_objects;
1159  };
1160 
1161  /*
1162  * Mutex for protecting initialization of restriction and embedding matrix.
1163  */
1164  mutable Threads::Mutex mutex;
1165 
1166  friend class FE_Enriched<dim,spacedim>;
1167 };
1168 
1169 //------------------------variadic template constructor------------------------
1170 
1171 #ifndef DOXYGEN
1172 namespace
1173 {
1174  template <int dim, int spacedim>
1175  unsigned int count_nonzeros
1176  (const std::initializer_list<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1177  unsigned int>> &fe_systems)
1178  {
1179  return std::count_if(fe_systems.begin(),
1180  fe_systems.end(),
1181  [](const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1182  unsigned int> &fe_system)
1183  {
1184  return fe_system.second > 0;
1185  });
1186  }
1187 
1188 
1189 
1190  template <int dim, int spacedim>
1191  std::pair<std::unique_ptr<FiniteElement<dim, spacedim> >, unsigned int>
1192  promote_to_fe_pair (const FiniteElement<dim,spacedim> &fe)
1193  {
1194  return std::make_pair<std::unique_ptr<FiniteElement<dim, spacedim> >,
1195  unsigned int> (std::move(fe.clone()), 1u);
1196  }
1197 
1198 
1199 
1200  template <int dim, int spacedim>
1201  auto
1202  promote_to_fe_pair (std::pair<std::unique_ptr<FiniteElement<dim, spacedim> >, unsigned int> &&p)
1203  -> decltype(std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim> >, unsigned int> >(p))
1204  {
1205  return std::forward<std::pair<std::unique_ptr<FiniteElement<dim, spacedim> >, unsigned int> >(p);
1206  }
1207 }
1208 
1209 
1210 
1211 // We are just forwarding/delegating to the constructor taking a std::initializer_list.
1212 // If we decide to remove the deprecated constructors, we might just use the variadic
1213 // constructor with a suitable static_assert instead of the std::enable_if.
1214 template<int dim, int spacedim>
1215 template <class... FEPairs,
1216  typename>
1217 FESystem<dim,spacedim>::FESystem (FEPairs &&... fe_pairs)
1218  :
1219  FESystem<dim, spacedim> ({promote_to_fe_pair<dim,spacedim>(std::forward<FEPairs>(fe_pairs))...})
1220 {}
1221 
1222 
1223 
1224 template <int dim, int spacedim>
1226 (const std::initializer_list<std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
1227  unsigned int>> &fe_systems)
1228  :
1229  FiniteElement<dim,spacedim>
1230  (FETools::Compositing::multiply_dof_numbers<dim,spacedim>(fe_systems),
1231  FETools::Compositing::compute_restriction_is_additive_flags<dim,spacedim> (fe_systems),
1232  FETools::Compositing::compute_nonzero_components<dim,spacedim>(fe_systems)),
1233  base_elements(count_nonzeros(fe_systems))
1234 {
1235  std::vector<const FiniteElement<dim,spacedim>*> fes;
1236  std::vector<unsigned int> multiplicities;
1237 
1238  const auto extract
1239  = [&fes, &multiplicities]
1240  (const std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int> &fe_system)
1241  {
1242  fes.push_back(fe_system.first.get());
1243  multiplicities.push_back(fe_system.second);
1244  };
1245 
1246  for (const auto &p : fe_systems)
1247  extract (p);
1248 
1249  initialize(fes, multiplicities);
1250 }
1251 
1252 #endif //DOXYGEN
1253 
1254 DEAL_II_NAMESPACE_CLOSE
1255 
1256 #endif
1257 /*---------------------------- fe_system.h ---------------------------*/
Definition: tria.h:67
static const unsigned int invalid_unsigned_int
Definition: types.h:173
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim-1 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
Definition: fe_system.cc:940
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const
Definition: fe_system.cc:316
void build_interface_constraints()
Definition: fe_system.cc:1287
FiniteElementData< dim > multiply_dof_numbers(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities, const bool do_tensor_product=true)
void initialize(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities)
Definition: fe_system.cc:1470
std::vector< std::pair< unsigned int, unsigned int > > hp_object_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:1972
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
Definition: fe_system.cc:884
virtual double shape_value_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
Definition: fe_system.cc:373
virtual bool hp_constraints_are_implemented() const
Definition: fe_system.cc:1729
virtual ~FESystem()=default
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_vertex_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:2083
std::vector< std::pair< std::unique_ptr< const FiniteElement< dim, spacedim > >, unsigned int > > base_elements
Definition: fe_system.h:1055
std::vector< bool > compute_restriction_is_additive_flags(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities)
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > get_constant_modes() const
Definition: fe_system.cc:2220
virtual Point< dim > unit_support_point(const unsigned int index) const
Definition: fe_system.cc:2176
InternalData(const unsigned int n_base_elements)
Definition: fe_system.cc:53
virtual Tensor< 3, dim > shape_3rd_derivative(const unsigned int i, const Point< dim > &p) const
Definition: fe_system.cc:500
const std::unique_ptr< const FESystem< dim, spacedim > > fe_system
Definition: fe_enriched.h:631
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const
Definition: fe_system.cc:869
std::vector< std::vector< std::size_t > > generalized_support_points_index_table
Definition: fe_system.h:1069
virtual Tensor< 3, dim > shape_3rd_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
Definition: fe_system.cc:515
virtual std::string get_name() const
Definition: fe_system.cc:285
virtual std::unique_ptr< FiniteElement< dim, spacedim > > clone() const =0
virtual Tensor< 4, dim > shape_4th_derivative_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
Definition: fe_system.cc:560
virtual void convert_generalized_support_point_values_to_dof_values(const std::vector< Vector< double > > &support_point_values, std::vector< double > &dof_values) const
Definition: fe_system.cc:2275
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_quad_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:2099
UpdateFlags
static const unsigned int invalid_face_number
Definition: fe_system.h:1044
Abstract base class for mapping classes.
Definition: dof_tools.h:46
Definition: fe.h:36
virtual const FullMatrix< double > & get_prolongation_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
Definition: fe_system.cc:760
virtual Tensor< 2, dim > shape_grad_grad(const unsigned int i, const Point< dim > &p) const
Definition: fe_system.cc:455
void set_fe_data(const unsigned int base_no, std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase >)
Definition: fe_system.cc:85
ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
virtual double shape_value(const unsigned int i, const Point< dim > &p) const
Definition: fe_system.cc:358
virtual void get_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const
Definition: fe_system.cc:590
virtual Tensor< 1, dim > shape_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
Definition: fe_system.cc:425
std::vector< internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > > base_fe_output_objects
Definition: fe_system.h:1158
virtual void get_subface_interpolation_matrix(const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const
Definition: fe_system.cc:1853
virtual const FiniteElement< dim, spacedim > & base_element(const unsigned int index) const
Definition: fe_system.cc:2153
virtual void get_face_interpolation_matrix(const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const
Definition: fe_system.cc:1743
virtual std::size_t memory_consumption() const
Definition: fe_system.cc:2381
virtual std::vector< std::pair< unsigned int, unsigned int > > hp_line_dof_identities(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:2090
std::vector< std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > > base_fe_datas
Definition: fe_system.h:1148
virtual FiniteElementDomination::Domination compare_for_face_domination(const FiniteElement< dim, spacedim > &fe_other) const
Definition: fe_system.cc:2109
FiniteElement< dim, spacedim >::InternalDataBase & get_fe_data(const unsigned int base_no) const
Definition: fe_system.cc:73
virtual Point< dim-1 > unit_face_support_point(const unsigned int index) const
Definition: fe_system.cc:2198
std::vector< ComponentMask > compute_nonzero_components(const std::vector< const FiniteElement< dim, spacedim > *> &fes, const std::vector< unsigned int > &multiplicities, const bool do_tensor_product=true)
FESystem(const FiniteElement< dim, spacedim > &fe, const unsigned int n_elements)
Definition: fe_system.cc:115
virtual Tensor< 4, dim > shape_4th_derivative(const unsigned int i, const Point< dim > &p) const
Definition: fe_system.cc:545
internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > & get_fe_output_object(const unsigned int base_no) const
Definition: fe_system.cc:98
void compute_fill(const Mapping< dim, spacedim > &mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim_1 > &quadrature, const CellSimilarity::Similarity cell_similarity, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const typename FiniteElement< dim, spacedim >::InternalDataBase &fe_data, const internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &mapping_data, internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
Definition: fe_system.cc:1113
virtual unsigned int face_to_cell_index(const unsigned int face_dof_index, const unsigned int face, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false) const
Definition: fe_system.cc:824
virtual bool has_support_on_face(const unsigned int shape_index, const unsigned int face_index) const
Definition: fe_system.cc:2164
virtual std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim-1 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > &output_data) const
Definition: fe_system.cc:998
unsigned int n_base_elements() const
Definition: fe.h:3046
virtual const FullMatrix< double > & get_restriction_matrix(const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const
Definition: fe_system.cc:671
virtual Tensor< 2, dim > shape_grad_grad_component(const unsigned int i, const Point< dim > &p, const unsigned int component) const
Definition: fe_system.cc:470
virtual const FiniteElement< dim, spacedim > & get_sub_fe(const unsigned int first_component, const unsigned int n_selected_components) const
Definition: fe_system.cc:334
virtual Tensor< 1, dim > shape_grad(const unsigned int i, const Point< dim > &p) const
Definition: fe_system.cc:410