Exemplo n.º 1
0
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)