Lots of trailing whitespaces in the files of Syd. Cleaning this. No big deal.
[platform/upstream/lapack.git] / SRC / dgesv.f
1 *> \brief <b> DGESV computes the solution to system of linear equations A * X = B for GE matrices</b>
2 *
3 *  =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 *            http://www.netlib.org/lapack/explore-html/
7 *
8 *> \htmlonly
9 *> Download DGESV + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgesv.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgesv.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 *  Definition:
19 *  ===========
20 *
21 *       SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
22 *
23 *       .. Scalar Arguments ..
24 *       INTEGER            INFO, LDA, LDB, N, NRHS
25 *       ..
26 *       .. Array Arguments ..
27 *       INTEGER            IPIV( * )
28 *       DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
29 *       ..
30 *
31 *
32 *> \par Purpose:
33 *  =============
34 *>
35 *> \verbatim
36 *>
37 *> DGESV computes the solution to a real system of linear equations
38 *>    A * X = B,
39 *> where A is an N-by-N matrix and X and B are N-by-NRHS matrices.
40 *>
41 *> The LU decomposition with partial pivoting and row interchanges is
42 *> used to factor A as
43 *>    A = P * L * U,
44 *> where P is a permutation matrix, L is unit lower triangular, and U is
45 *> upper triangular.  The factored form of A is then used to solve the
46 *> system of equations A * X = B.
47 *> \endverbatim
48 *
49 *  Arguments:
50 *  ==========
51 *
52 *> \param[in] N
53 *> \verbatim
54 *>          N is INTEGER
55 *>          The number of linear equations, i.e., the order of the
56 *>          matrix A.  N >= 0.
57 *> \endverbatim
58 *>
59 *> \param[in] NRHS
60 *> \verbatim
61 *>          NRHS is INTEGER
62 *>          The number of right hand sides, i.e., the number of columns
63 *>          of the matrix B.  NRHS >= 0.
64 *> \endverbatim
65 *>
66 *> \param[in,out] A
67 *> \verbatim
68 *>          A is DOUBLE PRECISION array, dimension (LDA,N)
69 *>          On entry, the N-by-N coefficient matrix A.
70 *>          On exit, the factors L and U from the factorization
71 *>          A = P*L*U; the unit diagonal elements of L are not stored.
72 *> \endverbatim
73 *>
74 *> \param[in] LDA
75 *> \verbatim
76 *>          LDA is INTEGER
77 *>          The leading dimension of the array A.  LDA >= max(1,N).
78 *> \endverbatim
79 *>
80 *> \param[out] IPIV
81 *> \verbatim
82 *>          IPIV is INTEGER array, dimension (N)
83 *>          The pivot indices that define the permutation matrix P;
84 *>          row i of the matrix was interchanged with row IPIV(i).
85 *> \endverbatim
86 *>
87 *> \param[in,out] B
88 *> \verbatim
89 *>          B is DOUBLE PRECISION array, dimension (LDB,NRHS)
90 *>          On entry, the N-by-NRHS matrix of right hand side matrix B.
91 *>          On exit, if INFO = 0, the N-by-NRHS solution matrix X.
92 *> \endverbatim
93 *>
94 *> \param[in] LDB
95 *> \verbatim
96 *>          LDB is INTEGER
97 *>          The leading dimension of the array B.  LDB >= max(1,N).
98 *> \endverbatim
99 *>
100 *> \param[out] INFO
101 *> \verbatim
102 *>          INFO is INTEGER
103 *>          = 0:  successful exit
104 *>          < 0:  if INFO = -i, the i-th argument had an illegal value
105 *>          > 0:  if INFO = i, U(i,i) is exactly zero.  The factorization
106 *>                has been completed, but the factor U is exactly
107 *>                singular, so the solution could not be computed.
108 *> \endverbatim
109 *
110 *  Authors:
111 *  ========
112 *
113 *> \author Univ. of Tennessee
114 *> \author Univ. of California Berkeley
115 *> \author Univ. of Colorado Denver
116 *> \author NAG Ltd.
117 *
118 *> \date November 2011
119 *
120 *> \ingroup doubleGEsolve
121 *
122 *  =====================================================================
123       SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
124 *
125 *  -- LAPACK driver routine (version 3.4.0) --
126 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
127 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
128 *     November 2011
129 *
130 *     .. Scalar Arguments ..
131       INTEGER            INFO, LDA, LDB, N, NRHS
132 *     ..
133 *     .. Array Arguments ..
134       INTEGER            IPIV( * )
135       DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
136 *     ..
137 *
138 *  =====================================================================
139 *
140 *     .. External Subroutines ..
141       EXTERNAL           DGETRF, DGETRS, XERBLA
142 *     ..
143 *     .. Intrinsic Functions ..
144       INTRINSIC          MAX
145 *     ..
146 *     .. Executable Statements ..
147 *
148 *     Test the input parameters.
149 *
150       INFO = 0
151       IF( N.LT.0 ) THEN
152          INFO = -1
153       ELSE IF( NRHS.LT.0 ) THEN
154          INFO = -2
155       ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
156          INFO = -4
157       ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
158          INFO = -7
159       END IF
160       IF( INFO.NE.0 ) THEN
161          CALL XERBLA( 'DGESV ', -INFO )
162          RETURN
163       END IF
164 *
165 *     Compute the LU factorization of A.
166 *
167       CALL DGETRF( N, N, A, LDA, IPIV, INFO )
168       IF( INFO.EQ.0 ) THEN
169 *
170 *        Solve the system A*X = B, overwriting B with X.
171 *
172          CALL DGETRS( 'No transpose', N, NRHS, A, LDA, IPIV, B, LDB,
173      $                INFO )
174       END IF
175       RETURN
176 *
177 *     End of DGESV
178 *
179       END