ngspice/src/frontend/com_option.c

122 lines
3.7 KiB
C
Raw Normal View History

#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "ngspice/ftedefs.h"
#include "ngspice/bool.h"
2001-02-11 21:13:45 +01:00
#include "circuits.h"
#include "ngspice/wordlist.h"
2001-02-11 21:13:45 +01:00
#include "variable.h"
2010-10-16 19:09:46 +02:00
#include "com_option.h"
2001-02-11 21:13:45 +01:00
2010-10-14 11:19:44 +02:00
/* The option command. Syntax is option [opt ...] [opt = val ...].
* Val may be a string, an int, a float, or a list of the
2001-02-11 21:13:45 +01:00
* form (elt1 elt2 ...). */
void
com_option(wordlist *wl)
{
struct variable *vars;
2010-10-14 11:19:44 +02:00
2001-02-11 21:13:45 +01:00
CKTcircuit *circuit = NULL;
2010-10-14 11:19:44 +02:00
2001-02-11 21:13:45 +01:00
if (!ft_curckt) {
fprintf(cp_err, "Error: no circuit loaded\n");
return;
}
2010-10-14 11:19:44 +02:00
2010-07-07 19:26:05 +02:00
circuit = (ft_curckt->ci_ckt);
2010-10-14 11:19:44 +02:00
2001-02-11 21:13:45 +01:00
if (wl == NULL) {
printf("******************************\n");
printf("* Current simulation options *\n");
printf("******************************\n\n");
2010-10-14 11:19:44 +02:00
printf("Temperatures:\n");
2001-02-11 21:13:45 +01:00
printf("temp = %f\n",circuit->CKTtemp);
printf("tnom = %f\n",circuit->CKTnomTemp);
2010-10-14 11:19:44 +02:00
2001-02-11 21:13:45 +01:00
printf("\nIntegration method summary:\n");
switch (circuit->CKTintegrateMethod)
2010-10-14 11:19:44 +02:00
{
case TRAPEZOIDAL:
printf("Integration Method = TRAPEZOIDAL\n");
break;
case GEAR:
printf("Integration Method = GEAR\n");
break;
default:
printf("Unknown integration method\n");
}
2001-02-11 21:13:45 +01:00
printf("MaxOrder = %d\n", circuit->CKTmaxOrder);
2010-10-14 11:19:44 +02:00
2001-02-11 21:13:45 +01:00
printf("\nTolerances (absolute):\n");
2010-10-14 11:19:44 +02:00
printf("abstol (current) = %g\n", circuit->CKTabstol);
printf("chgtol (charge) = %g\n", circuit->CKTchgtol);
printf("vntol (voltage) = %g\n", circuit->CKTvoltTol);
printf("pivtol (pivot) = %g\n", circuit->CKTpivotAbsTol);
2001-02-11 21:13:45 +01:00
printf("\nTolerances (relative):\n");
2010-10-14 11:19:44 +02:00
printf("reltol (current) = %g\n", circuit->CKTreltol);
printf("pivrel (pivot) = %g\n", circuit->CKTpivotRelTol);
2001-02-11 21:13:45 +01:00
2010-10-14 11:19:44 +02:00
printf("\nIteration limits:\n");
printf("ITL1 = %d\n", circuit->CKTdcMaxIter);
printf("ITL2 = %d\n", circuit->CKTdcTrcvMaxIter);
printf("ITL4 = %d\n", circuit->CKTtranMaxIter);
printf("\nTruncation error correction:\n");
2001-02-11 21:13:45 +01:00
printf("trtol = %f\n", circuit->CKTtrtol);
#ifdef NEWTRUNC
2010-10-14 11:19:44 +02:00
printf("ltereltol = %g\n", circuit->CKTlteReltol);
printf("lteabstol = %g\n", circuit->CKTlteAbstol);
2001-02-11 21:13:45 +01:00
#endif /* NEWTRUNC */
2010-10-14 11:19:44 +02:00
printf("\nConductances:\n");
printf("gmin (devices) = %g\n", circuit->CKTgmin);
printf("diaggmin (stepping) = %g\n", circuit->CKTdiagGmin);
printf("gshunt = %g\n", circuit->CKTgshunt);
printf("delmin = %g\n", circuit->CKTdelmin);
2001-02-11 21:13:45 +01:00
printf("\nDefault parameters for MOS devices\n");
2010-10-14 11:19:44 +02:00
printf("Default M: %f\n", circuit->CKTdefaultMosM);
2001-02-11 21:13:45 +01:00
printf("Default L: %f\n", circuit->CKTdefaultMosL);
printf("Default W: %f\n", circuit->CKTdefaultMosW);
printf("Default AD: %f\n", circuit->CKTdefaultMosAD);
printf("Default AS: %f\n", circuit->CKTdefaultMosAS);
2010-10-14 11:19:44 +02:00
2001-02-11 21:13:45 +01:00
return;
}
vars = cp_setparse(wl);
/* This is sort of a hassle... */
2010-10-14 11:19:44 +02:00
while (vars) {
void *s;
2001-02-11 21:13:45 +01:00
switch (vars->va_type) {
2010-10-14 11:19:44 +02:00
case CP_BOOL:
s = &vars->va_bool;
2001-02-11 21:13:45 +01:00
break;
2010-10-14 11:19:44 +02:00
case CP_NUM:
s = &vars->va_num;
2001-02-11 21:13:45 +01:00
break;
2010-10-14 11:19:44 +02:00
case CP_REAL:
s = &vars->va_real;
2001-02-11 21:13:45 +01:00
break;
2010-10-14 11:19:44 +02:00
case CP_STRING:
2001-02-11 21:13:45 +01:00
s = vars->va_string;
break;
2010-10-14 11:19:44 +02:00
case CP_LIST:
s = vars->va_vlist;
2001-02-11 21:13:45 +01:00
break;
2010-10-14 11:19:44 +02:00
default:
s = NULL;
2001-02-11 21:13:45 +01:00
}
2010-10-14 11:19:44 +02:00
2001-02-11 21:13:45 +01:00
/* qui deve settare le opzioni di simulazione */
cp_vset(vars->va_name, vars->va_type, s);
vars = vars->va_next;
}
return;
}