removed lapack-3.5.0
This commit is contained in:
@@ -1,322 +0,0 @@
|
||||
*> \brief \b IPARMQ
|
||||
*
|
||||
* =========== DOCUMENTATION ===========
|
||||
*
|
||||
* Online html documentation available at
|
||||
* http://www.netlib.org/lapack/explore-html/
|
||||
*
|
||||
*> \htmlonly
|
||||
*> Download IPARMQ + dependencies
|
||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/iparmq.f">
|
||||
*> [TGZ]</a>
|
||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/iparmq.f">
|
||||
*> [ZIP]</a>
|
||||
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iparmq.f">
|
||||
*> [TXT]</a>
|
||||
*> \endhtmlonly
|
||||
*
|
||||
* Definition:
|
||||
* ===========
|
||||
*
|
||||
* INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK )
|
||||
*
|
||||
* .. Scalar Arguments ..
|
||||
* INTEGER IHI, ILO, ISPEC, LWORK, N
|
||||
* CHARACTER NAME*( * ), OPTS*( * )
|
||||
*
|
||||
*
|
||||
*> \par Purpose:
|
||||
* =============
|
||||
*>
|
||||
*> \verbatim
|
||||
*>
|
||||
*> This program sets problem and machine dependent parameters
|
||||
*> useful for xHSEQR and its subroutines. It is called whenever
|
||||
*> ILAENV is called with 12 <= ISPEC <= 16
|
||||
*> \endverbatim
|
||||
*
|
||||
* Arguments:
|
||||
* ==========
|
||||
*
|
||||
*> \param[in] ISPEC
|
||||
*> \verbatim
|
||||
*> ISPEC is integer scalar
|
||||
*> ISPEC specifies which tunable parameter IPARMQ should
|
||||
*> return.
|
||||
*>
|
||||
*> ISPEC=12: (INMIN) Matrices of order nmin or less
|
||||
*> are sent directly to xLAHQR, the implicit
|
||||
*> double shift QR algorithm. NMIN must be
|
||||
*> at least 11.
|
||||
*>
|
||||
*> ISPEC=13: (INWIN) Size of the deflation window.
|
||||
*> This is best set greater than or equal to
|
||||
*> the number of simultaneous shifts NS.
|
||||
*> Larger matrices benefit from larger deflation
|
||||
*> windows.
|
||||
*>
|
||||
*> ISPEC=14: (INIBL) Determines when to stop nibbling and
|
||||
*> invest in an (expensive) multi-shift QR sweep.
|
||||
*> If the aggressive early deflation subroutine
|
||||
*> finds LD converged eigenvalues from an order
|
||||
*> NW deflation window and LD.GT.(NW*NIBBLE)/100,
|
||||
*> then the next QR sweep is skipped and early
|
||||
*> deflation is applied immediately to the
|
||||
*> remaining active diagonal block. Setting
|
||||
*> IPARMQ(ISPEC=14) = 0 causes TTQRE to skip a
|
||||
*> multi-shift QR sweep whenever early deflation
|
||||
*> finds a converged eigenvalue. Setting
|
||||
*> IPARMQ(ISPEC=14) greater than or equal to 100
|
||||
*> prevents TTQRE from skipping a multi-shift
|
||||
*> QR sweep.
|
||||
*>
|
||||
*> ISPEC=15: (NSHFTS) The number of simultaneous shifts in
|
||||
*> a multi-shift QR iteration.
|
||||
*>
|
||||
*> ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the
|
||||
*> following meanings.
|
||||
*> 0: During the multi-shift QR sweep,
|
||||
*> xLAQR5 does not accumulate reflections and
|
||||
*> does not use matrix-matrix multiply to
|
||||
*> update the far-from-diagonal matrix
|
||||
*> entries.
|
||||
*> 1: During the multi-shift QR sweep,
|
||||
*> xLAQR5 and/or xLAQRaccumulates reflections and uses
|
||||
*> matrix-matrix multiply to update the
|
||||
*> far-from-diagonal matrix entries.
|
||||
*> 2: During the multi-shift QR sweep.
|
||||
*> xLAQR5 accumulates reflections and takes
|
||||
*> advantage of 2-by-2 block structure during
|
||||
*> matrix-matrix multiplies.
|
||||
*> (If xTRMM is slower than xGEMM, then
|
||||
*> IPARMQ(ISPEC=16)=1 may be more efficient than
|
||||
*> IPARMQ(ISPEC=16)=2 despite the greater level of
|
||||
*> arithmetic work implied by the latter choice.)
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] NAME
|
||||
*> \verbatim
|
||||
*> NAME is character string
|
||||
*> Name of the calling subroutine
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] OPTS
|
||||
*> \verbatim
|
||||
*> OPTS is character string
|
||||
*> This is a concatenation of the string arguments to
|
||||
*> TTQRE.
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] N
|
||||
*> \verbatim
|
||||
*> N is integer scalar
|
||||
*> N is the order of the Hessenberg matrix H.
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] ILO
|
||||
*> \verbatim
|
||||
*> ILO is INTEGER
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] IHI
|
||||
*> \verbatim
|
||||
*> IHI is INTEGER
|
||||
*> It is assumed that H is already upper triangular
|
||||
*> in rows and columns 1:ILO-1 and IHI+1:N.
|
||||
*> \endverbatim
|
||||
*>
|
||||
*> \param[in] LWORK
|
||||
*> \verbatim
|
||||
*> LWORK is integer scalar
|
||||
*> The amount of workspace available.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
* ========
|
||||
*
|
||||
*> \author Univ. of Tennessee
|
||||
*> \author Univ. of California Berkeley
|
||||
*> \author Univ. of Colorado Denver
|
||||
*> \author NAG Ltd.
|
||||
*
|
||||
*> \date November 2011
|
||||
*
|
||||
*> \ingroup auxOTHERauxiliary
|
||||
*
|
||||
*> \par Further Details:
|
||||
* =====================
|
||||
*>
|
||||
*> \verbatim
|
||||
*>
|
||||
*> Little is known about how best to choose these parameters.
|
||||
*> It is possible to use different values of the parameters
|
||||
*> for each of CHSEQR, DHSEQR, SHSEQR and ZHSEQR.
|
||||
*>
|
||||
*> It is probably best to choose different parameters for
|
||||
*> different matrices and different parameters at different
|
||||
*> times during the iteration, but this has not been
|
||||
*> implemented --- yet.
|
||||
*>
|
||||
*>
|
||||
*> The best choices of most of the parameters depend
|
||||
*> in an ill-understood way on the relative execution
|
||||
*> rate of xLAQR3 and xLAQR5 and on the nature of each
|
||||
*> particular eigenvalue problem. Experiment may be the
|
||||
*> only practical way to determine which choices are most
|
||||
*> effective.
|
||||
*>
|
||||
*> Following is a list of default values supplied by IPARMQ.
|
||||
*> These defaults may be adjusted in order to attain better
|
||||
*> performance in any particular computational environment.
|
||||
*>
|
||||
*> IPARMQ(ISPEC=12) The xLAHQR vs xLAQR0 crossover point.
|
||||
*> Default: 75. (Must be at least 11.)
|
||||
*>
|
||||
*> IPARMQ(ISPEC=13) Recommended deflation window size.
|
||||
*> This depends on ILO, IHI and NS, the
|
||||
*> number of simultaneous shifts returned
|
||||
*> by IPARMQ(ISPEC=15). The default for
|
||||
*> (IHI-ILO+1).LE.500 is NS. The default
|
||||
*> for (IHI-ILO+1).GT.500 is 3*NS/2.
|
||||
*>
|
||||
*> IPARMQ(ISPEC=14) Nibble crossover point. Default: 14.
|
||||
*>
|
||||
*> IPARMQ(ISPEC=15) Number of simultaneous shifts, NS.
|
||||
*> a multi-shift QR iteration.
|
||||
*>
|
||||
*> If IHI-ILO+1 is ...
|
||||
*>
|
||||
*> greater than ...but less ... the
|
||||
*> or equal to ... than default is
|
||||
*>
|
||||
*> 0 30 NS = 2+
|
||||
*> 30 60 NS = 4+
|
||||
*> 60 150 NS = 10
|
||||
*> 150 590 NS = **
|
||||
*> 590 3000 NS = 64
|
||||
*> 3000 6000 NS = 128
|
||||
*> 6000 infinity NS = 256
|
||||
*>
|
||||
*> (+) By default matrices of this order are
|
||||
*> passed to the implicit double shift routine
|
||||
*> xLAHQR. See IPARMQ(ISPEC=12) above. These
|
||||
*> values of NS are used only in case of a rare
|
||||
*> xLAHQR failure.
|
||||
*>
|
||||
*> (**) The asterisks (**) indicate an ad-hoc
|
||||
*> function increasing from 10 to 64.
|
||||
*>
|
||||
*> IPARMQ(ISPEC=16) Select structured matrix multiply.
|
||||
*> (See ISPEC=16 above for details.)
|
||||
*> Default: 3.
|
||||
*> \endverbatim
|
||||
*>
|
||||
* =====================================================================
|
||||
INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK )
|
||||
*
|
||||
* -- LAPACK auxiliary routine (version 3.4.0) --
|
||||
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
||||
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
||||
* November 2011
|
||||
*
|
||||
* .. Scalar Arguments ..
|
||||
INTEGER IHI, ILO, ISPEC, LWORK, N
|
||||
CHARACTER NAME*( * ), OPTS*( * )
|
||||
*
|
||||
* ================================================================
|
||||
* .. Parameters ..
|
||||
INTEGER INMIN, INWIN, INIBL, ISHFTS, IACC22
|
||||
PARAMETER ( INMIN = 12, INWIN = 13, INIBL = 14,
|
||||
$ ISHFTS = 15, IACC22 = 16 )
|
||||
INTEGER NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP
|
||||
PARAMETER ( NMIN = 75, K22MIN = 14, KACMIN = 14,
|
||||
$ NIBBLE = 14, KNWSWP = 500 )
|
||||
REAL TWO
|
||||
PARAMETER ( TWO = 2.0 )
|
||||
* ..
|
||||
* .. Local Scalars ..
|
||||
INTEGER NH, NS
|
||||
* ..
|
||||
* .. Intrinsic Functions ..
|
||||
INTRINSIC LOG, MAX, MOD, NINT, REAL
|
||||
* ..
|
||||
* .. Executable Statements ..
|
||||
IF( ( ISPEC.EQ.ISHFTS ) .OR. ( ISPEC.EQ.INWIN ) .OR.
|
||||
$ ( ISPEC.EQ.IACC22 ) ) THEN
|
||||
*
|
||||
* ==== Set the number simultaneous shifts ====
|
||||
*
|
||||
NH = IHI - ILO + 1
|
||||
NS = 2
|
||||
IF( NH.GE.30 )
|
||||
$ NS = 4
|
||||
IF( NH.GE.60 )
|
||||
$ NS = 10
|
||||
IF( NH.GE.150 )
|
||||
$ NS = MAX( 10, NH / NINT( LOG( REAL( NH ) ) / LOG( TWO ) ) )
|
||||
IF( NH.GE.590 )
|
||||
$ NS = 64
|
||||
IF( NH.GE.3000 )
|
||||
$ NS = 128
|
||||
IF( NH.GE.6000 )
|
||||
$ NS = 256
|
||||
NS = MAX( 2, NS-MOD( NS, 2 ) )
|
||||
END IF
|
||||
*
|
||||
IF( ISPEC.EQ.INMIN ) THEN
|
||||
*
|
||||
*
|
||||
* ===== Matrices of order smaller than NMIN get sent
|
||||
* . to xLAHQR, the classic double shift algorithm.
|
||||
* . This must be at least 11. ====
|
||||
*
|
||||
IPARMQ = NMIN
|
||||
*
|
||||
ELSE IF( ISPEC.EQ.INIBL ) THEN
|
||||
*
|
||||
* ==== INIBL: skip a multi-shift qr iteration and
|
||||
* . whenever aggressive early deflation finds
|
||||
* . at least (NIBBLE*(window size)/100) deflations. ====
|
||||
*
|
||||
IPARMQ = NIBBLE
|
||||
*
|
||||
ELSE IF( ISPEC.EQ.ISHFTS ) THEN
|
||||
*
|
||||
* ==== NSHFTS: The number of simultaneous shifts =====
|
||||
*
|
||||
IPARMQ = NS
|
||||
*
|
||||
ELSE IF( ISPEC.EQ.INWIN ) THEN
|
||||
*
|
||||
* ==== NW: deflation window size. ====
|
||||
*
|
||||
IF( NH.LE.KNWSWP ) THEN
|
||||
IPARMQ = NS
|
||||
ELSE
|
||||
IPARMQ = 3*NS / 2
|
||||
END IF
|
||||
*
|
||||
ELSE IF( ISPEC.EQ.IACC22 ) THEN
|
||||
*
|
||||
* ==== IACC22: Whether to accumulate reflections
|
||||
* . before updating the far-from-diagonal elements
|
||||
* . and whether to use 2-by-2 block structure while
|
||||
* . doing it. A small amount of work could be saved
|
||||
* . by making this choice dependent also upon the
|
||||
* . NH=IHI-ILO+1.
|
||||
*
|
||||
IPARMQ = 0
|
||||
IF( NS.GE.KACMIN )
|
||||
$ IPARMQ = 1
|
||||
IF( NS.GE.K22MIN )
|
||||
$ IPARMQ = 2
|
||||
*
|
||||
ELSE
|
||||
* ===== invalid value of ispec =====
|
||||
IPARMQ = -1
|
||||
*
|
||||
END IF
|
||||
*
|
||||
* ==== End of IPARMQ ====
|
||||
*
|
||||
END
|
||||
Reference in New Issue
Block a user