16 #ifndef dealii_meshworker_scratch_data_h 17 #define dealii_meshworker_scratch_data_h 28 #include <boost/any.hpp> 44 template <
int dim,
int spacedim,
typename NumberType,
typename Extractor>
231 template <
int dim,
int spacedim = dim>
360 const unsigned int face_no);
374 const unsigned int face_no,
375 const unsigned int subface_no);
388 get_current_fe_values()
const;
393 const std::vector<Point<spacedim>> &
399 const std::vector<double> &
400 get_JxW_values()
const;
405 const std::vector<Tensor<1, spacedim>> &
406 get_normal_vectors()
const;
412 const std::vector<types::global_dof_index> &
413 get_local_dof_indices()
const;
443 const unsigned int face_no);
458 const unsigned int face_no,
459 const unsigned int subface_no);
473 get_current_neighbor_fe_values()
const;
478 const std::vector<double> &
479 get_neighbor_JxW_values()
const;
484 const std::vector<Tensor<1, spacedim>> &
485 get_neighbor_normal_vectors();
491 const std::vector<types::global_dof_index> &
492 get_neighbor_dof_indices()
const;
502 get_general_data_storage();
538 template <
typename VectorType,
typename Number =
double>
540 extract_local_dof_values(
const std::string &global_vector_name,
542 const Number
dummy = Number(0));
552 template <
typename Number =
double>
553 const std::vector<Number> &
554 get_local_dof_values(
const std::string &global_vector_name,
555 Number
dummy = Number(0))
const;
578 template <
typename Extractor,
typename Number =
double>
582 get_values(
const std::string &global_vector_name,
583 const Extractor & variable,
584 const Number
dummy = Number(0));
607 template <
typename Extractor,
typename Number =
double>
611 get_gradients(
const std::string &global_vector_name,
612 const Extractor & variable,
613 const Number
dummy = Number(0));
637 template <
typename Extractor,
typename Number =
double>
640 symmetric_gradient_type> &
641 get_symmetric_gradients(
const std::string &global_vector_name,
642 const Extractor & variable,
643 const Number
dummy = Number(0));
666 template <
typename Extractor,
typename Number =
double>
670 get_divergences(
const std::string &global_vector_name,
671 const Extractor & variable,
672 const Number
dummy = Number(0));
695 template <
typename Extractor,
typename Number =
double>
696 const std::vector<
typename internal::
697 OutputType<dim, spacedim, Number, Extractor>::curl_type>
699 get_curls(
const std::string &global_vector_name,
700 const Extractor & variable,
701 const Number
dummy = Number(0));
724 template <
typename Extractor,
typename Number =
double>
728 get_hessians(
const std::string &global_vector_name,
729 const Extractor & variable,
730 const Number
dummy = Number(0));
753 template <
typename Extractor,
typename Number =
double>
756 third_derivative_type> &
757 get_third_derivatives(
const std::string &global_vector_name,
758 const Extractor & variable,
759 const Number
dummy = Number(0));
774 template <
typename Extractor,
typename Number =
double>
776 get_unique_name(
const std::string &global_vector_name,
777 const Extractor & variable,
778 const std::string &object_type,
779 const unsigned int size,
780 const Number & exemplar_number)
const;
785 template <
typename Number =
double>
787 get_unique_dofs_name(
const std::string &global_vector_name,
788 const unsigned int size,
789 const Number & exemplar_number)
const;
901 template <
int dim,
int spacedim>
902 template <
typename Extractor,
typename Number>
905 const std::string &global_vector_name,
906 const Extractor & variable,
907 const std::string &object_type,
908 const unsigned int size,
909 const Number & exemplar_number)
const 911 return global_vector_name +
"_" + variable.get_name() +
"_" + object_type +
918 template <
int dim,
int spacedim>
919 template <
typename Number>
922 const std::string &global_vector_name,
923 const unsigned int size,
924 const Number & exemplar_number)
const 926 return global_vector_name +
"_independent_local_dofs_" +
933 template <
int dim,
int spacedim>
934 template <
typename VectorType,
typename Number>
937 const std::string &global_vector_name,
941 const unsigned int n_dofs = get_current_fe_values().get_fe().dofs_per_cell;
943 const std::string name =
944 get_unique_dofs_name(global_vector_name, n_dofs, dummy);
946 auto &independent_local_dofs =
947 internal_data_storage
948 .template get_or_add_object_with_name<std::vector<Number>>(name,
954 for (
unsigned int i = 0; i < n_dofs; ++i)
956 input_vector(local_dof_indices[i]),
959 independent_local_dofs[i]);
961 for (
unsigned int i = 0; i < n_dofs; ++i)
962 independent_local_dofs[i] = input_vector(local_dof_indices[i]);
967 template <
int dim,
int spacedim>
968 template <
typename Number>
969 const std::vector<Number> &
971 const std::string &global_vector_name,
974 const unsigned int n_dofs = get_current_fe_values().get_fe().dofs_per_cell;
976 const std::string dofs_name =
977 get_unique_dofs_name(global_vector_name, n_dofs, dummy);
980 internal_data_storage.stores_object_with_name(dofs_name),
982 "You did not call yet extract_local_dof_values with the right types!"));
984 return internal_data_storage
985 .template get_object_with_name<std::vector<Number>>(dofs_name);
990 template <
int dim,
int spacedim>
991 template <
typename Extractor,
typename Number>
996 const std::string &global_vector_name,
997 const Extractor & variable,
1000 const std::vector<Number> &independent_local_dofs =
1001 get_local_dof_values(global_vector_name, dummy);
1007 const std::string name = get_unique_name(
1008 global_vector_name, variable,
"_values_q", n_q_points, dummy);
1012 std::vector<
typename internal::
1013 OutputType<dim, spacedim, Number, Extractor>::value_type>;
1016 internal_data_storage.template get_or_add_object_with_name<RetType>(
1021 fev[variable].get_function_values_from_local_dof_values(
1022 independent_local_dofs, ret);
1028 template <
int dim,
int spacedim>
1029 template <
typename Extractor,
typename Number>
1034 const std::string &global_vector_name,
1035 const Extractor & variable,
1038 const std::vector<Number> &independent_local_dofs =
1039 get_local_dof_values(global_vector_name, dummy);
1045 const std::string name = get_unique_name(
1046 global_vector_name, variable,
"_gradients_q", n_q_points, dummy);
1049 using RetType = std::vector<
1054 internal_data_storage.template get_or_add_object_with_name<RetType>(
1059 fev[variable].get_function_gradients_from_local_dof_values(
1060 independent_local_dofs, ret);
1066 template <
int dim,
int spacedim>
1067 template <
typename Extractor,
typename Number>
1072 const std::string &global_vector_name,
1073 const Extractor & variable,
1076 const std::vector<Number> &independent_local_dofs =
1077 get_local_dof_values(global_vector_name, dummy);
1083 const std::string name = get_unique_name(
1084 global_vector_name, variable,
"_hessians_q", n_q_points, dummy);
1088 std::vector<
typename internal::
1089 OutputType<dim, spacedim, Number, Extractor>::hessian_type>;
1092 internal_data_storage.template get_or_add_object_with_name<RetType>(
1098 fev[variable].get_function_hessians_from_local_dof_values(
1099 independent_local_dofs, ret);
1105 template <
int dim,
int spacedim>
1106 template <
typename Extractor,
typename Number>
1109 third_derivative_type> &
1111 const std::string &global_vector_name,
1112 const Extractor & variable,
1115 const std::vector<Number> &independent_local_dofs =
1116 get_local_dof_values(global_vector_name, dummy);
1122 const std::string name = get_unique_name(
1123 global_vector_name, variable,
"_third_derivatives_q", n_q_points, dummy);
1126 using RetType = std::vector<
1128 third_derivative_type>;
1131 internal_data_storage.template get_or_add_object_with_name<RetType>(
1137 fev[variable].get_function_third_derivatives_from_local_dof_values(
1138 independent_local_dofs, ret);
1144 template <
int dim,
int spacedim>
1145 template <
typename Extractor,
typename Number>
1148 symmetric_gradient_type> &
1150 const std::string &global_vector_name,
1151 const Extractor & variable,
1154 const std::vector<Number> &independent_local_dofs =
1155 get_local_dof_values(global_vector_name, dummy);
1161 const std::string name = get_unique_name(
1162 global_vector_name, variable,
"_symmetric_gradient_q", n_q_points, dummy);
1166 using RetType = std::vector<
1168 symmetric_gradient_type>;
1171 internal_data_storage.template get_or_add_object_with_name<RetType>(
1177 fev[variable].get_function_symmetric_gradients_from_local_dof_values(
1178 independent_local_dofs, ret);
1183 template <
int dim,
int spacedim>
1184 template <
typename Extractor,
typename Number>
1189 const std::string &global_vector_name,
1190 const Extractor & variable,
1193 const std::vector<Number> &independent_local_dofs =
1194 get_local_dof_values(global_vector_name, dummy);
1200 const std::string name = get_unique_name(
1201 global_vector_name, variable,
"_divergence_q", n_q_points, dummy);
1204 using RetType = std::vector<
1209 internal_data_storage.template get_or_add_object_with_name<RetType>(
1215 fev[variable].get_function_divergences_from_local_dof_values(
1216 independent_local_dofs, ret);
1222 template <
int dim,
int spacedim>
1223 template <
typename Extractor,
typename Number>
1228 const Extractor & variable,
1231 const std::vector<Number> &independent_local_dofs =
1232 get_local_dof_values(global_vector_name, dummy);
1238 const std::string name = get_unique_name(
1239 global_vector_name, variable,
"_curl_q", n_q_points, dummy);
1243 std::vector<
typename internal::
1244 OutputType<dim, spacedim, Number, Extractor>::curl_type>;
1247 internal_data_storage.template get_or_add_object_with_name<RetType>(
1252 fev[variable].get_function_curls_from_local_dof_values(
1253 independent_local_dofs, ret);
typename FEValuesViews::View< dim, spacedim, Extractor >::template OutputType< NumberType > OutputType
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
GeneralDataStorage internal_data_storage
SmartPointer< FEValuesBase< dim, spacedim > > current_fe_values
std::string type_to_string(const T &t)
#define AssertDimension(dim1, dim2)
std::unique_ptr< FEFaceValues< dim, spacedim > > fe_face_values
typename ::internal::FEValuesViews::ViewType< dim, spacedim, Extractor >::type View
const std::vector< typename internal::OutputType< dim, spacedim, Number, Extractor >::gradient_type > & get_gradients(const std::string &global_vector_name, const Extractor &variable, const Number dummy=Number(0))
Quadrature< dim > cell_quadrature
SmartPointer< const Mapping< dim, spacedim > > mapping
std::string get_unique_dofs_name(const std::string &global_vector_name, const unsigned int size, const Number &exemplar_number) const
std::unique_ptr< FEValues< dim, spacedim > > neighbor_fe_values
UpdateFlags neighbor_face_update_flags
const std::vector< typename internal::OutputType< dim, spacedim, Number, Extractor >::value_type > & get_values(const std::string &global_vector_name, const Extractor &variable, const Number dummy=Number(0))
std::vector< double > get_quadrature_points(const unsigned int n)
const std::vector< typename internal::OutputType< dim, spacedim, Number, Extractor >::symmetric_gradient_type > & get_symmetric_gradients(const std::string &global_vector_name, const Extractor &variable, const Number dummy=Number(0))
UpdateFlags neighbor_cell_update_flags
std::vector< types::global_dof_index > neighbor_dof_indices
const std::vector< typename internal::OutputType< dim, spacedim, Number, Extractor >::hessian_type > & get_hessians(const std::string &global_vector_name, const Extractor &variable, const Number dummy=Number(0))
std::unique_ptr< FESubfaceValues< dim, spacedim > > fe_subface_values
std::unique_ptr< FESubfaceValues< dim, spacedim > > neighbor_fe_subface_values
static ::ExceptionBase & ExcMessage(std::string arg1)
#define Assert(cond, exc)
Abstract base class for mapping classes.
SmartPointer< FEValuesBase< dim, spacedim > > current_neighbor_fe_values
std::unique_ptr< FEFaceValues< dim, spacedim > > neighbor_fe_face_values
#define DEAL_II_NAMESPACE_CLOSE
UpdateFlags face_update_flags
GeneralDataStorage user_data_storage
std::string get_unique_name(const std::string &global_vector_name, const Extractor &variable, const std::string &object_type, const unsigned int size, const Number &exemplar_number) const
const std::vector< typename internal::OutputType< dim, spacedim, Number, Extractor >::third_derivative_type > & get_third_derivatives(const std::string &global_vector_name, const Extractor &variable, const Number dummy=Number(0))
const std::vector< typename internal::OutputType< dim, spacedim, Number, Extractor >::curl_type > & get_curls(const std::string &global_vector_name, const Extractor &variable, const Number dummy=Number(0))
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
const types::global_dof_index * dummy()
void extract_local_dof_values(const std::string &global_vector_name, const VectorType &input_vector, const Number dummy=Number(0))
UpdateFlags cell_update_flags
const unsigned int n_quadrature_points
Quadrature< dim - 1 > face_quadrature
std::unique_ptr< FEValues< dim, spacedim > > fe_values
const std::vector< typename internal::OutputType< dim, spacedim, Number, Extractor >::divergence_type > & get_divergences(const std::string &global_vector_name, const Extractor &variable, const Number dummy=Number(0))
#define DEAL_II_NAMESPACE_OPEN
typename ActiveSelector::active_cell_iterator active_cell_iterator
std::vector< types::global_dof_index > local_dof_indices
SmartPointer< const FiniteElement< dim, spacedim > > fe
const std::vector< Number > & get_local_dof_values(const std::string &global_vector_name, Number dummy=Number(0)) const