remove memory leak in noise selection for behavioral r

This commit is contained in:
Holger Vogt 2018-11-23 23:49:11 +01:00
parent 6335c271b2
commit ee843a4c2c
1 changed files with 37 additions and 26 deletions

View File

@ -4983,41 +4983,52 @@ inp_compat(struct card *card)
}
}
}
/* white noise model by x2line, x3line, x4line
if instance parameter noisy=0 is set, noise calculation is skipped */
if instance parameter noisy=1 is set */
bool rnoise = FALSE;
if(strstr(cut_line, "noisy=1"))
rnoise = TRUE;
if ((tc1_ptr == NULL) && (tc2_ptr == NULL)) {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s)", title_tok, node1, node2,
node1, node2, equation);
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0",
title_tok, title_tok);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
if(rnoise){
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0",
title_tok, title_tok);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
}
} else if (tc2_ptr == NULL) {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e reciproctc=1", title_tok, node1, node2,
node1, node2, equation, tc1);
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e",
title_tok, title_tok, tc1);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
if(rnoise) {
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e",
title_tok, title_tok, tc1);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
}
} else {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e tc2=%15.8e reciproctc=1", title_tok, node1, node2,
node1, node2, equation, tc1, tc2);
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e tc2=%15.8e",
title_tok, title_tok, tc1, tc2);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
if(rnoise) {
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e tc2=%15.8e",
title_tok, title_tok, tc1, tc2);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
}
}
tc1_ptr = NULL;
tc2_ptr = NULL;
@ -5026,7 +5037,7 @@ inp_compat(struct card *card)
*(card->line) = '*';
// insert new B source line immediately after current line
card = insert_new_line(card, xline, 0, 0);
if (x2line && strstr(cut_line, "noisy=1")) {
if (rnoise) {
card = insert_new_line(card, x2line, 0, 0);
card = insert_new_line(card, x3line, 0, 0);
card = insert_new_line(card, x4line, 0, 0);