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()
: time( 0.0 ),
differentialOperator( NULL ),
boundaryConditions( NULL ),
rightHandSide( NULL ),
u( NULL ),
fu( NULL )
void setUserData( const Real& time,
const DifferentialOperator* differentialOperator,
const BoundaryConditions* boundaryConditions,
const RightHandSide* rightHandSide,
MeshFunction* u,
MeshFunction* fu )
{
this->time = time;
this->differentialOperator = differentialOperator;
this->boundaryConditions = boundaryConditions;
this->rightHandSide = rightHandSide;
this->u = u;
this->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;
typedef SharedPointer< TraverserUserData, DeviceType > TraverserUserDataPointer;
void update( const RealType& time,
const MeshPointer& meshPointer,
const DifferentialOperatorPointer& differentialOperatorPointer,
const BoundaryConditionsPointer& boundaryConditionsPointer,
const RightHandSidePointer& rightHandSidePointer,
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.differentialOperator )( *userData.u, entity, userData.time );
typedef Functions::FunctionAdapter< MeshType, RightHandSide > FunctionAdapter;
( *userData.fu )( entity ) +=
FunctionAdapter::getValue( *userData.rightHandSide, entity, userData.time );
protected:
TraverserUserDataPointer userDataPointer;
#include <TNL/Solvers/PDE/ExplicitUpdater_impl.h>