Add a BLAS3-based triangular Sylvester equation solver (Reference-LAPACK PR 651)
This commit is contained in:
99
lapack-netlib/SRC/slarmm.f
Normal file
99
lapack-netlib/SRC/slarmm.f
Normal file
@@ -0,0 +1,99 @@
|
||||
*> \brief \b SLARMM
|
||||
*
|
||||
* Definition:
|
||||
* ===========
|
||||
*
|
||||
* REAL FUNCTION SLARMM( ANORM, BNORM, CNORM )
|
||||
*
|
||||
* .. Scalar Arguments ..
|
||||
* REAL ANORM, BNORM, CNORM
|
||||
* ..
|
||||
*
|
||||
*> \par Purpose:
|
||||
* =======
|
||||
*>
|
||||
*> \verbatim
|
||||
*>
|
||||
*> SLARMM 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 REAL
|
||||
*> The infinity norm of A. ANORM >= 0.
|
||||
*> The number of rows of the matrix A. M >= 0.
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] BNORM
|
||||
*> \verbatim
|
||||
*> BNORM is REAL
|
||||
*> The infinity norm of B. BNORM >= 0.
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] CNORM
|
||||
*> \verbatim
|
||||
*> CNORM is REAL
|
||||
*> 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
|
||||
* =====================================================================
|
||||
|
||||
REAL FUNCTION SLARMM( ANORM, BNORM, CNORM )
|
||||
IMPLICIT NONE
|
||||
* .. Scalar Arguments ..
|
||||
REAL ANORM, BNORM, CNORM
|
||||
* .. Parameters ..
|
||||
REAL ONE, HALF, FOUR
|
||||
PARAMETER ( ONE = 1.0E0, HALF = 0.5E+0, FOUR = 4.0E+0 )
|
||||
* ..
|
||||
* .. Local Scalars ..
|
||||
REAL BIGNUM, SMLNUM
|
||||
* ..
|
||||
* .. External Functions ..
|
||||
REAL SLAMCH
|
||||
EXTERNAL SLAMCH
|
||||
* ..
|
||||
* .. Executable Statements ..
|
||||
*
|
||||
*
|
||||
* Determine machine dependent parameters to control overflow.
|
||||
*
|
||||
SMLNUM = SLAMCH( 'Safe minimum' ) / SLAMCH( 'Precision' )
|
||||
BIGNUM = ( ONE / SMLNUM ) / FOUR
|
||||
*
|
||||
* Compute a scale factor.
|
||||
*
|
||||
SLARMM = ONE
|
||||
IF( BNORM .LE. ONE ) THEN
|
||||
IF( ANORM * BNORM .GT. BIGNUM - CNORM ) THEN
|
||||
SLARMM = HALF
|
||||
END IF
|
||||
ELSE
|
||||
IF( ANORM .GT. (BIGNUM - CNORM) / BNORM ) THEN
|
||||
SLARMM = HALF / BNORM
|
||||
END IF
|
||||
END IF
|
||||
RETURN
|
||||
*
|
||||
* ==== End of SLARMM ====
|
||||
*
|
||||
END
|
||||
Reference in New Issue
Block a user