// ---------------------------------------------------------------------
//
// Copyright (C) 2019 - 2021 by the deal.II authors
//
// This file is part of the deal.II library.
//
// The deal.II library is free software; you can use it, redistribute
// it, and/or modify it under the terms of the GNU Lesser General
// Public License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// The full text of the license can be found in the file LICENSE.md at
// the top level directory of deal.II.
//
// ---------------------------------------------------------------------



for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension : SPACE_DIMENSIONS)
  {
#if deal_II_dimension <= deal_II_space_dimension
    namespace hp
    \{
      namespace Refinement
      \{
        template void
        full_p_adaptivity<deal_II_dimension, deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &);

        template void
        p_adaptivity_from_flags<deal_II_dimension, deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const std::vector<bool> &);

        template void
        force_p_over_h<deal_II_dimension, deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &);

        template void
        choose_p_over_h<deal_II_dimension, deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &);

        template bool
        limit_p_level_difference<deal_II_dimension, deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const unsigned int,
          const unsigned int);
      \}
    \}
#endif
  }

for (deal_II_dimension : DIMENSIONS; S : REAL_SCALARS;
     deal_II_space_dimension : SPACE_DIMENSIONS)
  {
#if deal_II_dimension <= deal_II_space_dimension
    namespace hp
    \{
      namespace Refinement
      \{
        template void
        p_adaptivity_from_absolute_threshold<deal_II_dimension,
                                             S,
                                             deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const Vector<S> &,
          const S,
          const S,
          const ComparisonFunction<typename identity<S>::type> &,
          const ComparisonFunction<typename identity<S>::type> &);

        template void
        p_adaptivity_from_relative_threshold<deal_II_dimension,
                                             S,
                                             deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const Vector<S> &,
          const double,
          const double,
          const ComparisonFunction<typename identity<S>::type> &,
          const ComparisonFunction<typename identity<S>::type> &);

        template void
        p_adaptivity_fixed_number<deal_II_dimension,
                                  S,
                                  deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const Vector<S> &,
          const double,
          const double,
          const ComparisonFunction<typename identity<S>::type> &,
          const ComparisonFunction<typename identity<S>::type> &);

        template void
        p_adaptivity_from_regularity<deal_II_dimension,
                                     S,
                                     deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const Vector<S> &);

        template void
        p_adaptivity_from_reference<deal_II_dimension,
                                    S,
                                    deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const Vector<S> &,
          const Vector<S> &,
          const ComparisonFunction<typename identity<S>::type> &,
          const ComparisonFunction<typename identity<S>::type> &);

        template void
        predict_error<deal_II_dimension, S, deal_II_space_dimension>(
          const dealii::DoFHandler<deal_II_dimension, deal_II_space_dimension>
            &,
          const Vector<S> &,
          Vector<S> &,
          const double,
          const double,
          const double);
      \}
    \}
#endif
  }
