class AM_circuit(): ''' translate a netlist into ngSpice elements ''' def __init__(self): pass def load_netlist(self,netlistfile): ''' class method to build a circuit model from a netlist netlistfile=path/filename that contains a valid spice netlist ''' with open(netlistfile,'r',encoding='utf-8') as f: self.netlist = [item.strip() for item in f.readlines()[:-1]] self.circuitname = self.netlist[0].lstrip('.title').strip() self.instantiate_circuit() def instantiate_circuit(self): ''' class method that instantiates a circuit model from an inherited netlist ''' self.circuit = Circuit(self.circuitname) for line in self.netlist[1:]: try: self.add_circuit_element_from_netlist_line(line) except: print(traceback.format_exc()) def add_circuit_element_from_netlist_line(self,line): ''' class method to parse a line from a netlist and add RC components to a circuit model line=text string from netlist ''' line = line.split(' ') if 'R' in line[0]: self.circuit.Resistor(line[0].lstrip('R'),line[1],line[2],kilo(float(line[3].rstrip('k')))) if 'C' in line[0]: self.circuit.Capacitor(line[0].lstrip('C'),line[1],line[2],float(line[3])@u_uF) if 'I' in line[0]: self.circuit.CurrentSource(line[0].lstrip('I'),line[1],line[2],line[3]) def get_nodal_voltages(self,analysis): ''' class method to retrieve nodal voltages from a circuit analysis analysis:circuit analysis (simulator.operating_point(), etc.) returns:list ''' nvs = {} for key in analysis.nodes.keys(): nvs[int(key)-1] = analysis[key].T.tolist()[0] return(nvs)