SOBOL is a library of FORTRAN90 routines, using single or double precision arithmetic, to compute elements of the Sobol quasirandom sequence.
A quasirandom or low discrepancy sequence, such as the Faure, Halton, Hammersley, Niederreiter or Sobol sequences, is "less random" than a pseudorandom number sequence, but more useful for such tasks as approximation of integrals in higher dimensions, and in global optimization. This is because low discrepancy sequences tend to sample space "more uniformly" than random numbers. Algorithms that use such sequences may have superior convergence.
SOBOL is an adaptation of the INSOBL and GOSOBL routines in ACM TOMS Algorithm 647 and ACM TOMS Algorithm 659. The original code can only compute the "next" element of the sequence. The revised code allows the user to specify the index of any desired element.
At the request of a user, the library now contains two versions of the algorithm, one using the default integer and real precision, and one using the higher precision obtainable by requesting "(KIND=8)". The two sets of code are distinguished by names that begin with I4_ and I8_. I am aware that using the KIND attribute with an explicit value is not the correct way of asking for higher precision, but it's natural, and the correct way looks a little too awkward and obscure to me today. I am aware that many variables in the higher precision code need not themselves be calculated in higher precision. I'd just like to see if and how the higher precision code runs at all.
A remark by Joe and Kuo shows how to extend the algorithm from the original maximum spatial dimension of 40 up to a maximum spatial dimension of 1111. These changes have been implemented in this version of the program.
The original, true, correct versions of ACM TOMS Algorithm 647 and ACM TOMS Algorithm 659 are available in the TOMS subdirectory of the NETLIB web site. The version displayed here has been converted to FORTRAN90, and other internal changes have been made to suit me.
CVT is a FORTRAN90 library which computes elements of a Centroidal Voronoi Tessellation.
FAURE is a FORTRAN90 library which computes elements of a Faure quasirandom sequence.
GRID is a FORTRAN90 library which computes elements of a grid dataset.
GSL is the Gnu Scientific Library, a library of C++ routines which includes routines to compute elements of the Sobol sequence.
HALTON is a FORTRAN90 library which computes elements of a Halton quasirandom sequence.
HAMMERSLEY is a FORTRAN90 library which computes elements of a Hammersley quasirandom sequence.
HEX_GRID is a FORTRAN90 library which computes elements of a hexagonal grid dataset.
HEX_GRID_ANGLE is a FORTRAN90 library which computes elements of an angled hexagonal grid dataset.
IHS is a FORTRAN90 library which computes elements of an improved distributed Latin hypercube dataset.
LATIN_CENTER is a FORTRAN90 library which computes elements of a Latin Hypercube dataset, choosing center points.
LATIN_EDGE is a FORTRAN90 library which computes elements of a Latin Hypercube dataset, choosing edge points.
LATIN_RANDOM is a FORTRAN90 library which computes elements of a Latin Hypercube dataset, choosing points at random.
LCVT is a FORTRAN90 library which computes a latinized Centroidal Voronoi Tessellation.
NIEDERREITER2 is a FORTRAN90 library which computes elements of a Niederreiter quasirandom sequence with base 2.
NORMAL is a FORTRAN90 library which computes elements of a sequence of pseudorandom normally distributed values.
SOBOL is also available in a C++ version and a MATLAB version.
SOBOL_DATASET is an interactive executable FORTRAN90 program for specifying a Sobol dataset and writing it to a file.
TOMS647 is a FORTRAN90 version of ACM TOMS algorithm 647, for evaluating Faure, Halton and Sobol sequences.
TOMS659 is the FORTRAN77 source of ACM TOMS algorithm 659 for evaluating Sobol sequences.
UNIFORM is a FORTRAN90 library which computes elements of a uniform pseudorandom sequence.
VAN_DER_CORPUT is a FORTRAN90 library which computes elements of a van der Corput quasirandom sequence.
SOBOL_OLD is an older version of the program, which was restricted to a maximum spatial dimension of 40.
SOBOL is the current version of the program, which is restricted to a maximum spatial dimension of 1111.
SOBOL_OLD_PRB tests the old version of the code.
SOBOL_PRB tests the current version of the code.
You can go up one level to the FORTRAN90 source codes.