with-carry for fast random number generation.
Only print total summary after all tests run. Put calculated results from each iteration of a test in a separate IOR_results_t structure. Clean up the allocation and freeing code for these caluclated bits, which allowing us to hang onto the results until the end of all tests. That in turn allows us to perform one big summary at the end of all of the tests.
Clean up the header files to only contain those things that need to be shared between .c files. Functions that are not shared are now declared static to make their file scope explicit. Functions that ARE shared are declared in appropriate headers. I am not going to claim that I caugh everything, but at least it is a good start.
It was a nice idea to use multi-line error messages to make them really obvious, but unfortunately it is terrible in practice. Often errors will occur on multiple nodes simultaneously and the error messages will be interleaved and virtually unreadable. I also prefixed each message with "ior", to make it clear that it is ior that produced the message, and not the scheduler, MPI, or something else.