1*> \brief \b ZLSETS
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*  Definition:
9*  ===========
10*
11*       SUBROUTINE ZLSETS( M, P, N, A, AF, LDA, B, BF, LDB, C, CF, D, DF,
12*                          X, WORK, LWORK, RWORK, RESULT )
13*
14*       .. Scalar Arguments ..
15*       INTEGER            LDA, LDB, LWORK, M, N, P
16*       ..
17*       .. Array Arguments ..
18*
19*
20*> \par Purpose:
21*  =============
22*>
23*> \verbatim
24*>
25*> ZLSETS tests ZGGLSE - a subroutine for solving linear equality
26*> constrained least square problem (LSE).
27*> \endverbatim
28*
29*  Arguments:
30*  ==========
31*
32*> \param[in] M
33*> \verbatim
34*>          M is INTEGER
35*>          The number of rows of the matrix A.  M >= 0.
36*> \endverbatim
37*>
38*> \param[in] P
39*> \verbatim
40*>          P is INTEGER
41*>          The number of rows of the matrix B.  P >= 0.
42*> \endverbatim
43*>
44*> \param[in] N
45*> \verbatim
46*>          N is INTEGER
47*>          The number of columns of the matrices A and B.  N >= 0.
48*> \endverbatim
49*>
50*> \param[in] A
51*> \verbatim
52*>          A is COMPLEX*16 array, dimension (LDA,N)
53*>          The M-by-N matrix A.
54*> \endverbatim
55*>
56*> \param[out] AF
57*> \verbatim
58*>          AF is COMPLEX*16 array, dimension (LDA,N)
59*> \endverbatim
60*>
61*> \param[in] LDA
62*> \verbatim
63*>          LDA is INTEGER
64*>          The leading dimension of the arrays A, AF, Q and R.
65*>          LDA >= max(M,N).
66*> \endverbatim
67*>
68*> \param[in] B
69*> \verbatim
70*>          B is COMPLEX*16 array, dimension (LDB,N)
71*>          The P-by-N matrix A.
72*> \endverbatim
73*>
74*> \param[out] BF
75*> \verbatim
76*>          BF is COMPLEX*16 array, dimension (LDB,N)
77*> \endverbatim
78*>
79*> \param[in] LDB
80*> \verbatim
81*>          LDB is INTEGER
82*>          The leading dimension of the arrays B, BF, V and S.
83*>          LDB >= max(P,N).
84*> \endverbatim
85*>
86*> \param[in] C
87*> \verbatim
88*>          C is COMPLEX*16 array, dimension( M )
89*>          the vector C in the LSE problem.
90*> \endverbatim
91*>
92*> \param[out] CF
93*> \verbatim
94*>          CF is COMPLEX*16 array, dimension( M )
95*> \endverbatim
96*>
97*> \param[in] D
98*> \verbatim
99*>          D is COMPLEX*16 array, dimension( P )
100*>          the vector D in the LSE problem.
101*> \endverbatim
102*>
103*> \param[out] DF
104*> \verbatim
105*>          DF is COMPLEX*16 array, dimension( P )
106*> \endverbatim
107*>
108*> \param[out] X
109*> \verbatim
110*>          X is COMPLEX*16 array, dimension( N )
111*>          solution vector X in the LSE problem.
112*> \endverbatim
113*>
114*> \param[out] WORK
115*> \verbatim
116*>          WORK is COMPLEX*16 array, dimension (LWORK)
117*> \endverbatim
118*>
119*> \param[in] LWORK
120*> \verbatim
121*>          LWORK is INTEGER
122*>          The dimension of the array WORK.
123*> \endverbatim
124*>
125*> \param[out] RWORK
126*> \verbatim
127*>          RWORK is DOUBLE PRECISION array, dimension (M)
128*> \endverbatim
129*>
130*> \param[out] RESULT
131*> \verbatim
132*>          RESULT is DOUBLE PRECISION array, dimension (2)
133*>          The test ratios:
134*>            RESULT(1) = norm( A*x - c )/ norm(A)*norm(X)*EPS
135*>            RESULT(2) = norm( B*x - d )/ norm(B)*norm(X)*EPS
136*> \endverbatim
137*
138*  Authors:
139*  ========
140*
141*> \author Univ. of Tennessee
142*> \author Univ. of California Berkeley
143*> \author Univ. of Colorado Denver
144*> \author NAG Ltd.
145*
146*> \ingroup complex16_eig
147*
148*  =====================================================================
149      SUBROUTINE ZLSETS( M, P, N, A, AF, LDA, B, BF, LDB, C, CF, D, DF,
150     $                   X, WORK, LWORK, RWORK, RESULT )
151*
152*  -- LAPACK test routine --
153*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
154*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
155*
156*     .. Scalar Arguments ..
157      INTEGER            LDA, LDB, LWORK, M, N, P
158*     ..
159*     .. Array Arguments ..
160*
161*  ====================================================================
162*
163      DOUBLE PRECISION   RESULT( 2 ), RWORK( * )
164      COMPLEX*16         A( LDA, * ), AF( LDA, * ), B( LDB, * ),
165     $                   BF( LDB, * ), C( * ), CF( * ), D( * ), DF( * ),
166     $                   WORK( LWORK ), X( * )
167*     ..
168*     .. Local Scalars ..
169      INTEGER            INFO
170*     ..
171*     .. External Subroutines ..
172      EXTERNAL           ZCOPY, ZGET02, ZGGLSE, ZLACPY
173*     ..
174*     .. Executable Statements ..
175*
176*     Copy the matrices A and B to the arrays AF and BF,
177*     and the vectors C and D to the arrays CF and DF,
178*
179      CALL ZLACPY( 'Full', M, N, A, LDA, AF, LDA )
180      CALL ZLACPY( 'Full', P, N, B, LDB, BF, LDB )
181      CALL ZCOPY( M, C, 1, CF, 1 )
182      CALL ZCOPY( P, D, 1, DF, 1 )
183*
184*     Solve LSE problem
185*
186      CALL ZGGLSE( M, N, P, AF, LDA, BF, LDB, CF, DF, X, WORK, LWORK,
187     $             INFO )
188*
189*     Test the residual for the solution of LSE
190*
191*     Compute RESULT(1) = norm( A*x - c ) / norm(A)*norm(X)*EPS
192*
193      CALL ZCOPY( M, C, 1, CF, 1 )
194      CALL ZCOPY( P, D, 1, DF, 1 )
195      CALL ZGET02( 'No transpose', M, N, 1, A, LDA, X, N, CF, M, RWORK,
196     $             RESULT( 1 ) )
197*
198*     Compute result(2) = norm( B*x - d ) / norm(B)*norm(X)*EPS
199*
200      CALL ZGET02( 'No transpose', P, N, 1, B, LDB, X, N, DF, P, RWORK,
201     $             RESULT( 2 ) )
202*
203      RETURN
204*
205*     End of ZLSETS
206*
207      END
208