/home/runner/work/spades/spades/Source/Utilities.H Source File

SPADES API: /home/runner/work/spades/spades/Source/Utilities.H Source File
SPADES API
Utilities.H
Go to the documentation of this file.
1#ifndef UTILITIES_H
2#define UTILITIES_H
3
4#include <AMReX.H>
5#include <AMReX_RealVect.H>
6#include <AMReX_MultiFab.H>
7#include <AMReX_MultiFabUtil.H>
8#include <AMReX_Random.H>
9#include "Constants.H"
10
11namespace spades {
12
17template <typename, typename = void>
18struct HasProcessOp : std::false_type
19{};
20
25template <typename T>
26struct HasProcessOp<T, std::void_t<typename T::ProcessOp>> : std::true_type
27{};
28
35AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Long
36pairing_function(const amrex::Long k1, const amrex::Long k2)
37{
38 return (k1 + k2) * (k1 + k2 + 1) / 2 + k2;
39}
40
47AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real
48random_exponential(const amrex::Real lambda, amrex::RandomEngine const& engine)
49{
50 return std::log(1 - amrex::Random(engine)) / (-lambda);
51}
52
58amrex::Real random_exponential(const amrex::Real lambda);
59
65AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE std::uint64_t
66max_representation(const int nbits)
67{
68 AMREX_ASSERT(nbits < 64);
69 std::uint64_t result = 2;
70 for (int i = 0; i < nbits; i++) {
71 result *= 2;
72 }
73 return result;
74}
75
81AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE std::uint64_t bitmask(const int nbits)
82{
83 AMREX_ASSERT(nbits < 64);
84 // Shift 1 by nbits (create power of 2)
85 // Subtract 1 to fill all lower nbits with 1s
86 // bitmask(16): 0xFFFF
87 return (1ULL << nbits) - 1;
88}
89
94void goto_next_line(std::istream& is);
95
105void read_file(
106 const std::string& filename,
107 amrex::Vector<char>& charBuf,
108 bool bExitOnError);
109
110} // namespace spades
111#endif
Solver for PArallel Discrete Event Simulation.
Definition ConsoleIO.cpp:14
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Long pairing_function(const amrex::Long k1, const amrex::Long k2)
Cantor pairing function.
Definition Utilities.H:36
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE std::uint64_t max_representation(const int nbits)
Maximum unsigned integer representation given a number of bits.
Definition Utilities.H:66
void goto_next_line(std::istream &is)
Skip to the next line in stream.
Definition Utilities.cpp:10
void read_file(const std::string &filename, amrex::Vector< char > &charBuf, bool bExitOnError)
Read and broadcast file to all ranks.
Definition Utilities.cpp:16
amrex::Real random_exponential(const amrex::Real lambda)
Exponential distribution.
Definition Utilities.cpp:4
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE std::uint64_t bitmask(const int nbits)
bitmask given a number of bits
Definition Utilities.H:81
Trait to determine if a class defines a nested struct named ProcessOp.
Definition Utilities.H:19