--- rpl/lapack/blas/drotg.f 2010/08/07 13:22:08 1.4 +++ rpl/lapack/blas/drotg.f 2014/01/27 09:28:12 1.11 @@ -1,17 +1,59 @@ - SUBROUTINE DROTG(DA,DB,C,S) -* .. Scalar Arguments .. - DOUBLE PRECISION C,DA,DB,S -* .. +*> \brief \b DROTG +* +* =========== DOCUMENTATION =========== * -* Purpose -* ======= +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ * -* DROTG construct givens plane rotation. +* Definition: +* =========== +* +* SUBROUTINE DROTG(DA,DB,C,S) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION C,DA,DB,S +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DROTG construct givens plane rotation. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup double_blas_level1 +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> jack dongarra, linpack, 3/11/78. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DROTG(DA,DB,C,S) * -* Further Details -* =============== +* -- Reference BLAS level1 routine (version 3.4.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 * -* jack dongarra, linpack, 3/11/78. +* .. Scalar Arguments .. + DOUBLE PRECISION C,DA,DB,S +* .. * * ===================================================================== * @@ -24,20 +66,21 @@ ROE = DB IF (DABS(DA).GT.DABS(DB)) ROE = DA SCALE = DABS(DA) + DABS(DB) - IF (SCALE.NE.0.0d0) GO TO 10 - C = 1.0d0 - S = 0.0d0 - R = 0.0d0 - Z = 0.0d0 - GO TO 20 - 10 R = SCALE*DSQRT((DA/SCALE)**2+ (DB/SCALE)**2) - R = DSIGN(1.0d0,ROE)*R - C = DA/R - S = DB/R - Z = 1.0d0 - IF (DABS(DA).GT.DABS(DB)) Z = S - IF (DABS(DB).GE.DABS(DA) .AND. C.NE.0.0d0) Z = 1.0d0/C - 20 DA = R + IF (SCALE.EQ.0.0d0) THEN + C = 1.0d0 + S = 0.0d0 + R = 0.0d0 + Z = 0.0d0 + ELSE + R = SCALE*DSQRT((DA/SCALE)**2+ (DB/SCALE)**2) + R = DSIGN(1.0d0,ROE)*R + C = DA/R + S = DB/R + Z = 1.0d0 + IF (DABS(DA).GT.DABS(DB)) Z = S + IF (DABS(DB).GE.DABS(DA) .AND. C.NE.0.0d0) Z = 1.0d0/C + END IF + DA = R DB = Z RETURN END