]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/ggeom/gvpsqr.F
Allow any Cherenkov-like particle to be transported
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / gvpsqr.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:20:57 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.31 by S.Giani
11*-- Author :
12*
13 SUBROUTINE GVPSQR (CBA, SOL, NSOL)
14************************************************************************
15* *
16* SUBROUTINE GVPSQR (CBA,SOL,NSOL) 870924 VP *
17* *
18* SOLVE QUADRATIC EQUATION *
19* *
20* ARGUMENTS: *
21* CBA Array of coeff's A0 + A1*x + A2*x**2 *
22* SOL Solutions *
23* NSOL Number of solutions : *
24* if zero - SOL(1)= extremum *
25* if -ve - No solution at all *
26* *
27************************************************************************
28
29 PARAMETER (ZERO2=1.E-12)
30 REAL CBA(3), SOL(2), SWAP
31*-----------------------------------------------------------------------
32
33 A = CBA(3)
34 B = CBA(2)*.5
35 C = CBA(1)
36 IF (B.LT.0.) THEN
37 A = -A
38 B = -B
39 C = -C
40 ENDIF
41
42 AMX = MAX (ABS(A),ABS(B),ABS(C))
43 IF (AMX.LE.0.) GO TO 100
44 A = A/AMX
45 B = B/AMX
46 C = C/AMX
47
48 DIS = B**2 - A*C
49 NSOL = 1
50 IF (ABS(DIS) .LE. ZERO2) DIS = 0.
51 IF (DIS.LT.0.) THEN
52 NSOL = 0
53 DIS = 0.
54 ENDIF
55
56 IF (DIS.GT.0.) DIS = SQRT(DIS)
57 BDIS = B + DIS
58 IF (ABS(C).GT.1.E+10*BDIS) GO TO 100
59 SOL(1) = 0.
60 IF (ABS(BDIS).LE.0.) GO TO 999
61 SOL(1) = (-C/BDIS)
62 IF (DIS.LE.0.) GO TO 999
63 IF (BDIS.GE.1.E+10*ABS(A)) GO TO 999
64 NSOL = 2
65 SOL(2) = (-BDIS/A)
66 IF (SOL(1).GT.SOL(2)) THEN
67 SWAP = SOL(1)
68 SOL(1) = SOL(2)
69 SOL(2) = SWAP
70 ENDIF
71 GO TO 999
72
73*
74** No solutions
75 100 NSOL = -1
76
77 999 RETURN
78 END