SOBOL
Stream Initialization by Function
vslNewStream
 Assumedimen= seed
 Ifdimen< 1 ordimen> 40, assumedimen= 1.
Stream Initialization by Function
vslNewStreamEx
Position in
params[] 
0

1

2



4+dimen...dimen*
(maxdeg+1)+3


Parameter Class Indicators

Initial Values Subclass Indicators

Primitive polynomials

Maximum degree of primitive polynomial, maxdeg

Initial direction numbers

params[0] = dimen;
params[1] = VSL_USER_QRNG_INITIAL_VALUES;
params[2] = VSL_USER_INIT_DIRECTION_NUMBERS  VSL_USER_PRIMITIVE_POLYMS;
params[2] = VSL_USER_INIT_DIRECTION_NUMBERS;
params[2] = VSL_USER_PRIMITIVE_POLYMS;
params[2] = params[2]  VSL_QRNG_OVERRIDE_1ST_DIM_INIT;
unsigned int uSobolIrredPoly[dimen] = {...}; unsigned int uSobolMInit[dimen][maxdeg] = {...}; ... params[0] = dimen; params[1] = VSL_USER_QRNG_INITIAL_VALUES; params[2] = VSL_USER_INIT_DIRECTION_NUMBERSVSL_USER_PRIMITIVE_POLYMS; params[2] = params[2]  VSL_QRNG_OVERRIDE_1ST_DIM_INIT; for ( i = 0; i < dimen; i++ ) params[i+3] = uSobolIrredPoly[i]; params[3+dimen] = maxdeg; k = 4+dimen; for ( i = 0; i < dimen; i++ ) { for ( j = 0; j < maxdeg; j++ ) { params[k++] = uSobolMInit[i][j]; } }
... // dimen = 10 unsigned int uSobolMInit[dimen1][maxdeg] = {...}; params[0] = dimen; params[1] = VSL_USER_QRNG_INITIAL_VALUES; params[2] = VSL_USER_INIT_DIRECTION_NUMBERS; params[3] = maxdeg; k = 4; for ( i = 0; i < dimen1; i++ ) { for ( j = 0; j < maxdeg; j++ ) { params[k++] = uSobolMInit[i][j]; } }
Position in
params[] 
0

1

2



Parameter Class Indicators

Initial Values Subclass Indicators

Direction numbers

params[0] = dimen; params[1] = VSL_USER_QRNG_INITIAL_VALUES; Further, you need to initialize Initial Values Subclass Indicators field (params[2]): params[2] = VSL_USER_DIRECTION_NUMBERS;
unsigned int uSobolV[dimen][32] = {...}; params[0] = dimen; params[1] = VSL_USER_QRNG_INITIAL_VALUES; params[2] = VSL_USER_DIRECTION_NUMBERS; k = 3; for ( i = 0; i < dimen; i++ ) { for ( j = 0; j < 32; j++ ) { params[k++] = uSobolV[i][j]; } }
 Ifn= 0, assumedimen= 1 and initialize the stream using the default table of primitive polynomials and initial direction numbers.
 Ifn= 1,dimen = params[0], initialize the stream using the default table of primitive polynomials and initial direction numbers; (if dimen < 1 or dimen > 40, assume dimen = 1).
 Ifn> 1, dimen = params[0]
 If dimen < 1, assume dimen = 1 and initialize the stream using the default table of primitive polynomials and initial direction numbers.
 If the externally defined parameters of the generator are packed incorrectly, initialize the stream using the default table of primitive polynomials and initial direction numbers; (if dimen > 40, assume dimen = 1).
 Initialize the SOBOL quasirandom stream by means of the userdefined primitive polynomials and initial direction numbers or direction numbers.

Supported


Not supported


Supported

 The skipahead method skips individual components of quasirandom vectors rather than whole sdimensional vectors. Hence, to skip N sdimensional quasirandom vectors, callvslSkipAheadStreamsubroutine with parameternskipequal to the N s.
 The leapfrog method works with individual components of quasirandom vectors rather than with sdimensional vectors. In addition, its functionality allows picking out a fixed quasirandom component only. In other words, nstreams parameter should be equal to the predefined constantVSL_QRNG_LEAPFROG_COMPONENTS, andkparameter should indicate the index of a component of sdimensional quasirandom vectors to be picked out (0 ≤k<s).