11*
2- * $Id: gvaviv.F,v 1.1.1.1 2004/01/15 00:12:16 potekhin Exp $
2+ * $Id: gvaviv.F,v 1.2 2020/06/05 15:31:12 jwebb Exp $
33*
44* $Log: gvaviv.F,v $
5+ * Revision 1.2 2020/06/05 15:31:12 jwebb
6+ * Apply changes found in VMC geant3 (reorder, protect against div-by-0's)
7+ *
58* Revision 1.1.1.1 2004/01/15 00:12:16 potekhin
69*
10+ *
711* Revision 1.1.1.1 1997/11/03 15:30:44 atlascvs
812* Importing CERNLIB version 08.21.
913*
@@ -201,6 +205,10 @@ FUNCTION GVAVIV(RKAPPA,BETA2,RAN)
201205
202206 GVAVIV= 0
203207 IF (RKAPPA .LT. 0.01 .OR. RKAPPA .GT. 12 ) RETURN
208+ HC(0 )= LOG (RKAPPA)+ BETA2+0.42278434
209+ DSIGM(1 )= SQRT (RKAPPA/ (1-0.5 * BETA2))
210+ HC(1 )= DSIGM(1 )
211+ HC(8 )= 0.39894228 * HC(1 )
204212 IF (RKAPPA .GE. 0.29 ) THEN
205213 ITYPE= 1
206214 NPT= 100
@@ -210,14 +218,11 @@ FUNCTION GVAVIV(RKAPPA,BETA2,RAN)
210218 AC(8 )= (- 0.013483 * BETA2-0.048801 )* RKAPPA+
211219 1 (- 1.6921 * BETA2+8.3656 )* WK+ (- 0.73275 * BETA2-3.5226 )
212220 DRK(1 )= WK** 2
213- DSIGM(1 )= SQRT (RKAPPA/ (1-0.5 * BETA2))
214221 DO 1 J = 1 ,4
215222 DRK(J+1 )= DRK(1 )* DRK(J)
216223 DSIGM(J+1 )= DSIGM(1 )* DSIGM(J)
217224 1 ALFA(J+1 )= (FNINV(J)- BETA2* FNINV(J+1 ))* DRK(J)
218225
219- HC(0 )= LOG (RKAPPA)+ BETA2+0.42278434
220- HC(1 )= DSIGM(1 )
221226 HC(2 )= ALFA(3 )* DSIGM(3 )
222227 HC(3 )= (3 * ALFA(2 )** 2 + ALFA(4 ))* DSIGM(4 )- 3
223228 HC(4 )= (10 * ALFA(2 )* ALFA(3 )+ ALFA(5 ))* DSIGM(5 )- 10 * HC(2 )
@@ -226,7 +231,6 @@ FUNCTION GVAVIV(RKAPPA,BETA2,RAN)
226231 HC(7 )= HC(2 )* HC(5 )
227232 DO 2 J = 2 ,7
228233 2 HC(J)= EDGEC(J)* HC(J)
229- HC(8 )= 0.39894228 * HC(1 )
230234 ELSEIF (RKAPPA .GE. 0.22 ) THEN
231235 ITYPE= 2
232236 NPT= 150
@@ -331,11 +335,21 @@ FUNCTION GVAVIV(RKAPPA,BETA2,RAN)
331335 AC(9 )= (AC(8 )- AC(0 ))/ NPT
332336 IF (ITYPE .EQ. 3 ) THEN
333337 X= (AC(7 )- AC(8 ))/ (AC(7 )* AC(8 ))
334- Y= 1 / LOG (AC(8 )/ AC(7 ))
338+ IF (AC(7 ) .NE. AC(8 )) THEN
339+ Y= 1 / LOG (AC(8 )/ AC(7 ))
340+ ELSE
341+ Y= 1.E10
342+ ENDIF
335343 P2= AC(7 )** 2
344+ C . PROTECT AGAINST DIVISION BY ZERO
345+ DIVISOR= 1 + X* Y* AC(7 )
346+ IF (DIVISOR .EQ. 0 ) THEN
347+ AC(11 )= 1.E10
348+ ELSE
336349 AC(11 )= P2* (AC(1 )* EXP (- AC(2 )* (AC(7 )+ AC(5 )* P2)-
337350 1 AC(3 )* EXP (- AC(4 )* (AC(7 )+ AC(6 )* P2)))- 0.045 * Y/ AC(7 ))/
338- 2 (1 + X* Y* AC(7 ))
351+ 2 DIVISOR
352+ ENDIF
339353 AC(12 )= (0.045 + X* AC(11 ))* Y
340354 ENDIF
341355 IF (ITYPE .EQ. 4 ) AC(10 )= 0.995 / GLANDS(AC(8 ))
0 commit comments