\(\renewcommand{\AA}{\text{Å}}\)
4.14. Platform abstraction functions
The platform
sub-namespace inside the LAMMPS_NS
namespace
provides a collection of wrapper and convenience functions and utilities
that perform common tasks for which platform specific code would be
required or for which a more high-level abstraction would be convenient
and reduce duplicated code. This reduces redundant implementations and
encourages consistent behavior and thus has some overlap with the
“utils” sub-namespace.
4.14.1. Time functions
-
double LAMMPS_NS::platform::cputime()
Return the consumed CPU time for the current process in seconds
This is a wrapper around the POSIX function getrusage() and its Windows equivalent. It is to be used in a similar fashion than MPI_Wtime(). Its resolution may be rather low so it can only be trusted when observing processes consuming CPU time of at least a few seconds.
- Returns:
used CPU time in seconds
-
double LAMMPS_NS::platform::walltime()
Return the wall clock state for the current process in seconds
This this clock is counting continuous time and is initialized during load of the executable/library. Its absolute value must be considered arbitrary and thus elapsed wall times are measured in taking differences. It is therefore to be used in a similar fashion as MPI_Wtime() but has a different offset, usually leading to better resolution.
- Returns:
wall clock time in seconds
-
void LAMMPS_NS::platform::usleep(int usec)
Suspend execution for a microsecond interval
This emulates the usleep(3) BSD function call also mentioned in POSIX.1-2001. This is not a precise delay; it may be longer, but not shorter.
- Parameters:
usec – length of delay in microseconds
4.14.2. Platform information functions
-
std::string LAMMPS_NS::platform::os_info()
Return string with the operating system version and architecture info
- Returns:
string with info about the OS and the platform is is running on
-
std::string LAMMPS_NS::platform::compiler_info()
Return string with compiler version info
This function uses predefined compiler macros to identify Compilers and their version and configuration info.
- Returns:
string with the compiler information text
-
std::string LAMMPS_NS::platform::cxx_standard()
Return string with C++ standard version used to compile LAMMPS.
This function uses predefined compiler macros to identify the C++ standard version used to compile LAMMPS with.
- Returns:
string with the C++ standard version or “unknown”
-
std::string LAMMPS_NS::platform::openmp_standard()
Return string with OpenMP standard version info
This function uses predefined compiler macros to identify OpenMP support and the supported version of the standard.
- Returns:
string with the openmp information text
-
std::string LAMMPS_NS::platform::mpi_vendor()
Return string with MPI vendor info
This function uses predefined macros to identify the vendor of the MPI library used.
- Returns:
string with the MPI vendor information text
-
std::string LAMMPS_NS::platform::mpi_info(int &major, int &minor)
Return string with MPI version info
This function uses predefined macros and MPI function calls to identify the version of the MPI library used.
- Parameters:
major – major version of the MPI standard (set on exit)
minor – minor version of the MPI standard (set on exit)
- Returns:
string with the MPI version information text
-
std::string LAMMPS_NS::platform::compress_info()
Return string with list of available compression types and executables
This function tests which of the supported compression executables are available for reading or writing compressed files where supported.
- Returns:
string with list of available compression tools
4.14.3. File and path functions and global constants
-
constexpr char LAMMPS_NS::platform::filepathsep[] = "/"
Platform specific file path component separator
This is a string with the character that separates directories and filename in paths on a platform. If multiple are characters are provided, the first is the preferred one.
-
constexpr char LAMMPS_NS::platform::pathvarsep = ':'
Platform specific path environment variable component separator
This is the character that separates entries in “PATH”-style environment variables.
-
const char *LAMMPS_NS::platform::guesspath(FILE *fp, char *buf, int len)
Try to detect pathname from FILE pointer
Currently only supported on Linux, MacOS, and Windows. Otherwise will report “(unknown)”.
On Linux the folder /proc/self/fd holds symbolic links to the actual pathnames associated with each open file descriptor of the current process. On MacOS the same kind of information can be obtained using
fcntl(fd,F_GETPATH,buf)
. On Windows we useGetFinalPathNameByHandleA()
which is available with Windows Vista and later. If the buffer is too small (< 16 bytes) a null pointer is returned.This function is used to provide a filename with error messages in functions where the filename is not passed as an argument, but the FILE * pointer.
- Parameters:
fp – FILE pointer struct from STDIO library for which we want to detect the name
buf – storage buffer for pathname. output will be truncated if not large enough
len – size of storage buffer. output will be truncated to this length - 1
- Returns:
pointer to the storage buffer with path or a NULL pointer if buf is invalid or the buffer size is too small
-
std::string LAMMPS_NS::platform::path_basename(const std::string &path)
Strip off leading part of path, return just the filename
- Parameters:
path – file path
- Returns:
file name
-
std::string LAMMPS_NS::platform::path_join(const std::string &a, const std::string &b)
Join two pathname segments
This uses the forward slash ‘/’ character unless LAMMPS is compiled for Windows where it uses the backward slash ‘'
- Parameters:
a – first path
b – second path
- Returns:
combined path
-
bool LAMMPS_NS::platform::file_is_readable(const std::string &path)
Check if file exists and is readable
- Parameters:
path – file path
- Returns:
true if file exists and is readable
-
bool LAMMPS_NS::platform::is_console(FILE *fp)
Check if a file pointer may be connected to a console
- Parameters:
fp – file pointer
- Returns:
true if the file pointer is flagged as a TTY
-
bool LAMMPS_NS::platform::path_is_directory(const std::string &path)
Check if a path is a directory
- Parameters:
path – directory path
- Returns:
true if the directory exists
-
std::string LAMMPS_NS::platform::current_directory()
Get string with path to the current directory
- Returns:
path to the current directory or empty string
-
std::vector<std::string> LAMMPS_NS::platform::list_directory(const std::string &dir)
Get list of entries in a directory
This provides a list of strings of the entries in the directory without the leading path name while also skipping over “..” and “.”.
- Parameters:
dir – path to directory
- Returns:
vector with strings of all directory entries
-
int LAMMPS_NS::platform::chdir(const std::string &path)
Change current directory
- Parameters:
path – new current working directory path
- Returns:
-1 if unsuccessful, otherwise >= 0
-
int LAMMPS_NS::platform::mkdir(const std::string &path)
Create a directory
Unlike the the
mkdir()
or_mkdir()
functions of the C library, this function will also try to create non-existing sub-directories in case they don’t exist, and thus behave like themkdir -p
command rather than plainmkdir
or `md
.- Parameters:
path – directory path
- Returns:
-1 if unsuccessful, otherwise >= 0
-
int LAMMPS_NS::platform::rmdir(const std::string &path)
Delete a directory
Unlike the the
rmdir()
or_rmdir()
functions of the C library, this function will check for the contents of the folder and recurse into any sub-folders, if necessary and delete all contained folders and their contents before deleting the folder path.- Parameters:
path – directory path
- Returns:
-1 if unsuccessful, otherwise >= 0
-
int LAMMPS_NS::platform::unlink(const std::string &path)
Delete a file
- Parameters:
path – path to file to be deleted
- Returns:
0 on success, -1 on error
4.14.4. Standard I/O function wrappers
-
constexpr bigint LAMMPS_NS::platform::END_OF_FILE = -1
constant to seek to the end of the file
-
bigint LAMMPS_NS::platform::ftell(FILE *fp)
Get current file position
- Parameters:
fp – FILE pointer of the given file
- Returns:
current FILE pointer position cast to a bigint
-
int LAMMPS_NS::platform::fseek(FILE *fp, bigint pos)
Set absolute file position
If the absolute position is END_OF_FILE, then position at the end of the file.
- Parameters:
fp – FILE pointer of the given file
pos – new position of the FILE pointer
- Returns:
0 if successful, otherwise -1
-
int LAMMPS_NS::platform::ftruncate(FILE *fp, bigint length)
Truncate file to a given length and re-position file pointer
- Parameters:
fp – FILE pointer of the given file
length – length to which the file is being truncated to
- Returns:
0 if successful, otherwise -1
-
FILE *LAMMPS_NS::platform::popen(const std::string &cmd, const std::string &mode)
Open a pipe to a command for reading or writing
- Parameters:
cmd – command for the pipe
mode – “r” for reading from cmd or “w” for writing to cmd
- Returns:
file pointer to the pipe if successful or null
-
int LAMMPS_NS::platform::pclose(FILE *fp)
Close a previously opened pipe
- Parameters:
fp – FILE pointer for the pipe
- Returns:
exit status of the pipe command or -1 in case of errors
4.14.5. Environment variable functions
-
int LAMMPS_NS::platform::putenv(const std::string &vardef)
Add variable to the environment
- Parameters:
vardef – variable name or variable definition (NAME=value)
- Returns:
-1 if failure otherwise 0
-
int LAMMPS_NS::platform::unsetenv(const std::string &variable)
Delete variable from the environment
- Parameters:
variable – variable name
- Returns:
-1 if failure otherwise 0
-
std::vector<std::string> LAMMPS_NS::platform::list_pathenv(const std::string &var)
Get list of entries in a path environment variable
This provides a list of strings of the entries in an environment variable that is containing a “path” like “PATH” or “LD_LIBRARY_PATH”.
- Parameters:
var – name of the environment variable
- Returns:
vector with strings of all entries in that path variable
-
std::string LAMMPS_NS::platform::find_exe_path(const std::string &cmd)
Find pathname of an executable in the standard search path
This function will traverse the list of directories in the PATH environment variable and look for the executable cmd. If the file exists and is executable the full path is returned as string, otherwise and empty string is returned.
On Windows the cmd string must not include and extension as this function will automatically append the extensions “.exe”, “.com” and “.bat” and look for those paths. On Windows also the current directory is checked (and first), while otherwise not unless “.” exists in the PATH environment variable.
Because of the nature of the check, this will not detect shell functions built-in command or aliases.
- Parameters:
cmd – name of command
- Returns:
vector with strings of all directory entries
4.14.6. Dynamically loaded object or library functions
-
void *LAMMPS_NS::platform::dlopen(const std::string &fname)
Open a shared object file or library
- Parameters:
fname – name or path of the shared object
- Returns:
handle to the shared object or null
-
int LAMMPS_NS::platform::dlclose(void *handle)
Close a shared object
This releases the object corresponding to the provided handle. Resolved symbols associated with this handle may not be used after this call
- Parameters:
handle – handle to an opened shared object
- Returns:
0 if successful, non-zero of not
-
void *LAMMPS_NS::platform::dlsym(void *handle, const std::string &symbol)
Resolve a symbol in shared object
- Parameters:
handle – handle to an opened shared object
symbol – name of the symbol to extract
- Returns:
pointer to the resolved symbol or null
-
std::string LAMMPS_NS::platform::dlerror()
Obtain error diagnostic info after dynamic linking function calls
Return a human-readable string describing the most recent error that occurred when using one of the functions for dynamic loading objects the last call to this function. The string is empty, if there was no error.
- Returns:
string with error message or empty
4.14.7. Compressed file I/O functions
-
bool LAMMPS_NS::platform::has_compress_extension(const std::string &file)
Check if a file name ends in a known extension for a compressed file format
Currently supported file extensions are: .gz, .bz2, .zst, .xz, .lzma, lz4
- Parameters:
file – name of the file to check
- Returns:
true if the file has a known extension, otherwise false
-
FILE *LAMMPS_NS::platform::compressed_read(const std::string &file)
Open pipe to compressed text file for reading
- Parameters:
file – name of the file to open
- Returns:
FILE pointer to pipe using for reading the compressed file.
-
FILE *LAMMPS_NS::platform::compressed_write(const std::string &file)
Open pipe to compressed text file for writing
- Parameters:
file – name of the file to open
- Returns:
FILE pointer to pipe using for reading the compressed file.