csttrs


NAME

csttrs - computes the solution to a complex system of linear equations A * X = B


SYNOPSIS

  SUBROUTINE CSTTRS( N, NRHS, L, D, SUBL, B, LDB, IPIV, INFO)
  COMPLEX L(*), D(*), SUBL(*), B(LDB,*)
  INTEGER N, NRHS, LDB, INFO
  INTEGER IPIV(*)
 
  SUBROUTINE CSTTRS_64( N, NRHS, L, D, SUBL, B, LDB, IPIV, INFO)
  COMPLEX L(*), D(*), SUBL(*), B(LDB,*)
  INTEGER*8 N, NRHS, LDB, INFO
  INTEGER*8 IPIV(*)
 

F95 INTERFACE

  SUBROUTINE STTRS( [N], [NRHS], L, D, SUBL, B, [LDB], IPIV, [INFO])
  COMPLEX, DIMENSION(:) :: L, D, SUBL
  COMPLEX, DIMENSION(:,:) :: B
  INTEGER :: N, NRHS, LDB, INFO
  INTEGER, DIMENSION(:) :: IPIV
 
  SUBROUTINE STTRS_64( [N], [NRHS], L, D, SUBL, B, [LDB], IPIV, [INFO])
  COMPLEX, DIMENSION(:) :: L, D, SUBL
  COMPLEX, DIMENSION(:,:) :: B
  INTEGER(8) :: N, NRHS, LDB, INFO
  INTEGER(8), DIMENSION(:) :: IPIV
 

C INTERFACE

#include <sunperf.h>

void csttrs(int n, int nrhs, complex *l, complex *d, complex *subl, complex *b, int ldb, int *ipiv, int *info);

void csttrs_64(long n, long nrhs, complex *l, complex *d, complex *subl, complex *b, long ldb, long *ipiv, long *info);


PURPOSE

csttrs computes the solution to a complex system of linear equations A * X = B, where A is an N-by-N symmetric tridiagonal matrix and X and B are N-by-NRHS matrices.


ARGUMENTS

* N (input)
 INTEGER

The order of the matrix A. N >= 0.

* NRHS (input)
 INTEGER

The number of right hand sides, i.e., the number of columns of the matrix B. NRHS >= 0.

* L (input)
 COMPLEX array, dimension (N-1)

On entry, the subdiagonal elements of LL and DD.

* D (input)
 COMPLEX array, dimension (N)

On entry, the diagonal elements of DD.

* SUBL (input)
 COMPLEX array, dimension (N-2)

On entry, the second subdiagonal elements of LL.

* B (input/output)
 COMPLEX array, dimension (LDB, NRHS)

On entry, the N-by-NRHS right hand side matrix B. On exit, if INFO = 0, the N-by-NRHS solution matrix X.

* LDB (input)
 INTEGER

The leading dimension of the array B. LDB >= max(1, N)

* IPIV (output)
 INTEGER array, dimension (N)

Details of the interchanges and block pivot. If IPIV(K) > 0, 1 by 1 pivot, and if IPIV(K) = K + 1 an interchange done; If IPIV(K) < 0, 2 by 2 pivot, no interchange required.

* INFO (output)
 INTEGER