Prepare Cshunt: add a cpacitor to each voltage node

Function inppas4() will add the extra caps, to be done.
This commit is contained in:
Holger Vogt 2021-04-02 15:21:45 +02:00
parent db5c6cd0ec
commit f8357dad88
9 changed files with 16 additions and 0 deletions

View File

@ -1336,6 +1336,10 @@ inp_dodeck(
}
} // if (!noparse) . . .
/* If option cshunt is given, add capacitors to each voltage node */
if (ft_curckt->ci_defTask->TSKcshunt > 0.)
INPpas4(ckt, tab);
/* add title of deck to data base */
/* this won't work if the title is the empty string
* cp_addkword() doesn't work for tt === ""

View File

@ -215,6 +215,7 @@ struct CKTcircuit {
#endif /* NEWTRUNC */
double CKTgmin; /* .options GMIN */
double CKTgshunt; /* .options RSHUNT */
double CKTcshunt; /* .options CSHUNT */
double CKTdelmin; /* minimum time step for tran analysis */
double CKTtrtol; /* .options TRTOL */
double CKTfinalTime; /* TSTOP */

View File

@ -136,6 +136,7 @@ void INPpas1(CKTcircuit *, struct card *, INPtables *);
void INPpas2(CKTcircuit *, struct card *, INPtables *, TSKtask *);
void INPpas3(
CKTcircuit *, struct card *, INPtables *, TSKtask *, IFparm *, int);
void INPpas4(CKTcircuit *, INPtables *);
int INPpName(char *, IFvalue *, CKTcircuit *, int, GENinstance *);
int INPtermInsert(CKTcircuit *, char **, INPtables *, CKTnode **);
int INPtermSearch(CKTcircuit*, char**, INPtables*, CKTnode**);

View File

@ -120,6 +120,7 @@ enum {
OPT_XMU,
OPT_INDVERBOSITY,
OPT_EPSMIN,
OPT_CSHUNT,
};
#ifdef XSPICE

View File

@ -51,6 +51,7 @@ struct TSKtask {
#endif /* NEWTRUNC */
double TSKgmin;
double TSKgshunt; /* shunt conductance (CKTdiagGmin) */
double TSKcshunt; /* shunt capacitor to ground */
double TSKdelmin;
double TSKtrtol;
double TSKdefaultMosM;

View File

@ -71,6 +71,7 @@ CKTdoJob(CKTcircuit *ckt, int reset, TSKtask *task)
ckt->CKTvoltTol = task->TSKvoltTol;
ckt->CKTgmin = task->TSKgmin;
ckt->CKTgshunt = task->TSKgshunt;
ckt->CKTcshunt = task->TSKcshunt;
ckt->CKTdelmin = task->TSKdelmin;
ckt->CKTtrtol = task->TSKtrtol;
#ifdef XSPICE

View File

@ -86,6 +86,7 @@ CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr)
/* use the application defaults */
tsk->TSKgmin = 1e-12;
tsk->TSKgshunt = 0;
tsk->TSKcshunt = -1;
tsk->TSKabstol = 1e-12;
tsk->TSKreltol = 1e-3;
tsk->TSKchgtol = 1e-14;

View File

@ -172,6 +172,9 @@ CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val)
case OPT_EPSMIN:
task->TSKepsmin = val->rValue;
break;
case OPT_CSHUNT:
task->TSKcshunt = val->rValue;
break;
/* gtri - begin - wbk - add new options */
#ifdef XSPICE
case OPT_EVT_MAX_OP_ALTER:
@ -238,6 +241,7 @@ static IFparm OPTtbl[] = {
{ "rshunt", OPT_ENH_RSHUNT, IF_SET|IF_REAL, "Shunt resistance from analog nodes to ground" },
/* gtri - end - wbk - add new options */
#endif
{ "cshunt", OPT_CSHUNT, IF_SET|IF_REAL, "Shunt capacitor from analog nodes to ground" },
{ "noopiter", OPT_NOOPITER,IF_SET|IF_FLAG,"Go directly to gmin stepping" },
{ "gmin", OPT_GMIN,IF_SET|IF_REAL,"Minimum conductance" },
{ "gshunt", OPT_GSHUNT,IF_SET|IF_REAL,"Shunt conductance" },

View File

@ -1336,6 +1336,7 @@
<ClInclude Include="..\src\spicelib\parser\inppas1.h" />
<ClInclude Include="..\src\spicelib\parser\inppas2.h" />
<ClInclude Include="..\src\spicelib\parser\inppas3.h" />
<ClInclude Include="..\src\spicelib\parser\inppas4.h" />
<ClInclude Include="..\src\spicelib\parser\inpxx.h" />
<ClInclude Include="..\src\winmain.h" />
<ClInclude Include=".\src\include\inttypes.h" />
@ -2655,6 +2656,7 @@
<ClCompile Include="..\src\spicelib\parser\inppas1.c" />
<ClCompile Include="..\src\spicelib\parser\inppas2.c" />
<ClCompile Include="..\src\spicelib\parser\inppas3.c" />
<ClCompile Include="..\src\spicelib\parser\inppas4.c" />
<ClCompile Include="..\src\spicelib\parser\inppname.c" />
<ClCompile Include="..\src\spicelib\parser\inpptree.c" />
<ClCompile Include="..\src\spicelib\parser\inpsymt.c" />