File:  [local] / rpl / lapack / lapack / dlasdt.f
Revision 1.7: download - view: text, annotated - select for diffs - revision graph
Fri Aug 13 21:03:52 2010 UTC (13 years, 9 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_0_19, rpl-4_0_18, HEAD
Patches pour OS/2

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

CVSweb interface <joel.bertrand@systella.fr>