#ifndef TNLDIRICHLETBOUNDARYCONDITIONS_IMPL_H #define TNLDIRICHLETBOUNDARYCONDITIONS_IMPL_H template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > bool tnlDirichletBoundaryConditions< tnlGrid< 1, MeshReal, Device, MeshIndex >, Function, Real, Index >:: setup( const tnlParameterContainer& parameters, const tnlString& prefix ) { return function.setup( parameters, prefix ); } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif void tnlDirichletBoundaryConditions< tnlGrid< 1, MeshReal, Device, MeshIndex >, Function, Real, Index >:: setBoundaryConditions( const RealType& time, const MeshType& mesh, const IndexType index, const CoordinatesType& coordinates, DofVectorType& u, DofVectorType& fu ) { fu[ index ] = 0; u[ index ] = function.getValue( mesh.getCellCenter( coordinates ), time ); } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif Index tnlDirichletBoundaryConditions< tnlGrid< 1, MeshReal, Device, MeshIndex >, Function, Real, Index >:: getLinearSystemRowLength( const MeshType& mesh, const IndexType& index, const CoordinatesType& coordinates ) const { return 1; } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif void tnlDirichletBoundaryConditions< tnlGrid< 1, MeshReal, Device, MeshIndex >, Function, Real, Index >:: updateLinearSystem( const RealType& time, const MeshType& mesh, const IndexType& index, const CoordinatesType& coordinates, DofVectorType& u, DofVectorType& b, IndexType* columns, RealType* values, IndexType& rowLength ) const { columns[ 0 ] = index; values[ 0 ] = 1.0; b[ index ] = function.getValue( mesh.getCellCenter( coordinates ), time ); rowLength = 1; } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > bool tnlDirichletBoundaryConditions< tnlGrid< 2, MeshReal, Device, MeshIndex >, Function, Real, Index >:: setup( const tnlParameterContainer& parameters, const tnlString& prefix ) { return function.setup( parameters, prefix ); } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif void tnlDirichletBoundaryConditions< tnlGrid< 2, MeshReal, Device, MeshIndex >, Function, Real, Index >:: setBoundaryConditions( const RealType& time, const MeshType& mesh, const IndexType index, const CoordinatesType& coordinates, DofVectorType& u, DofVectorType& fu ) { fu[ index ] = 0; u[ index ] = function.getValue( mesh.getCellCenter( coordinates ), time ); } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif Index tnlDirichletBoundaryConditions< tnlGrid< 2, MeshReal, Device, MeshIndex >, Function, Real, Index >:: getLinearSystemRowLength( const MeshType& mesh, const IndexType& index, const CoordinatesType& coordinates ) const { return 1; } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif void tnlDirichletBoundaryConditions< tnlGrid< 2, MeshReal, Device, MeshIndex >, Function, Real, Index >:: updateLinearSystem( const RealType& time, const MeshType& mesh, const IndexType& index, const CoordinatesType& coordinates, DofVectorType& u, DofVectorType& b, IndexType* columns, RealType* values, IndexType& rowLength ) const { columns[ 0 ] = index; values[ 0 ] = 1.0; b[ index ] = function.getValue( mesh.getCellCenter( coordinates ), time ); rowLength = 1; } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > bool tnlDirichletBoundaryConditions< tnlGrid< 3, MeshReal, Device, MeshIndex >, Function, Real, Index >:: setup( const tnlParameterContainer& parameters, const tnlString& prefix ) { return function.setup( parameters, prefix ); } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif void tnlDirichletBoundaryConditions< tnlGrid< 3, MeshReal, Device, MeshIndex >, Function, Real, Index >:: setBoundaryConditions( const RealType& time, const MeshType& mesh, const IndexType index, const CoordinatesType& coordinates, DofVectorType& u, DofVectorType& fu ) { fu[ index ] = 0; u[ index ] = function.getValue( mesh.getCellCenter( coordinates ), time );; } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif Index tnlDirichletBoundaryConditions< tnlGrid< 3, MeshReal, Device, MeshIndex >, Function, Real, Index >:: getLinearSystemRowLength( const MeshType& mesh, const IndexType& index, const CoordinatesType& coordinates ) const { return 1; } template< typename MeshReal, typename Device, typename MeshIndex, typename Function, typename Real, typename Index > #ifdef HAVE_CUDA __device__ __host__ #endif void tnlDirichletBoundaryConditions< tnlGrid< 3, MeshReal, Device, MeshIndex >, Function, Real, Index >:: updateLinearSystem( const RealType& time, const MeshType& mesh, const IndexType& index, const CoordinatesType& coordinates, DofVectorType& u, DofVectorType& b, IndexType* columns, RealType* values, IndexType& rowLength ) const { columns[ 0 ] = index; values[ 0 ] = 1.0; b[ index ] = function.getValue( mesh.getCellCenter( coordinates ), time ); rowLength = 1; } #endif /* TNLDIRICHLETBOUNDARYCONDITIONS_IMPL_H */