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,
const DifferentialOperator* differentialOperator;
const BoundaryConditions* boundaryConditions;
const RightHandSide* rightHandSide;
MeshFunction *u, *fu;
ExplicitUpdaterTraverserUserData( const Real& time,
const DifferentialOperator* differentialOperator,
const BoundaryConditions* boundaryConditions,
const RightHandSide* rightHandSide,
MeshFunction* u,
MeshFunction* fu )
differentialOperator( differentialOperator ),
boundaryConditions( boundaryConditions ),
rightHandSide( rightHandSide ),
u( u ),
fu( fu )
{}
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>