LEAK_PATH silently disables a fixed-temperature (TMP_FRONT) wall boundary condition
FDS version: FDS-6.11.0-0-g369a20b-release
Summary
When LEAK_PATH is added to a &SURF that defines a fixed-temperature boundary condition (TMP_FRONT with no MATL_ID — i.e. the default/INERT-type wall), the fixed-temperature condition is silently dropped on every face that has leakage outflow. There the surface temperature is no longer held at TMP_FRONT; it floats up to the adjacent gas temperature and the convective heat flux goes to zero, i.e. that face behaves adiabatically. Because the zone-leakage outflow is spread over the whole leak surface, the wall's role as a fixed-temperature heat sink is largely (in a pressurized compartment, essentially entirely) defeated — even though the leakage mass flow is negligible.
A surface that defines its thermal behaviour through MATL_ID (1-D heat conduction) with the same LEAK_PATH is not affected — conduction still works normally.
No warning or error is printed.
This matters because the canonical way to model envelope leakage in FDS is to put LEAK_PATH on the bounding wall/floor/ceiling surfaces; if those surfaces are also meant to be fixed-temperature (cold) walls, they silently become adiabatic.
Minimal reproduction
Two input files, identical except for one line (LEAK_PATH=1,0, on the wall surface). A 50 kW fire in a closed 3×3×3 m compartment; the walls are a fixed-temperature surface TMP_FRONT=20 °C; a pressure zone with a small leak is present in both.
issue_no_leak.fds (control — wall is NOT a leak path):
&HEAD CHID='issue_no_leak'/
&MESH ID='M1', IJK=15,15,15, XB=0.0,3.0,0.0,3.0,0.0,3.0/
&TIME T_END=120.0/
&MISC TMPA=20.0, SIMULATION_MODE='LES'/
&ZONE ID='Z1', XYZ=1.5,1.5,1.5, LEAK_AREA=0.001, LEAK_PRESSURE_EXPONENT=0.65, LEAK_REFERENCE_PRESSURE=50.0/
&REAC ID='PROPANE', FUEL='PROPANE', SOOT_YIELD=0.01, RADIATIVE_FRACTION=0.35/
&SURF ID='WALL',
DEFAULT=.TRUE.,
TMP_FRONT=20.0/
&SURF ID='FIRE', HRRPUA=50.0, RAMP_Q='RQ'/
&RAMP ID='RQ', T=0.0,F=0.0/
&RAMP ID='RQ', T=30.0,F=1.0/
&RAMP ID='RQ', T=120.0,F=1.0/
&VENT ID='BURNER', SURF_ID='FIRE', XB=1.0,2.0,1.0,2.0,0.0,0.0/
&DEVC ID='GAS_UPPER', QUANTITY='UPPER TEMPERATURE', XB=1.5,1.5,1.5,1.5,0.0,3.0/
&DEVC ID='WALL_T', QUANTITY='WALL TEMPERATURE', XB=3.0,3.0,0.0,3.0,0.0,3.0, STATISTICS='SURFACE INTEGRAL'/
&DEVC ID='WALL_QNET', QUANTITY='NET HEAT FLUX', XB=3.0,3.0,0.0,3.0,0.0,3.0, STATISTICS='SURFACE INTEGRAL'/
&TAIL/
issue_with_leak.fds is identical except the wall surface gains one line:
&SURF ID='WALL',
DEFAULT=.TRUE.,
LEAK_PATH=1,0,
TMP_FRONT=20.0/
Expected vs. observed
TMP_FRONT = 20 °C in both cases. All values averaged over t = 90–120 s.
Primary evidence — global gas-phase energy budget (*_hrr.csv, no surface devices involved). These are the gas-phase source terms; negative = the gas loses heat to the walls / by radiation:
| case |
Q_RADI |
Q_CONV |
Q_COND |
wall+radiation loss |
gas (upper layer) |
issue_no_leak (control) |
−23.1 |
0.0 |
−20.9 |
−44.0 kW |
89.6 °C |
issue_with_leak |
−13.6 |
−9.6 |
−0.5 |
−23.6 kW |
136.4 °C |
Adding LEAK_PATH to the (identical) fixed-temperature wall nearly halves the heat the gas loses to the envelope (44 → 24 kW) and the compartment runs ~47 K hotter — even though the leakage mass flow itself is negligible.
Corroboration — surface quantities on the east wall (STATISTICS='SURFACE INTEGRAL'; the WALL TEMPERATURE integral ÷ 9 m² gives the area-mean):
| case |
wall surface T |
net surface flux |
issue_no_leak |
20.0 °C (pinned at TMP_FRONT, correct) |
+6.3 kW (cold sink) |
issue_with_leak |
131.7 °C (floated to ≈ gas temp) |
+1.1 kW (≈ adiabatic) |
Expected: both walls held at 20 °C and act as a cold sink; the LEAK_PATH case should differ only by the (negligible) leakage flow.
Observed: adding LEAK_PATH lets the TMP_FRONT surface float toward the gas temperature on every cell that has leak outflow, so it stops removing heat. (The effect is per-cell: only faces with outflow U_NORMAL>0 are affected, so the loss is reduced rather than going exactly to zero here. In a pressurized compartment fire essentially the whole envelope is in outflow during the hot phase, so the fixed-temperature/INERT walls become effectively adiabatic.)
Notes / scope
- Trigger isolated to
LEAK_PATH on the SURF. A &ZONE with leakage but no LEAK_PATH on the fixed-temperature surface behaves correctly (wall pinned at 20 °C).
ADIABATIC=.TRUE. and MATL_ID surfaces with the same LEAK_PATH behave as expected; only the fixed-temperature (TMP_FRONT/INERT, no MATL) surface is affected.
- No diagnostic is emitted, so the effect is easy to miss in a large model.
Apparent cause in the source
(Line numbers from Source/ at commit e29dd78; behaviour reproduced with the 6.11.0-g369a20b release binary.)
Pressure-zone leakage is applied as a small HVAC outflow distributed uniformly over every LEAK_PATH surface cell, so those cells carry a nonzero B1%U_NORMAL (outflow, >0, while the zone is over-pressured). In wall.f90, SURFACE_HEAT_TRANSFER, the SPECIFIED_TEMPERATURE case:
IF (B1%U_NORMAL>TWENTY_EPSILON_EB) THEN
B1%TMP_F = B1%TMP_G ! any outflow -> surface temp := gas temp
ELSEIF (SF%TMP_FRONT>0._EB) THEN
B1%TMP_F = TMP_0(BC%KKG) + EVALUATE_RAMP(...)*(SF%TMP_FRONT-TMP_0(BC%KKG))
ELSE
B1%TMP_F = TMP_0(BC%KKG)
ENDIF
DTMP = B1%TMP_G - B1%TMP_F
B1%Q_CON_F = B1%HEAT_TRANS_COEF*DTMP ! -> 0 when DTMP=0
TWENTY_EPSILON_EB = 20*EPSILON ≈ 4.4e-15, so an arbitrarily small leak outflow trips the first branch on every leak cell: TMP_F is set to the gas temperature, the convective flux DTMP goes to zero, and the face radiates at gas temperature — i.e. the fixed-temperature wall becomes adiabatic.
This U_NORMAL>0 ⇒ TMP_F=TMP_G branch is appropriate for a resolved supply/exhaust vent (one cannot impose a temperature on gas leaving the domain), but pressure-zone leakage is an explicitly subgrid flow smeared over the whole surface; tripping it discards the wall thermal BC. It also contradicts the documented modeling assumption for pressure-zone leakage (User Guide §10.3.2: the leaking gas is assumed to equilibrate "to the same temperature as the wall surface", which presupposes the wall keeps its specified temperature).
Notably the deposition routine already guards against this same spurious leak velocity (wall.f90, CALC_DEPOSITION: IF (ANY(SFD%LEAK_PATH>0)) U_NORMAL=0), but the SPECIFIED_TEMPERATURE thermal BC does not.
Suggested fix
Ignore the leakage-induced normal velocity when selecting the fixed-temperature branch, mirroring the deposition guard, e.g.:
IF (B1%U_NORMAL>TWENTY_EPSILON_EB .AND. .NOT.ANY(SF%LEAK_PATH>0)) THEN
B1%TMP_F = B1%TMP_G
ELSEIF (SF%TMP_FRONT>0._EB) THEN
...
(or otherwise exclude the subgrid leak component of U_NORMAL from this test).
LEAK_PATH silently disables a fixed-temperature (
TMP_FRONT) wall boundary conditionFDS version:
FDS-6.11.0-0-g369a20b-releaseSummary
When
LEAK_PATHis added to a&SURFthat defines a fixed-temperature boundary condition (TMP_FRONTwith noMATL_ID— i.e. the default/INERT-type wall), the fixed-temperature condition is silently dropped on every face that has leakage outflow. There the surface temperature is no longer held atTMP_FRONT; it floats up to the adjacent gas temperature and the convective heat flux goes to zero, i.e. that face behaves adiabatically. Because the zone-leakage outflow is spread over the whole leak surface, the wall's role as a fixed-temperature heat sink is largely (in a pressurized compartment, essentially entirely) defeated — even though the leakage mass flow is negligible.A surface that defines its thermal behaviour through
MATL_ID(1-D heat conduction) with the sameLEAK_PATHis not affected — conduction still works normally.No warning or error is printed.
This matters because the canonical way to model envelope leakage in FDS is to put
LEAK_PATHon the bounding wall/floor/ceiling surfaces; if those surfaces are also meant to be fixed-temperature (cold) walls, they silently become adiabatic.Minimal reproduction
Two input files, identical except for one line (
LEAK_PATH=1,0,on the wall surface). A 50 kW fire in a closed 3×3×3 m compartment; the walls are a fixed-temperature surfaceTMP_FRONT=20 °C; a pressure zone with a small leak is present in both.issue_no_leak.fds(control — wall is NOT a leak path):issue_with_leak.fdsis identical except the wall surface gains one line:Expected vs. observed
TMP_FRONT = 20 °Cin both cases. All values averaged over t = 90–120 s.Primary evidence — global gas-phase energy budget (
*_hrr.csv, no surface devices involved). These are the gas-phase source terms; negative = the gas loses heat to the walls / by radiation:Q_RADIQ_CONVQ_CONDissue_no_leak(control)issue_with_leakAdding
LEAK_PATHto the (identical) fixed-temperature wall nearly halves the heat the gas loses to the envelope (44 → 24 kW) and the compartment runs ~47 K hotter — even though the leakage mass flow itself is negligible.Corroboration — surface quantities on the east wall (
STATISTICS='SURFACE INTEGRAL'; theWALL TEMPERATUREintegral ÷ 9 m² gives the area-mean):issue_no_leakTMP_FRONT, correct)issue_with_leakExpected: both walls held at 20 °C and act as a cold sink; the
LEAK_PATHcase should differ only by the (negligible) leakage flow.Observed: adding
LEAK_PATHlets theTMP_FRONTsurface float toward the gas temperature on every cell that has leak outflow, so it stops removing heat. (The effect is per-cell: only faces with outflowU_NORMAL>0are affected, so the loss is reduced rather than going exactly to zero here. In a pressurized compartment fire essentially the whole envelope is in outflow during the hot phase, so the fixed-temperature/INERT walls become effectively adiabatic.)Notes / scope
LEAK_PATHon the SURF. A&ZONEwith leakage but noLEAK_PATHon the fixed-temperature surface behaves correctly (wall pinned at 20 °C).ADIABATIC=.TRUE.andMATL_IDsurfaces with the sameLEAK_PATHbehave as expected; only the fixed-temperature (TMP_FRONT/INERT, noMATL) surface is affected.Apparent cause in the source
(Line numbers from
Source/at commit e29dd78; behaviour reproduced with the 6.11.0-g369a20b release binary.)Pressure-zone leakage is applied as a small HVAC outflow distributed uniformly over every
LEAK_PATHsurface cell, so those cells carry a nonzeroB1%U_NORMAL(outflow,>0, while the zone is over-pressured). Inwall.f90,SURFACE_HEAT_TRANSFER, theSPECIFIED_TEMPERATUREcase:TWENTY_EPSILON_EB = 20*EPSILON ≈ 4.4e-15, so an arbitrarily small leak outflow trips the first branch on every leak cell:TMP_Fis set to the gas temperature, the convective fluxDTMPgoes to zero, and the face radiates at gas temperature — i.e. the fixed-temperature wall becomes adiabatic.This
U_NORMAL>0 ⇒ TMP_F=TMP_Gbranch is appropriate for a resolved supply/exhaust vent (one cannot impose a temperature on gas leaving the domain), but pressure-zone leakage is an explicitly subgrid flow smeared over the whole surface; tripping it discards the wall thermal BC. It also contradicts the documented modeling assumption for pressure-zone leakage (User Guide §10.3.2: the leaking gas is assumed to equilibrate "to the same temperature as the wall surface", which presupposes the wall keeps its specified temperature).Notably the deposition routine already guards against this same spurious leak velocity (
wall.f90,CALC_DEPOSITION:IF (ANY(SFD%LEAK_PATH>0)) U_NORMAL=0), but theSPECIFIED_TEMPERATUREthermal BC does not.Suggested fix
Ignore the leakage-induced normal velocity when selecting the fixed-temperature branch, mirroring the deposition guard, e.g.:
(or otherwise exclude the subgrid leak component of
U_NORMALfrom this test).