xref: /aosp_15_r20/external/eigen/lapack/iladlr.f (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li*> \brief \b ILADLR
2*bf2c3715SXin Li*
3*bf2c3715SXin Li*  =========== DOCUMENTATION ===========
4*bf2c3715SXin Li*
5*bf2c3715SXin Li* Online html documentation available at
6*bf2c3715SXin Li*            http://www.netlib.org/lapack/explore-html/
7*bf2c3715SXin Li*
8*bf2c3715SXin Li*> \htmlonly
9*bf2c3715SXin Li*> Download ILADLR + dependencies
10*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/iladlr.f">
11*bf2c3715SXin Li*> [TGZ]</a>
12*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/iladlr.f">
13*bf2c3715SXin Li*> [ZIP]</a>
14*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladlr.f">
15*bf2c3715SXin Li*> [TXT]</a>
16*bf2c3715SXin Li*> \endhtmlonly
17*bf2c3715SXin Li*
18*bf2c3715SXin Li*  Definition:
19*bf2c3715SXin Li*  ===========
20*bf2c3715SXin Li*
21*bf2c3715SXin Li*       INTEGER FUNCTION ILADLR( M, N, A, LDA )
22*bf2c3715SXin Li*
23*bf2c3715SXin Li*       .. Scalar Arguments ..
24*bf2c3715SXin Li*       INTEGER            M, N, LDA
25*bf2c3715SXin Li*       ..
26*bf2c3715SXin Li*       .. Array Arguments ..
27*bf2c3715SXin Li*       DOUBLE PRECISION   A( LDA, * )
28*bf2c3715SXin Li*       ..
29*bf2c3715SXin Li*
30*bf2c3715SXin Li*
31*bf2c3715SXin Li*> \par Purpose:
32*bf2c3715SXin Li*  =============
33*bf2c3715SXin Li*>
34*bf2c3715SXin Li*> \verbatim
35*bf2c3715SXin Li*>
36*bf2c3715SXin Li*> ILADLR scans A for its last non-zero row.
37*bf2c3715SXin Li*> \endverbatim
38*bf2c3715SXin Li*
39*bf2c3715SXin Li*  Arguments:
40*bf2c3715SXin Li*  ==========
41*bf2c3715SXin Li*
42*bf2c3715SXin Li*> \param[in] M
43*bf2c3715SXin Li*> \verbatim
44*bf2c3715SXin Li*>          M is INTEGER
45*bf2c3715SXin Li*>          The number of rows of the matrix A.
46*bf2c3715SXin Li*> \endverbatim
47*bf2c3715SXin Li*>
48*bf2c3715SXin Li*> \param[in] N
49*bf2c3715SXin Li*> \verbatim
50*bf2c3715SXin Li*>          N is INTEGER
51*bf2c3715SXin Li*>          The number of columns of the matrix A.
52*bf2c3715SXin Li*> \endverbatim
53*bf2c3715SXin Li*>
54*bf2c3715SXin Li*> \param[in] A
55*bf2c3715SXin Li*> \verbatim
56*bf2c3715SXin Li*>          A is DOUBLE PRECISION array, dimension (LDA,N)
57*bf2c3715SXin Li*>          The m by n matrix A.
58*bf2c3715SXin Li*> \endverbatim
59*bf2c3715SXin Li*>
60*bf2c3715SXin Li*> \param[in] LDA
61*bf2c3715SXin Li*> \verbatim
62*bf2c3715SXin Li*>          LDA is INTEGER
63*bf2c3715SXin Li*>          The leading dimension of the array A. LDA >= max(1,M).
64*bf2c3715SXin Li*> \endverbatim
65*bf2c3715SXin Li*
66*bf2c3715SXin Li*  Authors:
67*bf2c3715SXin Li*  ========
68*bf2c3715SXin Li*
69*bf2c3715SXin Li*> \author Univ. of Tennessee
70*bf2c3715SXin Li*> \author Univ. of California Berkeley
71*bf2c3715SXin Li*> \author Univ. of Colorado Denver
72*bf2c3715SXin Li*> \author NAG Ltd.
73*bf2c3715SXin Li*
74*bf2c3715SXin Li*> \date April 2012
75*bf2c3715SXin Li*
76*bf2c3715SXin Li*> \ingroup auxOTHERauxiliary
77*bf2c3715SXin Li*
78*bf2c3715SXin Li*  =====================================================================
79*bf2c3715SXin Li      INTEGER FUNCTION ILADLR( M, N, A, LDA )
80*bf2c3715SXin Li*
81*bf2c3715SXin Li*  -- LAPACK auxiliary routine (version 3.4.1) --
82*bf2c3715SXin Li*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
83*bf2c3715SXin Li*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
84*bf2c3715SXin Li*     April 2012
85*bf2c3715SXin Li*
86*bf2c3715SXin Li*     .. Scalar Arguments ..
87*bf2c3715SXin Li      INTEGER            M, N, LDA
88*bf2c3715SXin Li*     ..
89*bf2c3715SXin Li*     .. Array Arguments ..
90*bf2c3715SXin Li      DOUBLE PRECISION   A( LDA, * )
91*bf2c3715SXin Li*     ..
92*bf2c3715SXin Li*
93*bf2c3715SXin Li*  =====================================================================
94*bf2c3715SXin Li*
95*bf2c3715SXin Li*     .. Parameters ..
96*bf2c3715SXin Li      DOUBLE PRECISION ZERO
97*bf2c3715SXin Li      PARAMETER ( ZERO = 0.0D+0 )
98*bf2c3715SXin Li*     ..
99*bf2c3715SXin Li*     .. Local Scalars ..
100*bf2c3715SXin Li      INTEGER I, J
101*bf2c3715SXin Li*     ..
102*bf2c3715SXin Li*     .. Executable Statements ..
103*bf2c3715SXin Li*
104*bf2c3715SXin Li*     Quick test for the common case where one corner is non-zero.
105*bf2c3715SXin Li      IF( M.EQ.0 ) THEN
106*bf2c3715SXin Li         ILADLR = M
107*bf2c3715SXin Li      ELSE IF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN
108*bf2c3715SXin Li         ILADLR = M
109*bf2c3715SXin Li      ELSE
110*bf2c3715SXin Li*     Scan up each column tracking the last zero row seen.
111*bf2c3715SXin Li         ILADLR = 0
112*bf2c3715SXin Li         DO J = 1, N
113*bf2c3715SXin Li            I=M
114*bf2c3715SXin Li            DO WHILE((A(MAX(I,1),J).EQ.ZERO).AND.(I.GE.1))
115*bf2c3715SXin Li               I=I-1
116*bf2c3715SXin Li            ENDDO
117*bf2c3715SXin Li            ILADLR = MAX( ILADLR, I )
118*bf2c3715SXin Li         END DO
119*bf2c3715SXin Li      END IF
120*bf2c3715SXin Li      RETURN
121*bf2c3715SXin Li      END
122