Newer
Older
/***************************************************************************
-------------------
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>
template< typename Real,
Tomáš Oberhuber
committed
typename MeshFunction,
typename DifferentialOperator,
typename BoundaryConditions,
/*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;
ExplicitUpdaterTraverserUserData( 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,
{
public:
typedef Mesh MeshType;
typedef SharedPointer< MeshType > MeshPointer;
Tomáš Oberhuber
committed
typedef typename MeshFunction::RealType RealType;
typedef typename MeshFunction::DeviceType DeviceType;
typedef typename MeshFunction::IndexType IndexType;
typedef ExplicitUpdaterTraverserUserData< RealType,
Tomáš Oberhuber
committed
MeshFunction,
BoundaryConditions,
typedef SharedPointer< DifferentialOperator, DeviceType > DifferentialOperatorPointer;
typedef SharedPointer< BoundaryConditions, DeviceType > BoundaryConditionsPointer;
typedef SharedPointer< RightHandSide, DeviceType > RightHandSidePointer;
typedef SharedPointer< MeshFunction, DeviceType > MeshFunctionPointer;
: gpuTransferTimer( 0 ){}
void setGPUTransferTimer( Timer& 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::FunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
( *userData.fu )( entity ) +=
FunctionAdapter::getValue( *userData.rightHandSide, entity, userData.time );
#include <TNL/Solvers/PDE/ExplicitUpdater_impl.h>