Merge branch 'fixf'
[wrf-fire-matlab.git] / vis3d / fire_ros.m
blob0582e183d4ae97035ef1096b461516ad0dbc53b1
1 function ros=fire_ros(fuel,speed,tanphi,fmc_g, adjr0, adjrw, adjrs)
2 % ros=fire_ros(fuel,speed,tanphi)
3 % ros=fire_ros(fuel,speed,tanphi,fmc_g)
4 % in
5 %       fuel    fuel description structure
6 %       speed   wind speed
7 %       tanphi  slope
8 %       fmc_g   optional, if not empty overrides fuelmc_g from the fuel description
9 %       adjr0, adjrw, adjrs optional, adjustment factors for r0, slope factor, wind factor
10 % out
11 %       ros     rate of spread
13 % given fuel params
15 windrf=fuel.windrf;               % WIND REDUCTION FACTOR
16 fgi=fuel.fgi;                     % INITIAL TOTAL MASS OF SURFACE FUEL (KG/M**2)
17 fueldepthm=fuel.fueldepthm;       % FUEL DEPTH (M)
18 savr=fuel.savr;                   % FUEL PARTICLE SURFACE-AREA-TO-VOLUME RATIO, 1/FT
19 fuelmce=fuel.fuelmce;             % MOISTURE CONTENT OF EXTINCTION
20 fueldens=fuel.fueldens;           % OVENDRY PARTICLE DENSITY, LB/FT^3
21 st=fuel.st;                       % FUEL PARTICLE TOTAL MINERAL CONTENT
22 se=fuel.se;                       % FUEL PARTICLE EFFECTIVE MINERAL CONTENT
23 weight=fuel.weight;               % WEIGHTING PARAMETER THAT DETERMINES THE SLOPE OF THE MASS LOSS CURVE
24 fci_d=fuel.fci_d;                 % INITIAL DRY MASS OF CANOPY FUEL
25 fct=fuel.fct;                     % BURN OUT TIME FOR CANOPY FUEL, AFTER DRY (S)
26 ichap=fuel.ichap;                 % 1 if chaparral, 0 if not
27 fci=fuel.fci;                     % INITIAL TOTAL MASS OF CANOPY FUEL
28 fcbr=fuel.fcbr;                   % FUEL CANOPY BURN RATE (KG/M**2/S)
29 hfgl=fuel.hfgl;                   % SURFACE FIRE HEAT FLUX THRESHOLD TO IGNITE CANOPY (W/m^2)
30 cmbcnst=fuel.cmbcnst;             % JOULES PER KG OF DRY FUEL
31 fuelheat=fuel.fuelheat;           % FUEL PARTICLE LOW HEAT CONTENT, BTU/LB
32 fuelmc_g=fuel.fuelmc_g;           % FUEL PARTICLE (SURFACE) MOISTURE CONTENT, jm: 1 by weight?
33 fuelmc_c=fuel.fuelmc_c;           % FUEL PARTICLE (CANOPY) MOISTURE CONTENT, 1
35 % optional arguments defaults
36 if nargin>=4 && ~isempty(fmc_g) % override moisture content by given
37     fuelmc_g = fmc_g;
38 end
39 if nargin<5
40     adjr0 = 1;
41     adjrw = 1;
42     adjrs = 1;
43 end
45 % computations from CAWFE code: wf2_janice/fire_startup.m4
47 bmst     = fuelmc_g/(1+fuelmc_g);          % jm: 1
48 fuelheat = cmbcnst * 4.30e-04;             % convert J/kg to BTU/lb
49 fci      = (1.+fuelmc_c)*fci_d;
50 fuelloadm= (1.-bmst) * fgi;                % fuelload without moisture
51 % jm: 1.-bmst = 1/(1+fuelmc_g) so fgi includes moisture?
52 fuelload = fuelloadm * (.3048)^2 * 2.205;  % to lb/ft^2
53 fueldepth= fueldepthm/0.3048;              % to ft
54 betafl   = fuelload/(fueldepth * fueldens);% packing ratio  jm: lb/ft^2/(ft * lb*ft^3) = 1
55 betaop   = 3.348 * savr^(-0.8189);         % optimum packing ratio jm: units??
56 qig      = 250. + 1116.*fuelmc_g;          % heat of preignition, btu/lb
57 epsilon  = exp(-138./savr );               % effective heating number
58 rhob     = fuelload/fueldepth;             % ovendry bulk density, lb/ft^3
59 c        = 7.47 * exp(-0.133 * savr^0.55); % const in wind coef
60 bbb      = 0.02526 * savr^0.54;            % const in wind coef
61 c        = c * windrf^bbb;                 % jm: wind reduction from 20ft per Baughman&Albini(1980)
62 e        = 0.715 * exp( -3.59e-4 * savr);  % const in wind coef
63 phiwc    = c * (betafl/betaop)^(-e);
64 rtemp2   = savr^1.5;
65 gammax   = rtemp2/(495. + 0.0594*rtemp2);  % maximum rxn vel, 1/min
66 a        = 1./(4.774 * savr^0.1 - 7.27);   % coef for optimum rxn vel
67 ratio    = betafl/betaop;
68 gamma    = gammax*(ratio^a)*exp(a*(1.-ratio)); % optimum rxn vel, 1/min
69 wn       = fuelload/(1 + st);              % net fuel loading, lb/ft^2
70 rtemp1   = fuelmc_g/fuelmce;
71 etam     = 1.-2.59*rtemp1 +5.11*rtemp1^2 -3.52*rtemp1^3;  % moist damp coef
72 etas     = 0.174* se^(-0.19);              % mineral damping coef
73 ir       = gamma * wn * fuelheat * etam * etas; % rxn intensity,btu/ft^2 min
74 irm      = ir * 1055./( 0.3048^2 * 60.) * 1.e-6;% for mw/m^2 (set but not used)
75 xifr     = exp( (0.792 + 0.681*savr^0.5)...
76     * (betafl+0.1)) /(192. + 0.2595*savr); % propagating flux ratio
77 %        ... r_0 is the spread rate for a fire on flat ground with no wind.
78 r_0      = ir*xifr/(rhob * epsilon *qig); % default spread rate in ft/min
80 % computations from CAWFE code: wf2_janice/fire_ros.m4
82 if ~ichap
83     %       ... if wind is 0 or into fireline, phiw = 0, &this reduces to backing ros.
84     spdms = max(speed,0.);
85     umidm = min(spdms,30.);                    % max input wind spd is 30 m/s   !param!
86     umid = umidm * 196.850;                    % m/s to ft/min
87     %  eqn.: phiw = c * umid**bbb * (betafl/betaop)**(-e) ! wind coef
88     phiw = umid^bbb * phiwc;                  % wind coef
89     phis = 5.275 * betafl^(-0.3) *max(0,tanphi)^2;  % slope factor
90     %ros = r_0 * (1. + phiw + phis) * .00508; % spread rate, m/s
91     ros = ((r_0 *  adjr0) + ((r_0 * phiw * adjrw)) + ((r_0 * phis * adjrs))) * .00508;
92     %ros = r_0 + ((r_0 * phiw * fuel_adjw)) + ((r_0 * phis * fuel_adjs))
94     % Multiply the vars by the adjustment factors before I put in in the
95     % code
96 else  % chapparal
97     %        .... spread rate has no dependency on fuel character, only windspeed.
98     spdms = max(speed,0.);
99     ros = max(.03333,1.2974 * spdms^1.41);       % spread rate, m/s
101 ros=ros;