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