root / src / lapack / double / dlasdt.f @ 2
Historique | Voir | Annoter | Télécharger (2,88 ko)
1 | 1 | equemene | SUBROUTINE DLASDT( N, LVL, ND, INODE, NDIML, NDIMR, MSUB ) |
---|---|---|---|
2 | 1 | equemene | * |
3 | 1 | equemene | * -- LAPACK auxiliary routine (version 3.2.2) -- |
4 | 1 | equemene | * -- LAPACK is a software package provided by Univ. of Tennessee, -- |
5 | 1 | equemene | * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
6 | 1 | equemene | * June 2010 |
7 | 1 | equemene | * |
8 | 1 | equemene | * .. Scalar Arguments .. |
9 | 1 | equemene | INTEGER LVL, MSUB, N, ND |
10 | 1 | equemene | * .. |
11 | 1 | equemene | * .. Array Arguments .. |
12 | 1 | equemene | INTEGER INODE( * ), NDIML( * ), NDIMR( * ) |
13 | 1 | equemene | * .. |
14 | 1 | equemene | * |
15 | 1 | equemene | * Purpose |
16 | 1 | equemene | * ======= |
17 | 1 | equemene | * |
18 | 1 | equemene | * DLASDT creates a tree of subproblems for bidiagonal divide and |
19 | 1 | equemene | * conquer. |
20 | 1 | equemene | * |
21 | 1 | equemene | * Arguments |
22 | 1 | equemene | * ========= |
23 | 1 | equemene | * |
24 | 1 | equemene | * N (input) INTEGER |
25 | 1 | equemene | * On entry, the number of diagonal elements of the |
26 | 1 | equemene | * bidiagonal matrix. |
27 | 1 | equemene | * |
28 | 1 | equemene | * LVL (output) INTEGER |
29 | 1 | equemene | * On exit, the number of levels on the computation tree. |
30 | 1 | equemene | * |
31 | 1 | equemene | * ND (output) INTEGER |
32 | 1 | equemene | * On exit, the number of nodes on the tree. |
33 | 1 | equemene | * |
34 | 1 | equemene | * INODE (output) INTEGER array, dimension ( N ) |
35 | 1 | equemene | * On exit, centers of subproblems. |
36 | 1 | equemene | * |
37 | 1 | equemene | * NDIML (output) INTEGER array, dimension ( N ) |
38 | 1 | equemene | * On exit, row dimensions of left children. |
39 | 1 | equemene | * |
40 | 1 | equemene | * NDIMR (output) INTEGER array, dimension ( N ) |
41 | 1 | equemene | * On exit, row dimensions of right children. |
42 | 1 | equemene | * |
43 | 1 | equemene | * MSUB (input) INTEGER |
44 | 1 | equemene | * On entry, the maximum row dimension each subproblem at the |
45 | 1 | equemene | * bottom of the tree can be of. |
46 | 1 | equemene | * |
47 | 1 | equemene | * Further Details |
48 | 1 | equemene | * =============== |
49 | 1 | equemene | * |
50 | 1 | equemene | * Based on contributions by |
51 | 1 | equemene | * Ming Gu and Huan Ren, Computer Science Division, University of |
52 | 1 | equemene | * California at Berkeley, USA |
53 | 1 | equemene | * |
54 | 1 | equemene | * ===================================================================== |
55 | 1 | equemene | * |
56 | 1 | equemene | * .. Parameters .. |
57 | 1 | equemene | DOUBLE PRECISION TWO |
58 | 1 | equemene | PARAMETER ( TWO = 2.0D+0 ) |
59 | 1 | equemene | * .. |
60 | 1 | equemene | * .. Local Scalars .. |
61 | 1 | equemene | INTEGER I, IL, IR, LLST, MAXN, NCRNT, NLVL |
62 | 1 | equemene | DOUBLE PRECISION TEMP |
63 | 1 | equemene | * .. |
64 | 1 | equemene | * .. Intrinsic Functions .. |
65 | 1 | equemene | INTRINSIC DBLE, INT, LOG, MAX |
66 | 1 | equemene | * .. |
67 | 1 | equemene | * .. Executable Statements .. |
68 | 1 | equemene | * |
69 | 1 | equemene | * Find the number of levels on the tree. |
70 | 1 | equemene | * |
71 | 1 | equemene | MAXN = MAX( 1, N ) |
72 | 1 | equemene | TEMP = LOG( DBLE( MAXN ) / DBLE( MSUB+1 ) ) / LOG( TWO ) |
73 | 1 | equemene | LVL = INT( TEMP ) + 1 |
74 | 1 | equemene | * |
75 | 1 | equemene | I = N / 2 |
76 | 1 | equemene | INODE( 1 ) = I + 1 |
77 | 1 | equemene | NDIML( 1 ) = I |
78 | 1 | equemene | NDIMR( 1 ) = N - I - 1 |
79 | 1 | equemene | IL = 0 |
80 | 1 | equemene | IR = 1 |
81 | 1 | equemene | LLST = 1 |
82 | 1 | equemene | DO 20 NLVL = 1, LVL - 1 |
83 | 1 | equemene | * |
84 | 1 | equemene | * Constructing the tree at (NLVL+1)-st level. The number of |
85 | 1 | equemene | * nodes created on this level is LLST * 2. |
86 | 1 | equemene | * |
87 | 1 | equemene | DO 10 I = 0, LLST - 1 |
88 | 1 | equemene | IL = IL + 2 |
89 | 1 | equemene | IR = IR + 2 |
90 | 1 | equemene | NCRNT = LLST + I |
91 | 1 | equemene | NDIML( IL ) = NDIML( NCRNT ) / 2 |
92 | 1 | equemene | NDIMR( IL ) = NDIML( NCRNT ) - NDIML( IL ) - 1 |
93 | 1 | equemene | INODE( IL ) = INODE( NCRNT ) - NDIMR( IL ) - 1 |
94 | 1 | equemene | NDIML( IR ) = NDIMR( NCRNT ) / 2 |
95 | 1 | equemene | NDIMR( IR ) = NDIMR( NCRNT ) - NDIML( IR ) - 1 |
96 | 1 | equemene | INODE( IR ) = INODE( NCRNT ) + NDIML( IR ) + 1 |
97 | 1 | equemene | 10 CONTINUE |
98 | 1 | equemene | LLST = LLST*2 |
99 | 1 | equemene | 20 CONTINUE |
100 | 1 | equemene | ND = LLST*2 - 1 |
101 | 1 | equemene | * |
102 | 1 | equemene | RETURN |
103 | 1 | equemene | * |
104 | 1 | equemene | * End of DLASDT |
105 | 1 | equemene | * |
106 | 1 | equemene | END |