lautenberger / elmfire

Eulerian Level set Model of FIRE spread
https://elmfire.io
Eclipse Public License 2.0
23 stars 11 forks source link

UMD Spotting Model Updates #7

Closed yqin123 closed 1 year ago

yqin123 commented 1 year ago

Hello Chris,

I modified the UMD spotting model by:

  1. Limited the maximum spotting distance by the parameter P_EPS in the SPOTTING namelist. It truncates Sardoy's PDF at the corresponding percentile.
  2. Added the option to use realistic fire residence time at each pixel. For vegetation pixels, the residence time is taken from Rothermel's model, and for structures (FBFM91), the residence time is determined using a design fire curve and the critical spotting fireline intensity. The design fire curve gives FBFM91 a time-dependent fireline intensity and is a function of the structural area inside a pixel. The structural area is currently controlled by the parameter FOOTPRINT_PERCENTAGE in the INPUTS namelist. It is the portion of the structural area to the pixel area and is assumed to be constant (for fully occupied, FOOTPRINT_PERCENTAGE=1). A raster input may be better in the future. This option is activated using the parameter USE_PHYSICAL_SPOTTING_DURATION in theSPOTTING namelist.
  3. Added the option to use realistic ember emitting flux, a function of the wind speed and fireline intensity, inspired by the recent work from Dr. Gollner's group (Xiaoyu Ju, 2023) and the function used in SWUIFT for structure. This option can be activated by the parameter USE_PHYSICAL_EMBER_NUMBER in the SPOTTING namelist. Parameter N_PHYSIC_EMBER_PER_NUMER in the SPOTTING namelist controls the number of real embers each Lagrangian particle represents.
  4. Added a subroutine CLEAR_USED_EMBER to clear expired embers being tracked in the struct SPOTTING_STAT. However, it does not fully solve the problem of saving a lot of particles simultaneously when EMBER_GR is high.
  5. Added the lookup-table method as the subroutine FAST_SPOTTING in module elmfire_spotting.f90. However, it also suffers the problem of allocating a huge array. It has not been tested yet and is not functional in the current code. A parameter SE_SPOTTIN_LOOKUP_TABLE in SPOTTING namelist is added to activate this option in the future.
  6. A output option is added as DUMP_SPOTTING_OUTPUTS to dump SPOTTING_STAT for embers responsible for igniting new pixels. By default, it is set to .FALSE..
  7. Added a test case in the tutorial folder as 05-UMD-spotting-model.

Most of the modifications are in module elmfire_spotting.f90. elmfire_level_set.f90 is modified to call subroutines in elmfire_spotting.f90. Let me know if there are any problems.

Yiren

lautenberger commented 1 year ago

Hi Yiren,

Thanks for the PR, confirming receipt. I will review this shortly and provide comments or get it merged.

Best,

Chris

lautenberger commented 1 year ago

Since ELMFIRE tracks smoke emissions, to avoid confusing smoke emission with ember emission, for anything to do with spotting I suggest we replace variable names containing EMISSION with EMBERGENERATION or EMBERGEN for short.

lautenberger commented 1 year ago

I suggest changing TIME_TO_IGNITE to EMBER_TIGN to make it clear it's from embers since there are other mechanisms through which a grid cell can ignite such as a point ignition

lautenberger commented 1 year ago

I like the variable name EMBER_SAMPLING_FACTOR instead of N_PHYSIC_EMBER_PER_NUMER - this is consistent with terminology used in FDS.

lautenberger commented 1 year ago

Changing the variable FOOTPRINT_PERCENTAGE to BLDG_FOOTPRINT_FRAC

lautenberger commented 1 year ago

I'm adding the source file elmfire_spotting_superseded.f90 which contains the (to be) superseded spotting functions SPOTTING_SUPERSEDED and EMBER_TRAJECTORY_SUPERSEDED. The keyword USE_SUPERSEDED_SPOTTING (.TRUE. by default) can be set to .FALSE. to enable the spotting algorithm enhancements in this PR. I'd like to do it this way to isolate the updated spotting algorithm so that we can quantify its improvements relative to the old spotting algorithm.

lautenberger commented 1 year ago

Thanks for the PR, Yiren. As you'll see above I adjusted a few variable names, made some tweaks, and isolated the new spotting treatment with the &SPOTTING keyword USE_SUPERSEDED_SPOTTING. Merging.