Skip to content

Commit 63cc7d6

Browse files
authored
Merge pull request #13906 from ericvmueller/master
Add FIRE ARRIVAL TIME and FIRE RESIDENCE TIME boundary outputs
2 parents 177151e + 4a4e71a commit 63cc7d6

File tree

12 files changed

+189
-50
lines changed

12 files changed

+189
-50
lines changed

Manuals/FDS_User_Guide/FDS_User_Guide.tex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11222,6 +11222,10 @@ \subsection{Extinction}
1122211222
\label{info:extinct_out}
1122311223
In combustion, knowing if, when, or where chemical reactions have been extinguished is important. The output quantity \ct{EXTINCTION} tells the user whether or not combustion has been prevented by the extinction routine. By default, \ct{EXTINCTION} = 0, which means that the FDS extinction routine has not prevented combustion. An \ct{EXTINCTION} value of 1 means that the routine has prevented combustion. The criteria for an \ct{EXTINCTION} value of 1 is the presence of fuel and oxidizer without any energy release. An \ct{EXTINCTION} value of -1 means that there is either no fuel or no oxidizer present.
1122411224

11225+
\subsection{Fire spread over a surface}
11226+
\label{info:fire_spread_output}
11227+
In some cases it can be useful to output timings related to the spread of fire over a surface. For example, when modeling wildland fires the shape and spread of the fire front can be very important. For this reason, two specialized output quantities are available as boundary files (Sec.~\ref{info:BNDF}) or as measurements from devices places on a solid boundary (Sec.~\ref{info:DEVC2}). These are \ct{FIRE ARRIVAL TIME} and \ct{FIRE RESIDENCE TIME}. The \ct{FIRE ARRIVAL TIME} quantity outputs the time at which the gas-phase cell adjacent to the solid exceeds a threshold for heat release rate per volume (\ct{HRRPUV}) and the \ct{FIRE RESIDENCE TIME} gives the cummulative time over which the threshold is exceeded during the simulation. The chosen threshold is the same as used by smokeview for rendering \ct{HRRPUV}, as described in Sec.~\ref{info:SMOKE3D}. In the case of a level set simulation (Sec.~\ref{info:level_set}), the \ct{FIRE ARRIVAL TIME} can be computed directly from the level set value and the \ct{FIRE RESIDENCE TIME} comes from the spread-rate adjusted burning duration of the fuel, as described in Sec.~\ref{level_set_fuel_model_1}. These two quantities are cummulatively populated over time such that a full picture of the fire spread can be obtained from relatively infrequent outputs - theoretically only one snapshot at the end of the simulation is required.
11228+
1122511229

1122611230
\newpage
1122711231

@@ -11449,6 +11453,8 @@ \section{Solid Phase Output Quantities}
1144911453
\ct{ENTHALPY FLUX WALL} & Section~\ref{info:enthalpy_flux} & \unit{kW/m^2} & B,D \\ \hline
1145011454
\ct{TOTAL HEAT FLUX} & Section~\ref{info:heat_flux} & \unit{kW/m^2} & B,D \\ \hline
1145111455
\ct{EMISSIVITY} & Surface emissivity (usually constant) & & B,D \\ \hline
11456+
\ct{FIRE ARRIVAL TIME} & Section \ref{info:fire_spread_output} & \si{s} & B,D \\ \hline
11457+
\ct{FIRE RESIDENCE TIME} & Section \ref{info:fire_spread_output} & \si{s} & B,D \\ \hline
1145211458
\ct{GAS DENSITY} & Gas Density near wall & \si{kg/m^3} & B,D \\ \hline
1145311459
\ct{GAS TEMPERATURE} & Gas Temperature near wall & $^\circ$C & B,D \\ \hline
1145411460
\ct{HEAT TRANSFER COEFFICIENT} & Section \ref{info:convection} & \si{W/(m^2.K)} & B,D \\ \hline

Source/cons.f90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ MODULE GLOBAL_CONSTANTS
271271
LOGICAL :: OXPYRO_MODEL=.FALSE. !< Flag to use oxidative pyrolysis mass transfer model
272272
LOGICAL :: OUTPUT_WALL_QUANTITIES=.FALSE. !< Flag to force call to WALL_MODEL
273273
LOGICAL :: FLUX_LIMITER_MW_CORRECTION=.FALSE.
274+
LOGICAL :: STORE_FIRE_ARRIVAL=.FALSE. !< Flag for tracking arrival of spreading fire front over a surface
275+
LOGICAL :: STORE_FIRE_RESIDENCE=.FALSE. !< Flag for tracking residence time of spreading fire front over a surface
274276

275277
INTEGER, ALLOCATABLE, DIMENSION(:) :: CHANGE_TIME_STEP_INDEX !< Flag to indicate if a mesh needs to change time step
276278
INTEGER, ALLOCATABLE, DIMENSION(:) :: SETUP_PRESSURE_ZONES_INDEX !< Flag to indicate if a mesh needs to keep searching for ZONEs

Source/data.f90

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1605,14 +1605,14 @@ SUBROUTINE DEFINE_OUTPUT_QUANTITIES
16051605
OUTPUT_QUANTITY(-80)%SHORT_NAME = 'hrrpua_O2'
16061606

16071607
! Fire spread
1608-
OUTPUT_QUANTITY(-90)%NAME = 'IGNITION TIME'
1608+
OUTPUT_QUANTITY(-90)%NAME = 'FIRE ARRIVAL TIME'
16091609
OUTPUT_QUANTITY(-90)%UNITS = 's'
1610-
OUTPUT_QUANTITY(-90)%SHORT_NAME = 't_ig'
1610+
OUTPUT_QUANTITY(-90)%SHORT_NAME = 't_a'
16111611
OUTPUT_QUANTITY(-90)%PART_APPROPRIATE = .FALSE.
16121612

1613-
OUTPUT_QUANTITY(-91)%NAME = 'BURN DURATION'
1613+
OUTPUT_QUANTITY(-91)%NAME = 'FIRE RESIDENCE TIME'
16141614
OUTPUT_QUANTITY(-91)%UNITS = 's'
1615-
OUTPUT_QUANTITY(-91)%SHORT_NAME = 't_b'
1615+
OUTPUT_QUANTITY(-91)%SHORT_NAME = 't_r'
16161616
OUTPUT_QUANTITY(-91)%PART_APPROPRIATE = .FALSE.
16171617

16181618
! Condensation

Source/dump.f90

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ MODULE DUMP
6262
SUBROUTINE UPDATE_GLOBAL_OUTPUTS(T,DT,NM)
6363

6464
USE COMP_FUNCTIONS, ONLY : CURRENT_TIME
65+
USE VEGE, ONLY : UPDATE_FIRE_SPREAD_OUTPUTS
6566
REAL(EB) :: TNOW
6667
INTEGER, INTENT(IN) :: NM
6768
REAL(EB),INTENT(IN) :: T,DT
@@ -72,6 +73,8 @@ SUBROUTINE UPDATE_GLOBAL_OUTPUTS(T,DT,NM)
7273

7374
CALL UPDATE_HRR(DT,NM)
7475
CALL UPDATE_MASS(DT,NM)
76+
! Update fire spread outputs
77+
IF (STORE_FIRE_ARRIVAL .OR. STORE_FIRE_RESIDENCE) CALL UPDATE_FIRE_SPREAD_OUTPUTS(T,DT,NM)
7578
CALL UPDATE_DEVICES_1(T,DT,NM)
7679

7780
T_USED(7) = T_USED(7) + CURRENT_TIME() - TNOW
@@ -3540,6 +3543,9 @@ SUBROUTINE DUMP_RESTART(T,DT,NM)
35403543
WRITE(LU_CORE(NM)) PATCH
35413544
ENDIF
35423545

3546+
IF (STORE_FIRE_ARRIVAL) WRITE(LU_CORE(NM)) FIRE_ARRIVAL_TIME
3547+
IF (STORE_FIRE_RESIDENCE) WRITE(LU_CORE(NM)) FIRE_RESIDENCE_TIME
3548+
35433549
CLOSE(LU_CORE(NM))
35443550

35453551
END SUBROUTINE DUMP_RESTART
@@ -3763,6 +3769,9 @@ SUBROUTINE READ_RESTART(T,DT,NM)
37633769
READ(LU_RESTART(NM)) PATCH
37643770
ENDIF
37653771

3772+
IF (STORE_FIRE_ARRIVAL) READ(LU_RESTART(NM)) FIRE_ARRIVAL_TIME
3773+
IF (STORE_FIRE_RESIDENCE) READ(LU_RESTART(NM)) FIRE_RESIDENCE_TIME
3774+
37663775
CLOSE(LU_RESTART(NM))
37673776

37683777
! Keep track of whether the output timing intervals are specified by the user or not
@@ -8519,7 +8528,7 @@ REAL(EB) FUNCTION SOLID_PHASE_OUTPUT(INDX,Y_INDEX,Z_INDEX,PART_INDEX,OPT_WALL_IN
85198528
LTMP,ATMP,CTMP,H_W_EFF,X0,VOL,DN,PRESS,&
85208529
NVEC(3),PVEC(3),TAU_IJ(3,3),VEL_CELL(3),VEL_WALL(3),MU_WALL,RHO_WALL,FVEC(3),SVEC(3),TVEC1(3),TVEC2(3),&
85218530
PR1,PR2,Z1,Z2,RADIUS,CUT_FACE_AREA,SOLID_PHASE_OUTPUT_CTF,AAA,BBB,CCC,ALP,BET,GAM,MMM,DTMP
8522-
INTEGER :: I_DEPTH,II2,IIG,JJG,KKG,NN,IWX,SURF_INDEX,I,J,NWP,M_INDEX,ICC,IND1,IND2,IC2,ITMP,ICF,JCF,NFACE,NR,MATL_INDEX
8531+
INTEGER :: I_DEPTH,II2,IIG,JJG,KKG,NN,IWX,SURF_INDEX,I,J,NWP,M_INDEX,ICC,IND1,IND2,IC2,ITMP,ICF,JCF,NFACE,NR,MATL_INDEX,OUTPUT_INDEX
85238532
TYPE(BOUNDARY_PROP1_TYPE), POINTER :: B1=>NULL()
85248533
TYPE(BOUNDARY_PROP2_TYPE), POINTER :: B2=>NULL()
85258534
TYPE(BOUNDARY_RADIA_TYPE), POINTER :: BR=>NULL()
@@ -9263,10 +9272,20 @@ REAL(EB) FUNCTION SOLID_PHASE_OUTPUT(INDX,Y_INDEX,Z_INDEX,PART_INDEX,OPT_WALL_IN
92639272
IF (SF%INCLUDE_BOUNDARY_PROP2_TYPE) SOLID_PHASE_OUTPUT = B2%Y_O2_ITER
92649273
CASE(80) ! OXIDATIVE HRRPUA
92659274
SOLID_PHASE_OUTPUT = B1%Q_DOT_O2_PP*0.001_EB
9266-
CASE(90) ! IGNITION TIME
9267-
SOLID_PHASE_OUTPUT = B1%T_IGN
9268-
CASE(91) ! BURN DURATION
9269-
SOLID_PHASE_OUTPUT = B1%BURN_DURATION
9275+
CASE(90) ! FIRE ARRIVAL TIME
9276+
IF (PRESENT(OPT_WALL_INDEX)) THEN
9277+
OUTPUT_INDEX = OPT_WALL_INDEX
9278+
ELSEIF (PRESENT(OPT_CFACE_INDEX)) THEN
9279+
OUTPUT_INDEX = OPT_CFACE_INDEX-INTERNAL_CFACE_CELLS_LB+N_INTERNAL_WALL_CELLS+N_EXTERNAL_WALL_CELLS
9280+
ENDIF
9281+
SOLID_PHASE_OUTPUT = FIRE_ARRIVAL_TIME(OUTPUT_INDEX)
9282+
CASE(91) ! FIRE RESIDENCE TIME
9283+
IF (PRESENT(OPT_WALL_INDEX)) THEN
9284+
OUTPUT_INDEX = OPT_WALL_INDEX
9285+
ELSEIF (PRESENT(OPT_CFACE_INDEX)) THEN
9286+
OUTPUT_INDEX = OPT_CFACE_INDEX-INTERNAL_CFACE_CELLS_LB+N_INTERNAL_WALL_CELLS+N_EXTERNAL_WALL_CELLS
9287+
ENDIF
9288+
SOLID_PHASE_OUTPUT = FIRE_RESIDENCE_TIME(OUTPUT_INDEX)
92709289

92719290
CASE(100) ! CONDENSATION HEAT FLUX
92729291
SOLID_PHASE_OUTPUT = B1%Q_CONDENSE * 0.001_EB

Source/init.f90

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,6 +1246,16 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_2(NM)
12461246

12471247
CALL INITIALIZE_INTERPOLATION
12481248

1249+
! If fire spread outputs requested allocate arrays
1250+
IF (STORE_FIRE_ARRIVAL) THEN
1251+
ALLOCATE(M%FIRE_ARRIVAL_TIME(1:M%N_INTERNAL_WALL_CELLS+M%N_EXTERNAL_WALL_CELLS+M%N_INTERNAL_CFACE_CELLS))
1252+
CALL ChkMemErr('INIT','FIRE_ARRIVAL_TIME',IZERO) ; M%FIRE_ARRIVAL_TIME = 1.E6_EB
1253+
ENDIF
1254+
IF (STORE_FIRE_RESIDENCE) THEN
1255+
ALLOCATE(M%FIRE_RESIDENCE_TIME(1:M%N_INTERNAL_WALL_CELLS+M%N_EXTERNAL_WALL_CELLS+M%N_INTERNAL_CFACE_CELLS))
1256+
CALL ChkMemErr('INIT','FIRE_RESIDENCE_TIME',IZERO) ; M%FIRE_RESIDENCE_TIME = 0._EB
1257+
ENDIF
1258+
12491259

12501260
CONTAINS
12511261

Source/mesh.f90

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ MODULE MESH_VARIABLES
120120
REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: TURB_WORK9,TURB_WORK10
121121
REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: CCVELDIV,CARTVELDIV
122122
REAL(EB), ALLOCATABLE, DIMENSION(:) :: WALL_WORK1,WALL_WORK2,FACE_WORK1,FACE_WORK2,FACE_WORK3
123+
REAL(EB), ALLOCATABLE, DIMENSION(:) :: FIRE_ARRIVAL_TIME,FIRE_RESIDENCE_TIME
123124
REAL(FB), ALLOCATABLE, DIMENSION(:,:,:,:) :: QQ, QQ2
124125
REAL(FB), ALLOCATABLE, DIMENSION(:,:) :: PP,PPN,BNDF_TIME_INTEGRAL
125126
INTEGER, ALLOCATABLE, DIMENSION(:,:) :: IBK
@@ -377,6 +378,8 @@ MODULE MESH_POINTERS
377378
REAL(EB), POINTER, DIMENSION(:,:,:) :: CCVELDIV,CARTVELDIV
378379

379380
REAL(EB), POINTER, DIMENSION(:) :: WALL_WORK1,WALL_WORK2,FACE_WORK1,FACE_WORK2,FACE_WORK3
381+
REAL(EB), POINTER, DIMENSION(:) :: FIRE_ARRIVAL_TIME,FIRE_RESIDENCE_TIME
382+
380383
REAL(FB), POINTER, DIMENSION(:,:,:,:) :: QQ, QQ2
381384
REAL(FB), POINTER, DIMENSION(:,:) :: PP,PPN,BNDF_TIME_INTEGRAL
382385
INTEGER, POINTER, DIMENSION(:,:) :: IBK
@@ -631,6 +634,8 @@ SUBROUTINE POINT_TO_MESH(NM)
631634
FACE_WORK1=>M%FACE_WORK1
632635
FACE_WORK2=>M%FACE_WORK2
633636
FACE_WORK3=>M%FACE_WORK3
637+
FIRE_ARRIVAL_TIME=>M%FIRE_ARRIVAL_TIME
638+
FIRE_RESIDENCE_TIME=>M%FIRE_RESIDENCE_TIME
634639
QQ=>M%QQ
635640
QQ2=>M%QQ2
636641
PP=>M%PP

Source/read.f90

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15039,6 +15039,12 @@ SUBROUTINE PROC_DEVC
1503915039
CALL SHUTDOWN(MESSAGE) ; RETURN
1504015040
ENDIF
1504115041

15042+
CASE ('FIRE ARRIVAL TIME')
15043+
STORE_FIRE_ARRIVAL = .TRUE.
15044+
15045+
CASE ('FIRE RESIDENCE TIME')
15046+
STORE_FIRE_RESIDENCE = .TRUE.
15047+
1504215048
END SELECT SPECIAL_QUANTITIES
1504315049

1504415050
IF ((DV%SPATIAL_STATISTIC/='null' .OR. DV%TEMPORAL_STATISTIC/='null') .AND. .NOT.DV%UNITS_SPECIFIED) THEN
@@ -15782,6 +15788,10 @@ SUBROUTINE READ_BNDF
1578215788
CALL CHANGE_UNITS(QUANTITY,BF%UNITS,DUMMY,TEMPORAL_STATISTIC,LU_ERR)
1578315789
ENDIF
1578415790

15791+
! Set flags for fire spread outputs
15792+
IF (TRIM(QUANTITY)=='FIRE ARRIVAL TIME') STORE_FIRE_ARRIVAL = .TRUE.
15793+
IF (TRIM(QUANTITY)=='FIRE RESIDENCE TIME') STORE_FIRE_RESIDENCE = .TRUE.
15794+
1578515795
ENDDO READ_BNDF_LOOP
1578615796
REWIND(LU_INPUT) ; INPUT_FILE_LINE_NUMBER = 0
1578715797

Source/vege.f90

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ MODULE VEGE
99
USE MEMORY_FUNCTIONS, ONLY: CHKMEMERR
1010
IMPLICIT NONE (TYPE,EXTERNAL)
1111
PRIVATE
12-
PUBLIC INITIALIZE_LEVEL_SET_FIRESPREAD_1,INITIALIZE_LEVEL_SET_FIRESPREAD_2,LEVEL_SET_FIRESPREAD
12+
PUBLIC INITIALIZE_LEVEL_SET_FIRESPREAD_1,INITIALIZE_LEVEL_SET_FIRESPREAD_2,LEVEL_SET_FIRESPREAD,UPDATE_FIRE_SPREAD_OUTPUTS
1313
INTEGER :: IZERO
1414
INTEGER :: LIMITER_LS
1515
REAL(EB) :: B_ROTH,BETA_OP_ROTH,C_ROTH,E_ROTH,T_NOW
@@ -1279,4 +1279,87 @@ REAL(EB) FUNCTION ROS_NO_WIND_NO_SLOPE(ROTHERMEL_FUEL_INDEX,SURF_INDEX)
12791279

12801280
END FUNCTION ROS_NO_WIND_NO_SLOPE
12811281

1282+
!> \brief Update quantities which are used to output metrics for quantifying fire spread
1283+
!>
1284+
!> \param T Current time (s)
1285+
!> \param DT Time step (s)
1286+
!> \param NM Mesh number
1287+
!> \details: Cycles through each solid wall cell and CFACE and populates output arrays as needed
1288+
1289+
SUBROUTINE UPDATE_FIRE_SPREAD_OUTPUTS(T,DT,NM)
1290+
1291+
INTEGER, INTENT(IN) :: NM
1292+
REAL(EB), INTENT(IN) :: T,DT
1293+
INTEGER :: ICF,IW,OUTPUT_INDEX
1294+
TYPE(WALL_TYPE), POINTER :: WC
1295+
TYPE(CFACE_TYPE), POINTER :: CFA
1296+
TYPE(SURFACE_TYPE), POINTER :: SF
1297+
TYPE(BOUNDARY_PROP1_TYPE), POINTER :: B1
1298+
TYPE(BOUNDARY_COORD_TYPE), POINTER :: BC
1299+
1300+
CALL POINT_TO_MESH(NM)
1301+
1302+
DO IW = 1,N_EXTERNAL_WALL_CELLS+N_INTERNAL_WALL_CELLS
1303+
WC => WALL(IW)
1304+
IF (WC%BOUNDARY_TYPE/=SOLID_BOUNDARY) CYCLE
1305+
BC => BOUNDARY_COORD(WC%BC_INDEX)
1306+
B1 => BOUNDARY_PROP1(WC%B1_INDEX)
1307+
SF => SURFACE(WC%SURF_INDEX)
1308+
OUTPUT_INDEX = IW
1309+
CALL COMPUTE_FIRE_SPREAD_OUTPUTS
1310+
ENDDO
1311+
1312+
DO ICF = INTERNAL_CFACE_CELLS_LB+1,INTERNAL_CFACE_CELLS_LB+N_INTERNAL_CFACE_CELLS
1313+
CFA => CFACE(ICF)
1314+
IF (CFA%BOUNDARY_TYPE/=SOLID_BOUNDARY) CYCLE
1315+
BC => BOUNDARY_COORD(CFA%BC_INDEX)
1316+
B1 => BOUNDARY_PROP1(CFA%B1_INDEX)
1317+
SF => SURFACE(CFA%SURF_INDEX)
1318+
OUTPUT_INDEX = ICF-INTERNAL_CFACE_CELLS_LB+N_EXTERNAL_WALL_CELLS+N_INTERNAL_WALL_CELLS
1319+
CALL COMPUTE_FIRE_SPREAD_OUTPUTS
1320+
ENDDO
1321+
1322+
CONTAINS
1323+
1324+
!> \brief Compute output metrics for quantifying fire spread
1325+
!>
1326+
!> For level set, fire arrival and residence time is already stored in B1%T_IGN and B1%BURN_DURATION.
1327+
!> In other cases, fire presence is detected in the cell adjacent to the solid face by evaluating
1328+
!> HRRPUV against the default smokeview threshold.
1329+
1330+
SUBROUTINE COMPUTE_FIRE_SPREAD_OUTPUTS
1331+
1332+
REAL(EB) :: HRRPUVCUT
1333+
LOGICAl :: FIRE_PRESENT
1334+
1335+
FIRE_PRESENT = .FALSE.
1336+
HRRPUVCUT = MIN(200._EB,20._EB/CHARACTERISTIC_CELL_SIZE)
1337+
IF (Q(BC%IIG,BC%JJG,BC%KKG)>HRRPUVCUT) FIRE_PRESENT = .TRUE.
1338+
1339+
IF (STORE_FIRE_ARRIVAL) THEN
1340+
IF (SF%VEG_LSET_SPREAD .AND. B1%T_IGN<9.E5_EB) THEN
1341+
IF (FIRE_ARRIVAL_TIME(OUTPUT_INDEX)>9.E5_EB) &
1342+
FIRE_ARRIVAL_TIME(OUTPUT_INDEX) = B1%T_IGN
1343+
ELSE
1344+
IF (FIRE_PRESENT .AND. FIRE_ARRIVAL_TIME(OUTPUT_INDEX)>9.E5_EB) FIRE_ARRIVAL_TIME(OUTPUT_INDEX) = T
1345+
! reset if threshold is not met for 1/100th of a second
1346+
IF (.NOT. FIRE_PRESENT .AND. ABS(T-FIRE_ARRIVAL_TIME(OUTPUT_INDEX)) < 0.01_EB) FIRE_ARRIVAL_TIME(OUTPUT_INDEX) = 1.E6_EB
1347+
ENDIF
1348+
ENDIF
1349+
1350+
IF (STORE_FIRE_RESIDENCE) THEN
1351+
IF (SF%VEG_LSET_SPREAD .AND. B1%T_IGN<9.E5_EB) THEN
1352+
IF (FIRE_RESIDENCE_TIME(OUTPUT_INDEX)<TWO_EPSILON_EB) &
1353+
FIRE_RESIDENCE_TIME(OUTPUT_INDEX) = B1%BURN_DURATION
1354+
ELSE
1355+
IF (FIRE_PRESENT) FIRE_RESIDENCE_TIME(OUTPUT_INDEX) = FIRE_RESIDENCE_TIME(OUTPUT_INDEX) + DT
1356+
! reset if threshold is not met for 1/100th of a second
1357+
IF (.NOT. FIRE_PRESENT .AND. FIRE_RESIDENCE_TIME(OUTPUT_INDEX)<0.01_EB) FIRE_RESIDENCE_TIME(OUTPUT_INDEX) = 0._EB
1358+
ENDIF
1359+
ENDIF
1360+
1361+
END SUBROUTINE COMPUTE_FIRE_SPREAD_OUTPUTS
1362+
1363+
END SUBROUTINE UPDATE_FIRE_SPREAD_OUTPUTS
1364+
12821365
END MODULE VEGE

Verification/WUI/LS_ellipse_0ms_00deg.fds

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,17 @@
2121
&VENT DB='ZMIN', SURF_ID='fuel'/
2222

2323
&SLCF AGL_SLICE=0.1, QUANTITY='LEVEL SET VALUE' /
24-
&BNDF QUANTITY='IGNITION TIME'/
25-
26-
&DEVC XYZ=0,4,0, ID='000', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
27-
&DEVC XYZ=2.8284,2.8284,0, ID='045', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
28-
&DEVC XYZ=4,0,0, ID='090', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
29-
&DEVC XYZ=2.8284,-2.8284,0, ID='135', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
30-
&DEVC XYZ=0,-4,0, ID='180', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
31-
&DEVC XYZ=-2.8284,-2.8284,0, ID='225', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
32-
&DEVC XYZ=-4,0,0, ID='270', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
33-
&DEVC XYZ=-2.8284,2.8284,0, ID='315', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
24+
&BNDF QUANTITY='FIRE ARRIVAL TIME'/
25+
&BNDF QUANTITY='FIRE RESIDENCE TIME'/
26+
27+
&DEVC XYZ=0,4,0, ID='000', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
28+
&DEVC XYZ=2.8284,2.8284,0, ID='045', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
29+
&DEVC XYZ=4,0,0, ID='090', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
30+
&DEVC XYZ=2.8284,-2.8284,0, ID='135', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
31+
&DEVC XYZ=0,-4,0, ID='180', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
32+
&DEVC XYZ=-2.8284,-2.8284,0, ID='225', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
33+
&DEVC XYZ=-4,0,0, ID='270', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
34+
&DEVC XYZ=-2.8284,2.8284,0, ID='315', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
3435

3536
&DUMP FLUSH_FILE_BUFFERS=T, DT_DEVC=125./
3637

Verification/WUI/LS_ellipse_0ms_30deg.fds

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@
2424
ZVALS=0.0,4.0825,4.0825,8.165/
2525

2626
&SLCF AGL_SLICE=0.1, QUANTITY='LEVEL SET VALUE' /
27-
&BNDF QUANTITY='IGNITION TIME'/
28-
29-
&DEVC XYZ=0,4,6, ID='000', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
30-
&DEVC XYZ=2.8284,2.8284,7, ID='045', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
31-
&DEVC XYZ=4,0,6, ID='090', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
32-
&DEVC XYZ=2.8284,-2.8284,4.2, ID='135', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
33-
&DEVC XYZ=0,-4,2.5, ID='180', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
34-
&DEVC XYZ=-2.8284,-2.8284,2, ID='225', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
35-
&DEVC XYZ=-4,0,2.5, ID='270', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
36-
&DEVC XYZ=-2.8284,2.8284,4.2, ID='315', QUANTITY='IGNITION TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
27+
&BNDF QUANTITY='FIRE ARRIVAL TIME'/
28+
&BNDF QUANTITY='FIRE RESIDENCE TIME'/
29+
30+
&DEVC XYZ=0,4,6, ID='000', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
31+
&DEVC XYZ=2.8284,2.8284,7, ID='045', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
32+
&DEVC XYZ=4,0,6, ID='090', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
33+
&DEVC XYZ=2.8284,-2.8284,4.2, ID='135', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
34+
&DEVC XYZ=0,-4,2.5, ID='180', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
35+
&DEVC XYZ=-2.8284,-2.8284,2, ID='225', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
36+
&DEVC XYZ=-4,0,2.5, ID='270', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
37+
&DEVC XYZ=-2.8284,2.8284,4.2, ID='315', QUANTITY='FIRE ARRIVAL TIME', TEMPORAL_STATISTIC='INSTANT VALUE', IOR=3/
3738

3839
&DUMP FLUSH_FILE_BUFFERS=T, DT_DEVC=125./
3940

0 commit comments

Comments
 (0)