#ifndef INCLUDE_NASTGEOMETRY2DSTEP_H
#define INCLUDE_NASTGEOMETRY2DSTEP_H

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

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

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

    //-------------------------------------------------------------------------
    //                           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:
    // nicht impl.
    CNastGeometry2dStep( const CNastGeometry2dStep &other);	            
    const CNastGeometry2dStep& operator=( const CNastGeometry2dStep &other );

    //-------------------------------------------------------------------------
    //                            Membervariablen
    //-------------------------------------------------------------------------
    CNastBox2d m_box;		//  box um die Geometrie herum
    CNastBox2d m_boxStep;	//  die Stufe im Fluid
    double     m_velocity;
};
#endif // INCLUDE_NASTGEOMETRY2DSTEP_H

