00001 SUBROUTINE advnst(k)
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 INTEGER numg
00027 PARAMETER (numg=32)
00028
00029
00030 INTEGER k
00031
00032
00033 INTEGER a1,a1vw,a1w,a2,a2vw,a2w,m1,m2
00034
00035
00036 INTEGER cg1(numg),cg2(numg),ig1(numg),ig2(numg),lg1(numg),
00037 + lg2(numg)
00038 LOGICAL qanti(numg)
00039
00040
00041 INTEGER g,i,ib1,ib2
00042
00043
00044 INTEGER mltmod
00045 LOGICAL qrgnin
00046 EXTERNAL mltmod,qrgnin
00047
00048
00049 EXTERNAL getcgn,setsd
00050
00051
00052 COMMON /globe/m1,m2,a1,a2,a1w,a2w,a1vw,a2vw,ig1,ig2,lg1,lg2,cg1,
00053 + cg2,qanti
00054
00055
00056 SAVE /globe/
00057
00058
00059
00060 IF (qrgnin()) GO TO 10
00061 WRITE (*,*) ' ADVNST called before random number generator ',
00062 + ' initialized -- abort!'
00063 CALL XSTOPX
00064 + (' ADVNST called before random number generator initialized')
00065
00066 10 CALL getcgn(g)
00067
00068 ib1 = a1
00069 ib2 = a2
00070 DO 20,i = 1,k
00071 ib1 = mltmod(ib1,ib1,m1)
00072 ib2 = mltmod(ib2,ib2,m2)
00073 20 CONTINUE
00074 CALL setsd(mltmod(ib1,cg1(g),m1),mltmod(ib2,cg2(g),m2))
00075
00076
00077
00078 RETURN
00079
00080 END