IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
Operations.h File Reference
#include <Kokkos_Complex.hpp>
#include <algorithm>
#include <complex>
#include <functional>
#include <map>
#include <mpi.h>
#include <typeindex>
#include <utility>
Include dependency graph for Operations.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ippl::mpi::extractBinaryOperationKind< T >
 Helper struct to distinguish between the four basic associative operation types. More...
struct  ippl::mpi::extractBinaryOperationKind< std::plus< T > >
struct  ippl::mpi::extractBinaryOperationKind< std::multiplies< T > >
struct  ippl::mpi::extractBinaryOperationKind< std::less< T > >
struct  ippl::mpi::extractBinaryOperationKind< std::greater< T > >
struct  ippl::mpi::always_false< T >
struct  ippl::mpi::is_ippl_mpi_type< class >
struct  ippl::mpi::dummy
struct  ippl::mpi::getMpiOpImpl< CppOpType, Datatype_IfNotTrivial >
struct  ippl::mpi::getNontrivialMpiOpImpl< Op, Type >
 Helper struct to look up and store MPI_Op types for custom types and custom operations. More...

Namespaces

namespace  ippl
namespace  ippl::mpi

Macros

#define IPPL_MPI_OP(CppOp, MPIOp)

Enumerations

enum struct  ippl::mpi::binaryOperationKind { ippl::mpi::SUM , ippl::mpi::MIN , ippl::mpi::MAX , ippl::mpi::MULTIPLICATION }

Functions

 ippl::mpi::IPPL_MPI_OP (std::plus< char >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< short >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< int >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< long >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< long long >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< unsigned char >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< unsigned short >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< unsigned int >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< unsigned long >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< unsigned long long >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< float >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< double >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< long double >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< std::complex< float > >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< std::complex< double > >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< Kokkos::complex< float > >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::plus< Kokkos::complex< double > >, MPI_SUM)
 ippl::mpi::IPPL_MPI_OP (std::less< char >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< short >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< int >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< long >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< long long >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< unsigned char >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< unsigned short >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< unsigned int >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< unsigned long >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< unsigned long long >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< float >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< double >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::less< long double >, MPI_MIN)
 ippl::mpi::IPPL_MPI_OP (std::greater< char >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< short >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< int >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< long >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< long long >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< unsigned char >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< unsigned short >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< unsigned int >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< unsigned long >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< unsigned long long >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< float >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< double >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::greater< long double >, MPI_MAX)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< short >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< int >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< long >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< long long >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< unsigned short >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< unsigned int >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< unsigned long >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< unsigned long long >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< float >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< double >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::multiplies< long double >, MPI_PROD)
 ippl::mpi::IPPL_MPI_OP (std::logical_or< bool >, MPI_LOR)
 ippl::mpi::IPPL_MPI_OP (std::logical_and< bool >, MPI_LAND)
template<typename Op, typename Datatype>
MPI_Op ippl::mpi::get_mpi_op ()

Variables

static std::map< std::pair< std::type_index, std::type_index >, MPI_Op > ippl::mpi::mpiOperations

Macro Definition Documentation

◆ IPPL_MPI_OP

#define IPPL_MPI_OP ( CppOp,
MPIOp )
Value:
template <typename Datatype_IfNotTrivial> \
struct getMpiOpImpl<CppOp, Datatype_IfNotTrivial> { \
constexpr MPI_Op operator()() const noexcept { return MPIOp; } \
}; \
template <> \
struct is_ippl_mpi_type<CppOp> : std::true_type {};

Definition at line 128 of file Operations.h.