// ============================================================================
// ==                                                                        ==
// == AMDiS - Adaptive multidimensional simulations                          ==
// ==                                                                        ==
// ============================================================================
// ==                                                                        ==
// ==  TU Dresden                                                            ==
// ==                                                                        ==
// ==  Institut f�r Wissenschaftliches Rechnen                               ==
// ==  Zellescher Weg 12-14                                                  ==
// ==  01069 Dresden                                                         ==
// ==  germany                                                               ==
// ==                                                                        ==
// ============================================================================
// ==                                                                        ==
// ==  https://gforge.zih.tu-dresden.de/projects/amdis/                      ==
// ==                                                                        ==
// ============================================================================

/** \file CoarseningManager1d.h */

#ifndef AMDIS_COARSENINGMANAGER_1D_H
#define AMDIS_COARSENINGMANAGER_1D_H

#include "CoarseningManager.h"

namespace AMDiS {

  /** \ingroup Adaption 
   * \brief
   * Implements a CoarseningManager for 1-dimensional meshes.
   */
  class CoarseningManager1d : public CoarseningManager
  {
  public:
    /// Calls base class constructor and checks dimension of mesh. 
    CoarseningManager1d() 
      : CoarseningManager() 
    {}

    /// destructor
    virtual ~CoarseningManager1d() {}

    /** \brief
     * Overloads CoarseningManager::coarsenMesh. In 1d a simple recursive
     * coarsening algorithm is implemented which doesn't need coarsenFunction.
     */
    Flag coarsenMesh(Mesh *aMesh);

  protected:
    /// Not needed in this sub class
    int coarsenFunction(ElInfo *) 
    {
      FUNCNAME("CoarseningManager1d::coarsenFunction");
      ERROR_EXIT("not used for dim = 1");
      return 0;
    }
  
    /// Needed instead of coarsenFunction in 1d.
    int coarsenRecursive(Line *parent);
  
  };

}

#endif // AMDIS_COARSENINGMANAGER_1D_H