![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b DROTG 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 * Definition: 00009 * =========== 00010 * 00011 * SUBROUTINE DROTG(DA,DB,C,S) 00012 * 00013 * .. Scalar Arguments .. 00014 * DOUBLE PRECISION C,DA,DB,S 00015 * .. 00016 * 00017 * 00018 *> \par Purpose: 00019 * ============= 00020 *> 00021 *> \verbatim 00022 *> 00023 *> DROTG construct givens plane rotation. 00024 *> \endverbatim 00025 * 00026 * Authors: 00027 * ======== 00028 * 00029 *> \author Univ. of Tennessee 00030 *> \author Univ. of California Berkeley 00031 *> \author Univ. of Colorado Denver 00032 *> \author NAG Ltd. 00033 * 00034 *> \date November 2011 00035 * 00036 *> \ingroup double_blas_level1 00037 * 00038 *> \par Further Details: 00039 * ===================== 00040 *> 00041 *> \verbatim 00042 *> 00043 *> jack dongarra, linpack, 3/11/78. 00044 *> \endverbatim 00045 *> 00046 * ===================================================================== 00047 SUBROUTINE DROTG(DA,DB,C,S) 00048 * 00049 * -- Reference BLAS level1 routine (version 3.4.0) -- 00050 * -- Reference BLAS is a software package provided by Univ. of Tennessee, -- 00051 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00052 * November 2011 00053 * 00054 * .. Scalar Arguments .. 00055 DOUBLE PRECISION C,DA,DB,S 00056 * .. 00057 * 00058 * ===================================================================== 00059 * 00060 * .. Local Scalars .. 00061 DOUBLE PRECISION R,ROE,SCALE,Z 00062 * .. 00063 * .. Intrinsic Functions .. 00064 INTRINSIC DABS,DSIGN,DSQRT 00065 * .. 00066 ROE = DB 00067 IF (DABS(DA).GT.DABS(DB)) ROE = DA 00068 SCALE = DABS(DA) + DABS(DB) 00069 IF (SCALE.EQ.0.0d0) THEN 00070 C = 1.0d0 00071 S = 0.0d0 00072 R = 0.0d0 00073 Z = 0.0d0 00074 ELSE 00075 R = SCALE*DSQRT((DA/SCALE)**2+ (DB/SCALE)**2) 00076 R = DSIGN(1.0d0,ROE)*R 00077 C = DA/R 00078 S = DB/R 00079 Z = 1.0d0 00080 IF (DABS(DA).GT.DABS(DB)) Z = S 00081 IF (DABS(DB).GE.DABS(DA) .AND. C.NE.0.0d0) Z = 1.0d0/C 00082 END IF 00083 DA = R 00084 DB = Z 00085 RETURN 00086 END