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