2
C *****************************************************************
4
C THIS IS THE DRIVER FOR CHECKING THE STANDALONE MATRIX ELEMENT.
5
C IT USES A SIMPLE PHASE SPACE GENERATOR
6
C *****************************************************************
16
PARAMETER (READPS = .FALSE.)
19
PARAMETER (NPSPOINTS = 4)
21
C integer nexternal and number particles (incoming+outgoing) in
23
INTEGER NEXTERNAL, NINCOMING
24
PARAMETER (NEXTERNAL=3,NINCOMING=2)
26
CHARACTER(512) MADLOOPRESOURCEPATH
31
C the include file with the values of the parameters and masses
35
REAL*8 PMASS(NEXTERNAL)
38
INCLUDE 'nsqso_born.inc'
39
INCLUDE 'nsquaredSO.inc'
45
C four momenta. Energy is the zeroth component.
46
REAL*8 P(0:3,NEXTERNAL)
47
INTEGER MATELEM_ARRAY_DIM
48
REAL*8 , ALLOCATABLE :: MATELEM(:,:)
49
REAL*8 SQRTS,AO2PI,TOTMASS
50
C sqrt(s)= center of mass energy
51
REAL*8 PIN(0:3), POUT(0:3)
52
CHARACTER*120 BUFF(NEXTERNAL)
53
INTEGER RETURNCODE, UNITS, TENS, HUNDREDS
54
INTEGER NSQUAREDSO_LOOP
55
REAL*8 , ALLOCATABLE :: PREC_FOUND(:)
60
C This is from ML code for the list of split orders selected by
61
C the process definition
64
CHARACTER*20 CHOSEN_LOOP_SO_INDICES(NSQUAREDSO)
65
LOGICAL CHOSEN_LOOP_SO_CONFIGS(NSQUAREDSO)
66
COMMON/CHOSEN_LOOP_SQSO/CHOSEN_LOOP_SO_CONFIGS
68
CHARACTER*20 CHOSEN_BORN_SO_INDICES(NSQSO_BORN)
69
LOGICAL CHOSEN_BORN_SO_CONFIGS(NSQSO_BORN)
70
COMMON/CHOSEN_BORN_SQSO/CHOSEN_BORN_SO_CONFIGS
77
COMMON/INITCHECKSA/INIT
91
CALL GET_ANSWER_DIMENSION(MATELEM_ARRAY_DIM)
92
ALLOCATE(MATELEM(0:3,0:MATELEM_ARRAY_DIM))
93
CALL GET_NSQSO_LOOP(NSQUAREDSO_LOOP)
94
ALLOCATE(PREC_FOUND(0:NSQUAREDSO_LOOP))
96
C INITIALIZATION CALLS
98
C Call to initialize the values of the couplings, masses and
100
C used in the evaluation of the matrix element. The primary
102
C models are read from Cards/param_card.dat. The secondary
103
C parameters are calculated
104
C in Source/MODEL/couplings.f. The values are stored in common
105
C blocks that are listed
107
C first call to setup the paramaters
108
CALL SETPARA('param_card.dat')
115
C Start by initializing what is the squared split orders indices
119
IF (CHOSEN_LOOP_SO_CONFIGS(I)) THEN
120
NLOOPCHOSEN=NLOOPCHOSEN+1
121
WRITE(CHOSEN_LOOP_SO_INDICES(NLOOPCHOSEN),'(I3,A2)') I,'L)'
126
IF (CHOSEN_BORN_SO_CONFIGS(I)) THEN
127
NBORNCHOSEN=NBORNCHOSEN+1
128
WRITE(CHOSEN_BORN_SO_INDICES(NBORNCHOSEN),'(I3,A2)') I,'B)'
132
AO2PI=G**2/(8.D0*(3.14159265358979323846D0**2))
134
WRITE(*,*) 'AO2PI=',AO2PI
135
C Now use a simple multipurpose PS generator (RAMBO) just to get a
136
C RANDOM set of four momenta of given masses pmass(i) to be used
138
C the madgraph matrix-element.
139
C Alternatevely, here the user can call or set the four momenta at
140
C his will, see below.
142
IF(NINCOMING.EQ.1) THEN
147
TOTMASS = TOTMASS + PMASS(I)
150
SQRTS=MAX(1000D0,2.0D0*TOTMASS)
160
OPEN(967, FILE='PS.input', ERR=976, STATUS='OLD',
163
READ(967,*,END=978) P(0,I),P(1,I),P(2,I),P(3,I)
167
STOP 'Could not read the PS.input phase-space point.'
171
IF ((NINCOMING.EQ.2).AND.((NEXTERNAL - NINCOMING .EQ.1)))
173
IF (PMASS(3).EQ.0.0D0) THEN
174
STOP 'Cannot generate 2>1 kin. config. with m3=0.0d0'
176
C deal with the case of only one particle in the final
178
P(0,1) = PMASS(3)/2D0
181
P(3,1) = PMASS(3)/2D0
182
IF (PMASS(1).GT.0D0) THEN
183
P(3,1) = DSQRT(PMASS(3)**2/4D0 - PMASS(1)**2)
185
P(0,2) = PMASS(3)/2D0
188
P(3,2) = -PMASS(3)/2D0
189
IF (PMASS(2) > 0D0) THEN
190
P(3,2) = -DSQRT(PMASS(3)**2/4D0 - PMASS(1)**2)
198
CALL GET_MOMENTA(SQRTS,PMASS,P)
209
C In standalone mode, always use sqrt_s as the renormalization
211
SQRTS=DSQRT(DABS(DOT(PIN(0),PIN(0))))
214
C Update the couplings with the new MU_R
215
CALL UPDATE_AS_PARAM()
217
C Optionally the user can set where to find the
218
C MadLoop5_resources folder.
219
C Otherwise it will look for it automatically and find it if it
222
C MadLoopResourcePath = '<MadLoop5_resources_path>'
223
C CALL SETMADLOOPPATH(MadLoopResourcePath)
224
C To force the stabiliy check to also be performed in the
225
C initialization phase
226
C CALL FORCE_STABILITY_CHECK(.TRUE.)
227
C To chose a particular tartget split order, SOTARGET is an
229
C the possible squared order couplings contributions (only in
231
C CALL SET_COUPLINGORDERS_TARGET(SOTARGET)
235
C Now we can call the matrix element
237
CALL SLOOPMATRIX_THRES(P,MATELEM,-1.0D0,PREC_FOUND,RETURNCODE)
240
C write the information on the four momenta
242
IF (K.EQ.NPSPOINTS) THEN
244
WRITE (*,*) ' Phase space point:'
246
WRITE (*,*) '---------------------------------'
247
WRITE (*,*) 'n E px py pz m'
249
WRITE (*,'(i2,1x,5e15.7)') I, P(0,I),P(1,I),P(2,I),P(3,I)
250
$ ,DSQRT(DABS(DOT(P(0,I),P(0,I))))
252
WRITE (*,*) '---------------------------------'
253
WRITE (*,*) 'Detailed result for each coupling orders'
255
WRITE(*,*) 'All Born contributions are of split orders'
257
WRITE (*,*) '---------------------------------'
258
WRITE(*,*) 'All loop contributions are of split orders'
260
WRITE (*,*) '---------------------------------'
261
UNITS=MOD(RETURNCODE,10)
262
TENS=(MOD(RETURNCODE,100)-UNITS)/10
263
HUNDREDS=(RETURNCODE-TENS*10-UNITS)/100
264
IF (HUNDREDS.EQ.1) THEN
265
IF (TENS.EQ.3.OR.TENS.EQ.4) THEN
266
WRITE(*,*) 'Unknown numerical stability because MadLoop'
267
$ //' is in the initialization stage.'
269
WRITE(*,*) 'Unknown numerical stability, check CTModeRun'
270
$ //' value in MadLoopParams.dat.'
272
ELSEIF (HUNDREDS.EQ.2) THEN
273
WRITE(*,*) 'Stable kinematic configuration (SPS).'
274
ELSEIF (HUNDREDS.EQ.3) THEN
275
WRITE(*,*) 'Unstable kinematic configuration (UPS).'
276
WRITE(*,*) 'Quadruple precision rescue successful.'
277
ELSEIF (HUNDREDS.EQ.4) THEN
278
WRITE(*,*) 'Exceptional kinematic configuration (EPS).'
279
WRITE(*,*) 'Both double an quadruple precision'
280
$ //' computations, are unstable.'
282
IF (TENS.EQ.2.OR.TENS.EQ.4) THEN
283
WRITE(*,*) 'Quadruple precision computation used.'
285
IF (HUNDREDS.NE.1) THEN
286
IF (PREC_FOUND(0).GT.0.0D0) THEN
287
WRITE(*,'(1x,a23,1x,1e10.2)') 'Relative accuracy ='
289
ELSEIF (PREC_FOUND(0).EQ.0.0D0) THEN
290
WRITE(*,'(1x,a23,1x,1e10.2,1x,a30)') 'Relative accuracy '
291
$ //' =',PREC_FOUND(0),'(i.e. beyond double precision)'
293
WRITE(*,*) 'Estimated accuracy could not be computed for'
294
$ //' an unknown reason.'
297
WRITE (*,'(1x,a23,3x,i3)') 'MadLoop return code ='
299
WRITE (*,*) '---------------------------------'
300
IF (NBORNCHOSEN.EQ.0) THEN
301
WRITE (*,*) 'No Born contribution satisfied the squared'
302
$ //' order constraints.'
303
ELSE IF (NBORNCHOSEN.NE.NSQSO_BORN) THEN
304
WRITE (*,*) 'Selected squared coupling orders combination'
305
$ //' for the Born summed result below:'
306
WRITE (*,*) (CHOSEN_BORN_SO_INDICES(I),I=1,NBORNCHOSEN)
308
IF (NLOOPCHOSEN.NE.NSQUAREDSO) THEN
309
WRITE (*,*) 'Selected squared coupling orders combination'
310
$ //' for the loop summed result below:'
311
WRITE (*,*) (CHOSEN_LOOP_SO_INDICES(I),I=1,NLOOPCHOSEN)
313
WRITE (*,*) '---------------------------------'
314
WRITE (*,*) 'Matrix element born = ', MATELEM(0,0),
315
$ ' GeV^',-(2*NEXTERNAL-8)
316
WRITE (*,*) 'Matrix element finite = ', MATELEM(1,0),
317
$ ' GeV^',-(2*NEXTERNAL-8)
318
WRITE (*,*) 'Matrix element 1eps = ', MATELEM(2,0),
319
$ ' GeV^',-(2*NEXTERNAL-8)
320
WRITE (*,*) 'Matrix element 2eps = ', MATELEM(3,0),
321
$ ' GeV^',-(2*NEXTERNAL-8)
322
WRITE (*,*) '---------------------------------'
323
IF (MATELEM(0,0).NE.0.0D0) THEN
324
WRITE (*,*) 'finite / (born*ao2pi) = ', MATELEM(1,0)
325
$ /MATELEM(0,0)/AO2PI
326
WRITE (*,*) '1eps / (born*ao2pi) = ', MATELEM(2,0)
327
$ /MATELEM(0,0)/AO2PI
328
WRITE (*,*) '2eps / (born*ao2pi) = ', MATELEM(3,0)
329
$ /MATELEM(0,0)/AO2PI
331
WRITE (*,*) 'finite / ao2pi = ', MATELEM(1,0)/AO2PI
332
WRITE (*,*) '1eps / ao2pi = ', MATELEM(2,0)/AO2PI
333
WRITE (*,*) '2eps / ao2pi = ', MATELEM(3,0)/AO2PI
335
WRITE (*,*) '---------------------------------'
337
OPEN(69, FILE='result.dat', ERR=976, ACTION='WRITE')
339
WRITE (69,'(a2,1x,5ES30.15E3)') 'PS',P(0,I),P(1,I),P(2,I)
342
WRITE (69,'(a3,1x,i3)') 'EXP',-(2*NEXTERNAL-8)
343
WRITE (69,'(a4,1x,1ES30.15E3)') 'BORN',MATELEM(0,0)
344
IF (MATELEM(0,0).NE.0.0D0) THEN
345
WRITE (69,'(a3,1x,1ES30.15E3)') 'FIN',MATELEM(1,0)
346
$ /MATELEM(0,0)/AO2PI
347
WRITE (69,'(a4,1x,1ES30.15E3)') '1EPS',MATELEM(2,0)
348
$ /MATELEM(0,0)/AO2PI
349
WRITE (69,'(a4,1x,1ES30.15E3)') '2EPS',MATELEM(3,0)
350
$ /MATELEM(0,0)/AO2PI
352
WRITE (69,'(a3,1x,1ES30.15E3)') 'FIN',MATELEM(1,0)/AO2PI
353
WRITE (69,'(a4,1x,1ES30.15E3)') '1EPS',MATELEM(2,0)/AO2PI
354
WRITE (69,'(a4,1x,1ES30.15E3)') '2EPS',MATELEM(3,0)/AO2PI
356
WRITE (69,'(a6,1x,1ES30.15E3)') 'ASO2PI',AO2PI
357
WRITE (69,*) 'Export_Format Default'
358
WRITE (69,'(a7,1x,i3)') 'RETCODE',RETURNCODE
359
WRITE (69,'(a3,1x,1e10.4)') 'ACC',PREC_FOUND(0)
360
WRITE (69,*) 'Born_kept',(CHOSEN_BORN_SO_CONFIGS(I),I=1
362
WRITE (69,*) 'Loop_kept',(CHOSEN_LOOP_SO_CONFIGS(I),I=1
364
WRITE (69,*) 'Born_SO_Results 0'
365
WRITE (69,*) 'SO_Born BORN ',MATELEM(0,1)
366
WRITE (69,*) 'Split_Orders_Names QCD'
367
WRITE (69,*) 'Loop_SO_Results 2'
368
WRITE (69,*) 'SO_Loop ACC ',PREC_FOUND(1)
369
WRITE (69,*) 'SO_Loop FIN ',MATELEM(1,1)
370
WRITE (69,*) 'SO_Loop 1EPS ',MATELEM(2,1)
371
WRITE (69,*) 'SO_Loop 2EPS ',MATELEM(3,1)
374
WRITE (*,*) 'PS Point #',K,' done.'
379
C C Copy down here (or read in) the four momenta as a string.
382
C buff(1)=" 1 0.5630480E+04 0.0000000E+00 0.0000000E+00
384
C buff(2)=" 2 0.5630480E+04 0.0000000E+00 0.0000000E+00
386
C buff(3)=" 3 0.5466073E+04 0.4443190E+03 0.2446331E+04
388
C buff(4)=" 4 0.8785819E+03 -0.2533886E+03 0.2741971E+03
390
C buff(5)=" 5 0.4916306E+04 -0.1909305E+03 -0.2720528E+04
393
C C Here the k,E,px,py,pz are read from the string into the
396
C C k=3,nexternal : outgoing
399
C read (buff(i),*) k, P(0,i),P(1,i),P(2,i),P(3,i)
402
C C print the momenta out
405
C write (*,'(i2,1x,5e15.7)') i, P(0,i),P(1,i),P(2,i),P(3,i),
406
C &dsqrt(dabs(DOT(p(0,i),p(0,i))))
409
C CALL SLOOPMATRIX(P,MATELEM)
411
C write (*,*) "-------------------------------------------------"
412
C write (*,*) "Matrix element = ", MATELEM(1), "
413
C GeV^",-(2*nexternal-8)
414
C write (*,*) "-------------------------------------------------"
417
DEALLOCATE(PREC_FOUND)
424
DOUBLE PRECISION FUNCTION DOT(P1,P2)
425
C *************************************************************
426
C 4-Vector Dot product
427
C *************************************************************
429
DOUBLE PRECISION P1(0:3),P2(0:3)
430
DOT=P1(0)*P2(0)-P1(1)*P2(1)-P1(2)*P2(2)-P1(3)*P2(3)
434
SUBROUTINE GET_MOMENTA(ENERGY,PMASS,P)
435
C auxiliary function to change convention between madgraph and
439
INTEGER NEXTERNAL, NINCOMING
440
PARAMETER (NEXTERNAL=3,NINCOMING=2)
442
REAL*8 ENERGY,PMASS(NEXTERNAL),P(0:3,NEXTERNAL),PRAMBO(4,10),WGT
445
REAL*8 ETOT2,MOM,M1,M2,E1,E2
450
MOM=(ETOT2**2 - 2*ETOT2*M1**2 + M1**4 - 2*ETOT2*M2**2 - 2*M1**2
451
$ *M2**2 + M2**4)/(4.*ETOT2)
453
E1=DSQRT(MOM**2+M1**2)
454
E2=DSQRT(MOM**2+M2**2)
455
C write (*,*) e1+e2,mom
457
IF(NINCOMING.EQ.2) THEN
469
CALL RAMBO(NEXTERNAL-2,ENERGY,PMASS(3),PRAMBO,WGT)
477
ELSEIF(NINCOMING.EQ.1) THEN
484
CALL RAMBO(NEXTERNAL-1,ENERGY,PMASS(2),PRAMBO,WGT)
497
SUBROUTINE RAMBO(N,ET,XM,P,WT)
498
C *****************************************************************
501
C RA(NDOM) M(OMENTA) B(EAUTIFULLY) O(RGANIZED)
504
C A DEMOCRATIC MULTI-PARTICLE PHASE SPACE GENERATOR
506
C AUTHORS: S.D. ELLIS, R. KLEISS, W.J. STIRLING
508
C THIS IS VERSION 1.0 - WRITTEN BY R. KLEISS
510
C -- ADJUSTED BY HANS KUIJF, WEIGHTS ARE LOGARITHMIC (20-08-90)
513
C N = NUMBER OF PARTICLES
515
C ET = TOTAL CENTRE-OF-MASS ENERGY
517
C XM = PARTICLE MASSES ( DIM=NEXTERNAL-nincoming )
519
C P = PARTICLE MOMENTA ( DIM=(4,NEXTERNAL-nincoming) )
521
C WT = WEIGHT OF THE EVENT
523
C *****************************************************************
525
IMPLICIT REAL*8(A-H,O-Z)
526
INTEGER NEXTERNAL, NINCOMING
527
PARAMETER (NEXTERNAL=3,NINCOMING=2)
528
DIMENSION XM(NEXTERNAL-NINCOMING),P(4,NEXTERNAL-NINCOMING)
529
DIMENSION Q(4,NEXTERNAL-NINCOMING),Z(NEXTERNAL-NINCOMING),R(4)
530
$ ,B(3),P2(NEXTERNAL-NINCOMING),XM2(NEXTERNAL-NINCOMING)
531
$ ,E(NEXTERNAL-NINCOMING),V(NEXTERNAL-NINCOMING),IWARN(5)
532
SAVE ACC,ITMAX,IBEGIN,IWARN
533
DATA ACC/1.D-14/,ITMAX/6/,IBEGIN/0/,IWARN/5*0/
535
C INITIALIZATION STEP: FACTORIALS FOR THE PHASE SPACE WEIGHT
536
IF(IBEGIN.NE.0) GOTO 103
541
DO 101 K=3,(NEXTERNAL-NINCOMING)
542
101 Z(K)=Z(K-1)+PO2LOG-2.*LOG(DFLOAT(K-2))
543
DO 102 K=3,(NEXTERNAL-NINCOMING)
544
102 Z(K)=(Z(K)-LOG(DFLOAT(K-1)))
546
C CHECK ON THE NUMBER OF PARTICLES
547
103 IF(N.GT.1.AND.N.LT.101) GOTO 104
551
C CHECK WHETHER TOTAL ENERGY IS SUFFICIENT; COUNT NONZERO MASSES
555
IF(XM(I).NE.0.D0) NM=NM+1
556
105 XMT=XMT+ABS(XM(I))
557
IF(XMT.LE.ET) GOTO 201
561
C THE PARAMETER VALUES ARE NOW ACCEPTED
563
C GENERATE N MASSLESS MOMENTA IN INFINITE PHASE SPACE
573
Q(2,I)=Q(4,I)*S*COS(F)
574
202 Q(1,I)=Q(4,I)*S*SIN(F)
576
C CALCULATE THE PARAMETERS OF THE CONFORMAL TRANSFORMATION
582
RMAS=SQRT(R(4)**2-R(3)**2-R(2)**2-R(1)**2)
589
C TRANSFORM THE Q'S CONFORMALLY INTO THE P'S
591
BQ=B(1)*Q(1,I)+B(2)*Q(2,I)+B(3)*Q(3,I)
593
206 P(K,I)=X*(Q(K,I)+B(K)*(Q(4,I)+A*BQ))
594
207 P(4,I)=X*(G*Q(4,I)+BQ)
596
C CALCULATE WEIGHT AND POSSIBLE WARNINGS
598
IF(N.NE.2) WT=(2.*N-4.)*LOG(ET)+Z(N)
599
IF(WT.GE.-180.D0) GOTO 208
600
IF(IWARN(1).LE.5) PRINT 1004,WT
602
208 IF(WT.LE. 174.D0) GOTO 209
603
IF(IWARN(2).LE.5) PRINT 1005,WT
606
C RETURN FOR WEIGHTED MASSLESS MOMENTA
607
209 IF(NM.NE.0) GOTO 210
608
C RETURN LOG OF WEIGHT
612
C MASSIVE PARTICLES: RESCALE THE MOMENTA BY A FACTOR X
613
210 XMAX=SQRT(1.-(XMT/ET)**2)
624
E(I)=SQRT(XM2(I)+X2*P2(I))
627
IF(ABS(F0).LE.ACCU) GOTO 305
629
IF(ITER.LE.ITMAX) GOTO 304
640
C CALCULATE THE MASS-EFFECT WEIGHT FACTOR
645
308 WT3=WT3+V(I)**2/E(I)
646
WTM=(2.*N-3.)*LOG(X)+LOG(WT2/WT3*ET)
648
C RETURN FOR WEIGHTED MASSIVE MOMENTA
650
IF(WT.GE.-180.D0) GOTO 309
651
IF(IWARN(3).LE.5) PRINT 1004,WT
653
309 IF(WT.LE. 174.D0) GOTO 310
654
IF(IWARN(4).LE.5) PRINT 1005,WT
656
C RETURN LOG OF WEIGHT
660
1001 FORMAT(' RAMBO FAILS: # OF PARTICLES =',I5,' IS NOT ALLOWED')
661
1002 FORMAT(' RAMBO FAILS: TOTAL MASS =',D15.6,' IS NOT',' SMALLER'
662
$ //' THAN TOTAL ENERGY =',D15.6)
663
1004 FORMAT(' RAMBO WARNS: WEIGHT = EXP(',F20.9,') MAY UNDERFLOW')
664
1005 FORMAT(' RAMBO WARNS: WEIGHT = EXP(',F20.9,') MAY OVERFLOW')
665
1006 FORMAT(' RAMBO WARNS:',I3,' ITERATIONS DID NOT GIVE THE',
666
$ ' DESIRED ACCURACY =',D15.6)
675
CALL RMARIN(1802,9373)
679
IF (RAN.LT.1D-16) GOTO 10
686
SUBROUTINE RANMAR(RVEC)
688
C Universal random number generator proposed by Marsaglia and
690
C in report FSU-SCRI-87-50
691
C In this version RVEC is a double precision variable.
692
IMPLICIT REAL*8(A-H,O-Z)
693
COMMON/ RASET1 / RANU(97),RANC,RANCD,RANCM
694
COMMON/ RASET2 / IRANMR,JRANMR
695
SAVE /RASET1/,/RASET2/
696
UNI = RANU(IRANMR) - RANU(JRANMR)
697
IF(UNI .LT. 0D0) UNI = UNI + 1D0
701
IF(IRANMR .EQ. 0) IRANMR = 97
702
IF(JRANMR .EQ. 0) JRANMR = 97
704
IF(RANC .LT. 0D0) RANC = RANC + RANCM
706
IF(UNI .LT. 0D0) UNI = UNI + 1D0
710
SUBROUTINE RMARIN(IJ,KL)
712
C Initializing routine for RANMAR, must be called before
714
C any pseudorandom numbers with RANMAR. The input values should
716
C the ranges 0<=ij<=31328 ; 0<=kl<=30081
717
IMPLICIT REAL*8(A-H,O-Z)
718
COMMON/ RASET1 / RANU(97),RANC,RANCD,RANCM
719
COMMON/ RASET2 / IRANMR,JRANMR
720
SAVE /RASET1/,/RASET2/
721
C This shows correspondence between the simplified input seeds
723
C and the original Marsaglia-Zaman seeds I,J,K,L.
724
C To get the standard values in the Marsaglia-Zaman paper
726
C k=56,l=78) put ij=1802, kl=9373
727
I = MOD( IJ/177 , 177 ) + 2
728
J = MOD( IJ , 177 ) + 2
729
K = MOD( KL/169 , 178 ) + 1
735
M = MOD( MOD(I*J,179)*K , 179 )
739
L = MOD( 53*L+1 , 169 )
740
IF(MOD(L*M,64) .GE. 32) S = S + T
745
RANC = 362436D0 / 16777216D0
746
RANCD = 7654321D0 / 16777216D0
747
RANCM = 16777213D0 / 16777216D0