|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- *> \brief \b DLARMM
- *
- * Definition:
- * ===========
- *
- * DOUBLE PRECISION FUNCTION DLARMM( ANORM, BNORM, CNORM )
- *
- * .. Scalar Arguments ..
- * DOUBLE PRECISION ANORM, BNORM, CNORM
- * ..
- *
- *> \par Purpose:
- * =======
- *>
- *> \verbatim
- *>
- *> DLARMM returns a factor s in (0, 1] such that the linear updates
- *>
- *> (s * C) - A * (s * B) and (s * C) - (s * A) * B
- *>
- *> cannot overflow, where A, B, and C are matrices of conforming
- *> dimensions.
- *>
- *> This is an auxiliary routine so there is no argument checking.
- *> \endverbatim
- *
- * Arguments:
- * =========
- *
- *> \param[in] ANORM
- *> \verbatim
- *> ANORM is DOUBLE PRECISION
- *> The infinity norm of A. ANORM >= 0.
- *> The number of rows of the matrix A. M >= 0.
- *> \endverbatim
- *>
- *> \param[in] BNORM
- *> \verbatim
- *> BNORM is DOUBLE PRECISION
- *> The infinity norm of B. BNORM >= 0.
- *> \endverbatim
- *>
- *> \param[in] CNORM
- *> \verbatim
- *> CNORM is DOUBLE PRECISION
- *> The infinity norm of C. CNORM >= 0.
- *> \endverbatim
- *>
- *>
- * =====================================================================
- *> References:
- *> C. C. Kjelgaard Mikkelsen and L. Karlsson, Blocked Algorithms for
- *> Robust Solution of Triangular Linear Systems. In: International
- *> Conference on Parallel Processing and Applied Mathematics, pages
- *> 68--78. Springer, 2017.
- *>
- *> \ingroup OTHERauxiliary
- * =====================================================================
-
- DOUBLE PRECISION FUNCTION DLARMM( ANORM, BNORM, CNORM )
- IMPLICIT NONE
- * .. Scalar Arguments ..
- DOUBLE PRECISION ANORM, BNORM, CNORM
- * .. Parameters ..
- DOUBLE PRECISION ONE, HALF, FOUR
- PARAMETER ( ONE = 1.0D0, HALF = 0.5D+0, FOUR = 4.0D0 )
- * ..
- * .. Local Scalars ..
- DOUBLE PRECISION BIGNUM, SMLNUM
- * ..
- * .. External Functions ..
- DOUBLE PRECISION DLAMCH
- EXTERNAL DLAMCH
- * ..
- * .. Executable Statements ..
- *
- *
- * Determine machine dependent parameters to control overflow.
- *
- SMLNUM = DLAMCH( 'Safe minimum' ) / DLAMCH( 'Precision' )
- BIGNUM = ( ONE / SMLNUM ) / FOUR
- *
- * Compute a scale factor.
- *
- DLARMM = ONE
- IF( BNORM .LE. ONE ) THEN
- IF( ANORM * BNORM .GT. BIGNUM - CNORM ) THEN
- DLARMM = HALF
- END IF
- ELSE
- IF( ANORM .GT. (BIGNUM - CNORM) / BNORM ) THEN
- DLARMM = HALF / BNORM
- END IF
- END IF
- RETURN
- *
- * ==== End of DLARMM ====
- *
- END
|