From 676bbcbcb33325d64264e7550e7a096e30582350 Mon Sep 17 00:00:00 2001 From: Erik Kluzek Date: Fri, 20 Feb 2026 08:26:58 -0700 Subject: [PATCH 1/2] Add postprocessing to the preview_namelists --- CIME/case/preview_namelists.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/CIME/case/preview_namelists.py b/CIME/case/preview_namelists.py index 95d276e039a..06aea6fe53d 100644 --- a/CIME/case/preview_namelists.py +++ b/CIME/case/preview_namelists.py @@ -109,6 +109,38 @@ def create_namelists(self, component=None): component, models ) ) + # + # Run any namelists for the post-processing component if it exists + # + # NOTE: This bit is copied from Case.flush + # TODO: make it a little function? + run_postprocess = self.get_value("RUN_POSTPROCESSING") + if run_postprocess: + _postprocessing_spec_file = self.get_value("POSTPROCESSING_SPEC_FILE") + if _postprocessing_spec_file is not None: + have_postprocessing = os.path.isfile(_postprocessing_spec_file) + else: + have_postprocessing = False + + # Run buildnml for the post-processing component if buildnml exists + # NOTE: This copies the handling of buildnml for components in the section above + # TODO: Make it into a little subroutine? + if have_postprocessing: + config_dir = os.path.dirname(_postprocessing_spec_file) + cmd = os.path.join(config_dir, "buildnml") + # NOTE: In order to name the specific postprocessing component, there would need to be + # a new XML variable with something like POSTPROC_NAME + compname = "postprocessor" + logger.info("Create namelist for postprocessing component {}".format(compname)) + import_and_run_sub_or_cmd( + cmd, + (caseroot), + "buildnml", + (self, caseroot, compname), + config_dir, + compname, + case=self, + ) # Save namelists to docdir if not os.path.isdir(docdir): @@ -128,6 +160,7 @@ def create_namelists(self, component=None): "nuopc.runconfig", "*streams*txt*", "*streams.xml", + "*.yml", "*stxt", "*maps.rc", "*cism*.config*", From 92b8c7c6e29bcf68e44f91e9b5ac4312225ab477 Mon Sep 17 00:00:00 2001 From: Erik Kluzek Date: Tue, 24 Feb 2026 17:09:44 -0700 Subject: [PATCH 2/2] Don't run for postprocessor if the buildnml does not exist --- CIME/case/preview_namelists.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/CIME/case/preview_namelists.py b/CIME/case/preview_namelists.py index 06aea6fe53d..d2b2bca5643 100644 --- a/CIME/case/preview_namelists.py +++ b/CIME/case/preview_namelists.py @@ -128,19 +128,20 @@ def create_namelists(self, component=None): if have_postprocessing: config_dir = os.path.dirname(_postprocessing_spec_file) cmd = os.path.join(config_dir, "buildnml") - # NOTE: In order to name the specific postprocessing component, there would need to be - # a new XML variable with something like POSTPROC_NAME - compname = "postprocessor" - logger.info("Create namelist for postprocessing component {}".format(compname)) - import_and_run_sub_or_cmd( - cmd, - (caseroot), - "buildnml", - (self, caseroot, compname), - config_dir, - compname, - case=self, - ) + if ( os.path.exists(cmd) ): + # NOTE: In order to name the specific postprocessing component, there would need to be + # a new XML variable with something like POSTPROC_NAME + compname = "postprocessor" + logger.info("Create namelist for postprocessing component {}".format(compname)) + import_and_run_sub_or_cmd( + cmd, + (caseroot), + "buildnml", + (self, caseroot, compname), + config_dir, + compname, + case=self, + ) # Save namelists to docdir if not os.path.isdir(docdir):