1C--- 8 June 1999 Chris S.  modified to read a file with the first argument
2C--- being a generator type
3C--- added 'integer gentype'
4C--- added 'Reading in a generator type' and   'read *, gentype'
5#define PARAM 0
6#define TIMING_TRIAL_SIZE 1000000
7
8#ifdef POINTER_SIZE
9#if POINTER_SIZE == 8
10#define SPRNG_POINTER integer*8
11#else
12#define SPRNG_POINTER integer*4
13#endif
14#else
15#define SPRNG_POINTER integer*4
16#endif
17
18        program test_generator
19
20	implicit none
21	integer gentype
22        external finit_rng, fget_rn_int, fget_rn_flt, fget_rn_dbl
23        external fcpu_t
24
25        SPRNG_POINTER finit_rng
26        real*8 fget_rn_dbl, fcpu_t, tempd
27        real*4 fget_rn_flt, tempf
28        integer fget_rn_int, tempi
29
30        integer i
31        SPRNG_POINTER gen
32        real*8 temp1, temp2, temp3, temp4
33        real*8 temp_mult
34C--- Reading in a generator type
35C---        read *, gentype
36
37        temp_mult =  TIMING_TRIAL_SIZE/1.0e6
38        gen = finit_rng(2,0,1,0,PARAM)
39
40        temp1 = fcpu_t()
41
42        do 100 i = 1,TIMING_TRIAL_SIZE
43           tempi = fget_rn_int(gen)
44 100    continue
45
46        temp2 = fcpu_t()
47
48        do 200 i = 1,TIMING_TRIAL_SIZE
49           tempf = fget_rn_flt(gen)
50 200    continue
51
52        temp3 = fcpu_t()
53
54
55        do 300 i = 1,TIMING_TRIAL_SIZE
56           tempd = fget_rn_dbl(gen)
57 300    continue
58
59        temp4 = fcpu_t()
60
61        if( temp2-temp1 .lt. 1.0e-15 ) then
62           print *, 'Timing information not available or nor accurate'
63           stop
64        end if
65
66        if( temp3-temp2 .lt. 1.0e-15 ) then
67           print *, 'Timing information not available or nor accurate'
68           stop
69        end if
70
71         if(temp4-temp3 .lt. 1.0e-15 ) then
72           print *, 'Timing information not available or not accurate'
73           stop
74        end if
75
76        temp1 = temp_mult/(temp2-temp1)
77        temp2 = temp_mult/(temp3-temp2)
78        temp3 = temp_mult/(temp4-temp3)
79
80        print *, 'User + System time Information'
81        print *, '(Note: MRS = Million Random Numbers Per Second)'
82        write(6,500) temp1
83        write(6,501) temp2
84        write(6,502) temp3
85
86 500    format('      Integer generator: ',  f7.3, ' MRS')
87 501    format('      real*4  generator: ',  f7.3, ' MRS')
88 502    format('      real*8 generator:  ',  f7.3, ' MRS')
89
90        end
91
92