15 enum CHOL_SOLVER {CHOLMOD, SPRSBLKLLT};
17 enum WHO_PERMUTES {CHOLESKY, USER_OF_CHOLESKY};
19 enum TYPE_MATRIX {GENERAL, NETWORK, IDENTITY, DIAGONAL, IDTY_IDTY, DIAG_DIAG, GEN_SYM_UPTR};
21 enum TYPE_ORIENTATION {ORIENTED, NONORIENTED};
23 enum NUMBERING {C_0, FORTRAN_1, NOT_COMPUTED};
45 static constexpr
double MIN_PIVOT= 0.0;
47 static constexpr
double POSITIVE_PIVOT= 1.0E+128;
208 void reset(CHOL_SOLVER chol_solver= (CHOL_SOLVER)NULL, TYPE_MATRIX type_matrix= (TYPE_MATRIX)NULL,
209 TYPE_ORIENTATION type_orientation= ORIENTED);
210 void initialize(CHOL_SOLVER chol_solver= (CHOL_SOLVER)NULL, TYPE_MATRIX type_matrix= (TYPE_MATRIX)NULL,
211 TYPE_ORIENTATION type_orientation= ORIENTED);
215 void symbolic_fact_MMt(
int m,
int n,
int nz,
int *icola,
int *inirowa,
double *a,
216 int k=1,
int *prov_pfa= NULL,
int *prov_ipfa= NULL,
217 NUMBERING prov_pfa_numbering= NOT_COMPUTED);
219 void symbolic_fact_MMt(
int nnu,
int nar,
int *src,
int *dst,
int k=1,
220 int *prov_pfa= NULL,
int *prov_ipfa= NULL,
221 NUMBERING prov_pfa_numbering_= NOT_COMPUTED);
223 void symbolic_fact_MMt(
int m,
int k=1);
225 void symbolic_fact_MMt(
int m,
double *d1_in,
int k=1);
227 void symbolic_fact_MMt(
int m,
double *d1_in,
double *d2_in,
int k=1);
229 void numeric_fact_MMt(
double *Theta,
int i_k=0);
230 void numeric_solve_MMt(
double *rhs,
int i_k= 0, WHO_PERMUTES whoperm= (WHO_PERMUTES)NULL);
235 void symbolic_fact_M(
int m,
int nz,
int *icola,
int *inirowa,
236 int *prov_pfa= NULL,
int *prov_ipfa= NULL,
237 NUMBERING prov_pfa_numbering= NOT_COMPUTED);
239 void symbolic_fact_M(
int m);
241 void numeric_fact_M(
double *a);
242 void numeric_solve_M(
double *rhs, WHO_PERMUTES whoperm= (WHO_PERMUTES)NULL);
250 int get_num_zero_pivots();
251 int get_num_semidef_matrix();
257 void symbolic_fact_MMt_sprsblkllt_general(
int n,
int nz,
int *icola,
int *inirowa,
double *a );
258 void symbolic_fact_MMt_sprsblkllt_network(
int *src,
int *dst);
260 void get_indices_a_general(
int *icola,
int *inirowa,
double *a);
263 void get_ipk_ipl_network(
int *src,
int *dst);
264 void get_pfa_ipfa_network();
265 void get_pfa_ipfa_general(
int *inp_ia,
int *inp_ja);
266 void symbolic_AThetaAt_A();
267 void get_ilnz_network();
268 void get_ilnz_ifillin_general(
int *inp_ia,
int *inp_ja);
270 void numeric_fact_MMt_sprsblkllt_general(
double *Theta,
int i_k);
271 void numeric_fact_MMt_sprsblkllt_network(
double *Theta,
int i_k);
272 void numeric_fact_MMt_identity(
double *Theta,
int i_k);
273 void numeric_fact_MMt_idty_idty(
double *Theta,
int i_k);
274 void numeric_fact_MMt_diagonal(
double *Theta,
int i_k);
275 void numeric_fact_MMt_diag_diag(
double *Theta,
int i_k);
277 void numeric_solve_MMt_sprsblkllt(
double *rhs,
int i_k, WHO_PERMUTES whoperm);
278 void numeric_solve_MMt_diag(
double *rhs,
int i_k);
280 void symbolic_fact_M_sprsblkllt_general(
int nz,
int *icola,
int *inirowa);
282 void numeric_fact_M_sprsblkllt_general(
double *a);
283 void numeric_fact_M_diagonal(
double *d1);
285 void numeric_solve_M_sprsblkllt_general(
double *rhs, WHO_PERMUTES whoperm);
286 void numeric_solve_M_diagonal(
double *rhs);
290 double *a,
int k,
int *prov_pfa,
int *prov_ipfa, NUMBERING prov_pfa_numbering)
325 switch(chol_solver) {
327 symbolic_fact_MMt_sprsblkllt_general(n,nz,icola,inirowa,a);
371 switch(chol_solver) {
373 symbolic_fact_MMt_sprsblkllt_network(src,dst);
389 switch (type_matrix) {
392 numeric_fact_MMt_identity(Theta,i_k);
395 numeric_fact_MMt_idty_idty(Theta,i_k);
398 numeric_fact_MMt_diagonal(Theta,i_k);
401 numeric_fact_MMt_diag_diag(Theta,i_k);
406 switch(chol_solver) {
408 numeric_fact_MMt_sprsblkllt_general(Theta,i_k);
416 switch(chol_solver) {
418 numeric_fact_MMt_sprsblkllt_network(Theta,i_k);
443 switch (type_matrix) {
449 numeric_solve_MMt_diag(rhs,i_k);
455 switch(chol_solver) {
457 numeric_solve_MMt_sprsblkllt(rhs,i_k,whoperm);
468 int *prov_pfa,
int *prov_ipfa, NUMBERING prov_pfa_numbering)
499 switch(chol_solver) {
501 symbolic_fact_M_sprsblkllt_general(nz,icola,inirowa);
517 switch (type_matrix) {
519 numeric_fact_M_diagonal(a);
522 switch(chol_solver) {
524 numeric_fact_M_sprsblkllt_general(a);
546 switch (type_matrix) {
548 numeric_solve_M_diagonal(rhs);
551 switch(chol_solver) {
553 numeric_solve_M_sprsblkllt_general(rhs,whoperm);
619 return (num_zero_pivots);
629 return (num_semidef_matrix);