Skip to content
Snippets Groups Projects
GridEntity_impl.h 22.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    /***************************************************************************
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
                              GridEntity_impl.h  -  description
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
                                 -------------------
        begin                : Nov 20, 2015
        copyright            : (C) 2015 by Tomas Oberhuber
        email                : tomas.oberhuber@fjfi.cvut.cz
     ***************************************************************************/
    
    
    /* See Copyright Notice in tnl/Copyright */
    
    #pragma once
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    #include <TNL/Meshes/GridDetails/BoundaryGridEntityChecker.h>
    #include <TNL/Meshes/GridDetails/GridEntityCenterGetter.h>
    #include <TNL/Meshes/GridDetails/GridEntityMeasureGetter.h>
    #include <TNL/Meshes/GridEntity.h>
    
    namespace TNL {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    namespace Meshes {
    
    /*template< int Dimensions,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              typename Real,
              typename Device,
    
              typename Index,          typename Config,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions >::
    GridEntity()
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    GridEntity( const Meshes::Grid< Dimensions, Real, Device, Index >& grid )
    
    : grid( grid ),
    
      entityIndex( -1 ),
    
      coordinates( 0 ),
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
      orientation( 0 ),
    
      basis( 0 ),
      neighbourEntitiesStorage( *this )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    GridEntity( const Meshes::Grid< Dimensions, Real, Device, Index >& grid,
    
                   const CoordinatesType& coordinates,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
                   const EntityOrientationType& orientation,
                   const EntityBasisType& basis )
    
    : grid( grid ),
    
      entityIndex( -1 ),
    
      coordinates( coordinates ),
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
      orientation( orientation ),
    
      basis( basis ),
      neighbourEntitiesStorage( *this )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::CoordinatesType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCoordinates() const
    {
       return this->coordinates;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::CoordinatesType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCoordinates()
    {
       return this->coordinates;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    setCoordinates( const CoordinatesType& coordinates )
    {
       this->coordinates = coordinates;
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    void
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    refresh()
    
       this->entityIndex = this->grid.getEntityIndex( *this );
       this->neighbourEntitiesStorage.refresh( this->grid, this->entityIndex );
    
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    Index
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       typedef Meshes::Grid< Dimensions, Real, Device, Index > GridType;
    
       typedef typename GridType::template MeshEntity< EntityDimensions > EntityType;
    
       Assert( this->entityIndex >= 0 &&
    
                  this-> entityIndex < grid.template getEntitiesCount< EntityType >(),
    
                  std::cerr << "this->entityIndex = " << this->entityIndex
    
                       << " grid.template getEntitiesCount< EntityDimensions >() = " << grid.template getEntitiesCount< EntityType >() );
    
       Assert( this->entityIndex == grid.getEntityIndex( *this ),
    
                  std::cerr << "this->entityIndex = " << this->entityIndex
    
                       << " grid.getEntityIndex( *this ) = " << grid.getEntityIndex( *this ) );
       return this->entityIndex;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::EntityOrientationType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getOrientation() const
    {
       return this->orientation;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    setOrientation( const EntityOrientationType& orientation )
    {
       this->orientation = orientation;
    
       this->basis = EntityBasisType( 1 ) - abs( orientation );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::EntityBasisType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getBasis() const
    {
       return this->basis;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    setBasis( const EntityBasisType& basis )
    {
       this->basis = basis;
    
       this->orientation = EntityOrientationType( 1 ) - abs( basis );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
       template< int NeighbourEntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::template NeighbourEntities< NeighbourEntityDimensions >&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    getNeighbourEntities() const
    
       return neighbourEntitiesStorage.template getNeighbourEntities< NeighbourEntityDimensions >();
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    bool
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    isBoundaryEntity() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return BoundaryGridEntityChecker< ThisType >::isBoundaryEntity( *this );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
              int EntityDimensions,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename Meshes::Grid< Dimensions, Real, Device, Index >::VertexType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCenter() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return GridEntityCenterGetter< ThisType >::getEntityCenter( *this );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              int EntityDimensions,
              typename Config >
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::RealType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return GridEntityMeasureGetter< GridType, EntityDimensions >::getMeasure( this->getMesh(), *this );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              int EntityDimensions,
              typename Config >
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::GridType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, EntityDimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    /****
     * Specialization for cells
     */
    
    /*template< int Dimensions,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions >::
    GridEntity()
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    GridEntity( const GridType& grid )
    
      entityIndex( -1 ),
      neighbourEntitiesStorage( *this )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       this->coordinates = CoordinatesType( ( Index ) 0 );
       this->orientation = EntityOrientationType( ( Index ) 0 );
       this->basis = EntityBasisType( ( Index ) 1 );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    GridEntity( const GridType& grid,
    
                   const CoordinatesType& coordinates,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
                   const EntityOrientationType& orientation,
                   const EntityBasisType& basis )
    
    : grid( grid ),
    
      entityIndex( -1 ),
    
      coordinates( coordinates ),
      neighbourEntitiesStorage( *this )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    {
       this->orientation = EntityOrientationType( ( Index ) 0 );
       this->basis = EntityBasisType( ( Index ) 1 );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::CoordinatesType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCoordinates() const
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::CoordinatesType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCoordinates()
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    setCoordinates( const CoordinatesType& coordinates )
    {
       this->coordinates = coordinates;
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    void
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    refresh()
    
       this->entityIndex = this->grid.getEntityIndex( *this );
       this->neighbourEntitiesStorage.refresh( this->grid, this->entityIndex );
    
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    Index
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
       Assert( this->entityIndex >= 0 &&
    
                  this-> entityIndex < grid.template getEntitiesCount< ThisType >(),
    
                  std::cerr << "this->entityIndex = " << this->entityIndex
    
                       << " grid.template getEntitiesCount< Dimensions >() = " << grid.template getEntitiesCount< ThisType >() );
    
       Assert( this->entityIndex == grid.getEntityIndex( *this ),
    
                  std::cerr << "this->index = " << this->entityIndex
    
                       << " grid.getEntityIndex( *this ) = " << grid.getEntityIndex( *this ) );
       return this->entityIndex;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::EntityOrientationType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getOrientation() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return EntityOrientationType( ( IndexType ) 0 );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::EntityBasisType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getBasis() const
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return EntityBasisType( ( IndexType ) 1 );
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
       template< int NeighbourEntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::template NeighbourEntities< NeighbourEntityDimensions >&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    getNeighbourEntities() const
    {
    
       return neighbourEntitiesStorage.template getNeighbourEntities< NeighbourEntityDimensions >();
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    bool
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    isBoundaryEntity() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return BoundaryGridEntityChecker< ThisType >::isBoundaryEntity( *this );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename Meshes::Grid< Dimensions, Real, Device, Index >::VertexType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCenter() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return GridEntityCenterGetter< ThisType >::getEntityCenter( *this );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              typename Config >
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::RealType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    getMeasure() const
    {
       return this->getMesh().getCellMeasure();
    }
    
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::VertexType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getEntityProportions() const
    {
       return grid.getSpaceSteps();
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              typename Config >
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::GridType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, Dimensions, Config >::
    
    {
       return this->grid;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    /****
     * Specialization for vertices
     */
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    GridEntity( const GridType& grid )
    
     : grid( grid ),
    
       entityIndex( -1 ),
    
       coordinates( 0 ),
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       orientation( 1 ),
    
       basis( 0 ),
       neighbourEntitiesStorage( *this )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    GridEntity( const GridType& grid,
    
                   const CoordinatesType& coordinates,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
                   const EntityOrientationType& orientation,
                   const EntityBasisType& basis )
    
    : grid( grid ),
    
      entityIndex( -1 ),
    
      coordinates( coordinates ),
    
      orientation( orientation ),
      basis( basis ),
    
      neighbourEntitiesStorage( *this )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::CoordinatesType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCoordinates() const
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::CoordinatesType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCoordinates()
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    setCoordinates( const CoordinatesType& coordinates )
    {
       this->coordinates = coordinates;
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    void
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    refresh()
    
       this->entityIndex = this->grid.getEntityIndex( *this );
       this->neighbourEntitiesStorage.refresh( this->grid, this->entityIndex );
    
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    Index
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       typedef Meshes::Grid< Dimensions, Real, Device, Index > GridType;
    
       typedef typename GridType::Vertex Vertex;
    
       Assert( this->entityIndex >= 0 &&
    
                  this-> entityIndex < grid.template getEntitiesCount< Vertex >(),
    
                  std::cerr << "this->entityIndex = " << this->entityIndex
    
                       << " grid.template getEntitiesCount< 0 >() = " << grid.template getEntitiesCount< Vertex >() );
    
       Assert( this->entityIndex == grid.getEntityIndex( *this ),
    
                  std::cerr << "this->entityIndex = " << this->entityIndex
    
                       << " grid.getEntityIndex( *this ) = " << grid.getEntityIndex( *this ) );
       return this->entityIndex;
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::EntityOrientationType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getOrientation() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return EntityOrientationType( ( IndexType ) 0 );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::EntityBasisType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getBasis() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return EntityBasisType( ( IndexType ) 0 );
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
       template< int NeighbourEntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::template NeighbourEntities< NeighbourEntityDimensions >&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    getNeighbourEntities() const
    {
    
       return neighbourEntitiesStorage.template getNeighbourEntities< NeighbourEntityDimensions >();
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    bool
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    isBoundaryEntity() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return BoundaryGridEntityChecker< ThisType >::isBoundaryEntity( *this );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename Meshes::Grid< Dimensions, Real, Device, Index >::VertexType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getCenter() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return GridEntityCenterGetter< ThisType >::getEntityCenter( *this );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              typename Config >
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::RealType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
    
              typename Index,
              typename Config >
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::VertexType
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    getEntityProportions() const
    {
       return VertexType( 0.0 );
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              typename Config >
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::GridType&
    GridEntity< Meshes::Grid< Dimensions, Real, Device, Index >, 0, Config >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    } // namespace Meshes
    
    } // namespace TNL