Commit 4c826aa0 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Implementing heat equation benchmark.

parent 607a15ea
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ __host__ __device__
inline int tnlCuda::getMaxGridSize()
{
   // TODO: make it preprocessor macro constant defined in tnlConfig
   return 65536;
   return 65535;
};

#ifdef HAVE_CUDA
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include <mesh/grids/tnlNeighbourGridEntityGetter.h>

#include <../tests/benchmarks/heat-equation-benchmark/TestGridEntity.h>
#include <../tests/benchmarks/heat-equation-benchmark/TestNeighbourGridEntityGetter2D_impl.h>

template< typename Real,
          typename Device,
+215 −0
Original line number Diff line number Diff line
/***************************************************************************
                          tnlBoundaryGridEntityChecker.h  -  description
                             -------------------
    begin                : Dec 2, 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.                                   *
 *                                                                         *
 ***************************************************************************/

#pragma once

template< typename GridEntity >
class TestBoundaryGridEntityChecker
{
};

/***
 * 1D grids
 */
template< typename Real,
          typename Device,
          typename Index,
          typename Config >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 1, Real, Device, Index >, 1, Config  > >
{
   public:
      
      typedef tnlGrid< 1, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 1, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().x() == entity.grid.getDimensions().x() - 1 );
      }
};

template< typename Real,
          typename Device,
          typename Index,
          typename Config  >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 1, Real, Device, Index >, 0, Config > >
{
   public:
      
      typedef tnlGrid< 1, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 1, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().x() == entity.grid.getDimensions().x() );
      }
};

/****
 * 2D grids
 */
template< typename Real,
          typename Device,
          typename Index,
          typename Config  >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 2, Real, Device, Index >, 2, Config > >
{
   public:
      
      typedef tnlGrid< 2, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 2, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().y() == 0 ||
                 entity.getCoordinates().x() == entity.getMesh().getDimensions().x() - 1 ||
                 entity.getCoordinates().y() == entity.getMesh().getDimensions().y() - 1 );
      }
};

template< typename Real,
          typename Device,
          typename Index,
          typename Config  >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 2, Real, Device, Index >, 1, Config > >
{
   public:
      
      typedef tnlGrid< 2, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 2, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().y() == 0 ||
                 entity.getCoordinates().x() == 
                    entity.grid.getDimensions().x() - entity.getBasis().x() ||
                 entity.getCoordinates().y() == 
                    entity.grid.getDimensions().y() - entity.getBasis().y() );
         
      }
};


template< typename Real,
          typename Device,
          typename Index,
          typename Config  >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 2, Real, Device, Index >, 0, Config > >
{
   public:
      
      typedef tnlGrid< 2, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 2, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().y() == 0 ||
                 entity.getCoordinates().x() == entity.grid.getDimensions().x() ||
                 entity.getCoordinates().y() == entity.grid.getDimensions().y() );
         
      }
};


/***
 * 3D grid
 */
template< typename Real,
          typename Device,
          typename Index,
          typename Config ,
          int EntityDimensions >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 3, Real, Device, Index >, EntityDimensions, Config > >
{
   public:
      
      typedef tnlGrid< 3, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 3, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().y() == 0 ||
                 entity.getCoordinates().z() == 0 ||
                 entity.getCoordinates().x() == 
                    entity.grid.getDimensions().x() - entity.getBasis().x() ||
                 entity.getCoordinates().y() == 
                    entity.grid.getDimensions().y() - entity.getBasis().y() ||
                 entity.getCoordinates().z() == 
                    entity.grid.getDimensions().z() - entity.getBasis().z() );
         
      }
};

template< typename Real,
          typename Device,
          typename Index,
          typename Config  >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 3, Real, Device, Index >, 3, Config > >
{
   public:
      
      typedef tnlGrid< 3, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 3, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().y() == 0 ||
                 entity.getCoordinates().z() == 0 ||
                 entity.getCoordinates().x() == entity.grid.getDimensions().x() - 1 ||
                 entity.getCoordinates().y() == entity.grid.getDimensions().y() - 1 ||
                 entity.getCoordinates().z() == entity.grid.getDimensions().z() - 1 );
      }
};

template< typename Real,
          typename Device,
          typename Index,
          typename Config  >
class TestBoundaryGridEntityChecker< TestGridEntity< tnlGrid< 3, Real, Device, Index >, 0, Config > >
{
   public:
      
      typedef tnlGrid< 3, Real, Device, Index > GridType;
      typedef TestGridEntity< GridType, 3, Config > GridEntityType;
      
      __cuda_callable__ inline
      static bool isBoundaryEntity( const GridEntityType& entity )
      {
         return( entity.getCoordinates().x() == 0 ||
                 entity.getCoordinates().y() == 0 ||
                 entity.getCoordinates().z() == 0 ||
                 entity.getCoordinates().x() == entity.grid.getDimensions().x() ||
                 entity.getCoordinates().y() == entity.grid.getDimensions().y() ||
                 entity.getCoordinates().z() == entity.grid.getDimensions().z() );
      }
};

+6 −6
Original line number Diff line number Diff line
@@ -69,12 +69,12 @@ class TestGridEntity< tnlGrid< Dimensions, Real, Device, Index >, EntityDimensio
      typedef TestGridEntity< GridType, entityDimensions, Config > ThisType;
      typedef typename GridType::VertexType VertexType;
      
      typedef tnlNeighbourGridEntitiesStorage< ThisType > NeighbourGridEntitiesStorageType;
      typedef TestNeighbourGridEntitiesStorage< ThisType > NeighbourGridEntitiesStorageType;
      
      template< int NeighbourEntityDimensions = entityDimensions >
      using NeighbourEntities = 
         tnlNeighbourGridEntityGetter<
            tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >,
         TestNeighbourGridEntityGetter<
            TestGridEntity< tnlGrid< Dimensions, Real, Device, Index >,
                           EntityDimensions,
                           Config >,
            NeighbourEntityDimensions >;
@@ -195,12 +195,12 @@ class TestGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions, Co
      typedef tnlStaticVector< meshDimensions, IndexType > EntityOrientationType;
      typedef tnlStaticVector< meshDimensions, IndexType > EntityBasisType;
      typedef TestGridEntity< GridType, entityDimensions, Config > ThisType;
      typedef tnlNeighbourGridEntitiesStorage< ThisType > NeighbourGridEntitiesStorageType;
      typedef TestNeighbourGridEntitiesStorage< ThisType > NeighbourGridEntitiesStorageType;
      
      template< int NeighbourEntityDimensions = entityDimensions >
      using NeighbourEntities = 
         tnlNeighbourGridEntityGetter<
            tnlGridEntity< tnlGrid< Dimensions, Real, Device, Index >,
         TestNeighbourGridEntityGetter<
            TestGridEntity< tnlGrid< Dimensions, Real, Device, Index >,
                           entityDimensions,
                           Config >,
            NeighbourEntityDimensions >;
+2 −2
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@

#pragma once

#include <mesh/grids/tnlBoundaryGridEntityChecker.h>
#include "TestBoundaryGridEntityChecker.h"
#include "TestGridEntityCenterGetter.h"
#include <mesh/grids/tnlGridEntityMeasureGetter.h>
#include "TestGridEntity.h"
@@ -456,7 +456,7 @@ bool
TestGridEntity< tnlGrid< Dimensions, Real, Device, Index >, Dimensions, Config >::
isBoundaryEntity() const
{
   return tnlBoundaryGridEntityChecker< ThisType >::isBoundaryEntity( *this );
   return TestBoundaryGridEntityChecker< ThisType >::isBoundaryEntity( *this );
}

template< int Dimensions,
Loading