1 *CMZ : 17/07/98 16.45.04 by Federico Carminati
3 C*********************************************************************
5 SUBROUTINE LUGIVE(CHIN)
7 C...Purpose: to set values of commonblock variables (also in PYTHIA!).
9 COMMON /LUJETS/ N,K(200000,5),P(200000,5),V(200000,5)
12 COMMON /LUDAT1/ MSTU(200),PARU(200),MSTJ(200),PARJ(200)
15 COMMON /LUDAT2/ KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
18 COMMON /LUDAT3/ MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
21 COMMON /LUDAT4/ CHAF(500)
26 COMMON /LUDATR/ MRLU(6),RRLU(100)
29 COMMON /PYSUBS/ MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
32 COMMON /PYPARS/ MSTP(200),PARP(200),MSTI(200),PARI(200)
35 COMMON /PYINT1/ MINT(400),VINT(400)
38 COMMON /PYINT2/ ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
41 COMMON /PYINT3/ XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
44 COMMON /PYINT4/ WIDP(21:40,0:40),WIDE(21:40,0:40),WIDS(21:40,3)
47 COMMON /PYINT5/ NGEN(0:200,3),XSEC(0:200,3)
50 COMMON /PYINT6/ PROC(0:200)
54 CHARACTER CHIN*(*),CHFIX*104,CHBIT*104,CHOLD*8,CHNEW*8,CHOLD2*28,
55 &CHNEW2*28,CHNAM*4,CHVAR(42)*4,CHALP(2)*26,CHIND*8,CHINI*10,
59 C...For each variable to be translated give: name,
60 C...integer/real/character, no. of indices, lower&upper index bounds.
61 DATA CHVAR/'N','K','P','V','MSTU','PARU','MSTJ','PARJ','KCHG',
62 &'PMAS','PARF','VCKM','MDCY','MDME','BRAT','KFDP','CHAF','MRLU',
63 &'RRLU','MSEL','MSUB','KFIN','CKIN','MSTP','PARP','MSTI','PARI',
64 &'MINT','VINT','ISET','KFPR','COEF','ICOL','XSFX','ISIG','SIGH',
65 &'WIDP','WIDE','WIDS','NGEN','XSEC','PROC'/
66 DATA ((MSVAR(I,J),J=1,8),I=1,42)/ 1,7*0, 1,2,1,4000,1,5,2*0,
67 & 2,2,1,4000,1,5,2*0, 2,2,1,4000,1,5,2*0, 1,1,1,200,4*0,
68 & 2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
69 & 1,2,1,500,1,3,2*0, 2,2,1,500,1,4,2*0, 2,1,1,2000,4*0,
70 & 2,2,1,4,1,4,2*0, 1,2,1,500,1,3,2*0, 1,2,1,2000,1,2,2*0,
71 & 2,1,1,2000,4*0, 1,2,1,2000,1,5,2*0, 3,1,1,500,4*0,
72 & 1,1,1,6,4*0, 2,1,1,100,4*0,
73 & 1,7*0, 1,1,1,200,4*0, 1,2,1,2,-40,40,2*0, 2,1,1,200,4*0,
74 & 1,1,1,200,4*0, 2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
75 & 1,1,1,400,4*0, 2,1,1,400,4*0, 1,1,1,200,4*0,
76 & 1,2,1,200,1,2,2*0, 2,2,1,200,1,20,2*0, 1,3,1,40,1,4,1,2,
77 & 2,2,1,2,-40,40,2*0, 1,2,1,1000,1,3,2*0, 2,1,1,1000,4*0,
78 & 2,2,21,40,0,40,2*0, 2,2,21,40,0,40,2*0, 2,2,21,40,1,3,2*0,
79 & 1,2,0,200,1,3,2*0, 2,2,0,200,1,3,2*0, 4,1,0,200,4*0/
80 DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
81 &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
83 C...Length of character variable. Subdivide it into instructions.
84 IF(MSTU(12).GE.1) CALL LULIST(0)
88 IF(CHBIT(LBIT:LBIT).EQ.' ') GOTO 100
91 IF(CHBIT(LCOM:LCOM).EQ.' ') GOTO 110
93 CHFIX(LTOT:LTOT)=CHBIT(LCOM:LCOM)
98 IF(LHIG.LE.LTOT.AND.CHFIX(LHIG:LHIG).NE.';') GOTO 130
100 CHBIT(1:LBIT)=CHFIX(LLOW+1:LHIG-1)
102 C...Identify commonblock variable.
105 IF(CHBIT(LNAM:LNAM).NE.'('.AND.CHBIT(LNAM:LNAM).NE.'='.AND.
107 CHNAM=CHBIT(1:LNAM-1)//' '
110 150 IF(CHNAM(LCOM:LCOM).EQ.CHALP(1)(LALP:LALP)) CHNAM(LCOM:LCOM)=
114 160 IF(CHNAM.EQ.CHVAR(IV)) IVAR=IV
116 CALL LUERRM(18,'(LUGIVE:) do not recognize variable '//CHNAM)
118 IF(LLOW.LT.LTOT) GOTO 120
122 C...Identify any indices.
127 IF(CHBIT(LNAM:LNAM).EQ.'(') THEN
130 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 170
132 IF((CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.'c').
133 & AND.(IVAR.EQ.9.OR.IVAR.EQ.10.OR.IVAR.EQ.13.OR.IVAR.EQ.17)) THEN
134 CHIND(LNAM-LIND+11:8)=CHBIT(LNAM+2:LIND-1)
135 READ(CHIND,'(I8)') KF
137 ELSEIF(CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.
139 CALL LUERRM(18,'(LUGIVE:) not allowed to use C index for '//
142 IF(LLOW.LT.LTOT) GOTO 120
145 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
146 READ(CHIND,'(I8)') I1
149 IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
152 IF(CHBIT(LNAM:LNAM).EQ.',') THEN
155 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 180
157 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
158 READ(CHIND,'(I8)') I2
160 IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
163 IF(CHBIT(LNAM:LNAM).EQ.',') THEN
166 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 190
168 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
169 READ(CHIND,'(I8)') I3
174 C...Check that indices allowed.
176 IF(NINDX.NE.MSVAR(IVAR,2)) IERR=1
177 IF(NINDX.GE.1.AND.(I1.LT.MSVAR(IVAR,3).OR.I1.GT.MSVAR(IVAR,4)))
179 IF(NINDX.GE.2.AND.(I2.LT.MSVAR(IVAR,5).OR.I2.GT.MSVAR(IVAR,6)))
181 IF(NINDX.EQ.3.AND.(I3.LT.MSVAR(IVAR,7).OR.I3.GT.MSVAR(IVAR,8)))
183 IF(CHBIT(LNAM:LNAM).NE.'=') IERR=5
185 CALL LUERRM(18,'(LUGIVE:) unallowed indices for '//
188 IF(LLOW.LT.LTOT) GOTO 120
192 C...Save old value of variable.
195 ELSEIF(IVAR.EQ.2) THEN
197 ELSEIF(IVAR.EQ.3) THEN
199 ELSEIF(IVAR.EQ.4) THEN
201 ELSEIF(IVAR.EQ.5) THEN
203 ELSEIF(IVAR.EQ.6) THEN
205 ELSEIF(IVAR.EQ.7) THEN
207 ELSEIF(IVAR.EQ.8) THEN
209 ELSEIF(IVAR.EQ.9) THEN
211 ELSEIF(IVAR.EQ.10) THEN
213 ELSEIF(IVAR.EQ.11) THEN
215 ELSEIF(IVAR.EQ.12) THEN
217 ELSEIF(IVAR.EQ.13) THEN
219 ELSEIF(IVAR.EQ.14) THEN
221 ELSEIF(IVAR.EQ.15) THEN
223 ELSEIF(IVAR.EQ.16) THEN
225 ELSEIF(IVAR.EQ.17) THEN
227 ELSEIF(IVAR.EQ.18) THEN
229 ELSEIF(IVAR.EQ.19) THEN
231 ELSEIF(IVAR.EQ.20) THEN
233 ELSEIF(IVAR.EQ.21) THEN
235 ELSEIF(IVAR.EQ.22) THEN
237 ELSEIF(IVAR.EQ.23) THEN
239 ELSEIF(IVAR.EQ.24) THEN
241 ELSEIF(IVAR.EQ.25) THEN
243 ELSEIF(IVAR.EQ.26) THEN
245 ELSEIF(IVAR.EQ.27) THEN
247 ELSEIF(IVAR.EQ.28) THEN
249 ELSEIF(IVAR.EQ.29) THEN
251 ELSEIF(IVAR.EQ.30) THEN
253 ELSEIF(IVAR.EQ.31) THEN
255 ELSEIF(IVAR.EQ.32) THEN
257 ELSEIF(IVAR.EQ.33) THEN
259 ELSEIF(IVAR.EQ.34) THEN
261 ELSEIF(IVAR.EQ.35) THEN
263 ELSEIF(IVAR.EQ.36) THEN
265 ELSEIF(IVAR.EQ.37) THEN
267 ELSEIF(IVAR.EQ.38) THEN
269 ELSEIF(IVAR.EQ.39) THEN
271 ELSEIF(IVAR.EQ.40) THEN
273 ELSEIF(IVAR.EQ.41) THEN
275 ELSEIF(IVAR.EQ.42) THEN
279 C...Print current value of variable. Loop back.
280 IF(LNAM.GE.LBIT) THEN
282 CHBIT(15:60)=' has the value '
283 IF(MSVAR(IVAR,1).EQ.1) THEN
284 WRITE(CHBIT(51:60),'(I10)') IOLD
285 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
286 WRITE(CHBIT(47:60),'(F14.5)') ROLD
287 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
292 IF(MSTU(13).GE.1) WRITE(MSTU(11),1000) CHBIT(1:60)
294 IF(LLOW.LT.LTOT) GOTO 120
298 C...Read in new variable value.
299 IF(MSVAR(IVAR,1).EQ.1) THEN
301 CHINI(LNAM-LBIT+11:10)=CHBIT(LNAM+1:LBIT)
302 READ(CHINI,'(I10)') INEW
303 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
305 CHINR(LNAM-LBIT+17:16)=CHBIT(LNAM+1:LBIT)
306 READ(CHINR,'(F16.2)') RNEW
307 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
308 CHNEW=CHBIT(LNAM+1:LBIT)//' '
310 CHNEW2=CHBIT(LNAM+1:LBIT)//' '
313 C...Store new variable value.
316 ELSEIF(IVAR.EQ.2) THEN
318 ELSEIF(IVAR.EQ.3) THEN
320 ELSEIF(IVAR.EQ.4) THEN
322 ELSEIF(IVAR.EQ.5) THEN
324 ELSEIF(IVAR.EQ.6) THEN
326 ELSEIF(IVAR.EQ.7) THEN
328 ELSEIF(IVAR.EQ.8) THEN
330 ELSEIF(IVAR.EQ.9) THEN
332 ELSEIF(IVAR.EQ.10) THEN
334 ELSEIF(IVAR.EQ.11) THEN
336 ELSEIF(IVAR.EQ.12) THEN
338 ELSEIF(IVAR.EQ.13) THEN
340 ELSEIF(IVAR.EQ.14) THEN
342 ELSEIF(IVAR.EQ.15) THEN
344 ELSEIF(IVAR.EQ.16) THEN
346 ELSEIF(IVAR.EQ.17) THEN
348 ELSEIF(IVAR.EQ.18) THEN
350 ELSEIF(IVAR.EQ.19) THEN
352 ELSEIF(IVAR.EQ.20) THEN
354 ELSEIF(IVAR.EQ.21) THEN
356 ELSEIF(IVAR.EQ.22) THEN
358 ELSEIF(IVAR.EQ.23) THEN
360 ELSEIF(IVAR.EQ.24) THEN
362 ELSEIF(IVAR.EQ.25) THEN
364 ELSEIF(IVAR.EQ.26) THEN
366 ELSEIF(IVAR.EQ.27) THEN
368 ELSEIF(IVAR.EQ.28) THEN
370 ELSEIF(IVAR.EQ.29) THEN
372 ELSEIF(IVAR.EQ.30) THEN
374 ELSEIF(IVAR.EQ.31) THEN
376 ELSEIF(IVAR.EQ.32) THEN
378 ELSEIF(IVAR.EQ.33) THEN
380 ELSEIF(IVAR.EQ.34) THEN
382 ELSEIF(IVAR.EQ.35) THEN
384 ELSEIF(IVAR.EQ.36) THEN
386 ELSEIF(IVAR.EQ.37) THEN
388 ELSEIF(IVAR.EQ.38) THEN
390 ELSEIF(IVAR.EQ.39) THEN
392 ELSEIF(IVAR.EQ.40) THEN
394 ELSEIF(IVAR.EQ.41) THEN
396 ELSEIF(IVAR.EQ.42) THEN
400 C...Write old and new value. Loop back.
402 CHBIT(15:60)=' changed from to '
403 IF(MSVAR(IVAR,1).EQ.1) THEN
404 WRITE(CHBIT(33:42),'(I10)') IOLD
405 WRITE(CHBIT(51:60),'(I10)') INEW
406 IF(MSTU(13).GE.1) WRITE(MSTU(11),1000) CHBIT(1:60)
407 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
408 WRITE(CHBIT(29:42),'(F14.5)') ROLD
409 WRITE(CHBIT(47:60),'(F14.5)') RNEW
410 IF(MSTU(13).GE.1) WRITE(MSTU(11),1000) CHBIT(1:60)
411 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
414 IF(MSTU(13).GE.1) WRITE(MSTU(11),1000) CHBIT(1:60)
416 CHBIT(15:88)=' changed from '//CHOLD2//' to '//CHNEW2
417 IF(MSTU(13).GE.1) WRITE(MSTU(11),1100) CHBIT(1:88)
420 IF(LLOW.LT.LTOT) GOTO 120
422 C...Format statement for output on unit MSTU(11) (by default 6).