Annotation of rpl/lapack/blas/drotmg.f, revision 1.9
1.9 ! bertrand 1: *> \brief \b DROTMG
1.1 bertrand 2: *
1.9 ! bertrand 3: * =========== DOCUMENTATION ===========
1.1 bertrand 4: *
1.9 ! bertrand 5: * Online html documentation available at
! 6: * http://www.netlib.org/lapack/explore-html/
1.1 bertrand 7: *
1.9 ! bertrand 8: * Definition:
! 9: * ===========
! 10: *
! 11: * SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM)
! 12: *
! 13: * .. Scalar Arguments ..
! 14: * DOUBLE PRECISION DD1,DD2,DX1,DY1
! 15: * ..
! 16: * .. Array Arguments ..
! 17: * DOUBLE PRECISION DPARAM(5)
! 18: * ..
! 19: *
! 20: *
! 21: *> \par Purpose:
! 22: * =============
! 23: *>
! 24: *> \verbatim
! 25: *>
! 26: *> CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS
! 27: *> THE SECOND COMPONENT OF THE 2-VECTOR (DSQRT(DD1)*DX1,DSQRT(DD2)*> DY2)**T.
! 28: *> WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS..
! 29: *>
! 30: *> DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0
! 31: *>
! 32: *> (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0)
! 33: *> H=( ) ( ) ( ) ( )
! 34: *> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0).
! 35: *> LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22
! 36: *> RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE
! 37: *> VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.)
! 38: *>
! 39: *> THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE
! 40: *> INEXACT. THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE
! 41: *> OF DD1 AND DD2. ALL ACTUAL SCALING OF DATA IS DONE USING GAM.
! 42: *>
! 43: *> \endverbatim
! 44: *
! 45: * Arguments:
! 46: * ==========
! 47: *
! 48: *> \param[in,out] DD1
! 49: *> \verbatim
! 50: *> DD1 is DOUBLE PRECISION
! 51: *> \endverbatim
! 52: *>
! 53: *> \param[in,out] DD2
! 54: *> \verbatim
! 55: *> DD2 is DOUBLE PRECISION
! 56: *> \endverbatim
! 57: *>
! 58: *> \param[in,out] DX1
! 59: *> \verbatim
! 60: *> DX1 is DOUBLE PRECISION
! 61: *> \endverbatim
! 62: *>
! 63: *> \param[in] DY1
! 64: *> \verbatim
! 65: *> DY1 is DOUBLE PRECISION
! 66: *> \endverbatim
! 67: *>
! 68: *> \param[in,out] DPARAM
! 69: *> \verbatim
! 70: *> DPARAM is DOUBLE PRECISION array, dimension 5
! 71: *> DPARAM(1)=DFLAG
! 72: *> DPARAM(2)=DH11
! 73: *> DPARAM(3)=DH21
! 74: *> DPARAM(4)=DH12
! 75: *> DPARAM(5)=DH22
! 76: *> \endverbatim
! 77: *
! 78: * Authors:
! 79: * ========
! 80: *
! 81: *> \author Univ. of Tennessee
! 82: *> \author Univ. of California Berkeley
! 83: *> \author Univ. of Colorado Denver
! 84: *> \author NAG Ltd.
1.1 bertrand 85: *
1.9 ! bertrand 86: *> \date November 2011
1.1 bertrand 87: *
1.9 ! bertrand 88: *> \ingroup double_blas_level1
1.1 bertrand 89: *
1.9 ! bertrand 90: * =====================================================================
! 91: SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM)
1.1 bertrand 92: *
1.9 ! bertrand 93: * -- Reference BLAS level1 routine (version 3.4.0) --
! 94: * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
! 95: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
! 96: * November 2011
1.1 bertrand 97: *
1.9 ! bertrand 98: * .. Scalar Arguments ..
! 99: DOUBLE PRECISION DD1,DD2,DX1,DY1
! 100: * ..
! 101: * .. Array Arguments ..
! 102: DOUBLE PRECISION DPARAM(5)
! 103: * ..
1.1 bertrand 104: *
105: * =====================================================================
106: *
107: * .. Local Scalars ..
108: DOUBLE PRECISION DFLAG,DH11,DH12,DH21,DH22,DP1,DP2,DQ1,DQ2,DTEMP,
1.8 bertrand 109: $ DU,GAM,GAMSQ,ONE,RGAMSQ,TWO,ZERO
1.1 bertrand 110: * ..
111: * .. Intrinsic Functions ..
112: INTRINSIC DABS
113: * ..
114: * .. Data statements ..
115: *
116: DATA ZERO,ONE,TWO/0.D0,1.D0,2.D0/
117: DATA GAM,GAMSQ,RGAMSQ/4096.D0,16777216.D0,5.9604645D-8/
118: * ..
119:
1.8 bertrand 120: IF (DD1.LT.ZERO) THEN
121: * GO ZERO-H-D-AND-DX1..
122: DFLAG = -ONE
123: DH11 = ZERO
124: DH12 = ZERO
125: DH21 = ZERO
126: DH22 = ZERO
127: *
128: DD1 = ZERO
129: DD2 = ZERO
130: DX1 = ZERO
131: ELSE
132: * CASE-DD1-NONNEGATIVE
133: DP2 = DD2*DY1
134: IF (DP2.EQ.ZERO) THEN
135: DFLAG = -TWO
136: DPARAM(1) = DFLAG
137: RETURN
138: END IF
139: * REGULAR-CASE..
140: DP1 = DD1*DX1
141: DQ2 = DP2*DY1
142: DQ1 = DP1*DX1
143: *
144: IF (DABS(DQ1).GT.DABS(DQ2)) THEN
145: DH21 = -DY1/DX1
146: DH12 = DP2/DP1
147: *
148: DU = ONE - DH12*DH21
149: *
150: IF (DU.GT.ZERO) THEN
151: DFLAG = ZERO
152: DD1 = DD1/DU
153: DD2 = DD2/DU
154: DX1 = DX1*DU
155: END IF
156: ELSE
157:
158: IF (DQ2.LT.ZERO) THEN
159: * GO ZERO-H-D-AND-DX1..
160: DFLAG = -ONE
161: DH11 = ZERO
162: DH12 = ZERO
163: DH21 = ZERO
164: DH22 = ZERO
165: *
166: DD1 = ZERO
167: DD2 = ZERO
168: DX1 = ZERO
169: ELSE
170: DFLAG = ONE
171: DH11 = DP1/DP2
172: DH22 = DX1/DY1
173: DU = ONE + DH11*DH22
174: DTEMP = DD2/DU
175: DD2 = DD1/DU
176: DD1 = DTEMP
177: DX1 = DY1*DU
178: END IF
179: END IF
180:
1.1 bertrand 181: * PROCEDURE..SCALE-CHECK
1.8 bertrand 182: IF (DD1.NE.ZERO) THEN
183: DO WHILE ((DD1.LE.RGAMSQ) .OR. (DD1.GE.GAMSQ))
184: IF (DFLAG.EQ.ZERO) THEN
185: DH11 = ONE
186: DH22 = ONE
187: DFLAG = -ONE
188: ELSE
189: DH21 = -ONE
190: DH12 = ONE
191: DFLAG = -ONE
192: END IF
193: IF (DD1.LE.RGAMSQ) THEN
194: DD1 = DD1*GAM**2
195: DX1 = DX1/GAM
196: DH11 = DH11/GAM
197: DH12 = DH12/GAM
198: ELSE
199: DD1 = DD1/GAM**2
200: DX1 = DX1*GAM
201: DH11 = DH11*GAM
202: DH12 = DH12*GAM
203: END IF
204: ENDDO
205: END IF
206:
207: IF (DD2.NE.ZERO) THEN
208: DO WHILE ( (DABS(DD2).LE.RGAMSQ) .OR. (DABS(DD2).GE.GAMSQ) )
209: IF (DFLAG.EQ.ZERO) THEN
210: DH11 = ONE
211: DH22 = ONE
212: DFLAG = -ONE
213: ELSE
214: DH21 = -ONE
215: DH12 = ONE
216: DFLAG = -ONE
217: END IF
218: IF (DABS(DD2).LE.RGAMSQ) THEN
219: DD2 = DD2*GAM**2
220: DH21 = DH21/GAM
221: DH22 = DH22/GAM
222: ELSE
223: DD2 = DD2/GAM**2
224: DH21 = DH21*GAM
225: DH22 = DH22*GAM
226: END IF
227: END DO
228: END IF
229:
230: END IF
231:
1.4 bertrand 232: IF (DFLAG.LT.ZERO) THEN
1.8 bertrand 233: DPARAM(2) = DH11
234: DPARAM(3) = DH21
235: DPARAM(4) = DH12
236: DPARAM(5) = DH22
1.4 bertrand 237: ELSE IF (DFLAG.EQ.ZERO) THEN
1.8 bertrand 238: DPARAM(3) = DH21
239: DPARAM(4) = DH12
1.4 bertrand 240: ELSE
1.8 bertrand 241: DPARAM(2) = DH11
242: DPARAM(5) = DH22
1.4 bertrand 243: END IF
1.8 bertrand 244:
1.1 bertrand 245: DPARAM(1) = DFLAG
246: RETURN
247: END
1.8 bertrand 248:
249:
250:
251:
CVSweb interface <joel.bertrand@systella.fr>