1 // This file is part of Eigen, a lightweight C++ template library
4 // Copyright (C) 2011 Gael Guennebaud <g.gael@free.fr>
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #include "sparse_solver.h"
11 #include <Eigen/IterativeLinearSolvers>
13 template<typename T
, typename I
> void test_conjugate_gradient_T()
15 typedef SparseMatrix
<T
,0,I
> SparseMatrixType
;
16 ConjugateGradient
<SparseMatrixType
, Lower
> cg_colmajor_lower_diag
;
17 ConjugateGradient
<SparseMatrixType
, Upper
> cg_colmajor_upper_diag
;
18 ConjugateGradient
<SparseMatrixType
, Lower
|Upper
> cg_colmajor_loup_diag
;
19 ConjugateGradient
<SparseMatrixType
, Lower
, IdentityPreconditioner
> cg_colmajor_lower_I
;
20 ConjugateGradient
<SparseMatrixType
, Upper
, IdentityPreconditioner
> cg_colmajor_upper_I
;
22 CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_lower_diag
) );
23 CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_upper_diag
) );
24 CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_loup_diag
) );
25 CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_lower_I
) );
26 CALL_SUBTEST( check_sparse_spd_solving(cg_colmajor_upper_I
) );
29 void test_conjugate_gradient()
31 CALL_SUBTEST_1(( test_conjugate_gradient_T
<double,int>() ));
32 CALL_SUBTEST_2(( test_conjugate_gradient_T
<std::complex<double>, int>() ));
33 CALL_SUBTEST_3(( test_conjugate_gradient_T
<double,long int>() ));