5 * Revision 1.1.1.1 1995/10/24 10:21:45 cernlib
9 #include "geant321/pilot.h"
10 #if defined(CERNLIB_OLD)
11 *CMZ : 3.21/02 29/03/94 15.41.24 by S.Giani
15 C. ******************************************************************
19 C. * Computes SAFETY and, only when new SAFETY is smaller than *
20 C. * STEP, computes SNEXT. *
21 C. * STEP has to be preset to BIG or to physical step size *
23 C. * Called by : GTELEC, GTGAMA, GTHADR, GTMUON, GTNEUT, GTNINO *
24 C. * Authors : S.Banerjee, R.Brun, F.Bruyant *
26 C. ******************************************************************
28 #include "geant321/gcbank.inc"
29 #include "geant321/gcflag.inc"
30 #include "geant321/gconsp.inc"
31 #include "geant321/gcstak.inc"
32 #include "geant321/gctmed.inc"
33 #include "geant321/gctrak.inc"
34 #include "geant321/gcvolu.inc"
35 #include "geant321/gcshno.inc"
36 #if defined(CERNLIB_USRJMP)
37 #include "geant321/gcjump.inc"
40 PARAMETER (BIG1=0.9*BIG)
42 REAL X0(3), XC(6), XT(6)
46 DATA IDTYP / 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 2, 3, 1,
47 + 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 4, 3, 1, 1, 1,
50 C. ------------------------------------------------------------------
52 * * *** Transform current point and direction into local reference system
54 IF (GRMAT(10,NLEVEL).EQ.0.) THEN
55 XC(1) = VECT(1) - GTRAN(1,NLEVEL)
56 XC(2) = VECT(2) - GTRAN(2,NLEVEL)
57 XC(3) = VECT(3) - GTRAN(3,NLEVEL)
62 C***** Code Expanded From Routine: GTRNSF
65 XL1 = VECT(1) - GTRAN(1,NLEVEL)
66 XL2 = VECT(2) - GTRAN(2,NLEVEL)
67 XL3 = VECT(3) - GTRAN(3,NLEVEL)
68 XC(1) = XL1*GRMAT(1,NLEVEL) + XL2*GRMAT(2,NLEVEL) + XL3*
70 XC(2) = XL1*GRMAT(4,NLEVEL) + XL2*GRMAT(5,NLEVEL) + XL3*
72 XC(3) = XL1*GRMAT(7,NLEVEL) + XL2*GRMAT(8,NLEVEL) + XL3*
75 C***** End of Code Expanded From Routine: GTRNSF
76 C***** Code Expanded From Routine: GROT
78 XC(4) = VECT(4)*GRMAT(1,NLEVEL) + VECT(5)*GRMAT(2,NLEVEL) +
79 1 VECT(6)*GRMAT(3,NLEVEL)
80 XC(5) = VECT(4)*GRMAT(4,NLEVEL) + VECT(5)*GRMAT(5,NLEVEL) +
81 1 VECT(6)*GRMAT(6,NLEVEL)
82 XC(6) = VECT(4)*GRMAT(7,NLEVEL) + VECT(5)*GRMAT(8,NLEVEL) +
83 1 VECT(6)*GRMAT(9,NLEVEL)
85 C***** End of Code Expanded From Routine: GROT
88 * *** Compute distance to boundaries
93 JVO = LQ(JVOLUM-LVOLUM(NLEVEL))
95 IF (Q(JVO+3).EQ.0.) GO TO 300
97 IF (NIN.LT.0) GO TO 200
99 * *** Case with contents positioned
102 IF (ISEARC.GE.-1) GO TO 120
104 * ** Contents are ordered by (dynamic) GSORD, select neighbours
106 JSB = LQ(LQ(JVO-NIN-1))
111 INC = SIGN(1., XC(IAX+3))
113 CALL GFCOOR (XC, IAX, CX)
115 DR = XC(1)*XC(4) +XC(2)*XC(5)
116 IF (IAX.EQ.5) DR = DR +XC(3)*XC(6)
118 ELSE IF (IAX.EQ.6) THEN
119 INC = SIGN(1., XC(1)*XC(5)-XC(2)*XC(4))
121 INC = SIGN(1., XC(3)*(XC(1)*XC(4)+XC(2)*XC(5))
122 + -XC(6)*(XC(1)*XC(1)+XC(2)*XC(2)))
125 IDIV = LOCATF (Q(JSB+3), NSB, CX)
126 IF (IDIV.LT.0) IDIV = -IDIV
129 IF (INC.LT.0.AND.IAX.LE.3) THEN
130 SAFETY = Q(JSB+3) -CX
134 ELSE IF (IDIV.EQ.NSB) THEN
135 IF (INC.GT.0.AND.IAX.NE.7) THEN
136 SAFETY = CX -Q(JSB+2+NSB)
143 SAFETY = CX -Q(JSB+2+IDIV)
145 SAFETY = Q(JSB+3+IDIV) -CX
151 ELSE IF (IAX.EQ.6) THEN
152 IF (IDIV.EQ.0) IDIV = NSB
159 110 NCONT = IQ(JSC0+IDIV)
161 * ** Loop over (selected) contents
164 IF (IDIV.EQ.IDIVL) GO TO 400
166 IF (IAX.NE.6) GOTO 110
167 * (following statement for IAX=6, when division NSB is empty)
168 IF (IDIV.GT.NSB) IDIV = 1
169 IF (IDIV.EQ.0) IDIV = NSB
177 120 JNEAR = LQ(JVO-NIN-1)
178 IF (ISEARC.GT.0) THEN
179 #if !defined(CERNLIB_USRJMP)
180 CALL GUNEAR (ISEARC, 2, XC, JNEAR)
182 #if defined(CERNLIB_USRJMP)
183 CALL JUMPT4(JUNEAR, ISEARC, 2, XC, JNEAR)
185 IF (IQ(JNEAR+1).EQ.0) GO TO 300
187 IF (INFROM.GT.0) THEN
189 IF (LQ(JIN-1).NE.0) THEN
191 IF (IQ(JNE+1).GT.1.OR.IQ(JNE+2).NE.0) JNEAR = JNE
197 IF (IQ(JNEAR+1).NE.0) THEN
203 130 IN = IQ(JNEAR+INEAR)
206 140 IN = IQ(JSCV+ICONT)
208 150 IF (IN.LT.0) GO TO 300
211 JVOT = LQ(JVOLUM-IVOT)
214 IF (BTEST(IQ(JVOT),1)) THEN
215 * (case with JVOLUM structure locally developed)
216 JPAR = LQ(LQ(JVOLUM-LVOLUM(NLDEV(NLEVEL))))
217 DO 169 ILEV = NLDEV(NLEVEL), NLEVEL
218 IF (IQ(JPAR+1).EQ.0) THEN
219 IF (ILEV.EQ.NLEVEL) THEN
222 JPAR = LQ(JPAR-LINDEX(ILEV+1))
224 IF (JPAR.EQ.0) GO TO 170
225 ELSE IF (IQ(JPAR-3).GT.1) THEN
226 JPAR = LQ(JPAR-LINDEX(ILEV+1))
244 * * Compute distance to boundary of current content
246 C***** Code Expanded From Routine: GITRAN
247 180 IF (IROTT .EQ. 0) THEN
248 XT(1) = XC(1) - Q(5+JIN)
249 XT(2) = XC(2) - Q(6+JIN)
250 XT(3) = XC(3) - Q(7+JIN)
257 XL1 = XC(1) - Q(5+JIN)
258 XL2 = XC(2) - Q(6+JIN)
259 XL3 = XC(3) - Q(7+JIN)
261 XT(1) = XL1*Q(JR+1) + XL2*Q(JR+2) + XL3*Q(JR+3)
262 XT(2) = XL1*Q(JR+4) + XL2*Q(JR+5) + XL3*Q(JR+6)
263 XT(3) = XL1*Q(JR+7) + XL2*Q(JR+8) + XL3*Q(JR+9)
265 C***** End of Code Expanded From Routine: GITRAN
266 C***** Code Expanded From Routine: GRMTD
267 XT(4)=XC(4)*Q(JR+1)+XC(5)*Q(JR+2)+XC(6)*Q(JR+3)
268 XT(5)=XC(4)*Q(JR+4)+XC(5)*Q(JR+5)+XC(6)*Q(JR+6)
269 XT(6)=XC(4)*Q(JR+7)+XC(5)*Q(JR+8)+XC(6)*Q(JR+9)
271 C***** End of Code Expanded From Routine: GRMTD
278 CALL GNOBOX (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
279 ELSE IF (ISHT.EQ.2) THEN
280 CALL GNOTRA(XT,Q(JPAR+1),IACT,1,SNEXT,SNXT,SAFE)
281 ELSE IF (ISHT.EQ.3) THEN
282 CALL GNOTRA(XT,Q(JPAR+1),IACT,2,SNEXT,SNXT,SAFE)
284 CALL GNOTRP (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
286 ELSE IF (ISHT.LE.10) THEN
288 CALL GNOTUB(XT,Q(JPAR+1),IACT,1,SNEXT,SNXT,SAFE)
289 ELSE IF (ISHT.EQ.6) THEN
290 CALL GNOTUB(XT,Q(JPAR+1),IACT,2,SNEXT,SNXT,SAFE)
291 ELSE IF (ISHT.EQ.7) THEN
292 CALL GNOCON(XT,Q(JPAR+1),IACT,1,SNEXT,SNXT,SAFE)
293 ELSE IF (ISHT.EQ.8) THEN
294 CALL GNOCON(XT,Q(JPAR+1),IACT,2,SNEXT,SNXT,SAFE)
295 ELSE IF (ISHT.EQ.9) THEN
296 CALL GNOSPH (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
298 CALL GNOPAR (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
300 ELSE IF (ISHT.EQ.11) THEN
301 CALL GNOPGO (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
302 ELSE IF (ISHT.EQ.12) THEN
303 CALL GNOPCO (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
304 ELSE IF (ISHT.EQ.13) THEN
305 CALL GNOELT (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
306 ELSE IF (ISHT.EQ.14) THEN
307 CALL GNOHYP (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
308 ELSE IF (ISHT.EQ.28) THEN
309 CALL GSNGTR (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE,0)
310 ELSE IF (ISHT.EQ.NSCTUB) THEN
311 CALL GNOCTU (XT,Q(JPAR+1),IACT,SNEXT,SNXT,SAFE)
313 PRINT *, ' GTNEXT : No code for shape ', ISHT
317 IF (SAFE.LT.SAFETY) SAFETY = SAFE
318 IF (SNXT.LE.MIN(SNEXT,BIG1)) THEN
322 LQ(JGPAR-NLEVEL-1) = JPAR
323 IQ(JGPAR+NLEVEL+1) = NPAR
324 IF (ISEARC.EQ.-2) THEN
325 IF (MOD(IQ(JSC0),2).NE.0) THEN
328 X0(1) = XC(1) + SNXT*XC(4)
329 X0(2) = XC(2) + SNXT*XC(5)
330 X0(3) = XC(3) + SNXT*XC(6)
332 IDIVB = LOCATF (Q(JSB+3), NSB, X0(IAX))
334 CALL GFCOOR (X0, IAX, CX)
335 IDIVB = LOCATF (Q(JSB+3), NSB, CX)
337 IF (IDIVB.LT.0) IDIVB = -IDIVB
344 ELSE IF (IDIVB.EQ.NSB) THEN
345 IF (IAX.NE.6) IDIVB = NSB - 1
351 IF (ISEARC.EQ.-2) THEN
352 IF (ICONT.EQ.NCONT) THEN
355 IF (IDIV.EQ.IDIVB) GO TO 300
356 IF (.NOT.BTEST(IQ(JVO),2)) THEN
362 * * Compute distance to boundary of current volume
364 JPAR = LQ(JGPAR-NLEVEL)
369 CALL GNBOX (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
370 ELSE IF (ISH.EQ.2) THEN
371 CALL GNTRAP (XC, Q(JPAR+1),IACT,1, SNEXT,SNXT,SAFE)
372 ELSE IF (ISH.EQ.3) THEN
373 CALL GNTRAP (XC, Q(JPAR+1),IACT,2, SNEXT,SNXT,SAFE)
375 CALL GNTRP (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
377 ELSE IF (ISH.LE.10) THEN
379 CALL GNTUBE (XC, Q(JPAR+1),IACT,1, SNEXT,SNXT,SAFE)
380 ELSE IF (ISH.EQ.6) THEN
381 CALL GNTUBE (XC, Q(JPAR+1),IACT,2, SNEXT,SNXT,SAFE)
382 ELSE IF (ISH.EQ.7) THEN
383 CALL GNCONE (XC, Q(JPAR+1),IACT,1, SNEXT,SNXT,SAFE)
384 ELSE IF (ISH.EQ.8) THEN
385 CALL GNCONE (XC, Q(JPAR+1),IACT,2, SNEXT,SNXT,SAFE)
386 ELSE IF (ISH.EQ.9) THEN
387 CALL GNSPHR (XC, Q(JPAR+1),IACT, SNEXT, SNXT, SAFE)
389 CALL GNPARA (XC, Q(JPAR+1),IACT, SNEXT, SNXT, SAFE)
391 ELSE IF (ISH.EQ.12) THEN
392 CALL GNPCON (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
393 ELSE IF (ISH.EQ.11) THEN
394 CALL GNPGON (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
395 ELSE IF (ISH.EQ.13) THEN
396 CALL GNELTU (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
397 ELSE IF (ISH.EQ.14) THEN
398 CALL GNHYPE (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
399 ELSE IF (ISH.EQ.28) THEN
400 CALL GSNGTR (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE,1)
401 ELSE IF (ISH.EQ.NSCTUB) THEN
402 CALL GNCTUB (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
404 PRINT *, ' GTNEXT : No code for shape ', ISH
408 IF (SAFE.LT.SAFETY) SAFETY = SAFE
409 IF (SNXT.LE.MIN(SNEXT,BIG1)) THEN
415 * * Check wether other pseudo-divisions have to be scanned
417 X0(1) = XC(1) + SNXT*XC(4)
418 X0(2) = XC(2) + SNXT*XC(5)
419 X0(3) = XC(3) + SNXT*XC(6)
421 IDIVL = LOCATF (Q(JSB+3), NSB, X0(IAX))
423 CALL GFCOOR (X0, IAX, CX)
424 IDIVL = LOCATF (Q(JSB+3), NSB, CX)
426 IF (IDIVL.LT.0) IDIVL = -IDIVL
433 ELSEIF (IDIVL.EQ.NSB)THEN
434 IF(IAX.NE.6)IDIVL=NSB-1
437 IF (IDIV.EQ.IDIVB) GO TO 400
439 193 IF ((IDIV-IDIVL)*INC.GE.0) GO TO 400
447 IF (INEAR.EQ.NNEAR) GO TO 300
452 * *** Case of volume incompletely divided
457 JVOT = LQ(JVOLUM-IVOT)
460 * ** Get the division parameters
462 IF (NLEVEL.LT.NLDEV(NLEVEL)) THEN
465 * (case with JVOLUM structure locally developed)
466 JPARM = LQ(LQ(JVOLUM-LVOLUM(NLDEV(NLEVEL))))
467 IF (NLEVEL.EQ.NLDEV(NLEVEL)) GO TO 215
468 DO 210 ILEV = NLDEV(NLEVEL), NLEVEL-1
469 IF (IQ(JPARM+1).EQ.0) THEN
470 JPARM = LQ(JPARM-LINDEX(ILEV+1))
471 IF (JPARM.EQ.0) GO TO 215
472 ELSE IF (IQ(JPARM-3).GT.1) THEN
473 JPARM = LQ(JPARM-LINDEX(ILEV+1))
477 IF (ILEV.EQ.NLEVEL-1) THEN
490 * ** Look at the first and the last divisions only
492 220 IDT = IDTYP(IAXIS, ISH)
495 IF (XC(IAXIS).LT.ORIG) THEN
500 ELSE IF (IDT.EQ.2) THEN
501 R = XC(1)**2 + XC(2)**2
502 IF (ISH.EQ.9) R = R + XC(3)**2
505 IF (ISH.EQ.5.OR.ISH.EQ.6.OR.ISH.EQ.9) THEN
512 ** PRINT *, ' GTNEXT : Partially divided ',ISH,IAXIS
514 IF (NDIV.GT.1) IN2 = NDIV
516 ELSE IF (IDT.EQ.4) THEN
518 RXY = XC(1)**2 + XC(2)**2
520 IF (XC(3).NE.0.0) THEN
521 THET = RADDEG * ATAN (RXY/XC(3))
522 IF (THET.LT.0.0) THET = THET + 180.0
526 IF (THET.LE.ORIG) THEN
533 IF (ISH.EQ.5.OR.ISH.EQ.7) THEN
535 IF (NDIV.GT.1) IN2 = NDIV
537 IF (XC(1).NE.0.0.OR.XC(2).NE.0.0) THEN
538 PHI = RADDEG * ATAN2 (XC(2), XC(1))
542 IF (ISH.EQ.6.OR.ISH.EQ.8) THEN
543 IF (PHI.LT.ORIG) THEN
550 IF (NDIV.GT.1) IN2 = NDIV
555 225 IF (IDT.EQ.1) THEN
559 X0(IAXIS) = ORIG + (IN - 0.5) * SDIV
560 IF (ISH.EQ.4.OR.(ISH.EQ.10.AND.IAXIS.NE.1)) THEN
561 CALL GCENT (IAXIS, X0)
563 XT(1) = XC(1) - X0(1)
564 XT(2) = XC(2) - X0(2)
565 XT(3) = XC(3) - X0(3)
569 ELSE IF (IDT.EQ.3) THEN
570 PH0 = DEGRAD * (ORIG + (IN - 0.5) * SDIV)
573 XT(1) = XC(1)*CPHR + XC(2)*SPHR
574 XT(2) = XC(2)*CPHR - XC(1)*SPHR
576 XT(4) = XC(4)*CPHR + XC(5)*SPHR
577 XT(5) = XC(5)*CPHR - XC(4)*SPHR
587 IF (IQ(JPARM-3).GT.1) THEN
600 CALL GNOBOX (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
601 ELSE IF (ISHT.EQ.2) THEN
602 CALL GNOTRA (XT, Q(JPAR+1), IACT, 1, SNEXT, SNXT, SAFE)
603 ELSE IF (ISHT.EQ.3) THEN
604 CALL GNOTRA (XT, Q(JPAR+1), IACT, 2, SNEXT, SNXT, SAFE)
606 CALL GNOTRP (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
608 ELSE IF (ISHT.LE.10) THEN
610 CALL GNOTUB (XT, Q(JPAR+1), IACT, 1, SNEXT, SNXT, SAFE)
611 ELSE IF (ISHT.EQ.6) THEN
612 CALL GNOTUB (XT, Q(JPAR+1), IACT, 2, SNEXT, SNXT, SAFE)
613 ELSE IF (ISHT.EQ.7) THEN
614 CALL GNOCON (XT, Q(JPAR+1), IACT, 1, SNEXT, SNXT, SAFE)
615 ELSE IF (ISHT.EQ.8) THEN
616 CALL GNOCON (XT, Q(JPAR+1), IACT, 2, SNEXT, SNXT, SAFE)
617 ELSE IF (ISHT.EQ.9) THEN
618 CALL GNOSPH (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
620 CALL GNOPAR (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
622 ELSE IF (ISHT.EQ.11) THEN
623 CALL GNOPGO (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
624 ELSE IF (ISHT.EQ.12) THEN
625 CALL GNOPCO (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
626 ELSE IF (ISHT.EQ.13) THEN
627 CALL GNOELT (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
628 ELSE IF (ISHT.EQ.28) THEN
629 CALL GSNGTR (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE,0)
630 ELSE IF (ISHT.EQ.NSCTUB) THEN
631 CALL GNOCTU (XT, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
633 PRINT *, ' GTNEXT : No code for shape ', ISHT
637 IF (SAFE.LT.SAFETY) SAFETY = SAFE
638 IF (SNXT.LE.MIN(SNEXT,BIG1)) THEN
649 * (later, this section only for concave volumes if INGOTO >0
651 IF (IGNEXT.NE.0) THEN
652 IF (.NOT.BTEST(IQ(JVO),2)) IACT = 0
654 JPAR = LQ(JGPAR-NLEVEL)
657 CALL GNBOX (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE )
658 ELSE IF (ISH.EQ.2) THEN
659 CALL GNTRAP (XC, Q(JPAR+1), IACT, 1, SNEXT, SNXT, SAFE)
660 ELSE IF (ISH.EQ.3) THEN
661 CALL GNTRAP (XC, Q(JPAR+1), IACT, 2, SNEXT, SNXT, SAFE)
663 CALL GNTRP (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
665 ELSE IF (ISH.LE.10) THEN
667 CALL GNTUBE (XC, Q(JPAR+1), IACT, 1, SNEXT, SNXT, SAFE)
668 ELSE IF (ISH.EQ.6) THEN
669 CALL GNTUBE (XC, Q(JPAR+1), IACT, 2, SNEXT, SNXT, SAFE)
670 ELSE IF (ISH.EQ.7) THEN
671 CALL GNCONE (XC, Q(JPAR+1), IACT, 1, SNEXT, SNXT, SAFE)
672 ELSE IF (ISH.EQ.8) THEN
673 CALL GNCONE (XC, Q(JPAR+1), IACT, 2, SNEXT, SNXT, SAFE)
674 ELSE IF (ISH.EQ.9) THEN
675 CALL GNSPHR (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
677 CALL GNPARA (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
679 ELSE IF (ISH.EQ.12) THEN
680 CALL GNPCON (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
681 ELSE IF (ISH.EQ.11) THEN
682 CALL GNPGON (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
683 ELSE IF (ISH.EQ.13) THEN
684 CALL GNELTU (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
685 ELSE IF (ISH.EQ.14) THEN
686 CALL GNHYPE (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
687 ELSE IF (ISH.EQ.28) THEN
688 CALL GSNGTR (XC,Q(JPAR+1), IACT, SNEXT, SNXT, SAFE,1)
689 ELSE IF (ISH.EQ.NSCTUB) THEN
690 CALL GNCTUB (XC, Q(JPAR+1), IACT, SNEXT, SNXT, SAFE)
692 PRINT *, ' GTNEXT : No code for shape ', ISH
696 IF (SAFE.LT.SAFETY) SAFETY = SAFE
697 IF (SNXT.LE.MIN(SNEXT,BIG1)) THEN
703 400 IF (GONLY(NLEVEL).EQ.0.) THEN
705 * *** Case of a 'NOT ONLY' volume -> step search
710 IF (ST.LE.0) GO TO 900
712 IF (ST.LE.EPSI3) THEN
722 XT(1) = VECT(1) + SN*VECT(4)
723 XT(2) = VECT(2) + SN*VECT(5)
724 XT(3) = VECT(3) + SN*VECT(6)
727 CALL GINVOL (XT, ISAME)
729 IF (ST.LE.EPSI2) GO TO 490
737 IF (ST.LT.EPSI2) THEN
745 IF (NN.GT.0) GO TO 420
748 490 IF (SN.LT.SNEXT) THEN
758 * *** Attempt to rescue negative SNXT due to rounding errors
760 900 IF (SNEXT.LT.0.) THEN
762 IF (ISWIT(9).EQ.123456789) THEN
763 PRINT *,' GTNEXT : SNEXT,SAFETY,INGOTO=',SNEXT,SAFETY,INGOTO
773 IF(JGSTAT.NE.0) CALL GFSTAT(3)