Multi-shift QuasiTrsm

Solve for \(X\) in the linear system

\[T^\# X - X D^\# = Y\]

or

\[X T^\# - D^\# X = Y\]

where \(T\) is quasi-triangular, \(D\) is diagonal, and \(A^\#\) is defined to be one of \(\{A,A^T,A^H\}\). The data movement requires almost no modification from that of QuasiTrsm().

Note that the term quasi-triangular is in the context of real Schur decompositions, which produce triangular matrices with mixes of \(1 \times 1\) and \(2 \times 2\) diagonal blocks.

Note

There is no corresponding BLAS routine, but it is a natural extension of Trsm.

C++ API

void MultiShiftQuasiTrsm(LeftOrRight side, UpperOrLower uplo, Orientation orientation, F alpha, const Matrix<F> &T, const Matrix<F> &shifts, Matrix<F> &X)
void MultiShiftQuasiTrsm(LeftOrRight side, UpperOrLower uplo, Orientation orientation, F alpha, const AbstractDistMatrix<F> &T, const AbstractDistMatrix<F> &shifts, AbstractDistMatrix<F> &X)

Overwrite the columns of X with the solutions to the shifted linear systems.

void MultiShiftQuasiTrsm(LeftOrRight side, UpperOrLower uplo, Orientation orientation, Complex<Real> alpha, const Matrix<Real> &T, const Matrix<Complex<Real>> &shifts, Matrix<Real> &XReal, Matrix<Real> &XImag)
void MultiShiftQuasiTrsm(LeftOrRight side, UpperOrLower uplo, Orientation orientation, Complex<Real> alpha, const AbstractDistMatrix<Real> &T, const AbstractDistMatrix<Complex<Real>> &shifts, AbstractDistMatrix<Real> &XReal, AbstractDistMatrix<Real> &XImag)

Overwrite the columns of the real and imaginary parts of X with the solutions to the shifted linear systems.

C API

ElError ElMultiShiftQuasiTrsm_s(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, float alpha, ElConstMatrix_s A, ElConstMatrix_s shifts, ElMatrix_s B)
ElError ElMultiShiftQuasiTrsm_d(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, double alpha, ElConstMatrix_d A, ElConstMatrix_d shifts, ElMatrix_d B)
ElError ElMultiShiftQuasiTrsm_c(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_float alpha, ElConstMatrix_c A, ElConstMatrix_c shifts, ElMatrix_c B)
ElError ElMultiShiftQuasiTrsm_z(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_double alpha, ElConstMatrix_z A, ElConstMatrix_z shifts, ElMatrix_z B)
ElError ElMultiShiftQuasiTrsmDist_s(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, float alpha, ElConstDistMatrix_s A, ElConstDistMatrix_s shifts, ElDistMatrix_s B)
ElError ElMultiShiftQuasiTrsmDist_d(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, double alpha, ElConstDistMatrix_d A, ElConstDistMatrix_d shifts, ElDistMatrix_d B)
ElError ElMultiShiftQuasiTrsmDist_c(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_float alpha, ElConstDistMatrix_c A, ElConstDistMatrix_c shifts, ElDistMatrix_c B)
ElError ElMultiShiftQuasiTrsmDist_z(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_double alpha, ElConstDistMatrix_z A, ElConstDistMatrix_z shifts, ElDistMatrix_z B)

Python API

MultiShiftQuasiTrsm(side, uplo, orient, alpha, A, shifts, B)