Live long and prosper: use SPOCS!
SPOCS is a software library written in modern Fortran for efficiently computing descriptive statistical moments and co-moments. The SPOCS acronym stands for:
- Written in Modern Fortran
- C bindings
- Python bindings
- Modern CMake based build system
- Test suite and modern development practices including continuous integration testing
- Supports all floating point formats supported by Fortran compiler & host
- API Documentation using [FORD]
- Examples and futher usage information on the wiki
- Coarray based API for parallel processing
- MPI based API for parallel processing
- OpenMP based API for parallel processing
- Large integer support for processing more elements than can be represented by a 4-byte integer
- Reduced numerical error relative to most other one-pass algorithms, and even two-pass traditional algorithms
- Ability to watch and quantify level of statistical convergence, useful for estimating rate of convergence, error and/or uncertainty in quantities of interest, and to stop processing data once the desired convergence level is reached
- Abilty to monitor and stream the statistics as data is streamed to be processed (Online processing andm monitoring)
- Ability to partition data into subsets and process those asynchronously and/or simultaneously--the final result can be obtained with a simple reduction operation
- Finite, small state size in memory, dependent only on the number and type of statistics collected, NOT the number of points visited
- Linux or macOS, will likely work on other unix based systems
- Untested on Windows, YMMV
- CMake 3.12 or later, binaries are available on the CMake website and are easily installed into user-space for macOS, Linux and Windows
- A recent Fortran compiler with good Fortran 2003 support and some
Fortran 2008 support
- Tested with GFortran 8.2
- Tested with Intel 18.3
Follow the usual simple CMake based installation workflow:
mkdir build
cd build
export FC=/path/to/modern/Fortran/compiler
export CC=/path/to/C/compiler
cmake -DCMAKE_BUILD_TYPE:STRING=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local ..
cmake --build . -- -j $(nproc) # or just make -j
ctest --output-on-failure # Run tests to ensure proper functionality
sudo cmake --build . --target install # or just sudo make install
# sudo only required if you're installing into a system directory that needs root privs
Made with <3 by @zbeekman