Viewing contents of file '../idllib/contrib/groupk/ran0.pro'
;+
; NAME:
;        RAN0
;
; PURPOSE:
;        The RAN0 function returns one or more uniformly-
;        distributed, floating-point, pseudo-random numbers in the
;        range 0 LE Y < 1.0.
;
;        The random number generator is taken from: "Numerical Recipes in C"
;        2nd Edition.  It is the "minimal" random number generator of
;        Park and Miller (with the MASK removed) and is IDENTICAL to the
;        IDL RANDOMU function.
;
; CATEGORY:
;        Math.
;
; CALLING SEQUENCE:
;
;        Result = RAN0(Seed [, D1, ..., Dn])
;
; INPUTS:
;         Seed:    A named variable containing the seed value for
;                  random number generation. Seed is updated by RAN0
;                  once for each random number generated. The initial
;                  value of Seed should be set to different values in
;                  order to obtain different random sequences. If Seed
;                  is undefined, it is derived from the system clock.
;
; OPTIONAL INPUTS:
;        Di:       The dimensions of the result. The dimension
;                  parameters can be any scalar expression. Up to eight
;                  dimensions can be specified. If no dimensions are
;                  specified, RAN0 returns a scalar result
;
; OUTPUTS:
;        This function returns uniform random deviates between 0.0 and 1.0
;        (exclusive of the endpoint values) with array dimensions given
;        by the input parameters, D1, ..., Dn.
;
; RESTRICTIONS:
;        Currently only available on the AIX platform.
;
; PROCEDURE:
;        This function uses CALL_EXTERNAL to call an external sharable
;        C object (ran0_.lib).  This was done because coding the routine
;        entirely in IDL would resulted in an unacceptably slow algorithm
;        due to unavoidable for loops.
;
; MODIFICATION HISTORY:
;        Written by:    Han Wen, March 1996.
;-
function RAN0, Seed, D1, D2, D3, D4, D5, D6, D7, D8

         NP   = N_PARAMS()
         case NP of
              1    : r=0.0
              2    : r=FLTARR(D1)
              3    : r=FLTARR(D1,D2)
              4    : r=FLTARR(D1,D2,D3)
              5    : r=FLTARR(D1,D2,D3,D4)
              6    : r=FLTARR(D1,D2,D3,D4,D5)
              7    : r=FLTARR(D1,D2,D3,D4,D5,D6)
              8    : r=FLTARR(D1,D2,D3,D4,D5,D6,D7)
              9    : r=FLTARR(D1,D2,D3,D4,D5,D6,D7,D8)
              else : message,'Must have 1-9 parameters, '+$
                             'Seed [, D1,... D8]'
         endcase
         Ds = long(N_ELEMENTS(r))

         if (N_ELEMENTS(Seed) eq 0) then Seed=long(SYSTIME(1))
         Seed= long(Seed)

         junk = CALL_EXTERNAL(GRPKPATH()+'ran0_.lib', 'ran0_', $
                              Seed,Ds,r, /F_VALUE)
         return,r
end