Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

saving fire energy released in level set simulation #13607

Open
3dfirelab opened this issue Oct 22, 2024 · 9 comments
Open

saving fire energy released in level set simulation #13607

3dfirelab opened this issue Oct 22, 2024 · 9 comments
Assignees

Comments

@3dfirelab
Copy link

3dfirelab commented Oct 22, 2024

Following an effort to export terreain from an FDS-LS simulation in qgis

firetools/qgis2fds#92

I moved forward and try to compute the ROS form the simulation using an arrival time map that I computed from the level set contour variables (phi). This is what I have now (in UTM projection here)
image
The wind is blowing form the south of the domain. the black line is the ignition.
The red zone on the right plot shows all points with an arrival time lower than the lowest time of my arrival time + 1s.
The contour of the levelset near ignition time are showing fast back fire propagation. This is why I masked them out.

I am also now trying to get a map of fire released total energy. But I am not sure which variable is the best to consider.
HRRPUV is only accounting for combustion in the cell of the slice.
What could be the best variable to save in SLCF to get information from the MLR or the HRRPUA at agl=0.

@ericvmueller
Copy link
Contributor

In addition, its worth noting these characteristics are effectively fixed for level set. The burnout time is a function of the fuel properties (surface-to-volume ratio in our case), and then the theoretical HRR is determined from the fuel load and heat of combustion. So you could obtain values without even running a simulation.

However, they are adjusted to a grid-dependent value in FDS because the burnout time for a cell, rather than the fuel, depends on how long it takes the fire to cross a cell ...which depends on ROS and cell size. So it depends if you want the assumed theoretical HRRPUA for the fuel layer or the HRRPUA applied in the model (which Kevin's outputs will give you).

@3dfirelab
Copy link
Author

ok thanks, I was able to import the boundary files ouput to map 2D burning rate and compute map of Biomass burnt.
this is what I have for my fire.
image

using qgis2fds, my terrain is made of multiple &OBST element with many having boundary patch in x,y, and z directions.
To map the 2D the burning rate, I used

 &BNDF QUANTITY='MASS FLUX' /

and then only use the elements in the bf file that are pointing upward.
Is this assumption right? the vertical face of the &OBST elements are not participating to the mass flux (and so to the fire)?

There is a slight missalignement of my Biomass Burning (BB) Map with the original fuel map when plotted in qgis.
image
in the plot above the black line are the contour of the BB map, while the color behind is the original fuel map used in qgis2fds.

I will try to investigate this.
I solve some gis problem while looking at the terrain. So I think I might have problem in the way I load the bf.
each patch is coming as a set of 4 index i1,i2,j1,j2,k1,k2
with

k1=k2
j2 = j1+1
i2 = i1+1

I am only using for each patch with IOR=+3 the data at (i1,j1) that I assigned to my 2D array that has the size of the sub mesh, then I follow the same process as for the slice.
any comment on this?

meanwhile I am trying to relate my value of BB to the prescribed fuel load of the rothermel-Albini model.
I have a maximum of ~250kg burnt in pixel of 20x20m2, so 0.625 kg/m2.
despite my alignment mismatch, the high value seems to be linked with the fuel model 3, tall grass with only fine fuel of .68 kg/m2.

assuming a very fats ROS of 1m/s (high value in in my ROS map)
equation 17.44 from the user guide gives

mlr = (1.-0.2) * 0.68 / (75600/4920)

so a fast ROS and a resolution of 20m will give be a minimum duration time of 20s. and BB of

BB = mlr * 20/ROS = mlr * 20s = 0.7 kg

any lower ROS will only increase BB.
however I have a lower BB of 0.625 kg.

this means I should expect a higher ROS than 1m/s that is not really possible If I trust my ROS map above.
So my question is to know if I am doing something wrong above in the estimation of my theoretical BB?
I am trying to understand if my map of BB and ROS are coherent.

@ericvmueller
Copy link
Contributor

I'm not super familiar with parsing boundary files so maybe @mcgratta or some can give you a faster answer on that part.

As for you calculation of mass burned... the level set method should burn all mass in any cell that is ignited (minus the char fraction). So you should consume (and release in the gas phase):
mass_loss = fuel_load * (1-char_fraction) * cell_area
in all areas with fire spread.

The thing which depends on spread rate is the burning duration, not the mass consumed. The burnout time for that grass fuel is:
(75600/4920) = 15 s
but then it takes dx/ROS for the fire to spread across the cell ...in your example an extra 20 s. So consumption of the total mass in the cell takes place over a total of 35 s. You should get an adjusted MLR per area of:
mlr = (1.-0.2) * 0.68 /35

@johodges
Copy link
Collaborator

Are you assuming the boundary data is for the nodes or the cell centers in your importer? Your &BNDF line indicates nodal values (since CELL_CENTERED=T is not specified), but your visualization looks like you are showing cell center values.

@mcgratta
Copy link
Contributor

The boundary "patches" are indexed by (i1,i2,j1,j2,k1,k2). If k1=k2, the patch is oriented upwards, in the z direction. If the grid cell above the surface patch is indexed by i=2 and j=4, then i1 will be 1 and i2 will be 2. j1 will be 3 and j2 will be 4.

@3dfirelab
Copy link
Author

thanks for the comments.
I am assuming all data are at the node, and all meshes have the same resolution
I load slice, terrain, and bf files to get 2d array per mesh of phi, mlr and terrain
then I assigned the value to a 2d global mesh that covers the whole domain with the resolution of the meshes and compute ROS, and Burning Biomass (BB).
then I move all by half a resolution step to save in xarray.
the code is here

https://github.com/3dfirelab/Process_FDS-LS

I improve slightly my alignement of BB with the fuel map (compare to above ,,map), but still not perfect
image

is there any way I can ask FDS to output its fuelmap?

@ericvmueller
Copy link
Contributor

Perhaps you could use a boundary file of SURFACE DENSITY (with CELL_CENTERED=T) to identify the fuel in each cell.

@3dfirelab
Copy link
Author

adding
&BNDF QUANTITY='SURFACE DENSITY', CELL_CENTERED=T /
gave me only zero value when loading the boundary file

@ericvmueller regarding your comment on mlr calculation.
In the FDS user quide, in equation 19.36, why delta t is not corrected with the "travelling time" = cell size / ROS

Also you mentioned that all fuel in cells should burn.
I did a simulation as shown above without and with spotting. Not knowing knowing order of magnitude of ember emission, I probably set very high ember emission. This was to ensure to see something.

&SURF ID='NA' RGB=255,255,255 /
&SURF ID='A01' RGB=255,254,212 VEG_LSET_FUEL_INDEX=1 /
&SURF ID='A02' RGB=255,253,102 VEG_LSET_FUEL_INDEX=2 /
&SURF ID='A03' RGB=236,212,99 VEG_LSET_FUEL_INDEX=3 /
&SURF ID='A04' RGB=254,193,119 VEG_LSET_FUEL_INDEX=4 /
&SURF ID='A05' RGB=249,197,92 VEG_LSET_FUEL_INDEX=5 EMBER_YIELD=0.05, EMBER_IGNITION_POWER_MEAN=0.005, PART_ID='brands', EMBER_TRACKING_RATIO=200/
&SURF ID='A06' RGB=217,196,152 VEG_LSET_FUEL_INDEX=6 /
&SURF ID='A07' RGB=170,155,127 VEG_LSET_FUEL_INDEX=7, EMBER_YIELD=0.05, EMBER_IGNITION_POWER_MEAN=0.005, PART_ID='brands', EMBER_TRACKING_RATIO=200/
&SURF ID='A08' RGB=229,253,214 VEG_LSET_FUEL_INDEX=8 /
&SURF ID='A09' RGB=162,191,90 VEG_LSET_FUEL_INDEX=9 /
&SURF ID='A10' RGB=114,154,85 VEG_LSET_FUEL_INDEX=10 /
&SURF ID='A11' RGB=235,212,253 VEG_LSET_FUEL_INDEX=11 /
&SURF ID='A12' RGB=163,177,243 VEG_LSET_FUEL_INDEX=12 /
&SURF ID='A13' RGB=0,0,0 VEG_LSET_FUEL_INDEX=13 /

and this is what I get for ros and biomass burnt

without spotting
image
with spotting
image

where the ROS is more variable (north from the first hill), the biomass burnt (that is the integral of the MASS FLUX over time and cells area) is also very variable, and if we can see some of the pattern of the fuelmap, it does not seem to be showing that all cell with same fuel model gives the same Biomass Burnt (BB).

However if we should be burning all fuel in cell, they should give the same BB, no?

@ericvmueller
Copy link
Contributor

Okay, yeah I guess I was thinking of the boundary fuel model, while the level set fuels are not connected to the SURFACE DENSITY output. That is something we might consider adding (or a LS specific fuel loading output).

What version of the guide are you using? I do not see an equation 19.36.

Can you post your input - or better yet a simplified version which highlights the issue you are seeing? It is difficult for me to understand if this is an FDS issue or something in your post-processing.

Another thing you could try is to put a single device at the center of a cell where you think the burned mass is wrong. Have it output MASS FLUX with TEMPORAL_STATISTIC ='TIME INTEGRAL'. Then you can multiply it by the area of the cell it is placed in. That way the output will have nothing to do with how you are processing the boundary file data to compute and integral and you can check your process.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants