14#ifndef dealii_matrix_free_mapping_data_on_the_fly_h
15#define dealii_matrix_free_mapping_data_on_the_fly_h
38 namespace MatrixFreeFunctions
56 template <
int dim,
typename Number>
87 reinit(typename ::Triangulation<dim>::cell_iterator cell);
99 typename ::Triangulation<dim>::cell_iterator
108 const ::FEValues<dim> &
169 template <
int dim,
typename Number>
181 , quadrature_1d(quadrature)
207 template <
int dim,
typename Number>
218 template <
int dim,
typename Number>
221 typename ::Triangulation<dim>::cell_iterator cell)
223 if (present_cell == cell)
226 fe_values->
reinit(present_cell);
227 for (
unsigned int q = 0; q < fe_values->get_quadrature().
size(); ++q)
230 mapping_info_storage.JxW_values[q] = fe_values->JxW(q);
235 for (
unsigned int d = 0; d < dim; ++d)
236 for (
unsigned int e = 0; e < dim; ++e)
237 mapping_info_storage.jacobians[0][q][d][e] = jac[d][e];
240 for (
unsigned int d = 0; d < dim; ++d)
241 mapping_info_storage.quadrature_points[q][d] =
242 fe_values->quadrature_point(q)[d];
245 for (
unsigned int d = 0; d < dim; ++d)
246 mapping_info_storage.normal_vectors[q][d] =
247 fe_values->normal_vector(q)[d];
248 mapping_info_storage.normals_times_jacobians[0][q] =
249 mapping_info_storage.normal_vectors[q] *
250 mapping_info_storage.jacobians[0][q];
257 template <
int dim,
typename Number>
261 return present_cell !=
262 typename ::Triangulation<dim>::cell_iterator();
267 template <
int dim,
typename Number>
268 inline typename ::Triangulation<dim>::cell_iterator
271 return fe_values->get_cell();
276 template <
int dim,
typename Number>
277 inline const ::FEValues<dim> &
285 template <
int dim,
typename Number>
289 return mapping_info_storage;
294 template <
int dim,
typename Number>
298 return mapping_info_storage;
303 template <
int dim,
typename Number>
307 return quadrature_1d;
void resize(const size_type new_size)
Abstract base class for mapping classes.
const MappingInfoStorage< dim, dim, Number > & get_data_storage() const
const Quadrature< 1 > & get_quadrature() const
void reinit(typename ::Triangulation< dim >::cell_iterator cell)
bool is_initialized() const
const ::FEValues< dim > & get_fe_values() const
MappingDataOnTheFly(const Quadrature< 1 > &quadrature, const UpdateFlags update_flags)
MappingInfoStorage< dim, dim, Number > & get_data_storage()
MappingDataOnTheFly()=default
typename::Triangulation< dim >::cell_iterator present_cell
const Quadrature< 1 > quadrature_1d
MappingDataOnTheFly(const Mapping< dim > &mapping, const Quadrature< 1 > &quadrature, const UpdateFlags update_flags)
std::unique_ptr<::FEValues< dim > > fe_values
MappingInfoStorage< dim, dim, Number > mapping_info_storage
typename::Triangulation< dim >::cell_iterator get_cell() const
std::unique_ptr< FE_Nothing< dim > > fe_dummy
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
@ update_jacobian_grads
Gradient of volume element.
@ update_normal_vectors
Normal vectors.
@ update_JxW_values
Transformed quadrature weights.
@ update_jacobians
Volume element.
@ update_quadrature_points
Transformed quadrature points.
std::vector< QuadratureDescriptor > descriptor
AlignedVector< Tensor< 1, spacedim, Number > > normal_vectors
std::array< AlignedVector< Tensor< 1, spacedim, Number > >, 2 > normals_times_jacobians
AlignedVector< Number > JxW_values
AlignedVector< unsigned int > quadrature_point_offsets
AlignedVector< Point< spacedim, Number > > quadrature_points
AlignedVector< unsigned int > data_index_offsets
std::array< AlignedVector< Tensor< 2, spacedim, Number > >, 2 > jacobians
constexpr SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &)