1: *> \brief \b DLASDT creates a tree of subproblems for bidiagonal divide and conquer. Used by sbdsdc.
2: *
3: * =========== DOCUMENTATION ===========
4: *
5: * Online html documentation available at
6: * http://www.netlib.org/lapack/explore-html/
7: *
8: *> \htmlonly
9: *> Download DLASDT + dependencies
10: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasdt.f">
11: *> [TGZ]</a>
12: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasdt.f">
13: *> [ZIP]</a>
14: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdt.f">
15: *> [TXT]</a>
16: *> \endhtmlonly
17: *
18: * Definition:
19: * ===========
20: *
21: * SUBROUTINE DLASDT( N, LVL, ND, INODE, NDIML, NDIMR, MSUB )
22: *
23: * .. Scalar Arguments ..
24: * INTEGER LVL, MSUB, N, ND
25: * ..
26: * .. Array Arguments ..
27: * INTEGER INODE( * ), NDIML( * ), NDIMR( * )
28: * ..
29: *
30: *
31: *> \par Purpose:
32: * =============
33: *>
34: *> \verbatim
35: *>
36: *> DLASDT creates a tree of subproblems for bidiagonal divide and
37: *> conquer.
38: *> \endverbatim
39: *
40: * Arguments:
41: * ==========
42: *
43: *> \param[in] N
44: *> \verbatim
45: *> N is INTEGER
46: *> On entry, the number of diagonal elements of the
47: *> bidiagonal matrix.
48: *> \endverbatim
49: *>
50: *> \param[out] LVL
51: *> \verbatim
52: *> LVL is INTEGER
53: *> On exit, the number of levels on the computation tree.
54: *> \endverbatim
55: *>
56: *> \param[out] ND
57: *> \verbatim
58: *> ND is INTEGER
59: *> On exit, the number of nodes on the tree.
60: *> \endverbatim
61: *>
62: *> \param[out] INODE
63: *> \verbatim
64: *> INODE is INTEGER array, dimension ( N )
65: *> On exit, centers of subproblems.
66: *> \endverbatim
67: *>
68: *> \param[out] NDIML
69: *> \verbatim
70: *> NDIML is INTEGER array, dimension ( N )
71: *> On exit, row dimensions of left children.
72: *> \endverbatim
73: *>
74: *> \param[out] NDIMR
75: *> \verbatim
76: *> NDIMR is INTEGER array, dimension ( N )
77: *> On exit, row dimensions of right children.
78: *> \endverbatim
79: *>
80: *> \param[in] MSUB
81: *> \verbatim
82: *> MSUB is INTEGER
83: *> On entry, the maximum row dimension each subproblem at the
84: *> bottom of the tree can be of.
85: *> \endverbatim
86: *
87: * Authors:
88: * ========
89: *
90: *> \author Univ. of Tennessee
91: *> \author Univ. of California Berkeley
92: *> \author Univ. of Colorado Denver
93: *> \author NAG Ltd.
94: *
95: *> \ingroup OTHERauxiliary
96: *
97: *> \par Contributors:
98: * ==================
99: *>
100: *> Ming Gu and Huan Ren, Computer Science Division, University of
101: *> California at Berkeley, USA
102: *>
103: * =====================================================================
104: SUBROUTINE DLASDT( N, LVL, ND, INODE, NDIML, NDIMR, MSUB )
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: *
169: END
CVSweb interface <joel.bertrand@systella.fr>