diff --git a/src/clib/lib/enkf/read_summary.cpp b/src/clib/lib/enkf/read_summary.cpp index 9cbdf018c3f..62ee5d5da46 100644 --- a/src/clib/lib/enkf/read_summary.cpp +++ b/src/clib/lib/enkf/read_summary.cpp @@ -23,12 +23,15 @@ ERT_CLIB_SUBMODULE("_read_summary", m) { const ecl_smspec_type *smspec = ecl_sum_get_smspec(summary); std::vector>> summary_vectors{}; - + std::vector seen_keys{}; for (int i = 0; i < ecl_smspec_num_nodes(smspec); i++) { const ecl::smspec_node &smspec_node = ecl_smspec_iget_node_w_node_index(smspec, i); const char *key = smspec_node.get_gen_key1(); - if (matches(keys, key)) { + if ((matches(keys, key)) && + !(std::find(seen_keys.begin(), seen_keys.end(), key) != + seen_keys.end())) { + seen_keys.push_back(key); int start = ecl_sum_get_first_report_step(summary); int end = ecl_sum_get_last_report_step(summary); std::vector data{}; diff --git a/src/ert/config/summary_config.py b/src/ert/config/summary_config.py index f99f72f7a9e..9605bcfa216 100644 --- a/src/ert/config/summary_config.py +++ b/src/ert/config/summary_config.py @@ -52,12 +52,12 @@ def read_from_file(self, run_path: str, iens: int) -> xr.Dataset: f"{last} from: {run_path}/{filename}.UNSMRY" ) - summary_data = read_summary(summary, self.keys) + summary_data = read_summary(summary, list(set(self.keys))) summary_data.sort(key=lambda x: x[0]) data = [d for _, d in summary_data] keys = [k for k, _ in summary_data] - - return xr.Dataset( + ds = xr.Dataset( {"values": (["name", "time"], data)}, coords={"time": time_map, "name": keys}, ) + return ds.drop_duplicates("time") diff --git a/tests/unit_tests/scenarios/test_summary_response.py b/tests/unit_tests/scenarios/test_summary_response.py index e542455e287..2e296b948dd 100644 --- a/tests/unit_tests/scenarios/test_summary_response.py +++ b/tests/unit_tests/scenarios/test_summary_response.py @@ -153,3 +153,24 @@ def run_sim(dates, value, fname="ECLIPSE_CASE"): ) t_step["FOPR"] = value ecl_sum.fwrite() + + +def test_that_duplicate_summary_time_steps_does_not_fail( + setup_configuration, + prior_ensemble, + target_ensemble, +): + ert = setup_configuration + ert.sample_prior(prior_ensemble, list(range(ert.getEnsembleSize()))) + response_times = [ + [datetime(2014, 9, 9)], + [datetime(2014, 9, 9)], + [datetime(2014, 9, 9), datetime(2014, 9, 9)], + [datetime(2014, 9, 9)], + [datetime(2014, 9, 9), datetime(1988, 9, 9)], + ] + create_responses(ert, prior_ensemble, response_times) + + es_update = ESUpdate(ert) + + es_update.smootherUpdate(prior_ensemble, target_ensemble, "an id")