# SIMBA Python Library

SIMBA python library is a Python package which allows the user to manage SIMBA (from circuit creation to simulation and post-processing) with Python scripts. As python syntax is very accessible, no python experience is required to use this library.

# Improve your workflow

Thanks to the impressive number of modules for scientific computing, control and machine learning, python is a powerful tool.

With the SIMBA python library, it allows the user to integrate simba simulations and pre- and post-processing like never before: it can somehow replace the classic user files made with excel or Matlab® that come with the circuit simulation files!

```
# Load required module
from aesim.simba import Design
import matplotlib.pyplot as plt
# Create Design
design = Design()
design.Name = "DC/DC - Buck Converter"
design.TransientAnalysis.TimeStep = 1e-6
design.TransientAnalysis.EndTime = 10e-3
circuit = design.Circuit
# Add devices
V1 = circuit.AddDevice("DC Voltage Source", 2, 6)
V1.Voltage = 50
SW1 =circuit.AddDevice("Controlled Switch", 8, 4)
PWM = circuit.AddDevice("Square Wave", 2, 0)
PWM.Frequency = 5000
PWM.DutyCycle = 0.5
PWM.Amplitude = 1
D1 = circuit.AddDevice("Diode", 16, 9)
D1.RotateLeft()
L1 = circuit.AddDevice("Inductor", 20, 5)
L1.Value = 1E-3
C1 = circuit.AddDevice("Capacitor", 28, 9)
C1.RotateRight()
C1.Value = 100E-6
R1 = circuit.AddDevice("Resistor", 34, 9)
R1.RotateRight()
R1.Value = 5
R1.Name = "R1"
for scope in R1.Scopes:
scope.Enabled = True
g = circuit.AddDevice("Ground", 3, 14)
# Make connections
circuit.AddConnection(V1.P, SW1.P)
circuit.AddConnection(SW1.N, D1.Cathode)
circuit.AddConnection(D1.Cathode, L1.P)
circuit.AddConnection(L1.N, C1.P)
circuit.AddConnection(L1.N, R1.P)
circuit.AddConnection(PWM.Out, SW1.In)
circuit.AddConnection(V1.N, g.Pin)
circuit.AddConnection(D1.Anode, g.Pin)
circuit.AddConnection(C1.N, g.Pin)
circuit.AddConnection(R1.N, g.Pin)
# Run Simulation
job = design.TransientAnalysis.NewJob()
status = job.Run()
# Get results
t = job.TimePoints
Vout = job.GetSignalByName('R1 - Instantaneous Voltage').DataPoints
# Plot Curve
fig, ax = plt.subplots()
ax.set_title(design.Name)
ax.set_ylabel('Vout (V)')
ax.set_xlabel('time (s)')
ax.plot(t,Vout)
```

# Create and Modify Circuits

Circuits can be created from scratch and modified with a few command lines: adding, placing and connecting components are easily done.

# Transient, steady-state or AC analysis

Different circuit analysis can be performed to get transient or steady-state waveforms with respectively transient or steady-state analysis or to get transfer functions and impedances with the AC analysis.

```
# Load required modules
import matplotlib.pyplot as plt
import numpy as np
from aesim.simba import DesignExamples
# Calculating Vout=f(dutycycle)
BuckBoostConverter = DesignExamples.BuckBoostConverter()
dutycycles = np.arange(0.00, 0.9, 0.9/100)
Vouts = []
for dutycycle in dutycycles:
# Set duty cycle value
PWM = BuckBoostConverter.Circuit.GetDeviceByName('C1')
PWM.DutyCycle=dutycycle
# Run calculation
job = BuckBoostConverter.TransientAnalysis.NewJob()
status = job.Run()
# Retrieve results
t = np.array(job.TimePoints)
Vout = np.array(job.GetSignalByName('R1 - Instantaneous Voltage').DataPoints)
# Average output voltage for t > 2ms
indices = np.where(t >= 0.002)
Vout = np.take(Vout, indices)
Vout = np.average(Vout)
# Save results
Vouts.append(Vout)
# Plot Curve
fig, ax = plt.subplots()
ax.set_title(BuckBoostConverter.Name)
ax.set_ylabel('Vout (V)')
ax.set_xlabel('Duty Cycle')
ax.plot(dutycycles,Vouts)
```

# Parametric Analysis

Thanks to basic python functions such a 'FOR' loop, performing a parametric variation to get the influence of this parameters on the simulation is incredibly easy !