// ---------------------------------------------------------------------
// $Id: dof_tools_constraints.inst.in 30755 2013-09-17 01:57:18Z bangerth $
//
// Copyright (C) 2009 - 2013 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 at
// the top level of the deal.II distribution.
//
// ---------------------------------------------------------------------




for (DH : DOFHANDLERS; deal_II_dimension : DIMENSIONS)
{
  template
  void
  DoFTools::make_hanging_node_constraints (const DH &dof_handler,
                                           ConstraintMatrix &constraints);

#if deal_II_dimension != 1
  template
  void
  DoFTools::make_periodicity_constraints (const DH::face_iterator &,
                                          const DH::face_iterator &,
                                          dealii::ConstraintMatrix &,
                                          const ComponentMask &,
                                          bool, bool, bool);

  template
  void
  DoFTools::make_periodicity_constraints(const DH &,
                                         const types::boundary_id,
                                         const types::boundary_id,
                                         const int,
                                         dealii::ConstraintMatrix &,
                                         const ComponentMask &);

  template
  void
  DoFTools::make_periodicity_constraints(const DH &,
                                         const types::boundary_id,
                                         const types::boundary_id,
                                         const int,
                                         dealii::Tensor<1,DH::space_dimension> &,
                                         dealii::ConstraintMatrix &,
                                         const ComponentMask &);

  template
  void
  DoFTools::make_periodicity_constraints(const DH &,
                                         const types::boundary_id,
                                         const int,
                                         dealii::ConstraintMatrix &,
                                         const ComponentMask &);

  template
  void
  DoFTools::make_periodicity_constraints(const DH &,
                                         const types::boundary_id,
                                         const int,
                                         dealii::Tensor<1,DH::space_dimension> &,
                                         dealii::ConstraintMatrix &,
                                         const ComponentMask &);

  template
  void
  DoFTools::make_periodicity_constraints<DH>
  (const std::vector<GridTools::PeriodicFacePair<DH::cell_iterator> > &,
   dealii::ConstraintMatrix &,
   const ComponentMask &);
  
#endif
}

for (deal_II_dimension : DIMENSIONS)
{
#if deal_II_dimension != 1
  template
  void
  DoFTools::make_hanging_node_constraints (const MGDoFHandler<deal_II_dimension> &dof_handler,
                                           ConstraintMatrix &constraints);

#endif

#if deal_II_dimension < 3

template
void
DoFTools::
make_hanging_node_constraints (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &dof_handler,
                               ConstraintMatrix &constraints);
#endif

#if deal_II_dimension == 3
template
void
DoFTools::
make_hanging_node_constraints (const DoFHandler<1,3> &dof_handler,
                               ConstraintMatrix &constraints);
#endif

template
void
DoFTools::make_zero_boundary_constraints
(const DoFHandler<deal_II_dimension> &,
 ConstraintMatrix                    &,
 const ComponentMask             &);

template
void
DoFTools::make_zero_boundary_constraints
(const DoFHandler<deal_II_dimension> &,
 const types::boundary_id          ,
 ConstraintMatrix                    &,
 const ComponentMask             &);

template
void
DoFTools::make_zero_boundary_constraints
(const hp::DoFHandler<deal_II_dimension> &,
 ConstraintMatrix                        &,
 const ComponentMask                 &);

template
void
DoFTools::make_zero_boundary_constraints
(const hp::DoFHandler<deal_II_dimension> &,
 const types::boundary_id          ,
 ConstraintMatrix                        &,
 const ComponentMask                 &);

template
void
DoFTools::compute_intergrid_constraints<deal_II_dimension> (
  const DoFHandler<deal_II_dimension> &, const unsigned int,
  const DoFHandler<deal_II_dimension> &, const unsigned int,
  const InterGridMap<DoFHandler<deal_II_dimension> > &,
  ConstraintMatrix&);

template
void
DoFTools::compute_intergrid_transfer_representation<deal_II_dimension>
(const DoFHandler<deal_II_dimension> &, const unsigned int,
 const DoFHandler<deal_II_dimension> &, const unsigned int,
 const InterGridMap<DoFHandler<deal_II_dimension> > &,
 std::vector<std::map<types::global_dof_index, float> > &);

}
