Example #1
0
    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()
Example #2
0
    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()
Example #3
0
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()