Create extra name derived from node name, but with / replaced by _,

to become part of the new voltage source name: avoid names
which are not parsed correctly by the B source equation parser.
This commit is contained in:
Holger Vogt 2024-11-24 14:34:59 +01:00
parent a45c1500a6
commit 7d59ad2db7
1 changed files with 12 additions and 3 deletions

View File

@ -1376,13 +1376,21 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn
}
char* begstr = copy_substring(tmpcard->line, instline);
char* strnode1 = gettok(&instline);
char* newnode = tprintf("probe_int_%s_%s_%d", strnode1, instname, nodenum);
/* node name becomes part of a new v-source name, don't allow / in node name (aka /VT).
Replace by _ (_VT).
Otherwise the B source function parser fails with i() not found. */
char* strnode1name = copy(strnode1);
if (strnode1name[0] == '/')
strnode1name[0] = '_';
char* newnode = tprintf("probe_int_%s_%s_%d", strnode1name, instname, nodenum);
char nodenumstr[3];
char *nodename1 = get_terminal_name(instname, itoa10(nodenum, nodenumstr), instances);
if (!nodename1) {
tfree(begstr);
tfree(strnode1);
tfree(strnode1name);
ds_free(&BVrefline);
ds_free(&Bpowerline);
ds_free(&Bpowersave);
@ -1391,7 +1399,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn
newline = tprintf("%s %s %s", begstr, newnode, instline);
char* vline = tprintf("vcurr_%s:probe_int_%s:%s_%s %s %s 0", instname, nodename1, nodenumstr, strnode1, strnode1, newnode);
char* vline = tprintf("vcurr_%s:probe_int_%s:%s_%s %s %s 0", instname, nodename1, nodenumstr, strnode1name, strnode1, newnode);
tfree(tmpcard->line);
tmpcard->line = newline;
@ -1423,7 +1431,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn
cadd(&Bpowerline, ':');
sadd(&Bpowerline, nodenumstr);
cadd(&Bpowerline, '_');
sadd(&Bpowerline, strnode1);
sadd(&Bpowerline, strnode1name);
cadd(&Bpowerline, ')');
allsaves = wl_cons(copy(ds_get_buf(&Bpowersave)), allsaves);
@ -1431,6 +1439,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn
tfree(begstr);
tfree(strnode1);
tfree(strnode1name);
tfree(newnode);
tfree(nodename1);
}