pdsyttrd man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

PDSYTTRD(l)			       )			   PDSYTTRD(l)

NAME
SYNOPSIS
       SUBROUTINE PDSYTTRD( UPLO, N, A, IA, JA, DESCA, D, E, TAU, WORK, LWORK,
			    INFO )

	   CHARACTER	    UPLO

	   INTEGER	    IA, INFO, JA, LWORK, N

	   INTEGER	    DESCA( * )

	   DOUBLE	    PRECISION A( * ), D( * ), E( * ), TAU( * ),	 WORK(
			    * )

	   INTEGER	    BLOCK_CYCLIC_2D,  DLEN_,  DTYPE_,  CTXT_,  M_, N_,
			    MB_, NB_, RSRC_, CSRC_, LLD_

	   PARAMETER	    ( BLOCK_CYCLIC_2D = 1, DLEN_  =  9,	 DTYPE_	 =  1,
			    CTXT_ = 2, M_ = 3, N_ = 4, MB_ = 5, NB_ = 6, RSRC_
			    = 7, CSRC_ = 8, LLD_ = 9 )

	   DOUBLE	    PRECISION ONE

	   PARAMETER	    ( ONE = 1.0D0 )

	   DOUBLE	    PRECISION Z_ONE, Z_NEGONE, Z_ZERO

	   PARAMETER	    ( Z_ONE = 1.0D0, Z_NEGONE = -1.0D0, Z_ZERO = 0.0D0
			    )

	   DOUBLE	    PRECISION ZERO

	   PARAMETER	    ( ZERO = 0.0D+0 )

	   LOGICAL	    BALANCED, INTERLEAVE, TWOGEMMS, UPPER

	   INTEGER	    ANB,  BINDEX,  CURCOL,  CURROW,  I,	 ICTXT, INDEX,
			    INDEXA,  INDEXINH,	INDEXINV,  INH,	 INHB,	 INHT,
			    INHTB, INTMP, INV, INVB, INVT, INVTB, J, LDA, LDV,
			    LDZG, LII, LIIB, LIIP1, LIJ, LIJB, LIJP1,  LTLIP1,
			    LTNM1,    LWMIN,	MAXINDEX,   MININDEX,	MYCOL,
			    MYFIRSTROW, MYROW, MYSETNUM, NBZG, NP, NPB, NPCOL,
			    NPM0, NPM1, NPROW, NPS, NPSET, NQ, NQB, NQM1, NUM‐
			    ROWS, NXTCOL, NXTROW, PBMAX, PBMIN,	 PBSIZE,  PNB,
			    ROWSPERPROC

	   DOUBLE	    PRECISION  ALPHA,  BETA,  C,  CONJTOPH,  CONJTOPV,
			    NORM, ONEOVERBETA, SAFMAX,	SAFMIN,	 TOPH,	TOPNV,
			    TOPTAU, TOPV

	   INTEGER	    IDUM1( 1 ), IDUM2( 1 )

	   DOUBLE	    PRECISION CC( 3 ), DTMP( 5 )

	   EXTERNAL	    BLACS_GRIDINFO,   CHK1MAT,	 DCOMBNRM2,   DGEBR2D,
			    DGEBS2D, DGEMM, DGEMV, DGERV2D, DGESD2D,  DGSUM2D,
			    DLACPY,   DSCAL,   DTRMVT,	PCHK1MAT,  PDTREECOMB,
			    PXERBLA

	   LOGICAL	    LSAME

	   INTEGER	    ICEIL, NUMROC, PJLAENV

	   DOUBLE	    PRECISION DNRM2, PDLAMCH

	   EXTERNAL	    LSAME, ICEIL, NUMROC, PJLAENV, DNRM2, PDLAMCH

	   INTRINSIC	    DBLE, ICHAR, MAX, MIN, MOD, SIGN, SQRT

	   IF(		    BLOCK_CYCLIC_2D*CSRC_*CTXT_*DLEN_*DTYPE_*LLD_*MB_*M_*NB_*N_*
			    RSRC_.LT.0 )RETURN

	   ICTXT	    = DESCA( CTXT_ )

	   CALL		    BLACS_GRIDINFO(  ICTXT, NPROW, NPCOL, MYROW, MYCOL
			    )

	   SAFMAX	    = SQRT( PDLAMCH( ICTXT, 'O' ) ) / N

	   SAFMIN	    = SQRT( PDLAMCH( ICTXT, 'S' ) )

	   INFO		    = 0

	   IF(		    NPROW.EQ.-1 ) THEN

	   INFO		    = -( 600+CTXT_ )

	   ELSE

	   PNB		    = PJLAENV( ICTXT, 2, 'PDSYTTRD', 'L', 0, 0, 0, 0 )

	   ANB		    = PJLAENV( ICTXT, 3, 'PDSYTTRD', 'L', 0, 0, 0, 0 )

	   INTERLEAVE	    = ( PJLAENV( ICTXT, 4, 'PDSYTTRD', 'L', 1, 0, 0, 0
			    ).EQ.1 )

	   TWOGEMMS	    = ( PJLAENV( ICTXT, 4, 'PDSYTTRD', 'L', 2, 0, 0, 0
			    ).EQ.1 )

	   BALANCED	    = ( PJLAENV( ICTXT, 4, 'PDSYTTRD', 'L', 3, 0, 0, 0
			    ).EQ.1 )

	   CALL		    CHK1MAT( N, 2, N, 2, IA, JA, DESCA, 6, INFO )

	   UPPER	    = LSAME( UPLO, 'U' )

	   IF(		    INFO.EQ.0  .AND.  DESCA( NB_ ).NE.1 ) INFO = 600 +
			    NB_

	   IF(		    INFO.EQ.0 ) THEN

	   NPS		    = MAX( NUMROC( N, 1, 0, 0, NPROW ), 2*ANB )

	   LWMIN	    = 2*( ANB+1 )*( 4*NPS+2 ) + NPS

	   WORK(	    1 ) = DBLE( LWMIN )

	   IF(

	   INFO		    = -1

	   ELSE		    IF( IA.NE.1 ) THEN

	   INFO		    = -4

	   ELSE		    IF( JA.NE.1 ) THEN

	   INFO		    = -5

	   ELSE		    IF( NPROW.NE.NPCOL ) THEN

	   INFO		    = -( 600+CTXT_ )

	   ELSE		    IF( DESCA( DTYPE_ ).NE.1 ) THEN

	   INFO		    = -( 600+DTYPE_ )

	   ELSE		    IF( DESCA( MB_ ).NE.1 ) THEN

	   INFO		    = -( 600+MB_ )

	   ELSE		    IF( DESCA( NB_ ).NE.1 ) THEN

	   INFO		    = -( 600+NB_ )

	   ELSE		    IF( DESCA( RSRC_ ).NE.0 ) THEN

	   INFO		    = -( 600+RSRC_ )

	   ELSE		    IF( DESCA( CSRC_ ).NE.0 ) THEN

	   INFO		    = -( 600+CSRC_ )

	   ELSE		    IF( LWORK.LT.LWMIN ) THEN

	   INFO		    = -11

	   END		    IF

	   END		    IF

	   IF(		    UPPER ) THEN

	   IDUM1(	    1 ) = ICHAR( 'U' )

	   ELSE

	   IDUM1(	    1 ) = ICHAR( 'L' )

	   END		    IF

	   IDUM2(	    1 ) = 1

	   CALL		    PCHK1MAT( N, 2, N, 2, IA, JA, DESCA, 6, 1,	IDUM1,
			    IDUM2, INFO )

	   END		    IF

	   IF(		    INFO.NE.0 ) THEN

	   CALL		    PXERBLA( ICTXT, 'PDSYTTRD', -INFO )

	   RETURN

	   END		    IF

	   IF(		    N.EQ.0 ) RETURN

	   NP		    = NUMROC( N, 1, MYROW, 0, NPROW )

	   NQ		    = NUMROC( N, 1, MYCOL, 0, NPCOL )

	   NXTROW	    = 0

	   NXTCOL	    = 0

	   LIIP1	    = 1

	   LIJP1	    = 1

	   NPM1		    = NP

	   NQM1		    = NQ

	   LDA		    = DESCA( LLD_ )

	   ICTXT	    = DESCA( CTXT_ )

	   INH		    = 1

	   IF(		    INTERLEAVE ) THEN

	   LDV		    = 4*( MAX( NPM1, NQM1 ) ) + 2

	   INH		    = 1

	   INV		    = INH + LDV / 2

	   INVT		    = INH + ( ANB+1 )*LDV

	   INHT		    = INVT + LDV / 2

	   INTMP	    = INVT + LDV*( ANB+1 )

	   ELSE

	   LDV		    = MAX( NPM1, NQM1 )

	   INHT		    = INH + LDV*( ANB+1 )

	   INV		    = INHT + LDV*( ANB+1 )

	   INVT		    = INV + LDV*( ANB+1 ) + 1

	   INTMP	    = INVT + LDV*( 2*ANB )

	   END		    IF

	   IF(		    INFO.NE.0 ) THEN

	   CALL		    PXERBLA( ICTXT, 'PDSYTTRD', -INFO )

	   WORK(	    1 ) = DBLE( LWMIN )

	   RETURN

	   END		    IF

	   DO		    10 I = 1, NP

	   WORK(	    INH+I-1 ) = Z_ZERO

	   WORK(	    INV+I-1 ) = Z_ZERO

	   10		    CONTINUE

	   DO		    20 I = 1, NQ

	   WORK(	    INHT+I-1 ) = Z_ZERO

	   20		    CONTINUE

	   TOPNV	    = Z_ZERO

	   LTLIP1	    = LIJP1

	   LTNM1	    = NPM1

	   IF(		    MYCOL.GT.MYROW ) THEN

	   LTLIP1	    = LTLIP1 + 1

	   LTNM1	    = LTNM1 - 1

	   END		    IF

	   DO		    210 MININDEX = 1, N - 1, ANB

	   MAXINDEX	    = MIN( MININDEX+ANB-1, N )

	   LIJB		    = NUMROC( MAXINDEX, 1, MYCOL, 0, NPCOL ) + 1

	   LIIB		    = NUMROC( MAXINDEX, 1, MYROW, 0, NPROW ) + 1

	   NQB		    = NQ - LIJB + 1

	   NPB		    = NP - LIIB + 1

	   INHTB	    = INHT + LIJB - 1

	   INVTB	    = INVT + LIJB - 1

	   INHB		    = INH + LIIB - 1

	   INVB		    = INV + LIIB - 1

	   DO		    160 INDEX = MININDEX, MIN( MAXINDEX, N-1 )

	   BINDEX	    = INDEX - MININDEX

	   CURROW	    = NXTROW

	   CURCOL	    = NXTCOL

	   NXTROW	    = MOD( CURROW+1, NPROW )

	   NXTCOL	    = MOD( CURCOL+1, NPCOL )

	   LII		    = LIIP1

	   LIJ		    = LIJP1

	   NPM0		    = NPM1

	   IF(		    MYROW.EQ.CURROW ) THEN

	   NPM1		    = NPM1 - 1

	   LIIP1	    = LIIP1 + 1

	   END		    IF

	   IF(		    MYCOL.EQ.CURCOL ) THEN

	   NQM1		    = NQM1 - 1

	   LIJP1	    = LIJP1 + 1

	   LTLIP1	    = LTLIP1 + 1

	   LTNM1	    = LTNM1 - 1

	   END		    IF

	   IF(		    MYCOL.EQ.CURCOL ) THEN

	   INDEXA	    = LII + ( LIJ-1 )*LDA

	   INDEXINV	    = INV + LII - 1 + ( BINDEX-1 )*LDV

	   INDEXINH	    = INH + LII - 1 + ( BINDEX-1 )*LDV

	   CONJTOPH	    = WORK( INHT+LIJ-1+BINDEX*LDV )

	   CONJTOPV	    = TOPNV

	   IF(		    INDEX.GT.1 ) THEN

	   DO		    30 I = 0, NPM0 - 1

	   A(		    INDEXA+I  ) = A( INDEXA+I ) - WORK( INDEXINV+LDV+I
			    )*CONJTOPH - WORK( INDEXINH+LDV+I )*CONJTOPV

	   30		    CONTINUE

	   END		    IF

	   END		    IF

	   IF(		    MYCOL.EQ.CURCOL ) THEN

	   IF(		    MYROW.EQ.CURROW ) THEN

	   DTMP(	    2 ) = A( LII+( LIJ-1 )*LDA )

	   ELSE

	   DTMP(	    2 ) = ZERO

	   END		    IF

	   IF(		    MYROW.EQ.NXTROW ) THEN

	   DTMP(	    3 ) = A( LIIP1+( LIJ-1 )*LDA )

	   DTMP(	    4 ) = ZERO

	   ELSE

	   DTMP(	    3 ) = ZERO

	   DTMP(	    4 ) = ZERO

	   END		    IF

	   NORM		    = DNRM2( NPM1, A( LIIP1+( LIJ-1 )*LDA ), 1 )

	   DTMP(	    1 ) = NORM

	   DTMP(	    5 ) = ZERO

	   IF(		    DTMP( 1 ).GE.SAFMAX .OR.  DTMP(  1	).LT.SAFMIN  )
			    THEN

	   DTMP(	    5 ) = ONE

	   DTMP(	    1 ) = ZERO

	   END		    IF

	   DTMP(	    1 ) = DTMP( 1 )*DTMP( 1 )

	   CALL		    DGSUM2D(  ICTXT, 'C', ' ', 5, 1, DTMP, 5, -1, CUR‐
			    COL )

	   IF(		    DTMP( 5 ).EQ.ZERO ) THEN

	   DTMP(	    1 ) = SQRT( DTMP( 1 ) )

	   ELSE

	   DTMP(	    1 ) = NORM

	   CALL		    PDTREECOMB( ICTXT, 'C', 1, DTMP, -1, MYCOL, DCOMB‐
			    NRM2 )

	   END		    IF

	   NORM		    = DTMP( 1 )

	   D(		    LIJ ) = DTMP( 2 )

	   IF(		    MYROW.EQ.CURROW .AND. MYCOL.EQ.CURCOL ) THEN

	   A(		    LII+( LIJ-1 )*LDA ) = D( LIJ )

	   END		    IF

	   ALPHA	    = DTMP( 3 )

	   NORM		    = SIGN( NORM, ALPHA )

	   IF(		    NORM.EQ.ZERO ) THEN

	   TOPTAU	    = ZERO

	   ELSE

	   BETA		    = NORM + ALPHA

	   TOPTAU	    = BETA / NORM

	   ONEOVERBETA	    = 1.0D0 / BETA

	   CALL		    DSCAL(  NPM1,  ONEOVERBETA, A( LIIP1+( LIJ-1 )*LDA
			    ), 1 )

	   END		    IF

	   IF(		    MYROW.EQ.NXTROW ) THEN

	   A(		    LIIP1+( LIJ-1 )*LDA ) = Z_ONE

	   END		    IF

	   TAU(		    LIJ ) = TOPTAU

	   E(		    LIJ ) = -NORM

	   END		    IF

	   DO		    40 I = 0, NPM1 - 1

	   WORK(	    INV+LIIP1-1+BINDEX*LDV+NPM1+I ) =  A(  LIIP1+I+  (
			    LIJ-1 )*LDA )

	   40		    CONTINUE

	   IF(		    MYCOL.EQ.CURCOL ) THEN

	   WORK(	    INV+LIIP1-1+BINDEX*LDV+NPM1+NPM1 ) = TOPTAU

	   CALL		    DGEBS2D(  ICTXT,  'R',  ' ', NPM1+NPM1+1, 1, WORK(
			    INV+LIIP1-1+BINDEX*LDV ), NPM1+NPM1+1 )

	   ELSE

	   CALL		    DGEBR2D( ICTXT, 'R', ' ',  NPM1+NPM1+1,  1,	 WORK(
			    INV+LIIP1-1+BINDEX*LDV ), NPM1+NPM1+1, MYROW, CUR‐
			    COL )

	   TOPTAU	    = WORK( INV+LIIP1-1+BINDEX*LDV+NPM1+NPM1 )

	   END		    IF

	   DO		    50 I = 0, NPM1 - 1

	   WORK(	    INH+LIIP1-1+(   BINDEX+1   )*LDV+I	 )   =	 WORK(
			    INV+LIIP1- 1+BINDEX*LDV+NPM1+I )

	   50		    CONTINUE

	   IF(		    INDEX.LT.N ) THEN

	   IF(		    MYROW.EQ.NXTROW .AND. MYCOL.EQ.CURCOL ) A( LIIP1+(
			    LIJ-1 )*LDA ) = E( LIJ )

	   END		    IF

	   IF(		    MYROW.EQ.MYCOL ) THEN

	   DO		    60 I = 0, NPM1 + NPM1

	   WORK(	    INVT+LIJP1-1+BINDEX*LDV+I ) =  WORK(  INV+LIIP1-1+
			    BINDEX*LDV+I )

	   60		    CONTINUE

	   ELSE

	   CALL		    DGESD2D(	 ICTXT,	    NPM1+NPM1,	   1,	 WORK(
			    INV+LIIP1-1+BINDEX*LDV ), NPM1+NPM1, MYCOL,	 MYROW
			    )

	   CALL		    DGERV2D(	 ICTXT,	    NQM1+NQM1,	   1,	 WORK(
			    INVT+LIJP1-1+BINDEX*LDV ), NQM1+NQM1, MYCOL, MYROW
			    )

	   END		    IF

	   DO		    70 I = 0, NQM1 - 1

	   WORK(	    INHT+LIJP1-1+(  BINDEX+1  )*LDV+I  ) = WORK( INVT+
			    LIJP1-1+BINDEX*LDV+NQM1+I )

	   70		    CONTINUE

	   IF(		    INDEX.GT.1 ) THEN

	   DO		    90 J = LIJP1, LIJB - 1

	   DO		    80 I = 0, NPM1 - 1

	   A(		    LIIP1+I+( J-1 )*LDA ) = A( LIIP1+I+( J-1 )*LDA ) -
			    WORK(     INV+LIIP1-1+BINDEX*LDV+I	   )*	 WORK(
			    INHT+J-1+BINDEX*LDV	       )	-	 WORK(
			    INH+LIIP1-1+BINDEX*LDV+I	      )*	 WORK(
			    INVT+J-1+BINDEX*LDV )

	   80		    CONTINUE

	   90		    CONTINUE

	   END		    IF

	   WORK(	    INV+LIIP1-1+( BINDEX+1 )*LDV ) = Z_ZERO

	   WORK(	    INVT+LIJP1-1+( BINDEX+1 )*LDV+NQM1-1 ) = Z_ZERO

	   IF(		    MYROW.EQ.MYCOL ) THEN

	   IF(		    LTNM1.GT.1 ) THEN

	   CALL		    DTRMVT( 'L', LTNM1-1, A( LTLIP1+1+( LIJP1-1	 )*LDA
			    ),	LDA, WORK( INVT+LIJP1-1+( BINDEX+1 )*LDV ), 1,
			    WORK( INH+LTLIP1+1-1+( BINDEX+1 )*LDV ), 1,	 WORK(
			    INV+LTLIP1+1-1+(  BINDEX+1	)*  LDV	 ),  1,	 WORK(
			    INHT+LIJP1-1+( BINDEX+ 1 )*LDV ), 1 )

	   END		    IF

	   DO		    100 I = 1, LTNM1

	   WORK(	    INVT+LIJP1+I-1-1+(	BINDEX+1  )*LDV	 )   =	 WORK(
			    INVT+LIJP1+I-1-1+(	 BINDEX+1   )*LDV   )	+   A(
			    LTLIP1+I-1+(   LIJP1+I-1-1	  )*LDA	   )*	 WORK(
			    INH+LTLIP1+I-1-1+( BINDEX+1 )*LDV )

	   100		    CONTINUE

	   ELSE

	   IF(		    LTNM1.GT.0	) CALL DTRMVT( 'L', LTNM1, A( LTLIP1+(
			    LIJP1-1  )*LDA  ),	 LDA,	WORK(	INVT+LIJP1-1+(
			    BINDEX+1 )* LDV ), 1, WORK( INH+LTLIP1-1+( BINDEX+
			    1 )*LDV ), 1, WORK( INV+LTLIP1-1+ ( BINDEX+1 )*LDV
			    ), 1, WORK( INHT+LIJP1-1+( BINDEX+1 )*LDV ), 1 )

	   END		    IF

	   DO		    110 I = 1, 2*( BINDEX+1 )

	   WORK(	    INTMP-1+I ) = 0

	   110		    CONTINUE

	   IF(		    BALANCED ) THEN

	   NPSET	    = NPROW

	   MYSETNUM	    = MYROW

	   ROWSPERPROC	    = ICEIL( NQB, NPSET )

	   MYFIRSTROW	    = MIN( NQB+1, 1+ROWSPERPROC*MYSETNUM )

	   NUMROWS	    = MIN( ROWSPERPROC, NQB-MYFIRSTROW+1 )

	   CALL		    DGEMV(   'C',   NUMROWS,  BINDEX+1,	 Z_ONE,	 WORK(
			    INHTB+MYFIRSTROW-1	     ),	      LDV,	 WORK(
			    INHTB+MYFIRSTROW-1+(  BINDEX+1 )*LDV ), 1, Z_ZERO,
			    WORK( INTMP ), 1 )

	   CALL		    DGEMV(  'C',  NUMROWS,  BINDEX+1,	Z_ONE,	 WORK(
			    INVTB+MYFIRSTROW-1	     ),	      LDV,	 WORK(
			    INHTB+MYFIRSTROW-1+( BINDEX+1 )*LDV ), 1,  Z_ZERO,
			    WORK( INTMP+BINDEX+1 ), 1 )

	   CALL		    DGSUM2D( ICTXT, 'C', ' ', 2*( BINDEX+1 ), 1, WORK(
			    INTMP ), 2*( BINDEX+1 ), -1, -1 )

	   ELSE

	   CALL		    DGEMV( 'C', NQB, BINDEX+1, Z_ONE, WORK(  INHTB  ),
			    LDV,  WORK(	 INHTB+(  BINDEX+1 )*LDV ), 1, Z_ZERO,
			    WORK( INTMP ), 1 )

	   CALL		    DGEMV( 'C', NQB, BINDEX+1, Z_ONE, WORK(  INVTB  ),
			    LDV,  WORK(	 INHTB+(  BINDEX+1 )*LDV ), 1, Z_ZERO,
			    WORK( INTMP+BINDEX+1 ), 1 )

	   END		    IF

	   IF(		    BALANCED ) THEN

	   MYSETNUM	    = MYCOL

	   ROWSPERPROC	    = ICEIL( NPB, NPSET )

	   MYFIRSTROW	    = MIN( NPB+1, 1+ROWSPERPROC*MYSETNUM )

	   NUMROWS	    = MIN( ROWSPERPROC, NPB-MYFIRSTROW+1 )

	   CALL		    DGSUM2D( ICTXT, 'R', ' ', 2*( BINDEX+1 ), 1, WORK(
			    INTMP ), 2*( BINDEX+1 ), -1, -1 )

	   IF(		    INDEX.GT.1. ) THEN

	   CALL		    DGEMV(  'N',  NUMROWS,  BINDEX+1,  Z_NEGONE, WORK(
			    INVB+MYFIRSTROW-1 ), LDV, WORK( INTMP ), 1, Z_ONE,
			    WORK( INVB+MYFIRSTROW-1+( BINDEX+1 )* LDV ), 1 )

	   CALL		    DGEMV(  'N',  NUMROWS,  BINDEX+1,  Z_NEGONE, WORK(
			    INHB+MYFIRSTROW-1 ), LDV, WORK( INTMP+BINDEX+1  ),
			    1,	Z_ONE,	WORK(  INVB+MYFIRSTROW-1+( BINDEX+1 )*
			    LDV ), 1 )

	   END		    IF

	   ELSE

	   CALL		    DGEMV( 'N', NPB, BINDEX+1, Z_NEGONE, WORK( INVB ),
			    LDV,   WORK(  INTMP	 ),  1,	 Z_ONE,	 WORK(	INVB+(
			    BINDEX+1 )*LDV ), 1 )

	   CALL		    DGEMV( 'N', NPB, BINDEX+1, Z_NEGONE, WORK( INHB ),
			    LDV,  WORK(	 INTMP+BINDEX+1	 ),  1,	 Z_ONE,	 WORK(
			    INVB+( BINDEX+1 )*LDV ), 1 )

	   END		    IF

	   IF(		    MYROW.EQ.MYCOL ) THEN

	   DO		    120 I = 0, NQM1 - 1

	   WORK(	    INTMP+I ) = WORK( INVT+LIJP1-1+( BINDEX+1 )*LDV+ I
			    )

	   120		    CONTINUE

	   ELSE

	   CALL		    DGESD2D(  ICTXT,  NQM1,  1,	 WORK(	INVT+LIJP1-1+(
			    BINDEX+1 )*LDV ), NQM1, MYCOL, MYROW )

	   CALL		    DGERV2D( ICTXT, NPM1,  1,  WORK(  INTMP  ),	 NPM1,
			    MYCOL, MYROW )

	   END		    IF

	   DO		    130 I = 0, NPM1 - 1

	   WORK(	    INV+LIIP1-1+(   BINDEX+1   )*LDV+I	 )   =	 WORK(
			    INV+LIIP1- 1+( BINDEX+1 )*LDV+I ) + WORK(  INTMP+I
			    )

	   130		    CONTINUE

	   CALL		    DGSUM2D(   ICTXT,	'R',   '  ',  NPM1,  1,	 WORK(
			    INV+LIIP1-1+(  BINDEX+1  )*LDV  ),	NPM1,	MYROW,
			    NXTCOL )

	   IF(		    MYCOL.EQ.NXTCOL ) THEN

	   CC(		    1 ) = Z_ZERO

	   DO		    140 I = 0, NPM1 - 1

	   CC(		    1  )  =  CC( 1 ) + WORK( INV+LIIP1-1+( BINDEX+1 )*
			    LDV+I )*WORK( INH+LIIP1-1+( BINDEX+1 )*LDV+ I )

	   140		    CONTINUE

	   IF(		    MYROW.EQ.NXTROW ) THEN

	   CC(		    2 ) = WORK( INV+LIIP1-1+( BINDEX+1 )*LDV )

	   CC(		    3 ) = WORK( INH+LIIP1-1+( BINDEX+1 )*LDV )

	   ELSE

	   CC(		    2 ) = Z_ZERO

	   CC(		    3 ) = Z_ZERO

	   END		    IF

	   CALL		    DGSUM2D( ICTXT, 'C', ' ', 3, 1, CC, 3, -1,	NXTCOL
			    )

	   TOPV		    = CC( 2 )

	   C		    = CC( 1 )

	   TOPH		    = CC( 3 )

	   TOPNV	    = TOPTAU*( TOPV-C*TOPTAU / 2*TOPH )

	   DO		    150 I = 0, NPM1 - 1

	   WORK(	    INV+LIIP1-1+( BINDEX+1 )*LDV+I ) = TOPTAU* ( WORK(
			    INV+LIIP1-1+(  BINDEX+1   )*LDV+I	)-C*TOPTAU   /
			    2*WORK( INH+LIIP1-1+( BINDEX+1 )*LDV+I ) )

	   150		    CONTINUE

	   END		    IF

	   160		    CONTINUE

	   IF(		    MAXINDEX.LT.N ) THEN

	   DO		    170 I = 0, NPM1 - 1

	   WORK(	    INTMP+I ) = WORK( INH+LIIP1-1+ANB*LDV+I )

	   170		    CONTINUE

	   IF(

	   IF(		    INTERLEAVE ) THEN

	   LDZG		    = LDV / 2

	   ELSE

	   CALL		    DLACPY(  'A',  LTNM1,  ANB,	 WORK( INHT+LIJP1-1 ),
			    LDV, WORK( INVT+LIJP1-1+ANB*LDV ), LDV )

	   CALL		    DLACPY( 'A', LTNM1,	 ANB,  WORK(  INV+LTLIP1-1  ),
			    LDV, WORK( INH+LTLIP1-1+ANB*LDV ), LDV )

	   LDZG		    = LDV

	   END		    IF

	   NBZG		    = ANB*2

	   ELSE

	   LDZG		    = LDV

	   NBZG		    = ANB

	   END		    IF

	   DO		    180 PBMIN = 1, LTNM1, PNB

	   PBSIZE	    = MIN( PNB, LTNM1-PBMIN+1 )

	   PBMAX	    = MIN( LTNM1, PBMIN+PNB-1 )

	   CALL		    DGEMM(  'N',  'C',	PBSIZE, PBMAX, NBZG, Z_NEGONE,
			    WORK(   INH+LTLIP1-1+PBMIN-1   ),	LDZG,	 WORK(
			    INVT+LIJP1-1  ),  LDZG, Z_ONE, A( LTLIP1+PBMIN-1+(
			    LIJP1-1 )*LDA ), LDA )

	   IF(		    TWOGEMMS ) THEN

	   CALL		    DGEMM( 'N', 'C',  PBSIZE,  PBMAX,  ANB,  Z_NEGONE,
			    WORK(    INV+LTLIP1-1+PBMIN-1   ),	 LDZG,	 WORK(
			    INHT+LIJP1-1 ), LDZG, Z_ONE,  A(  LTLIP1+PBMIN-1+(
			    LIJP1-1 )*LDA ), LDA )

	   END		    IF

	   180		    CONTINUE

	   DO		    190 I = 0, NPM1 - 1

	   WORK(	    INV+LIIP1-1+I ) = WORK( INV+LIIP1-1+ANB*LDV+I )

	   WORK(	    INH+LIIP1-1+I ) = WORK( INTMP+I )

	   190		    CONTINUE

	   DO		    200 I = 0, NQM1 - 1

	   WORK(	    INHT+LIJP1-1+I ) = WORK( INHT+LIJP1-1+ANB*LDV+I )

	   200		    CONTINUE

	   END		    IF

	   210		    CONTINUE

	   IF(		    MYCOL.EQ.NXTCOL ) THEN

	   IF(		    MYROW.EQ.NXTROW ) THEN

	   D(		    NQ ) = A( NP+( NQ-1 )*LDA )

	   CALL		    DGEBS2D( ICTXT, 'C', ' ', 1, 1, D( NQ ), 1 )

	   ELSE

	   CALL		    DGEBR2D(  ICTXT,  'C',  '  ',  1,  1,  D( NQ ), 1,
			    NXTROW, NXTCOL )

	   END		    IF

	   END		    IF

	   WORK(	    1 ) = DBLE( LWMIN )

	   RETURN

	   END

PURPOSE
ScaLAPACK version 1.7		13 August 2001			   PDSYTTRD(l)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net