| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | 
							- /* dlasdt.f -- translated by f2c (version 20061008).
 
-    You must link the resulting object file with libf2c:
 
- 	on Microsoft Windows system, link with libf2c.lib;
 
- 	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
 
- 	or, if you install libf2c.a in a standard place, with -lf2c -lm
 
- 	-- in that order, at the end of the command line, as in
 
- 		cc *.o -lf2c -lm
 
- 	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
 
- 		http://www.netlib.org/f2c/libf2c.zip
 
- */
 
- #include "f2c.h"
 
- #include "blaswrap.h"
 
- /* Subroutine */ int _starpu_dlasdt_(integer *n, integer *lvl, integer *nd, integer *
 
- 	inode, integer *ndiml, integer *ndimr, integer *msub)
 
- {
 
-     /* System generated locals */
 
-     integer i__1, i__2;
 
-     /* Builtin functions */
 
-     double log(doublereal);
 
-     /* Local variables */
 
-     integer i__, il, ir, maxn;
 
-     doublereal temp;
 
-     integer nlvl, llst, ncrnt;
 
- /*  -- LAPACK auxiliary routine (version 3.2) -- */
 
- /*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
 
- /*     November 2006 */
 
- /*     .. Scalar Arguments .. */
 
- /*     .. */
 
- /*     .. Array Arguments .. */
 
- /*     .. */
 
- /*  Purpose */
 
- /*  ======= */
 
- /*  DLASDT creates a tree of subproblems for bidiagonal divide and */
 
- /*  conquer. */
 
- /*  Arguments */
 
- /*  ========= */
 
- /*   N      (input) INTEGER */
 
- /*          On entry, the number of diagonal elements of the */
 
- /*          bidiagonal matrix. */
 
- /*   LVL    (output) INTEGER */
 
- /*          On exit, the number of levels on the computation tree. */
 
- /*   ND     (output) INTEGER */
 
- /*          On exit, the number of nodes on the tree. */
 
- /*   INODE  (output) INTEGER array, dimension ( N ) */
 
- /*          On exit, centers of subproblems. */
 
- /*   NDIML  (output) INTEGER array, dimension ( N ) */
 
- /*          On exit, row dimensions of left children. */
 
- /*   NDIMR  (output) INTEGER array, dimension ( N ) */
 
- /*          On exit, row dimensions of right children. */
 
- /*   MSUB   (input) INTEGER. */
 
- /*          On entry, the maximum row dimension each subproblem at the */
 
- /*          bottom of the tree can be of. */
 
- /*  Further Details */
 
- /*  =============== */
 
- /*  Based on contributions by */
 
- /*     Ming Gu and Huan Ren, Computer Science Division, University of */
 
- /*     California at Berkeley, USA */
 
- /*  ===================================================================== */
 
- /*     .. Parameters .. */
 
- /*     .. */
 
- /*     .. Local Scalars .. */
 
- /*     .. */
 
- /*     .. Intrinsic Functions .. */
 
- /*     .. */
 
- /*     .. Executable Statements .. */
 
- /*     Find the number of levels on the tree. */
 
-     /* Parameter adjustments */
 
-     --ndimr;
 
-     --ndiml;
 
-     --inode;
 
-     /* Function Body */
 
-     maxn = max(1,*n);
 
-     temp = log((doublereal) maxn / (doublereal) (*msub + 1)) / log(2.);
 
-     *lvl = (integer) temp + 1;
 
-     i__ = *n / 2;
 
-     inode[1] = i__ + 1;
 
-     ndiml[1] = i__;
 
-     ndimr[1] = *n - i__ - 1;
 
-     il = 0;
 
-     ir = 1;
 
-     llst = 1;
 
-     i__1 = *lvl - 1;
 
-     for (nlvl = 1; nlvl <= i__1; ++nlvl) {
 
- /*        Constructing the tree at (NLVL+1)-st level. The number of */
 
- /*        nodes created on this level is LLST * 2. */
 
- 	i__2 = llst - 1;
 
- 	for (i__ = 0; i__ <= i__2; ++i__) {
 
- 	    il += 2;
 
- 	    ir += 2;
 
- 	    ncrnt = llst + i__;
 
- 	    ndiml[il] = ndiml[ncrnt] / 2;
 
- 	    ndimr[il] = ndiml[ncrnt] - ndiml[il] - 1;
 
- 	    inode[il] = inode[ncrnt] - ndimr[il] - 1;
 
- 	    ndiml[ir] = ndimr[ncrnt] / 2;
 
- 	    ndimr[ir] = ndimr[ncrnt] - ndiml[ir] - 1;
 
- 	    inode[ir] = inode[ncrnt] + ndiml[ir] + 1;
 
- /* L10: */
 
- 	}
 
- 	llst <<= 1;
 
- /* L20: */
 
-     }
 
-     *nd = (llst << 1) - 1;
 
-     return 0;
 
- /*     End of DLASDT */
 
- } /* _starpu_dlasdt_ */
 
 
  |