Classes

LibGeoDecomp::APITraits Class Reference

APITraits contains a set of classes which can be used to describe/discover the interface between a user-supplied model (cell class) and LibGeoDecomp. More...

#include <apitraits.h>

Classes

class  AlwaysVoid
 Helper class for specializations. More...
class  FalseType
class  HasAutoGeneratedMPIDataType
 This specifier indicates that some PROVIDER class can deliver the MPI data type for the cell class via a lookup() function. More...
class  HasBoostSerialization
 This class can be used to flag cell classes which can be marshalled with Boost.Serialization. More...
class  HasCoordType
 This trait is used by unstructured grid and meshfree codes to set the coordinate type by which the elements are represemted. More...
class  HasCubeTopology
 Convenience overload to simplify most common topology specifications. More...
class  HasCustomMPIDataType
 Use this specifier to give LibGeoDecomp access to the MPI data type which can be used to communicate instances of a cell. More...
class  HasCustomPositionChecker
 This is a hook which allows user code to provide its own position checker. More...
class  HasCustomRegularGrid
 Use this trait to flag models which contain a regular grid that have a non-stanard spacing. More...
class  HasFixedCoordsOnlyUpdate
 Use this if your model can restrict itself to use only FixedCoord to address its neighbors (via the neighborhood object to update()). More...
class  HasIDType
 Like HasCoordType, this trait can be used to set the type which is used in meshfree and unstructured grid codes to uniquely identify elements. More...
class  HasLookupMemberFunction
 Type trait which allows external code to detect if a class has a member function value(). More...
class  HasNanoSteps
 Defines how many logical time steps constitute one physically correct time step (e.g. More...
class  HasNoRegularGrid
class  HasOpaqueMPIDataType
 Use this specifyer if your cell is bitwise serializable. More...
class  HasPointMesh
 Indicates that the model has particles or features other entities that can be represented by a point mesh. More...
class  HasPredefinedMPIDataType
 This specifier indicates that some PROVIDER class can deliver the MPI data type for the cell class via a lookup() function. More...
class  HasSeparateCUDAUpdate
 Sometime cells may need to roll different code on CUDA than on the CPU. More...
class  HasSoA
 Use this qualifier in a cell's API to hint that it supports a Struct of Arrays memory layout. More...
class  HasSpeedGuide
 Use this, if you want to use your cell in a heterogenous environment, to specify architecture-specific efficiency hints. More...
class  HasStaticData
 Some models have a need for static, but mutable data blocks, e.g. More...
class  HasStencil
 Allows cells to override the default stencil shape/radius. More...
class  HasThreadedUpdate
 Some models (e.g. More...
class  HasTopology
 Here cells can specify whether they expect a different topology (number of spatial dimensions, type of boundary conditions) than defined in the default. More...
class  HasTorusTopology
 Same as for HasCubeTopology: overload purely for convenience. More...
class  HasUnstructuredGrid
 If a model is based on an unstructred grid, then we assume that it can be represented a set of polygonal zones. More...
class  HasUpdateLineX
 This qualifier should be used to flag models which sport a static updateLineX() function, which is expected to update a streak of cells along the X axis. More...
class  HasValueFunction
 Type trait which allows external code to detect if a class has a member function value(). More...
class  SelectAPI
class  SelectAPI< CELL, typename AlwaysVoid< typename CELL::API >::Type >
 Allows library code to pull in a model's whole API without requiring the user to specify one at all (if none is defined, we'll return an empty class). More...
class  SelectBoostSerialization
 Decide whether a model can be (de-)serialized with Boost.Serialization. More...
class  SelectBoostSerialization< CELL, typename CELL::API::SupportsBoostSerialization >
class  SelectCoordType
class  SelectCoordType< CELL, typename CELL::API::SupportsCoordType >
class  SelectFixedCoordsOnlyUpdate
 Does CELL restrict itself to FixedCoord when accessing neighboring cells? More...
class  SelectFixedCoordsOnlyUpdate< CELL, typename CELL::API::SupportsFixedCoordsOnlyUpdate >
class  SelectIDType
class  SelectIDType< CELL, typename CELL::API::SupportsIDType >
class  SelectMPIDataType
class  SelectMPIDataType< CELL, typename CELL::API::SupportsMPIDataType, typename CELL::API::SupportsAutoGeneratedMPIDataType >
class  SelectMPIDataType< CELL, typename CELL::API::SupportsMPIDataType, typename CELL::API::SupportsCustomMPIDataType >
class  SelectMPIDataType< CELL, typename CELL::API::SupportsMPIDataType, typename CELL::API::SupportsPredefinedMPIDataType >
class  SelectNanoSteps
 Of how many nano steps (intermediate steps) is a whole cell cycle composed? More...
class  SelectNanoSteps< CELL, typename CELL::API::SupportsNanoSteps >
class  SelectPointMesh
class  SelectPointMesh< CELL, typename CELL::API::SupportsPointMesh >
class  SelectPositionChecker
class  SelectPositionChecker< CELL, typename CELL::API::SupportsCustomPositionChecker >
class  SelectRegularGrid
 All stencil codes are based on a regular grid, but even particle-in-cell codes may use such a grid to organizing the particles and computing certain variables (e.g. More...
class  SelectRegularGrid< CELL, typename CELL::API::SupportsCustomRegularGrid >
class  SelectRegularGrid< CELL, typename CELL::API::SupportsNoRegularGrid >
class  SelectSeparateCUDAUpdate
class  SelectSeparateCUDAUpdate< CELL, typename CELL::API::SupportsSeparateCUDAUpdate >
class  SelectSoA
class  SelectSoA< CELL, typename CELL::API::SupportsSoA >
class  SelectSpeedGuide
 determine whether a cell has an architecture-specific speed indicator defined More...
class  SelectSpeedGuide< CELL, typename CELL::API::SupportsSpeed >
class  SelectStaticData
class  SelectStaticData< CELL, typename CELL::API::SupportsStaticData >
class  SelectStencil
 discover which stencil a cell wants to use More...
class  SelectStencil< CELL, typename CELL::API::SupportsStencil >
class  SelectThreadedUpdate
class  SelectThreadedUpdate< CELL, typename CELL::API::SupportsThreadedUpdate >
class  SelectTopology
class  SelectTopology< CELL, typename CELL::API::SupportsTopology >
class  SelectUnstructuredGrid
class  SelectUnstructuredGrid< CELL, typename CELL::API::SupportsUnstructuredGrid >
class  SelectUpdateLineX
 Check whether cell has an updateLineX() member. More...
class  SelectUpdateLineX< CELL, typename CELL::API::SupportsUpdateLineX >
class  TrueType

Detailed Description

APITraits contains a set of classes which can be used to describe/discover the interface between a user-supplied model (cell class) and LibGeoDecomp.

Examples of how to use these can be found in src/examples/

A cell exports a class named API which derives from certail child classes of APITraits to allow Simulators and the UpdateFunctor to discover its properties (e.g. number of nano steps, stencil shape, signature and flavor of update() functions...).

These classes generally come in pairs: for any feature "foo bar" there is a class HasFooBar which can be derived from by a Cell::API class to signal that Cell supports this feature. Internally LibGeoDecomp will use SelectFooBar<Cell>::Value to discover whether Cell is compatible with "foo bar". This two-part mechanism is necessary since we want to


The documentation for this class was generated from the following file: