3#include <AMReX_Config.H>
47 template <
typename T>
bool is_it (std::string
const& s, T& v);
50 const std::vector<std::string>&
Tokenize (
const std::string& instr,
51 const std::string& separators);
95 bool callbarrier =
true);
99 bool callbarrier =
true);
103 bool callbarrier =
true);
154 const Vector<int> &refratios);
163 explicit expect (std::string str_);
164 explicit expect (
const char* istr_);
166 [[nodiscard]]
const std::string&
the_string( )
const;
175 StreamRetry(std::string filename,
bool abortonretryfailure,
int maxtries);
204 template <
typename Key,
typename T,
class Compare>
amrex::Long bytesOf (
const std::map<Key,T,Compare>& m);
213 void Sleep (
double sleepsec);
217 std::chrono::high_resolution_clock,
218 std::chrono::steady_clock>;
219 double second () noexcept;
221 template<typename T>
void hash_combine (uint64_t & seed, const T & val) noexcept;
222 template<typename T> uint64_t
hash_vector (const
Vector<T> & vec, uint64_t seed = 0xDEADBEEFDEADBEEF) noexcept;
225 std::ostream&
ToString(std::ostream& os,
227 const
char* symbol_begin = "[",
228 const
char* symbol_delim = ", ",
229 const
char* symbol_end = "]",
230 const
char* symbol_str = "\"",
235 const
char* symbol_begin = "[",
236 const
char* symbol_delim = ", ",
237 const
char* symbol_end = "]",
238 const
char* symbol_str = "\"",
240 std::ostringstream ss = std::ostringstream{});
251 template <
typename F,
typename... T>
254 ->
decltype(std::declval<F>()(std::declval<T>()...));
260 std::istringstream ss(s);
263 std::getline(ss, left);
273 if(myLocalId == rootId) {
276 ParallelDescriptor::Bcast(&aT_Size, 1, rootId, localComm);
278 if(myLocalId != rootId) {
282 ParallelDescriptor::Bcast(aT.
dataPtr(), aT.
size(), rootId, localComm);
298#define BL_LANG_FORT 1
301#ifdef BL_FORT_USE_UNDERSCORE
302#undef BL_FORT_USE_UNDERSCORE
311#define BL_FORT_USE_UNDERSCORE 1
314#ifdef BL_FORT_USE_UPPERCASE
315#undef BL_FORT_USE_UPPERCASE
324#define BL_FORT_USE_UPPERCASE 1
327#ifdef BL_FORT_USE_LOWERCASE
328#undef BL_FORT_USE_LOWERCASE
337#define BL_FORT_USE_LOWERCASE 1
349#define BL_IGNORE_MAX 100000
355 return sizeof(v) + v.capacity()*
sizeof(T);
358template <
typename Key,
typename T,
class Compare>
400 seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed<<6) + (seed>>2);
407 for (
const auto &
x: vec) {
414namespace amrex::detail {
418 constexpr decltype((std::declval<T>().begin(), std::declval<T>().end(),
true)) HasBeginEnd() {
421 template <
class T,
class... Args>
422 constexpr bool HasBeginEnd(Args...) {
428 constexpr decltype((std::tuple_size<T>::value,
true)) HasTupleSize() {
431 template <
class T,
class... Args>
432 constexpr bool HasTupleSize(Args...) {
437 template <
class T, std::size_t... idx>
438 void ToStringTupleImp(std::index_sequence<idx...>, std::ostream& os,
const T& t,
439 const char* symbol_begin,
const char* symbol_delim,
440 const char* symbol_end,
const char* symbol_str,
int limit) {
443 auto op = [&](
auto& value) {
444 if (count > 0 && (count <= limit || limit < 0)) {
447 if (count < limit || limit < 0) {
448 ToString(os, value, symbol_begin, symbol_delim, symbol_end,
450 }
else if (count == limit) {
455 (op(std::get<idx>(t)), ...);
463 const char* symbol_delim,
const char* symbol_end,
464 const char* symbol_str,
int limit)
466 if constexpr (std::is_same_v<std::string, T> ||
467 std::is_same_v<std::string_view, T> ||
468 std::is_same_v<char*, std::decay_t<T>> ||
469 std::is_same_v<const char*, T>) {
471 os << symbol_str << t << symbol_str;
472 }
else if constexpr (std::is_same_v<signed char, T> ||
473 std::is_same_v<unsigned char, T>) {
475 os << static_cast<int>(t);
476 }
else if constexpr (std::is_pointer_v<T>) {
478 os << static_cast<const void*>(t);
479 }
else if constexpr (detail::HasBeginEnd<T>() || std::is_array_v<T>) {
483 for (
auto& value : t) {
487 if (count < limit || limit < 0) {
488 ToString(os, value, symbol_begin, symbol_delim, symbol_end,
490 }
else if (count == limit) {
497 }
else if constexpr (detail::HasTupleSize<T>()) {
499 detail::ToStringTupleImp(std::make_index_sequence<std::tuple_size_v<T>>{},
500 os, t, symbol_begin, symbol_delim, symbol_end,
510std::string
amrex::ToString(
const T& t,
const char* symbol_begin,
const char* symbol_delim,
511 const char* symbol_end,
const char* symbol_str,
512 int limit, std::ostringstream ss)
514 ToString(ss, t, symbol_begin, symbol_delim, symbol_end, symbol_str, limit);
518template <
typename F,
typename... T>
521 ->
decltype(std::declval<F>()(std::declval<T>()...))
525 return f(std::forward<T>(
arg)...);
#define BL_ASSERT(EX)
Definition AMReX_BLassert.H:39
#define AMREX_NO_INLINE
Definition AMReX_Extension.H:136
#define AMREX_IF_ON_DEVICE(CODE)
Definition AMReX_GpuQualifiers.H:56
#define AMREX_IF_ON_HOST(CODE)
Definition AMReX_GpuQualifiers.H:58
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
void amrex_free(void *p)
Definition AMReX_Utility.cpp:954
void * amrex_malloc(std::size_t size)
Definition AMReX_Utility.cpp:948
Definition AMReX_Utility.H:172
std::ostream::pos_type spos
Definition AMReX_Utility.H:186
bool TryFileOutput()
Definition AMReX_Utility.cpp:647
int maxTries
Definition AMReX_Utility.H:182
static void ClearStreamErrors()
Definition AMReX_Utility.H:179
std::string fileName
Definition AMReX_Utility.H:184
static int nStreamErrors
Definition AMReX_Utility.H:189
std::string suffix
Definition AMReX_Utility.H:187
bool abortOnRetryFailure
Definition AMReX_Utility.H:183
int tries
Definition AMReX_Utility.H:182
bool TryOutput()
Definition AMReX_Utility.cpp:596
static int NStreamErrors()
Definition AMReX_Utility.H:178
std::ostream * sros
Definition AMReX_Utility.H:185
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:28
T * dataPtr() noexcept
get access to the underlying data pointer
Definition AMReX_Vector.H:49
Long size() const noexcept
Definition AMReX_Vector.H:53
Definition AMReX_Utility.H:160
friend std::istream & operator>>(std::istream &, const expect &exp)
std::string istr
Definition AMReX_Utility.H:168
const std::string & the_string() const
Definition AMReX_Utility.cpp:568
amrex_long Long
Definition AMReX_INT.H:30
int MPI_Comm
Definition AMReX_ccse-mpi.H:51
Definition AMReX_Amr.cpp:49
std::ostream & ToString(std::ostream &os, const T &t, const char *symbol_begin="[", const char *symbol_delim=", ", const char *symbol_end="]", const char *symbol_str="\"", int limit=100)
Definition AMReX_Utility.H:462
void SyncStrings(const Vector< std::string > &localStrings, Vector< std::string > &syncedStrings, bool &alreadySynced)
Definition AMReX_Utility.cpp:695
double InvNormDistBest(double p)
This function returns an approximation of the inverse cumulative standard normal distribution functio...
Definition AMReX_Utility.cpp:408
void FileOpenFailed(const std::string &file)
Output a message and abort when couldn't open the file.
Definition AMReX_Utility.cpp:137
bool is_integer(const char *str)
Useful C++ Utility Functions.
Definition AMReX_Utility.cpp:35
int CRRBetweenLevels(int fromlevel, int tolevel, const Vector< int > &refratios)
Definition AMReX_Utility.cpp:253
void BroadcastStringArray(Vector< std::string > &bSA, int myLocalId, int rootId, const MPI_Comm &localComm)
Definition AMReX_Utility.cpp:917
__host__ __device__ T arg(const GpuComplex< T > &a_z) noexcept
Return the angle of a complex number's polar representation.
Definition AMReX_GpuComplex.H:403
Vector< std::string > UnSerializeStringArray(const Vector< char > &charArray)
Definition AMReX_Utility.cpp:871
std::conditional_t< std::chrono::high_resolution_clock::is_steady, std::chrono::high_resolution_clock, std::chrono::steady_clock > MaxResSteadyClock
Definition AMReX_Utility.H:218
amrex::Long bytesOf(const std::vector< T > &v)
Definition AMReX_Utility.H:353
bool FileExists(const std::string &filename)
Check if a file already exists. Return true if the filename is an existing file, directory,...
Definition AMReX_Utility.cpp:145
bool is_it(std::string const &s, T &v)
Return true and store value in v if string s is type T.
Definition AMReX_Utility.H:258
const std::vector< std::string > & Tokenize(const std::string &instr, const std::string &separators)
Splits "instr" into separate pieces based on "separators".
Definition AMReX_Utility.cpp:61
double second() noexcept
Definition AMReX_Utility.cpp:940
uint64_t hash_vector(const Vector< T > &vec, uint64_t seed=0xDEADBEEFDEADBEEF) noexcept
Definition AMReX_Utility.H:405
void UtilCreateCleanDirectory(const std::string &path, bool callbarrier=true)
Create a new directory, renaming the old one if it exists.
Definition AMReX_Utility.cpp:167
void CreateDirectoryFailed(const std::string &dir)
Output a message and abort when couldn't create the directory.
Definition AMReX_Utility.cpp:129
void BroadcastArray(Vector< T > &aT, int myLocalId, int rootId, const MPI_Comm &localComm)
Definition AMReX_Utility.H:270
bool UtilCreateDirectory(const std::string &path, mode_t mode, bool verbose=false)
Creates the specified directories. path may be either a full pathname or a relative pathname....
Definition AMReX_Utility.cpp:116
__host__ __device__ auto callNoinline(F const &f, T &&... arg) -> decltype(std::declval< F >()(std::declval< T >()...))
Call given function without inline.
Definition AMReX_Utility.H:520
void BroadcastString(std::string &bStr, int myLocalId, int rootId, const MPI_Comm &localComm)
Definition AMReX_Utility.cpp:901
__host__ __device__ GpuComplex< T > exp(const GpuComplex< T > &a_z) noexcept
Complex expotential function.
Definition AMReX_GpuComplex.H:339
Vector< char > SerializeStringArray(const Vector< std::string > &stringArray)
Definition AMReX_Utility.cpp:857
std::istream & operator>>(std::istream &is, BoxND< dim > &bx)
Read from istream.
Definition AMReX_Box.H:1825
void hash_combine(uint64_t &seed, const T &val) noexcept
Definition AMReX_Utility.H:398
int verbose
Definition AMReX_DistributionMapping.cpp:36
void Sleep(double sleepsec)
Definition AMReX_Utility.cpp:931
void UtilRenameDirectoryToOld(const std::string &path, bool callbarrier=true)
Rename a current directory if it exists.
Definition AMReX_Utility.cpp:222
static const Long gcc_map_node_extra_bytes
Definition AMReX_Utility.H:202
double InvNormDist(double p)
This function returns an approximation of the inverse cumulative standard normal distribution functio...
Definition AMReX_Utility.cpp:287
void UtilCreateDirectoryDestructive(const std::string &path, bool callbarrier=true)
Create a new directory, removing old one if it exists.
Definition AMReX_Utility.cpp:196
std::string UniqueString()
Create a (probably) unique string.
Definition AMReX_Utility.cpp:151
void BroadcastBool(bool &bBool, int myLocalId, int rootId, const MPI_Comm &localComm)
Definition AMReX_Utility.cpp:886
void OutOfMemory()
Aborts after printing message indicating out-of-memory; i.e. operator new has failed....
Definition AMReX_Utility.cpp:247
Definition AMReX_TypeTraits.H:99