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

Adding face traversing to the grid traverser.

parent 3305abd6
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=yes
WITH_CUDA=no
TEMPLATE_EXPLICIT_INSTANTIATION=yes
#VERBOSE="VERBOSE=1"

+6 −6
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< 0, 1 >( grid, userData, grid.getFaceIndex< 0, 1 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 0, 1 >( coordinates ), coordinates );
      coordinates.y() = ySize;
      EntitiesProcessor::processFace< 0, 1 >( grid, userData, grid.getFaceIndex< 0, 1 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 0, 1 >( coordinates ), coordinates );
   }
   for( coordinates.y() = 0; coordinates.y() < ySize; coordinates.y() ++ )
   {
      coordinates.x() = 0;
      EntitiesProcessor::processFace< 1, 0 >( grid, userData, grid.getFaceIndex< 1, 0 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 1, 0 >( coordinates ), coordinates );
      coordinates.x() = ySize;
      EntitiesProcessor::processFace< 1, 0 >( grid, userData, grid.getFaceIndex< 1, 0 >( coordinates ), coordinates );
      EntitiesProcessor::processFace( grid, userData, grid.getFaceIndex< 1, 0 >( coordinates ), coordinates );
   }

}
@@ -134,13 +134,13 @@ processInteriorEntities( const GridType& grid,
      for( coordinates.x() = 1; coordinates.x() < xSize; coordinates.x() ++ )
      {
         const IndexType index = grid.template getFaceIndex< 1, 0 >( coordinates );
         EntitiesProcessor::processFace< 1, 0 >( grid, userData, index, coordinates );
         EntitiesProcessor::processFace( grid, userData, index, coordinates );
      }
   for( coordinates.y() = 1; coordinates.y() < ySize; coordinates.y() ++ )
      for( coordinates.x() = 1; coordinates.x() < xSize - 1; coordinates.x() ++ )
      {
         const IndexType index = grid.template getFaceIndex< 0, 1 >( coordinates );
         EntitiesProcessor::processFace< 0, 1 >( grid, userData, index, coordinates );
         EntitiesProcessor::processFace( grid, userData, index, coordinates );
      }
}

+38 −0
Original line number Diff line number Diff line
@@ -190,6 +190,23 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
                                                                   *userData.fu );
            }

#ifdef HAVE_CUDA
            __host__ __device__
#endif
            static void processFace( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
               userData.boundaryConditions->setBoundaryConditions( *userData.time,
                                                                   mesh,
                                                                   index,
                                                                   coordinates,
                                                                   *userData.u,
                                                                   *userData.fu );
            }


      };

      class TraversalInteriorEntitiesProcessor
@@ -220,6 +237,27 @@ class tnlExplicitUpdater< tnlGrid< Dimensions, Real, Device, Index >,
                                                                        *userData.time );
            }

#ifdef HAVE_CUDA
            __host__ __device__
#endif
            static void processFace( const MeshType& mesh,
                                     TraversalUserData& userData,
                                     const IndexType index,
                                     const CoordinatesType& coordinates )
            {
               ( *userData.fu)[ index ] = userData.differentialOperator->getValue( mesh,
                                                                                   index,
                                                                                   coordinates,
                                                                                   *userData.u,
                                                                                   *userData.time );

               typedef tnlFunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
               ( * userData.fu )[ index ] += FunctionAdapter::getValue( mesh,
                                                                        *userData.rightHandSide,
                                                                        index,
                                                                        coordinates,
                                                                        *userData.time );
            }
      };

};
+48 −0
Original line number Diff line number Diff line
@@ -227,6 +227,26 @@ class tnlLinearSystemAssembler< tnlGrid< Dimensions, Real, Device, Index >,
                                                             matrixRow );
         }

#ifdef HAVE_CUDA
         __host__ __device__
#endif
         static void processFace( const MeshType& mesh,
                                  TraversalUserData& userData,
                                  const IndexType index,
                                  const CoordinatesType& coordinates )
         {
            //printf( "index = %d \n", index );
            typename MatrixType::MatrixRow matrixRow = userData.matrix->getRow( index );
            userData.boundaryConditions->updateLinearSystem( *userData.time,
                                                             mesh,
                                                             index,
                                                             coordinates,
                                                             *userData.u,
                                                             *userData.b,
                                                             matrixRow );
         }


   };

   class TraversalInteriorEntitiesProcessor
@@ -262,6 +282,34 @@ class tnlLinearSystemAssembler< tnlGrid< Dimensions, Real, Device, Index >,
            userData.matrix->addElementFast( index, index, 1.0, 1.0 );
         }

#ifdef HAVE_CUDA
         __host__ __device__
#endif
         static void processFace( const MeshType& mesh,
                                  TraversalUserData& userData,
                                  const IndexType index,
                                  const CoordinatesType& coordinates )
         {
            //printf( "index = %d \n", index );
            typedef tnlFunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
            ( *userData.b )[ index ] = ( *userData.u )[ index ] +
                                  ( *userData.tau ) * FunctionAdapter::getValue( mesh,
                                                             *userData.rightHandSide,
                                                             index,
                                                             coordinates,
                                                             *userData.time );

            typename MatrixType::MatrixRow matrixRow = userData.matrix->getRow( index );
            userData.differentialOperator->updateLinearSystem( *userData.time,
                                                               *userData.tau,
                                                               mesh,
                                                               index,
                                                               coordinates,
                                                               *userData.u,
                                                               *userData.b,
                                                               matrixRow );
            userData.matrix->addElementFast( index, index, 1.0, 1.0 );
         }
   };
};