 LAPACK  3.10.0 LAPACK: Linear Algebra PACKage

◆ dlasdt()

 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.
Contributors:
Ming Gu and Huan Ren, Computer Science Division, University of California at Berkeley, USA

Definition at line 104 of file dlasdt.f.

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