Newer
Older
/***************************************************************************
tnlExplicitUpdater.h - description
-------------------
begin : Jul 29, 2014
copyright : (C) 2014 by Tomas Oberhuber
email : tomas.oberhuber@fjfi.cvut.cz
***************************************************************************/
/* See Copyright Notice in tnl/Copyright */
#include <TNL/Timer.h>
#include <TNL/tnlSharedPointer.h>
template< typename Real,
Tomáš Oberhuber
committed
typename MeshFunction,
typename DifferentialOperator,
typename BoundaryConditions,
class tnlExplicitUpdaterTraverserUserData
/*typedef typename DifferentialOperator::DeviceType DeviceType;
/*typedef DifferentialOperator DifferentialOperator;
typedef BoundaryConditions BoundaryConditions;
typedef RightHandSide RightHandSide;
typedef MeshFunction MeshFunction;*/
const DifferentialOperator* differentialOperator;
const BoundaryConditions* boundaryConditions;
const RightHandSide* rightHandSide;
MeshFunction *u, *fu;
Real* _fu;
tnlExplicitUpdaterTraverserUserData( const Real& time,
const DifferentialOperator& differentialOperator,
const BoundaryConditions& boundaryConditions,
const RightHandSide& rightHandSide,
MeshFunction& u,
MeshFunction& fu,
MeshFunction& __fu )
differentialOperator( &differentialOperator ),
boundaryConditions( &boundaryConditions ),
rightHandSide( &rightHandSide ),
u( &u ),
fu( &fu ),
_fu( &__fu[ 0 ] )
template< typename Mesh,
Tomáš Oberhuber
committed
typename MeshFunction,
typename DifferentialOperator,
typename BoundaryConditions,
class tnlExplicitUpdater
{
public:
typedef Mesh MeshType;
typedef tnlSharedPointer< MeshType > MeshPointer;
Tomáš Oberhuber
committed
typedef typename MeshFunction::RealType RealType;
typedef typename MeshFunction::DeviceType DeviceType;
typedef typename MeshFunction::IndexType IndexType;
typedef tnlExplicitUpdaterTraverserUserData< RealType,
Tomáš Oberhuber
committed
MeshFunction,
BoundaryConditions,
typedef tnlSharedPointer< DifferentialOperator, DeviceType > DifferentialOperatorPointer;
typedef tnlSharedPointer< BoundaryConditions, DeviceType > BoundaryConditionsPointer;
typedef tnlSharedPointer< RightHandSide, DeviceType > RightHandSidePointer;
typedef tnlSharedPointer< MeshFunction, DeviceType > MeshFunctionPointer;
tnlExplicitUpdater()
: gpuTransferTimer( 0 ){}
void setGPUTransferTimer( tnlTimer& timer )
{
this->gpuTransferTimer = &timer;
}
void update( const RealType& time,
const MeshPointer& meshPointer,
const DifferentialOperatorPointer& differentialOperatorPointer,
const BoundaryConditionsPointer& boundaryConditionsPointer,
const RightHandSidePointer& rightHandSidePointer,
MeshFunctionPointer& uPointer,
MeshFunctionPointer& fuPointer ) const;
class TraverserBoundaryEntitiesProcessor
static inline void processEntity( const MeshType& mesh,
TraverserUserData& userData,
const GridEntity& entity )
( *userData.u )( entity ) = ( *userData.boundaryConditions )
( *userData.u, entity, userData.time );
class TraverserInteriorEntitiesProcessor
{
public:
static inline void processEntity( const MeshType& mesh,
TraverserUserData& userData,
const EntityType& entity )
( *userData.fu )( entity ) =
( *userData.differentialOperator )( *userData.u, entity, userData.time );
typedef Functions::tnlFunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
( *userData.fu )( entity ) +=
FunctionAdapter::getValue( *userData.rightHandSide, entity, userData.time );
tnlTimer* gpuTransferTimer;
#include <TNL/solvers/pde/tnlExplicitUpdater_impl.h>