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);
203 template <
typename T> Long
bytesOf (
const std::vector<T>& v);
204 template <
typename Key,
typename T,
class Compare> 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
356 return sizeof(v) + v.capacity()*
sizeof(T);
359template <
typename Key,
typename T,
class Compare>
402 seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed<<6) + (seed>>2);
409 for (
const auto &
x: vec) {
420 constexpr decltype((std::declval<T>().begin(), std::declval<T>().end(),
true))
HasBeginEnd() {
423 template <
class T,
class... Args>
433 template <
class T,
class... Args>
439 template <
class T, std::size_t... idx>
441 const char* symbol_begin,
const char* symbol_delim,
442 const char* symbol_end,
const char* symbol_str,
int limit) {
445 auto op = [&](
auto& value) {
446 if (count > 0 && (count <= limit || limit < 0)) {
449 if (count < limit || limit < 0) {
450 ToString(os, value, symbol_begin, symbol_delim, symbol_end,
452 }
else if (count == limit) {
457 (op(std::get<idx>(t)), ...);
464 const char* symbol_delim,
const char* symbol_end,
465 const char* symbol_str,
int limit)
467 if constexpr (std::is_same_v<std::string, T> ||
468 std::is_same_v<std::string_view, T> ||
469 std::is_same_v<char*, std::decay_t<T>> ||
470 std::is_same_v<const char*, T>) {
472 os << symbol_str << t << symbol_str;
473 }
else if constexpr (std::is_same_v<signed char, T> ||
474 std::is_same_v<unsigned char, T>) {
476 os << static_cast<int>(t);
477 }
else if constexpr (std::is_pointer_v<T>) {
479 os << static_cast<const void*>(t);
480 }
else if constexpr (detail::HasBeginEnd<T>() || std::is_array_v<T>) {
484 for (
auto& value : t) {
488 if (count < limit || limit < 0) {
489 ToString(os, value, symbol_begin, symbol_delim, symbol_end,
491 }
else if (count == limit) {
498 }
else if constexpr (detail::HasTupleSize<T>()) {
500 detail::ToStringTupleImp(std::make_index_sequence<std::tuple_size_v<T>>{},
501 os, t, symbol_begin, symbol_delim, symbol_end,
511std::string
amrex::ToString(
const T& t,
const char* symbol_begin,
const char* symbol_delim,
512 const char* symbol_end,
const char* symbol_str,
513 int limit, std::ostringstream ss)
515 ToString(ss, t, symbol_begin, symbol_delim, symbol_end, symbol_str, limit);
519template <
typename F,
typename... T>
522 ->
decltype(std::declval<F>()(std::declval<T>()...))
526 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
std::tuple< IntVectND< 3 >, int, Direction, Kind > Key
Definition AMReX_FFT_Helper.H:1201
Definition AMReX_FillPatchUtil_I.H:7
void ToStringTupleImp(std::index_sequence< idx... >, std::ostream &os, const T &t, const char *symbol_begin, const char *symbol_delim, const char *symbol_end, const char *symbol_str, int limit)
Definition AMReX_Utility.H:440
constexpr decltype((std::tuple_size< T >::value, true)) HasTupleSize()
Definition AMReX_Utility.H:430
constexpr decltype((std::declval< T >().begin(), std::declval< T >().end(), true)) HasBeginEnd()
Definition AMReX_Utility.H:420
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:463
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:402
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
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:407
Long bytesOf(const std::vector< T > &v)
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:521
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:338
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:1718
void hash_combine(uint64_t &seed, const T &val) noexcept
Definition AMReX_Utility.H:400
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