def wait_for_run_command(queue): while True: out = open(str(os.getpid()) + ".out", "w") err = open(str(os.getpid()) + ".err", "w") msg = queue.get() analysis_id = msg['analysis_id'] try: model_id = msg['model_id'] name = msg['name'] analysis_name = "Analysis_" + str(analysis_id) out.write("run analysis: " + str(analysis_id)) TaskExecutor.status_list[analysis_id] = TaskExecutor.Status.running.value logger = dpsimpy.Logger(analysis_name) model = model_db.get_model(model_id) files = model.files # prepare the files for dpsim to read. we should make dpsim accept data blobs. # however, that requires work in 3 projects and a technical discussion first. filenames = [] for filedata in model.files: fp, path = tempfile.mkstemp(suffix=".xml", prefix=None, dir=None, text=True) filedata.seek(0) data = filedata.read() os.write(fp, data); os.close(fp); filenames.append(path) #initialise dpsimpy reader = dpsimpy.CIMReader("Analysis_" + str(analysis_id)) system = reader.loadCIM(50, filenames, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) sim = dpsimpy.Simulation("Analysis_" + str(analysis_id)) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) for node in system.nodes: logger.log_attribute(node.name()+'.V', 'v', node); sim.add_logger(logger) sim.run() # clean up the files that we created for tempname in filenames: os.unlink(tempname) TaskExecutor.status_list[analysis_id] = TaskExecutor.Status.complete.value except Exception as e: TaskExecutor.status_list[analysis_id] = TaskExecutor.Status.error.value err.write("analysis failed: " + str(analysis_id) + " with: " + str(e)) finally: err.close() out.close()
def execute_dpsimpy(self): #initialise dpsimpy logger = dpsimpy.Logger(self.analysis_name) reader = dpsimpy.CIMReader(self.analysis_name) system = reader.loadCIM(50, self.filenames, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) sim = dpsimpy.Simulation(self.analysis_name) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) for node in system.nodes: logger.log_attribute(node.name() + '.V', 'v', node) sim.add_logger(logger) sim.run()
def execute_dpsimpy(self): #initialise dpsimpy logger = dpsimpy.Logger(self.analysis_name) reader = dpsimpy.CIMReader(self.analysis_name) system = reader.loadCIM(50, self.filenames, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) if system == None: self.err.write("Could not start dpsimpy with files: " + self.filenames) TaskExecutor.status_list[ self.analysis_id] = TaskExecutor.Status.error.value return self.read_load_profiles(system) sim = dpsimpy.Simulation(self.analysis_name) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) for node in system.nodes: logger.log_attribute(node.name() + '.V', 'v', node) sim.add_logger(logger) sim.run()
import os import urllib.request import glob import dpsimpy name = 'CIGRE-MV-Profiles' files = glob.glob( 'build/_deps/cim-data-src/CIGRE_MV/NEPLAN/CIGRE_MV_no_tapchanger_With_LoadFlow_Results/*.xml' ) print(files) reader = dpsimpy.CIMReader(name) system = reader.loadCIM(50, files, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) csv_files = glob.glob( 'build/_deps/profile-data-src/CIGRE_MV_NoTap/load_profiles/')[0] print(csv_files) assignList = {} assignList['LOAD-H-1'] = 'Load_H_1' assignList['LOAD-H-3'] = 'Load_H_3' assignList['LOAD-H-4'] = 'Load_H_4' assignList['LOAD-H-5'] = 'Load_H_5' assignList['LOAD-H-6'] = 'Load_H_6' assignList['LOAD-H-8'] = 'Load_H_8' assignList['LOAD-H-10'] = 'Load_H_10' assignList['LOAD-H-11'] = 'Load_H_11' assignList['LOAD-H-12'] = 'Load_H_12' assignList['LOAD-H-14'] = 'Load_H_14' assignList['LOAD-I-1'] = 'Load_I_1'
def dpsim(): name = 'CIGRE-MV-Profiles' files = glob.glob( 'build/_deps/cim-data-src/CIGRE_MV/NEPLAN/CIGRE_MV_no_tapchanger_With_LoadFlow_Results/*.xml' ) print(files) reader = dpsimpy.CIMReader(name) system = reader.loadCIM(50, files, dpsimpy.Domain.SP, dpsimpy.PhaseType.Single) csv_files = glob.glob( 'build/_deps/profile-data-src/CIGRE_MV_NoTap/load_profiles/')[0] print(csv_files) assignList = {} assignList['LOAD-H-1'] = 'Load_H_1' assignList['LOAD-H-3'] = 'Load_H_3' assignList['LOAD-H-4'] = 'Load_H_4' assignList['LOAD-H-5'] = 'Load_H_5' assignList['LOAD-H-6'] = 'Load_H_6' assignList['LOAD-H-8'] = 'Load_H_8' assignList['LOAD-H-10'] = 'Load_H_10' assignList['LOAD-H-11'] = 'Load_H_11' assignList['LOAD-H-12'] = 'Load_H_12' assignList['LOAD-H-14'] = 'Load_H_14' assignList['LOAD-I-1'] = 'Load_I_1' assignList['LOAD-I-3'] = 'Load_I_3' assignList['LOAD-I-7'] = 'Load_I_7' assignList['LOAD-I-9'] = 'Load_I_9' assignList['LOAD-I-10'] = 'Load_I_10' assignList['LOAD-I-12'] = 'Load_I_12' assignList['LOAD-I-13'] = 'Load_I_13' assignList['LOAD-I-14'] = 'Load_I_14' csvreader = dpsimpy.CSVReader(name, csv_files, assignList, dpsimpy.LogLevel.info) csvreader.assignLoadProfile(system, 0, 1, 300, dpsimpy.CSVReaderMode.MANUAL, dpsimpy.CSVReaderFormat.SECONDS) sim = dpsimpy.RealTimeSimulation(name) sim.set_system(system) sim.set_domain(dpsimpy.Domain.SP) sim.set_solver(dpsimpy.Solver.NRP) sim.set_time_step(1) sim.set_final_time(30) logger = dpsimpy.Logger(name) sim.add_logger(logger) intf = dpsimpy.InterfaceShmem() sim.add_interface(intf) obj_list = system.list_idobjects() node_list = { k: v for k, v in obj_list.items() if v == 'SimNode<std::complex<double> >' } print(node_list) for i in range(15): objname = 'N' + str(i) sim.export_attr(objname, 'v', (i * 2), dpsimpy.AttrModifier.mag) sim.export_attr(objname, 'v', (i * 2) + 1, dpsimpy.AttrModifier.phase) print(objname) for node in system.nodes: logger.log_attribute(node.name() + '.V', 'v', node) sim.run(1)