firemodels / fds

Fire Dynamics Simulator
https://pages.nist.gov/fds-smv/
Other
642 stars 614 forks source link

Mass problem #6535

Closed SimonLoosvelt closed 6 years ago

SimonLoosvelt commented 6 years ago

I'm using FDS to analyze the smoke flow in a staircase. Using the data of FDS, I want to make a model for the smoke flow in a staircase. A first step is to simplify the staircase by implementing different rectangular zones. I want to apply the mass conservation on each zone.

The mass inside a zone is calculated by the ideal gas law, using the constant volume of the zone and the density of the products. The density of the products is calculated as followed:

&DEVC ID='Zone1', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,0.0,2.0/

To be able to apply the mass conservation the amount of products going in the zone and leaving the zone needs to be known. This is calculated in FDS:

&DEVC ID='Massflow1m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,1.0,2.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='Massflow2m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,2.0,3.0, STATISTICS='VOLUME INTEGRAL'/

There is no mass produced inside the zone so the mass entering the zone minus the mass leaving the zone should be equal to the mass calculated in the zone. This is not the case.

Some questions about this: 1) I tried different models of statistics (volume integral, mass integral, mass mean, volume mean,..) but nothing worked to solve this problem. Which one is the best to use? 2) Should I define the mass flow? The staircase is a sequence of zones so the mass you put in the first zone should be equal to the sum of the masses of the upper zones and the masses leaving the zones to the ambient but this is not the case. So I think i'm measuring the wrong data at the inlet and outlet of the different zones. 3) What is really specified if you use the SPEC_ID='PRODUCTS'? Following the logic of the reactants and products in a chemical equation, it should be the smoke that is calculated. Or should I measure each contaminant separately and add them up?

My most important question is how you measure the mass flow of smoke through a certain plane with FDS?

&HEAD CHID='problem'/ &TIME T_END=100.0/ &DUMP NFRAMES=100.0/

&MESH ID='MESH', IJK=80,40,50, XB=-2.0,6.0,0.0,4.0,0.0,5.0/

&REAC ID='Fire', FUEL='REAC_FUEL', FORMULA='C1H4', CO_YIELD=0.09, SOOT_YIELD=0.09/

&SURF ID='ADIABATIC', COLOR='GRAY 80', ADIABATIC=.TRUE./

&SURF ID='Fire1', COLOR='RED', HRRPUA=600, RAMP_Q='Fire1'/=> to change

&RAMP ID='Fire1', T= 0.0, F=1.0 / &RAMP ID='Fire1', T= 6000, F=1.0 /

fire first floor

&VENT SURF_ID='Fire1', XB=2.5,3.5,1.5,2.5,0.2,0.2, COLOR='RED', SPREAD_RATE=0.006988, XYZ=3,2,0.2/ Fire 1 => to change fast = 0.006988 ultrafast = 0.009989 &OBST XB=2.5,3.5,1.5,2.5,0.0,0.2, SURF_ID='ADIABATIC'/ fire => to change

&OBST ID='Walls', XB=0,4.0,0.0,4.0,5.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=0,0.2,0.2,3.8,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=0,4.0,0.0,0.2,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=0,4.0,3.8,4.0,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=3.8,4.0,0.2,3.8,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='2m', XB=2.0,4.0,0.0,4.0,2.0,2.0, SURF_ID='ADIABATIC'/ &OBST ID='3m', XB=0,2.0,0.0,4.0,3.0,3.0, SURF_ID='ADIABATIC'/ &OBST ID='Obstruction', XB=2.0,4.0,0.0,4.0,4.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Obstruction', XB=0,2.0,0.0,4.0,0.0,1.0, SURF_ID='ADIABATIC'/

&HOLE ID='Opening top', XB=0.0,0.2,1.4,2.4,3.0,4.0/ &HOLE ID='Opening bottom', XB=3.8,4.0,1.5,2.5,0,1.0/

Topopening ambient &VENT ID='Vent1', SURF_ID='OPEN', XB=-2.0,0.0,0.0,0.0,0.0,5.0/ &VENT ID='Vent2', SURF_ID='OPEN', XB=-2.0,0.0,0.0,4.0,5.0,5.0/ &VENT ID='Vent3', SURF_ID='OPEN', XB=-2.0,-2.0,0.0,4.0,0.0,5.0/ &VENT ID='Vent4', SURF_ID='OPEN', XB=-2.0,0.0,4.0,4.0,0.0,5.0/

Bottomopening ambient &VENT ID='Vent5', SURF_ID='OPEN', XB=4.0,6.0,0.0,0.0,0.0,5.0/ &VENT ID='Vent6', SURF_ID='OPEN', XB=4.0,6.0,0.0,4.0,5.0,5.0/ &VENT ID='Vent7', SURF_ID='OPEN', XB=6.0,6.0,0.0,4.0,0.0,5.0/ &VENT ID='Vent8', SURF_ID='OPEN', XB=4.0,6.0,4.0,4.0,0.0,5.0/

Plane flowrates products &DEVC ID='Massflow1m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,1.0,2.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='Massflow2m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,2.0,3.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='Massflow3m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,3.0,4.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='MassflowOut', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=0.2,0.2,1.4,2.4,3.0,4.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='MassflowIn', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=3.8,3.8,0.4,1.4,0,2.0, STATISTICS='VOLUME INTEGRAL'/

Plane flowrates air &DEVC ID='Massflow1m', QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,1.0,2.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='Massflow2m', QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,2.0,3.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='Massflow3m', QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,3.0,4.0, STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='MassflowOut', QUANTITY='MASS FLOW', XB=0.2,0.2,1.4,2.4,3.0,4.0,STATISTICS='VOLUME INTEGRAL'/ &DEVC ID='MassflowIn', QUANTITY='MASS FLOW', XB=3.8,3.8,0.4,1.4,0,2.0, STATISTICS='VOLUME INTEGRAL'/

Zone flowrates &DEVC ID='Zone1', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,0.0,2.0/ &DEVC ID='Zone2', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,1.0,3.0/ &DEVC ID='Zone3', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,2.0,4.0/ &DEVC ID='Zone4', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,3.0,5.0/

TAIL/

mcgratta commented 6 years ago

When you use the quantity called MASS FLOW, do not use STATISTICS. The quantity MASS FLOW is be definition the mass flow through a plane given by XB. Make this correction, then simplify your case so that I can focus on the flow into and out of one volume of the domain.

SimonLoosvelt commented 6 years ago

Without the statistics it is still so that the inlet has a smaller flow of products than the outflow of the products. So by applying the mass conservation for the product, I get a negative value inside the zone which is not possible.

The first zone is not relevant because the fire is situated there. The zones 2, 3 and 4 are useful but the most problems are with zone 2.

&HEAD CHID='problem2'/ &TIME T_END=200.0/ &DUMP NFRAMES=200.0/

&MESH ID='MESH', IJK=80,40,50, XB=-2.0,6.0,0.0,4.0,0.0,5.0/

&REAC ID='Fire', FUEL='REAC_FUEL', FORMULA='C1H4', CO_YIELD=0.09, SOOT_YIELD=0.09/

&SURF ID='ADIABATIC', COLOR='GRAY 80', ADIABATIC=.TRUE./

&SURF ID='Fire1', COLOR='RED', HRRPUA=600, RAMP_Q='Fire1'/=> to change

&RAMP ID='Fire1', T= 0.0, F=1.0 / &RAMP ID='Fire1', T= 6000, F=1.0 /

fire first floor

&VENT SURF_ID='Fire1', XB=2.5,3.5,1.5,2.5,0.2,0.2, COLOR='RED', SPREAD_RATE=0.006988, XYZ=3,2,0.2/ Fire 1 => to change fast = 0.006988 ultrafast = 0.009989 &OBST XB=2.5,3.5,1.5,2.5,0.0,0.2, SURF_ID='ADIABATIC'/ fire => to change

&OBST ID='Walls', XB=0,4.0,0.0,4.0,5.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=0,0.2,0.2,3.8,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=0,4.0,0.0,0.2,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=0,4.0,3.8,4.0,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Top', XB=3.8,4.0,0.2,3.8,0.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='2m', XB=2.0,4.0,0.0,4.0,2.0,2.0, SURF_ID='ADIABATIC'/ &OBST ID='3m', XB=0,2.0,0.0,4.0,3.0,3.0, SURF_ID='ADIABATIC'/ &OBST ID='Obstruction', XB=2.0,4.0,0.0,4.0,4.0,5.0, SURF_ID='ADIABATIC'/ &OBST ID='Obstruction', XB=0,2.0,0.0,4.0,0.0,1.0, SURF_ID='ADIABATIC'/

&HOLE ID='Opening top', XB=0.0,0.2,1.4,2.4,3.0,4.0/ &HOLE ID='Opening bottom', XB=3.8,4.0,1.5,2.5,0,1.0/

Topopening ambient &VENT ID='Vent1', SURF_ID='OPEN', XB=-2.0,0.0,0.0,0.0,0.0,5.0/ &VENT ID='Vent2', SURF_ID='OPEN', XB=-2.0,0.0,0.0,4.0,5.0,5.0/ &VENT ID='Vent3', SURF_ID='OPEN', XB=-2.0,-2.0,0.0,4.0,0.0,5.0/ &VENT ID='Vent4', SURF_ID='OPEN', XB=-2.0,0.0,4.0,4.0,0.0,5.0/

Bottomopening ambient &VENT ID='Vent5', SURF_ID='OPEN', XB=4.0,6.0,0.0,0.0,0.0,5.0/ &VENT ID='Vent6', SURF_ID='OPEN', XB=4.0,6.0,0.0,4.0,5.0,5.0/ &VENT ID='Vent7', SURF_ID='OPEN', XB=6.0,6.0,0.0,4.0,0.0,5.0/ &VENT ID='Vent8', SURF_ID='OPEN', XB=4.0,6.0,4.0,4.0,0.0,5.0/

Plane flowrates products &DEVC ID='Massflow1m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,1.0,2.0/ &DEVC ID='Massflow2m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,2.0,3.0/ &DEVC ID='Massflow3m', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,3.0,4.0/ &DEVC ID='MassflowOut', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=0.2,0.2,1.4,2.4,3.0,4.0/ &DEVC ID='MassflowIn', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=3.8,3.8,0.4,1.4,0,2.0/

Plane flowrates air &DEVC ID='Massflow1m', QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,1.0,2.0/ &DEVC ID='Massflow2m', QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,2.0,3.0/ &DEVC ID='Massflow3m', QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,3.0,4.0/ &DEVC ID='MassflowOut', QUANTITY='MASS FLOW', XB=0.2,0.2,1.4,2.4,3.0,4.0/ &DEVC ID='MassflowIn', QUANTITY='MASS FLOW', XB=3.8,3.8,0.4,1.4,0,2.0/

Zone density &DEVC ID='Zone1', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,0.0,2.0/ &DEVC ID='Zone2', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,1.0,3.0/ &DEVC ID='Zone3', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,2.0,4.0/ &DEVC ID='Zone4', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,3.0,5.0/

Zone mass fraction &DEVC ID='Zone1', QUANTITY='MASS FRACTION', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,0.0,2.0/ &DEVC ID='Zone2', QUANTITY='MASS FRACTION', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,1.0,3.0/ &DEVC ID='Zone3', QUANTITY='MASS FRACTION', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,2.0,4.0/ &DEVC ID='Zone4', QUANTITY='MASS FRACTION', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,3.0,5.0/

&TAIL /

rmcdermo commented 6 years ago

You cannot expect MASS FLOW to give precise enough flow rates for mass balance calculations. We do not save the flux limited species fluxes for output purposes. MASS FLOW attempts to reconstruct the flow, but in my experience it just can't get close enough. That is why we have a special quantity 'MASS FLUX WALL', but this unfortunately only gives a value at a solid boundary or domain boundary. An example of how to do a proper mass balance is given in

Verification/Flowfields/mass_flux_wall_zindex.fds

There is a writeup in section 6.1.3 Mass Flux Through Domain Boundaries in the verification guide.

mcgratta commented 6 years ago

There were many mistakes in your file. Bad coordinates, misinterpreted outputs, and so on. Run this case. The mass balances look fine.

&HEAD CHID='mass'/
&TIME T_END=200.0/
&DUMP NFRAMES=200.0/

&MESH ID='MESH', IJK=80,40,50, XB=-2.0,6.0,0.0,4.0,0.0,5.0/

&REAC ID='Fire',
FUEL='REAC_FUEL',
FORMULA='C1H4',
CO_YIELD=0.09,
SOOT_YIELD=0.09/

&SURF ID='ADIABATIC',
COLOR='GRAY 80',
ADIABATIC=.TRUE./

&SURF ID='Fire1',
COLOR='RED',
HRRPUA=600,
RAMP_Q='Fire1'/=> to change

&RAMP ID='Fire1', T= 0.0, F=1.0 /
&RAMP ID='Fire1', T= 6000, F=1.0 /

fire first floor

&VENT SURF_ID='Fire1', XB=2.5,3.5,1.5,2.5,0.2,0.2, COLOR='RED', SPREAD_RATE=0.006988, XYZ=3,2,0.2/ Fire 1 => to change fast = 0.006988 ultrafast = 0.009989
&OBST XB=2.5,3.5,1.5,2.5,0.0,0.2, SURF_ID='ADIABATIC'/ fire => to change

&OBST ID='Walls', XB=0,4.0,0.0,4.0,5.0,5.0, SURF_ID='ADIABATIC'/
&OBST ID='Top', XB=0,0.2,0.2,3.8,0.0,5.0, SURF_ID='ADIABATIC'/
&OBST ID='Top', XB=0,4.0,0.0,0.2,0.0,5.0, SURF_ID='ADIABATIC'/
&OBST ID='Top', XB=0,4.0,3.8,4.0,0.0,5.0, SURF_ID='ADIABATIC'/
&OBST ID='Top', XB=3.8,4.0,0.2,3.8,0.0,5.0, SURF_ID='ADIABATIC'/
&OBST ID='2m', XB=2.0,4.0,0.0,4.0,2.0,2.0, SURF_ID='ADIABATIC'/
&OBST ID='3m', XB=0,2.0,0.0,4.0,3.0,3.0, SURF_ID='ADIABATIC'/
&OBST ID='Obstruction', XB=2.0,4.0,0.0,4.0,4.0,5.0, SURF_ID='ADIABATIC'/
&OBST ID='Obstruction', XB=0,2.0,0.0,4.0,0.0,1.0, SURF_ID='ADIABATIC'/

&HOLE ID='Opening top',    XB=0.0,0.2,1.4,2.4,3.0,4.0/
&HOLE ID='Opening bottom', XB=3.8,4.0,1.5,2.5,0,1.0/

Topopening ambient
&VENT ID='Vent1', SURF_ID='OPEN', XB=-2.0,0.0,0.0,0.0,0.0,5.0/
&VENT ID='Vent2', SURF_ID='OPEN', XB=-2.0,0.0,0.0,4.0,5.0,5.0/
&VENT ID='Vent3', SURF_ID='OPEN', XB=-2.0,-2.0,0.0,4.0,0.0,5.0/
&VENT ID='Vent4', SURF_ID='OPEN', XB=-2.0,0.0,4.0,4.0,0.0,5.0/

Bottomopening ambient
&VENT ID='Vent5', SURF_ID='OPEN', XB=4.0,6.0,0.0,0.0,0.0,5.0/
&VENT ID='Vent6', SURF_ID='OPEN', XB=4.0,6.0,0.0,4.0,5.0,5.0/
&VENT ID='Vent7', SURF_ID='OPEN', XB=6.0,6.0,0.0,4.0,0.0,5.0/
&VENT ID='Vent8', SURF_ID='OPEN', XB=4.0,6.0,4.0,4.0,0.0,5.0/

&DEVC ID='Prodflow1m',  QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,1.0,2.0/
&DEVC ID='Prodflow2m',  QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,2.0,3.0/
&DEVC ID='Prodflow3m',  QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=2.0,2.0,0.2,3.8,3.0,4.0/
&DEVC ID='ProdflowOut', QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=0.2,0.2,1.4,2.4,3.0,4.0/
&DEVC ID='ProdflowIn',  QUANTITY='MASS FLOW', SPEC_ID='PRODUCTS', XB=3.8,3.8,1.5,2.5,0.0,1.0/

&DEVC ID='Massflow1m',  QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,1.0,2.0/
&DEVC ID='Massflow2m',  QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,2.0,3.0/
&DEVC ID='Massflow3m',  QUANTITY='MASS FLOW', XB=2.0,2.0,0.2,3.8,3.0,4.0/
&DEVC ID='MassflowOut', QUANTITY='MASS FLOW', XB=0.2,0.2,1.4,2.4,3.0,4.0/
&DEVC ID='MassflowIn',  QUANTITY='MASS FLOW', XB=3.8,3.8,1.5,2.5,0.0,1.0/

&DEVC ID='Zone1', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,0.0,2.0, STATISTICS='VOLUME INTEGRAL' /
&DEVC ID='Zone2', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,1.0,3.0, STATISTICS='VOLUME INTEGRAL' /
&DEVC ID='Zone3', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=2.0,3.8,0.2,3.8,2.0,4.0, STATISTICS='VOLUME INTEGRAL' /
&DEVC ID='Zone4', QUANTITY='DENSITY', SPEC_ID='PRODUCTS', XB=0.2,2.0,0.2,3.8,3.0,5.0, STATISTICS='VOLUME INTEGRAL' /

&SLCF PBY=2.0, QUANTITY='TEMPERATURE', VECTOR=.TRUE. /

&TAIL /
SimonLoosvelt commented 6 years ago

After running the simulation that you send, I got next values for the mass flow of the products mass flow products

The density of the room gives following mass inside each zone density volume integral zones

When i apply the mass conservation, which should be equal to the previous graph, it gives the next values: mass conservation products

The results are wrong, i don't get that it works out with you??

mcgratta commented 6 years ago

What version of FDS are you using?

SimonLoosvelt commented 6 years ago

I'm using the version FDS 6.5.3

mcgratta commented 6 years ago

You should be using the latest release, 6.6.0, or if you are a student doing research, you should be checking out the latest source code. This is what I am running. If there is an error in 6.5.3, I want to know if it is fixed in the latest version.

SimonLoosvelt commented 6 years ago

Okay i am a student and i will download the latest version

SimonLoosvelt commented 6 years ago

I have now used version 6.6.0 to simulate the case. There are small differences but the issue is not solved now. Mass flow of the products, the graph with 6 is the newest version mass flow products mass flow products 6 Mass in the zones, the 6 is the newest version density volume integral zones mass in zones 6 Mass conservation is made from the mass flow rates in the first graph. Normally this should be equal to the masses in the zones in the second graph. mass conservation products mass conservation products 6

So you see the differences are not so big. Is it possible that FDS is not capable of doing that? And what is really the definition of the products?

drjfloyd commented 6 years ago

See Randy';s reply. He told you that we do not store all the data needed to perfectly reconstruct the mass flux when doing outputs of mass flow within a meh. Inside the domain the MASS FLOW device is going to be close but not perfect. Applied at the external boundary of a mesh (MASS FLOW WALL) it will be accurate.