MolSSI Integral Reference Project

Each integral implemented in MIRP has a few different functions for computing them.
Functions with the pattern mirp_{name}_single
compute a single cartesian component of an integral using arbitrary precision. These functions take arbitrary precision types as input and output.
A working precision is specified as an argument, along with all the parameters required for the integral.
This function also computes a single cartesian component of an integral using arbitrary precision, however takes strings as inputs. The strings are converted to interval arithmetic with the precision given by working_prec
.
These types of functions can be created from other functions with the mirp_integral4_single_str wrapper.
Computes single cartesian integrals exact double precision. These functions take double precision inputs and output double precision. Internally, interval arithmetic is used such that there is no roundoff error in the final result. Therefore, the integral is 'exact' to double precision.
These types of functions can be created from other functions with the mirp_integral4_single_exact wrapper.
These functions are analogous to their 'single' counterparts, however they take in contracted shells (both segmented and general) as inputs and return a complete set of integral.
Functions with the pattern mirp_{name}
are created with mirp_integral4`. The others are created via mirp_integral4_str, and mirp_integral4_exact.
The wrapping functions mentioned above are used to create the higherlevel functions from (typically) the mirp_{name}_single
. This can be done even easier with the MIRP_WRAP_
macros.
Macro  Creates  Requires  Calls 

MIRP_WRAP_SHELL4(name)  mirp_name  mirp_name_single  mirp_integral4 
MIRP_WRAP_SINGLE4_STR(name)  mirp_name_single_str  mirp_name_single  mirp_integral4_single_str 
MIRP_WRAP_SINGLE4_EXACT(name)  mirp_name_single_exact  mirp_name_single  mirp_integral4_single_exact 
MIRP_WRAP_SHELL4_STR(name)  mirp_name_str  mirp_name  mirp_integral4_str 
MIRP_WRAP_SHELL4_EXACT(name)  mirp_name_exact  mirp_name  mirp_integral4_exact 
See eri.h for an example