2.9. SRW Smoke & Dust (SRW-SD) Features

This chapter provides instructions for running an example six-hour forecast for July 22, 2019 at 0z using SRW Smoke & Dust (SRW-SD) features. These features have been merged into the SRW App from the UFS WM. This experimental forecast uses RAP data for ICs and LBCs, the RRFS_CONUS_3km predefined grid, and the FV3_HRRR_gf physics suite. This physics suite is similar to the NOAA operational HRRR v4 suite (Dowell et al., 2022), with the addition of the Grell-Freitas deep convective parameterization. Scientific documentation for the HRRR_gf suite and technical documentation are available with the CCPP v7.0.0 release but may differ slightly from the version available in the SRW App.

Note

Although this chapter is the primary documentation resource for running the SRW-SD 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.9.1. Quick Start Guide (SRW-SD)

2.9.1.1. Build the SRW & Load the srw_app Environment

Please refer to Building and Running the UFS SRW Application (quick build/run) or Building the SRW App for step-by-step build instructions.

2.9.1.2. Configure an Experiment

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

cd /path/to/ufs-srweather-app/ush
cp config.smoke_dust.yaml config.yaml

Users will need to change the ACCOUNT variable in config.yaml to an account that they have access to. They will also need to indicate which MACHINE they are working on. Users may also wish to adjust other experiment settings. For more information on each task and variable, see Workflow Parameters: Configuring the Workflow in config.yaml and config_defaults.yaml. For smoke/dust specific parameters please see Smoke and Dust Configuration Parameters.

In addition to the UFS SRW fixed files, additional data files are required to run the smoke and dust experiment:

  • fix_smoke: Contains forecast grids, regridding weights, a vegetation map, and dummy emissions (used when no in situ emission files are available).

  • data_smoke_dust/RAVE_fire: Emission estimates and Fire Radiative Power (FRP) observations derived from RAVE satellite observations. Additional RAVE data may be downloaded here for the last six months: https://www.ospo.noaa.gov/pub/Blended/RAVE/RAVE-HrlyEmiss-3km/. Note that SRW-SD uses 3-kilometer RAVE data files.

When using the basic config.smoke_dust.yaml experiment, the usual pre-processing and coldstart forecast tasks are used, because "parm/wflow/prep.yaml" appears in the list of workflow files in the rocoto: tasks: taskgroups: section of config.yaml (see Section 2.22 for task descriptions).

Smoke simulations can be performed in three ways:

  1. Current-day emissions: Using emissions estimated from satellite observations on the same day as the simulation (EBB_DCYCLE=1, PERSISTENCE=false).

  2. Traditional persistence: Using biomass burning emissions estimated from satellite observations of the previous day (a method commonly used in most smoke forecasting systems, EBB_DCYCLE=1, PERSISTENCE=true).

  3. Modulated persistence (considered experimental in the SRW App): The approach currently used by the RRFS-Smoke model, where emissions are forecasted based on a fire weather index that dictates the diurnal cycle (EBB_DCYCLE=2, PERSISTENCE=true).

2.9.1.3. Predefined Grid Support in SRW-SD

SRW-SD supports these predefined grids:

  • RRFS_CONUS_3km

  • RRFS_CONUS_13km

  • RRFS_CONUS_25km

  • RRFS_NA_13km

  • RRFS_NA_3km

Please see Limited Area Model (LAM) Grids: Predefined and User-Generated Options for more information on predefined grids in the SRW. User-generated grids are not supported with SRW-SD.

Note

North American ICs and LBCs are not staged for the predefined SRW-SD experiment.

2.9.1.4. Additional SRW-SD Tasks

Compared to the typical SRW App workflow, the SRW-SD has slightly different tasks for pre-processing. As in the SRW App default workflow, the SRW-SD workflow uses the preprocessing tasks from prep.yaml, but it adds smoke-and-dust-specific tasks from smoke_dust.yaml.

The new tasks for SRW-SD are shown in Table 2.24.

Table 2.24 Tasks for SRW-SD Pre-Processing

Task Name

Description

File

smoke_dust

Generates the input data file for smoke and dust to be used in the UFS Weather Model.

parm/wflow/smoke_dust.yaml

prepstart

Adds the smoke and dust fields to the ICs file from the restart file in the previous cycle.

parm/wflow/smoke_dust.yaml

The Python utilities listed in Table 2.25 are used to perform data processing and calculations required for the SRW-SD forecast.

Table 2.25 Python Utilities Used by Smoke and Dust Tasks

Script

Description

ush/smoke_dust/add_smoke.py

Transfers smoke and dust-related variables from FV3 tracer outputs to GFS initial conditions.

ush/smoke_dust/generate_emissions.py

Calculates fire behavior and emission variables, creating input for the smoke and dust tracers.


participant rocoto as R
participant task_smoke_dust as T
participant JSRW_SMOKE_DUST as J
participant exsrw_smoke_dust.sh as E
participant generate_emissions.py as G

== Task: smoke_dust ==

R -> T: Run task
T -> J: Submit job card
J -> E: Run wrapper script
E -> G: Run emissions generation
G -> G: Process emissions
E <- G
J <- E
T <- J
R <- T

Fig. 2.32 Overview of the major steps occurring in the smoke_dust task.


collections "Input Data" as SD
participant generate_emissions.py as G
participant SmokeDustContext as C
participant SmokeDustPreprocessor as P
participant SmokeDustCycleProcessor as CP
participant SmokeDustRegridProcessor as RP
collections "Output Data" as OD

== Task: smoke_dust (generate_emissions.py) ==

activate G
G -> C: Intialize context
activate C
SD <-- C: Validate input structure
G -> P: Run preprocessor
activate P
C <-- P: Read context
P -> CP: Initialize cycle processor
C <-- CP: Read context
activate CP
P <- CP: Get forecast dates
P -> RP: Initialize regrid processor
activate RP
C <-- RP: Read context
P -> RP: Run regridding
SD <-- RP: Read input data
OD <- RP: Write interpolated data
activate OD
P <- RP
deactivate RP
P -> CP: Run cycle processor
SD <-- CP: Read input data
OD <-- CP: Read interpolated data
OD <- CP: Write emissions file
P <- CP
deactivate CP
G <- P
deactivate P
deactivate C
deactivate G

Fig. 2.33 Deep dive into the sequence of operations occurring in generate_emissions.py.


participant rocoto as R
participant task_prepstart as T
participant JSRW_PREPSTART as J
participant exsrw_prepstart.sh as E
participant add_smoke.py as G

== Task: prep_start ==

R -> T: Run task
T -> J: Submit job card
J -> E: Run wrapper script
E -> G: Run transfer script
G -> G: Transfer tracers
E <- G
J <- E
T <- J
R <- T

Fig. 2.34 Overview of the major steps occurring in the prepstart task.


Unit tests can be found in tests/test_python/test_smoke_dust. The SRW-SD Python utilities run under their own Anaconda environment similar to the srw_app environment: sd_environment.yml.

2.9.1.5. Generate and Run the Workflow

Please refer to Building and Running the UFS SRW Application (quick build/run) or Building the SRW App for step-by-step instructions on how to build and run the workflow.

2.9.1.6. 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:

$ rocotostat -w FV3LAM_wflow.xml -d FV3LAM_wflow.db -v 10
      CYCLE                    TASK       JOBID        STATE   EXIT STATUS   TRIES   DURATION
==============================================================================================
201907220000               make_grid    18984137    SUCCEEDED            0       1       29.0
201907220000               make_orog    18984148    SUCCEEDED            0       1      419.0
201907220000          make_sfc_climo    18984184    SUCCEEDED            0       1       82.0
201907220000              smoke_dust    18984186    SUCCEEDED            0       1      243.0
201907220000               prepstart    18984324    SUCCEEDED            0       1       24.0
201907220000           get_extrn_ics    18984138    SUCCEEDED            0       1       11.0
201907220000          get_extrn_lbcs    18984149    SUCCEEDED            0       1       12.0
201907220000         make_ics_mem000    18984185    SUCCEEDED            0       1      157.0
201907220000        make_lbcs_mem000    18984187    SUCCEEDED            0       1       85.0
201907220000     run_forecast_mem000    18984328    SUCCEEDED            0       1     6199.0
201907220000    run_post_mem000_f000    18988282    SUCCEEDED            0       1      212.0
201907220000    run_post_mem000_f001    18988283    SUCCEEDED            0       1      247.0
201907220000    run_post_mem000_f002    18988284    SUCCEEDED            0       1      258.0
201907220000    run_post_mem000_f003    18988285    SUCCEEDED            0       1      271.0
201907220000    run_post_mem000_f004    18988286    SUCCEEDED            0       1      284.0
201907220000    run_post_mem000_f005    18988287    SUCCEEDED            0       1      286.0
201907220000    run_post_mem000_f006    18988288    SUCCEEDED            0       1      292.0
==============================================================================================
201907220600              smoke_dust    18988289    SUCCEEDED            0       1      225.0
201907220600               prepstart    18988302    SUCCEEDED            0       1      112.0
201907220600           get_extrn_ics    18984150    SUCCEEDED            0       1       10.0
201907220600          get_extrn_lbcs    18984151    SUCCEEDED            0       1       14.0
201907220600         make_ics_mem000    18984188    SUCCEEDED            0       1      152.0
201907220600        make_lbcs_mem000    18984189    SUCCEEDED            0       1       79.0
201907220600     run_forecast_mem000    18988311    SUCCEEDED            0       1     6191.0
201907220600    run_post_mem000_f000    18989105    SUCCEEDED            0       1      212.0
201907220600    run_post_mem000_f001    18989106    SUCCEEDED            0       1      283.0
201907220600    run_post_mem000_f002    18989107    SUCCEEDED            0       1      287.0
201907220600    run_post_mem000_f003    18989108    SUCCEEDED            0       1      284.0
201907220600    run_post_mem000_f004    18989109    SUCCEEDED            0       1      289.0
201907220600    run_post_mem000_f005    18989110    SUCCEEDED            0       1      294.0
201907220600    run_post_mem000_f006    18989111    SUCCEEDED            0       1      294.0

If something goes wrong, users can check the log files, which are located by default in expt_dirs/smoke_dust_conus3km/logs. Post-processed smoke/dust output can be found in expt_dirs/smoke_dust_conus3km/<cycle>/postprd/smoke_dust.*.grib2. Output can also be found in the netCDF physcis/dynamics files: expt_dirs/smoke_dust_conus3km/<cycle>/<dynf|phyf><tile>.nc.

Table 2.26 Smoke/Dust Output Variables

Grib2 name

NetCDF name

Definition

Units

AEMFLX

ebu_smoke (phyf file)

Smoke Emissions

kg/m^2/s

WFIREPOT (or var discipline=2 master_table=2 parmcat=4 parm=26)

hwp (phyf file)

Hourly wildfire potential index

unitless

COLMD:entire atmosphere (considered as a single layer):anl:chemical=Particulate Organic Matter Dry

NA

Vertically integrated smoke

kg/m^2

MASSDEN:8 m above ground:anl:chemical=Particulate Organic Matter Dry:aerosol_size <2.5e-06

smoke (dynf file)

Smoke (PM2.5)

kg/m^3

MASSDEN:8 m above ground:anl:chemical=Dust Dry:aerosol_size <2.5e-06

dust (dynf file)

Fine dust

kg/m^3

MASSDEN:65 hybrid level:anl:aerosol=Dust dry:aerosol_size >=2.5e-06,<1e-05

coarsepm (dynf file)

Coarse dust

kg/m^3

AOTK

ext550

AOD

unitless