xref: /OpenGrok/opengrok-indexer/src/test/resources/analysis/fortran/sample.f (revision eeb7e5b33d1bcc524fcc9d1d560447b044e286a4)
1* Copyright (c) 2013 Samuel Halliday
2* Copyright (c) 1992-2011 The University of Tennessee and The University
3*                         of Tennessee Research Foundation.  All rights
4*                         reserved.
5* Copyright (c) 2000-2011 The University of California Berkeley. All
6*                         rights reserved.
7* Copyright (c) 2006-2011 The University of Colorado Denver.  All rights
8*                         reserved.
9*
10* $COPYRIGHT$
11*
12* Additional copyrights may follow
13*
14* $HEADER$
15*
16* Redistribution and use in source and binary forms, with or without
17* modification, are permitted provided that the following conditions are
18* met:
19*
20* - Redistributions of source code must retain the above copyright
21*   notice, this list of conditions and the following disclaimer.
22*
23* - Redistributions in binary form must reproduce the above copyright
24*   notice, this list of conditions and the following disclaimer listed
25*   in this license in the documentation and/or other materials
26*   provided with the distribution.
27*
28* - Neither the name of the copyright holders nor the names of its
29*   contributors may be used to endorse or promote products derived from
30*   this software without specific prior written permission.
31*
32* The copyright holders provide no reassurances that the source code
33* provided does not infringe any patent, copyright, or any other
34* intellectual property rights of third parties.  The copyright holders
35* disclaim any liability to any recipient for claims brought against
36* recipient by any third party for infringement of that parties
37* intellectual property rights.
38*
39* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
40* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
41* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
42* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
43* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
46* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
47* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
48* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50
51*> \brief <b> DGESV computes the solution to system of linear equations A * X = B for GE matrices</b>
52*
53*  =========== DOCUMENTATION ===========
54*
55* Online html documentation available at
56*            http://www.netlib.org/lapack/explore-html/
57*
58*> \htmlonly
59*> Download DGESV + dependencies
60*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgesv.f">
61*> [TGZ]</a>
62*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgesv.f">
63*> [ZIP]</a>
64*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f">
65*> [TXT]</a>
66*> \endhtmlonly
67*
68*  Definition:
69*  ===========
70*
71*       SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
72*
73*       .. Scalar Arguments ..
74*       INTEGER            INFO, LDA, LDB, N, NRHS
75*       ..
76*       .. Array Arguments ..
77*       INTEGER            IPIV( * )
78*       DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
79*       ..
80*
81*
82*> \par Purpose:
83*  =============
84*>
85*> \verbatim
86*>
87*> DGESV computes the solution to a real system of linear equations
88*>    A * X = B,
89*> where A is an N-by-N matrix and X and B are N-by-NRHS matrices.
90*>
91*> The LU decomposition with partial pivoting and row interchanges is
92*> used to factor A as
93*>    A = P * L * U,
94*> where P is a permutation matrix, L is unit lower triangular, and U is
95*> upper triangular.  The factored form of A is then used to solve the
96*> system of equations A * X = B.
97*> \endverbatim
98*
99*  Arguments:
100*  ==========
101*
102*> \param[in] N
103*> \verbatim
104*>          N is INTEGER
105*>          The number of linear equations, i.e., the order of the
106*>          matrix A.  N >= 0.
107*> \endverbatim
108*>
109*> \param[in] NRHS
110*> \verbatim
111*>          NRHS is INTEGER
112*>          The number of right hand sides, i.e., the number of columns
113*>          of the matrix B.  NRHS >= 0.
114*> \endverbatim
115*>
116*> \param[in,out] A
117*> \verbatim
118*>          A is DOUBLE PRECISION array, dimension (LDA,N)
119*>          On entry, the N-by-N coefficient matrix A.
120*>          On exit, the factors L and U from the factorization
121*>          A = P*L*U; the unit diagonal elements of L are not stored.
122*> \endverbatim
123*>
124*> \param[in] LDA
125*> \verbatim
126*>          LDA is INTEGER
127*>          The leading dimension of the array A.  LDA >= max(1,N).
128*> \endverbatim
129*>
130*> \param[out] IPIV
131*> \verbatim
132*>          IPIV is INTEGER array, dimension (N)
133*>          The pivot indices that define the permutation matrix P;
134*>          row i of the matrix was interchanged with row IPIV(i).
135*> \endverbatim
136*>
137*> \param[in,out] B
138*> \verbatim
139*>          B is DOUBLE PRECISION array, dimension (LDB,NRHS)
140*>          On entry, the N-by-NRHS matrix of right hand side matrix B.
141*>          On exit, if INFO = 0, the N-by-NRHS solution matrix X.
142*> \endverbatim
143*>
144*> \param[in] LDB
145*> \verbatim
146*>          LDB is INTEGER
147*>          The leading dimension of the array B.  LDB >= max(1,N).
148*> \endverbatim
149*>
150*> \param[out] INFO
151*> \verbatim
152*>          INFO is INTEGER
153*>          = 0:  successful exit
154*>          < 0:  if INFO = -i, the i-th argument had an illegal value
155*>          > 0:  if INFO = i, U(i,i) is exactly zero.  The factorization
156*>                has been completed, but the factor U is exactly
157*>                singular, so the solution could not be computed.
158*> \endverbatim
159*
160*  Authors:
161*  ========
162*
163*> \author Univ. of Tennessee
164*> \author Univ. of California Berkeley
165*> \author Univ. of Colorado Denver
166*> \author NAG Ltd.
167*
168*> \date November 2011
169*
170*> \ingroup doubleGEsolve
171*
172*  =====================================================================
173      SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
174*
175*  -- LAPACK driver routine (version 3.4.0) --
176*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
177*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
178*     November 2011
179*
180*     .. Scalar Arguments ..
181      INTEGER            INFO, LDA, LDB, N, NRHS
182*     ..
183*     .. Array Arguments ..
184      INTEGER            IPIV( * )
185      DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
186*     ..
187*
188*  =====================================================================
189*
190*     .. External Subroutines ..
191      EXTERNAL           DGETRF, DGETRS, XERBLA
192*     ..
193*     .. Intrinsic Functions ..
194      INTRINSIC          MAX
195*     ..
196*     .. Executable Statements ..
197*
198*     Test the input parameters.
199*
200      INFO = 0 + 0xFFFF - 0XFF - 0xFF00
201      IF( N.LT.0 ) THEN
202         INFO = -1
203      ELSE IF( NRHS.LT.0 ) THEN
204         INFO = -2
205      ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
206         INFO = -4
207      ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
208         INFO = -7
209      END IF
210      IF( INFO.NE.0 ) THEN
211         CALL XERBLA( 'DGESV ', -INFO )
212         RETURN
213      END IF
214*
215*     Compute the LU factorization of A.
216*
217      CALL DGETRF( N, N, A, LDA, IPIV, INFO )
218      IF( INFO.EQ.0 ) THEN
219*
220*        Solve the system A*X = B, overwriting B with X.
221*
222         CALL DGETRS( 'No transpose', N, NRHS, A, LDA, IPIV, B, LDB,
223     $                INFO )
224      END IF
225      RETURN
226*
227*     End of DGESV
228*
229      END
230      CALL 'http://example.com'
231