Skip to content

Commit 20c32a3

Browse files
authored
Adds "auto" option for ldlsolver selection (#57)
* LinearSolverInfo impl
1 parent d293877 commit 20c32a3

File tree

16 files changed

+117
-22
lines changed

16 files changed

+117
-22
lines changed

examples/c/example_qp.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// #define CLARABEL_USE_FLOAT
33

44
#include "utils.h"
5-
5+
#include <stdio.h>
66
#include <Clarabel.h>
77

88
int main(void)
@@ -66,6 +66,14 @@ int main(void)
6666
ClarabelDefaultSolution solution = clarabel_DefaultSolver_solution(solver);
6767
print_solution(&solution);
6868

69+
// Get some detailed solve information
70+
ClarabelDefaultInfo_f64 info = clarabel_DefaultSolver_info(solver);
71+
printf("primal residual = %e\n", info.res_primal);
72+
printf("dual residual = %e\n", info.res_dual);
73+
printf("# of threads = %d\n", info.linsolver.threads);
74+
printf("KKT nonzeros = %d\n", info.linsolver.nnzA);
75+
printf("factor nonzeros = %d\n", info.linsolver.nnzL);
76+
6977
// Free the matrices and the solver
7078
clarabel_DefaultSolver_free(solver);
7179

examples/cpp/example_qp.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "utils.h"
2-
2+
#include <iostream>
33
#include <Clarabel>
44
#include <Eigen/Eigen>
55
#include <vector>
@@ -56,5 +56,13 @@ int main(void)
5656
DefaultSolution<double> solution = solver.solution();
5757
utils::print_solution(solution);
5858

59+
// Get some detailed solve information
60+
DefaultInfo<double> info = solver.info();
61+
std::cout << "primal residual = " << info.res_primal << std::endl;
62+
std::cout << "dual residual = " << info.res_dual << std::endl;
63+
std::cout << "# of threads = " << info.linsolver.threads << std::endl;
64+
std::cout << "KKT nonzeros = " << info.linsolver.nnzA << std::endl;
65+
std::cout << "factor nonzeros = " << info.linsolver.nnzL << std::endl;
66+
5967
return 0;
6068
}

examples/cpp/utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace utils
3333
printf("Slacks (s)\t = ");
3434
print_array(solution.s);
3535
}
36+
3637
}
3738

3839
#endif /* UTILS_H */

include/Clarabel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#define CLARABEL_H
33

44
#include "cpp/CscMatrix.h"
5-
#include "cpp/DefaultInfo.h"
65
#include "cpp/DefaultSettings.h"
6+
#include "cpp/DefaultInfo.h"
77
#include "cpp/DefaultSolution.h"
88
#include "cpp/DefaultSolver.h"
99
#include "cpp/SupportedConeT.h"

include/Clarabel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#define CLARABEL_H
33

44
#include "c/CscMatrix.h"
5-
#include "c/DefaultInfo.h"
65
#include "c/DefaultSettings.h"
6+
#include "c/DefaultInfo.h"
77
#include "c/DefaultSolution.h"
88
#include "c/DefaultSolver.h"
99
#include "c/SupportedConeT.h"

include/c/DefaultInfo.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,23 @@
22
#define CLARABEL_DEFAULT_INFO_H
33

44
#include "ClarabelTypes.h"
5+
#include "DefaultSettings.h"
56
#include "DefaultSolution.h"
67

78
#include <stdint.h>
89

10+
11+
typedef struct ClarabelLinearSolverInfo
12+
{
13+
ClarabelDirectSolveMethods name;
14+
uint32_t threads;
15+
bool direct;
16+
uint32_t nnzA;
17+
uint32_t nnzL;
18+
enum ClarabelSolverStatus status;
19+
} ClarabelLinearSolverInfo;
20+
21+
922
// ClarabelDefaultInfo types
1023
typedef struct ClarabelDefaultInfo_f64
1124
{
@@ -24,6 +37,8 @@ typedef struct ClarabelDefaultInfo_f64
2437
double ktratio;
2538
double solve_time;
2639
enum ClarabelSolverStatus status;
40+
ClarabelLinearSolverInfo linsolver;
41+
// NB : `PrintStream stream` not passed to C API
2742
} ClarabelDefaultInfo_f64;
2843

2944
typedef struct ClarabelDefaultInfo_f32
@@ -43,6 +58,8 @@ typedef struct ClarabelDefaultInfo_f32
4358
float ktratio;
4459
double solve_time;
4560
enum ClarabelSolverStatus status;
61+
ClarabelLinearSolverInfo linsolver;
62+
// NB : `PrintStream stream` not passed to C API
4663
} ClarabelDefaultInfo_f32;
4764

4865
#ifdef CLARABEL_USE_FLOAT

include/c/DefaultSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
// ClarabelDefaultSettings types
1111
typedef enum ClarabelDirectSolveMethods
1212
{
13+
AUTO,
1314
QDLDL,
1415
#ifdef FEATURE_FAER_SPARSE
1516
FAER,

include/cpp/DefaultInfo.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include "DefaultSettings.h"
34
#include "DefaultSolution.h"
45

56
#include <cstdint>
@@ -8,6 +9,16 @@
89
namespace clarabel
910
{
1011

12+
13+
struct LinearSolverInfo
14+
{
15+
ClarabelDirectSolveMethods name;
16+
uint32_t threads;
17+
bool direct;
18+
uint32_t nnzA;
19+
uint32_t nnzL;
20+
};
21+
1122
template<typename T = double>
1223
struct DefaultInfo
1324
{
@@ -28,6 +39,7 @@ struct DefaultInfo
2839
T ktratio;
2940
double solve_time;
3041
clarabel::SolverStatus status;
42+
clarabel::LinearSolverInfo linsolver;
3143
// NB : `PrintStream stream` not passed to C++ API
3244
};
3345

include/cpp/DefaultSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace clarabel
88

99
enum class ClarabelDirectSolveMethods
1010
{
11+
AUTO,
1112
QDLDL,
1213
#ifdef FEATURE_FAER_SPARSE
1314
FAER,

0 commit comments

Comments
 (0)