diff --git a/src/frontend/inp.c b/src/frontend/inp.c
index 4bb004986..d04bbbaed 100644
--- a/src/frontend/inp.c
+++ b/src/frontend/inp.c
@@ -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 === ""
diff --git a/src/include/ngspice/cktdefs.h b/src/include/ngspice/cktdefs.h
index dd4686507..8cc4376f7 100644
--- a/src/include/ngspice/cktdefs.h
+++ b/src/include/ngspice/cktdefs.h
@@ -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 */
diff --git a/src/include/ngspice/inpdefs.h b/src/include/ngspice/inpdefs.h
index a391d1a94..40c9f5494 100644
--- a/src/include/ngspice/inpdefs.h
+++ b/src/include/ngspice/inpdefs.h
@@ -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**);
diff --git a/src/include/ngspice/optdefs.h b/src/include/ngspice/optdefs.h
index 524dc5ef8..1bce23e77 100644
--- a/src/include/ngspice/optdefs.h
+++ b/src/include/ngspice/optdefs.h
@@ -120,6 +120,7 @@ enum {
OPT_XMU,
OPT_INDVERBOSITY,
OPT_EPSMIN,
+ OPT_CSHUNT,
};
#ifdef XSPICE
diff --git a/src/include/ngspice/tskdefs.h b/src/include/ngspice/tskdefs.h
index 1bba643ef..bc4d420fc 100644
--- a/src/include/ngspice/tskdefs.h
+++ b/src/include/ngspice/tskdefs.h
@@ -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;
diff --git a/src/spicelib/analysis/cktdojob.c b/src/spicelib/analysis/cktdojob.c
index 5c87b2101..10c33d3ca 100644
--- a/src/spicelib/analysis/cktdojob.c
+++ b/src/spicelib/analysis/cktdojob.c
@@ -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
diff --git a/src/spicelib/analysis/cktntask.c b/src/spicelib/analysis/cktntask.c
index cb56373a3..ec7b8e5e6 100644
--- a/src/spicelib/analysis/cktntask.c
+++ b/src/spicelib/analysis/cktntask.c
@@ -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;
diff --git a/src/spicelib/analysis/cktsopt.c b/src/spicelib/analysis/cktsopt.c
index 17db13d3b..1a36fb7bb 100644
--- a/src/spicelib/analysis/cktsopt.c
+++ b/src/spicelib/analysis/cktsopt.c
@@ -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" },
diff --git a/visualc/vngspice.vcxproj b/visualc/vngspice.vcxproj
index 056d32512..4b8871115 100644
--- a/visualc/vngspice.vcxproj
+++ b/visualc/vngspice.vcxproj
@@ -1336,6 +1336,7 @@
+
@@ -2655,6 +2656,7 @@
+