Mercurial > ~darius > hgwebdir.cgi > pa
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 |
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) |