Added an option to still select SPARSE 1.3 even when KLU is compiled
However, in this case, KLU is selected by default To enable SPARSE 1.3, please use the following syntax: .OPTIONS sparse in NON-capital letters
This commit is contained in:
parent
bfe7a5444c
commit
c84d46bab5
|
|
@ -281,6 +281,11 @@ struct CKTcircuit {
|
|||
contains only linear elements */
|
||||
unsigned int CKTnoopac:1; /* flag to indicate that OP will not be evaluated
|
||||
during AC simulation */
|
||||
|
||||
#ifdef KLU
|
||||
unsigned int CKTkluMODE:1 ;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -120,6 +120,10 @@ typedef struct {
|
|||
|
||||
#define OPT_NOOPAC 68
|
||||
|
||||
#ifdef KLU
|
||||
#define OPT_SPARSE 69
|
||||
#endif
|
||||
|
||||
#ifdef XSPICE
|
||||
/* gtri - begin - wbk - add new options */
|
||||
#define OPT_ENH_NOOPALTER 100
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ typedef struct sSMPmatrix {
|
|||
double **CKTdiag_CSC ; /* KLU pointer to diagonal element to perform Gmin */
|
||||
int CKTkluN ; /* KLU N, copied */
|
||||
int CKTklunz ; /* KLU nz, copied for AC Analysis */
|
||||
int CKTkluMODE ; /* KLU MODE parameter to enable KLU or not from the heuristic */
|
||||
unsigned int CKTkluMODE:1 ; /* KLU MODE parameter to enable KLU or not from the heuristic */
|
||||
#define CKTkluON 1 /* KLU MODE ON definition */
|
||||
#define CKTkluOFF 0 /* KLU MODE OFF definition */
|
||||
#elif defined(SuperLU)
|
||||
|
|
@ -71,7 +71,7 @@ typedef struct sSMPmatrix {
|
|||
double **CKTdiag_CSC ;
|
||||
int CKTsuperluN ;
|
||||
int CKTsuperlunz ;
|
||||
int CKTsuperluMODE ;
|
||||
unsigned int CKTsuperluMODE:1 ;
|
||||
#define CKTsuperluON 1 /* SuperLU MODE ON definition */
|
||||
#define CKTsuperluOFF 0 /* SuperLU MODE OFF definition */
|
||||
#elif defined(UMFPACK)
|
||||
|
|
@ -88,7 +88,7 @@ typedef struct sSMPmatrix {
|
|||
double **CKTdiag_CSC ;
|
||||
int CKTumfpackN ;
|
||||
int CKTumfpacknz ;
|
||||
int CKTumfpackMODE ;
|
||||
unsigned int CKTumfpackMODE:1 ;
|
||||
#define CKTumfpackON 1 /* UMFPACK MODE ON definition */
|
||||
#define CKTumfpackOFF 0 /* UMFPACK MODE OFF definition */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -66,6 +66,11 @@ struct TSKtask {
|
|||
double TSKabsDv; /* abs limit for iter-iter voltage change */
|
||||
double TSKrelDv; /* rel limit for iter-iter voltage change */
|
||||
unsigned int TSKnoopac:1; /* flag for no OP calculation before AC */
|
||||
|
||||
#ifdef KLU
|
||||
unsigned int TSKkluMODE:1 ;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ NIinit(CKTcircuit *ckt)
|
|||
ckt->CKTmatrix->CKTdiag_CSC = NULL ;
|
||||
ckt->CKTmatrix->CKTkluN = 0 ;
|
||||
ckt->CKTmatrix->CKTklunz = 0 ;
|
||||
ckt->CKTmatrix->CKTkluMODE = CKTkluON ; /* TO BE SUBSTITUTED WITH THE HEURISTICS */
|
||||
ckt->CKTmatrix->CKTkluMODE = ckt->CKTkluMODE ; /* TO BE SUBSTITUTED WITH THE HEURISTICS */
|
||||
|
||||
klu_defaults (ckt->CKTmatrix->CKTkluCommon) ;
|
||||
|
||||
|
|
|
|||
|
|
@ -103,6 +103,11 @@ CKTdoJob(CKTcircuit *ckt, int reset, TSKtask *task)
|
|||
ckt->CKTtroubleNode = 0;
|
||||
ckt->CKTtroubleElt = NULL;
|
||||
ckt->CKTnoopac = task->TSKnoopac && ckt->CKTisLinear;
|
||||
|
||||
#ifdef KLU
|
||||
ckt->CKTkluMODE = task->TSKkluMODE ;
|
||||
#endif
|
||||
|
||||
#ifdef NEWTRUNC
|
||||
ckt->CKTlteReltol = task->TSKlteReltol;
|
||||
ckt->CKTlteAbstol = task->TSKlteAbstol;
|
||||
|
|
|
|||
|
|
@ -72,6 +72,11 @@ CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr)
|
|||
tsk->TSKabsDv = def->TSKabsDv;
|
||||
tsk->TSKrelDv = def->TSKrelDv;
|
||||
tsk->TSKnoopac = def->TSKnoopac;
|
||||
|
||||
#ifdef KLU
|
||||
tsk->TSKkluMODE = def->TSKkluMODE ;
|
||||
#endif
|
||||
|
||||
#ifdef NEWTRUNC
|
||||
tsk->TSKlteReltol = def->TSKlteReltol;
|
||||
tsk->TSKlteAbstol = def->TSKlteAbstol;
|
||||
|
|
@ -119,6 +124,10 @@ CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr)
|
|||
tsk->TSKabsDv = 0.5;
|
||||
tsk->TSKrelDv = 2.0;
|
||||
|
||||
#ifdef KLU
|
||||
tsk->TSKkluMODE = CKTkluON ;
|
||||
#endif
|
||||
|
||||
#if (1) /*CDHW*/
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -110,6 +110,8 @@ CKTsetup(CKTcircuit *ckt)
|
|||
#if defined(KLU)
|
||||
if (ckt->CKTmatrix->CKTkluMODE)
|
||||
{
|
||||
printf ("Using KLU as Direct Linear Solver\n") ;
|
||||
|
||||
int i ;
|
||||
int n = SMPmatSize (ckt->CKTmatrix) ;
|
||||
ckt->CKTmatrix->CKTkluN = n ;
|
||||
|
|
@ -141,6 +143,8 @@ CKTsetup(CKTcircuit *ckt)
|
|||
DEVices [i]->DEVbindCSC (ckt->CKThead [i], ckt) ;
|
||||
|
||||
ckt->CKTmatrix->CKTkluMatrixIsComplex = CKTkluMatrixReal ;
|
||||
} else {
|
||||
printf ("Using SPARSE 1.3 as Direct Linear Solver\n") ;
|
||||
}
|
||||
#elif defined(SuperLU)
|
||||
if (ckt->CKTmatrix->CKTsuperluMODE)
|
||||
|
|
|
|||
|
|
@ -161,6 +161,13 @@ CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val)
|
|||
case OPT_NOOPAC:
|
||||
task->TSKnoopac = (val->iValue != 0);
|
||||
break;
|
||||
|
||||
#ifdef KLU
|
||||
case OPT_SPARSE:
|
||||
task->TSKkluMODE = (val->iValue == 0) ;
|
||||
break ;
|
||||
#endif
|
||||
|
||||
/* gtri - begin - wbk - add new options */
|
||||
#ifdef XSPICE
|
||||
case OPT_EVT_MAX_OP_ALTER:
|
||||
|
|
@ -313,7 +320,13 @@ static IFparm OPTtbl[] = {
|
|||
{ "reldv", OPT_RELDV, IF_SET|IF_REAL,
|
||||
"Maximum relative iter-iter node voltage change" },
|
||||
{ "noopac", OPT_NOOPAC, IF_SET|IF_FLAG,
|
||||
"No op calculation in ac if circuit is linear" }
|
||||
"No op calculation in ac if circuit is linear" },
|
||||
|
||||
#ifdef KLU
|
||||
{ "sparse", OPT_SPARSE, IF_SET|IF_FLAG,
|
||||
"Set SPARSE 1.3 as Direct Linear Solver" }
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
int OPTcount = NUMELEMS(OPTtbl);
|
||||
|
|
|
|||
Loading…
Reference in New Issue