Skip to content

Commit 029c81f

Browse files
committed
Split solvers.cpp into separated .cpp as in decompositions
1 parent fd712e4 commit 029c81f

File tree

8 files changed

+127
-58
lines changed

8 files changed

+127
-58
lines changed

CMakeLists.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,15 @@ list(
318318
# ----------------------------------------------------
319319
# --- TARGETS ----------------------------------------
320320
# ----------------------------------------------------
321-
set(${PROJECT_NAME}_SOLVERS_SOURCES src/solvers/preconditioners.cpp
322-
src/solvers/solvers.cpp)
321+
set(${PROJECT_NAME}_SOLVERS_SOURCES
322+
src/solvers/preconditioners.cpp
323+
src/solvers/solvers.cpp
324+
src/solvers/minres.cpp
325+
src/solvers/bicgstab.cpp
326+
src/solvers/conjugate-gradient.cpp
327+
src/solvers/least-squares-conjugate-gradient.cpp
328+
src/solvers/incomplete-cholesky.cpp
329+
src/solvers/incomplete-lut.cpp)
323330

324331
set(${PROJECT_NAME}_DECOMPOSITIONS_SOURCES
325332
src/decompositions/decompositions.cpp

src/solvers/bicgstab.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright 2025 INRIA
3+
*/
4+
5+
#include "eigenpy/solvers/BiCGSTAB.hpp"
6+
7+
namespace eigenpy {
8+
void exposeBiCGSTAB() {
9+
using namespace Eigen;
10+
using Eigen::BiCGSTAB;
11+
using Eigen::IdentityPreconditioner;
12+
using IdentityBiCGSTAB = BiCGSTAB<MatrixXd, IdentityPreconditioner>;
13+
14+
BiCGSTABVisitor<BiCGSTAB<MatrixXd>>::expose("BiCGSTAB");
15+
BiCGSTABVisitor<IdentityBiCGSTAB>::expose("IdentityBiCGSTAB");
16+
}
17+
} // namespace eigenpy

src/solvers/conjugate-gradient.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright 2025 INRIA
3+
*/
4+
5+
#include "eigenpy/solvers/ConjugateGradient.hpp"
6+
7+
namespace eigenpy {
8+
void exposeConjugateGradient() {
9+
using namespace Eigen;
10+
using Eigen::ConjugateGradient;
11+
using Eigen::IdentityPreconditioner;
12+
using Eigen::Lower;
13+
using IdentityConjugateGradient =
14+
ConjugateGradient<MatrixXd, Lower, IdentityPreconditioner>;
15+
16+
ConjugateGradientVisitor<ConjugateGradient<MatrixXd, Lower>>::expose(
17+
"ConjugateGradient");
18+
ConjugateGradientVisitor<IdentityConjugateGradient>::expose(
19+
"IdentityConjugateGradient");
20+
}
21+
} // namespace eigenpy
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Copyright 2025 INRIA
3+
*/
4+
5+
#include "eigenpy/solvers/IncompleteCholesky.hpp"
6+
7+
namespace eigenpy {
8+
void exposeIncompleteCholesky() {
9+
using namespace Eigen;
10+
typedef SparseMatrix<double, ColMajor> ColMajorSparseMatrix;
11+
IncompleteCholeskyVisitor<ColMajorSparseMatrix>::expose("IncompleteCholesky");
12+
}
13+
} // namespace eigenpy

src/solvers/incomplete-lut.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* Copyright 2025 INRIA
3+
*/
4+
5+
#include "eigenpy/solvers/IncompleteLUT.hpp"
6+
7+
namespace eigenpy {
8+
void exposeIncompleteLUT() {
9+
typedef Eigen::SparseMatrix<double, Eigen::ColMajor> ColMajorSparseMatrix;
10+
IncompleteLUTVisitor<ColMajorSparseMatrix>::expose("IncompleteLUT");
11+
}
12+
} // namespace eigenpy
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright 2025 INRIA
3+
*/
4+
5+
#include "eigenpy/solvers/LeastSquaresConjugateGradient.hpp"
6+
7+
namespace eigenpy {
8+
void exposeLeastSquaresConjugateGradient() {
9+
using namespace Eigen;
10+
using Eigen::LeastSquaresConjugateGradient;
11+
12+
using Eigen::DiagonalPreconditioner;
13+
using Eigen::IdentityPreconditioner;
14+
using Eigen::LeastSquareDiagonalPreconditioner;
15+
16+
using IdentityLeastSquaresConjugateGradient =
17+
LeastSquaresConjugateGradient<MatrixXd, IdentityPreconditioner>;
18+
using DiagonalLeastSquaresConjugateGradient = LeastSquaresConjugateGradient<
19+
MatrixXd, DiagonalPreconditioner<typename MatrixXd::Scalar>>;
20+
21+
LeastSquaresConjugateGradientVisitor<LeastSquaresConjugateGradient<
22+
MatrixXd, LeastSquareDiagonalPreconditioner<MatrixXd::Scalar>>>::
23+
expose("LeastSquaresConjugateGradient");
24+
LeastSquaresConjugateGradientVisitor<IdentityLeastSquaresConjugateGradient>::
25+
expose("IdentityLeastSquaresConjugateGradient");
26+
LeastSquaresConjugateGradientVisitor<DiagonalLeastSquaresConjugateGradient>::
27+
expose("DiagonalLeastSquaresConjugateGradient");
28+
}
29+
} // namespace eigenpy

src/solvers/minres.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* Copyright 2025 INRIA
3+
*/
4+
5+
#include "eigenpy/solvers/MINRES.hpp"
6+
7+
namespace eigenpy {
8+
void exposeMINRES() {
9+
using namespace Eigen;
10+
MINRESSolverVisitor<MatrixXd>::expose("MINRES");
11+
}
12+
} // namespace eigenpy

src/solvers/solvers.cpp

Lines changed: 14 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,67 +2,25 @@
22
* Copyright 2017-2025 CNRS INRIA
33
*/
44

5-
#include <Eigen/Core>
6-
7-
#if EIGEN_VERSION_AT_LEAST(3, 2, 0)
8-
9-
#include "eigenpy/solvers/ConjugateGradient.hpp"
105
#include "eigenpy/solvers/solvers.hpp"
116

12-
#if EIGEN_VERSION_AT_LEAST(3, 3, 5)
13-
#include "eigenpy/solvers/LeastSquaresConjugateGradient.hpp"
14-
#endif
15-
16-
#include "eigenpy/solvers/BiCGSTAB.hpp"
17-
#include "eigenpy/solvers/MINRES.hpp"
18-
19-
#include "eigenpy/solvers/IncompleteLUT.hpp"
20-
#include "eigenpy/solvers/IncompleteCholesky.hpp"
7+
#include "eigenpy/fwd.hpp"
218

229
namespace eigenpy {
23-
void exposeSolvers() {
24-
using namespace Eigen;
25-
26-
using Eigen::Lower;
27-
28-
using Eigen::BiCGSTAB;
29-
using Eigen::ConjugateGradient;
30-
using Eigen::LeastSquaresConjugateGradient;
3110

32-
using Eigen::DiagonalPreconditioner;
33-
using Eigen::IdentityPreconditioner;
34-
using Eigen::LeastSquareDiagonalPreconditioner;
11+
void exposeBiCGSTAB();
12+
void exposeMINRES();
13+
void exposeConjugateGradient();
14+
void exposeLeastSquaresConjugateGradient();
15+
void exposeIncompleteCholesky();
16+
void exposeIncompleteLUT();
3517

36-
using IdentityBiCGSTAB = BiCGSTAB<MatrixXd, IdentityPreconditioner>;
37-
using IdentityConjugateGradient =
38-
ConjugateGradient<MatrixXd, Lower, IdentityPreconditioner>;
39-
using IdentityLeastSquaresConjugateGradient =
40-
LeastSquaresConjugateGradient<MatrixXd, IdentityPreconditioner>;
41-
using DiagonalLeastSquaresConjugateGradient = LeastSquaresConjugateGradient<
42-
MatrixXd, DiagonalPreconditioner<typename MatrixXd::Scalar>>;
43-
44-
ConjugateGradientVisitor<ConjugateGradient<MatrixXd, Lower>>::expose(
45-
"ConjugateGradient");
46-
ConjugateGradientVisitor<IdentityConjugateGradient>::expose(
47-
"IdentityConjugateGradient");
48-
49-
LeastSquaresConjugateGradientVisitor<LeastSquaresConjugateGradient<
50-
MatrixXd, LeastSquareDiagonalPreconditioner<MatrixXd::Scalar>>>::
51-
expose("LeastSquaresConjugateGradient");
52-
LeastSquaresConjugateGradientVisitor<IdentityLeastSquaresConjugateGradient>::
53-
expose("IdentityLeastSquaresConjugateGradient");
54-
LeastSquaresConjugateGradientVisitor<DiagonalLeastSquaresConjugateGradient>::
55-
expose("DiagonalLeastSquaresConjugateGradient");
56-
57-
BiCGSTABVisitor<BiCGSTAB<MatrixXd>>::expose("BiCGSTAB");
58-
BiCGSTABVisitor<IdentityBiCGSTAB>::expose("IdentityBiCGSTAB");
59-
60-
MINRESSolverVisitor<MatrixXd>::expose("MINRES");
61-
62-
typedef SparseMatrix<double, ColMajor> ColMajorSparseMatrix;
63-
IncompleteLUTVisitor<ColMajorSparseMatrix>::expose("IncompleteLUT");
64-
IncompleteCholeskyVisitor<ColMajorSparseMatrix>::expose("IncompleteCholesky");
18+
void exposeSolvers() {
19+
exposeBiCGSTAB();
20+
exposeMINRES();
21+
exposeConjugateGradient();
22+
exposeLeastSquaresConjugateGradient();
23+
exposeIncompleteCholesky();
24+
exposeIncompleteLUT();
6525
}
6626
} // namespace eigenpy
67-
68-
#endif

0 commit comments

Comments
 (0)