* FEValues can be found in the @ref FE_vs_Mapping_vs_FEValues documentation
* module.
*/
- virtual InternalDataBase *
- get_data (const UpdateFlags flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim> &quadrature) const = 0;
+ virtual
+ InternalDataBase *
+ get_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const = 0;
/**
* Prepare internal data structure for transformation of faces and fill in
* FEValues can be found in the @ref FE_vs_Mapping_vs_FEValues documentation
* module.
*/
- virtual InternalDataBase *
- get_face_data (const UpdateFlags flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const;
+ virtual
+ InternalDataBase *
+ get_face_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const;
/**
* Prepare internal data structure for transformation of children of faces
* FEValues can be found in the @ref FE_vs_Mapping_vs_FEValues documentation
* module.
*/
- virtual InternalDataBase *
- get_subface_data (const UpdateFlags flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const;
+ virtual
+ InternalDataBase *
+ get_subface_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const;
/**
* Compute information about the shape functions on the cell denoted
*/
virtual
typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_data (const UpdateFlags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim> &quadrature) const;
+ get_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const;
virtual
void
virtual
typename FiniteElement<1,spacedim>::InternalDataBase *
- get_data (const UpdateFlags,
- const Mapping<1,spacedim> &/*mapping*/,
- const Quadrature<1> &/*quadrature*/) const
+ get_data (const UpdateFlags /*update_flags*/,
+ const Mapping<1,spacedim> &/*mapping*/,
+ const Quadrature<1> &/*quadrature*/,
+ dealii::internal::FEValues::FiniteElementRelatedData<1, spacedim> &/*output_data*/) const
{
return new typename FiniteElement<1, spacedim>::InternalDataBase;
}
typename FiniteElement<1,spacedim>::InternalDataBase *
get_face_data(const UpdateFlags update_flags,
const Mapping<1,spacedim> &/*mapping*/,
- const Quadrature<0> &quadrature) const
+ const Quadrature<0> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<1, spacedim> &/*output_data*/) const
{
// generate a new data object and initialize some fields
typename FiniteElement<1,spacedim>::InternalDataBase *data =
}
typename FiniteElement<1,spacedim>::InternalDataBase *
- get_subface_data(const UpdateFlags update_flags,
- const Mapping<1,spacedim> &mapping,
- const Quadrature<0> &quadrature) const
+ get_subface_data(const UpdateFlags update_flags,
+ const Mapping<1,spacedim> &mapping,
+ const Quadrature<0> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<1, spacedim> &output_data) const
{
- return get_face_data(update_flags, mapping, quadrature);
+ return get_face_data(update_flags, mapping, quadrature, output_data);
}
virtual
*/
virtual
typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_data (const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim> &quadrature) const;
+ get_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const;
/**
* Return whether this element dominates the one given as argument when they
virtual
typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_data(const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &/*mapping*/,
- const Quadrature<dim> &quadrature) const
+ get_data(const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &/*mapping*/,
+ const Quadrature<dim> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// generate a new data object and
// initialize some fields
virtual
typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_data (const UpdateFlags /*update_flags*/,
- const Mapping<dim,spacedim> &/*mapping*/,
- const Quadrature<dim> &/*quadrature*/) const
+ get_data (const UpdateFlags /*update_flags*/,
+ const Mapping<dim,spacedim> &/*mapping*/,
+ const Quadrature<dim> &/*quadrature*/,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
InternalData *data = new InternalData;
return data;
}
typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_face_data(const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &/*mapping*/,
- const Quadrature<dim-1>& quadrature) const
+ get_face_data(const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &/*mapping*/,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// generate a new data object and
// initialize some fields
}
typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_subface_data(const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1>& quadrature) const
+ get_subface_data(const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const
{
return get_face_data(update_flags, mapping,
- QProjector<dim - 1>::project_to_all_children(quadrature));
+ QProjector<dim - 1>::project_to_all_children(quadrature),
+ output_data);
}
virtual
because we otherwise run into a compiler error with MS Visual Studio. */
virtual
typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_data(const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &,
- const Quadrature<dim> &quadrature) const
+ get_data(const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &/*mapping*/,
+ const Quadrature<dim> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// generate a new data object and
// initialize some fields
*/
virtual FiniteElement<dim,spacedim> *clone() const;
- virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_data (const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim> &quadrature) const;
virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_face_data (const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const;
+ get_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const;
- virtual typename FiniteElement<dim,spacedim>::InternalDataBase *
- get_subface_data (const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const;
+ virtual
+ typename FiniteElement<dim,spacedim>::InternalDataBase *
+ get_face_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const;
+
+ virtual
+ typename FiniteElement<dim,spacedim>::InternalDataBase *
+ get_subface_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const;
virtual
void
typename FiniteElement<dim,spacedim>::InternalDataBase *
FiniteElement<dim,spacedim>::get_face_data (const UpdateFlags flags,
const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const
{
return get_data (flags, mapping,
- QProjector<dim>::project_to_all_faces(quadrature));
+ QProjector<dim>::project_to_all_faces(quadrature),
+ output_data);
}
typename FiniteElement<dim,spacedim>::InternalDataBase *
FiniteElement<dim,spacedim>::get_subface_data (const UpdateFlags flags,
const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &output_data) const
{
return get_data (flags, mapping,
- QProjector<dim>::project_to_all_subfaces(quadrature));
+ QProjector<dim>::project_to_all_subfaces(quadrature),
+ output_data);
}
template <int dim, int spacedim>
typename FiniteElement<dim,spacedim>::InternalDataBase *
-FE_DGPNonparametric<dim,spacedim>::get_data (
- const UpdateFlags update_flags,
- const Mapping<dim,spacedim> &,
- const Quadrature<dim> &) const
+FE_DGPNonparametric<dim,spacedim>::
+get_data (const UpdateFlags update_flags,
+ const Mapping<dim,spacedim> &,
+ const Quadrature<dim> &,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// generate a new data object
typename FiniteElement<dim,spacedim>::InternalDataBase *data = new typename FiniteElement<dim,spacedim>::InternalDataBase;
template <int dim, int spacedim>
typename FiniteElement<dim,spacedim>::InternalDataBase *
-FE_Nothing<dim,spacedim>::get_data (const UpdateFlags /*flags*/,
- const Mapping<dim,spacedim> & /*mapping*/,
- const Quadrature<dim> & /*quadrature*/) const
+FE_Nothing<dim,spacedim>::get_data (const UpdateFlags /*update_flags*/,
+ const Mapping<dim,spacedim> &/*mapping*/,
+ const Quadrature<dim> &/*quadrature*/,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// Create a default data object. Normally we would then
// need to resize things to hold the appropriate numbers
template <int dim, int spacedim>
typename FiniteElement<dim,spacedim>::InternalDataBase *
-FESystem<dim,spacedim>::get_data (const UpdateFlags flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim> &quadrature) const
+FESystem<dim,spacedim>::
+get_data (const UpdateFlags flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// create an internal data object and set the update flags we will need
// to deal with. the current object does not make use of these flags,
// function is called
for (unsigned int base_no=0; base_no<this->n_base_elements(); ++base_no)
{
- typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
- base_element(base_no).get_data (flags, mapping, quadrature);
-
internal::FEValues::FiniteElementRelatedData<dim,spacedim> &base_fe_output_object
= data->get_fe_output_object(base_no);
base_fe_output_object.initialize (quadrature.size(), base_element(base_no),
- flags | base_fe_data->update_each);
+ flags | base_element(base_no).requires_update_flags(flags));
+
+ // let base objects produce their scratch objects. they may
+ // also at this time write into the output objects we provide
+ // for them; it would be nice if we could already copy something
+ // out of the base output object into the system output object,
+ // but we can't because we can't know what the elements already
+ // copied and/or will want to update on every cell
+ typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
+ base_element(base_no).get_data (flags, mapping, quadrature,
+ base_fe_output_object);
data->set_fe_data(base_no, base_fe_data);
}
template <int dim, int spacedim>
typename FiniteElement<dim,spacedim>::InternalDataBase *
-FESystem<dim,spacedim>::get_face_data (const UpdateFlags flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const
+FESystem<dim,spacedim>::
+get_face_data (const UpdateFlags flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// create an internal data object and set the update flags we will need
// to deal with. the current object does not make use of these flags,
// function is called
for (unsigned int base_no=0; base_no<this->n_base_elements(); ++base_no)
{
- typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
- base_element(base_no).get_face_data (flags, mapping, quadrature);
-
internal::FEValues::FiniteElementRelatedData<dim,spacedim> &base_fe_output_object
= data->get_fe_output_object(base_no);
base_fe_output_object.initialize (quadrature.size(), base_element(base_no),
- flags | base_fe_data->update_each);
+ flags | base_element(base_no).requires_update_flags(flags));
+
+ // let base objects produce their scratch objects. they may
+ // also at this time write into the output objects we provide
+ // for them; it would be nice if we could already copy something
+ // out of the base output object into the system output object,
+ // but we can't because we can't know what the elements already
+ // copied and/or will want to update on every cell
+ typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
+ base_element(base_no).get_face_data (flags, mapping, quadrature,
+ base_fe_output_object);
data->set_fe_data(base_no, base_fe_data);
}
template <int dim, int spacedim>
typename FiniteElement<dim,spacedim>::InternalDataBase *
-FESystem<dim,spacedim>::get_subface_data (const UpdateFlags flags,
- const Mapping<dim,spacedim> &mapping,
- const Quadrature<dim-1> &quadrature) const
+FESystem<dim,spacedim>::
+get_subface_data (const UpdateFlags flags,
+ const Mapping<dim,spacedim> &mapping,
+ const Quadrature<dim-1> &quadrature,
+ dealii::internal::FEValues::FiniteElementRelatedData<dim, spacedim> &/*output_data*/) const
{
// create an internal data object and set the update flags we will need
// to deal with. the current object does not make use of these flags,
// function is called
for (unsigned int base_no=0; base_no<this->n_base_elements(); ++base_no)
{
- typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
- base_element(base_no).get_subface_data (flags, mapping, quadrature);
-
internal::FEValues::FiniteElementRelatedData<dim,spacedim> &base_fe_output_object
= data->get_fe_output_object(base_no);
base_fe_output_object.initialize (quadrature.size(), base_element(base_no),
- flags | base_fe_data->update_each);
+ flags | base_element(base_no).requires_update_flags(flags));
+
+ // let base objects produce their scratch objects. they may
+ // also at this time write into the output objects we provide
+ // for them; it would be nice if we could already copy something
+ // out of the base output object into the system output object,
+ // but we can't because we can't know what the elements already
+ // copied and/or will want to update on every cell
+ typename FiniteElement<dim,spacedim>::InternalDataBase *base_fe_data =
+ base_element(base_no).get_subface_data (flags, mapping, quadrature,
+ base_fe_output_object);
data->set_fe_data(base_no, base_fe_data);
}
const UpdateFlags flags = this->compute_update_flags (update_flags);
+ // initialize the base classes
+ this->mapping_output.initialize(this->n_quadrature_points, flags);
+ this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
+
// then get objects into which the FE and the Mapping can store
// intermediate data used across calls to reinit. we can do this in parallel
Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *>
*this->fe,
flags,
*this->mapping,
- quadrature);
+ quadrature,
+ this->finite_element_output);
Threads::Task<typename Mapping<dim,spacedim>::InternalDataBase *>
mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_data,
*this->mapping,
flags,
quadrature);
- // initialize the base classes
- this->mapping_output.initialize(this->n_quadrature_points, flags);
- this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
-
this->update_flags = flags;
// then collect answers from the two task above
{
const UpdateFlags flags = this->compute_update_flags (update_flags);
+ // initialize the base classes
+ this->mapping_output.initialize(this->n_quadrature_points, flags);
+ this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
+
// then get objects into which the FE and the Mapping can store
// intermediate data used across calls to reinit. this can be done in parallel
Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *>
*this->fe,
flags,
*this->mapping,
- this->quadrature);
+ this->quadrature,
+ this->finite_element_output);
Threads::Task<typename Mapping<dim,spacedim>::InternalDataBase *>
mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_face_data,
*this->mapping,
flags,
this->quadrature);
- // initialize the base classes
- this->mapping_output.initialize(this->n_quadrature_points, flags);
- this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
-
this->update_flags = flags;
// then collect answers from the two task above
{
const UpdateFlags flags = this->compute_update_flags (update_flags);
+ // initialize the base classes
+ this->mapping_output.initialize(this->n_quadrature_points, flags);
+ this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
+
// then get objects into which the FE and the Mapping can store
// intermediate data used across calls to reinit. this can be done
// in parallel
*this->fe,
flags,
*this->mapping,
- this->quadrature);
+ this->quadrature,
+ this->finite_element_output);
Threads::Task<typename Mapping<dim,spacedim>::InternalDataBase *>
mapping_get_data = Threads::new_task (&Mapping<dim,spacedim>::get_subface_data,
*this->mapping,
flags,
this->quadrature);
- // initialize the base classes
- this->mapping_output.initialize(this->n_quadrature_points, flags);
- this->finite_element_output.initialize(this->n_quadrature_points, *this->fe, flags);
-
this->update_flags = flags;
// then collect answers from the two task above