Level-Set
- FuelFractionCellWRFFire
model
wildland_fire
fire_behavior
Fuel fraction remaining and burning area fraction of one fire-grid cell as computed by fire_behavior's Calc_fuel_left (physics/level_set_mod.F90): the cell is split into a 2x2 submesh (fuel_left_irl = fuel_left_jrl = 2); at the four corners of every subcell the level-set function and the ignition time are bilinearly interpolated from the 3x3 node neighbourhood of the cell (the node values are the cell-centred lfn and tign_g of the cell and its eight neighbours; subcell (1,1) uses nodes (i-1..i, j-1..j) at fractions 1/2..1, subcell (2,1) nodes (i..i+1, j-1..j) at fractions 0..1/2 and so on); each subcell's burning area is the level-set sign fraction (1 - sum lfn/sum|lfn|)/2 (Mandel et al. 2011 Sect. 3.2) and its remaining fuel is area exp(-(time_now - tign_mean)/fuel_time) + (1 - area) with the mean of the four corner times since ignition (zero for unburnt or not-yet-ignited corners); the cell values are the subcell means. The per-step burnt fraction fuel_frac_before - fuel_frac feeds Calc_fire_fluxes. For a cell that is entirely burning with uniform ignition time this is the exact solution of dF/dt = -F/fuel_time (EarthSciModels level_set/fuel_consumption.esm, Mandel eq. 3), exposed as dfuel_frac_dt_burning; for partly burning cells the subgrid integration has no single-ODE equivalent, which is why this component is transcribed rather than reusing FuelConsumption. Tests: cells of the instrumented test7 run at step 20 (real32), rel 1e-5 (abs 1e-7 where a subcell fraction is exactly 0 or 1).
- IgnitionTimeWRFFire
model
wildland_fire
fire_behavior
Ignition time of a fire-grid cell as updated by fire_behavior's Update_ignition_times (physics/level_set_mod.F90) after each level-set step: cells the front crosses during the step get the linearly interpolated crossing time ts + dt lfn_in/(lfn_in - lfn_out); cells still unburnt at the end of the step carry time_now (the step end nudged up by two real32 epsilons, so that Calc_fuel_left treats them as not ignited); burning cells keep their ignition time. Tests: cells of the instrumented test7 run at step 20 (ls_tign dump), rel 1e-5 (the interpolated time is a ratio of O(1-100 m) level-set values, real32).
- LevelSetTendencyWRFFire
model
wildland_fire
fire_behavior
The level-set propagation equation of fire_behavior (physics/level_set_mod.F90 Calc_tend_ls; Munoz-Esparza et al. 2018) as a PDE on a uniform 2-D grid: d psi/dt = -R |grad psi| + nu |R| (dx d2psi/dx2 + dy d2psi/dy2), the Hamilton-Jacobi front propagation with the rate of spread R normal to the front plus a grid-scaled artificial viscosity. |grad psi| is written as the compound sqrt(D(psi,x)^2 + D(psi,y)^2) and lowered by EarthSciDiscretizations' grids/cartesian_uniform_2d/rules/weno5_eno1_norm_D2_extrapolate_bc, which is fire_behavior's default scheme (fire_upwinding = 9): fifth-order WENO within fire_lsm_band_ngp = 4 cells of the front with the upwind side chosen by the mid-flame wind, first-order ENO (minmod of the one-sided differences) elsewhere and within BDY_ENO1 = 10 cells of the domain boundary. The second derivatives of the viscosity term are lowered by central_D2x_extrapolate_bc and central_D2y_extrapolate_bc. All three rules close the walls as fire_behavior does (Extrapol_var_at_bdys): each wall cell sees a ghost extrapolated linearly from the two innermost cells, max(2a - b, a, b), so the domain edge carries no prescribed level-set value and does not act as a fire front. R is supplied as an input field (it depends on the upwind normal, tested in ROSWRFFire); the propagation term and viscosity are what this component asserts. The viscosity coefficient is the single value fire_viscosity: fire_behavior blends it toward fire_viscosity_bg near the front, and test7 sets the two equal. Tests: the ls_tend dump of Runge-Kutta stage 1 of step 20 (t = 10 s) of test7 with the default scheme, checked at wall, corner, ENO1-band, WENO-band and far-field cells, real32.
- ROSWRFFire
model
wildland_fire
fire_behavior
Rate of spread normal to the fire front as evaluated by fire_behavior's Calc_ros_wrffire (physics/ros_wrffire_mod.F90) at one cell and time step, from the level-set normal (nvx, nvy), the mid-flame wind (uf, vf), the terrain slope and the cell's Rothermel constants (RothermelWRFFire). With FIRE_ADVECTION = 1 (the compiled setting) the wind and slope factors are evaluated from the TOTAL wind speed and TOTAL slope and then multiplied by the clipped cosines of their angles to the spread direction: ros = min(r_0 (1 + phi_w(|U|) cos_w + phi_s(|grad z|) cos_s), 6 m/s) with cos_w = max(0, U.n/|U|), cos_s = max(0, grad z . n/|grad z|). DIFFERENCE from EarthSciModels level_set_fire_spread.esm (Mandel 2011 form phi_W(max(0, U.n)), phi_S(max(0, grad z . n)^2)): there the PROJECTED speed enters the power laws, |U|^B cos_w vs (|U| cos_w)^B and |grad z|^2 cos_s vs (grad z . n)^2, and that file has neither the 30 m/s wind cap, the 6 m/s ROS cap nor the chaparral branch, so it is not reused. Chaparral (ischap > 0) uses the Clark et al. (2004) law ros_wind = max(1.2974 |U|^1.41, 0.033) m/s with no base or slope term. Tests: per-cell values of the instrumented test7 run (ls_tend dump, RK stage 1 of step 20, t = 10 s; real32; FORTRAN's speed and slope carry tiny(real32) additions reproduced here), rel 1e-5.