69 lines
1.4 KiB
Plaintext
69 lines
1.4 KiB
Plaintext
* test "sens dc"
|
|
|
|
* The "sens" analysis does express "sensitivity" as
|
|
* S = (d out) / (d parameter)
|
|
* instead of the normalized
|
|
* S = ((d out)/out) / ((d parameter)/parameter)
|
|
*
|
|
* here:
|
|
* v(1) = (R / m_R) * (m_i1 * i1)
|
|
*
|
|
* S[R] = (d v(1))/(d R) = m_i1 * i1 / m_R = 42m
|
|
* S[i1] = (d v(1))/(d i1) = m_i1 * R1 / m_R = 1k
|
|
* S[m_R] = (d v(1))/(d m_R) = -R * i1 *m_i1/m_R^2 = -42
|
|
* S[m_i1] = (d v(1))/(d m_i1) = R * i1 / m_R = 42
|
|
|
|
i1 0 1 dc=42mA
|
|
r1 1 0 1k
|
|
|
|
.control
|
|
|
|
* express our "golden" expectations:
|
|
setplot new
|
|
set gold = $curplot
|
|
let i1 = 1k
|
|
let i1_m = 42.0
|
|
let r1 = 42m
|
|
let r1_m = -42.0
|
|
let r1_scale = 42.0
|
|
|
|
* run a "sens" analysis
|
|
sens v(1) dc
|
|
|
|
strcmp __flag $curplot $gold
|
|
if $__flag = 0
|
|
echo "ERROR: sens failed to execute"
|
|
quit 1
|
|
end
|
|
|
|
* compare results with "golden" expectation
|
|
|
|
define mismatch(a,b,err) abs(a-b)>err*abs(b)
|
|
|
|
let total_count = 0
|
|
let fail_count = 0
|
|
|
|
foreach n i1 i1_m r1 r1_m r1_scale
|
|
set n_test = "$n"
|
|
set n_gold = "{$gold}.$n"
|
|
if mismatch($n_test, $n_gold, 1e-3)
|
|
let s_test = $n_test
|
|
let s_gold = $n_gold
|
|
echo "ERROR, test failure, s[$n] = $&s_test but should be $&s_gold"
|
|
let fail_count = fail_count + 1
|
|
end
|
|
let total_count = total_count + 1
|
|
end
|
|
|
|
if fail_count > 0
|
|
echo "ERROR: $&fail_count of $&total_count tests failed"
|
|
quit 1
|
|
else
|
|
echo "INFO: $&fail_count of $&total_count tests failed"
|
|
quit 0
|
|
end
|
|
|
|
.endc
|
|
|
|
.end
|