From 40e3d4bf95a8a87c16fd25f563d5eda987cdbbc2 Mon Sep 17 00:00:00 2001 From: h_vogt Date: Sat, 23 Jul 2016 14:44:58 +0200 Subject: [PATCH] examples/various: tests and loops using alterparam --- examples/various/3d_loop.sp | 179 +++++++++++++++++++++++++++++++++ examples/various/alterparam.sp | 39 +++++++ examples/various/dc_loop.sp | 48 +++++++++ 3 files changed, 266 insertions(+) create mode 100644 examples/various/3d_loop.sp create mode 100644 examples/various/alterparam.sp create mode 100644 examples/various/dc_loop.sp diff --git a/examples/various/3d_loop.sp b/examples/various/3d_loop.sp new file mode 100644 index 000000000..5f64efd10 --- /dev/null +++ b/examples/various/3d_loop.sp @@ -0,0 +1,179 @@ +testing loops +*variables are global +*vector reside only in the plot where they where created + +.param rr = 10k + +R1 r2 0 r = {rr + 40*TEMPER} +V1 r2 0 1 + +.control +*create a new plot as our base plot +setplot new +set curplottitle = "crossplot" +set plotname=$curplot + +let aa = 5 +let bb = 3 +let cc = 6 +set aa="$&aa" +set bb="$&bb" +set cc="$&cc" + +* generate vector with all (here 90) elements +let result=vector(90) +settype current result +* reshape vector to format 5 x 3 x 6 +*reshape result [5][3][6] +reshape result [$aa][$bb][$cc] + +* vector to store temperature +let tvect=vector(5) +* vector to store voltage +let vvect=vector(6) +* vector to store parameter values +let pvect=vector(3) + +*index for storing in vectors tvect and result + +let indexp = 0 + +foreach pvar 9.5k 10k 10.5k + let indexv = 0 + alterparam rr = $pvar + let pvect[indexp] = $pvar + mc_source + foreach var -40 -20 0 20 40 + set temp = $var + dc v1 0 5 1 + *store name of the actual dc plot + set dcplotname = $curplot + * back to the base plot + setplot $plotname + let result[indexv][indexp] = {$dcplotname}.v1#branch + let tvect[indexv] = $var + if indexv = 0 + let vvect = {$dcplotname}.r2 + end + let indexv = indexv + 1 +* destroy $dcplotname + end + let indexp = indexp + 1 + remcirc +end + +settype voltage vvect +setscale vvect + +let indexplot = 0 +while indexplot < indexp +*plot result[0][indexplot] result[1][indexplot] result[2][indexplot] result[3][indexplot] result[4][indexplot] +let indexplot = indexplot + 1 +end + + +plot ++result[0][0] result[1][0] result[2][0] result[3][0] result[4][0] ++result[0][1] result[1][1] result[2][1] result[3][1] result[4][1] ++result[0][2] result[1][2] result[2][2] result[3][2] result[4][2] + +write 3d_loop_i_vs_v.out ++result[0][0] result[1][0] result[2][0] result[3][0] result[4][0] ++result[0][1] result[1][1] result[2][1] result[3][1] result[4][1] ++result[0][2] result[1][2] result[2][2] result[3][2] result[4][2] + +*transpoe a 3D vector +let aai = 0 +let bbi = 0 +let cci = 0 +let result1 = vector(90) +settype current result1 +* reshape vector to format 3 x 6 x 5 +reshape result1 [$bb][$cc][$aa] + +* shift from vector format 5 x 3 x 6 to 3 x 6 x 5 +*echo test output > resultout.txt +while aai < aa + let bbi = 0 + while bbi < bb + let cci = 0 + while cci < cc + let result1[bbi][cci][aai] = result[aai][bbi][cci] +* print bbi cci aai >> resultout.txt +* print result1[bbi][cci][aai] >> resultout.txt + let cci = cci + 1 + end + let bbi = bbi + 1 + end + let aai = aai + 1 +end + +settype temp-sweep tvect +setscale tvect + +* current through v1 versus temperature +plot ++result1[0][0] result1[1][0] result1[2][0] ++result1[0][1] result1[1][1] result1[2][1] ++result1[0][2] result1[1][2] result1[2][2] ++result1[0][3] result1[1][3] result1[2][3] ++result1[0][4] result1[1][4] result1[2][4] ++result1[0][5] result1[1][5] result1[2][5] + +write 3d_loop_i_vs_t.out ++result1[0][0] result1[1][0] result1[2][0] ++result1[0][1] result1[1][1] result1[2][1] ++result1[0][2] result1[1][2] result1[2][2] ++result1[0][3] result1[1][3] result1[2][3] ++result1[0][4] result1[1][4] result1[2][4] ++result1[0][5] result1[1][5] result1[2][5] + +*plot result1 + +*transpoe a 3D vector +let aai = 0 +let bbi = 0 +let cci = 0 +let result2 = vector(90) +settype current result2 +* reshape vector to format 6 x 5 x 3 +reshape result2 [$cc][$aa][$bb] + +* shift from vector format 3 x 6 x 5 to 6 x 5 x 3 +*echo test output > resultout.txt +while aai < aa + let bbi = 0 + while bbi < bb + let cci = 0 + while cci < cc + let result2[cci][aai][bbi] = result1[bbi][cci][aai] +* print cci aai bbi >> resultout.txt +* print result2[cci][aai][bbi] >> resultout.txt + let cci = cci + 1 + end + let bbi = bbi + 1 + end + let aai = aai + 1 +end + +settype impedance pvect +setscale pvect + +* current through v1 versus parameter rr +plot ++result2[0][0] result2[1][0] result2[2][0] result2[3][0] result2[4][0] result2[5][0] ++result2[0][1] result2[1][1] result2[2][1] result2[3][1] result2[4][1] result2[5][1] ++result2[0][2] result2[1][2] result2[2][2] result2[3][2] result2[4][2] result2[5][2] ++result2[0][3] result2[1][3] result2[2][3] result2[3][3] result2[4][3] result2[5][3] ++result2[0][4] result2[1][4] result2[2][4] result2[3][4] result2[4][4] result2[5][4] + +write 3d_loop_i_vs_para.out ++result2[0][0] result2[1][0] result2[2][0] result2[3][0] result2[4][0] result2[5][0] ++result2[0][1] result2[1][1] result2[2][1] result2[3][1] result2[4][1] result2[5][1] ++result2[0][2] result2[1][2] result2[2][2] result2[3][2] result2[4][2] result2[5][2] ++result2[0][3] result2[1][3] result2[2][3] result2[3][3] result2[4][3] result2[5][3] ++result2[0][4] result2[1][4] result2[2][4] result2[3][4] result2[4][4] result2[5][4] + +.endc + +.end diff --git a/examples/various/alterparam.sp b/examples/various/alterparam.sp new file mode 100644 index 000000000..cfd32e0cc --- /dev/null +++ b/examples/various/alterparam.sp @@ -0,0 +1,39 @@ +*test alterparam +.param vv = 1 +.param rr = 'vv + 1' + +R1 1 0 {rr + 1} +v1 1 0 1 + +.subckt subr in out rint1 = 10 + .param rint = 5 + .param rint2 = 99 + R0 in out 'rint' + R1 in out 'rint1' + R2 in out 'rint2' +.ends + +Xr 2 0 subr rint = 7 rint1 = 15 +v2 2 0 1 + +.control +op +print v1#branch v2#branch +echo +listing expand +remcirc +alterparam vv = 2 +mc_source +op +print v1#branch v2#branch +echo +listing expand +alterparam subr rint = 11 +mc_source +op +print v1#branch v2#branch +echo +listing expand +.endc + +.end diff --git a/examples/various/dc_loop.sp b/examples/various/dc_loop.sp new file mode 100644 index 000000000..195115930 --- /dev/null +++ b/examples/various/dc_loop.sp @@ -0,0 +1,48 @@ +testing loops +*variables are global +*vector reside only in the plot where they where created + +R1 r2 0 r = {5k + 50*TEMPER} +V1 r2 0 1 + +.control +*create a new plot as our base plot +setplot new +set curplottitle = "crossplot" +set plotname=$curplot + +* generate vector with all (here 30) elements +let result=vector(30) +* reshape vector to format 5 x 6 +reshape result [5][6] +* vector to store temperature +let tvect=vector(5) + +*index for storing in vectors tvect and result +let index = 0 + +foreach var -40 -20 0 20 40 + set temp = $var + dc v1 0 5 1 + *store name of the actual dc plot + set dcplotname = $curplot + * back to the base plot + setplot $plotname + let result[index] = {$dcplotname}.v1#branch + let tvect[index] = $var + settype current result + let index = index + 1 + destroy $dcplotname +end + +settype temp-sweep tvect +setscale tvect + +transpose result + +plot result +write dc_loop.out result[0] result[1] result[2] result[3] result[4] result[5] + +.endc + +.end