def start(self, **kwargs): """Start the simulation. Two threads are started one for the simulation and one for progress monitoring""" ert = kwargs["ert"] memberCount = kwargs["memberCount"] selectedMembers = kwargs["selectedMembers"] mode = kwargs["mode"] init_step_parameter = kwargs["init_step_parameter"] simFrom = kwargs["simFrom"] simTo = kwargs["simTo"] state = kwargs["state"] self.initialize(ert) self.view.simulationPanel.setModel(ert) self.statistics = SimulationStatistics() self.view.simulationPanel.setSimulationStatistics(self.statistics) simulations = {} for member in selectedMembers: simulations[member] = SimulationItem( Simulation(member, self.statistics)) self.view.simulationList.addItem(simulations[member]) self.runthread = threading.Thread(name="enkf_main_run") def run(): self.view.setRunningState(True) boolVector = ert.createBoolVector(memberCount, selectedMembers) boolPtr = ert.getBoolVectorPtr(boolVector) ert.enkf.enkf_main_run(ert.main, mode, boolPtr, init_step_parameter, simFrom, state) ert.freeBoolVector(boolVector) self.view.setRunningState(False) self.runthread.setDaemon(True) self.runthread.run = run self.pollthread = threading.Thread(name="polling_thread") def poll(): while not ert.enkf.site_config_queue_is_running(ert.site_config): time.sleep(0.5) job_start_time = int(time.time()) while (self.runthread.isAlive()): for member in selectedMembers: state = ert.enkf.enkf_main_iget_state(ert.main, member) status = ert.enkf.enkf_state_get_run_status(state) simulations[member].simulation.setStatus( ert_job_status_type.resolveValue(status)) if not ert_job_status_type.NOT_ACTIVE == status: start_time = ert.enkf.enkf_state_get_start_time(state) submit_time = ert.enkf.enkf_state_get_submit_time( state) simulations[member].simulation.setStartTime(start_time) simulations[member].simulation.setSubmitTime( submit_time) totalCount = len(simulations.keys()) succesCount = 0 for key in simulations.keys(): if simulations[key].simulation.finishedSuccessfully(): succesCount += 1 count = (100 * succesCount / totalCount) self.view.simulationProgress.emit( QtCore.SIGNAL("setValue(int)"), count) self.view.simulationPanel.emit( QtCore.SIGNAL("simulationsUpdated()")) qmi1 = self.view.simulationList.indexFromItem(simulations[0]) qmi2 = self.view.simulationList.indexFromItem( simulations[len(simulations) - 1]) self.view.simulationList.model().emit( QtCore.SIGNAL("dataChanged(QModelIndex, QModelIndex)"), qmi1, qmi2) if self.view.cogwheel.isRunning(): job_running_time = int(time.time()) - job_start_time self.view.estimateLabel.setText( "Total runnning time: %d seconds" % (job_running_time)) # if self.statistics.jobsPerSecond() > 0: # #with assimilation the number of jobs must be multiplied by timesteps # self.view.estimateLabel.setText("Estimated finished in %d seconds" % (self.statistics.estimate(len(simulations)))) # else: # self.view.estimateLabel.setText("") QApplication.processEvents() self.view.update() time.sleep(0.1) self.pollthread.setDaemon(True) self.pollthread.run = poll self.statistics.startTiming() self.runthread.start() self.pollthread.start()
def start(self, **kwargs): """Start the simulation. Two threads are started one for the simulation and one for progress monitoring""" ert = kwargs["ert"] memberCount = kwargs["memberCount"] selectedMembers = kwargs["selectedMembers"] mode = kwargs["mode"] init_step_parameter = kwargs["init_step_parameter"] simFrom = kwargs["simFrom"] simTo = kwargs["simTo"] state = kwargs["state"] self.initialize(ert) self.view.simulationPanel.setModel(ert) self.statistics = SimulationStatistics() self.view.simulationPanel.setSimulationStatistics(self.statistics) simulations = {} for member in selectedMembers: simulations[member] = SimulationItem(Simulation(member, self.statistics)) self.view.simulationList.addItem(simulations[member]) self.runthread = threading.Thread(name="enkf_main_run") def run(): self.view.setRunningState(True) boolVector = ert.createBoolVector(memberCount, selectedMembers) boolPtr = ert.getBoolVectorPtr(boolVector) ert.enkf.enkf_main_run(ert.main, mode, boolPtr, init_step_parameter, simFrom, state) ert.freeBoolVector(boolVector) self.view.setRunningState(False) self.runthread.setDaemon(True) self.runthread.run = run self.pollthread = threading.Thread(name="polling_thread") def poll(): while not ert.enkf.site_config_queue_is_running(ert.site_config): time.sleep(0.5) job_start_time = int(time.time()) while(self.runthread.isAlive()): for member in selectedMembers: state = ert.enkf.enkf_main_iget_state( ert.main , member) status = ert.enkf.enkf_state_get_run_status( state ) simulations[member].simulation.setStatus(ert_job_status_type.resolveValue(status)) if not ert_job_status_type.NOT_ACTIVE == status: start_time = ert.enkf.enkf_state_get_start_time(state) submit_time = ert.enkf.enkf_state_get_submit_time(state) simulations[member].simulation.setStartTime(start_time) simulations[member].simulation.setSubmitTime(submit_time) totalCount = len(simulations.keys()) succesCount = 0 for key in simulations.keys(): if simulations[key].simulation.finishedSuccessfully(): succesCount+=1 count = (100 * succesCount / totalCount) self.view.simulationProgress.emit(QtCore.SIGNAL("setValue(int)"), count) self.view.simulationPanel.emit(QtCore.SIGNAL("simulationsUpdated()")) qmi1 = self.view.simulationList.indexFromItem(simulations[0]) qmi2 = self.view.simulationList.indexFromItem(simulations[len(simulations) - 1]) self.view.simulationList.model().emit(QtCore.SIGNAL("dataChanged(QModelIndex, QModelIndex)"), qmi1, qmi2) if self.view.cogwheel.isRunning(): job_running_time = int(time.time()) - job_start_time self.view.estimateLabel.setText("Total runnning time: %d seconds" % (job_running_time)) # if self.statistics.jobsPerSecond() > 0: # #with assimilation the number of jobs must be multiplied by timesteps # self.view.estimateLabel.setText("Estimated finished in %d seconds" % (self.statistics.estimate(len(simulations)))) # else: # self.view.estimateLabel.setText("") QApplication.processEvents() self.view.update() time.sleep(0.1) self.pollthread.setDaemon(True) self.pollthread.run = poll self.statistics.startTiming() self.runthread.start() self.pollthread.start()
class SimulationsDialogController: """All controller code for the dialog""" def __init__(self, view): self.view = view self.initialized = False def select(self, *states): """Used by the right click menu to select multiple running jobs""" self.view.simulationList.clearSelection() items = getItemsFromList(self.view.simulationList, lambda item : item, selected=False) for state in states: for item in items: if item.simulation.checkStatus(state): item.setSelected(True) def selectSimulation(self): """Set a job as selected""" selection = getItemsFromList(self.view.simulationList, lambda item : item.simulation) self.view.simulationPanel.setSimulations(selection) def initialize(self, ert): if not self.initialized: self.initialized = True def start(self, **kwargs): """Start the simulation. Two threads are started one for the simulation and one for progress monitoring""" ert = kwargs["ert"] memberCount = kwargs["memberCount"] selectedMembers = kwargs["selectedMembers"] mode = kwargs["mode"] init_step_parameter = kwargs["init_step_parameter"] simFrom = kwargs["simFrom"] simTo = kwargs["simTo"] state = kwargs["state"] self.initialize(ert) self.view.simulationPanel.setModel(ert) self.statistics = SimulationStatistics() self.view.simulationPanel.setSimulationStatistics(self.statistics) simulations = {} for member in selectedMembers: simulations[member] = SimulationItem(Simulation(member, self.statistics)) self.view.simulationList.addItem(simulations[member]) self.runthread = threading.Thread(name="enkf_main_run") def run(): self.view.setRunningState(True) boolVector = BoolVector.active_mask(str(selectedMembers).strip('[]')) ert.main.run(boolVector, init_step_parameter, simFrom, state, mode) self.view.setRunningState(False) self.runthread.setDaemon(True) self.runthread.run = run self.pollthread = threading.Thread(name="polling_thread") def poll(): while not ert.main.site_config.queue_is_running: time.sleep(0.5) job_start_time = int(time.time()) while(self.runthread.isAlive()): for member in selectedMembers: state = ert.main.iget_state(member) status = state.get_run_status simulations[member].simulation.setStatus(ert_job_status_type.resolveValue(status)) if not ert_job_status_type.NOT_ACTIVE == status: start_time = state.get_start_time submit_time = state.get_submit_time simulations[member].simulation.setStartTime(start_time) simulations[member].simulation.setSubmitTime(submit_time) totalCount = len(simulations.keys()) succesCount = 0 for key in simulations.keys(): if simulations[key].simulation.finishedSuccessfully(): succesCount+=1 count = (100 * succesCount / totalCount) self.view.simulationProgress.emit(QtCore.SIGNAL("setValue(int)"), count) self.view.simulationPanel.emit(QtCore.SIGNAL("simulationsUpdated()")) qmi1 = self.view.simulationList.indexFromItem(simulations[0]) qmi2 = self.view.simulationList.indexFromItem(simulations[len(simulations) - 1]) self.view.simulationList.model().emit(QtCore.SIGNAL("dataChanged(QModelIndex, QModelIndex)"), qmi1, qmi2) if self.view.cogwheel.isRunning(): job_running_time = int(time.time()) - job_start_time self.view.estimateLabel.setText("Total runnning time: %d seconds" % (job_running_time)) # if self.statistics.jobsPerSecond() > 0: # #with assimilation the number of jobs must be multiplied by timesteps # self.view.estimateLabel.setText("Estimated finished in %d seconds" % (self.statistics.estimate(len(simulations)))) # else: # self.view.estimateLabel.setText("") QApplication.processEvents() self.view.update() time.sleep(0.1) self.pollthread.setDaemon(True) self.pollthread.run = poll self.statistics.startTiming() self.runthread.start() self.pollthread.start()