#ifndef INCLUDE_NASTGEOMETRY2D_H
#define INCLUDE_NASTGEOMETRY2D_H
//-----------------------------------------------------------------------------
// NastGeometry2d.h
//-----------------------------------------------------------------------------
//
//  Copyright (C) 1998 Technische Universitaet Muenchen, Germany
//                   written by Bernhard Brueck
//
//  This file is part of Nast++
//
//-----------------------------------------------------------------------------
// CNastGeometry2d stellt die Schnittstelle zur Geometriebeschreibung dar.
// Es handelt sich dabei um eine abstrakte Basisklasse die folgende Funktion
// vorschreibt:
//  boundingBox    liefert Ausdehnung der Geometrie
//  inside         gibt an welche Zellen innerhalb der Geometrie liegen
//  boundaryPoint  liefert eine Punkt auf dem Rand (siehe CNastBoundaryPoint2d)
//  isMovable      true falls die Goemetrie bewegt werden muss
//  move           bewegt die Geometrie Anhand der Ergebnisse aus der 
//                 Loesung der Navier-Stokes-Gleichungen
//-----------------------------------------------------------------------------
//  Aenderungen:
//     

#include "NastConfig.h"
#include "NastObject.h"
#include "NastBoundaryPoint2d.h"

template<class T> class CNastArray2d;

class CNastNavierStokes;
class CNastBox2d;
class CNastCellField2d;

class CNastGeometry2d : public CNastObject
{
public:
    //-------------------------------------------------------------------------
    //                           Memberfunktionen
    //-------------------------------------------------------------------------
    virtual CNastBox2d boundingBox() const = 0;

    virtual void setCells( CNastCellField2d &cellField ) const = 0;

    virtual CNastBoundaryPoint2d boundaryPoint( const CNastPoint2d &pnt,
        					const CNastVector2d &direction ) const = 0;
    virtual bool isMovable() const = 0 ;
    virtual void move( const CNastNavierStokes &solution ) = 0;
    virtual double maxTimeStep() const = 0;
};

#endif // INCLUDE_NASTGEOMETRY2D_H

