10#ifndef TPETRA_DETAILS_RANDOM_DEF_HPP
11#define TPETRA_DETAILS_RANDOM_DEF_HPP
13#include "Tpetra_Details_Random_decl.hpp"
14#include "Teuchos_TestForException.hpp"
15#include "Kokkos_Random.hpp"
21template <
class ExecutionSpace>
23 using PoolClass = Static_Random_XorShift64_Pool<ExecutionSpace>;
24 if (PoolClass::pool_ !=
nullptr) {
25 delete PoolClass::pool_;
27 PoolClass::pool_ =
nullptr;
31template <
class ExecutionSpace>
32unsigned int Static_Random_XorShift64_Pool<ExecutionSpace>::getSeedFromRank(
int mpi_rank) {
38 uint64_t myRank =
static_cast<uint64_t
>(mpi_rank);
39 uint64_t seed64 =
static_cast<uint64_t
>(std::rand()) + myRank + 17311uLL;
40 unsigned int seed =
static_cast<unsigned int>(seed64 & 0xffffffff);
44template <
class ExecutionSpace>
45void Static_Random_XorShift64_Pool<ExecutionSpace>::
46 resetPool(
int mpi_rank) {
50 Kokkos::push_finalize_hook(finalize_pool<ExecutionSpace>);
52 pool_ =
new Kokkos::Random_XorShift64_Pool<ExecutionSpace>(getSeedFromRank(mpi_rank));
55template <
class ExecutionSpace>
56bool Static_Random_XorShift64_Pool<ExecutionSpace>::
58 return pool_ !=
nullptr;
61template <
class ExecutionSpace>
62Kokkos::Random_XorShift64_Pool<ExecutionSpace>& Static_Random_XorShift64_Pool<ExecutionSpace>::
64 TEUCHOS_TEST_FOR_EXCEPTION(!isSet(), std::runtime_error,
"Tpetra::Details::Static_Random_XorShift64_Pool: resetPool() must be called before getPool");
79#define TPETRA_DETAILS_RANDOM_INSTANT(NODE) \
81 Kokkos::Random_XorShift64_Pool<typename NODE::execution_space>* Details::Static_Random_XorShift64_Pool<typename NODE::execution_space>::pool_ = nullptr; \
82 template class Details::Static_Random_XorShift64_Pool<typename NODE::execution_space>;
Implementation details of Tpetra.
Namespace Tpetra contains the class and methods constituting the Tpetra library.