import numpy as np import matplotlib.pyplot as plt import pandas; pandas.set_option('display.max_rows', 5) %matplotlib inline %precision 4 from modelicares.exps.simulators import dymosim model = "ChuaCircuit/dymosim" with dymosim(results_dir='ChuaCircuit', StopTime=2500) as simulator: simulator.run(model, {'L.L': 15}) simulator.run(model, {'L.L': 18}) simulator.run(model, {'L.L': 21}) from modelicares import doe with dymosim(results_dir='ChuaCircuit', StopTime=2500) as simulator: for params in doe.fullfact({'C1.C': [8, 10], 'L.L': [18, 20]}): simulator.run(model, params) from modelicares import SimRes sim = SimRes('ChuaCircuit.mat') sim['Time'].IV sim['Time'].FV Lv = sim['L.v'] dict(description=Lv.description, display_unit=Lv.display_unit, maximum=Lv.max, mean=Lv.mean, minimum=Lv.min, rms=Lv.RMS) Lv.display_unit = 'mV' dict(maximum=Lv.max, mean=Lv.mean, minimum=Lv.min, rms=Lv.RMS) from natu.units import s # The unit second Lv.values(t=(20*s,)) Lv.times(t=(20*s,)) Lv.values(t=2.5*s) Lv.values(t=[2.5*s, 7.5*s, 12.5*s, 17.5*s]) # TODO: return as array t = (None, None, 100) zip(Lv.times(t), Lv.values(t)) x=sim['Ro.R'] 'L.v' in sim len(sim) sim.find('L*v') voltages = sim.find('^[^.]*.v$', re=True) voltages sim(voltages).IV sim.plot(voltages); ax, __ = sim.plot(ynames1='L.v', ylabel1="Voltage", xname='L.i', xlabel="Current", title="Chua circuit\n" "Current through and voltage across the inductor") # Mark the start and stop points. def mark(time, text): i = sim['L.i'].values(time) v = sim['L.v'].values(time) plt.plot(i, v, 'bo') ax.annotate(text, xy=(i, v), xytext=(0, -4), ha='center', va='top', textcoords='offset points') mark(0, "Start") mark(2500, "Stop") ax, __ = sim.plot('L.v', ylabel1="Voltage", f1={"abs(L.v)": lambda x: np.abs(x[0])}, title="Chua circuit\nVoltage across the inductor") # Show the max, mean, and rectified mean. from modelicares import add_hlines Lv = sim['L.v'] add_hlines(ax, [Lv.max(), Lv.mean(), Lv.mean_rectified()], ["max", "mean", "rectified mean"], color='k', linestyle=":") sim.to_pandas(voltages) from modelicares import LinRes lin = LinRes('PID.mat') lin.sys.state_names lin.sys.input_names lin.sys.output_names lin.sys.A lin.bode(); lin.nyquist(freqs=(0.1, 1000)); from modelicares import SimResList, LinResList sims = SimResList('ChuaCircuit/*.mat', 'ChuaCircuit/*/*.mat') print(sims) sims.get_unique_IVs() sims.sort(key=lambda sim: sim['L.L'].value) unique_IVs = sims.get_unique_IVs() unique_IVs print(sims) sims['L.v'].FV label = lambda L: 'w/ L.L = {L} {U}'.format(L=L.value, U=L.unit) for sim in sims: sim.label = label(sim['L.L']) sims.plot('L.v', ylabel1='Voltage', title="Chua circuit\nwith varying inductance"); lins = LinResList('PID/*.mat', 'PID/*/*.mat') print(lins) from os.path import join from modelicares import read_params for lin in lins: lin.label = "Td = %g s" % read_params('Td', join(lin.dirname, 'dsin.txt')) lins.label lins.sort(key=lambda lin: lin.label) lins.label lins.bode(title="Bode plot of PID\n" "with varying differential time constant");