firemodels / fds

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

Pressure fluctuation - HVAC #13673

Open mcgratta opened 1 week ago

mcgratta commented 1 week ago

Discussed in https://github.com/firemodels/fds/discussions/13629

Originally posted by **Er9y714** October 25, 2024 Hi, I am posting this to discussions instead of issues because a similar issue was discussed before (#11951) and the behaviour was deemed normal. So this time I would like to share an another setup (DUCT with HVAC) and ask your opinion. Is this normal, if yes, how can I prevent it? Thank you. I have observed a pressure issue in a complex simulation I am working on. In short, a room is connected to outside via a HVAC duct. When all doors are closed, the pressure in the room with duct does not drop to 0 Pa as I would expect. I have tried to simplify the case as much as possible. I have also tightened the tolerances to the level I cannot apply to the complete project file. Yet, the issue is still present. Although it is not an option for large project file, I have tried running this small case with ULMAT as well. It was significantly slower and fluctuation was still there. (Similar issue #11951) Based on the previous posts/issues, I am aware that closing a door suddenly is expected to create such fluctuations but I have not yet found an alternative door opening/closing method. Furthermore, the average of the pressure in the room when all doors are closed is positive and not reducing. With a duct of 1.5 m2 area, I would expect there is not sufficient air supply to balance this pressure fluctuation but it appears not the case. I have tried running this small case with ULMAT as well. It was significantly slower and fluctuation was still there. (This solver is not an option to use in complex project file) Similar issue #11951 ![image](https://github.com/user-attachments/assets/6cfe1018-6113-438a-aee0-5bbabcafecb3) ![image](https://github.com/user-attachments/assets/92c42a00-085f-42dc-83a3-0bfd90711e21) ``` &HEAD CHID='test_3'/ &TIME T_END=9.0/ &DUMP DT_DEVC=0.01, DT_SLCF=0.1/ &MISC MINIMUM_ZONE_VOLUME=0.5/ &PRES MAX_PRESSURE_ITERATIONS =100, PRESSURE_TOLERANCE=10, VELOCITY_TOLERANCE=0.01/ &MESH ID='MESH_006-merged-merged-02', IJK=28,16,42, XB=28.4,31.2,42.6,44.2,0.0,4.2/ &MESH ID='MESH_006-merged-merged-03', IJK=28,16,42, XB=28.4,31.2,44.2,45.8,0.0,4.2/ &MESH ID='MESH_006-merged-merged-04', IJK=28,16,42, XB=28.4,31.2,45.8,47.4,0.0,4.2/ &MESH ID='MESH_006-merged-merged-05', IJK=28,16,42, XB=28.4,31.2,47.4,49.0,0.0,4.2/ &MESH ID='MESH_008', IJK=30,22,20, XB=25.4,28.4,44.2,46.4,2.2,4.2/ &MESH ID='MESH_011', IJK=26,33,22, XB=25.4,28.0,43.8,47.1,4.2,6.4/ &MESH ID='MESH_013', IJK=30,32,20, XB=25.4,28.4,41.0,44.2,2.2,4.2/ &MESH ID='MESH_014', IJK=30,22,22, XB=25.4,28.4,44.2,46.4,0.0,2.2/ &RAMP ID='CTRL lobby door 1_RAMP', T=-5.25, F=-1.0/ &RAMP ID='CTRL lobby door 1_RAMP', T=-4.75, F=1.0/ &RAMP ID='CTRL lobby door 1_RAMP', T=2.75, F=1.0/ &RAMP ID='CTRL lobby door 1_RAMP', T=3.25, F=-1.0/ &RAMP ID='CTRL lobby door 1_RAMP', T=5.75, F=-1.0/ &RAMP ID='CTRL lobby door 1_RAMP', T=6.25, F=1.0/ &RAMP ID='CTRL lobby door 1_RAMP', T=8.75, F=1.0/ &RAMP ID='CTRL lobby door 1_RAMP', T=9.25, F=-1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=-5.25, F=1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=-4.75, F=-1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=3.75, F=-1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=4.25, F=1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=6.75, F=1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=7.25, F=-1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=9.75, F=-1.0/ &RAMP ID='CTRL lobby door 2_RAMP', T=10.25, F=1.0/ &CTRL ID='CTRL lobby door 1', FUNCTION_TYPE='CUSTOM', RAMP_ID='CTRL lobby door 1_RAMP', LATCH=.FALSE., INPUT_ID='TIME'/ &CTRL ID='CTRL lobby door 2', FUNCTION_TYPE='CUSTOM', RAMP_ID='CTRL lobby door 2_RAMP', LATCH=.FALSE., INPUT_ID='TIME'/ &DEVC ID='Core2_Door01_VolFlow', QUANTITY='V-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', XB=29.0,29.9,46.45,46.45,-5.551115E-17,2.1/ &DEVC ID='Core2_DoorStairs02_VolFlow', QUANTITY='U-VELOCITY', SPATIAL_STATISTIC='AREA INTEGRAL', XB=28.455874,28.455874,45.2,46.1,0.0,2.1/ &DEVC ID='Louvre_VolFlow', QUANTITY='NORMAL VELOCITY', SPATIAL_STATISTIC='SURFACE INTEGRAL', XB=25.7,27.0,46.4,46.4,4.4,5.6, IOR=-2/ &DEVC ID='Louvre_VolFlow01', QUANTITY='NORMAL VELOCITY', SPATIAL_STATISTIC='SURFACE INTEGRAL', XB=25.7,27.0,46.8,46.8,4.4,5.6/ &DEVC ID='Core2_Door01_MassFlow', QUANTITY='MASS FLUX Y', SPATIAL_STATISTIC='AREA INTEGRAL', XB=29.0,29.9,46.45,46.45,-5.551115E-17,2.1/ &DEVC ID='Core2_DoorStairs02_MassFlow', QUANTITY='MASS FLUX X', SPATIAL_STATISTIC='AREA INTEGRAL', XB=28.455874,28.455874,45.2,46.1,0.0,2.1/ &DEVC ID='Louvre_MassFlow', QUANTITY='MASS FLUX WALL', SPATIAL_STATISTIC='SURFACE INTEGRAL', XB=25.7,27.0,46.4,46.4,4.4,5.6/ &DEVC ID='Louvre_MassFlow01', QUANTITY='MASS FLUX', SPATIAL_STATISTIC='SURFACE INTEGRAL', XB=25.7,27.0,46.8,46.8,4.4,5.6/ &DEVC ID='P_10', QUANTITY='PRESSURE', XYZ=29.95,43.991975,2.0/ &DEVC ID='P_11', QUANTITY='PRESSURE', XYZ=26.959199,44.968723,2.0/ &DEVC ID='P_12', QUANTITY='PRESSURE', XYZ=27.648236,45.851082,5.2/ &DEVC ID='TIME', QUANTITY='TIME', XYZ=28.4,42.6,0.0/ &SURF ID='ADIABATIC', COLOR='GRAY 80', DEFAULT=.TRUE., ADIABATIC=.TRUE./ &OBST ID='wall', XB=28.4,28.6,42.6,44.2,0.0,4.2/ &OBST ID='wall', XB=28.6,30.2,42.6,44.2,4.1,4.2/ &OBST ID='wall', XB=30.2,31.2,42.6,44.2,0.0,4.2/ &OBST ID='wall', XB=28.4,28.6,44.2,45.2,0.0,4.2/ &OBST ID='wall', XB=28.4,28.6,45.2,45.8,2.1,4.2/ &OBST ID='wall', XB=28.6,30.2,44.2,45.8,4.1,4.2/ &OBST ID='wall', XB=30.2,31.2,44.2,45.8,0.0,4.2/ &OBST ID='wall', XB=28.4,28.6,46.1,46.4,0.0,4.2/ &OBST ID='wall', XB=28.4,28.6,45.8,46.1,2.1,4.2/ &OBST ID='wall', XB=28.4,29.0,46.4,46.8,0.0,4.2/ &OBST ID='wall', XB=28.6,30.2,45.8,46.4,4.1,4.2/ &OBST ID='wall', XB=29.0,29.9,46.4,46.6,2.1,4.2/ &OBST ID='wall', XB=29.9,31.2,46.4,46.8,0.0,4.2/ &OBST ID='wall', XB=30.2,31.2,45.8,46.4,0.0,4.2/ &OBST ID='wall', XB=28.2,28.4,46.1,46.4,2.2,4.2/ &OBST ID='wall', XB=28.2,28.4,46.1,46.4,0.0,2.2/ &OBST ID='wall', XB=25.4,28.0,46.4,46.8,4.2,6.4/ &OBST ID='door1', XB=29.0,29.9,46.4,46.5,0.0,2.1, SURF_ID='ADIABATIC', CTRL_ID='CTRL lobby door 1'/ &OBST ID='door2', XB=28.4,28.5,45.2,45.8,0.0,2.1, SURF_ID='ADIABATIC', CTRL_ID='CTRL lobby door 2'/ &OBST ID='door2', XB=28.4,28.5,45.8,46.1,0.0,2.1, SURF_ID='ADIABATIC', CTRL_ID='CTRL lobby door 2'/ &VENT ID='Vent04', SURF_ID='OPEN', XB=25.4,28.0,47.1,47.1,4.2,6.4/ &VENT ID='Vent05', SURF_ID='OPEN', XB=28.4,31.2,49.0,49.0,0.0,4.2, DYNAMIC_PRESSURE=-100.0/ &VENT ID='Louvre_node01', SURF_ID='HVAC', XB=25.7,27.0,46.39,46.39,4.4,5.6, COLOR='GREEN YELLOW'/ &VENT ID='Louvre_node02', SURF_ID='HVAC', XB=25.7,27.0,46.81,46.81,4.4,5.6, COLOR='GREEN YELLOW'/ &HVAC ID='Duct01', TYPE_ID='DUCT', AREA=1.49, PERIMETER=5.0, LOSS=0.25,0.25, NODE_ID='Node01','Node02', ROUGHNESS=1.0E-3, LENGTH=0.42/ &HVAC ID='Node02', TYPE_ID='NODE', DUCT_ID='Duct01', VENT_ID='Louvre_node02', XYZ=26.3,46.4,5/ &HVAC ID='Node01', TYPE_ID='NODE', DUCT_ID='Duct01', VENT_ID='Louvre_node01', XYZ=26.3,46.4,5/ &SLCF QUANTITY='PRESSURE', ID='Slice', PBZ=2.865675/ &TAIL / ```
mcgratta commented 1 week ago

I still do not have a solution to this. I'm working on it.

mcgratta commented 1 week ago

Here is the simplest example of the problem

&HEAD CHID='tunnel_4' /

&TIME T_END=10.0/
&PRES MAX_PRESSURE_ITERATIONS =100, PRESSURE_TOLERANCE=10, VELOCITY_TOLERANCE=0.01/

&DUMP VELOCITY_ERROR_FILE=T /

&MESH IJK=20,20,20, XB=0.0,1.0,0.0,1.0,0.0,1.0, MPI_PROCESS=0 /
&MESH IJK=20,20,20, XB=1.0,2.0,0.0,1.0,0.0,1.0, MPI_PROCESS=1 /
&MESH IJK=20,20,20, XB=2.0,3.0,0.0,1.0,0.0,1.0, MPI_PROCESS=2 /
&MESH IJK=20,20,20, XB=3.0,4.0,0.0,1.0,0.0,1.0, MPI_PROCESS=3 /

&DEVC ID='Timer 1', QUANTITY='TIME', XYZ=0,0,0, SETPOINT=6., INITIAL_STATE=F /
&DEVC ID='Timer 2', QUANTITY='TIME', XYZ=0,0,0, SETPOINT=4., INITIAL_STATE=T /

&OBST XB=0.5,0.6,0.0,1.0,0.0,1.0 /
&OBST XB=1.8,1.9,0.0,1.0,0.0,1.0, DEVC_ID='Timer 1' /
&OBST XB=3.4,3.5,0.0,1.0,0.0,1.0, DEVC_ID='Timer 2' /

&VENT SURF_ID='OPEN', XB=0.0,0.0,0.0,1.0,0.0,1.0 /
&VENT SURF_ID='OPEN', XB=4.0,4.0,0.0,1.0,0.0,1.0, DYNAMIC_PRESSURE=-100.0/

&VENT ID='Louvre_node01', SURF_ID='HVAC', XB=0.5,0.5,0.2,0.8,0.2,0.8, COLOR='GREEN YELLOW' /
&VENT ID='Louvre_node02', SURF_ID='HVAC', XB=0.6,0.6,0.2,0.8,0.2,0.8, COLOR='GREEN YELLOW'/

&HVAC ID='Duct01', TYPE_ID='DUCT', AREA=0.36, PERIMETER=2.4, LOSS=0.25,0.25, NODE_ID='Node01','Node02', ROUGHNESS=1.0E-3, LENGTH=0.42/
&HVAC ID='Node02', TYPE_ID='NODE', DUCT_ID='Duct01', VENT_ID='Louvre_node02', XYZ=0.5,0.5,0.5 /
&HVAC ID='Node01', TYPE_ID='NODE', DUCT_ID='Duct01', VENT_ID='Louvre_node01', XYZ=0.6,0.5,0.5 /

&SLCF QUANTITY='PRESSURE', ID='Slice', PBY=0.5, VECTOR=T /
&SLCF QUANTITY='PRESSURE ZONE', PBY=0.5, CELL_CENTERED=T /

&DEVC QUANTITY='PRESSURE',ID='M1', XYZ=0.7,0.5,0.5 /
&DEVC QUANTITY='PRESSURE',ID='M2', XYZ=1.7,0.5,0.5 /
&DEVC QUANTITY='PRESSURE',ID='M3', XYZ=2.7,0.5,0.5 /
&DEVC QUANTITY='PRESSURE',ID='M4', XYZ=3.7,0.5,0.5 /

&TAIL /
mcgratta commented 1 week ago

Jason -- if you have a chance, can you look at the simple case above. If you run with 1 MPI process, there is no excessive ringing in the pressure. Run with 4 MPI processes and it rings. There must be some bad feedback loop between the HVAC vent and the pressure solver, but I cannot pin point it. The obstructions are not thin and they are not at mesh boundaries, which are the usual suspects with this kind of issue.

mcgratta commented 2 days ago

In the case below, if I remove the fifth mesh (an empty disconnected box that does nothing), the case works without a ringing pressure. If I leave it, I see the ringing. My first guess is that somewhere there is a call to a routine with IF (N_PROCESSES>1), but I cannot find it.


&TIME T_END=10.0/
&PRES MAX_PRESSURE_ITERATIONS =100, PRESSURE_TOLERANCE=10, VELOCITY_TOLERANCE=0.01/

&DUMP VELOCITY_ERROR_FILE=T /

&MESH IJK=20,20,20, XB=0.0,1.0,0.0,1.0,0.0,1.0, MPI_PROCESS=0 /
&MESH IJK=20,20,20, XB=1.0,2.0,0.0,1.0,0.0,1.0, MPI_PROCESS=0 /
&MESH IJK=20,20,20, XB=2.0,3.0,0.0,1.0,0.0,1.0, MPI_PROCESS=0 /
&MESH IJK=20,20,20, XB=3.0,4.0,0.0,1.0,0.0,1.0, MPI_PROCESS=0 /
&MESH IJK=20,20,20, XB=5.0,6.0,0.0,1.0,0.0,1.0, MPI_PROCESS=1 /

&DEVC ID='Timer 1', QUANTITY='TIME', XYZ=0,0,0, SETPOINT=6., INITIAL_STATE=F /
&DEVC ID='Timer 2', QUANTITY='TIME', XYZ=0,0,0, SETPOINT=4., INITIAL_STATE=T /

&OBST XB=0.5,0.6,0.0,1.0,0.0,1.0 /
&OBST XB=1.8,1.9,0.0,1.0,0.0,1.0, DEVC_ID='Timer 1' /
&OBST XB=3.4,3.5,0.0,1.0,0.0,1.0, DEVC_ID='Timer 2' /

&VENT SURF_ID='OPEN', XB=0.0,0.0,0.0,1.0,0.0,1.0 /
&VENT SURF_ID='OPEN', XB=4.0,4.0,0.0,1.0,0.0,1.0, DYNAMIC_PRESSURE=-100.0/

&VENT ID='Louvre_node01', SURF_ID='HVAC', XB=0.5,0.5,0.2,0.8,0.2,0.8, COLOR='GREEN YELLOW' /
&VENT ID='Louvre_node02', SURF_ID='HVAC', XB=0.6,0.6,0.2,0.8,0.2,0.8, COLOR='GREEN YELLOW'/

&HVAC ID='Duct01', TYPE_ID='DUCT', AREA=0.36, PERIMETER=2.4, LOSS=0.25,0.25, NODE_ID='Node01','Node02', ROUGHNESS=1.0E-3, LENGTH=0.42/
&HVAC ID='Node02', TYPE_ID='NODE', DUCT_ID='Duct01', VENT_ID='Louvre_node02', XYZ=0.5,0.5,0.5 /
&HVAC ID='Node01', TYPE_ID='NODE', DUCT_ID='Duct01', VENT_ID='Louvre_node01', XYZ=0.6,0.5,0.5 /

&SLCF QUANTITY='PRESSURE', ID='Slice', PBY=0.5, VECTOR=T /
&SLCF QUANTITY='PRESSURE ZONE', PBY=0.5, CELL_CENTERED=T /

&DEVC QUANTITY='PRESSURE',ID='M1', XYZ=0.7,0.5,0.5 /
&DEVC QUANTITY='PRESSURE',ID='M2', XYZ=1.7,0.5,0.5 /
&DEVC QUANTITY='PRESSURE',ID='M3', XYZ=2.7,0.5,0.5 /
&DEVC QUANTITY='PRESSURE',ID='M4', XYZ=3.7,0.5,0.5 /

&TAIL /
drjfloyd commented 2 days ago

Just wrapped up three weeks of travel. Haven't had time to delve into this yet.

mcgratta commented 2 days ago

I think this has to do with pressure zones, processes, meshes, and connected zones. I think the fix should be easy, but I have to test it.

mcgratta commented 1 day ago

This change appears to have solved the original problem. There was a bug in the logic to indicate that two pressure zones had combined into one or split into two.

drjfloyd commented 1 day ago

While looking into the hvac routines I found a bug in handling merging pressure zones. It didn't impact this specific case but will make a difference in cases where two merging zones each have HVAC VENTs.

drjfloyd commented 1 day ago

i confirm the connected zones fix solves the issue

Er9y714 commented 1 day ago

This is a great news! Thank you very much for investigating it.

If I want to test it, is this a correct version?:

FDS-6.9.1-1275-g421fce2 2024-Nov-09 09:28

https://github.com/firemodels/test_bundles/releases/tag/FDS_TEST

drjfloyd commented 1 day ago

It will be in the next test release.

mcgratta commented 1 day ago

We release a new test bundle everyday, assuming that our overnight tests are successful. So check back tomorrow.

Er9y714 commented 4 hours ago

I have downloaded the test release, windows version and ran the original case.

fds_local -p 8 -o 1 test.fds

The diverging fluctuation issue is solved. Thank you!

However the compartment pressure unexpectedly goes to positive 100 Pa at 7 s, when the room door opens.

image

I have repeated the run with -15Pa boundary. The issue was still there, compartment pressure being 7 Pa. Would this be related the original issue or is it a separate one?

Furthermore, not an issue but an observation; When I tried to run the Linux version, I have received the error fds: /lib64/libc.so.6: version GLIBC_2.34 not found (required by fds). I assume this has to do with our Linux machine operating system which is too old and needs to be reinstalled with different library.

drjfloyd commented 3 hours ago

we will have to take a look. probably related in some manner.

glibc 2.34 was released in 2021. It is part of your linux distribution.

drjfloyd commented 3 hours ago

Interestingly this isnt seen in the node pressures (N1 and N2)

image

mcgratta commented 2 hours ago

Does that HVAC vent allow backflow?

drjfloyd commented 2 hours ago

Yes.

mcgratta commented 2 hours ago

If I add a pressure slice through that vent, I see this. I do not know why the pressure is not decreasing. image

drjfloyd commented 2 hours ago

Something isn't right. Will have to look into it.

drjfloyd commented 1 hour ago

I tired modifying the simple tunnel_4 case to have a similar sequence of door openings and closings but didn't see any strange behavior there. If I add duct velocity to the original case it seems to be correct. Nothing in the duct until 3 s when there is a path open from the -100 Pa VENT to the louver. At 4 s the inner door closes and the HVAC vent oscailltes for a short bit trying to equailize the pressure which is initially negative on the inside. At 6 s the outer door closes and a 7 s the inner door opens, but during this time HVAC flows are near zero. No where near enough to cause that jump in pressure.

image

mcgratta commented 38 minutes ago

There seems to be a disconnect between "zone pressures" and perturbation pressures. You can see the zone pressures in the _hrr.csv file. I don't understand why zone 2 (the larger zone) does not return to ambient. The other potential problem is the fact that we choose an "equilibrium" pressure when zones break to be based on the lowest grid cell in z.

mcgratta commented 36 minutes ago

Question -- why does the node pressure at the HVAC vent not reflect the gas pressure just inside the larger zone?