Skip to content
Snippets Groups Projects
tnlGridEntity_impl.h 16.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    /***************************************************************************
                              tnlGridEntity_impl.h  -  description
                                 -------------------
        begin                : Nov 20, 2015
        copyright            : (C) 2015 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 TNLGRIDENTITY_IMPL_H
    #define TNLGRIDENTITY_IMPL_H
    
    #include "tnlGridEntity.h"
    
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity()
    
    {
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    tnlGridEntity( const tnlGrid< Dimensions, Real, Device, Index >& grid )
    : grid( grid ),
    
      entityIndex( -1 ),
    
      coordinates( 0 ),
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
      orientation( 0 ),
      basis( 0 ) 
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    tnlGridEntity( const tnlGrid< 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 )
    {  
    }
    
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::CoordinatesType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    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,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::CoordinatesType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    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 >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    setCoordinates( const CoordinatesType& coordinates )
    {
       this->coordinates = coordinates;
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              int EntityDimensions >
    __cuda_callable__ inline
    void
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    setIndex( IndexType entityIndex )
    {
       tnlAssert( entityIndex >= 0 &&
                  entityIndex < grid.template getEntitiesCount< EntityDimensions >(),
                  cerr << "entityIndex = " << entityIndex
                       << " grid.template getEntitiesCount< EntityDimensions >() = " << grid.template getEntitiesCount< EntityDimensions >() );
       this->entityIndex = entityIndex;                   
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              int EntityDimensions >
    __cuda_callable__ inline
    Index
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    getIndex() const
    {
       tnlAssert( this->entityIndex >= 0 &&
                  this-> entityIndex < grid.template getEntitiesCount< EntityDimensions >(),
                  cerr << "this->entityIndex = " << this->entityIndex
                       << " grid.template getEntitiesCount< EntityDimensions >() = " << grid.template getEntitiesCount< EntityDimensions >() );
       tnlAssert( this->entityIndex == grid.getEntityIndex( *this ),
                  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,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::EntityOrientationType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    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,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void 
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    setOrientation( const EntityOrientationType& orientation )
    {
       this->orientation = orientation;
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       this->basis = EntityBasisType( 1 ) - tnlAbs( orientation );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::EntityBasisType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    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,
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
              int EntityDimensions >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void 
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    setBasis( const EntityBasisType& basis )
    {
       this->basis = basis;
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       this->orientation = EntityOrientationType( 1 ) - tnlAbs( basis );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index,
              int EntityDimensions >
       template< int NeighbourEntityDimensions >
    
    __cuda_callable__ inline
    
    tnlNeighbourGridEntityGetter< 
       tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >, 
       NeighbourEntityDimensions >
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensions >::
    getNeighbourEntities() const
    {
    
       return tnlNeighbourGridEntityGetter< ThisType, NeighbourEntityDimensions >( this->grid, *this );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    /****
     * Specialization for cells
     */
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    tnlGridEntity()
    
    {
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    tnlGridEntity( const GridType& grid )
    
    : grid( grid ),
      entityIndex( -1 )
    
    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 >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    
    tnlGridEntity( 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 )
    
    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 >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::CoordinatesType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    getCoordinates() const
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::CoordinatesType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    getCoordinates()
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    setCoordinates( const CoordinatesType& coordinates )
    {
       this->coordinates = coordinates;
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    __cuda_callable__ inline
    void
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    setIndex( IndexType entityIndex )
    {
       tnlAssert( entityIndex >= 0 &&
                  entityIndex < grid.template getEntitiesCount< Dimensions >(),
                  cerr << "entityIndex = " << entityIndex
                       << " grid.template getEntitiesCount< Dimensions >() = " << grid.template getEntitiesCount< Dimensions >() );
       this->entityIndex = entityIndex;                   
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    __cuda_callable__ inline
    Index
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    getIndex() const
    {
       tnlAssert( this->entityIndex >= 0 &&
                  this-> entityIndex < grid.template getEntitiesCount< Dimensions >(),
                  cerr << "this->entityIndex = " << this->entityIndex
                       << " grid.template getEntitiesCount< Dimensions >() = " << grid.template getEntitiesCount< Dimensions >() );
       tnlAssert( this->entityIndex == grid.getEntityIndex( *this ),
                  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 >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::EntityOrientationType 
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    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 >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::EntityBasisType 
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    getBasis() const
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return EntityBasisType( ( IndexType ) 1 );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
       template< int NeighbourEntityDimensions >
    
    __cuda_callable__ inline
    
    tnlNeighbourGridEntityGetter< 
       tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >, 
       NeighbourEntityDimensions >
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions >::
    getNeighbourEntities() const
    {
    
       return tnlNeighbourGridEntityGetter< ThisType, NeighbourEntityDimensions >( this->grid, *this );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    /****
     * Specialization for vertices
     */
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    tnlGridEntity()
    
    {
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    tnlGridEntity( const GridType& grid )
     : grid( grid ),
    
       entityIndex( -1 ),
    
       coordinates( 0 ),
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       orientation( 1 ),
       basis( 0 )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    
    tnlGridEntity( 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 )
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    {  
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::CoordinatesType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    getCoordinates() const
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::CoordinatesType& 
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    getCoordinates()
    {
       return this->coordinates;
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    void
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    setCoordinates( const CoordinatesType& coordinates )
    {
       this->coordinates = coordinates;
    }
    
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    __cuda_callable__ inline
    void
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    setIndex( IndexType entityIndex ) const
    {
       tnlAssert( entityIndex >= 0 &&
                  entityIndex < grid.template getEntitiesCount< 0 >(),
                  cerr << "entityIndex = " << entityIndex
                       << " grid.template getEntitiesCount< 0 >() = " << grid.template getEntitiesCount< 0 >() );
       this->entityIndex = entityIndex;                   
    }
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
    __cuda_callable__ inline
    Index
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    getIndex() const
    {
       tnlAssert( this->entityIndex >= 0 &&
                  this-> entityIndex < grid.template getEntitiesCount< 0 >(),
                  cerr << "this->entityIndex = " << this->entityIndex
                       << " grid.template getEntitiesCount< 0 >() = " << grid.template getEntitiesCount< 0 >() );
       tnlAssert( this->entityIndex == grid.getEntityIndex( *this ),
                  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 >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::EntityOrientationType
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    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 >
    
    __cuda_callable__ inline
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    const typename tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::EntityBasisType
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    getBasis() const
    {
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
       return EntityBasisType( ( IndexType ) 0 );
    
    template< int Dimensions,
              typename Real,
              typename Device,
              typename Index >
       template< int NeighbourEntityDimensions >
    
    __cuda_callable__ inline
    
    tnlNeighbourGridEntityGetter< 
       tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >, 
       NeighbourEntityDimensions >
    tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >, 0 >::
    getNeighbourEntities() const
    {
    
       return tnlNeighbourGridEntityGetter< ThisType, NeighbourEntityDimensions >( this->grid, *this );
    
    Tomáš Oberhuber's avatar
    Tomáš Oberhuber committed
    #endif	/* TNLGRIDENTITY_IMPL_H */