trtol to 1 only for A devices
This commit is contained in:
parent
43d6608024
commit
bd985bc28f
|
|
@ -1,3 +1,12 @@
|
||||||
|
2010-10-13 Dietmar Warning
|
||||||
|
* src/frontend/com_option.c: better formatting the output and
|
||||||
|
add some useful parameters if command 'option' is given
|
||||||
|
* src/include/cktdefs.h,
|
||||||
|
* src/spicelib/analysis/cktdojob.c, cktntask.c,
|
||||||
|
* src/spicelib/devices/cktinit.c,
|
||||||
|
* src/spicelib/parser/inppas2.c:
|
||||||
|
Reduction of trtol to 1 only if 'A' devices in the circuit and xspice is enabled
|
||||||
|
|
||||||
2010-10-09 Robert Larice
|
2010-10-09 Robert Larice
|
||||||
* src/include/complex.h :
|
* src/include/complex.h :
|
||||||
!REVERT! remove typedef for _complex, which is used nowhere
|
!REVERT! remove typedef for _complex, which is used nowhere
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,9 @@ struct CKTcircuit {
|
||||||
point brute force, but to use gmin stepping
|
point brute force, but to use gmin stepping
|
||||||
first */
|
first */
|
||||||
unsigned int CKTisSetup:1; /* flag to indicate if CKTsetup done */
|
unsigned int CKTisSetup:1; /* flag to indicate if CKTsetup done */
|
||||||
|
#ifdef XSPICE
|
||||||
|
unsigned int CKTadevFlag:1; /* flag indicates 'A' devices in the circuit */
|
||||||
|
#endif
|
||||||
JOB *CKTcurJob; /* Next analysis to be performed ??? */
|
JOB *CKTcurJob; /* Next analysis to be performed ??? */
|
||||||
|
|
||||||
SENstruct *CKTsenInfo; /* the sensitivity information */
|
SENstruct *CKTsenInfo; /* the sensitivity information */
|
||||||
|
|
@ -255,11 +258,11 @@ struct CKTcircuit {
|
||||||
double CKTrelDv; /* rel limit for iter-iter voltage change */
|
double CKTrelDv; /* rel limit for iter-iter voltage change */
|
||||||
int CKTtroubleNode; /* Non-convergent node number */
|
int CKTtroubleNode; /* Non-convergent node number */
|
||||||
GENinstance *CKTtroubleElt; /* Non-convergent device instance */
|
GENinstance *CKTtroubleElt; /* Non-convergent device instance */
|
||||||
int CKTvarHertz; /* variable HERTZ in B source */
|
int CKTvarHertz; /* variable HERTZ in B source */
|
||||||
/* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */
|
/* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */
|
||||||
#ifdef XSPICE
|
#ifdef XSPICE
|
||||||
Evt_Ckt_Data_t *evt; /* all data about event driven stuff */
|
Evt_Ckt_Data_t *evt; /* all data about event driven stuff */
|
||||||
Enh_Ckt_Data_t *enh; /* data used by general enhancements */
|
Enh_Ckt_Data_t *enh; /* data used by general enhancements */
|
||||||
#endif
|
#endif
|
||||||
/* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */
|
/* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,15 @@ CKTdoJob(CKTcircuit *inCkt, int reset, TSKtask *inTask)
|
||||||
ckt->CKTgmin = task->TSKgmin;
|
ckt->CKTgmin = task->TSKgmin;
|
||||||
ckt->CKTgshunt = task->TSKgshunt;
|
ckt->CKTgshunt = task->TSKgshunt;
|
||||||
ckt->CKTdelmin = task->TSKdelmin;
|
ckt->CKTdelmin = task->TSKdelmin;
|
||||||
ckt->CKTtrtol = task->TSKtrtol;
|
#ifdef XSPICE
|
||||||
|
/* Lower default value of trtol to give more accuracy */
|
||||||
|
/* but only if there are 'A' devices in the circuit */
|
||||||
|
if (ckt->CKTadevFlag && (ckt->CKTtrtol > 1)) {
|
||||||
|
printf("Reducing trtol to 1 for xspice 'A' devices\n");
|
||||||
|
ckt->CKTtrtol = 1;
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
ckt->CKTtrtol = task->TSKtrtol;
|
||||||
ckt->CKTdefaultMosM = task->TSKdefaultMosM;
|
ckt->CKTdefaultMosM = task->TSKdefaultMosM;
|
||||||
ckt->CKTdefaultMosL = task->TSKdefaultMosL;
|
ckt->CKTdefaultMosL = task->TSKdefaultMosL;
|
||||||
ckt->CKTdefaultMosW = task->TSKdefaultMosW;
|
ckt->CKTdefaultMosW = task->TSKdefaultMosW;
|
||||||
|
|
|
||||||
|
|
@ -86,17 +86,7 @@ CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr)
|
||||||
tsk->TSKlteReltol = 1e-3;
|
tsk->TSKlteReltol = 1e-3;
|
||||||
tsk->TSKlteAbstol = 1e-6;
|
tsk->TSKlteAbstol = 1e-6;
|
||||||
#endif /* NEWTRUNC */
|
#endif /* NEWTRUNC */
|
||||||
|
|
||||||
/* gtri - modify - 4/17/91 - wbk - Change trtol default */
|
|
||||||
#ifdef XSPICE
|
|
||||||
/* Lower default value of trtol to give more accuracy */
|
|
||||||
/* tsk->TSKtrtol = 7; */
|
|
||||||
tsk->TSKtrtol = 1;
|
|
||||||
/* gtri - modify - 4/17/91 - wbk - Change trtol default */
|
|
||||||
#else
|
|
||||||
tsk->TSKtrtol = 7;
|
tsk->TSKtrtol = 7;
|
||||||
#endif /* XSPICE */
|
|
||||||
|
|
||||||
tsk->TSKbypass = 0;
|
tsk->TSKbypass = 0;
|
||||||
tsk->TSKtranMaxIter = 10;
|
tsk->TSKtranMaxIter = 10;
|
||||||
tsk->TSKdcMaxIter = 100;
|
tsk->TSKdcMaxIter = 100;
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,9 @@ CKTinit(CKTcircuit **ckt) /* new circuit to create */
|
||||||
sckt->CKTtrtol = 7;
|
sckt->CKTtrtol = 7;
|
||||||
sckt->CKTbypass = 0;
|
sckt->CKTbypass = 0;
|
||||||
sckt->CKTisSetup = 0;
|
sckt->CKTisSetup = 0;
|
||||||
|
#ifdef XSPICE
|
||||||
|
sckt->CKTadevFlag = 0; /* flag indicates A devices in the circuit */
|
||||||
|
#endif
|
||||||
sckt->CKTtranMaxIter = 10;
|
sckt->CKTtranMaxIter = 10;
|
||||||
sckt->CKTdcMaxIter = 100;
|
sckt->CKTdcMaxIter = 100;
|
||||||
sckt->CKTdcTrcvMaxIter = 50;
|
sckt->CKTdcTrcvMaxIter = 50;
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,9 @@ Copyright 1990 Regents of the University of California. All rights reserved.
|
||||||
Author: 1985 Thomas L. Quarles
|
Author: 1985 Thomas L. Quarles
|
||||||
**********/
|
**********/
|
||||||
|
|
||||||
#include <config.h>
|
#include "ngspice.h"
|
||||||
#include <ngspice.h>
|
#include "iferrmsg.h"
|
||||||
#include <iferrmsg.h>
|
#include "inpmacs.h"
|
||||||
#include <inpmacs.h>
|
|
||||||
|
|
||||||
#include "inppas2.h"
|
#include "inppas2.h"
|
||||||
#include "inp.h"
|
#include "inp.h"
|
||||||
|
|
@ -45,6 +44,10 @@ void INPpas2(CKTcircuit *ckt, card * data, INPtables * tab, TSKtask *task)
|
||||||
printf("Entered INPpas2 . . . .\n");
|
printf("Entered INPpas2 . . . .\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef XSPICE
|
||||||
|
if (!ckt->CKTadevFlag) ckt->CKTadevFlag = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
error = INPgetTok(&groundname, &gname, 1);
|
error = INPgetTok(&groundname, &gname, 1);
|
||||||
if (error)
|
if (error)
|
||||||
data->error =
|
data->error =
|
||||||
|
|
@ -62,12 +65,12 @@ void INPpas2(CKTcircuit *ckt, card * data, INPtables * tab, TSKtask *task)
|
||||||
#ifdef TRACE
|
#ifdef TRACE
|
||||||
printf("Examining this deck:\n");
|
printf("Examining this deck:\n");
|
||||||
for (current = data; current != NULL; current = current->nextcard) {
|
for (current = data; current != NULL; current = current->nextcard) {
|
||||||
printf("%s\n", current->line);
|
printf("%s\n", current->line);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAS_WINDOWS
|
#ifdef HAS_WINDOWS
|
||||||
for (current = data; current != NULL; current = current->nextcard)
|
for (current = data; current != NULL; current = current->nextcard)
|
||||||
linecount++;
|
linecount++;
|
||||||
|
|
@ -100,14 +103,15 @@ void INPpas2(CKTcircuit *ckt, card * data, INPtables * tab, TSKtask *task)
|
||||||
|
|
||||||
#ifdef XSPICE
|
#ifdef XSPICE
|
||||||
/* gtri - add - wbk - 10/23/90 - add case for 'A' devices */
|
/* gtri - add - wbk - 10/23/90 - add case for 'A' devices */
|
||||||
|
|
||||||
case 'A': /* Aname <cm connections> <mname> */
|
case 'A': /* Aname <cm connections> <mname> */
|
||||||
MIF_INP2A(ckt,tab,current);
|
MIF_INP2A(ckt, tab, current);
|
||||||
|
ckt->CKTadevFlag = 1; /* an 'A' device is requested */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* gtri - end - wbk - 10/23/90 */
|
/* gtri - end - wbk - 10/23/90 */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case 'R':
|
case 'R':
|
||||||
/* Rname <node> <node> [<val>][<mname>][w=<val>][l=<val>] */
|
/* Rname <node> <node> [<val>][<mname>][w=<val>][l=<val>] */
|
||||||
INP2R(ckt, tab, current);
|
INP2R(ckt, tab, current);
|
||||||
|
|
@ -168,7 +172,7 @@ void INPpas2(CKTcircuit *ckt, card * data, INPtables * tab, TSKtask *task)
|
||||||
INP2M(ckt, tab, current);
|
INP2M(ckt, tab, current);
|
||||||
break;
|
break;
|
||||||
#ifdef NDEV
|
#ifdef NDEV
|
||||||
case 'N':
|
case 'N':
|
||||||
/* Nname [<node>...] [<mname>] */
|
/* Nname [<node>...] [<mname>] */
|
||||||
INP2N(ckt, tab, current);
|
INP2N(ckt, tab, current);
|
||||||
break;
|
break;
|
||||||
|
|
@ -230,7 +234,7 @@ void INPpas2(CKTcircuit *ckt, card * data, INPtables * tab, TSKtask *task)
|
||||||
INP2Y(ckt, tab, current);
|
INP2Y(ckt, tab, current);
|
||||||
break;
|
break;
|
||||||
/* end Kspice */
|
/* end Kspice */
|
||||||
|
|
||||||
case 'K':
|
case 'K':
|
||||||
/* Kname Lname Lname <val> */
|
/* Kname Lname Lname <val> */
|
||||||
INP2K(ckt, tab, current);
|
INP2K(ckt, tab, current);
|
||||||
|
|
@ -246,10 +250,10 @@ void INPpas2(CKTcircuit *ckt, card * data, INPtables * tab, TSKtask *task)
|
||||||
INP2B(ckt, tab, current);
|
INP2B(ckt, tab, current);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '.': /* .<something> Many possibilities */
|
case '.': /* .<something> Many possibilities */
|
||||||
if (INP2dot(ckt,tab,current,task,gnode))
|
if (INP2dot(ckt,tab,current,task,gnode))
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
|
|
@ -259,7 +263,7 @@ void INPpas2(CKTcircuit *ckt, card * data, INPtables * tab, TSKtask *task)
|
||||||
LITERR(" unknown device type - error \n");
|
LITERR(" unknown device type - error \n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue