#ifndef INCLUDE_NASTGEOMETRY2DDRIVENCAVITY_H
#define INCLUDE_NASTGEOMETRY2DDRIVENCAVITY_H

//-----------------------------------------------------------------------------
//  NastGeometry2dDrivenCavity.h
//-----------------------------------------------------------------------------
//
//  Copyright (C) 1998 Technische Universitaet Muenchen, Germany
//  written by Bernhard Brueck
//
//  This file is part of Nast++
//
//-----------------------------------------------------------------------------
//  Implementation einer einfachen Geometriebeschreibung fuer Driven Cavity
//-----------------------------------------------------------------------------
//  Aenderungen:
//

#include "NastConfig.h"
#include "NastGeometry2d.h"
#include "NastBox2d.h"
#include "NastBoundaryPoint2d.h"

class CNastGeometry2dDrivenCavity : public CNastGeometry2d
{
public:
    //-------------------------------------------------------------------------
    //                         Konstruktor + Destruktor
    //-------------------------------------------------------------------------
    //  Konstruktor unter der Angabe der Groesse des Gebiets und der 
    /// Geschwindigkeit des Bandes
    //  
    CNastGeometry2dDrivenCavity( const CNastBox2d &boundingBox,
        			 double velocity );
    ~CNastGeometry2dDrivenCavity();

    //-------------------------------------------------------------------------
    //                           Memberfunktionen
    //-------------------------------------------------------------------------
    virtual CNastBox2d boundingBox() const;

    virtual void setCells( CNastCellField2d &cellField ) const;

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

    //-------------------------------------------------------------------------
    //                                  Debug
    //-------------------------------------------------------------------------
    //  debugInfo    gibt Information ueber den Zustand des Objekts aus
    //  assertValid  testet das Objekt auf Integritaet
    //
    virtual void debugDump( CNastDumpContext &dumpContext ) const;
    virtual void assertValid() const;
private:
    //-------------------------------------------------------------------------
    //                            Membervariablen
    //-------------------------------------------------------------------------
    CNastBox2d m_box;		//  box um die Geometrie herum
    double     m_velocity;
};
#endif // INCLUDE_NASTGEOMETRY2DDRIVENCAVITY_H

