summaryrefslogtreecommitdiff
path: root/Windows/spice/examples/tclspice/tcl-testbench3/tcl-testbench3.sh
diff options
context:
space:
mode:
authorrahulp132020-03-03 05:31:58 +0530
committerrahulp132020-03-03 05:31:58 +0530
commitdfc268e0863c913a1b8726cd54eea3b40caf7c67 (patch)
tree1cd82634684da5ae86b558d44756189e080545d4 /Windows/spice/examples/tclspice/tcl-testbench3/tcl-testbench3.sh
parentfd62c52150c7d1f81da8060b2f5db6b94d174ccf (diff)
downloadeSim-dfc268e0863c913a1b8726cd54eea3b40caf7c67.tar.gz
eSim-dfc268e0863c913a1b8726cd54eea3b40caf7c67.tar.bz2
eSim-dfc268e0863c913a1b8726cd54eea3b40caf7c67.zip
upgrade ngspice to v31
Diffstat (limited to 'Windows/spice/examples/tclspice/tcl-testbench3/tcl-testbench3.sh')
-rw-r--r--Windows/spice/examples/tclspice/tcl-testbench3/tcl-testbench3.sh125
1 files changed, 125 insertions, 0 deletions
diff --git a/Windows/spice/examples/tclspice/tcl-testbench3/tcl-testbench3.sh b/Windows/spice/examples/tclspice/tcl-testbench3/tcl-testbench3.sh
new file mode 100644
index 00000000..e440d8d1
--- /dev/null
+++ b/Windows/spice/examples/tclspice/tcl-testbench3/tcl-testbench3.sh
@@ -0,0 +1,125 @@
+#!/bin/sh
+# -*- mode: tcl -*- \
+ exec wish -f "$0" ${1+"$@"}
+
+package require BLT
+load ../../../src/.libs/libspice.so
+source differentiate.tcl
+spice::codemodel ../../../src/xspice/icm/spice2poly/spice2poly.cm
+proc temperatures_calc {temp_inf temp_sup points} {
+ set tstep [ expr " ( $temp_sup - $temp_inf ) / $points " ]
+ set t $temp_inf
+ set temperatures ""
+ for { set i 0 } { $i < $points } { incr i } {
+ set t [ expr { $t + $tstep } ]
+ set temperatures "$temperatures $t"
+ }
+ return $temperatures
+}
+
+proc thermistance_calc { res B points } {
+ set tzero 273.15
+ set tref 25
+ set thermistance ""
+ foreach t $points {
+ set res_temp [expr " $res * exp ( $B * ( 1 / ($tzero + $t) - 1 / ( $tzero + $tref ) ) ) " ]
+ set thermistance "$thermistance $res_temp"
+ }
+ return $thermistance
+}
+
+proc tref_calc { points } {
+ set tref ""
+ foreach t $points {
+ set tref " $tref [ expr " 6 * (2.275-0.005*($t - 20) ) - 9 " ] "
+ }
+ return $tref
+}
+
+proc iteration { t } {
+ set tzero 273.15
+ spice::alter r11=[ thermistance_calc 10000 3900 $t ]
+ #spice::set temp = [ expr " $tzero + $t " ]
+ spice::op
+ spice::vectoblt vref_temp tref_tmp
+ spice::destroy all
+ return [ tref_tmp range 0 0 ]
+}
+
+proc cost_square { r10 r12 } {
+ tref_blt length 0
+
+ spice::alter r10=$r10
+ spice::alter r12=$r12
+
+ foreach point [ temperatures_blt range 0 [ expr " [temperatures_blt length ] - 1" ] ] {
+ tref_blt append [ iteration $point ]
+ }
+
+ set result [ blt::vector expr " sum(( tref_blt - expected_blt )^2 )" ]
+ puts "result square : r10 = $r10 r12 = $r12 gives $result"
+
+ return $result
+}
+
+proc cost_sup { r10 r12 } {
+ tref_blt length 0
+
+ spice::alter r10=$r10
+ spice::alter r12=$r12
+
+ foreach point [ temperatures_blt range 0 [ expr " [temperatures_blt length ] - 1" ] ] {
+ tref_blt append [ iteration $point ]
+ }
+
+ set result [ blt::vector expr " max(sqrt(( tref_blt - expected_blt )^2 ))" ]
+ puts "result sup : $result"
+ puts "result sup : r10 = $r10 r12 = $r12 gives $result"
+
+ return $result
+}
+
+proc disp_curve { r10 r12 } {
+.g configure -title "Valeurs optimales: R10 = $r10 R12 = $r12"
+}
+
+#
+# Optimisation
+#
+
+blt::vector create tref_tmp
+blt::vector create tref_blt
+blt::vector create expected_blt
+blt::vector create temperatures_blt
+temperatures_blt append [ temperatures_calc -25 75 30 ]
+expected_blt append [ tref_calc [temperatures_blt range 0 [ expr " [ temperatures_blt length ] - 1" ] ] ]
+blt::graph .g
+pack .g -side top -fill both -expand true
+.g element create real -pixels 4 -xdata temperatures_blt -ydata tref_blt
+.g element create expected -fill red -pixels 0 -dashes dot -xdata temperatures_blt -ydata expected_blt
+
+spice::source FB14.cir
+# point1 max iteration is the last argument
+set r10r12 [ ::math::optimize::minimumSteepestDescent cost_square { 10000 10000 } 1.9 20 ]
+puts "$r10r12 "
+regexp {([0-9.]*) ([0-9.]*)} $r10r12 r10r12 r10 r12
+puts "result square with : r10 = $r10 r12 = $r12 "
+set r10r12 [ ::math::optimize::minimumSteepestDescent cost_sup " $r10 $r12 " 0.05 20 ]
+puts "$r10r12 "
+regexp {([0-9.]*) ([0-9.]*)} $r10r12 r10r12 r10 r12
+puts "result sup with : r10 = $r10 r12 = $r12 "
+
+
+#
+# Results
+#
+
+
+spice::alter r10=$r10
+spice::alter r12=$r12
+foreach point [ temperatures_blt range 0 [ expr " [temperatures_blt length ] - 1" ] ] {
+ tref_blt append [ iteration $point ]
+}
+disp_curve $r10 $r12
+
+