Пример #1
0
class RunContext(object):
    def __init__(self , ert_handle , size , run_fs , run_count):
        self.ert_handle = ert_handle
        self.size = size
        self.runner = ert_handle.getEnkfSimulationRunner()
        
        site_config = self.ert_handle.siteConfig()
        self.queue_manager = JobQueueManager( site_config.getJobQueue() )
        self.queue_manager.startQueue( size , verbose = True )

        mask = BoolVector( default_value = True )
        mask[size - 1] = True
        
        self.ert_handle.addDataKW("<ELCO_RUN_COUNT>" , "%s" % run_count)
        self.ert_run_context = self.ert_handle.getRunContextENSEMPLE_EXPERIMENT( run_fs , mask )
        

    def isRunning(self):
        return self.queue_manager.isRunning()


    def getNumRunning(self):
        return self.queue_manager.getNumRunning()


    def getNumSuccess(self):
        return self.queue_manager.getNumSuccess()

    
    def getNumFailed(self):
        return self.queue_manager.getNumFailed()

    
    def startSimulation(self , iens):
        self.ert_handle.submitSimulation( self.ert_run_context.iensGet( iens ))


    def realisationSuccess(self, iens):
        run_arg = self.ert_run_context.iensGet( iens )
        queue_index = run_arg.getQueueIndex()
        return self.queue_manager.jobSuccess( queue_index )

    
    def realisationFailed(self, iens):
        run_arg = self.ert_run_context.iensGet( iens )
        queue_index = run_arg.getQueueIndex()
        return self.queue_manager.jobFailed( queue_index )

    
    def realisationRunning(self, iens):
        run_arg = self.ert_run_context.iensGet( iens )
        queue_index = run_arg.getQueueIndex()
        if self.queue_manager.jobRunning( queue_index ) or self.queue_manager.jobWaiting( queue_index ):
            return True
        else:
            return False
Пример #2
0
class SimulationContext(object):
    def __init__(self, ert, size, verbose=False):
        self._ert = ert
        """ :type: ert.enkf.EnKFMain """
        self._size = size
        
        max_runtime = ert.analysisConfig().get_max_runtime()
        job_queue = ert.siteConfig().getJobQueue()
        job_queue.set_max_job_duration(max_runtime)

        self._queue_manager = JobQueueManager(job_queue)
        self._queue_manager.startQueue(size, verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB, "enkf_main_isubmit_job__")


    def addSimulation(self, iens, target_fs):
        if iens >= self._size:
            raise UserWarning("Realization number out of range: %d >= %d" % (iens, self._size))

        if iens in self._run_args:
            raise UserWarning("Realization number: '%d' already queued" % iens)

        runpath_fmt = self._ert.getModelConfig().getRunpathFormat()
        member = self._ert.getRealisation(iens)
        runpath = ErtRunContext.createRunpath(iens , runpath_fmt, member.getDataKW( ))
        run_arg = RunArg.createEnsembleExperimentRunArg(target_fs, iens, runpath)

        self._ert.createRunPath(run_arg)

        self._run_args[iens] = run_arg
        self._thread_pool.submitJob(ArgPack(self._ert, run_arg))


    def isRunning(self):
        return self._queue_manager.isRunning()


    def getNumRunning(self):
        return self._queue_manager.getNumRunning()


    def getNumSuccess(self):
        return self._queue_manager.getNumSuccess()


    def getNumFailed(self):
        return self._queue_manager.getNumFailed()

    def getNumWaiting(self):
        return self._queue_manager.getNumWaiting()


    def didRealizationSucceed(self, iens):
        queue_index = self._run_args[iens].getQueueIndex()
        return self._queue_manager.didJobSucceed(queue_index)


    def didRealizationFail(self, iens):
        # For the purposes of this class, a failure should be anything (killed job, etc) that is not an explicit success.
        return not self.didRealizationSucceed(iens)


    def isRealizationQueued(self, iens):
        return iens in self._run_args


    def isRealizationFinished(self, iens):
        run_arg = self._run_args[iens]

        if run_arg.isSubmitted():
            queue_index = run_arg.getQueueIndex()
            return self._queue_manager.isJobComplete(queue_index)
        else:
            return False

    def __repr__(self):
        running = 'running' if self.isRunning() else 'not running'
        numRunn = self.getNumRunning()
        numSucc = self.getNumSuccess()
        numFail = self.getNumFailed()
        numWait = self.getNumWaiting()
        fmt = '%s, #running = %d, #success = %d, #failed = %d, #waiting = %d'
        fmt =  fmt % (running, numRunn, numSucc, numFail, numWait)
        return 'SimulationContext(%s)' % fmt
Пример #3
0
class SimulationContext(object):
    def __init__(self, ert, size, verbose=False):
        self._ert = ert
        """ :type: ert.enkf.EnKFMain """
        self._size = size

        self._queue_manager = JobQueueManager(ert.siteConfig().getJobQueue())
        self._queue_manager.startQueue(size, verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB,
                                          "enkf_main_isubmit_job__")

    def addSimulation(self, iens, target_fs):
        if iens >= self._size:
            raise UserWarning("Realization number out of range: %d >= %d" %
                              (iens, self._size))

        if iens in self._run_args:
            raise UserWarning("Realization number: '%d' already queued" % iens)

        runpath_fmt = self._ert.getModelConfig().getRunpathFormat()
        member = self._ert.getRealisation(iens)
        runpath = ErtRunContext.createRunpath(iens, runpath_fmt,
                                              member.getDataKW())
        run_arg = RunArg.createEnsembleExperimentRunArg(
            target_fs, iens, runpath)

        self._ert.createRunPath(run_arg)

        self._run_args[iens] = run_arg
        self._thread_pool.submitJob(ArgPack(self._ert, run_arg))

    def isRunning(self):
        return self._queue_manager.isRunning()

    def getNumRunning(self):
        return self._queue_manager.getNumRunning()

    def getNumSuccess(self):
        return self._queue_manager.getNumSuccess()

    def getNumFailed(self):
        return self._queue_manager.getNumFailed()

    def getNumWaiting(self):
        return self._queue_manager.getNumWaiting()

    def didRealizationSucceed(self, iens):
        queue_index = self._run_args[iens].getQueueIndex()
        return self._queue_manager.didJobSucceed(queue_index)

    def didRealizationFail(self, iens):
        queue_index = self._run_args[iens].getQueueIndex()
        return self._queue_manager.didJobFail(queue_index)

    def isRealizationQueued(self, iens):
        return iens in self._run_args

    def isRealizationFinished(self, iens):
        run_arg = self._run_args[iens]

        if run_arg.isSubmitted():
            queue_index = run_arg.getQueueIndex()
            return self._queue_manager.isJobComplete(queue_index)
        else:
            return False
Пример #4
0
queue_manager = JobQueueManager( site_config.getJobQueue( ) )
queue_manager.startQueue( ert.getEnsembleSize( ) , verbose = False )


# Create list of RunArg instances which hold metadata for one running
# realisation, create the directory where the simulation should run
# and submit the simulation.
path_fmt = "/tmp/run%d"
arg_list = [ RunArg.createEnsembleExperimentRunArg(fs, iens, path_fmt % iens) for iens in range(ert.getEnsembleSize()) ]
for arg in arg_list:
    ert.createRunPath( arg )
    ert.submitSimulation( arg )

    
while True:
    print("Waiting:%d  Running:%d  Complete:%d/%d" % (queue_manager.getNumWaiting( ), queue_manager.getNumRunning( ) , queue_manager.getNumSuccess() , queue_manager.getNumFailed( )))
    if not queue_manager.isRunning( ):
        break

    time.sleep( 5 )

ens_config = ert.ensembleConfig( )
data_config = ens_config["SNAKE_OIL_OPR_DIFF"]
param_config = ens_config["SNAKE_OIL_PARAM"]    
for iens in range(ert.getEnsembleSize( )):
    data_id = NodeId( realization_number = iens,
                      report_step = 199 )
    enkf_node1 = EnkfNode( data_config )
    enkf_node1.load( fs , data_id )
    gen_data = enkf_node1.asGenData( )
    data = gen_data.getData( )
Пример #5
0
# Create list of RunArg instances which hold metadata for one running
# realisation, create the directory where the simulation should run
# and submit the simulation.
path_fmt = "/tmp/run%d"
arg_list = [
    RunArg.createEnsembleExperimentRunArg(fs, iens, path_fmt % iens)
    for iens in range(ert.getEnsembleSize())
]
for arg in arg_list:
    ert.createRunPath(arg)
    ert.submitSimulation(arg)

while True:
    print("Waiting:%d  Running:%d  Complete:%d/%d" %
          (queue_manager.getNumWaiting(), queue_manager.getNumRunning(),
           queue_manager.getNumSuccess(), queue_manager.getNumFailed()))
    if not queue_manager.isRunning():
        break

    time.sleep(5)

ens_config = ert.ensembleConfig()
data_config = ens_config["SNAKE_OIL_OPR_DIFF"]
param_config = ens_config["SNAKE_OIL_PARAM"]
for iens in range(ert.getEnsembleSize()):
    data_id = NodeId(realization_number=iens, report_step=199)
    enkf_node1 = EnkfNode(data_config)
    enkf_node1.load(fs, data_id)
    gen_data = enkf_node1.asGenData()
    data = gen_data.getData()
Пример #6
0
class RunContext(object):
    def __init__(self , ert_handle , size , run_fs , run_count):
        self.ert_handle = ert_handle
        self.size = size
        self.runner = ert_handle.getEnkfSimulationRunner()
        
        site_config = self.ert_handle.siteConfig()
        self.queue_manager = JobQueueManager( site_config.getJobQueue() )
        self.queue_manager.startQueue( size , verbose = True )

        mask = BoolVector( default_value = True )
        mask[size - 1] = True
        
        self.ert_handle.addDataKW("<ELCO_RUN_COUNT>" , "%s" % run_count)
        self.ert_run_context = self.ert_handle.getRunContextENSEMPLE_EXPERIMENT( run_fs , mask )
        self.thread_pool = CThreadPool( 8 )
        self.submit_func = CThreadPool.lookupCFunction( ENKF_LIB , "enkf_main_isubmit_job__" )

        
    def isRunning(self):
        return self.queue_manager.isRunning()


    def getNumRunning(self):
        return self.queue_manager.getNumRunning()


    def getNumSuccess(self):
        return self.queue_manager.getNumSuccess()

    
    def getNumFailed(self):
        return self.queue_manager.getNumFailed()

    
    def startSimulation(self , iens):
        member_context = self.ert_run_context.iensGet( iens )
        arg = ArgPack( self.ert_handle , member_context )
        self.thread_pool.addTask( self.submit_func , arg )
        

    def realisationSuccess(self, iens):
        run_arg = self.ert_run_context.iensGet( iens )
        queue_index = run_arg.getQueueIndex()
        return self.queue_manager.jobSuccess( queue_index )

    
    def realisationFailed(self, iens):
        run_arg = self.ert_run_context.iensGet( iens )
        queue_index = run_arg.getQueueIndex()
        return self.queue_manager.jobFailed( queue_index )


    # Running is slightly misleading; we have three catogories:
    # Complete, Failed, and "Running". Running in this context is
    # actually the 'the rest', and includes jobs in all sorts of
    # waiting.
    
    def realisationRunning(self, iens):
        run_arg = self.ert_run_context.iensGet( iens )
        if run_arg.isSubmitted():
            queue_index = run_arg.getQueueIndex()
            if self.queue_manager.jobRunning( queue_index ) or self.queue_manager.jobWaiting( queue_index ):
                return True
            else:
                return False
        else:
            return True
        

    def exportRunpathList(self):
        runpath_list = self.ert_handle.getRunpathList( )
        runpath_list.export( )
Пример #7
0
class SimulationContext(object):
    def __init__(self, ert, size, verbose=False):
        self._ert = ert
        """ :type: ert.enkf.EnKFMain """
        self._size = size

        self._queue_manager = JobQueueManager(ert.siteConfig().getJobQueue())
        self._queue_manager.startQueue(size, verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB, "enkf_main_isubmit_job__")

    def addSimulation(self, iens, target_fs):
        if iens >= self._size:
            raise UserWarning("Realization number out of range: %d >= %d" % (iens, self._size))

        if iens in self._run_args:
            raise UserWarning("Realization number: '%d' already queued" % iens)

        runpath_fmt = self._ert.getModelConfig().getRunpathFormat()
        member = self._ert.getRealisation(iens)
        runpath = ErtRunContext.createRunpath(iens, runpath_fmt, member.getDataKW())
        run_arg = RunArg.createEnsembleExperimentRunArg(target_fs, iens, runpath)
        self._run_args[iens] = run_arg
        self._thread_pool.submitJob(ArgPack(self._ert, run_arg))

    def isRunning(self):
        return self._queue_manager.isRunning()

    def getNumRunning(self):
        return self._queue_manager.getNumRunning()

    def getNumSuccess(self):
        return self._queue_manager.getNumSuccess()

    def getNumFailed(self):
        return self._queue_manager.getNumFailed()

    def getNumWaiting(self):
        return self._queue_manager.getNumWaiting()

    def didRealizationSucceed(self, iens):
        queue_index = self._run_args[iens].getQueueIndex()
        return self._queue_manager.didJobSucceed(queue_index)

    def didRealizationFail(self, iens):
        queue_index = self._run_args[iens].getQueueIndex()
        return self._queue_manager.didJobFail(queue_index)

    def isRealizationQueued(self, iens):
        return iens in self._run_args

    def isRealizationFinished(self, iens):
        run_arg = self._run_args[iens]

        if run_arg.isSubmitted():
            queue_index = run_arg.getQueueIndex()
            return self._queue_manager.isJobComplete(queue_index)
        else:
            return False