From 2a005292dbc59b9e2ea12172408a37f2dc35812c Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sun, 12 Nov 2023 16:32:40 +0100 Subject: [PATCH] Sparse 1.3 is the matrix solver if no option (sparse or klu) is given. KLU is selected by 'option klu' If both 'option klu' and 'option sparse' are given, the last one executed determines the solver. 'option sparse=0' de-selects spares, i.e. selects klu. 'option klu=0' de-selects klu, selects sparse. 'option klu=1' has the same meaning as 'option klu'. 'option sparse=1' has the same meaning as 'option sparse'. --- src/include/ngspice/optdefs.h | 1 + src/spicelib/analysis/cktntask.c | 2 +- src/spicelib/analysis/cktsopt.c | 6 +++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/include/ngspice/optdefs.h b/src/include/ngspice/optdefs.h index a39f57b23..6e8a5549f 100644 --- a/src/include/ngspice/optdefs.h +++ b/src/include/ngspice/optdefs.h @@ -124,6 +124,7 @@ enum { #ifdef KLU OPT_SPARSE, + OPT_KLU, OPT_KLU_MEMGROW_FACTOR, #endif diff --git a/src/spicelib/analysis/cktntask.c b/src/spicelib/analysis/cktntask.c index 2ad44e3b0..be681b2b6 100644 --- a/src/spicelib/analysis/cktntask.c +++ b/src/spicelib/analysis/cktntask.c @@ -141,7 +141,7 @@ CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr) tsk->TSKepsmin = 1e-28; #ifdef KLU - tsk->TSKkluMODE = CKTkluON; + tsk->TSKkluMODE = CKTkluOFF; tsk->TSKkluMemGrowFactor = 1.2 ; #endif diff --git a/src/spicelib/analysis/cktsopt.c b/src/spicelib/analysis/cktsopt.c index d69e878f5..0c1f723e1 100644 --- a/src/spicelib/analysis/cktsopt.c +++ b/src/spicelib/analysis/cktsopt.c @@ -180,7 +180,9 @@ CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val) case OPT_SPARSE: task->TSKkluMODE = (val->iValue == 0); break; - + case OPT_KLU: + task->TSKkluMODE = (val->iValue != 0); + break; case OPT_KLU_MEMGROW_FACTOR: task->TSKkluMemGrowFactor = (val->rValue == 1.2); break; @@ -348,6 +350,8 @@ static IFparm OPTtbl[] = { #ifdef KLU { "sparse", OPT_SPARSE, IF_SET|IF_FLAG, "Set SPARSE 1.3 as Direct Linear Solver" }, + { "klu", OPT_KLU, IF_SET|IF_FLAG, + "Set KLU as Direct Linear Solver" }, { "klu_memgrow_factor", OPT_KLU_MEMGROW_FACTOR, IF_SET|IF_REAL, "KLU Memory Grow Factor (default is 1.2)" } #endif