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,11 +4983,17 @@ inp_compat(struct card *card)
} }
} }
} }
/* white noise model by x2line, x3line, x4line /* 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)) { if ((tc1_ptr == NULL) && (tc2_ptr == NULL)) {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s)", title_tok, node1, node2, xline = tprintf("b%s %s %s i = v(%s, %s)/(%s)", title_tok, node1, node2,
node1, node2, equation); node1, node2, equation);
if(rnoise){
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)", x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2, title_tok, node1, node2,
title_tok, title_tok,
@ -4996,9 +5002,11 @@ inp_compat(struct card *card)
title_tok, title_tok); title_tok, title_tok);
x4line = tprintf("v%s_3 %s_3 0 0", x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok); title_tok, title_tok);
}
} else if (tc2_ptr == NULL) { } 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, xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e reciproctc=1", title_tok, node1, node2,
node1, node2, equation, tc1); node1, node2, equation, tc1);
if(rnoise) {
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)", x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2, title_tok, node1, node2,
title_tok, title_tok,
@ -5007,9 +5015,11 @@ inp_compat(struct card *card)
title_tok, title_tok, tc1); title_tok, title_tok, tc1);
x4line = tprintf("v%s_3 %s_3 0 0", x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok); title_tok, title_tok);
}
} else { } else {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e tc2=%15.8e reciproctc=1", title_tok, node1, node2, 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); node1, node2, equation, tc1, tc2);
if(rnoise) {
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)", x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2, title_tok, node1, node2,
title_tok, title_tok,
@ -5019,6 +5029,7 @@ inp_compat(struct card *card)
x4line = tprintf("v%s_3 %s_3 0 0", x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok); title_tok, title_tok);
} }
}
tc1_ptr = NULL; tc1_ptr = NULL;
tc2_ptr = NULL; tc2_ptr = NULL;
@ -5026,7 +5037,7 @@ inp_compat(struct card *card)
*(card->line) = '*'; *(card->line) = '*';
// insert new B source line immediately after current line // insert new B source line immediately after current line
card = insert_new_line(card, xline, 0, 0); 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, x2line, 0, 0);
card = insert_new_line(card, x3line, 0, 0); card = insert_new_line(card, x3line, 0, 0);
card = insert_new_line(card, x4line, 0, 0); card = insert_new_line(card, x4line, 0, 0);