diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 5341133a2..27a4b0f93 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -4221,7 +4221,7 @@ inp_compat(struct card *card) { char *str_ptr, *cut_line, *title_tok, *node1, *node2; char *out_ptr, *exp_ptr, *beg_ptr, *end_ptr, *copy_ptr, *del_ptr; - char *xline; + char *xline, *x2line, *x3line, *x4line; size_t xlen, i, pai = 0, paui = 0, ii; char *ckt_array[100]; @@ -4714,12 +4714,36 @@ inp_compat(struct card *card) 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); } 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); } 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); } tc1_ptr = NULL; tc2_ptr = NULL; @@ -4728,6 +4752,11 @@ 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) { + card = insert_new_line(card, x2line, 0, 0); + card = insert_new_line(card, x3line, 0, 0); + card = insert_new_line(card, x4line, 0, 0); + } tfree(title_tok); tfree(node1); diff --git a/tmp-noise.cir b/tmp-noise.cir new file mode 100644 index 000000000..b43e5694d --- /dev/null +++ b/tmp-noise.cir @@ -0,0 +1,33 @@ +* (exec-spice "ngspice %s" t) + +v1 1 0 dc 2 ac 1 +v2 200 0 dc=1 + +R1 1 2 1k +R2 2 0 1k tc1=0.001 $ tc2=1e-5 + +R10 1 20 1k +R20 20 0 '1k*v(200)' tc1=0.001 $ tc2=1e-5 + +.temp 127.0 + +.control +listing e + +op +let gold = 2/(1+1000/1100) +print v(2) v(20) gold + +noise v(2) v1 dec 1 1kHz 1kHz +let r = 1/(1/1000 + 1/1100) +let gold = sqrt(4*boltz*(273.15+127.0)*r) +print all gold + +noise v(20) v1 dec 1 1kHz 1kHz +print all + +ac dec 1 1kHz 1kHz +let gold = 1/(1+1000/1100) +print v(2) v(20) gold + +.endc