From 9bda60702ac6ce40395c24880d30747e933f9b5a Mon Sep 17 00:00:00 2001 From: Noe Brucy Date: Fri, 3 Feb 2023 15:00:48 +0100 Subject: [PATCH] Allow for snaphost selection without external nml --- utils/runselector.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/utils/runselector.py b/utils/runselector.py index 5e15331..c2b6561 100644 --- a/utils/runselector.py +++ b/utils/runselector.py @@ -52,6 +52,7 @@ class RunSelector: time=None, unit_time=None, allow_nodata=False, + fallback_namelist=True, ): """ Select runs and outputs with several filter options. @@ -95,11 +96,14 @@ class RunSelector: self.path_in = path_in self.nml_filename = nml_filename + self.fallback_nml = fallback_namelist + self.allow_nodata = allow_nodata self.namelist = {} - self.runs = self.get_runs(in_runs, filter_name, filter_nml, sort_run_by) - - self.allow_nodata = allow_nodata + do_tests = (not self.fallback_nml) or (len(filter_nml) > 0) + self.runs = self.get_runs( + in_runs, filter_name, filter_nml, sort_run_by, do_tests=do_tests + ) self.info = {} for run in self.runs: @@ -205,9 +209,10 @@ class RunSelector: return selected_runs, selected_nums - def load_namelist(self, run): - path_nml = f"{self.path_in}/{run}/{self.nml_filename}" - return NamelistRecursive(f90nml.read(path_nml)) + def load_namelist(self, run, path=None): + if path is None: + path = f"{self.path_in}/{run}/{self.nml_filename}" + return NamelistRecursive(f90nml.read(path)) def get_nml_value(self, nml_key, run): return self.namelist[run][nml_key] @@ -445,6 +450,12 @@ class RunSelector: else: nums = [] + # Be sure we have a namelist + if self.fallback_nml and run not in self.namelist: + print(f"WARNING: Used fallback namelist from output {nums[0]}") + path = f"{self.path_in}/{run}/output_{nums[0]:05}/namelist.txt" + self.namelist[run] = self.load_namelist(run, path=path) + # -- Select according to time -- if time_min is not None and len(nums) > 0: imin = search(nums, time_min, "right")