Multi-shift Trsm

Solve for \(X\) in the linear system

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

or

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

where \(T\) is 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 Trsm().

Note

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

C++ API

void MultiShiftTrsm(LeftOrRight side, UpperOrLower uplo, Orientation orientation, F alpha, const Matrix<F> &T, const Matrix<F> &shifts, Matrix<F> &X)
void MultiShiftTrsm(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 MultiShiftTrsm(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 MultiShiftTrsm(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 ElMultiShiftTrsm_s(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, float alpha, ElMatrix_s A, ElConstMatrix_s shifts, ElMatrix_s B)
ElError ElMultiShiftTrsm_d(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, double alpha, ElMatrix_d A, ElConstMatrix_d shifts, ElMatrix_d B)
ElError ElMultiShiftTrsm_c(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_float alpha, ElMatrix_c A, ElConstMatrix_c shifts, ElMatrix_c B)
ElError ElMultiShiftTrsm_z(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_double alpha, ElMatrix_z A, ElConstMatrix_z shifts, ElMatrix_z B)
ElError ElMultiShiftTrsmDist_s(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, float alpha, ElDistMatrix_s A, ElConstDistMatrix_s shifts, ElDistMatrix_s B)
ElError ElMultiShiftTrsmDist_d(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, double alpha, ElDistMatrix_d A, ElConstDistMatrix_d shifts, ElDistMatrix_d B)
ElError ElMultiShiftTrsmDist_c(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_float alpha, ElDistMatrix_c A, ElConstDistMatrix_c shifts, ElDistMatrix_c B)
ElError ElMultiShiftTrsmDist_z(ElLeftOrRight side, ElUpperOrLower uplo, ElOrientation orientation, complex_double alpha, ElDistMatrix_z A, ElConstDistMatrix_z shifts, ElDistMatrix_z B)

Python API

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