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

Pressure fluctuation - HVAC #13673

Open
mcgratta opened this issue Nov 1, 2024 Discussed in #13629 · 22 comments
Open

Pressure fluctuation - HVAC #13673

mcgratta opened this issue Nov 1, 2024 Discussed in #13629 · 22 comments
Assignees

Comments

@mcgratta
Copy link
Contributor

mcgratta commented Nov 1, 2024

Discussed in #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
image


&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 /

```</div>
@mcgratta mcgratta self-assigned this Nov 1, 2024
mcgratta added a commit that referenced this issue Nov 3, 2024
FDS Source: Issue #13673. Remove uninitialized variable
@mcgratta
Copy link
Contributor Author

mcgratta commented Nov 5, 2024

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

@mcgratta
Copy link
Contributor Author

mcgratta commented Nov 6, 2024

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
Copy link
Contributor Author

mcgratta commented Nov 6, 2024

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
Copy link
Contributor Author

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
Copy link
Contributor

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

@mcgratta
Copy link
Contributor Author

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 added a commit to mcgratta/fds that referenced this issue Nov 12, 2024
mcgratta added a commit that referenced this issue Nov 12, 2024
FDS Source: Issue #13673. Fix bug in CONNECTED_ZONES
@mcgratta
Copy link
Contributor Author

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
Copy link
Contributor

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
Copy link
Contributor

drjfloyd commented Nov 12, 2024

i confirm the connected zones fix solves the issue

@Er9y714
Copy link

Er9y714 commented Nov 12, 2024

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
Copy link
Contributor

It will be in the next test release.

@mcgratta
Copy link
Contributor Author

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

@Er9y714
Copy link

Er9y714 commented Nov 13, 2024

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
Copy link
Contributor

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
Copy link
Contributor

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

image

@mcgratta
Copy link
Contributor Author

Does that HVAC vent allow backflow?

@drjfloyd
Copy link
Contributor

Yes.

@mcgratta
Copy link
Contributor Author

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

@drjfloyd
Copy link
Contributor

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

@mcgratta mcgratta reopened this Nov 13, 2024
@drjfloyd
Copy link
Contributor

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
Copy link
Contributor Author

mcgratta commented Nov 14, 2024

I plotted the ABSOLUTE PRESSURE:

image

This looks correct, in that the pressure gauges that are 2 m off the floor start and finish at about

101325 - 1.2 x 9.8 x 2 = 101301 Pa

and the gauge that is 5.2 m off the floor begins and ends at

101325 - 1.2 x 9.8 x 5.2 = 101264 Pa

I think the "problem" here is that the PRESSURE is a perturbation of the "zone" or background pressures. Because of the opening and closing of doors, both the background pressures and perturbations fluctuate, but only their sum is the correct pressure that one would measure. I don't know if this is something to fix or maybe we need to think about a different form of the output quantity PRESSURE.

As for the oscillations---they are somewhat fictitious, but magically superimposing a solid obstruction in a flowing fluid instantaneously is also fictitious.

@drjfloyd
Copy link
Contributor

I wrote some debug in the HVAC BC routine for the first wall cell evlauted for each node:

WRITE(666,) 'PRE IOR:',NODE_INDEX,II,JJ,KK,B1%PRESSURE_ZONE,IOR,TMP(II,JJ,KK),RHO(II,JJ,KK)
WRITE(666,
) PBARP(KK,B1%PRESSURE_ZONE),RHO(II,JJ,KK)*HP(II,JJ,KK),-RHO(II,JJ,KK)*KRES(II,JJ,KK)

At the timestep after than 7 s door change:

PRE IOR: 2 4 26 3 2 -2 293.193958049563 1.19501738389287
101320.309798166 -46.3848953520857 -1.08404360274660
PRE IOR: 1 4 31 3 0 2 293.166645282267 1.19457007881222
101272.837135754 0.126688818592199 -6.090064336949615E-002

The internal node is still zone 2 and the external node is still zone 0.
Node pressure is zone pressure + RH(H - KRES)
The internal node pressusre is:
10320.3 - 46.4 - 1.1 =10272.8
The external node pressure is:
10272.8 + 0.1 - 0.1 = 10272.8

Same pressure, no flow.

HVAC appears to be correct for this case and just the output issue noted in the prior post.

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

3 participants