--- rpl/lapack/blas/drotmg.f 2011/07/22 07:38:01 1.8 +++ rpl/lapack/blas/drotmg.f 2018/05/29 07:19:41 1.16 @@ -1,50 +1,106 @@ - SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM) -* .. Scalar Arguments .. - DOUBLE PRECISION DD1,DD2,DX1,DY1 -* .. -* .. Array Arguments .. - DOUBLE PRECISION DPARAM(5) -* .. +*> \brief \b DROTMG * -* Purpose -* ======= +* =========== DOCUMENTATION =========== * -* CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS -* THE SECOND COMPONENT OF THE 2-VECTOR (DSQRT(DD1)*DX1,DSQRT(DD2)* -* DY2)**T. -* WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ * -* DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0 +* Definition: +* =========== +* +* SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DD1,DD2,DX1,DY1 +* .. +* .. Array Arguments .. +* DOUBLE PRECISION DPARAM(5) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS +*> THE SECOND COMPONENT OF THE 2-VECTOR (DSQRT(DD1)*DX1,DSQRT(DD2)*> DY2)**T. +*> WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. +*> +*> DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0 +*> +*> (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0) +*> H=( ) ( ) ( ) ( ) +*> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0). +*> LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22 +*> RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE +*> VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.) +*> +*> THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE +*> INEXACT. THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE +*> OF DD1 AND DD2. ALL ACTUAL SCALING OF DATA IS DONE USING GAM. +*> +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in,out] DD1 +*> \verbatim +*> DD1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] DD2 +*> \verbatim +*> DD2 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] DX1 +*> \verbatim +*> DX1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] DY1 +*> \verbatim +*> DY1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[out] DPARAM +*> \verbatim +*> DPARAM is DOUBLE PRECISION array, dimension (5) +*> DPARAM(1)=DFLAG +*> DPARAM(2)=DH11 +*> DPARAM(3)=DH21 +*> DPARAM(4)=DH12 +*> DPARAM(5)=DH22 +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. * -* (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0) -* H=( ) ( ) ( ) ( ) -* (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0). -* LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22 -* RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE -* VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.) +*> \date November 2017 * -* THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE -* INEXACT. THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE -* OF DD1 AND DD2. ALL ACTUAL SCALING OF DATA IS DONE USING GAM. +*> \ingroup double_blas_level1 * +* ===================================================================== + SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM) * -* Arguments -* ========= -* -* DD1 (input/output) DOUBLE PRECISION -* -* DD2 (input/output) DOUBLE PRECISION -* -* DX1 (input/output) DOUBLE PRECISION -* -* DY1 (input) DOUBLE PRECISION +* -- Reference BLAS level1 routine (version 3.8.0) -- +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2017 * -* DPARAM (input/output) DOUBLE PRECISION array, dimension 5 -* DPARAM(1)=DFLAG -* DPARAM(2)=DH11 -* DPARAM(3)=DH21 -* DPARAM(4)=DH12 -* DPARAM(5)=DH22 +* .. Scalar Arguments .. + DOUBLE PRECISION DD1,DD2,DX1,DY1 +* .. +* .. Array Arguments .. + DOUBLE PRECISION DPARAM(5) +* .. * * ===================================================================== * @@ -79,7 +135,7 @@ DFLAG = -TWO DPARAM(1) = DFLAG RETURN - END IF + END IF * REGULAR-CASE.. DP1 = DD1*DX1 DQ2 = DP2*DY1 @@ -147,7 +203,7 @@ END IF ENDDO END IF - + IF (DD2.NE.ZERO) THEN DO WHILE ( (DABS(DD2).LE.RGAMSQ) .OR. (DABS(DD2).GE.GAMSQ) ) IF (DFLAG.EQ.ZERO) THEN @@ -167,10 +223,10 @@ DD2 = DD2/GAM**2 DH21 = DH21*GAM DH22 = DH22*GAM - END IF + END IF END DO END IF - + END IF IF (DFLAG.LT.ZERO) THEN @@ -180,17 +236,16 @@ DPARAM(5) = DH22 ELSE IF (DFLAG.EQ.ZERO) THEN DPARAM(3) = DH21 - DPARAM(4) = DH12 + DPARAM(4) = DH12 ELSE DPARAM(2) = DH11 DPARAM(5) = DH22 END IF - 260 CONTINUE DPARAM(1) = DFLAG RETURN END - - - - + + + +