fix f.
[wrf-fire-matlab.git] / vis3d / plot_fuel.m
blob1b3fef976e31ebd8939001d540514425e7ef5c67
1 function plot_fuel(f,units,scale)
2 % plot_fuel(f)
3 % plot_fuel(f,units)
4 % plot_fuel(f,units,logscale)
5 % arguments
6 % f     fuel structure, as created by fuels.m
7 % units 'metric' (default)
8 %       'Scott-Burgan' (same as 'sb') ch/h and mi/h
9 % scale 'direct' (default)
10 %       'log'  for loglog plots
11 % plot rate of spread against wind speed and slope 
12 % from fuels.m produced by wrf-fire
13 % example: fuels; plot_fuel(fuel(3))
15 name=['Fuel model ',f.fuel_name];
17 disp(f.fuel_name)
18 fprintf('%s fgi = %g\n',f.fgi_descr,f.fgi)
19 fprintf('%s fuelmc_g = %g\n',f.fuelmc_g_descr,f.fuelmc_g)
20 fprintf('%s cmbcnst = %g\n',f.cmbcnst_descr,f.cmbcnst)
21 fprintf('%s weight = %g\n',f.weight_descr,f.weight)
23 fprintf('\n*** without for evaporation heat of moisture ***\n')
24 h = f.cmbcnst/(1+f.fuelmc_g);
25 fprintf('specific heat contents of fuel (J/kg) %g\n',h) 
26 hd=f.fgi*h;
27 fprintf('heat density (J/m^2) %g\n',hd)
28 Tf=f.weight/0.8514; % fuel burns as exp(-t/Tf)
29 fprintf('initial slope of mass-loss curve (1/s) %g\n',1/Tf)
30 fprintf('maximal heat flux density (J/m^2/s) %g\n',hd/Tf)
31 fprintf('\n*** with correction for evaporation of moisture ***\n')
32 Lw=2.5e6;
33 fprintf('latent heat of moisure (J/kg) %g\n',Lw)
34 hw = (f.cmbcnst - Lw*f.fuelmc_g) /(1+f.fuelmc_g);
35 fprintf('specific heat contents of fuel (J/kg) %g\n',hw)
36 fprintf('relative correction due to evaporation %g%%\n',100*(hw/h-1)) 
37 hd=f.fgi*hw;
38 fprintf('heat density (J/m^2) %g\n',hd)
39 Tf=f.weight/0.8514; % fuel burns as exp(-t/Tf)
40 fprintf('initial slope of mass-loss curve (1/s) %g\n',1/Tf)
41 fprintf('maximal heat flux density (J/m^2/s) %g\n',hd/Tf)
44 Tf=f.weight/0.8514; % fuel burns as exp(-t/Tf)
47 if nargin < 2
48     units='metric';
49 end
51 if nargin < 3
52     scale='direct';
53 end
55 switch scale
56     case {'log','LOG','loglog'}
57         logscale=1;
58     otherwise
59         logscale=0;
60 end
63 switch units
64     case {'SB','sb','Scott-Burgan'}
65         wind_unit='20ft (mi/h)';
66         ros_unit='ch/h';
67         wind_conv=3600/1609.344;
68         ros_conv=3600/20.1168;
69     otherwise
70         wind_unit='6.1m (m/s)';
71         ros_unit='m/s';
72         wind_conv=1;
73         ros_conv=1;
74 end
78 figure(1) % wind dependence
79 for i=1:length(f.wind),
80     ros_wind(i) = fire_ros(f,f.wind(i),0);
81 end
82 err_wind=big(ros_wind-f.ros_wind)
83 if logscale,
84     loglog(f.wind*wind_conv,ros_wind*ros_conv,'r',f.wind*wind_conv,f.ros_wind*ros_conv,'b')
85 else
86     plot(f.wind*wind_conv,ros_wind*ros_conv,'r',f.wind*wind_conv,f.ros_wind*ros_conv,'b')
87 end
88 xlabel(['wind speed at ',wind_unit,')'])
89 ylabel(['rate of spread (',ros_unit,')'])
90 title(name)
91 grid
93 figure(2) % slope dependence
94 for i=1:length(f.slope),
95     ros_slope(i) = fire_ros(f,0,f.slope(i));
96 end
97 err_slope=big(ros_slope-f.ros_slope)
98 if logscale
99     loglog(f.slope,ros_slope*ros_conv,'r',f.slope,f.ros_slope*ros_conv,'b')
100 else
101     plot(f.slope,ros_slope*ros_conv,'r',f.slope,f.ros_slope*ros_conv,'b')
103 xlabel('slope (1)')
104 ylabel(['rate of spread (',ros_unit,')'])
105 name=['Fuel model ',f.fuel_name];
106 title(name)
107 grid
109 figure(3)
110 if(isfield(f,'fmc_g')),
111     fmc_g=f.fmc_g;
112 else
113     nsteps=100;
114     fmc_g=f.fuelmce*[0:nsteps-1]/nsteps-2;
116 for i=1:length(fmc_g),
117     ros_fmc_g(i) = fire_ros(f,0,0,fmc_g(i));
119 if(isfield(f,'fmc_g')),
120     err_fmc_g=big(ros_fmc_g-f.ros_fmc_g)
121     plot(f.fmc_g,f.ros_fmc_g*ros_conv,'b',...
122         f.fuelmc_g,interp1(fmc_g,ros_fmc_g*ros_conv,f.fuelmc_g),'+k')
123 else
124     plot(fmc_g,ros_fmc_g*ros_conv,'b')
126 xlabel('ground fuel moisture content (1)')
127 ylabel(['rate of spread (',ros_unit,')'])
128 name=['Fuel model ',f.fuel_name];
129 title(name)
130 grid
132 fprintf('\nzero wind rate of spread %g %s\n',fire_ros(f,0,0)*ros_conv,ros_unit')
135 fprintf('\nzero wind rate of spread %g %s\n',fire_ros(f,0,0)*ros_conv,ros_unit')
139 err=big(check_ros(f));
140 fprintf('\nmax rel err in rate of spread between WRF-Fire and fire_ros.m %g\n',err)