// ============================================================================
// ==                                                                        ==
// == 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 AMDiS_fwd.h */


#ifndef AMDIS_AMDIS_FWD_INCLUDE
#define AMDIS_AMDIS_FWD_INCLUDE

#include <boost/numeric/mtl/mtl.hpp>

namespace AMDiS {

  class AdaptInfo;
  class AdaptStationary;
  class Assembler;
  class BasisFunction; 
  class BoundaryManager;
  class CGSolver;
  class CoarseningManager;
  class DiagonalPreconditioner; 
  class DOFAdmin; 
  class DOFContainer;
  class DOFIndexedBase;
  class DOFMatrix;
  class DOFVectorDOF;
  class Element;
  class ElementDofIterator;
  class ElInfo; 
  class ElMatrixInfo;
  class Estimator;
  class FastQuadrature;
  class FillInfo; 
  class FileWriterInterface;
  class FiniteElemSpace; 
  class Flag;
  class IdentityPreconditioner; 
  class InteriorBoundary;
  class ITL_BasePreconditioner;
  class LeafDataPeriodic;
  class LevelAdmin;
  class Line;
  class MacroElement;
  class MacroInfo;
  class Marker;
  class Mesh; 
  class MeshStructure;
  class OEMSolver;
  class Operator;
  class OperatorTerm;
  class Parametric;
  class PeriodicBC;
  class ProblemInstat;
  class ProblemInstatScal;
  class ProblemInstatVec;
  class ProblemIterationInterface;
  class ProblemScal;
  class ProblemStatBase;
  class ProblemTimeInterface;
  class ProblemVec;
  class Projection;
  class PreconditionerScal;
  class Quadrature; 
  class Q00PsiPhi;
  class Q0Psi;
  class Q10PsiPhi;
  class Q01PsiPhi;
  class Q1Psi;
  class RCNeighbourList;
  class RefinementManager;
  class RosenbrockAdaptInstationary;
  class RosenbrockStationary;
  class RobinBC;
  class SubElInfo;
  class SurfaceOperator;
  class SMIAdapter;
  class SystemVector;
  class Tetrahedron;
  class TraverseStack;
  class Triangle;
  class VertexInfo;
  class VertexVector;

  struct BoundaryObject;
  struct AtomicBoundary;

  template<typename ReturnType, typename ArgumentType> class AbstractFunction;
  template<typename T>                                 class DOFIndexed;
  template<typename T>                                 class DOFVectorBase;
  template<typename T>                                 class DOFVector;
  template<typename T>                                 class DimVec;
  template<typename T>                                 class DimMat;
  template<typename ITLSolver>                         class ITL_OEMSolver;
  template<typename T>                                 class ITL_Preconditioner;
  template<typename T>                                 class Matrix;
  template<typename T>                                 class MatrixOfFixVecs;
  template<typename T>                                 class MatVecMultiplier;
  template<typename T>                                 class SolverMatrix;
  template<typename T>                                 class Vector;
  template<typename T>                                 class WorldVector;
  template<typename T>                                 class WorldMatrix;
  template<typename T>                                 class VectorOfFixVecs;


  typedef mtl::dense2D<double>              ElementMatrix;
  typedef mtl::dense_vector<double>         ElementVector;

} // namespace AMDiS

#endif // AMDIS_AMDIS_FWD_INCLUDE