// ---------------------------------------------------------------------
// $Id: dof_accessor.inst.in 30407 2013-08-22 04:19:24Z kronbichler $
//
// Copyright (C) 1998 - 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.
//
// ---------------------------------------------------------------------



// TODO: This could surely be made more systematic!
for (deal_II_dimension : DIMENSIONS; lda : BOOL)
  {
// explicit instantiations (for DoFHandler)


#if deal_II_dimension == 2
    template class DoFAccessor<1, DoFHandler<2>, lda>;
    
    template class TriaRawIterator   <DoFAccessor<1, DoFHandler<2>, lda> >;
    template class TriaIterator      <DoFAccessor<1, DoFHandler<2>, lda> >;
    template class TriaActiveIterator<DoFAccessor<1, DoFHandler<2>, lda> >;
#endif

#if deal_II_dimension == 3
    template class DoFAccessor<1, DoFHandler<3>, lda>;
    template class DoFAccessor<2, DoFHandler<3>, lda>;
    
    template class TriaRawIterator   <DoFAccessor<1, DoFHandler<3>, lda> >;
    template class TriaIterator      <DoFAccessor<1, DoFHandler<3>, lda> >;
    template class TriaActiveIterator<DoFAccessor<1, DoFHandler<3>, lda> >;
    template class TriaRawIterator   <DoFAccessor<2, DoFHandler<3>, lda> >;
    template class TriaIterator      <DoFAccessor<2, DoFHandler<3>, lda> >;
    template class TriaActiveIterator<DoFAccessor<2, DoFHandler<3>, lda> >;
#endif

    template class DoFAccessor<deal_II_dimension, DoFHandler<deal_II_dimension>, lda>;
    template class DoFCellAccessor<DoFHandler<deal_II_dimension>, lda>;

    template class TriaRawIterator   <DoFCellAccessor<DoFHandler<deal_II_dimension>, lda> >;
    template class TriaIterator      <DoFCellAccessor<DoFHandler<deal_II_dimension>, lda> >;
    template class TriaActiveIterator<DoFCellAccessor<DoFHandler<deal_II_dimension>, lda> >;


// --------------------------------------------------------------------------
// explicit instantiations (for hp::DoFHandler)


#if deal_II_dimension == 2
    template class DoFAccessor<1, hp::DoFHandler<2>, lda>;
    template class TriaRawIterator   <DoFAccessor<1, hp::DoFHandler<2>, lda> >;
    template class TriaIterator      <DoFAccessor<1, hp::DoFHandler<2>, lda> >;
    template class TriaActiveIterator<DoFAccessor<1, hp::DoFHandler<2>, lda> >;
#endif


#if deal_II_dimension == 3
    template class DoFAccessor<1, hp::DoFHandler<3>, lda>;
    template class TriaRawIterator   <DoFAccessor<1, hp::DoFHandler<3>, lda> >;
    template class TriaIterator      <DoFAccessor<1, hp::DoFHandler<3>, lda> >;
    template class TriaActiveIterator<DoFAccessor<1, hp::DoFHandler<3>, lda> >;
    
    template class DoFAccessor<2, hp::DoFHandler<3>, lda>;
    template class TriaRawIterator   <DoFAccessor<2, hp::DoFHandler<3>, lda> >;
    template class TriaIterator      <DoFAccessor<2, hp::DoFHandler<3>, lda> >;
    template class TriaActiveIterator<DoFAccessor<2, hp::DoFHandler<3>, lda> >;
#endif

    template class DoFAccessor<deal_II_dimension, hp::DoFHandler<deal_II_dimension>, lda>;
    template class DoFCellAccessor<hp::DoFHandler<deal_II_dimension>, lda>;

    template class TriaRawIterator   <DoFCellAccessor<hp::DoFHandler<deal_II_dimension>, lda> >;
    template class TriaIterator      <DoFCellAccessor<hp::DoFHandler<deal_II_dimension>, lda> >;
    template class TriaActiveIterator<DoFCellAccessor<hp::DoFHandler<deal_II_dimension>, lda> >;



// // --------------------------------------------------------------------------
// // explicit instantiations (for DoFHandler)

#if deal_II_dimension == 1
    template class DoFAccessor<1, DoFHandler<1,2>, lda>;
#endif

#if deal_II_dimension == 2
    template class DoFAccessor<1, DoFHandler<2,3>, lda>;
    template class DoFAccessor<2, DoFHandler<2,3>, lda>;

    template class TriaRawIterator   <DoFAccessor<1, DoFHandler<2,3>, lda> >;
    template class TriaIterator      <DoFAccessor<1, DoFHandler<2,3>, lda> >;
    template class TriaActiveIterator<DoFAccessor<1, DoFHandler<2,3>, lda> >;
#endif


#if deal_II_dimension != 3
    template class DoFCellAccessor<DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda>;

    template class
      TriaRawIterator   <DoFCellAccessor<DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda> >;
    template class
      TriaIterator      <DoFCellAccessor<DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda> >;
    template class
      TriaActiveIterator<DoFCellAccessor<DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda> >;
#endif


#if deal_II_dimension == 3
    template class DoFCellAccessor<DoFHandler<1,3>, lda>;

    template class
      TriaRawIterator   <DoFCellAccessor<DoFHandler<1,3>, lda> >;
    template class
      TriaIterator      <DoFCellAccessor<DoFHandler<1,3>, lda> >;
    template class
      TriaActiveIterator<DoFCellAccessor<DoFHandler<1,3>, lda> >;
#endif


// --------------------------------------------------------------------------
// explicit instantiations (for hp::DoFHandler)

#if deal_II_dimension == 1
    template class DoFAccessor<1, hp::DoFHandler<1,2>, lda>;
    template class DoFAccessor<1, hp::DoFHandler<1,3>, lda>;
#endif

#if deal_II_dimension == 2
    template class DoFAccessor<1, hp::DoFHandler<2,3>, lda>;
    template class DoFAccessor<2, hp::DoFHandler<2,3>, lda>;

    template class TriaRawIterator   <DoFAccessor<1, hp::DoFHandler<2,3>, lda> >;
    template class TriaIterator      <DoFAccessor<1, hp::DoFHandler<2,3>, lda> >;
    template class TriaActiveIterator<DoFAccessor<1, hp::DoFHandler<2,3>, lda> >;
#endif

#if deal_II_dimension != 3
    template class DoFCellAccessor<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda>;

    template class
      TriaRawIterator   <DoFCellAccessor<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda> >;
    template class
      TriaIterator      <DoFCellAccessor<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda> >;
    template class
      TriaActiveIterator<DoFCellAccessor<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1>, lda> >;
#endif


#if deal_II_dimension == 3
    template class DoFCellAccessor<hp::DoFHandler<1,3>, lda>;

    template class
      TriaRawIterator   <DoFCellAccessor<hp::DoFHandler<1,3>, lda> >;
    template class
      TriaIterator      <DoFCellAccessor<hp::DoFHandler<1,3>, lda> >;
    template class
      TriaActiveIterator<DoFCellAccessor<hp::DoFHandler<1,3>, lda> >;
#endif
  }

