LAPACK  3.6.1 LAPACK: Linear Algebra PACKage
 subroutine dlasdt ( integer N, integer LVL, integer ND, integer, dimension( * ) INODE, integer, dimension( * ) NDIML, integer, dimension( * ) NDIMR, integer MSUB )

DLASDT creates a tree of subproblems for bidiagonal divide and conquer. Used by sbdsdc.

Purpose:
``` DLASDT creates a tree of subproblems for bidiagonal divide and
conquer.```
Parameters
 [in] N ``` N is INTEGER On entry, the number of diagonal elements of the bidiagonal matrix.``` [out] LVL ``` LVL is INTEGER On exit, the number of levels on the computation tree.``` [out] ND ``` ND is INTEGER On exit, the number of nodes on the tree.``` [out] INODE ``` INODE is INTEGER array, dimension ( N ) On exit, centers of subproblems.``` [out] NDIML ``` NDIML is INTEGER array, dimension ( N ) On exit, row dimensions of left children.``` [out] NDIMR ``` NDIMR is INTEGER array, dimension ( N ) On exit, row dimensions of right children.``` [in] MSUB ``` MSUB is INTEGER On entry, the maximum row dimension each subproblem at the bottom of the tree can be of.```
Date
September 2012
Contributors:
Ming Gu and Huan Ren, Computer Science Division, University of California at Berkeley, USA

Definition at line 107 of file dlasdt.f.

107 *
108 * -- LAPACK auxiliary routine (version 3.4.2) --
109 * -- LAPACK is a software package provided by Univ. of Tennessee, --
110 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
111 * September 2012
112 *
113 * .. Scalar Arguments ..
114  INTEGER lvl, msub, n, nd
115 * ..
116 * .. Array Arguments ..
117  INTEGER inode( * ), ndiml( * ), ndimr( * )
118 * ..
119 *
120 * =====================================================================
121 *
122 * .. Parameters ..
123  DOUBLE PRECISION two
124  parameter ( two = 2.0d+0 )
125 * ..
126 * .. Local Scalars ..
127  INTEGER i, il, ir, llst, maxn, ncrnt, nlvl
128  DOUBLE PRECISION temp
129 * ..
130 * .. Intrinsic Functions ..
131  INTRINSIC dble, int, log, max
132 * ..
133 * .. Executable Statements ..
134 *
135 * Find the number of levels on the tree.
136 *
137  maxn = max( 1, n )
138  temp = log( dble( maxn ) / dble( msub+1 ) ) / log( two )
139  lvl = int( temp ) + 1
140 *
141  i = n / 2
142  inode( 1 ) = i + 1
143  ndiml( 1 ) = i
144  ndimr( 1 ) = n - i - 1
145  il = 0
146  ir = 1
147  llst = 1
148  DO 20 nlvl = 1, lvl - 1
149 *
150 * Constructing the tree at (NLVL+1)-st level. The number of
151 * nodes created on this level is LLST * 2.
152 *
153  DO 10 i = 0, llst - 1
154  il = il + 2
155  ir = ir + 2
156  ncrnt = llst + i
157  ndiml( il ) = ndiml( ncrnt ) / 2
158  ndimr( il ) = ndiml( ncrnt ) - ndiml( il ) - 1
159  inode( il ) = inode( ncrnt ) - ndimr( il ) - 1
160  ndiml( ir ) = ndimr( ncrnt ) / 2
161  ndimr( ir ) = ndimr( ncrnt ) - ndiml( ir ) - 1
162  inode( ir ) = inode( ncrnt ) + ndiml( ir ) + 1
163  10 CONTINUE
164  llst = llst*2
165  20 CONTINUE
166  nd = llst*2 - 1
167 *
168  RETURN
169 *
170 * End of DLASDT
171 *

Here is the caller graph for this function: