LAPACK 3.3.0

sptts2.f

Go to the documentation of this file.
00001       SUBROUTINE SPTTS2( N, NRHS, D, E, B, LDB )
00002 *
00003 *  -- LAPACK routine (version 3.2) --
00004 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
00005 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
00006 *     November 2006
00007 *
00008 *     .. Scalar Arguments ..
00009       INTEGER            LDB, N, NRHS
00010 *     ..
00011 *     .. Array Arguments ..
00012       REAL               B( LDB, * ), D( * ), E( * )
00013 *     ..
00014 *
00015 *  Purpose
00016 *  =======
00017 *
00018 *  SPTTS2 solves a tridiagonal system of the form
00019 *     A * X = B
00020 *  using the L*D*L' factorization of A computed by SPTTRF.  D is a
00021 *  diagonal matrix specified in the vector D, L is a unit bidiagonal
00022 *  matrix whose subdiagonal is specified in the vector E, and X and B
00023 *  are N by NRHS matrices.
00024 *
00025 *  Arguments
00026 *  =========
00027 *
00028 *  N       (input) INTEGER
00029 *          The order of the tridiagonal matrix A.  N >= 0.
00030 *
00031 *  NRHS    (input) INTEGER
00032 *          The number of right hand sides, i.e., the number of columns
00033 *          of the matrix B.  NRHS >= 0.
00034 *
00035 *  D       (input) REAL array, dimension (N)
00036 *          The n diagonal elements of the diagonal matrix D from the
00037 *          L*D*L' factorization of A.
00038 *
00039 *  E       (input) REAL array, dimension (N-1)
00040 *          The (n-1) subdiagonal elements of the unit bidiagonal factor
00041 *          L from the L*D*L' factorization of A.  E can also be regarded
00042 *          as the superdiagonal of the unit bidiagonal factor U from the
00043 *          factorization A = U'*D*U.
00044 *
00045 *  B       (input/output) REAL array, dimension (LDB,NRHS)
00046 *          On entry, the right hand side vectors B for the system of
00047 *          linear equations.
00048 *          On exit, the solution vectors, X.
00049 *
00050 *  LDB     (input) INTEGER
00051 *          The leading dimension of the array B.  LDB >= max(1,N).
00052 *
00053 *  =====================================================================
00054 *
00055 *     .. Local Scalars ..
00056       INTEGER            I, J
00057 *     ..
00058 *     .. External Subroutines ..
00059       EXTERNAL           SSCAL
00060 *     ..
00061 *     .. Executable Statements ..
00062 *
00063 *     Quick return if possible
00064 *
00065       IF( N.LE.1 ) THEN
00066          IF( N.EQ.1 )
00067      $      CALL SSCAL( NRHS, 1. / D( 1 ), B, LDB )
00068          RETURN
00069       END IF
00070 *
00071 *     Solve A * X = B using the factorization A = L*D*L',
00072 *     overwriting each right hand side vector with its solution.
00073 *
00074       DO 30 J = 1, NRHS
00075 *
00076 *           Solve L * x = b.
00077 *
00078          DO 10 I = 2, N
00079             B( I, J ) = B( I, J ) - B( I-1, J )*E( I-1 )
00080    10    CONTINUE
00081 *
00082 *           Solve D * L' * x = b.
00083 *
00084          B( N, J ) = B( N, J ) / D( N )
00085          DO 20 I = N - 1, 1, -1
00086             B( I, J ) = B( I, J ) / D( I ) - B( I+1, J )*E( I )
00087    20    CONTINUE
00088    30 CONTINUE
00089 *
00090       RETURN
00091 *
00092 *     End of SPTTS2
00093 *
00094       END
 All Files Functions