def _runAndPostProcess( self, run_context: ErtRunContext, evaluator_server_config: EvaluatorServerConfig, update_id: Optional[str] = None, ) -> str: phase_msg = "Running iteration %d of %d simulation iterations..." % ( run_context.get_iter(), self.phaseCount() - 1, ) self.setPhase(run_context.get_iter(), phase_msg, indeterminate=False) self.setPhaseName("Pre processing...", indeterminate=True) self.ert().getEnkfSimulationRunner().createRunPath(run_context) EnkfSimulationRunner.runWorkflows(HookRuntime.PRE_SIMULATION, ert=self.ert()) # create ensemble ensemble_id = self._post_ensemble_data(update_id=update_id) self.setPhaseName("Running forecast...", indeterminate=False) num_successful_realizations = self.run_ensemble_evaluator( run_context, evaluator_server_config ) self.checkHaveSufficientRealizations(num_successful_realizations) self.setPhaseName("Post processing...", indeterminate=True) EnkfSimulationRunner.runWorkflows(HookRuntime.POST_SIMULATION, ert=self.ert()) self._post_ensemble_results(ensemble_id) return ensemble_id
def update(self, run_context: ErtRunContext, weight: float, ensemble_id: str) -> str: next_iteration = run_context.get_iter() + 1 phase_string = "Analyzing iteration: %d with weight %f" % ( next_iteration, weight, ) self.setPhase(self.currentPhase() + 1, phase_string, indeterminate=True) es_update = self.ert().getESUpdate() es_update.setGlobalStdScaling(weight) try: es_update.smootherUpdate(run_context) except ErtAnalysisError as e: raise ErtRunError( "Analysis of simulation failed for iteration:" f"{next_iteration}. The following error occured {e}") from e # Push update data to new storage analysis_module_name = self.ert().analysisConfig().activeModuleName() update_id = self._post_update_data(parent_ensemble_id=ensemble_id, algorithm=analysis_module_name) return update_id
def _simulateAndPostProcess( self, run_context: ErtRunContext, evaluator_server_config: EvaluatorServerConfig, update_id: str = None, ) -> Tuple[int, str]: iteration = run_context.get_iter() phase_string = "Running simulation for iteration: %d" % iteration self.setPhaseName(phase_string, indeterminate=True) self.ert().getEnkfSimulationRunner().createRunPath(run_context) phase_string = "Pre processing for iteration: %d" % iteration self.setPhaseName(phase_string) EnkfSimulationRunner.runWorkflows(HookRuntime.PRE_SIMULATION, ert=self.ert()) # Push ensemble, parameters, observations to new storage new_ensemble_id = self._post_ensemble_data(update_id=update_id) phase_string = "Running forecast for iteration: %d" % iteration self.setPhaseName(phase_string, indeterminate=False) num_successful_realizations = self.run_ensemble_evaluator( run_context, evaluator_server_config) # Push simulation results to storage self._post_ensemble_results(new_ensemble_id) num_successful_realizations += self._simulation_arguments.get( "prev_successful_realizations", 0) self.checkHaveSufficientRealizations(num_successful_realizations) phase_string = "Post processing for iteration: %d" % iteration self.setPhaseName(phase_string, indeterminate=True) EnkfSimulationRunner.runWorkflows(HookRuntime.POST_SIMULATION, ert=self.ert()) return num_successful_realizations, new_ensemble_id