annotate sim.py @ 10:2832aefd442c

Add 'no driver' version which can simulate in normal mode. Add Python code to optimise design.
author Daniel O'Connor <darius@dons.net.au>
date Fri, 17 Nov 2023 23:47:05 +1030
parents
children 8d34a9eec184
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
1 import datetime
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
2 import pathlib
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
3 from scipy.optimize import differential_evolution
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
4 from spicelib.simulators.ltspice_simulator import LTspice
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
5 from spicelib.log.ltsteps import LTSpiceLogReader
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
6 from spicelib.editor.spice_editor import SpiceEditor
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
7 #from spicelib.sim.sim_runner import SimRunner
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
8 #import shlex
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
9 import sqlite3
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
10 import subprocess
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
11
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
12 def simulate(src, simexe, simflags, rundir, runname, params):
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
13 src = pathlib.Path(src)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
14 runname = pathlib.Path(runname)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
15 assert(runname.suffix == '.net')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
16 rundir = pathlib.Path(rundir)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
17
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
18 e = SpiceEditor(src)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
19 for k in params:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
20 e.set_parameter(k, params[k])
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
21
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
22 #s = SimRunner(simulator = LTspice, output_folder = 'tmp', verbose = True)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
23 #s.simulator.spice_exe = [simexe]
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
24 #raw_file, log_file = s.run_now(e, run_filename = runname)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
25
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
26 e.write_netlist(rundir / runname)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
27
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
28 cmd = [simexe, '-b']
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 cmd.extend(simflags)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
30 cmd.append(runname.name)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31 #print(' '.join(map(shlex.quote, cmd)))
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
32 then = datetime.datetime.now()
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
33 p = subprocess.Popen(cmd, cwd = rundir)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
34 p.communicate()
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
35 now = datetime.datetime.now()
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
36 taken = now - then
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
37
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
38 if p.returncode != 0:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
39 raise Exception('failed')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
40
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
41 #rawpath = rundir / runname.with_suffix('.raw')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
42 #raw = spicelib.RawRead(rawpath)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
43 logpath = rundir / runname.with_suffix('.log')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
44 log = LTSpiceLogReader(logpath)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
45
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
46 power = log.get_measure_value('pout')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
47 eff = log.get_measure_value('efficiency')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
48 thd = log.fourier['V(rfout)'][0].thd
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
49 ipeak_u2 = log.get_measure_value('ipeak_u2')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
50 ipeak_u5 = log.get_measure_value('ipeak_u5')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
51 ipeak = max(ipeak_u2, ipeak_u5)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
52
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
53 return then, taken, power, eff, thd, ipeak
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
54
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
55
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
56 def fn(v, cur, simexe, simflags, rundir, circ, ctr):
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
57 '''Called by differential_evolution, v contains the evolved parameters, the rest are passed in from the args parameter'.
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
58 Returns the cost value which is being minimised'''
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
59
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
60 # Get parameters for run
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
61 duty, c1, c2, l1, l2 = v
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
62
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
63 cur.execute('SELECT cost, run, power, efficiency, thd, ipeak FROM GAN190 WHERE duty = ? AND c1 = ? AND c2 = ? AND l1 = ? AND l2 = ?', (duty, c1, c2, l1, l2))
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
64 tmp = cur.fetchone()
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
65 if tmp is not None:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
66 cost, run, power, eff, thd, ipeak = tmp
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
67 print(f'Found run {run:3d}: Duty {duty:3.0f}%, C1 {c1:3.0f}pF, C2 {c2:3.0f}pF, L1 {l1:3.0f}uH, L2 {l2:4.0f}nH -> Power: {power:6.1f}W Efficiency: {eff:5.1f}% THD: {thd:5.1f}% IPeak: {ipeak:4.1f}A Cost: {cost:6.2f}')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
68 return cost
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
69
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
70 # Get next run number
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
71 run = next(ctr)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
72
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
73 # Run the simulation
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
74 # Need to convert units to suit
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
75 runname = pathlib.Path(circ).stem + '-' + str(run) + '.net'
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
76 then, taken, power, eff, thd, ipeak = simulate(circ, simexe, simflags, rundir, runname,
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
77 {'dutypct' : duty, 'C1' : c1 * 1e-12, 'C2' : c2 * 1e-12, 'L1' : l1 * 1e-6, 'L2' : l2 * 1e-9})
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
78
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
79 # Calculate the cost
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
80 tpwr = 2000
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
81 tthd = 2
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
82 teff = 90
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
83 imax = 11
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
84
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
85 cost = 0
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
86 if power < tpwr / 2:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
87 cost += 100
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
88 elif power < tpwr:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
89 cost += (tpwr - power) / tpwr / 100
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
90
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
91 if thd > 5 * tthd:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
92 cost += 100
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
93 else:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
94 thdinv = 100 - thd
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
95 tthdinv = 100 - tthd
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
96 if thdinv < tthdinv:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
97 cost += (tthdinv - thdinv) / tthdinv
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
98 if eff < teff:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
99 cost += (teff - eff) / teff
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
100
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
101 if ipeak > imax:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
102 cost += (ipeak - imax) * 2
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
103
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
104 # Log & save the results
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
105 print(f'Run {run:3d}: Duty {duty:3.0f}%, C1 {c1:3.0f}pF, C2 {c2:3.0f}pF, L1 {l1:3.0f}uH, L2 {l2:4.0f}nH -> Power: {power:6.1f}W Efficiency: {eff:5.1f}% THD: {thd:5.1f}% IPeak: {ipeak:4.1f}A Cost: {cost:6.2f}')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
106 taken = taken.seconds + taken.microseconds / 1e6
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
107 cur.execute('INSERT INTO GAN190 (name, run, start, duration, duty, c1, c2, l1, l2, power, efficiency, thd, ipeak, cost) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
108 (runname, run, then, taken, duty, c1, c2, l1, l2, power, eff, thd, ipeak, cost))
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
109 cur.execute('COMMIT')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
110
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
111 return cost
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
112
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
113 def ev():
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
114 # Bounds for parameters
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
115 bounds = [(10, 80),
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
116 (1, 20),
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
117 (10, 300),
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
118 (1, 20),
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
119 (10, 500)]
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
120 # Initial solution
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
121 x0 = [36, 10, 155, 5, 140]
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
122 dbh = sqlite3.connect('results.db')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
123 cur = dbh.cursor()
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
124 cur.execute('''
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
125 CREATE TABLE IF NOT EXISTS GAN190 (
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
126 name TEXT, -- Circuit name
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
127 run INTEGER, -- Run number
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
128 start DATETIME, -- Datetime run started
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
129 duration REAL, -- Length of run (seconds)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
130 duty REAL, -- Duty cyle (%)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
131 c1 REAL, -- Value of C1 (pF)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
132 c2 REAL, -- Value of C2 (pF)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
133 l1 REAL, -- Value of L1 (uH)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
134 l2 REAL, -- Value of L2 (nH)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
135 power REAL, -- Measured power (Watts)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
136 efficiency REAL, -- Measured efficiency (%)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
137 thd REAL, -- Total harmonic distortion (%)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
138 ipeak REAL, -- Peak drain current (A)
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
139 cost REAL -- Calculated cost metric
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
140 );''')
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
141 def ctr():
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
142 i = 0
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
143 while True:
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
144 yield i
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
145 i += 1
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
146 return differential_evolution(fn, bounds, x0 = x0,
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
147 args = (cur, '/Users/oconnd1/bin/runltspice', ['-alt'], 'tmp', 'pa-GAN190-PP-nodriver.net', ctr()),
2832aefd442c Add 'no driver' version which can simulate in normal mode.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
148 integrality = True, disp = True, seed = 12345)