Loading src/functions/tnlFunctionAdapter.h +38 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -252,4 +288,6 @@ class tnlFunctionAdapter< tnlGrid< Dimensions, Real, Device, Index >, } }; #endif /* TNLFUNCTIONADAPTER_H_ */ src/mesh/tnlTraverser_Grid2D_impl.h +4 −4 Original line number Diff line number Diff line Loading @@ -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 ); } } Loading src/solvers/pde/tnlLinearSystemAssembler.h +6 −4 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ #ifndef TNLLINEARSYSTEMASSEMBLER_H_ #define TNLLINEARSYSTEMASSEMBLER_H_ #include <functions/tnlFunctionAdapter.h> template< typename Real, typename DofVector, typename DifferentialOperator, Loading Loading @@ -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, Loading Loading
src/functions/tnlFunctionAdapter.h +38 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -252,4 +288,6 @@ class tnlFunctionAdapter< tnlGrid< Dimensions, Real, Device, Index >, } }; #endif /* TNLFUNCTIONADAPTER_H_ */
src/mesh/tnlTraverser_Grid2D_impl.h +4 −4 Original line number Diff line number Diff line Loading @@ -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 ); } } Loading
src/solvers/pde/tnlLinearSystemAssembler.h +6 −4 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ #ifndef TNLLINEARSYSTEMASSEMBLER_H_ #define TNLLINEARSYSTEMASSEMBLER_H_ #include <functions/tnlFunctionAdapter.h> template< typename Real, typename DofVector, typename DifferentialOperator, Loading Loading @@ -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, Loading