29 #ifndef EIGEN_BICGSTABL_H
30 #define EIGEN_BICGSTABL_H
46 template <
typename MatrixType,
typename Rhs,
typename Dest,
typename Preconditioner>
53 const Index N = rhs.size();
54 L =
L <
x.rows() ?
L :
x.rows();
59 const Index maxIters = iters;
64 DenseMatrixType rHat(
N,
L + 1);
65 DenseMatrixType uHat(
N,
L + 1);
70 rHat.col(0) = rhs -
mat *
x0;
87 uHat.col(0).setZero();
89 bool bicg_convergence =
false;
108 bool compute_res =
false;
109 bool update_app =
false;
111 while (normr > tol * normb &&
k < maxIters) {
115 const Scalar rho1 = rShadow.dot(rHat.col(
j));
122 normr = (rhs -
mat * (precond.solve(
x) +
x0)).stableNorm();
129 tol_error = normr / normb;
132 x = precond.solve(
x);
134 return (normr < tol * normb);
140 uHat.leftCols(
j + 1) = rHat.leftCols(
j + 1) -
beta * uHat.leftCols(
j + 1);
141 uHat.col(
j + 1) =
mat * precond.solve(uHat.col(
j));
145 rHat.leftCols(
j + 1) -=
alpha * uHat.middleCols(1,
j + 1);
146 rHat.col(
j + 1) =
mat * precond.solve(rHat.col(
j));
149 normr = rHat.col(0).stableNorm();
151 if (normr < tol * normb) {
158 bicg_convergence =
true;
160 }
else if (normr < normr_min) {
166 if (!bicg_convergence) {
175 const VectorType gamma = rHat.rightCols(
L).householderQr().solve(rHat.col(0));
177 rHat.col(0) -= rHat.rightCols(
L) *
gamma;
178 uHat.col(0) -= uHat.rightCols(
L) *
gamma;
179 normr = rHat.col(0).stableNorm();
182 if (normr < normr_min) {
206 if (normr <
delta * normb && normb <= Mx) {
210 if (update_app || (normr <
delta *
Mr && normb <=
Mr)) {
214 if (bicg_convergence) {
217 bicg_convergence =
false;
225 rHat.col(0) = b_prime -
mat * precond.solve(
x);
226 normr = rHat.col(0).stableNorm();
234 b_prime = rHat.col(0);
238 if (normr < normr_min) {
251 normr = (rhs -
mat * (precond.solve(
x) +
x0)).stableNorm();
257 tol_error = normr / normb;
261 x = precond.solve(
x);
268 template <
typename MatrixType_,
typename Preconditioner_ = DiagonalPreconditioner<
typename MatrixType_::Scalar>>
273 template <
typename MatrixType_,
typename Preconditioner_>
281 template <
typename MatrixType_,
typename Preconditioner_>
311 template <
typename MatrixDerived>
319 template <
typename Rhs,
typename Dest>
MatrixXd L
Definition: LLT_example.cpp:6
#define eigen_assert(x)
Definition: Macros.h:910
Scalar * b
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
Definition: BiCGSTABL.h:282
ComputationInfo m_info
Definition: IterativeSolverBase.h:389
BiCGSTABL()
Definition: BiCGSTABL.h:298
BiCGSTABL(const EigenBase< MatrixDerived > &A)
Definition: BiCGSTABL.h:312
MatrixType_ MatrixType
Definition: BiCGSTABL.h:292
Preconditioner_ Preconditioner
Definition: BiCGSTABL.h:295
IterativeSolverBase< BiCGSTABL > Base
Definition: BiCGSTABL.h:283
RealScalar m_error
Definition: IterativeSolverBase.h:387
Index m_iterations
Definition: IterativeSolverBase.h:388
MatrixType::RealScalar RealScalar
Definition: BiCGSTABL.h:294
void _solve_vector_with_guess_impl(const Rhs &b, Dest &x) const
Definition: BiCGSTABL.h:320
void setL(Index L)
Definition: BiCGSTABL.h:331
Index m_L
Definition: BiCGSTABL.h:289
MatrixType::Scalar Scalar
Definition: BiCGSTABL.h:293
const ActualMatrixType & matrix() const
Definition: IterativeSolverBase.h:374
Base class for linear iterative solvers.
Definition: IterativeSolverBase.h:124
Index maxIterations() const
Definition: IterativeSolverBase.h:251
ComputationInfo m_info
Definition: IterativeSolverBase.h:389
RealScalar m_error
Definition: IterativeSolverBase.h:387
Preconditioner m_preconditioner
Definition: IterativeSolverBase.h:382
Index m_iterations
Definition: IterativeSolverBase.h:388
bool m_isInitialized
Definition: SparseSolverBase.h:110
RealScalar m_tolerance
Definition: IterativeSolverBase.h:385
BiCGSTABL< MatrixType_, Preconditioner_ > & derived()
Definition: SparseSolverBase.h:76
const ActualMatrixType & matrix() const
Definition: IterativeSolverBase.h:374
@ N
Definition: constructor.cpp:22
@ NumericalIssue
Definition: Constants.h:442
@ Success
Definition: Constants.h:440
@ NoConvergence
Definition: Constants.h:444
Eigen::DenseIndex ret
Definition: level1_cplx_impl.h:43
RealScalar alpha
Definition: level1_cplx_impl.h:151
Scalar beta
Definition: level2_cplx_impl.h:36
char char char int int * k
Definition: level2_impl.h:374
@ Rhs
Definition: TensorContractionMapper.h:20
EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1923
bool bicgstabl(const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error, Index L)
Definition: BiCGSTABL.h:47
Vector::Scalar omega(const Vector &t, const Vector &s, RealScalar angle)
Definition: IDRS.h:36
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool() isfinite(const Eigen::bfloat16 &h)
Definition: BFloat16.h:752
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition: MathFunctions.h:926
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
Definition: MathFunctions.h:1355
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float sqrt(const float &x)
Definition: arch/SSE/MathFunctions.h:69
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
unsigned Preconditioner
----------------------—Domain Properties------------------------—
Definition: space_time_oscillating_cylinder.cc:725
Vector< double > x0(2, 0.0)
int delta
Definition: MultiOpt.py:96
double Mr
Definition: two_dim.cc:106
int sigma
Definition: calibrate.py:179
Definition: Eigen_Colamd.h:49
Mdouble gamma(Mdouble gamma_in)
This is the gamma function returns the true value for the half integer value.
Definition: ExtendedMath.cc:116
list x
Definition: plotDoE.py:28
Definition: EigenBase.h:33
Preconditioner_ Preconditioner
Definition: BiCGSTABL.h:276
MatrixType_ MatrixType
Definition: BiCGSTABL.h:275
Definition: ForwardDeclarations.h:21
Definition: fft_test_shared.h:66
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2