01:       SUBROUTINE DROTG(DA,DB,C,S)
02: *     .. Scalar Arguments ..
03:       DOUBLE PRECISION C,DA,DB,S
04: *     ..
05: *
06: *  Purpose
07: *  =======
08: *
09: *     DROTG construct givens plane rotation.
10: *
11: *  Further Details
12: *  ===============
13: *
14: *     jack dongarra, linpack, 3/11/78.
15: *
16: *  =====================================================================
17: *
18: *     .. Local Scalars ..
19:       DOUBLE PRECISION R,ROE,SCALE,Z
20: *     ..
21: *     .. Intrinsic Functions ..
22:       INTRINSIC DABS,DSIGN,DSQRT
23: *     ..
24:       ROE = DB
25:       IF (DABS(DA).GT.DABS(DB)) ROE = DA
26:       SCALE = DABS(DA) + DABS(DB)
27:       IF (SCALE.NE.0.0d0) GO TO 10
28:       C = 1.0d0
29:       S = 0.0d0
30:       R = 0.0d0
31:       Z = 0.0d0
32:       GO TO 20
33:    10 R = SCALE*DSQRT((DA/SCALE)**2+ (DB/SCALE)**2)
34:       R = DSIGN(1.0d0,ROE)*R
35:       C = DA/R
36:       S = DB/R
37:       Z = 1.0d0
38:       IF (DABS(DA).GT.DABS(DB)) Z = S
39:       IF (DABS(DB).GE.DABS(DA) .AND. C.NE.0.0d0) Z = 1.0d0/C
40:    20 DA = R
41:       DB = Z
42:       RETURN
43:       END
44: