2.10. Community Fire Behavior Module (UFS FIRE)

The Community Fire Behavior Model (CFBM) is a wildland fire model coupled to the UFS Atmospheric Model. The capability to run this code is now available in the UFS Short-Range Weather App for easy use by the community. The fire_behavior repository is a submodule of the UFS Weather Model (WM), coupled through the NUOPC Layer to provide direct feedback between the simulated atmosphere and the simulated fire. More information about the CFBM can be found in the CFBM Users Guide.

The biggest difference between the UFS FIRE capability and other modes of the UFS SRW is that a special build flag is required to build the coupled fire behavior code, as described in the instructions below. Aside from that, the need for additional input files, and some fire-specific config settings, configuring and running an experiment is the same as any other use of SRW.

Note

Although this chapter is the primary documentation resource for running the UFS FIRE configuration, users may need to refer to Chapter 2.3 and Chapter 2.4 for additional information on building and running the SRW App, respectively.

2.10.1. Quick Start Guide (UFS FIRE)

2.10.1.1. Download the Code

Clone the develop branch of the authoritative SRW App repository:

git clone -b develop https://github.com/ufs-community/ufs-srweather-app.git

2.10.1.2. Checkout Externals

Users must run the checkout_externals script to collect (or “check out”) the individual components of the SRW App from their respective GitHub repositories.

cd /path/to/ufs-srweather-app/
./manage_externals/checkout_externals

2.10.1.3. Build the SRW App with Fire Behavior Enabled

To build the SRW with fire behavior code, use the following command:

./devbuild.sh -p=<machine> -a=ATMF

where <machine> is hera, derecho, or any other Tier 1 platform. The -a argument indicates the configuration/version of the application to build; in this case, the atmosphere-fire coupling (ATMF).

If UFS FIRE builds correctly, users should see the standard executables listed in Table 2.3. There are no additional files expected, since the CFBM is coupled to the UFS weather model via the same ufs_model executable.

2.10.1.4. Load the srw_app Environment

Load the appropriate modules for the workflow:

module use /path/to/ufs-srweather-app/modulefiles
module load wflow_<machine>

where <machine> is hera, derecho, or any other Tier 1 platform.

If the console outputs a message, the user should run the commands specified in the message. For example, if the output says:

Please do the following to activate conda:
    > conda activate srw_app

then the user should run conda activate srw_app. Otherwise, the user can continue with configuring the workflow.

2.10.1.5. Configure Experiment

Users will need to configure their experiment by setting parameters in the config.yaml file. To start, users can copy an example experiment setting into config.yaml:

cd ush
cp config.fire.yaml config.yaml

Users will need to change the MACHINE and ACCOUNT variables in config.yaml to match their system. They may also wish to adjust other experiment settings, especially under the fire: section, described in further detail below. For more information on other configuration settings, see Section 3.1.

Activating the fire behavior module is done by setting UFS_FIRE: True in the fire/envvars: section of your config.yaml file. If this variable is not specified or set to false, a normal atmospheric simulation will be run, without fire.

fire:
  envvars:
    UFS_FIRE: True

Note

The UFS_FIRE capability requires using a CCPP physics suite containing the parameterizations GFS_surface_composites_post and rrfs_smoke_wrapper. For the v3.0.0 release, these supported suites are FV3_HRRR, FV3_HRRR_gf, and RRFS_sas.

The fire module has the ability to print out additional messages to the log file for debugging; to enable additional log output (which may slow down the integration considerably, especially at higher levels) set FIRE_PRINT_MSG > 0

fire:
  FIRE_PRINT_MSG: 1

2.10.1.6. Additional boundary conditions file

The CFBM, as an independent, coupled component, runs separately from the atmospheric component of the weather model, requires an additional input file (geo_em.d01.nc) that contains fire-specific boundary conditions such as fuel properties. On Level 1 systems, users can find an example file in the usual input data locations under LOCATION. Users can also download the data required for the community experiment from the UFS SRW App Data Bucket.

Instructions on how to create this file for your own experiment can be found in the CFBM Users Guide.

Once the file is acquired/created, you will need to specify its location in your config.yaml file with the setting:

fire:
  envvars:
    FIRE_INPUT_DIR: /directory/containing/geo_em/file

2.10.1.7. Specifying a fire ignition

The CFBM simulates fires by specifying an “ignition” that will then propogate based on the atmospheric conditions and the specified settings. An ignition can either be a “point ignition” (i.e. a disk of fire some specified radius around a single location), or a straight line linear ignition specified by a start and end location and a specified “radius” (width). The ignition can start at the beginning of your simulation, or at some time later as specified. The CFBM can support up to 5 different fire ignitions at different places and times in a given simulation.

The CFBM settings are controlled by the namelist file namelist.fire. The available settings in this file are described in the CFBM Users Guide, and an example file can be found under parm/namelist.fire. However, there is no need to manually provide or edit this file, as the SRW workflow will create the fire namelist using the user settings in config.yaml. The fire-specific options in SRW are documented in Section 3.1.21.

2.10.1.8. Example fire configuration

Here is one example of settings that can be specified for a UFS FIRE simulation:

fire:
  envvars:
    UFS_FIRE: True
    FIRE_INPUT_DIR: /home/fire_input
  DT_FIRE: 0.5
  OUTPUT_DT_FIRE: 1800
  FIRE_NUM_IGNITIONS: 1
  FIRE_IGNITION_ROS: 0.05
  FIRE_IGNITION_START_LAT: 40.609
  FIRE_IGNITION_START_LON: -105.879
  FIRE_IGNITION_END_LAT: 40.609
  FIRE_IGNITION_END_LON: -105.879
  FIRE_IGNITION_RADIUS: 250
  FIRE_IGNITION_START_TIME: 6480
  FIRE_IGNITION_END_TIME: 7000
  FIRE_ATM_FEEDBACK: 1.0

In this case, a single fire (FIRE_NUM_IGNITIONS: 1) of radius 250 meters (FIRE_IGNITION_RADIUS: 250) is ignited at latitude 40.609˚N (FIRE_IGNITION_START_LAT: 40.609), 105.879˚W (FIRE_IGNITION_START_LON: -105.879) 6480 seconds after the start of the simulation (FIRE_IGNITION_START_TIME: 6480) with a rate of spread specified as 0.05 m/s (FIRE_IGNITION_ROS: 0.05). This “ignition” ends 7000 seconds after the start of the simulation (FIRE_IGNITION_END_TIME: 7000), after which the fire behavior is completely governed by the physics of the fire behavior model (integrated every 0.5 seconds as specified by OUTPUT_DT_FIRE), the input fuel conditions, and the simulated atmospheric conditions. This simulated fire will feed back heat and moisture flux to the dynamical core, multiplied by a factor set by the user (FIRE_ATM_FEEDBACK).

The CFBM creates output files in 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).

Note

Any of the settings under 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.

To specify multiple fire ignitions (FIRE_NUM_IGNITIONS > 1), the above settings will need to be specified as a list, with one entry per ignition. See Section 3.1.21 for more details.

2.10.1.9. Generate the Workflow

Generate the workflow:

./generate_FV3LAM_wflow.py

2.10.1.10. Run the Workflow

If USE_CRON_TO_RELAUNCH is set to true in config.yaml, the workflow will run automatically. If it was set to false, users must submit the workflow manually from the experiment directory:

cd ${EXPT_BASEDIR}/${EXPT_SUBDIR}
./launch_FV3LAM_wflow.sh

Repeat the launch command regularly until a SUCCESS or FAILURE message appears on the terminal window. See Section 3.1.3.2 for more on the ${EXPT_BASEDIR} and ${EXPT_SUBDIR} variables.

Users may check experiment status from the experiment directory with either of the following commands:

# Check the experiment status (for cron jobs)
rocotostat -w FV3LAM_wflow.xml -d FV3LAM_wflow.db -v 10

# Check the experiment status and relaunch the workflow (for manual jobs)
./launch_FV3LAM_wflow.sh; tail -n 40 log.launch_FV3LAM_wflow

2.10.1.11. Experiment Output

The workflow run is complete when all tasks display a “SUCCEEDED” message. If everything goes smoothly, users will eventually see a workflow status table similar to the following:

       CYCLE                    TASK                       JOBID               STATE         EXIT STATUS     TRIES      DURATION
================================================================================================================================
202008131800               make_grid                     6498125           SUCCEEDED                   0         1          70.0
202008131800               make_orog                     6498145           SUCCEEDED                   0         1          87.0
202008131800          make_sfc_climo                     6498172           SUCCEEDED                   0         1          90.0
202008131800           get_extrn_ics                     6498126           SUCCEEDED                   0         1          46.0
202008131800          get_extrn_lbcs                     6498127           SUCCEEDED                   0         1          46.0
202008131800         make_ics_mem000                     6498202           SUCCEEDED                   0         1          91.0
202008131800        make_lbcs_mem000                     6498203           SUCCEEDED                   0         1         106.0
202008131800         run_fcst_mem000                     6498309           SUCCEEDED                   0         1        1032.0
202008131800    run_post_mem000_f000                     6498336           SUCCEEDED                   0         1          75.0
202008131800    run_post_mem000_f001                     6498387           SUCCEEDED                   0         1          76.0
202008131800    run_post_mem000_f002                     6498408           SUCCEEDED                   0         1          75.0
202008131800    run_post_mem000_f003                     6498409           SUCCEEDED                   0         1          75.0
202008131800    run_post_mem000_f004                     6498432           SUCCEEDED                   0         1          64.0
202008131800    run_post_mem000_f005                     6498433           SUCCEEDED                   0         1          77.0
202008131800    run_post_mem000_f006                     6498435           SUCCEEDED                   0         1          74.0
202008131800    integration_test_mem000                  6498434           SUCCEEDED                   0         1          27.0

In addition to the standard UFS and UPP output described elsewhere in this users guide, the UFS_FIRE runs produce additional output files described above:

$ cd /path/to/expt_dir/experiment
$ ls 2020081318/fire_output*
fire_output_2020-08-13_18:00:00.nc  fire_output_2020-08-13_19:30:00.nc  fire_output_2020-08-13_21:00:00.nc  fire_output_2020-08-13_22:30:00.nc
fire_output_2020-08-13_18:30:00.nc  fire_output_2020-08-13_20:00:00.nc  fire_output_2020-08-13_21:30:00.nc  fire_output_2020-08-13_23:00:00.nc
fire_output_2020-08-13_19:00:00.nc  fire_output_2020-08-13_20:30:00.nc  fire_output_2020-08-13_22:00:00.nc  fire_output_2020-08-13_23:30:00.nc

These files contain output directly from the fire model (hence why they are at a greater frequency), including variables such as the fire perimeter and area, smoke emitted, and fuel percentage burnt.

Image of the simulated fire area from an example run

2.10.2. WE2E Tests for FIRE

Build the app for FIRE:

./devbuild.sh -p=hera -a=ATMF

Run the WE2E tests:

$ cd /path/to/ufs-srweather-app/tests/WE2E
$ ./run_we2e_tests.py -t my_tests.txt -m <MACHINE> -a <account> -q -t fire

You can also run each test individually if needed:

$ ./run_we2e_tests.py -t my_tests.txt -m <MACHINE> -a <account> -q -t UFS_FIRE_one-way-coupled
$ ./run_we2e_tests.py -t my_tests.txt -m <MACHINE> -a <account> -q -t UFS_FIRE_multifire_two-way-coupled