121{
122
123 integer a_dim1, a_offset, i__1, i__2;
124
126 extern
127 int xerbla_(
char *,
integer *);
129 extern
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155 a_dim1 = *lda;
156 a_offset = 1 + a_dim1;
157 a -= a_offset;
158 --tau;
159 --work;
160
161 *info = 0;
162 nh = *ihi - *ilo;
163 lquery = *lwork == -1;
164 if (*n < 0)
165 {
166 *info = -1;
167 }
168 else if (*ilo < 1 || *ilo > max(1,*n))
169 {
170 *info = -2;
171 }
172 else if (*ihi < min(*ilo,*n) || *ihi > *n)
173 {
174 *info = -3;
175 }
176 else if (*lda < max(1,*n))
177 {
178 *info = -5;
179 }
180 else if (*lwork < max(1,nh) && ! lquery)
181 {
182 *info = -8;
183 }
184 if (*info == 0)
185 {
186 nb = ilaenv_(&c__1, "DORGQR", " ", &nh, &nh, &nh, &c_n1);
187 lwkopt = max(1,nh) * nb;
189 }
190 if (*info != 0)
191 {
192 i__1 = -(*info);
193 xerbla_("DORGHR", &i__1);
194 return 0;
195 }
196 else if (lquery)
197 {
198 return 0;
199 }
200
201 if (*n == 0)
202 {
203 work[1] = 1.;
204 return 0;
205 }
206
207
208
209 i__1 = *ilo + 1;
210 for (j = *ihi;
211 j >= i__1;
212 --j)
213 {
214 i__2 = j - 1;
215 for (i__ = 1;
216 i__ <= i__2;
217 ++i__)
218 {
219 a[i__ + j * a_dim1] = 0.;
220
221 }
222 i__2 = *ihi;
223 for (i__ = j + 1;
224 i__ <= i__2;
225 ++i__)
226 {
227 a[i__ + j * a_dim1] = a[i__ + (j - 1) * a_dim1];
228
229 }
230 i__2 = *n;
231 for (i__ = *ihi + 1;
232 i__ <= i__2;
233 ++i__)
234 {
235 a[i__ + j * a_dim1] = 0.;
236
237 }
238
239 }
240 i__1 = *ilo;
241 for (j = 1;
242 j <= i__1;
243 ++j)
244 {
245 i__2 = *n;
246 for (i__ = 1;
247 i__ <= i__2;
248 ++i__)
249 {
250 a[i__ + j * a_dim1] = 0.;
251
252 }
253 a[j + j * a_dim1] = 1.;
254
255 }
256 i__1 = *n;
257 for (j = *ihi + 1;
258 j <= i__1;
259 ++j)
260 {
261 i__2 = *n;
262 for (i__ = 1;
263 i__ <= i__2;
264 ++i__)
265 {
266 a[i__ + j * a_dim1] = 0.;
267
268 }
269 a[j + j * a_dim1] = 1.;
270
271 }
272 if (nh > 0)
273 {
274
275 dorgqr_fla(&nh, &nh, &nh, &a[*ilo + 1 + (*ilo + 1) * a_dim1], lda, &tau[* ilo], &work[1], lwork, &iinfo);
276 }
278 return 0;
279
280}
double doublereal
Definition FLA_f2c.h:31
int integer
Definition FLA_f2c.h:25
int logical
Definition FLA_f2c.h:36
int dorgqr_fla(integer *m, integer *n, integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, integer *info)
Definition dorgqr.c:123