Skip to content

Commit

Permalink
Use ReadVector in VectorTools::integrate_difference().
Browse files Browse the repository at this point in the history
  • Loading branch information
drwells committed May 13, 2023
1 parent 70af671 commit d703208
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 138 deletions.
92 changes: 42 additions & 50 deletions include/deal.II/numerics/vector_tools_integrate_difference.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,70 +141,62 @@ namespace VectorTools
* the documentation of the namespace, OutVector only Vector<double> and
* Vector<float>.
*/
template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const Mapping<dim, spacedim> & mapping,
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim, double> * weight = nullptr,
const double exponent = 2.);
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(const Mapping<dim, spacedim> & mapping,
const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim, double> *weight = nullptr,
const double exponent = 2.);

/**
* Call the integrate_difference() function, see above, with
* <tt>mapping=MappingQ@<dim@>(1)</tt>.
*/
template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim, double> * weight = nullptr,
const double exponent = 2.);
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim, double> *weight = nullptr,
const double exponent = 2.);

/**
* Same as above for hp.
*/
template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const hp::MappingCollection<dim, spacedim> & mapping,
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim, double> * weight = nullptr,
const double exponent = 2.);
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(const hp::MappingCollection<dim, spacedim> &mapping,
const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> &exact_solution,
OutVector & difference,
const hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim, double> *weight = nullptr,
const double exponent = 2.);

/**
* Call the integrate_difference() function, see above, with
* <tt>mapping=MappingQ@<dim@>(1)</tt>.
*/
template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim, double> * weight = nullptr,
const double exponent = 2.);
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> &exact_solution,
OutVector & difference,
const hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim, double> *weight = nullptr,
const double exponent = 2.);

/**
* Take a Vector @p cellwise_error of errors on each cell with
Expand Down
116 changes: 53 additions & 63 deletions include/deal.II/numerics/vector_tools_integrate_difference.templates.h
Original file line number Diff line number Diff line change
Expand Up @@ -431,22 +431,19 @@ namespace VectorTools



template <int dim, int spacedim, class InVector, class OutVector>
DEAL_II_CXX20_REQUIRES(
concepts::is_dealii_vector_type<InVector>
&&concepts::is_writable_dealii_vector_type<OutVector>)
template <int dim, int spacedim, typename Number, class OutVector>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
static void do_integrate_difference(
const dealii::hp::MappingCollection<dim, spacedim> & mapping,
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const dealii::hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent_1)
const dealii::hp::MappingCollection<dim, spacedim> &mapping,
const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> & exact_solution,
OutVector & difference,
const dealii::hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent_1)
{
using Number = typename InVector::value_type;
// we mark the "exponent" parameter to this function "const" since it is
// strictly incoming, but we need to set it to something different later
// on, if necessary, so have a read-write version of it:
Expand Down Expand Up @@ -553,19 +550,17 @@ namespace VectorTools



template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const Mapping<dim, spacedim> & mapping,
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(const Mapping<dim, spacedim> & mapping,
const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
{
internal::do_integrate_difference(hp::MappingCollection<dim, spacedim>(
mapping),
Expand All @@ -580,18 +575,16 @@ namespace VectorTools
}


template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> &exact_solution,
OutVector & difference,
const Quadrature<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
{
internal::do_integrate_difference(
hp::StaticMappingQ1<dim, spacedim>::mapping_collection,
Expand All @@ -606,19 +599,18 @@ namespace VectorTools
}


template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const dealii::hp::MappingCollection<dim, spacedim> & mapping,
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const dealii::hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
const dealii::hp::MappingCollection<dim, spacedim> &mapping,
const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> & exact_solution,
OutVector & difference,
const dealii::hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
{
internal::do_integrate_difference(mapping,
dof,
Expand All @@ -631,18 +623,16 @@ namespace VectorTools
exponent);
}

template <int dim, class InVector, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_dealii_vector_type<InVector> &&
concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(
const DoFHandler<dim, spacedim> & dof,
const InVector & fe_function,
const Function<spacedim, typename InVector::value_type> &exact_solution,
OutVector & difference,
const dealii::hp::QCollection<dim> & q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
template <int dim, typename Number, class OutVector, int spacedim>
DEAL_II_CXX20_REQUIRES(concepts::is_writable_dealii_vector_type<OutVector>)
void integrate_difference(const DoFHandler<dim, spacedim> & dof,
const ReadVector<Number> & fe_function,
const Function<spacedim, Number> & exact_solution,
OutVector & difference,
const dealii::hp::QCollection<dim> &q,
const NormType & norm,
const Function<spacedim> * weight,
const double exponent)
{
internal::do_integrate_difference(
hp::StaticMappingQ1<dim, spacedim>::mapping_collection,
Expand Down

0 comments on commit d703208

Please sign in to comment.