1 #include "FLA_lapack2flame_return_defs.h"
2 #include "FLA_f2c.h"
3 static int c__1 = 1;
4 static int c_n1 = -1;
5
cunmlq_check(char * side,char * trans,int * m,int * n,int * k,scomplex * a,int * lda,scomplex * tau,scomplex * c__,int * ldc,scomplex * work,int * lwork,int * info)6 int cunmlq_check(char *side, char *trans, int *m, int *n, int *k, scomplex *a, int *lda, scomplex *tau, scomplex *c__, int *ldc, scomplex *work, int *lwork, int *info)
7 {
8 /* System generated locals */
9 int a_dim1, a_offset, c_dim1, c_offset, i__1, i__2;
10 char ch__1[2];
11 /* Builtin functions */
12 /* Subroutine */
13
14 /* Local variables */
15 int nb, nq, nw;
16 logical left;
17 logical notran;
18 int lwkopt;
19 logical lquery;
20
21 /* Parameter adjustments */
22 a_dim1 = *lda;
23 a_offset = 1 + a_dim1;
24 a -= a_offset;
25 --tau;
26 c_dim1 = *ldc;
27 c_offset = 1 + c_dim1;
28 c__ -= c_offset;
29 --work;
30 /* Function Body */
31 *info = 0;
32 left = lsame_(side, "L");
33 notran = lsame_(trans, "N");
34 lquery = *lwork == -1;
35 /* NQ is the order of Q and NW is the minimum dimension of WORK */
36 if (left)
37 {
38 nq = *m;
39 nw = *n;
40 }
41 else
42 {
43 nq = *n;
44 nw = *m;
45 }
46 if (! left && ! lsame_(side, "R"))
47 {
48 *info = -1;
49 }
50 else if (! notran && ! lsame_(trans, "C"))
51 {
52 *info = -2;
53 }
54 else if (*m < 0)
55 {
56 *info = -3;
57 }
58 else if (*n < 0)
59 {
60 *info = -4;
61 }
62 else if (*k < 0 || *k > nq)
63 {
64 *info = -5;
65 }
66 else if (*lda < max(1,*k))
67 {
68 *info = -7;
69 }
70 else if (*ldc < max(1,*m))
71 {
72 *info = -10;
73 }
74 else if (*lwork < max(1,nw) && ! lquery)
75 {
76 *info = -12;
77 }
78 if (*info == 0)
79 {
80 /* Determine the block size. NB may be at most NBMAX, where NBMAX */
81 /* is used to define the local array T. */
82 /* Computing MIN */
83 i__1 = 64;
84 i__2 = ilaenv_(&c__1, "CUNMLQ", ch__1, m, n, k, &c_n1); // , expr subst
85 nb = min(i__1,i__2);
86 lwkopt = max(1,nw) * nb;
87 work[1].real = (float) lwkopt;
88 work[1].imag = 0.f; // , expr subst
89 }
90 if (*info != 0)
91 {
92 i__1 = -(*info);
93 xerbla_("CUNMLQ", &i__1);
94 return LAPACK_FAILURE;
95 }
96 else if (lquery)
97 {
98 return LAPACK_QUERY_RETURN;
99 }
100 /* Quick return if possible */
101 if (*m == 0 || *n == 0 || *k == 0)
102 {
103 work[1].real = 1.f;
104 work[1].imag = 0.f; // , expr subst
105 return LAPACK_QUICK_RETURN;
106 }
107 return LAPACK_SUCCESS;
108 }
109