12 #ifndef EIGEN_MINRES_H
13 #define EIGEN_MINRES_H
31 template <
typename MatrixType,
typename Rhs,
typename Dest,
typename Preconditioner>
49 const Index maxIters(iters);
51 const RealScalar threshold2(tol_error * tol_error * rhsNorm2);
62 eigen_assert(beta_new2 >= 0.0 &&
"PRECONDITIONER IS NOT POSITIVE DEFINITE");
76 while (iters < maxIters) {
93 v_new.noalias() =
mat *
w -
beta * v_old;
96 w_new = precond.solve(v_new);
97 beta_new2 = v_new.dot(w_new);
98 eigen_assert(beta_new2 >= 0.0 &&
"PRECONDITIONER IS NOT POSITIVE DEFINITE");
99 beta_new =
sqrt(beta_new2);
114 p.noalias() = (
w - r2 * p_old - r3 * p_oold) / r1;
115 x += beta_one *
c *
eta *
p;
119 residualNorm2 *=
s *
s;
121 if (residualNorm2 < threshold2) {
131 tol_error =
std::sqrt(residualNorm2 / rhsNorm2);
136 template <
typename MatrixType_,
int UpLo_ = Lower,
typename Preconditioner_ = IdentityPreconditioner>
141 template <
typename MatrixType_,
int UpLo_,
typename Preconditioner_>
187 template <
typename MatrixType_,
int UpLo_,
typename Preconditioner_>
219 template <
typename MatrixDerived>
226 template <
typename Rhs,
typename Dest>
231 TransposeInput = (!MatrixWrapper::MatrixFree) && (
UpLo == (
Lower |
Upper)) && (!MatrixType::IsRowMajor) &&
234 typedef std::conditional_t<TransposeInput, Transpose<const ActualMatrixType>,
ActualMatrixType const&>
237 MATRIX_FREE_CONJUGATE_GRADIENT_IS_COMPATIBLE_WITH_UPPER_UNION_LOWER_MODE_ONLY);
238 typedef std::conditional_t<
UpLo == (
Lower |
Upper), RowMajorWrapper,
244 RowMajorWrapper row_mat(
matrix());
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
#define EIGEN_DONT_INLINE
Definition: Macros.h:853
#define eigen_assert(x)
Definition: Macros.h:910
RowVector3d w
Definition: Matrix_resize_int.cpp:3
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
float * p
Definition: Tutorial_Map_using.cpp:9
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
Base class for linear iterative solvers.
Definition: IterativeSolverBase.h:124
internal::generic_matrix_wrapper< MatrixType > MatrixWrapper
Definition: IterativeSolverBase.h:371
Index maxIterations() const
Definition: IterativeSolverBase.h:251
ComputationInfo m_info
Definition: IterativeSolverBase.h:389
MatrixWrapper::ActualMatrixType ActualMatrixType
Definition: IterativeSolverBase.h:372
RealScalar m_error
Definition: IterativeSolverBase.h:387
void _solve_impl(const Rhs &b, Dest &x) const
Definition: IterativeSolverBase.h:357
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
MINRES< MatrixType_, UpLo_, Preconditioner_ > & derived()
Definition: SparseSolverBase.h:76
const ActualMatrixType & matrix() const
Definition: IterativeSolverBase.h:374
A minimal residual solver for sparse symmetric problems.
Definition: MINRES.h:188
MINRES()
Definition: MINRES.h:207
ComputationInfo m_info
Definition: IterativeSolverBase.h:389
Preconditioner_ Preconditioner
Definition: MINRES.h:201
MatrixType::RealScalar RealScalar
Definition: MINRES.h:200
@ UpLo
Definition: MINRES.h:203
void _solve_vector_with_guess_impl(const Rhs &b, Dest &x) const
Definition: MINRES.h:227
MatrixType_ MatrixType
Definition: MINRES.h:198
MINRES(const EigenBase< MatrixDerived > &A)
Definition: MINRES.h:220
RealScalar m_error
Definition: IterativeSolverBase.h:387
Index m_iterations
Definition: IterativeSolverBase.h:388
~MINRES()
Definition: MINRES.h:223
MatrixType::Scalar Scalar
Definition: MINRES.h:199
IterativeSolverBase< MINRES > Base
Definition: MINRES.h:189
const ActualMatrixType & matrix() const
Definition: IterativeSolverBase.h:374
Index cols() const
Definition: SparseMatrix.h:161
Definition: IterativeSolverBase.h:53
@ N
Definition: constructor.cpp:22
@ Lower
Definition: Constants.h:211
@ Upper
Definition: Constants.h:213
@ Success
Definition: Constants.h:440
@ NoConvergence
Definition: Constants.h:444
RealScalar s
Definition: level1_cplx_impl.h:130
RealScalar alpha
Definition: level1_cplx_impl.h:151
Scalar beta
Definition: level2_cplx_impl.h:36
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
@ Rhs
Definition: TensorContractionMapper.h:20
constexpr bool check_implication(bool a, bool b)
Definition: Meta.h:740
EIGEN_DONT_INLINE void minres(const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error)
Definition: MINRES.h:32
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
double eta
Definition: foeppl_von_karman/circular_disk/circular_disk.cc:45
int c
Definition: calibrate.py:100
Definition: Eigen_Colamd.h:49
double Zero
Definition: pseudosolid_node_update_elements.cc:35
list x
Definition: plotDoE.py:28
Type
Type of JSON value.
Definition: rapidjson.h:513
Definition: EigenBase.h:33
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Preconditioner_ Preconditioner
Definition: MINRES.h:144
MatrixType_ MatrixType
Definition: MINRES.h:143
Definition: ForwardDeclarations.h:21
Definition: fft_test_shared.h:66