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

Fixing the function enumerator.

parent bf079ed7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

TARGET=TNL
INSTALL_PREFIX=${HOME}/local
WITH_CUDA=no
WITH_CUDA=yes
TEMPLATE_EXPLICIT_INSTANTIATION=yes
VERBOSE="VERBOSE=1"

+15 −13
Original line number Diff line number Diff line
@@ -21,11 +21,11 @@

template< typename Function,
          typename DofVector >
class tnlFunctionEnumeratorTraversalUserData
class tnlFunctionEnumeratorTraverserUserData
{
   public:

      typedef DofVector::RealType RealType;
      typedef typename DofVector::RealType RealType;

      const RealType *time;

@@ -37,7 +37,7 @@ class tnlFunctionEnumeratorTraversalUserData

      const RealType* dofVectorCoefficient;

      tnlFunctionEnumeratorTraversalUserData( const RealType& time,
      tnlFunctionEnumeratorTraverserUserData( const RealType& time,
                                              const Function& function,
                                              DofVector& u,
                                              const RealType& functionCoefficient,
@@ -61,19 +61,19 @@ class tnlFunctionEnumerator
      typedef typename DofVector::RealType RealType;
      typedef typename DofVector::DeviceType DeviceType;
      typedef typename DofVector::IndexType IndexType;
      typedef tnlFunctionEnumeratorTraversalUserData< Function,
                                                      DofVector > TraversalUserData;
      typedef tnlFunctionEnumeratorTraverserUserData< Function,
                                                      DofVector > TraverserUserData;

      template< int EntityDimensions >
      void enumerate( const MeshType& mesh,
                      const Function& function
                      const Function& function,
                      DofVector& u,
                      const RealType& functionCoefficient = 1.0,
                      const RealType& dofVectorCoefficient = 0.0,
                      const RealType& time = 0.0 ) const;


      class TraversalEntitiesProcessor
      class TraverserEntitiesProcessor
      {
         public:

@@ -82,7 +82,7 @@ class tnlFunctionEnumerator
            __host__ __device__
#endif
            static void processEntity( const MeshType& mesh,
                                       TraversalUserData& userData,
                                       TraverserUserData& userData,
                                       const IndexType index )
            {
               typedef tnlFunctionAdapter< MeshType, Function > FunctionAdapter;
@@ -115,16 +115,18 @@ class tnlFunctionEnumerator< tnlGrid< Dimensions, Real, Device, Index >,
      typedef typename MeshType::DeviceType DeviceType;
      typedef typename MeshType::IndexType IndexType;
      typedef typename MeshType::CoordinatesType CoordinatesType;
      typedef tnlFunctionEnumeratorTraversalUserData< Function,
                                                      DofVector > TraversalUserData;
      typedef tnlFunctionEnumeratorTraverserUserData< Function,
                                                      DofVector > TraverserUserData;

      template< int EntityDimensions >
      void enumerate( const MeshType& mesh,
                      const Function& function,
                      DofVector& u,
                      const RealType& functionCoefficient = 1.0,
                      const RealType& dofVectorCoefficient = 0.0,
                      const RealType& time = 0.0 ) const;

      class TraversalEntitiesProcessor
      class TraverserEntitiesProcessor
      {
         public:

@@ -134,7 +136,7 @@ class tnlFunctionEnumerator< tnlGrid< Dimensions, Real, Device, Index >,
            __host__ __device__
#endif
            static void processCell( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     TraverserUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
@@ -153,7 +155,7 @@ class tnlFunctionEnumerator< tnlGrid< Dimensions, Real, Device, Index >,
            __host__ __device__
#endif
            static void processFace( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     TraverserUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
+26 −28
Original line number Diff line number Diff line
@@ -38,14 +38,14 @@ enumerate( const MeshType& mesh,
{
   if( DeviceType::DeviceType == tnlHostDevice )
   {
      TraversalUserData userData( time, function, u, functionCoefficient, dofVectorCoefficient );
      tnlTraverser< MeshType, EntityDimensions > meshTraversal;
      meshTraversal.template processBoundaryEntities< TraversalUserData,
                                                      TraversalEntitiesProcessor >
      TraverserUserData userData( time, function, u, functionCoefficient, dofVectorCoefficient );
      tnlTraverser< MeshType, EntityDimensions > meshTraverser;
      meshTraverser.template processBoundaryEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );
      meshTraversal.template processInteriorEntities< TraversalUserData,
                                                      TraversalProcessor >
      meshTraverser.template processInteriorEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );

@@ -57,15 +57,15 @@ enumerate( const MeshType& mesh,
      DofVector* kernelU = tnlCuda::passToDevice( u );
      RealType* kernelFunctionCoefficient = tnlCuda::passToDevice( functionCoefficient );
      RealType* kernelDofVectorCoefficient = tnlCuda::passToDevice( dofVectorCoefficient );
      TraversalUserData userData( *kernelTime, *kernelFunction, *kernelU, *kernelFunctionCoefficient, *kernelDofVectorCoefficient );
      TraverserUserData userData( *kernelTime, *kernelFunction, *kernelU, *kernelFunctionCoefficient, *kernelDofVectorCoefficient );
      checkCudaDevice;
      tnlTraverser< MeshType, EntityDimensions > meshTraversal;
      meshTraversal.template processBoundaryEntities< TraversalUserData,
                                                      TraversalBoundaryEntitiesProcessor >
      tnlTraverser< MeshType, EntityDimensions > meshTraverser;
      meshTraverser.template processBoundaryEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );
      meshTraversal.template processInteriorEntities< TraversalUserData,
                                                      TraversalInteriorEntitiesProcessor >
      meshTraverser.template processInteriorEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );

@@ -83,10 +83,8 @@ template< int Dimensions,
          typename Real,
          typename Device,
          typename Index,
          typename DofVector,
          typename DifferentialOperator,
          typename BoundaryConditions,
          typename RightHandSide >
          typename Function,
          typename DofVector >
   template< int EntityDimensions >
void
tnlFunctionEnumerator< tnlGrid< Dimensions, Real, Device, Index >, Function, DofVector  >::
@@ -99,14 +97,14 @@ enumerate( const tnlGrid< Dimensions, Real, Device, Index >& mesh,
{
   if( DeviceType::DeviceType == tnlHostDevice )
   {
      TraversalUserData userData( time, function, u, functionCoefficient, dofVectorCoefficient );
      tnlTraverser< MeshType, EntityDimensions > meshTraversal;
      meshTraversal.template processBoundaryEntities< TraversalUserData,
                                                      TraversalEntitiesProcessor >
      TraverserUserData userData( time, function, u, functionCoefficient, dofVectorCoefficient );
      tnlTraverser< MeshType, EntityDimensions > meshTraverser;
      meshTraverser.template processBoundaryEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );
      meshTraversal.template processInteriorEntities< TraversalUserData,
                                                      TraversalProcessor >
      meshTraverser.template processInteriorEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );

@@ -118,15 +116,15 @@ enumerate( const tnlGrid< Dimensions, Real, Device, Index >& mesh,
      DofVector* kernelU = tnlCuda::passToDevice( u );
      RealType* kernelFunctionCoefficient = tnlCuda::passToDevice( functionCoefficient );
      RealType* kernelDofVectorCoefficient = tnlCuda::passToDevice( dofVectorCoefficient );
      TraversalUserData userData( *kernelTime, *kernelFunction, *kernelU, *kernelFunctionCoefficient, *kernelDofVectorCoefficient );
      TraverserUserData userData( *kernelTime, *kernelFunction, *kernelU, *kernelFunctionCoefficient, *kernelDofVectorCoefficient );
      checkCudaDevice;
      tnlTraverser< MeshType, EntityDimensions > meshTraversal;
      meshTraversal.template processBoundaryEntities< TraversalUserData,
                                                      TraversalBoundaryEntitiesProcessor >
      tnlTraverser< MeshType, EntityDimensions > meshTraverser;
      meshTraverser.template processBoundaryEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );
      meshTraversal.template processInteriorEntities< TraversalUserData,
                                                      TraversalInteriorEntitiesProcessor >
      meshTraverser.template processInteriorEntities< TraverserUserData,
                                                      TraverserEntitiesProcessor >
                                                    ( mesh,
                                                      userData );

+2 −0
Original line number Diff line number Diff line
@@ -352,6 +352,8 @@ processBoundaryEntities( const GridType& grid,
   GridType* kernelGrid = tnlCuda::passToDevice( grid );
   UserData* kernelUserData = tnlCuda::passToDevice( userData );

   printf( "Number of cells = %d \n", grid.getNumberOfCells() );

   dim3 cudaBlockSize( 16, 16 );
   dim3 cudaBlocks;
   cudaBlocks.x = tnlCuda::getNumberOfBlocks( grid.getDimensions().x(), cudaBlockSize.x );
+16 −16
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ template< typename Real,
          typename DifferentialOperator,
          typename BoundaryConditions,
          typename RightHandSide >
class tnlExplicitUpdaterTraversalUserData
class tnlExplicitUpdaterTraverserUserData
{
   public:

@@ -39,7 +39,7 @@ class tnlExplicitUpdaterTraversalUserData

      DofVector *u, *fu;

      tnlExplicitUpdaterTraversalUserData( const Real& time,
      tnlExplicitUpdaterTraverserUserData( const Real& time,
                                           const DifferentialOperator& differentialOperator,
                                           const BoundaryConditions& boundaryConditions,
                                           const RightHandSide& rightHandSide,
@@ -67,11 +67,11 @@ class tnlExplicitUpdater
      typedef typename DofVector::RealType RealType;
      typedef typename DofVector::DeviceType DeviceType;
      typedef typename DofVector::IndexType IndexType;
      typedef tnlExplicitUpdaterTraversalUserData< RealType,
      typedef tnlExplicitUpdaterTraverserUserData< RealType,
                                                   DofVector,
                                                   DifferentialOperator,
                                                   BoundaryConditions,
                                                   RightHandSide > TraversalUserData;
                                                   RightHandSide > TraverserUserData;

      template< int EntityDimensions >
      void update( const RealType& time,
@@ -82,7 +82,7 @@ class tnlExplicitUpdater
                   DofVector& u,
                   DofVector& fu ) const;

      class TraversalBoundaryEntitiesProcessor
      class TraverserBoundaryEntitiesProcessor
      {
         public:

@@ -91,7 +91,7 @@ class tnlExplicitUpdater
            __host__ __device__
#endif
            static void processEntity( const MeshType& mesh,
                                       TraversalUserData& userData,
                                       TraverserUserData& userData,
                                       const IndexType index )
            {
               userData.boundaryConditions->setBoundaryConditions( *userData.time,
@@ -103,7 +103,7 @@ class tnlExplicitUpdater

      };

      class TraversalInteriorEntitiesProcessor
      class TraverserInteriorEntitiesProcessor
      {
         public:

@@ -112,7 +112,7 @@ class tnlExplicitUpdater
            __host__ __device__
#endif
            static void processEntity( const MeshType& mesh,
                                       TraversalUserData& userData,
                                       TraverserUserData& userData,
                                       const IndexType index )
            {
               (* userData.fu )[ index ] = userData.differentialOperator->getValue( mesh,
@@ -151,11 +151,11 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
      typedef typename MeshType::DeviceType DeviceType;
      typedef typename MeshType::IndexType IndexType;
      typedef typename MeshType::CoordinatesType CoordinatesType;
      typedef tnlExplicitUpdaterTraversalUserData< RealType,
      typedef tnlExplicitUpdaterTraverserUserData< RealType,
                                                   DofVector,
                                                   DifferentialOperator,
                                                   BoundaryConditions,
                                                   RightHandSide > TraversalUserData;
                                                   RightHandSide > TraverserUserData;
      
      template< int EntityDimensions >
      void update( const RealType& time,
@@ -166,7 +166,7 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
                   DofVector& u,
                   DofVector& fu ) const;

      class TraversalBoundaryEntitiesProcessor
      class TraverserBoundaryEntitiesProcessor
      {
         public:

@@ -178,7 +178,7 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
            __host__ __device__
#endif
            static void processCell( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     TraverserUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
@@ -194,7 +194,7 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
            __host__ __device__
#endif
            static void processFace( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     TraverserUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
@@ -209,7 +209,7 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,

      };

      class TraversalInteriorEntitiesProcessor
      class TraverserInteriorEntitiesProcessor
      {
         public:

@@ -219,7 +219,7 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
            __host__ __device__
#endif
            static void processCell( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     TraverserUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
@@ -241,7 +241,7 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
            __host__ __device__
#endif
            static void processFace( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     TraverserUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
Loading