2 C*********************************************************************
4 SUBROUTINE LUGIVE(CHIN)
6 C...Purpose: to set values of commonblock variables (also in PYTHIA!).
7 COMMON/LUJETS/N,K(4000,5),P(4000,5),V(4000,5)
8 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
9 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
10 COMMON/LUDAT3/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)
11 COMMON/LUDAT4/CHAF(500)
13 COMMON/LUDATR/MRLU(6),RRLU(100)
14 COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
15 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
16 COMMON/PYINT1/MINT(400),VINT(400)
17 COMMON/PYINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
18 COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
19 COMMON/PYINT4/WIDP(21:40,0:40),WIDE(21:40,0:40),WIDS(21:40,3)
20 COMMON/PYINT5/NGEN(0:200,3),XSEC(0:200,3)
21 COMMON/PYINT6/PROC(0:200)
22 COMMON/PYINT7/SIGT(0:6,0:6,0:5)
24 SAVE /LUJETS/,/LUDAT1/,/LUDAT2/,/LUDAT3/,/LUDAT4/,/LUDATR/
25 SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,
26 &/PYINT5/,/PYINT6/,/PYINT7/
27 CHARACTER CHIN*(*),CHFIX*104,CHBIT*104,CHOLD*8,CHNEW*8,CHOLD2*28,
28 &CHNEW2*28,CHNAM*4,CHVAR(43)*4,CHALP(2)*26,CHIND*8,CHINI*10,
32 C...For each variable to be translated give: name,
33 C...integer/real/character, no. of indices, lower&upper index bounds.
34 DATA CHVAR/'N','K','P','V','MSTU','PARU','MSTJ','PARJ','KCHG',
35 &'PMAS','PARF','VCKM','MDCY','MDME','BRAT','KFDP','CHAF','MRLU',
36 &'RRLU','MSEL','MSUB','KFIN','CKIN','MSTP','PARP','MSTI','PARI',
37 &'MINT','VINT','ISET','KFPR','COEF','ICOL','XSFX','ISIG','SIGH',
38 &'WIDP','WIDE','WIDS','NGEN','XSEC','PROC','SIGT'/
39 DATA ((MSVAR(I,J),J=1,8),I=1,43)/ 1,7*0, 1,2,1,4000,1,5,2*0,
40 & 2,2,1,4000,1,5,2*0, 2,2,1,4000,1,5,2*0, 1,1,1,200,4*0,
41 & 2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
42 & 1,2,1,500,1,3,2*0, 2,2,1,500,1,4,2*0, 2,1,1,2000,4*0,
43 & 2,2,1,4,1,4,2*0, 1,2,1,500,1,3,2*0, 1,2,1,2000,1,2,2*0,
44 & 2,1,1,2000,4*0, 1,2,1,2000,1,5,2*0, 3,1,1,500,4*0,
45 & 1,1,1,6,4*0, 2,1,1,100,4*0,
46 & 1,7*0, 1,1,1,200,4*0, 1,2,1,2,-40,40,2*0, 2,1,1,200,4*0,
47 & 1,1,1,200,4*0, 2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
48 & 1,1,1,400,4*0, 2,1,1,400,4*0, 1,1,1,200,4*0,
49 & 1,2,1,200,1,2,2*0, 2,2,1,200,1,20,2*0, 1,3,1,40,1,4,1,2,
50 & 2,2,1,2,-40,40,2*0, 1,2,1,1000,1,3,2*0, 2,1,1,1000,4*0,
51 & 2,2,21,40,0,40,2*0, 2,2,21,40,0,40,2*0, 2,2,21,40,1,3,2*0,
52 & 1,2,0,200,1,3,2*0, 2,2,0,200,1,3,2*0, 4,1,0,200,4*0,
54 DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
55 &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
57 C...Length of character variable. Subdivide it into instructions.
58 IF(MSTU(12).GE.1) CALL LULIST(0)
62 IF(CHBIT(LBIT:LBIT).EQ.' ') GOTO 100
65 IF(CHBIT(LCOM:LCOM).EQ.' ') GOTO 110
67 CHFIX(LTOT:LTOT)=CHBIT(LCOM:LCOM)
72 IF(LHIG.LE.LTOT.AND.CHFIX(LHIG:LHIG).NE.';') GOTO 130
74 CHBIT(1:LBIT)=CHFIX(LLOW+1:LHIG-1)
76 C...Identify commonblock variable.
79 IF(CHBIT(LNAM:LNAM).NE.'('.AND.CHBIT(LNAM:LNAM).NE.'='.AND.
81 CHNAM=CHBIT(1:LNAM-1)//' '
84 IF(CHNAM(LCOM:LCOM).EQ.CHALP(1)(LALP:LALP)) CHNAM(LCOM:LCOM)=
90 IF(CHNAM.EQ.CHVAR(IV)) IVAR=IV
93 CALL LUERRM(18,'(LUGIVE:) do not recognize variable '//CHNAM)
95 IF(LLOW.LT.LTOT) GOTO 120
99 C...Identify any indices.
104 IF(CHBIT(LNAM:LNAM).EQ.'(') THEN
107 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 180
109 IF((CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.'c').
110 & AND.(IVAR.EQ.9.OR.IVAR.EQ.10.OR.IVAR.EQ.13.OR.IVAR.EQ.17)) THEN
111 CHIND(LNAM-LIND+11:8)=CHBIT(LNAM+2:LIND-1)
112 READ(CHIND,'(I8)') KF
114 ELSEIF(CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.
116 CALL LUERRM(18,'(LUGIVE:) not allowed to use C index for '//
119 IF(LLOW.LT.LTOT) GOTO 120
122 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
123 READ(CHIND,'(I8)') I1
126 IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
129 IF(CHBIT(LNAM:LNAM).EQ.',') THEN
132 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 190
134 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
135 READ(CHIND,'(I8)') I2
137 IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
140 IF(CHBIT(LNAM:LNAM).EQ.',') THEN
143 IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 200
145 CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
146 READ(CHIND,'(I8)') I3
151 C...Check that indices allowed.
153 IF(NINDX.NE.MSVAR(IVAR,2)) IERR=1
154 IF(NINDX.GE.1.AND.(I1.LT.MSVAR(IVAR,3).OR.I1.GT.MSVAR(IVAR,4)))
156 IF(NINDX.GE.2.AND.(I2.LT.MSVAR(IVAR,5).OR.I2.GT.MSVAR(IVAR,6)))
158 IF(NINDX.EQ.3.AND.(I3.LT.MSVAR(IVAR,7).OR.I3.GT.MSVAR(IVAR,8)))
160 IF(CHBIT(LNAM:LNAM).NE.'=') IERR=5
162 CALL LUERRM(18,'(LUGIVE:) unallowed indices for '//
165 IF(LLOW.LT.LTOT) GOTO 120
169 C...Save old value of variable.
172 ELSEIF(IVAR.EQ.2) THEN
174 ELSEIF(IVAR.EQ.3) THEN
176 ELSEIF(IVAR.EQ.4) THEN
178 ELSEIF(IVAR.EQ.5) THEN
180 ELSEIF(IVAR.EQ.6) THEN
182 ELSEIF(IVAR.EQ.7) THEN
184 ELSEIF(IVAR.EQ.8) THEN
186 ELSEIF(IVAR.EQ.9) THEN
188 ELSEIF(IVAR.EQ.10) THEN
190 ELSEIF(IVAR.EQ.11) THEN
192 ELSEIF(IVAR.EQ.12) THEN
194 ELSEIF(IVAR.EQ.13) THEN
196 ELSEIF(IVAR.EQ.14) THEN
198 ELSEIF(IVAR.EQ.15) THEN
200 ELSEIF(IVAR.EQ.16) THEN
202 ELSEIF(IVAR.EQ.17) THEN
204 ELSEIF(IVAR.EQ.18) THEN
206 ELSEIF(IVAR.EQ.19) THEN
208 ELSEIF(IVAR.EQ.20) THEN
210 ELSEIF(IVAR.EQ.21) THEN
212 ELSEIF(IVAR.EQ.22) THEN
214 ELSEIF(IVAR.EQ.23) THEN
216 ELSEIF(IVAR.EQ.24) THEN
218 ELSEIF(IVAR.EQ.25) THEN
220 ELSEIF(IVAR.EQ.26) THEN
222 ELSEIF(IVAR.EQ.27) THEN
224 ELSEIF(IVAR.EQ.28) THEN
226 ELSEIF(IVAR.EQ.29) THEN
228 ELSEIF(IVAR.EQ.30) THEN
230 ELSEIF(IVAR.EQ.31) THEN
232 ELSEIF(IVAR.EQ.32) THEN
234 ELSEIF(IVAR.EQ.33) THEN
236 ELSEIF(IVAR.EQ.34) THEN
238 ELSEIF(IVAR.EQ.35) THEN
240 ELSEIF(IVAR.EQ.36) THEN
242 ELSEIF(IVAR.EQ.37) THEN
244 ELSEIF(IVAR.EQ.38) THEN
246 ELSEIF(IVAR.EQ.39) THEN
248 ELSEIF(IVAR.EQ.40) THEN
250 ELSEIF(IVAR.EQ.41) THEN
252 ELSEIF(IVAR.EQ.42) THEN
254 ELSEIF(IVAR.EQ.43) THEN
258 C...Print current value of variable. Loop back.
259 IF(LNAM.GE.LBIT) THEN
261 CHBIT(15:60)=' has the value '
262 IF(MSVAR(IVAR,1).EQ.1) THEN
263 WRITE(CHBIT(51:60),'(I10)') IOLD
264 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
265 WRITE(CHBIT(47:60),'(F14.5)') ROLD
266 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
271 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
273 IF(LLOW.LT.LTOT) GOTO 120
277 C...Read in new variable value.
278 IF(MSVAR(IVAR,1).EQ.1) THEN
280 CHINI(LNAM-LBIT+11:10)=CHBIT(LNAM+1:LBIT)
281 READ(CHINI,'(I10)') INEW
282 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
284 CHINR(LNAM-LBIT+17:16)=CHBIT(LNAM+1:LBIT)
285 READ(CHINR,'(F16.2)') RNEW
286 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
287 CHNEW=CHBIT(LNAM+1:LBIT)//' '
289 CHNEW2=CHBIT(LNAM+1:LBIT)//' '
292 C...Store new variable value.
295 ELSEIF(IVAR.EQ.2) THEN
297 ELSEIF(IVAR.EQ.3) THEN
299 ELSEIF(IVAR.EQ.4) THEN
301 ELSEIF(IVAR.EQ.5) THEN
303 ELSEIF(IVAR.EQ.6) THEN
305 ELSEIF(IVAR.EQ.7) THEN
307 ELSEIF(IVAR.EQ.8) THEN
309 ELSEIF(IVAR.EQ.9) THEN
311 ELSEIF(IVAR.EQ.10) THEN
313 ELSEIF(IVAR.EQ.11) THEN
315 ELSEIF(IVAR.EQ.12) THEN
317 ELSEIF(IVAR.EQ.13) THEN
319 ELSEIF(IVAR.EQ.14) THEN
321 ELSEIF(IVAR.EQ.15) THEN
323 ELSEIF(IVAR.EQ.16) THEN
325 ELSEIF(IVAR.EQ.17) THEN
327 ELSEIF(IVAR.EQ.18) THEN
329 ELSEIF(IVAR.EQ.19) THEN
331 ELSEIF(IVAR.EQ.20) THEN
333 ELSEIF(IVAR.EQ.21) THEN
335 ELSEIF(IVAR.EQ.22) THEN
337 ELSEIF(IVAR.EQ.23) THEN
339 ELSEIF(IVAR.EQ.24) THEN
341 ELSEIF(IVAR.EQ.25) THEN
343 ELSEIF(IVAR.EQ.26) THEN
345 ELSEIF(IVAR.EQ.27) THEN
347 ELSEIF(IVAR.EQ.28) THEN
349 ELSEIF(IVAR.EQ.29) THEN
351 ELSEIF(IVAR.EQ.30) THEN
353 ELSEIF(IVAR.EQ.31) THEN
355 ELSEIF(IVAR.EQ.32) THEN
357 ELSEIF(IVAR.EQ.33) THEN
359 ELSEIF(IVAR.EQ.34) THEN
361 ELSEIF(IVAR.EQ.35) THEN
363 ELSEIF(IVAR.EQ.36) THEN
365 ELSEIF(IVAR.EQ.37) THEN
367 ELSEIF(IVAR.EQ.38) THEN
369 ELSEIF(IVAR.EQ.39) THEN
371 ELSEIF(IVAR.EQ.40) THEN
373 ELSEIF(IVAR.EQ.41) THEN
375 ELSEIF(IVAR.EQ.42) THEN
377 ELSEIF(IVAR.EQ.43) THEN
381 C...Write old and new value. Loop back.
383 CHBIT(15:60)=' changed from to '
384 IF(MSVAR(IVAR,1).EQ.1) THEN
385 WRITE(CHBIT(33:42),'(I10)') IOLD
386 WRITE(CHBIT(51:60),'(I10)') INEW
387 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
388 ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
389 WRITE(CHBIT(29:42),'(F14.5)') ROLD
390 WRITE(CHBIT(47:60),'(F14.5)') RNEW
391 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
392 ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
395 IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
397 CHBIT(15:88)=' changed from '//CHOLD2//' to '//CHNEW2
398 IF(MSTU(13).GE.1) WRITE(MSTU(11),5100) CHBIT(1:88)
401 IF(LLOW.LT.LTOT) GOTO 120
403 C...Format statement for output on unit MSTU(11) (by default 6).