From 43d68aa626d1e4a747bb4b2ec912963c21da14ba Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Mon, 16 Mar 2026 12:55:40 -0500 Subject: [PATCH 01/17] Adding new WIND_VINTERP_OPT option, add OMP_NUM_THREADS_FIRE (not tested for compile yet) --- Externals.cfg | 4 ++-- parm/ufs.configure | 3 ++- ush/config_defaults.yaml | 11 ++++++++++- ush/create_ufs_configure_file.py | 3 +++ ush/generate_FV3LAM_wflow.py | 2 +- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Externals.cfg b/Externals.cfg index 7e69c3a21b..a95fadcc53 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -9,10 +9,10 @@ required = True [ufs-weather-model] protocol = git -repo_url = https://github.com/ufs-community/ufs-weather-model +repo_url = https://github.com/masih-e/ufs-weather-model # Specify either a branch name or a hash but not both. #branch = develop -hash = a796a4f +hash = 3efc3422 local_path = sorc/ufs-weather-model required = True diff --git a/parm/ufs.configure b/parm/ufs.configure index 74bd602231..c775793c5b 100644 --- a/parm/ufs.configure +++ b/parm/ufs.configure @@ -33,7 +33,8 @@ AQM_attributes:: {% if ufs_fire %} # FIRE # FIRE_model: fire_behavior -FIRE_petlist_bounds: {{ FIRE_pb }} +FIRE_petlist_bounds: {{ FIRE_pb }}{{ +FIRE_omp_num_threads_line }} FIRE_attributes:: Verbosity = high Diagnostic = 0 diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 1edaf11429..396fe7dc7f 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -3109,14 +3109,17 @@ fire: # The fire behavior component’s output timestep # # FIRE_NUM_TASKS - # Number of MPI tasks assigned to the FIRE_BEHAVIOR component. + # Number of MPI tasks assigned to the fire behavior component. # + # OMP_NUM_THREADS_FIRE + # Number of OpenMP tasks assigned to the fire behavior component. envvars: UFS_FIRE: False FIRE_INPUT_DIR: "" DT_FIRE: 0.5 OUTPUT_DT_FIRE: 300 FIRE_NUM_TASKS: 0 + OMP_NUM_THREADS_FIRE: 1 # The following options control namelist values in the Community Fire @@ -3207,3 +3210,9 @@ fire: FIRE_IGNITION_START_TIME: 6480 FIRE_IGNITION_END_TIME: 7000 + # WIND_VINTERP_OPT + # Option for which wind variable should be used for driving fire behavior + # 0: Use prognostic 3-d wind + # 1: Use diagnosed 10-meter wind + WIND_VINTERP_OPT: 0 + diff --git a/ush/create_ufs_configure_file.py b/ush/create_ufs_configure_file.py index f13d34b990..11f71b43e4 100644 --- a/ush/create_ufs_configure_file.py +++ b/ush/create_ufs_configure_file.py @@ -55,6 +55,8 @@ def create_ufs_configure_file(run_dir,cfg): f"\nATM_omp_num_threads: {cfg['OMP_NUM_THREADS_RUN_FCST']}" atm_diag_line = '' fire_petlist_bounds = f'{fire_start} {fire_end}' + fire_omp_num_threads_line = \ + f"\nFIRE_omp_num_threads: {cfg['OMP_NUM_THREADS_FIRE']}" runseq = [ f" @{cfg['DT_ATMOS']}\n", " ATM -> FIRE\n", " FIRE -> ATM :remapmethod=conserve\n", @@ -114,6 +116,7 @@ def create_ufs_configure_file(run_dir,cfg): settings["AQM_pb"] = aqm_petlist_bounds if cfg["UFS_FIRE"]: settings["FIRE_pb"] = fire_petlist_bounds + settings["FIRE_omp_num_threads_line"] = fire_omp_num_threads_line print_info_msg( dedent( diff --git a/ush/generate_FV3LAM_wflow.py b/ush/generate_FV3LAM_wflow.py index b59403d54b..a6b5329270 100755 --- a/ush/generate_FV3LAM_wflow.py +++ b/ush/generate_FV3LAM_wflow.py @@ -461,7 +461,7 @@ def generate_FV3LAM_wflow( ] # These settings do not get added to namelist, or are handled elsewhere - pass_settings = ["UFS_FIRE", "FIRE_INPUT_DIR", "FIRE_NUM_TASKS", "envvars"] + pass_settings = ["UFS_FIRE", "FIRE_INPUT_DIR", "FIRE_NUM_TASKS", "OMP_NUM_THREADS_FIRE", "envvars"] pass_settings.extend(each_ignit) for setting in expt_config["fire"]: From 381cf68b181a535892e8d734962ff84cd5e1644c Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr." Date: Wed, 8 Oct 2025 15:04:49 +0000 Subject: [PATCH 02/17] Need to add number of fire threads to namelist as "num_tiles" --- ush/generate_FV3LAM_wflow.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ush/generate_FV3LAM_wflow.py b/ush/generate_FV3LAM_wflow.py index a6b5329270..0b6337cde0 100755 --- a/ush/generate_FV3LAM_wflow.py +++ b/ush/generate_FV3LAM_wflow.py @@ -461,7 +461,7 @@ def generate_FV3LAM_wflow( ] # These settings do not get added to namelist, or are handled elsewhere - pass_settings = ["UFS_FIRE", "FIRE_INPUT_DIR", "FIRE_NUM_TASKS", "OMP_NUM_THREADS_FIRE", "envvars"] + pass_settings = ["UFS_FIRE", "FIRE_INPUT_DIR", "FIRE_NUM_TASKS", "envvars"] pass_settings.extend(each_ignit) for setting in expt_config["fire"]: @@ -471,6 +471,8 @@ def generate_FV3LAM_wflow( fire_nml_dict["time"]["dt"] = expt_config["fire"][setting] elif setting == "OUTPUT_DT_FIRE": fire_nml_dict["time"]["interval_output"] = expt_config["fire"][setting] + elif setting == "OMP_NUM_THREADS_FIRE": + fire_nml_dict["time"]["num_tiles"] = expt_config["fire"][setting] else: # For all other settings in config.yaml, convert to lowercase # and enter into namelist.fire's &fire section From 6fefa67bb460e1a2ee78087d5e71cbf554e4a5d1 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr." Date: Wed, 8 Oct 2025 15:17:32 +0000 Subject: [PATCH 03/17] Point to my own updated ufs-weather-model fork --- Externals.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Externals.cfg b/Externals.cfg index a95fadcc53..1b60212e3d 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -9,10 +9,10 @@ required = True [ufs-weather-model] protocol = git -repo_url = https://github.com/masih-e/ufs-weather-model +repo_url = https://github.com/mkavulich/ufs-weather-model # Specify either a branch name or a hash but not both. #branch = develop -hash = 3efc3422 +hash = 36689db9 local_path = sorc/ufs-weather-model required = True From 03a25789c2aa4f46fee40b64adfc6799dc6c9a15 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr." Date: Fri, 5 Dec 2025 22:16:25 +0000 Subject: [PATCH 04/17] Modifying PE_MEMBER01 so that it corresponds to the number of procs needed by the run_fcst task --- ush/config_defaults.yaml | 2 +- ush/create_ufs_configure_file.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 396fe7dc7f..b8fb4f0db6 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -1842,7 +1842,7 @@ task_run_fcst: # QUILTING: true - PE_MEMBER01: !int '{{ task_run_fcst.fv3.execution.threads * (task_run_fcst.LAYOUT_Y * task_run_fcst.LAYOUT_X + task_run_fcst.WRTCMP_write_groups * task_run_fcst.WRTCMP_write_tasks_per_group) + fire.FIRE_NUM_TASKS if task_run_fcst.QUILTING else task_run_fcst.fv3.execution.threads * (task_run_fcst.LAYOUT_Y * task_run_fcst.LAYOUT_X) + fire.FIRE_NUM_TASKS }}' + PE_MEMBER01: !int '{{ task_run_fcst.fv3.execution.threads * (task_run_fcst.LAYOUT_Y * task_run_fcst.LAYOUT_X + task_run_fcst.WRTCMP_write_groups * task_run_fcst.WRTCMP_write_tasks_per_group) + (fire.FIRE_NUM_TASKS * fire.OMP_NUM_THREADS_FIRE) if task_run_fcst.QUILTING else task_run_fcst.fv3.execution.threads * (task_run_fcst.LAYOUT_Y * task_run_fcst.LAYOUT_X) + (fire.FIRE_NUM_TASKS * fire.OMP_NUM_THREADS_FIRE) }}' WRTCMP_write_groups: "" WRTCMP_write_tasks_per_group: "" diff --git a/ush/create_ufs_configure_file.py b/ush/create_ufs_configure_file.py index 11f71b43e4..551a26151c 100644 --- a/ush/create_ufs_configure_file.py +++ b/ush/create_ufs_configure_file.py @@ -31,10 +31,16 @@ def create_ufs_configure_file(run_dir,cfg): # Set necessary variables for each coupled configuration - atm_end = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"]) -1) + print(f"{cfg['PE_MEMBER01']=}") + print(f"{cfg['FIRE_NUM_TASKS']=}") + print(f"{cfg['OMP_NUM_THREADS_FIRE']=}") + atm_end = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE']) - 1) aqm_end = str(int(cfg["LAYOUT_X"]) * int(cfg["LAYOUT_Y"]) - 1) - fire_start = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"])) + fire_start = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE'])) fire_end = str(int(cfg["PE_MEMBER01"]) - 1) + print(f"{atm_end=}") + print(f"{fire_start=}") + print(f"{fire_end=}") atm_petlist_bounds = f'0 {atm_end}' if cfg["CPL_AQM"]: From 754c8118c4383d6a979717cc3189f1e357e701c3 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr." Date: Sat, 21 Feb 2026 11:52:00 -0700 Subject: [PATCH 05/17] Update Externals file to point directly to branch --- Externals.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Externals.cfg b/Externals.cfg index 1b60212e3d..40cafc3e90 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -11,8 +11,8 @@ required = True protocol = git repo_url = https://github.com/mkavulich/ufs-weather-model # Specify either a branch name or a hash but not both. -#branch = develop -hash = 36689db9 +branch = wind_vinterp_and_openmp_updates +#hash = 36689db9 local_path = sorc/ufs-weather-model required = True From 585b6fc725230cfae71274a04eee1041034778b9 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr." Date: Tue, 24 Feb 2026 12:54:20 -0700 Subject: [PATCH 06/17] New branch for updated weather model code --- Externals.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Externals.cfg b/Externals.cfg index 40cafc3e90..317588d418 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -11,7 +11,7 @@ required = True protocol = git repo_url = https://github.com/mkavulich/ufs-weather-model # Specify either a branch name or a hash but not both. -branch = wind_vinterp_and_openmp_updates +branch = wind_vinterp_and_openmp_updates_rebased #hash = 36689db9 local_path = sorc/ufs-weather-model required = True From b32c6461510dd964e8993c7542c46a798bbd4a0a Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Fri, 13 Mar 2026 11:59:34 -0500 Subject: [PATCH 07/17] Update WE2E test with new options --- .../fire/config.UFS_FIRE_multifire_two-way-coupled.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml b/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml index 394dc03de0..8f9ffb1698 100644 --- a/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml +++ b/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml @@ -73,6 +73,8 @@ fire: FIRE_UPWINDING: 9 FIRE_LSM_ZCOUPLING: False FIRE_LSM_ZCOUPLING_REF: 60.0 + OMP_NUM_THREADS_FIRE: 2 + WIND_VINTERP_OPT: 1 task_run_fcst: fv3: execution: @@ -80,4 +82,4 @@ task_run_fcst: walltime: 01:00:00 task_integration_test: envvars: - TEST_UFS_FIRE: true \ No newline at end of file + TEST_UFS_FIRE: true From dfdfe34f689c3a5234a95af3263f3357ff22a25c Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Fri, 13 Mar 2026 11:15:52 -0600 Subject: [PATCH 08/17] Updating fire section of users guide for new options --- doc/UsersGuide/BuildingRunningTesting/FIRE.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/UsersGuide/BuildingRunningTesting/FIRE.rst b/doc/UsersGuide/BuildingRunningTesting/FIRE.rst index 69f5a52cf1..43b8a1b7d6 100644 --- a/doc/UsersGuide/BuildingRunningTesting/FIRE.rst +++ b/doc/UsersGuide/BuildingRunningTesting/FIRE.rst @@ -98,6 +98,14 @@ The fire module has the ability to print out additional messages to the log file fire: FIRE_PRINT_MSG: 1 +The fire module now supports OpenMP parallelization. By default, parallelization is off, but it can be enabled by setting ``OMP_NUM_THREADS_FIRE`` to a value greater than 1. In testing we have observed a 10-25% speedup with ``OMP_NUM_THREADS_FIRE: 2`` vs 1, with only marginal additional speedup for ``OMP_NUM_THREADS_FIRE>2``. + +.. code-block:: console + + fire: + OMP_NUM_THREADS_FIRE: 2 + + Additional boundary conditions file ----------------------------------- @@ -148,6 +156,8 @@ In this case, a single fire (``FIRE_NUM_IGNITIONS: 1``) of radius 250 meters (`` The CFBM creates output files in :term:`netCDF` format, with the naming scheme ``fire_output_YYYY-MM-DD_hh:mm:ss.nc``. In this case the output files are written every 30 minutes (``OUTPUT_DT_FIRE: 1800``). +Users can also modify the wind profile used in the CFBM with the setting ``WIND_VINTERP_OPT``. By default, the full prognostic wind field from the atmospheric model is used to calculate a wind profile for spreading the fire. Setting ``WIND_VINTERP_OPT: 1`` changes this to use only the diagnostic 10m wind, which is less compute-intensive and therefore runs faster. + .. note:: Any of the settings under :fire-ug:`the &fire section of the namelist ` can be specified in the SRW App ``config.yaml`` file under the ``fire:`` section, not just the settings described above. However, any additional settings from ``namelist.fire`` will need to be added to ``config_defaults.yaml`` first; otherwise the check for valid SRW options will fail. From b08fd892c516011a9d1626a5582ce0d3635fa2a2 Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Fri, 13 Mar 2026 14:29:41 -0500 Subject: [PATCH 09/17] Change integration test settings for new fire namelist options --- scripts/exregional_integration_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/exregional_integration_test.py b/scripts/exregional_integration_test.py index 299bbcee7d..ee95b3a121 100755 --- a/scripts/exregional_integration_test.py +++ b/scripts/exregional_integration_test.py @@ -126,7 +126,7 @@ def test_output_files_created(self) -> None: def test_namelist_creation(self) -> None: base_params = { - "time": {"dt", "interval_output"}, + "time": {"dt", "interval_output", "num_tiles"}, "atm": {"interval_atm", "kde"}, "fire": { "fire_num_ignitions", @@ -137,6 +137,7 @@ def test_namelist_creation(self) -> None: "fire_upwinding", "fire_lsm_zcoupling", "fire_lsm_zcoupling_ref", + "wind_vinterp_opt", }, } multifire_params = ( From 00907148226136f4056a36823d65084d1252efb5 Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Fri, 13 Mar 2026 14:39:25 -0500 Subject: [PATCH 10/17] Better wording and format fix for OMP_NUM_THREADS_FIRE guidance in users guide --- doc/UsersGuide/BuildingRunningTesting/FIRE.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/UsersGuide/BuildingRunningTesting/FIRE.rst b/doc/UsersGuide/BuildingRunningTesting/FIRE.rst index 43b8a1b7d6..e8a96083a6 100644 --- a/doc/UsersGuide/BuildingRunningTesting/FIRE.rst +++ b/doc/UsersGuide/BuildingRunningTesting/FIRE.rst @@ -98,10 +98,10 @@ The fire module has the ability to print out additional messages to the log file fire: FIRE_PRINT_MSG: 1 -The fire module now supports OpenMP parallelization. By default, parallelization is off, but it can be enabled by setting ``OMP_NUM_THREADS_FIRE`` to a value greater than 1. In testing we have observed a 10-25% speedup with ``OMP_NUM_THREADS_FIRE: 2`` vs 1, with only marginal additional speedup for ``OMP_NUM_THREADS_FIRE>2``. +The fire module now supports OpenMP parallelization. By default, parallelization is off, but it can be enabled by setting ``OMP_NUM_THREADS_FIRE`` to a value greater than 1. In testing with the default case (200x200 domain) we have observed a 10-25% speedup with ``OMP_NUM_THREADS_FIRE: 2`` vs 1, with only marginal additional speedup for ``OMP_NUM_THREADS_FIRE>2``. However, larger domains may benefit from additional parallel threads. .. code-block:: console - + fire: OMP_NUM_THREADS_FIRE: 2 From 52d0c1a067b77075977ee7661cb97f692bcf0752 Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Fri, 13 Mar 2026 14:41:14 -0500 Subject: [PATCH 11/17] Remove debugging prints --- ush/create_ufs_configure_file.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ush/create_ufs_configure_file.py b/ush/create_ufs_configure_file.py index 551a26151c..3b833e80f4 100644 --- a/ush/create_ufs_configure_file.py +++ b/ush/create_ufs_configure_file.py @@ -31,16 +31,10 @@ def create_ufs_configure_file(run_dir,cfg): # Set necessary variables for each coupled configuration - print(f"{cfg['PE_MEMBER01']=}") - print(f"{cfg['FIRE_NUM_TASKS']=}") - print(f"{cfg['OMP_NUM_THREADS_FIRE']=}") atm_end = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE']) - 1) aqm_end = str(int(cfg["LAYOUT_X"]) * int(cfg["LAYOUT_Y"]) - 1) fire_start = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE'])) fire_end = str(int(cfg["PE_MEMBER01"]) - 1) - print(f"{atm_end=}") - print(f"{fire_start=}") - print(f"{fire_end=}") atm_petlist_bounds = f'0 {atm_end}' if cfg["CPL_AQM"]: From 0bccc0f4a8a9ef02a6ca2c8a1986c9aad2e58adc Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Fri, 13 Mar 2026 14:42:47 -0500 Subject: [PATCH 12/17] Add check for bad number of openmp tasks in setup.py --- ush/setup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ush/setup.py b/ush/setup.py index 4e9b4c416e..ee61d85283 100644 --- a/ush/setup.py +++ b/ush/setup.py @@ -1735,6 +1735,8 @@ def _get_location(xcs, fmt, expt_cfg): FV3_HRRR, FV3_HRRR_gf, and RRFS_sas""" )) if fire_conf["FIRE_NUM_TASKS"] < 1: raise ValueError("FIRE_NUM_TASKS must be > 0 if UFS_FIRE is True") + if fire_conf["OMP_NUM_THREADS_FIRE"] < 1: + raise ValueError("FIRE_NUM_TASKS must be > 0 if UFS_FIRE is True") if fire_conf["FIRE_NUM_TASKS"] > 1: raise ValueError("FIRE_NUM_TASKS > 1 not yet supported") From 8350007e8652785f15e579dc40caccc67766c867 Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Fri, 13 Mar 2026 15:32:45 -0500 Subject: [PATCH 13/17] Fix ufs.configure for non-fire runs --- ush/create_ufs_configure_file.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ush/create_ufs_configure_file.py b/ush/create_ufs_configure_file.py index 3b833e80f4..6aca2ccffa 100644 --- a/ush/create_ufs_configure_file.py +++ b/ush/create_ufs_configure_file.py @@ -108,6 +108,7 @@ def create_ufs_configure_file(run_dir,cfg): "runseq": runseq, "AQM_pb": "", "FIRE_pb": "", + "FIRE_omp_num_threads_line": "", "dt_atmos": cfg["DT_ATMOS"], "print_esmf": cfg["PRINT_ESMF"], "cpl_aqm": cfg["CPL_AQM"] From 1a93710b44f47f94192db9ebd6349123c068bf84 Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Mon, 16 Mar 2026 12:06:33 -0500 Subject: [PATCH 14/17] PYLINT: fix long lines --- ush/create_ufs_configure_file.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ush/create_ufs_configure_file.py b/ush/create_ufs_configure_file.py index 6aca2ccffa..a4c5a1be77 100644 --- a/ush/create_ufs_configure_file.py +++ b/ush/create_ufs_configure_file.py @@ -31,9 +31,11 @@ def create_ufs_configure_file(run_dir,cfg): # Set necessary variables for each coupled configuration - atm_end = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE']) - 1) + atm_end = str(int(cfg["PE_MEMBER01"]) - + int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE']) - 1) aqm_end = str(int(cfg["LAYOUT_X"]) * int(cfg["LAYOUT_Y"]) - 1) - fire_start = str(int(cfg["PE_MEMBER01"]) - int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE'])) + fire_start = str(int(cfg["PE_MEMBER01"]) - + int(cfg["FIRE_NUM_TASKS"] * cfg['OMP_NUM_THREADS_FIRE'])) fire_end = str(int(cfg["PE_MEMBER01"]) - 1) atm_petlist_bounds = f'0 {atm_end}' From 3224c5958514e16ccd7300a730d4bfb0df3b10b7 Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Tue, 17 Mar 2026 08:15:42 -0500 Subject: [PATCH 15/17] UFS WM PR merged --- Externals.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Externals.cfg b/Externals.cfg index 317588d418..8230973deb 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -9,10 +9,10 @@ required = True [ufs-weather-model] protocol = git -repo_url = https://github.com/mkavulich/ufs-weather-model +repo_url = https://github.com/ufs-community/ufs-weather-model # Specify either a branch name or a hash but not both. -branch = wind_vinterp_and_openmp_updates_rebased -#hash = 36689db9 +#branch = develop +hash = 36d5e2a local_path = sorc/ufs-weather-model required = True From 0673d5774d9bbc4db94e55b7e450f7ccc53b22e1 Mon Sep 17 00:00:00 2001 From: "Michael J. Kavulich, Jr" Date: Tue, 17 Mar 2026 08:31:55 -0500 Subject: [PATCH 16/17] Update description for multifire test --- .../fire/config.UFS_FIRE_multifire_two-way-coupled.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml b/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml index 8f9ffb1698..16db96f024 100644 --- a/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml +++ b/tests/WE2E/test_configs/fire/config.UFS_FIRE_multifire_two-way-coupled.yaml @@ -1,6 +1,8 @@ metadata: description: >- - Tests the UFS_FIRE capability for multiple fire ignitions with one-way (ATM-->FIRE) coupling + Tests the UFS_FIRE capability for multiple fire ignitions with two-way (ATM<-->FIRE) coupling. + Also tests OpenMP parallelism (OMP_NUM_THREADS_FIRE=2) and namelist option WIND_VINTERP_OPT=1 + user: RUN_ENVIR: community workflow: From 6b766b03fba901edbb3e0c39a8fbf6680c2b8971 Mon Sep 17 00:00:00 2001 From: "michael.lueken" Date: Tue, 17 Mar 2026 08:57:26 -0500 Subject: [PATCH 17/17] [feature/ufs_fire_openmp_windinterp_updates]: comprehensive.derecho - Uncomment grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR WE2E test comprehensive.hera.gnu - Same comprehensive.hera.intel - Same comprehensive.noaacloud - Same comprehensive.orion - Same comprehensive.ursa.gnu - Same comprehensive.ursa.intel - Same coverage.hercules - Same --- tests/WE2E/machine_suites/comprehensive.derecho | 2 +- tests/WE2E/machine_suites/comprehensive.hera.gnu | 2 +- tests/WE2E/machine_suites/comprehensive.hera.intel | 2 +- tests/WE2E/machine_suites/comprehensive.noaacloud | 2 +- tests/WE2E/machine_suites/comprehensive.orion | 2 +- tests/WE2E/machine_suites/comprehensive.ursa.gnu | 2 +- tests/WE2E/machine_suites/comprehensive.ursa.intel | 2 +- tests/WE2E/machine_suites/coverage.hercules | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/WE2E/machine_suites/comprehensive.derecho b/tests/WE2E/machine_suites/comprehensive.derecho index 3350ad8278..a900fd06df 100644 --- a/tests/WE2E/machine_suites/comprehensive.derecho +++ b/tests/WE2E/machine_suites/comprehensive.derecho @@ -25,7 +25,7 @@ grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_RAP diff --git a/tests/WE2E/machine_suites/comprehensive.hera.gnu b/tests/WE2E/machine_suites/comprehensive.hera.gnu index d293388d83..71f8096986 100644 --- a/tests/WE2E/machine_suites/comprehensive.hera.gnu +++ b/tests/WE2E/machine_suites/comprehensive.hera.gnu @@ -33,7 +33,7 @@ grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_RAP diff --git a/tests/WE2E/machine_suites/comprehensive.hera.intel b/tests/WE2E/machine_suites/comprehensive.hera.intel index f4391bcf1d..9fdffcb57f 100644 --- a/tests/WE2E/machine_suites/comprehensive.hera.intel +++ b/tests/WE2E/machine_suites/comprehensive.hera.intel @@ -34,7 +34,7 @@ grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_RAP diff --git a/tests/WE2E/machine_suites/comprehensive.noaacloud b/tests/WE2E/machine_suites/comprehensive.noaacloud index bda895182e..d972e08b71 100644 --- a/tests/WE2E/machine_suites/comprehensive.noaacloud +++ b/tests/WE2E/machine_suites/comprehensive.noaacloud @@ -14,7 +14,7 @@ grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_RAP diff --git a/tests/WE2E/machine_suites/comprehensive.orion b/tests/WE2E/machine_suites/comprehensive.orion index 4c465febe6..e504650af1 100644 --- a/tests/WE2E/machine_suites/comprehensive.orion +++ b/tests/WE2E/machine_suites/comprehensive.orion @@ -25,7 +25,7 @@ grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_RAP diff --git a/tests/WE2E/machine_suites/comprehensive.ursa.gnu b/tests/WE2E/machine_suites/comprehensive.ursa.gnu index d293388d83..71f8096986 100644 --- a/tests/WE2E/machine_suites/comprehensive.ursa.gnu +++ b/tests/WE2E/machine_suites/comprehensive.ursa.gnu @@ -33,7 +33,7 @@ grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_RAP diff --git a/tests/WE2E/machine_suites/comprehensive.ursa.intel b/tests/WE2E/machine_suites/comprehensive.ursa.intel index f4391bcf1d..9fdffcb57f 100644 --- a/tests/WE2E/machine_suites/comprehensive.ursa.intel +++ b/tests/WE2E/machine_suites/comprehensive.ursa.intel @@ -34,7 +34,7 @@ grid_RRFS_CONUS_13km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v16_plot grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_RRFS_v1beta grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_RAP_suite_RAP diff --git a/tests/WE2E/machine_suites/coverage.hercules b/tests/WE2E/machine_suites/coverage.hercules index af7332e750..007bf9b718 100644 --- a/tests/WE2E/machine_suites/coverage.hercules +++ b/tests/WE2E/machine_suites/coverage.hercules @@ -1,6 +1,6 @@ grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v17_p8_plot grid_RRFS_CONUS_3km_ics_FV3GFS_lbcs_FV3GFS_suite_GFS_v15p2 -#grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR +grid_RRFS_CONUS_25km_ics_FV3GFS_lbcs_FV3GFS_suite_HRRR grid_RRFS_NA_13km_ics_FV3GFS_lbcs_FV3GFS_suite_RAP grid_SUBCONUS_Ind_3km_ics_NAM_lbcs_NAM_suite_GFS_v16 specify_EXTRN_MDL_SYSBASEDIR_ICS_LBCS