From ee843a4c2c1d874104310278ca8d1bb1fa5b5bac Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Fri, 23 Nov 2018 23:49:11 +0100 Subject: [PATCH] remove memory leak in noise selection for behavioral r --- src/frontend/inpcom.c | 63 +++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 134dcbdcc..5b3aa5ba7 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -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);