spice2g6 allows to omit the poly(n) statement, if the
polynomial is one-dimensional (n==1). For compatibility with the XSPIXE code, we have to add poly(1) appropriately.
This commit is contained in:
parent
60dfe836f4
commit
602baf68e6
|
|
@ -194,7 +194,9 @@ struct inp_read_t inp_read( FILE *fp, int call_depth, const char *dir_name,
|
|||
bool comfile, bool intfile);
|
||||
|
||||
|
||||
#ifndef XSPICE
|
||||
#ifdef XSPICE
|
||||
static void inp_poly_2g6_compat(struct card* deck);
|
||||
#else
|
||||
static void inp_poly_err(struct card *deck);
|
||||
#endif
|
||||
|
||||
|
|
@ -679,8 +681,10 @@ struct card *inp_readall(FILE *fp, const char *dir_name,
|
|||
|
||||
if (cp_getvar("addcontrol", CP_BOOL, NULL, 0))
|
||||
inp_add_control_section(working, &rv.line_number);
|
||||
#ifndef XSPICE
|
||||
inp_poly_err(working);
|
||||
#ifdef XSPICE
|
||||
inp_poly_2g6_compat(working);
|
||||
#else
|
||||
inp_poly_err();
|
||||
#endif
|
||||
/* a preliminary fix: if ps is enabled, .dc TEMP -15 75 5 will
|
||||
have been modified to .dc (TEMPER) -15 75 5. So we repair it here. */
|
||||
|
|
@ -8873,3 +8877,94 @@ static void inp_repair_dc_ps(struct card* deck) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef XSPICE
|
||||
/* spice2g6 allows to omit the poly(n) statement, if the
|
||||
polynomial is one-dimensional (n==1).
|
||||
For compatibility with the XSPIXE code, we have to add poly(1) appropriately. */
|
||||
static void inp_poly_2g6_compat(struct card* deck) {
|
||||
struct card* card;
|
||||
int skip_control = 0;
|
||||
|
||||
for (card = deck; card; card = card->nextcard) {
|
||||
char* curr_line = card->line;
|
||||
char* thisline = curr_line;
|
||||
|
||||
/* exclude any command inside .control ... .endc */
|
||||
if (ciprefix(".control", curr_line)) {
|
||||
skip_control++;
|
||||
continue;
|
||||
}
|
||||
else if (ciprefix(".endc", curr_line)) {
|
||||
skip_control--;
|
||||
continue;
|
||||
}
|
||||
else if (skip_control > 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
switch (*thisline) {
|
||||
case 'h':
|
||||
case 'g':
|
||||
case 'e':
|
||||
case 'f':
|
||||
curr_line = nexttok(curr_line);
|
||||
curr_line = nexttok(curr_line);
|
||||
curr_line = nexttok(curr_line);
|
||||
/* exclude all of the following fourth tokens */
|
||||
if (ciprefix("poly", curr_line))
|
||||
continue;
|
||||
if (ciprefix("value", curr_line))
|
||||
continue;
|
||||
if (ciprefix("vol", curr_line))
|
||||
continue;
|
||||
if (ciprefix("table", curr_line))
|
||||
continue;
|
||||
if (ciprefix("laplace", curr_line))
|
||||
continue;
|
||||
if (ciprefix("cur", curr_line))
|
||||
continue;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
/* go beyond the usual nodes and sources */
|
||||
switch (*thisline) {
|
||||
case 'g':
|
||||
case 'e':
|
||||
curr_line = nexttok(curr_line);
|
||||
curr_line = nexttok(curr_line);
|
||||
curr_line = nexttok(curr_line);
|
||||
if (*curr_line == '\0')
|
||||
continue;
|
||||
break;
|
||||
case 'f':
|
||||
case 'h':
|
||||
curr_line = nexttok(curr_line);
|
||||
curr_line = nexttok(curr_line);
|
||||
if (*curr_line == '\0')
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
/* finish if these end tokens are found */
|
||||
if (ciprefix("ic=", curr_line)) {
|
||||
continue;
|
||||
}
|
||||
if (ciprefix("m=", curr_line)) {
|
||||
continue;
|
||||
}
|
||||
/* this now seems to be a spice2g6 poly one-dimensional source */
|
||||
/* insert poly(1) as the fourth token */
|
||||
curr_line = nexttok(thisline);
|
||||
curr_line = nexttok(curr_line);
|
||||
curr_line = nexttok(curr_line);
|
||||
char *endofline = copy(curr_line);
|
||||
*curr_line = '\0';
|
||||
char* newline = tprintf("%s poly(1) %s", thisline, endofline);
|
||||
tfree(card->line);
|
||||
card->line = newline;
|
||||
tfree(endofline);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue