libflame  revision_anchor
Functions
dormhr.c File Reference

(r)

Functions

int dormhr_ (char *side, char *trans, integer *m, integer *n, integer *ilo, integer *ihi, doublereal *a, integer *lda, doublereal *tau, doublereal *c__, integer *ldc, doublereal *work, integer *lwork, integer *info)
 

Function Documentation

◆ dormhr_()

int dormhr_ ( char *  side,
char *  trans,
integer m,
integer n,
integer ilo,
integer ihi,
doublereal a,
integer lda,
doublereal tau,
doublereal c__,
integer ldc,
doublereal work,
integer lwork,
integer info 
)
176 {
177  /* System generated locals */
178  integer a_dim1, a_offset, c_dim1, c_offset, i__2;
179  char ch__1[2];
180  /* Builtin functions */
181  /* Subroutine */
182 
183  /* Local variables */
184  integer i1, i2, nb, mi, nh, ni, nq, nw;
185  logical left;
186  extern logical lsame_(char *, char *);
187  integer iinfo;
188  extern /* Subroutine */
189  int xerbla_(char *, integer *);
190  extern integer ilaenv_(integer *, char *, char *, integer *, integer *, integer *, integer *);
191  extern /* Subroutine */
192  int dormqr_fla(char *, char *, integer *, integer *, integer *, doublereal *, integer *, doublereal *, doublereal *, integer *, doublereal *, integer *, integer *);
193  integer lwkopt;
194  logical lquery;
195  /* -- LAPACK computational routine (version 3.4.0) -- */
196  /* -- LAPACK is a software package provided by Univ. of Tennessee, -- */
197  /* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- */
198  /* November 2011 */
199  /* .. Scalar Arguments .. */
200  /* .. */
201  /* .. Array Arguments .. */
202  /* .. */
203  /* ===================================================================== */
204  /* .. Local Scalars .. */
205  /* .. */
206  /* .. External Functions .. */
207  /* .. */
208  /* .. External Subroutines .. */
209  /* .. */
210  /* .. Intrinsic Functions .. */
211  /* .. */
212  /* .. Executable Statements .. */
213  /* Test the input arguments */
214  /* Parameter adjustments */
215  a_dim1 = *lda;
216  a_offset = 1 + a_dim1;
217  a -= a_offset;
218  --tau;
219  c_dim1 = *ldc;
220  c_offset = 1 + c_dim1;
221  c__ -= c_offset;
222  --work;
223  /* Function Body */
224  *info = 0;
225  nh = *ihi - *ilo;
226  left = lsame_(side, "L");
227  lquery = *lwork == -1;
228  /* NQ is the order of Q and NW is the minimum dimension of WORK */
229  if (left)
230  {
231  nq = *m;
232  nw = *n;
233  }
234  else
235  {
236  nq = *n;
237  nw = *m;
238  }
239  if (! left && ! lsame_(side, "R"))
240  {
241  *info = -1;
242  }
243  else if (! lsame_(trans, "N") && ! lsame_(trans, "T"))
244  {
245  *info = -2;
246  }
247  else if (*m < 0)
248  {
249  *info = -3;
250  }
251  else if (*n < 0)
252  {
253  *info = -4;
254  }
255  else if (*ilo < 1 || *ilo > max(1,nq))
256  {
257  *info = -5;
258  }
259  else if (*ihi < min(*ilo,nq) || *ihi > nq)
260  {
261  *info = -6;
262  }
263  else if (*lda < max(1,nq))
264  {
265  *info = -8;
266  }
267  else if (*ldc < max(1,*m))
268  {
269  *info = -11;
270  }
271  else if (*lwork < max(1,nw) && ! lquery)
272  {
273  *info = -13;
274  }
275  if (*info == 0)
276  {
277  if (left)
278  {
279  nb = ilaenv_(&c__1, "DORMQR", ch__1, &nh, n, &nh, &c_n1);
280  }
281  else
282  {
283  nb = ilaenv_(&c__1, "DORMQR", ch__1, m, &nh, &nh, &c_n1);
284  }
285  lwkopt = max(1,nw) * nb;
286  work[1] = (doublereal) lwkopt;
287  }
288  if (*info != 0)
289  {
290  i__2 = -(*info);
291  xerbla_("DORMHR", &i__2);
292  return 0;
293  }
294  else if (lquery)
295  {
296  return 0;
297  }
298  /* Quick return if possible */
299  if (*m == 0 || *n == 0 || nh == 0)
300  {
301  work[1] = 1.;
302  return 0;
303  }
304  if (left)
305  {
306  mi = nh;
307  ni = *n;
308  i1 = *ilo + 1;
309  i2 = 1;
310  }
311  else
312  {
313  mi = *m;
314  ni = nh;
315  i1 = 1;
316  i2 = *ilo + 1;
317  }
318  dormqr_fla(side, trans, &mi, &ni, &nh, &a[*ilo + 1 + *ilo * a_dim1], lda, & tau[*ilo], &c__[i1 + i2 * c_dim1], ldc, &work[1], lwork, &iinfo);
319  work[1] = (doublereal) lwkopt;
320  return 0;
321  /* End of DORMHR */
322 }
double doublereal
Definition: FLA_f2c.h:31
int integer
Definition: FLA_f2c.h:25
int logical
Definition: FLA_f2c.h:36
int dormqr_fla(char *side, char *trans, integer *m, integer *n, integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *c__, integer *ldc, doublereal *work, integer *lwork, integer *info)
Definition: dormqr.c:168

References dormqr_fla().