93
   94
   95
   96
   97
   98
   99      INTEGER            N
  100
  101
  102      INTEGER            ISEED( 4 )
  103      REAL               X( N )
  104
  105
  106
  107
  108
  109      REAL               ONE
  110      parameter( one = 1.0e0 )
  111      INTEGER            LV, IPW2
  112      REAL               R
  113      parameter( lv = 128, ipw2 = 4096, r = one / ipw2 )
  114
  115
  116      INTEGER            I, I1, I2, I3, I4, IT1, IT2, IT3, IT4, J
  117
  118
  119      INTEGER            MM( LV, 4 )
  120
  121
  122      INTRINSIC          min, mod, real
  123
  124
  125      DATA               ( mm( 1, j ), j = 1, 4 ) / 494, 322, 2508,
  126     $                   2549 /
  127      DATA               ( mm( 2, j ), j = 1, 4 ) / 2637, 789, 3754,
  128     $                   1145 /
  129      DATA               ( mm( 3, j ), j = 1, 4 ) / 255, 1440, 1766,
  130     $                   2253 /
  131      DATA               ( mm( 4, j ), j = 1, 4 ) / 2008, 752, 3572,
  132     $                   305 /
  133      DATA               ( mm( 5, j ), j = 1, 4 ) / 1253, 2859, 2893,
  134     $                   3301 /
  135      DATA               ( mm( 6, j ), j = 1, 4 ) / 3344, 123, 307,
  136     $                   1065 /
  137      DATA               ( mm( 7, j ), j = 1, 4 ) / 4084, 1848, 1297,
  138     $                   3133 /
  139      DATA               ( mm( 8, j ), j = 1, 4 ) / 1739, 643, 3966,
  140     $                   2913 /
  141      DATA               ( mm( 9, j ), j = 1, 4 ) / 3143, 2405, 758,
  142     $                   3285 /
  143      DATA               ( mm( 10, j ), j = 1, 4 ) / 3468, 2638, 2598,
  144     $                   1241 /
  145      DATA               ( mm( 11, j ), j = 1, 4 ) / 688, 2344, 3406,
  146     $                   1197 /
  147      DATA               ( mm( 12, j ), j = 1, 4 ) / 1657, 46, 2922,
  148     $                   3729 /
  149      DATA               ( mm( 13, j ), j = 1, 4 ) / 1238, 3814, 1038,
  150     $                   2501 /
  151      DATA               ( mm( 14, j ), j = 1, 4 ) / 3166, 913, 2934,
  152     $                   1673 /
  153      DATA               ( mm( 15, j ), j = 1, 4 ) / 1292, 3649, 2091,
  154     $                   541 /
  155      DATA               ( mm( 16, j ), j = 1, 4 ) / 3422, 339, 2451,
  156     $                   2753 /
  157      DATA               ( mm( 17, j ), j = 1, 4 ) / 1270, 3808, 1580,
  158     $                   949 /
  159      DATA               ( mm( 18, j ), j = 1, 4 ) / 2016, 822, 1958,
  160     $                   2361 /
  161      DATA               ( mm( 19, j ), j = 1, 4 ) / 154, 2832, 2055,
  162     $                   1165 /
  163      DATA               ( mm( 20, j ), j = 1, 4 ) / 2862, 3078, 1507,
  164     $                   4081 /
  165      DATA               ( mm( 21, j ), j = 1, 4 ) / 697, 3633, 1078,
  166     $                   2725 /
  167      DATA               ( mm( 22, j ), j = 1, 4 ) / 1706, 2970, 3273,
  168     $                   3305 /
  169      DATA               ( mm( 23, j ), j = 1, 4 ) / 491, 637, 17,
  170     $                   3069 /
  171      DATA               ( mm( 24, j ), j = 1, 4 ) / 931, 2249, 854,
  172     $                   3617 /
  173      DATA               ( mm( 25, j ), j = 1, 4 ) / 1444, 2081, 2916,
  174     $                   3733 /
  175      DATA               ( mm( 26, j ), j = 1, 4 ) / 444, 4019, 3971,
  176     $                   409 /
  177      DATA               ( mm( 27, j ), j = 1, 4 ) / 3577, 1478, 2889,
  178     $                   2157 /
  179      DATA               ( mm( 28, j ), j = 1, 4 ) / 3944, 242, 3831,
  180     $                   1361 /
  181      DATA               ( mm( 29, j ), j = 1, 4 ) / 2184, 481, 2621,
  182     $                   3973 /
  183      DATA               ( mm( 30, j ), j = 1, 4 ) / 1661, 2075, 1541,
  184     $                   1865 /
  185      DATA               ( mm( 31, j ), j = 1, 4 ) / 3482, 4058, 893,
  186     $                   2525 /
  187      DATA               ( mm( 32, j ), j = 1, 4 ) / 657, 622, 736,
  188     $                   1409 /
  189      DATA               ( mm( 33, j ), j = 1, 4 ) / 3023, 3376, 3992,
  190     $                   3445 /
  191      DATA               ( mm( 34, j ), j = 1, 4 ) / 3618, 812, 787,
  192     $                   3577 /
  193      DATA               ( mm( 35, j ), j = 1, 4 ) / 1267, 234, 2125,
  194     $                   77 /
  195      DATA               ( mm( 36, j ), j = 1, 4 ) / 1828, 641, 2364,
  196     $                   3761 /
  197      DATA               ( mm( 37, j ), j = 1, 4 ) / 164, 4005, 2460,
  198     $                   2149 /
  199      DATA               ( mm( 38, j ), j = 1, 4 ) / 3798, 1122, 257,
  200     $                   1449 /
  201      DATA               ( mm( 39, j ), j = 1, 4 ) / 3087, 3135, 1574,
  202     $                   3005 /
  203      DATA               ( mm( 40, j ), j = 1, 4 ) / 2400, 2640, 3912,
  204     $                   225 /
  205      DATA               ( mm( 41, j ), j = 1, 4 ) / 2870, 2302, 1216,
  206     $                   85 /
  207      DATA               ( mm( 42, j ), j = 1, 4 ) / 3876, 40, 3248,
  208     $                   3673 /
  209      DATA               ( mm( 43, j ), j = 1, 4 ) / 1905, 1832, 3401,
  210     $                   3117 /
  211      DATA               ( mm( 44, j ), j = 1, 4 ) / 1593, 2247, 2124,
  212     $                   3089 /
  213      DATA               ( mm( 45, j ), j = 1, 4 ) / 1797, 2034, 2762,
  214     $                   1349 /
  215      DATA               ( mm( 46, j ), j = 1, 4 ) / 1234, 2637, 149,
  216     $                   2057 /
  217      DATA               ( mm( 47, j ), j = 1, 4 ) / 3460, 1287, 2245,
  218     $                   413 /
  219      DATA               ( mm( 48, j ), j = 1, 4 ) / 328, 1691, 166,
  220     $                   65 /
  221      DATA               ( mm( 49, j ), j = 1, 4 ) / 2861, 496, 466,
  222     $                   1845 /
  223      DATA               ( mm( 50, j ), j = 1, 4 ) / 1950, 1597, 4018,
  224     $                   697 /
  225      DATA               ( mm( 51, j ), j = 1, 4 ) / 617, 2394, 1399,
  226     $                   3085 /
  227      DATA               ( mm( 52, j ), j = 1, 4 ) / 2070, 2584, 190,
  228     $                   3441 /
  229      DATA               ( mm( 53, j ), j = 1, 4 ) / 3331, 1843, 2879,
  230     $                   1573 /
  231      DATA               ( mm( 54, j ), j = 1, 4 ) / 769, 336, 153,
  232     $                   3689 /
  233      DATA               ( mm( 55, j ), j = 1, 4 ) / 1558, 1472, 2320,
  234     $                   2941 /
  235      DATA               ( mm( 56, j ), j = 1, 4 ) / 2412, 2407, 18,
  236     $                   929 /
  237      DATA               ( mm( 57, j ), j = 1, 4 ) / 2800, 433, 712,
  238     $                   533 /
  239      DATA               ( mm( 58, j ), j = 1, 4 ) / 189, 2096, 2159,
  240     $                   2841 /
  241      DATA               ( mm( 59, j ), j = 1, 4 ) / 287, 1761, 2318,
  242     $                   4077 /
  243      DATA               ( mm( 60, j ), j = 1, 4 ) / 2045, 2810, 2091,
  244     $                   721 /
  245      DATA               ( mm( 61, j ), j = 1, 4 ) / 1227, 566, 3443,
  246     $                   2821 /
  247      DATA               ( mm( 62, j ), j = 1, 4 ) / 2838, 442, 1510,
  248     $                   2249 /
  249      DATA               ( mm( 63, j ), j = 1, 4 ) / 209, 41, 449,
  250     $                   2397 /
  251      DATA               ( mm( 64, j ), j = 1, 4 ) / 2770, 1238, 1956,
  252     $                   2817 /
  253      DATA               ( mm( 65, j ), j = 1, 4 ) / 3654, 1086, 2201,
  254     $                   245 /
  255      DATA               ( mm( 66, j ), j = 1, 4 ) / 3993, 603, 3137,
  256     $                   1913 /
  257      DATA               ( mm( 67, j ), j = 1, 4 ) / 192, 840, 3399,
  258     $                   1997 /
  259      DATA               ( mm( 68, j ), j = 1, 4 ) / 2253, 3168, 1321,
  260     $                   3121 /
  261      DATA               ( mm( 69, j ), j = 1, 4 ) / 3491, 1499, 2271,
  262     $                   997 /
  263      DATA               ( mm( 70, j ), j = 1, 4 ) / 2889, 1084, 3667,
  264     $                   1833 /
  265      DATA               ( mm( 71, j ), j = 1, 4 ) / 2857, 3438, 2703,
  266     $                   2877 /
  267      DATA               ( mm( 72, j ), j = 1, 4 ) / 2094, 2408, 629,
  268     $                   1633 /
  269      DATA               ( mm( 73, j ), j = 1, 4 ) / 1818, 1589, 2365,
  270     $                   981 /
  271      DATA               ( mm( 74, j ), j = 1, 4 ) / 688, 2391, 2431,
  272     $                   2009 /
  273      DATA               ( mm( 75, j ), j = 1, 4 ) / 1407, 288, 1113,
  274     $                   941 /
  275      DATA               ( mm( 76, j ), j = 1, 4 ) / 634, 26, 3922,
  276     $                   2449 /
  277      DATA               ( mm( 77, j ), j = 1, 4 ) / 3231, 512, 2554,
  278     $                   197 /
  279      DATA               ( mm( 78, j ), j = 1, 4 ) / 815, 1456, 184,
  280     $                   2441 /
  281      DATA               ( mm( 79, j ), j = 1, 4 ) / 3524, 171, 2099,
  282     $                   285 /
  283      DATA               ( mm( 80, j ), j = 1, 4 ) / 1914, 1677, 3228,
  284     $                   1473 /
  285      DATA               ( mm( 81, j ), j = 1, 4 ) / 516, 2657, 4012,
  286     $                   2741 /
  287      DATA               ( mm( 82, j ), j = 1, 4 ) / 164, 2270, 1921,
  288     $                   3129 /
  289      DATA               ( mm( 83, j ), j = 1, 4 ) / 303, 2587, 3452,
  290     $                   909 /
  291      DATA               ( mm( 84, j ), j = 1, 4 ) / 2144, 2961, 3901,
  292     $                   2801 /
  293      DATA               ( mm( 85, j ), j = 1, 4 ) / 3480, 1970, 572,
  294     $                   421 /
  295      DATA               ( mm( 86, j ), j = 1, 4 ) / 119, 1817, 3309,
  296     $                   4073 /
  297      DATA               ( mm( 87, j ), j = 1, 4 ) / 3357, 676, 3171,
  298     $                   2813 /
  299      DATA               ( mm( 88, j ), j = 1, 4 ) / 837, 1410, 817,
  300     $                   2337 /
  301      DATA               ( mm( 89, j ), j = 1, 4 ) / 2826, 3723, 3039,
  302     $                   1429 /
  303      DATA               ( mm( 90, j ), j = 1, 4 ) / 2332, 2803, 1696,
  304     $                   1177 /
  305      DATA               ( mm( 91, j ), j = 1, 4 ) / 2089, 3185, 1256,
  306     $                   1901 /
  307      DATA               ( mm( 92, j ), j = 1, 4 ) / 3780, 184, 3715,
  308     $                   81 /
  309      DATA               ( mm( 93, j ), j = 1, 4 ) / 1700, 663, 2077,
  310     $                   1669 /
  311      DATA               ( mm( 94, j ), j = 1, 4 ) / 3712, 499, 3019,
  312     $                   2633 /
  313      DATA               ( mm( 95, j ), j = 1, 4 ) / 150, 3784, 1497,
  314     $                   2269 /
  315      DATA               ( mm( 96, j ), j = 1, 4 ) / 2000, 1631, 1101,
  316     $                   129 /
  317      DATA               ( mm( 97, j ), j = 1, 4 ) / 3375, 1925, 717,
  318     $                   1141 /
  319      DATA               ( mm( 98, j ), j = 1, 4 ) / 1621, 3912, 51,
  320     $                   249 /
  321      DATA               ( mm( 99, j ), j = 1, 4 ) / 3090, 1398, 981,
  322     $                   3917 /
  323      DATA               ( mm( 100, j ), j = 1, 4 ) / 3765, 1349, 1978,
  324     $                   2481 /
  325      DATA               ( mm( 101, j ), j = 1, 4 ) / 1149, 1441, 1813,
  326     $                   3941 /
  327      DATA               ( mm( 102, j ), j = 1, 4 ) / 3146, 2224, 3881,
  328     $                   2217 /
  329      DATA               ( mm( 103, j ), j = 1, 4 ) / 33, 2411, 76,
  330     $                   2749 /
  331      DATA               ( mm( 104, j ), j = 1, 4 ) / 3082, 1907, 3846,
  332     $                   3041 /
  333      DATA               ( mm( 105, j ), j = 1, 4 ) / 2741, 3192, 3694,
  334     $                   1877 /
  335      DATA               ( mm( 106, j ), j = 1, 4 ) / 359, 2786, 1682,
  336     $                   345 /
  337      DATA               ( mm( 107, j ), j = 1, 4 ) / 3316, 382, 124,
  338     $                   2861 /
  339      DATA               ( mm( 108, j ), j = 1, 4 ) / 1749, 37, 1660,
  340     $                   1809 /
  341      DATA               ( mm( 109, j ), j = 1, 4 ) / 185, 759, 3997,
  342     $                   3141 /
  343      DATA               ( mm( 110, j ), j = 1, 4 ) / 2784, 2948, 479,
  344     $                   2825 /
  345      DATA               ( mm( 111, j ), j = 1, 4 ) / 2202, 1862, 1141,
  346     $                   157 /
  347      DATA               ( mm( 112, j ), j = 1, 4 ) / 2199, 3802, 886,
  348     $                   2881 /
  349      DATA               ( mm( 113, j ), j = 1, 4 ) / 1364, 2423, 3514,
  350     $                   3637 /
  351      DATA               ( mm( 114, j ), j = 1, 4 ) / 1244, 2051, 1301,
  352     $                   1465 /
  353      DATA               ( mm( 115, j ), j = 1, 4 ) / 2020, 2295, 3604,
  354     $                   2829 /
  355      DATA               ( mm( 116, j ), j = 1, 4 ) / 3160, 1332, 1888,
  356     $                   2161 /
  357      DATA               ( mm( 117, j ), j = 1, 4 ) / 2785, 1832, 1836,
  358     $                   3365 /
  359      DATA               ( mm( 118, j ), j = 1, 4 ) / 2772, 2405, 1990,
  360     $                   361 /
  361      DATA               ( mm( 119, j ), j = 1, 4 ) / 1217, 3638, 2058,
  362     $                   2685 /
  363      DATA               ( mm( 120, j ), j = 1, 4 ) / 1822, 3661, 692,
  364     $                   3745 /
  365      DATA               ( mm( 121, j ), j = 1, 4 ) / 1245, 327, 1194,
  366     $                   2325 /
  367      DATA               ( mm( 122, j ), j = 1, 4 ) / 2252, 3660, 20,
  368     $                   3609 /
  369      DATA               ( mm( 123, j ), j = 1, 4 ) / 3904, 716, 3285,
  370     $                   3821 /
  371      DATA               ( mm( 124, j ), j = 1, 4 ) / 2774, 1842, 2046,
  372     $                   3537 /
  373      DATA               ( mm( 125, j ), j = 1, 4 ) / 997, 3987, 2107,
  374     $                   517 /
  375      DATA               ( mm( 126, j ), j = 1, 4 ) / 2573, 1368, 3508,
  376     $                   3017 /
  377      DATA               ( mm( 127, j ), j = 1, 4 ) / 1148, 1848, 3525,
  378     $                   2141 /
  379      DATA               ( mm( 128, j ), j = 1, 4 ) / 545, 2366, 3801,
  380     $                   1537 /
  381
  382
  383
  384
  385      IF ( n < 1 ) THEN
  386         RETURN
  387      END IF
  388
  389      i1 = iseed( 1 )
  390      i2 = iseed( 2 )
  391      i3 = iseed( 3 )
  392      i4 = iseed( 4 )
  393
  394      DO 10 i = 1, min( n, lv )
  395
  396  20     CONTINUE
  397
  398
  399
  400         it4 = i4*mm( i, 4 )
  401         it3 = it4 / ipw2
  402         it4 = it4 - ipw2*it3
  403         it3 = it3 + i3*mm( i, 4 ) + i4*mm( i, 3 )
  404         it2 = it3 / ipw2
  405         it3 = it3 - ipw2*it2
  406         it2 = it2 + i2*mm( i, 4 ) + i3*mm( i, 3 ) + i4*mm( i, 2 )
  407         it1 = it2 / ipw2
  408         it2 = it2 - ipw2*it1
  409         it1 = it1 + i1*mm( i, 4 ) + i2*mm( i, 3 ) + i3*mm( i, 2 ) +
  410     $         i4*mm( i, 1 )
  411         it1 = mod( it1, ipw2 )
  412
  413
  414
  415         x( i ) = r*( real( it1 )+r*( real( it2 )+r*( real( it3 )+r*
  416     $            real( it4 ) ) ) )
  417
  418         IF (x( i ).EQ.1.0) THEN
  419
  420
  421
  422
  423
  424
  425
  426
  427
  428            i1 = i1 + 2
  429            i2 = i2 + 2
  430            i3 = i3 + 2
  431            i4 = i4 + 2
  432            GOTO 20
  433         END IF
  434
  435   10 CONTINUE
  436
  437
  438
  439      iseed( 1 ) = it1
  440      iseed( 2 ) = it2
  441      iseed( 3 ) = it3
  442      iseed( 4 ) = it4
  443      RETURN
  444
  445
  446