7 #ifndef SPECTRA_SYM_GEIGS_SHIFT_SOLVER_H
8 #define SPECTRA_SYM_GEIGS_SHIFT_SOLVER_H
43 template <
typename OpType,
typename BOpType, GEigsMode Mode>
146 template <
typename OpType,
typename BOpType>
148 public HermEigsBase<SymGEigsShiftInvertOp<OpType, BOpType>, BOpType>
158 using Base::m_ritz_val;
166 return std::move(op);
174 m_ritz_val.head(m_nev).array() =
Scalar(1) / m_ritz_val.head(m_nev).array() + m_sigma;
175 Base::sort_ritzpair(sort_rule);
306 template <
typename OpType,
typename BOpType>
308 public HermEigsBase<SymGEigsBucklingOp<OpType, BOpType>, BOpType>
318 using Base::m_ritz_val;
326 throw std::invalid_argument(
"SymGEigsShiftSolver: sigma cannot be zero in the buckling mode");
328 return std::move(op);
336 m_ritz_val.head(m_nev).array() = m_sigma * m_ritz_val.head(m_nev).array() /
337 (m_ritz_val.head(m_nev).array() -
Scalar(1));
338 Base::sort_ritzpair(sort_rule);
398 template <
typename OpType,
typename BOpType>
400 public HermEigsBase<SymGEigsCayleyOp<OpType, BOpType>, BOpType>
410 using Base::m_ritz_val;
418 throw std::invalid_argument(
"SymGEigsShiftSolver: sigma cannot be zero in the Cayley mode");
420 return std::move(op);
428 m_ritz_val.head(m_nev).array() = m_sigma * (m_ritz_val.head(m_nev).array() +
Scalar(1)) /
429 (m_ritz_val.head(m_nev).array() -
Scalar(1));
430 Base::sort_ritzpair(sort_rule);
463 #endif // SPECTRA_SYM_GEIGS_SHIFT_SOLVER_H