Skip to content
Snippets Groups Projects
tnlGrid.h 7.69 KiB
Newer Older
  • Learn to ignore specific revisions
  • /***************************************************************************
    
                              tnlExplicitTimeStepper.h  -  description
    
        begin                : Jan 16, 2013
        copyright            : (C) 2013 by Tomas Oberhuber
    
        email                : tomas.oberhuber@fjfi.cvut.cz
     ***************************************************************************/
    
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   (at your option) any later version.                                   *
     *                                                                         *
     ***************************************************************************/
    
    #ifndef TNLGRID_H_
    #define TNLGRID_H_
    
    
    #include <core/tnlObject.h>
    #include <core/tnlHost.h>
    #include <core/tnlTuple.h>
    
    #include <mesh/tnlIdenticalGridGeometry.h>
    
    template< int Dimensions,
              typename Real = double,
              typename Device = tnlHost,
    
              typename Index = int,
              template< int, typename, typename, typename > class Geometry = tnlIdenticalGridGeometry >
    
    class tnlGrid : public tnlObject
    
    template< typename Real,
              typename Device,
    
              typename Index,
              template< int, typename, typename, typename > class Geometry >
    class tnlGrid< 1, Real, Device, Index, Geometry > : public tnlObject
    
       typedef Real RealType;
       typedef Device DeviceType;
       typedef Index IndexType;
    
       typedef Geometry< 1, Real, Device, Index > GeometryType;
    
       typedef tnlTuple< 1, Real > VertexType;
       typedef tnlTuple< 1, Index > CoordinatesType;
    
    
       enum { Dimensions = 1};
    
       tnlGrid();
    
       static tnlString getTypeStatic();
    
       void setDimensions( const Index xSize );
    
       void setDimensions( const CoordinatesType& );
    
       const CoordinatesType& getDimensions() const;
    
       void setOrigin( const VertexType& origin );
    
       const VertexType& getOrigin() const;
    
       void setProportions( const VertexType& proportions );
    
       const VertexType& getProportions() const;
    
       void setParametricStep( const VertexType& spaceStep );
    
       const VertexType& getParametricStep() const;
    
       Index getElementIndex( const Index i ) const;
    
       Index getDofs() const;
    
       //! Method for saving the object to a file as a binary data
       bool save( tnlFile& file ) const;
    
       //! Method for restoring the object from a file
       bool load( tnlFile& file );
    
       bool save( const tnlString& fileName ) const;
    
       bool load( const tnlString& fileName );
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       template< typename MeshFunction >
       bool write( const MeshFunction& function,
                    const tnlString& fileName,
                    const tnlString& format ) const;
    
    
       protected:
    
       tnlTuple< 1, IndexType > dimensions;
    
       tnlTuple< 1, RealType > origin, proportions;
    
       IndexType dofs;
    
       GeometryType geometry;
    
    
    template< typename Real,
              typename Device,
    
              typename Index,
              template< int, typename, typename, typename > class Geometry >
    class tnlGrid< 2, Real, Device, Index, Geometry > : public tnlObject
    
       typedef Real RealType;
       typedef Device DeviceType;
       typedef Index IndexType;
    
       typedef Geometry< 2, Real, Device, Index > GeometryType;
    
       typedef tnlTuple< 2, Real > VertexType;
       typedef tnlTuple< 2, Index > CoordinatesType;
    
       enum { Dimensions = 2};
    
       tnlGrid();
    
       static tnlString getTypeStatic();
    
       void setDimensions( const Index xSize, const Index ySize );
    
       void setDimensions( const CoordinatesType& );
    
       const CoordinatesType& getDimensions() const;
    
       void setOrigin( const VertexType& origin );
    
       const VertexType& getOrigin() const;
    
       void setProportions( const VertexType& proportions );
    
       const VertexType& getProportions() const;
    
       void setParametricStep( const VertexType& spaceStep );
    
       const VertexType& getParametricStep() const;
    
       Index getElementIndex( const Index i,
                              const Index j ) const;
    
       void getElementCoordinates( const Index i,
    
                                   CoordinatesType& coordinates ) const;
    
       Index getElementNeighbour( const Index Element,
    
                                  const Index dx,
                                  const Index dy ) const;
    
       Index getDofs() const;
    
       void getElementCenter( const CoordinatesType& coordinates,
                              VertexType& center ) const;
    
       Real getElementMeasure( const CoordinatesType& coordinates ) const;
    
       template< int dx, int dy >
       void getEdgeNormal( const CoordinatesType& elementCoordinates,
                           VertexType& normal ) const;
    
       template< int dx, int dy >
       void getVertex( const CoordinatesType& elementCoordinates,
                       VertexType& vertex ) const;
    
       Real getElementsDistance( const CoordinatesType& c1,
                                 const CoordinatesType& c2 ) const;
    
       /*template< int dy, int dx >
    
       Real getEdgeLength( const Index j,
    
       //! Method for saving the object to a file as a binary data
       bool save( tnlFile& file ) const;
    
       //! Method for restoring the object from a file
       bool load( tnlFile& file );
    
       bool save( const tnlString& fileName ) const;
    
       bool load( const tnlString& fileName );
    
    
       template< typename MeshFunction >
       bool write( const MeshFunction& function,
    
                   const tnlString& fileName,
                   const tnlString& format ) const;
    
       protected:
    
       tnlTuple< 2, IndexType > dimensions;
    
       tnlTuple< 2, RealType > origin, proportions;
    
       GeometryType geometry;
    
    
       IndexType dofs;
    
    template< typename Real,
              typename Device,
    
              typename Index,
              template< int, typename, typename, typename > class Geometry >
    class tnlGrid< 3, Real, Device, Index, Geometry > : public tnlObject
    
       typedef Real RealType;
       typedef Device DeviceType;
       typedef Index IndexType;
    
       typedef Geometry< 2, Real, Device, Index > GeometryType;
       typedef tnlTuple< 3, Real > VertexType;
       typedef tnlTuple< 3, Index > CoordinatesType;
    
       enum { Dimensions = 3};
    
       tnlGrid();
    
       static tnlString getTypeStatic();
    
       void setDimensions( const Index xSize, const Index ySize, const Index zSize );
    
       void setDimensions( const CoordinatesType& );
    
       const CoordinatesType& getDimensions() const;
    
       void setOrigin( const VertexType& origin );
    
       const VertexType& getOrigin() const;
    
       void setProportions( const VertexType& proportions );
    
       const VertexType& getProportions() const;
    
       void setParametricStep( const VertexType& spaceStep );
    
       const VertexType& getParametricStep() const;
    
       Index getElementIndex( const Index i, const Index j, const Index k ) const;
    
       Index getDofs() const;
    
       //! Method for saving the object to a file as a binary data
       bool save( tnlFile& file ) const;
    
       //! Method for restoring the object from a file
       bool load( tnlFile& file );
    
       bool save( const tnlString& fileName ) const;
    
       bool load( const tnlString& fileName );
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       template< typename MeshFunction >
       bool write( const MeshFunction& function,
                    const tnlString& fileName,
                    const tnlString& format ) const;
    
    
       tnlTuple< 3, IndexType > dimensions;
    
       tnlTuple< 3, RealType > origin, proportions;
    
       IndexType dofs;
    
    #include <implementation/mesh/tnlGrid1D_impl.h>
    #include <implementation/mesh/tnlGrid2D_impl.h>
    #include <implementation/mesh/tnlGrid3D_impl.h>
    
    #endif /* TNLGRID_H_ */