Skip to content

Commit 609c2fc

Browse files
authored
New module firebrand_spotting for WRF-Fire (wrf-model#1540)
TYPE: new feature KEYWORDS: fire firebrand spotting Lagrangian transport passive advection burnout SOURCE: Maria Frediani, Tim W. Juliano (NCAR-RAL) DESCRIPTION OF CHANGES: The new module firebrand_spotting for WRF-Fire is a passive Lagrangian transport parameterization to advect firebrands. The Firebrand Spotting parameterization was developed for the WRF-Fire component of the WRF model versions starting at 4.0.1. The parameterization couples to WRF-Fire and uses a Lagrangian particle transport framework to advect firebrands in the innermost nest of the domain. The parameterization runs in the atmospheric model inner domain and does not modify model variables (no feedback to WRF or WRF-Fire). The code comprises two independent modules, one with the physical processes and another with the necessary MPI wrapping routines that were not yet part of the WRF source code. The motivation to separate the MPI routines in an independent module was to enable them to be used in other model parameterizations through a USE statement without importing the firebrand spotting component. The Firebrand Spotting variables are part of Registry.fire and the subroutine is called from start_em.F and solve_em.F, after all the physics parameterizations and relevant halos are completed. When fires are active, the parameterization identifies areas at risk of fire spotting by modeling transport and physical processes of individual firebrands. Firebrands are released at multiple heights from grid points along the fire front with high fire rate-of-spread and denser fuel loads. Particles are transported with the atmospheric flow and consumed by combustion. Firebrands may burnout entirely or land, once they descend below a given height threshold. Particles that land before complete burnout are accumulated in a 2-D field during regular intervals. The likelihood of new fire ignitions due to spotting is computed using the ratio of landed firebrands per grid point to the total number of landed particles within the corresponding time interval between model outputs. The ratios are then scaled by a function of fuel load and moisture content at the corresponding grid points. LIST OF MODIFIED FILES: M Registry/Registry.EM_COMMON M Registry/registry.fire M dyn_em/depend.dyn_em M dyn_em/solve_em.F M dyn_em/start_em.F M main/depend.common M phys/Makefile A phys/module_firebrand_spotting.F A phys/module_firebrand_spotting_mpi.F TESTS CONDUCTED: 1. The module was designed for high-resolution simulations and tested using large-eddy simulation (LES) in the inner nest. Simulations for various case studies in Colorado have been done. 2. All tests have passed (latest commit: afc9142, after switching pbl from MYNN to YSU). There were no differences among the serial and MPI builds with 1 and 12 processors. The tests were all done from a restart file. The time step for these runs was 5s and the outputs were compared after 20s, 40s, and 1 min. 3. Jenkins tests are all passing. RELEASE NOTE: A new module to parameterize firebrand spotting for WRF-Fire is added. This is a passive Lagrangian transport scheme to transport and burnout firebrands generated at the fire front. The scheme is activated when ifire == 2 by setting the namelist option fs_firebrand_gen_lim to an integer greater than zero (default is 0, i.e. scheme is off). It runs with dmpar and serially compiled code and in the inner nest (grid_id == max_dom). It was designed and tested using a mesoscale to LES domain configuration.
1 parent 75bfe6d commit 609c2fc

File tree

9 files changed

+4869
-10
lines changed

9 files changed

+4869
-10
lines changed

Registry/Registry.EM_COMMON

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3372,6 +3372,7 @@ halo HALO_EM_D3_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1
33723372
halo HALO_EM_D3_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,moist,chem,tracer,scalar;4:mu_1,mu_2
33733373
halo HALO_EM_E_3 dyn_em 24:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
33743374
halo HALO_EM_E_5 dyn_em 48:u_1,u_2,v_1,v_2,w_1,w_2,t_1,t_2,ph_1,ph_2,tke_1,tke_2,;4:mu_1,mu_2
3375+
halo HALO_FIREBRAND_SPOTTING_5 dyn_em 48:muts,al
33753376
halo HALO_EM_MOIST_E_3 dyn_em 24:moist
33763377
halo HALO_EM_MOIST_E_5 dyn_em 48:moist
33773378
halo HALO_EM_MOIST_E_7 dyn_em 80:moist

Registry/registry.fire

Lines changed: 139 additions & 7 deletions
Large diffs are not rendered by default.

dyn_em/depend.dyn_em

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ start_em.o: module_bc_em.o \
252252
../phys/module_diag_zld.o \
253253
../phys/module_diag_trad_fields.o \
254254
../phys/module_fr_fire_driver_wrf.o \
255+
../phys/module_firebrand_spotting.o \
255256
$(CF)
256257

257258
solve_em.o: module_small_step_em.o \
@@ -280,7 +281,8 @@ solve_em.o: module_small_step_em.o \
280281
../phys/module_microphysics_driver.o \
281282
../phys/module_microphysics_zero_out.o \
282283
../phys/module_physics_addtendc.o \
283-
../phys/module_checkerror.o
284+
../phys/module_checkerror.o \
285+
../phys/module_firebrand_spotting.o
284286

285287
module_convtrans_prep.o :
286288

dyn_em/solve_em.F

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ SUBROUTINE solve_em ( grid , config_flags &
4646
,period_bdy_em_tracer_sub,period_em_da_sub,period_em_hydro_uv_sub &
4747
,period_em_f_sub,period_em_g_sub &
4848
,halo_em_f_1_sub,halo_em_init_4_sub,halo_em_thetam_sub,period_em_thetam_sub &
49-
,halo_em_d_pv_sub
49+
,halo_em_d_pv_sub,halo_firebrand_spotting_5_sub
5050
#endif
5151
USE module_utility
5252
! Mediation layer modules
@@ -78,6 +78,7 @@ SUBROUTINE solve_em ( grid , config_flags &
7878
USE module_llxy, ONLY : proj_cassini
7979
USE module_avgflx_em, ONLY : zero_avgflx, upd_avgflx
8080
USE module_cpl, ONLY : coupler_on, cpl_settime, cpl_store_input
81+
USE module_firebrand_spotting, ONLY : firebrand_spotting_em_driver
8182

8283
IMPLICIT NONE
8384

@@ -4746,6 +4747,54 @@ SUBROUTINE solve_em ( grid , config_flags &
47464747
ENDIF
47474748
#endif
47484749
4750+
4751+
!-----------------------------------------------------------------------
4752+
! firebrand spotting (passive Lagrangian particle transport,
4753+
! tracks firebrand physics properties)
4754+
!-----------------------------------------------------------------------
4755+
4756+
IF(config_flags%ifire == 2 .AND. &
4757+
! Check if spotting is on
4758+
config_flags%fs_firebrand_gen_lim > 0 .AND. &
4759+
! Check if this is the inner most grid
4760+
config_flags%max_dom == grid%id) THEN
4761+
4762+
#ifdef DM_PARALLEL
4763+
CALL wrf_debug ( 200 , ' call HALO_FIREBRAND_SPOTTING' )
4764+
# include "HALO_FIREBRAND_SPOTTING_5.inc"
4765+
#endif
4766+
4767+
CALL wrf_debug ( 3 , 'solve: calling firebrand_spotting_em_driver...' )
4768+
CALL firebrand_spotting_em_driver ( &
4769+
cf = config_flags, &
4770+
grid = grid, &
4771+
fs_p_id = grid%fs_p_id, &
4772+
fs_p_dt = grid%fs_p_dt, &
4773+
fs_p_x = grid%fs_p_x, &
4774+
fs_p_y = grid%fs_p_y, &
4775+
fs_p_z = grid%fs_p_z, &
4776+
fs_gen_inst = grid%fs_gen_inst, &
4777+
fs_p_mass = grid%fs_p_mass, &
4778+
fs_p_diam = grid%fs_p_diam, &
4779+
fs_p_effd = grid%fs_p_effd, &
4780+
fs_p_temp = grid%fs_p_temp, &
4781+
fs_p_tvel = grid%fs_p_tvel, &
4782+
fs_last_gen_dt= grid%fs_last_gen_dt, &
4783+
fs_gen_idmax = grid%fs_gen_idmax, &
4784+
fs_fire_ROSdt = grid%fs_fire_ROSdt, &
4785+
fs_fire_area = grid%fs_fire_area, &
4786+
fs_count_landed_all = grid%fs_count_landed_all, &
4787+
fs_count_landed_hist = grid%fs_count_landed_hist, &
4788+
fs_landing_mask = grid%fs_landing_mask, &
4789+
fs_spotting_lkhd = grid%fs_spotting_lkhd, &
4790+
fs_frac_landed = grid%fs_frac_landed, &
4791+
fs_fuel_spotting_risk = grid%fs_fuel_spotting_risk, &
4792+
fs_count_reset = grid%fs_count_reset)
4793+
4794+
ENDIF
4795+
! end of firebrand spotting
4796+
!-----------------------------------------------------------------------
4797+
47494798
! Max values of CFL for adaptive time step scheme
47504799
47514800
DEALLOCATE(max_vert_cfl_tmp)

dyn_em/start_em.F

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ SUBROUTINE start_domain_em ( grid, allowed_to_read &
2929
USE module_sf_noahmpdrv, ONLY : groundwater_init
3030
USE module_lightning_driver, ONLY : lightning_init
3131
USE module_fr_fire_driver_wrf, ONLY : fire_driver_em_init
32+
USE module_firebrand_spotting, ONLY : firebrand_spotting_em_init
3233
USE module_stoch, ONLY : setup_rand_perturb, rand_seed, update_stoch, initialize_stoch
3334
USE module_trajectory, ONLY : trajectory_init
3435
#if (WRF_CHEM == 1)
@@ -2177,6 +2178,48 @@ SUBROUTINE start_domain_em ( grid, allowed_to_read &
21772178
,ips,ipe, kps,kpe, jps,jpe )
21782179
21792180
CALL wrf_debug ( 100 , 'start_domain_em: After call to fire_driver_em_init' )
2181+
2182+
!-----------------------------------------------------------------------
2183+
! fire spotting (passive Lagrangian particle transport, tracks
2184+
! firebrand physics properties)
2185+
!-----------------------------------------------------------------------
2186+
2187+
IF (config_flags%fs_firebrand_gen_lim > 0) THEN
2188+
2189+
IF (config_flags%max_dom == grid%id) THEN
2190+
2191+
WRITE (message,*) 'SPFire_init: In inner most grid_id: ', grid%id, ' of ', config_flags%max_dom
2192+
CALL wrf_debug ( 100 , message)
2193+
CALL wrf_debug ( 100 , 'start_em: calling firebrand_spotting_em_init ...' )
2194+
2195+
CALL firebrand_spotting_em_init ( &
2196+
grid = grid, &
2197+
cf = config_flags, &
2198+
fs_p_id = grid%fs_p_id, &
2199+
fs_p_dt = grid%fs_p_dt, &
2200+
fs_p_x = grid%fs_p_x, &
2201+
fs_p_y = grid%fs_p_y, &
2202+
fs_p_z = grid%fs_p_z, &
2203+
fs_p_mass = grid%fs_p_mass, &
2204+
fs_p_diam = grid%fs_p_diam, &
2205+
fs_p_effd = grid%fs_p_effd, &
2206+
fs_p_temp = grid%fs_p_temp, &
2207+
fs_p_tvel = grid%fs_p_tvel, &
2208+
fs_last_gen_dt= grid%fs_last_gen_dt, &
2209+
fs_gen_idmax = grid%fs_gen_idmax, &
2210+
fs_count_landed_all = grid%fs_count_landed_all, &
2211+
fs_count_landed_hist = grid%fs_count_landed_hist,&
2212+
fs_landing_mask = grid%fs_landing_mask, &
2213+
fs_spotting_lkhd = grid%fs_spotting_lkhd, &
2214+
fs_frac_landed = grid%fs_frac_landed, &
2215+
fs_count_reset = grid%fs_count_reset)
2216+
2217+
CALL wrf_debug ( 100 , 'start_em: firebrand_spotting_em_init ok ' )
2218+
ENDIF
2219+
2220+
ENDIF
2221+
!-----------------------------------------------------------------------
2222+
21802223
endif
21812224
21822225
#if ( WRFPLUS != 1 )

main/depend.common

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,21 @@ module_fire_debug_output.o: \
893893
../frame/module_configure.o \
894894
../share/mediation_integrate.o
895895

896+
module_firebrand_spotting_mpi.o: \
897+
../frame/module_domain.o \
898+
../frame/module_configure.o \
899+
../frame/module_dm.o
900+
901+
module_firebrand_spotting.o: \
902+
../frame/module_domain.o \
903+
../frame/module_configure.o \
904+
../frame/module_dm.o \
905+
../frame/module_state_description.o \
906+
../frame/module_domain_type.o \
907+
../external/esmf_time_f90/module_symbols_util.o \
908+
../external/esmf_time_f90/module_utility.o \
909+
module_firebrand_spotting_mpi.o
910+
896911
module_fdda_spnudging.o :\
897912
../frame/module_dm.o \
898913
../frame/module_state_description.o \

phys/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,9 @@ FIRE_MODULES = \
207207
module_fr_fire_model.o \
208208
module_fr_fire_core.o \
209209
module_fr_fire_phys.o \
210-
module_fr_fire_util.o
210+
module_fr_fire_util.o \
211+
module_firebrand_spotting_mpi.o \
212+
module_firebrand_spotting.o
211213

212214
DIAGNOSTIC_MODULES_EM = \
213215
module_diag_afwa.o \

0 commit comments

Comments
 (0)