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

Fixing the mesh traverser.

parent 2a86e80c
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -122,6 +122,42 @@ class tnlFunctionAdapter< Mesh, Function, tnlDiscreteFunction >
      }
};

/****
 * Specialization for discrete functions:
 * - it passes only the mesh entity index
 */
template< int Dimensions,
          typename Real,
          typename Device,
          typename Index,
          typename Function >
class tnlFunctionAdapter< tnlGrid< Dimensions, Real, Device, Index >, Function, tnlDiscreteFunction >
{
   public:

      typedef tnlGrid< Dimensions, Real, Device, Index > MeshType;
      typedef Function FunctionType;
      typedef typename FunctionType::RealType RealType;
      typedef typename MeshType::IndexType IndexType;
      typedef typename MeshType::VertexType VertexType;
      typedef typename MeshType::CoordinatesType CoordinatesType;

      //template< int MeshEntityDimension >
#ifdef HAVE_CUDA
   __device__ __host__
#endif
      static RealType getValue( const MeshType& mesh,
                                const FunctionType& function,
                                const IndexType index,
                                const CoordinatesType& coordinates,
                                const RealType& time = 0.0 )
      {
         return function.getValue( index,
                                   time );
      }
};


/****
 * Specialization for analytic functions:
 * - it does not pass the mesh entity index
@@ -252,4 +288,6 @@ class tnlFunctionAdapter< tnlGrid< Dimensions, Real, Device, Index >,
      }
};



#endif /* TNLFUNCTIONADAPTER_H_ */
+4 −4
Original line number Diff line number Diff line
@@ -97,16 +97,16 @@ processBoundaryEntities( const GridType& grid,
   for( coordinates.x() = 0; coordinates.x() < xSize; coordinates.x() ++ )
   {
      coordinates.y() = 0;
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 0, 1 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.template getFaceIndex< 0, 1 >( coordinates ), coordinates );
      coordinates.y() = ySize;
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 0, 1 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.template getFaceIndex< 0, 1 >( coordinates ), coordinates );
   }
   for( coordinates.y() = 0; coordinates.y() < ySize; coordinates.y() ++ )
   {
      coordinates.x() = 0;
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 1, 0 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.template getFaceIndex< 1, 0 >( coordinates ), coordinates );
      coordinates.x() = ySize;
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 1, 0 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.template getFaceIndex< 1, 0 >( coordinates ), coordinates );
   }

}
+6 −4
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
#ifndef TNLLINEARSYSTEMASSEMBLER_H_
#define TNLLINEARSYSTEMASSEMBLER_H_

#include <functions/tnlFunctionAdapter.h>

template< typename Real,
          typename DofVector,
          typename DifferentialOperator,
@@ -290,7 +292,7 @@ class tnlLinearSystemAssembler< tnlGrid< Dimensions, Real, Device, Index >,
                                  const IndexType index,
                                  const CoordinatesType& coordinates )
         {
            //printf( "index = %d \n", index );
            printf( "index = %d \n", index );
            typedef tnlFunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
            ( *userData.b )[ index ] = ( *userData.u )[ index ] +
                                  ( *userData.tau ) * FunctionAdapter::getValue( mesh,