Skip to content

Commit 89225f2

Browse files
committed
Merge remote-tracking branch 'firemodels/master' into FireX
2 parents 9d6a539 + cd2eaa1 commit 89225f2

4 files changed

Lines changed: 25 additions & 14 deletions

File tree

Manuals/FDS_User_Guide/FDS_User_Guide.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10444,7 +10444,7 @@ \subsection{Flame Height and Flame Tilt}
1044410444
The ``flame height,'' and to some extent the ``flame tilt,'' are common quantities used to assess the hazard from a large fire. FDS does not output these quantities directly, but there is a combination of devices and controls that yield these values. This is all best explained with an example. Suppose you are simulating a fire in a domain that is 10~m high with a grid resolution of 0.2~m. The fire is centered about the point $(x,y)=(0,0)$ at $z=0$. The following input lines compute the flame height and tilt:
1044510445
\begin{lstlisting}
1044610446
&DEVC ID='HRR', Z_ID='z', XBP=0.0,0.0,0.0,0.0,0.1,9.9, QUANTITY='HRRPUV',
10447-
SPATIAL_STATISTIC='VOLUME INTEGRAL', DX=5, DY=5, DZ=0.1, POINTS=100,
10447+
SPATIAL_STATISTIC='VOLUME INTEGRAL', DX=5, DY=5, DZ=0.1, POINTS=50,
1044810448
STATISTICS_START=10. /
1044910449
&CTRL ID='H', FUNCTION_TYPE='PERCENTILE', INPUT_ID='HRR', PERCENTILE=0.97 /
1045010450
&DEVC ID='x_max', XB=-5,5,-5,5,9.0,9.2, QUANTITY='TEMPERATURE',

Source/dump.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3629,6 +3629,7 @@ SUBROUTINE INITIALIZE_DIAGNOSTIC_FILE(DT)
36293629
WRITE(LU_OUTPUT,'(A,ES10.3)') ' Packing Ratio ', SF%VEG_LSET_BETA
36303630
WRITE(LU_OUTPUT,'(A,ES10.3)') ' Surface Area/Volume (1/m) ', SF%VEG_LSET_SIGMA*100. ! Convert from 1/cm to 1/m
36313631
WRITE(LU_OUTPUT,'(A,ES10.3)') ' Fuel Depth (m) ', SF%VEG_LSET_HT
3632+
WRITE(LU_OUTPUT,'(A,ES10.3)') ' Fuel Load (kg/m2) ', SF%VEG_LSET_SURF_LOAD
36323633
ENDIF
36333634

36343635
ENDDO SURFLOOP

Source/read.f90

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8326,15 +8326,17 @@ SUBROUTINE READ_SURF(QUICK_READ)
83268326
ENDIF
83278327

83288328
! Level set vegetation fire spread specific
8329+
! VEG_LSET_FUEL_INDEX: -1=undefined, 0=custom Rothermel from layer props, 1-13=Albini fuel models
83298330

83308331
VEG_LSET_SPREAD = .FALSE.
8331-
IF (VEG_LSET_IGNITE_TIME < 1.E6_EB .OR. VEG_LSET_FUEL_INDEX>0 .OR. VEG_LSET_ROS_00>0._EB) VEG_LSET_SPREAD = .TRUE.
8332+
! SURF_LOAD without ROS_00/index implies custom fuel (index 0)
8333+
IF (VEG_LSET_FUEL_INDEX<0 .AND. VEG_LSET_ROS_00<=0._EB .AND. VEG_LSET_SURF_LOAD>0._EB) VEG_LSET_FUEL_INDEX = 0
8334+
IF (VEG_LSET_IGNITE_TIME < 1.E6_EB .OR. VEG_LSET_FUEL_INDEX>=0 .OR. VEG_LSET_ROS_00>0._EB) VEG_LSET_SPREAD = .TRUE.
83328335
IF (VEG_LSET_SPREAD .AND. LEVEL_SET_MODE==0) THEN
83338336
WRITE(MESSAGE,'(A,A,A)') 'ERROR(305): SURF ',TRIM(ID),' indicates a level set simulation, but LEVEL_SET_MODE not set on MISC.'
83348337
CALL SHUTDOWN(MESSAGE) ; RETURN
83358338
ENDIF
8336-
IF (VEG_LSET_FUEL_INDEX>0 .AND. LEVEL_SET_COUPLED_FIRE) HRRPUA = 1._EB ! HRRPUA to be set properly later
8337-
IF (VEG_LSET_ROS_00 >0 .AND. LEVEL_SET_COUPLED_FIRE) HRRPUA = 1._EB
8339+
IF ((VEG_LSET_FUEL_INDEX>=0 .OR. VEG_LSET_ROS_00>0._EB) .AND. LEVEL_SET_COUPLED_FIRE) HRRPUA = 1._EB ! set properly later
83388340

83398341
SF%VEG_LSET_SPREAD = VEG_LSET_SPREAD
83408342
SF%VEG_LSET_ROS_00 = VEG_LSET_ROS_00 ! no-wind, no-slope RoS (m/s), Rothermel model
@@ -8376,8 +8378,8 @@ SUBROUTINE READ_SURF(QUICK_READ)
83768378
END SELECT
83778379
ENDIF
83788380

8379-
! Set defaults for custom fuel model (for indexed fuels they are either user-specified or calculated later)
8380-
IF (SF%VEG_LSET_FUEL_INDEX==0._EB) THEN
8381+
! Defaults for undefined fuel properties (set elsewhere for indexed fuels)
8382+
IF (SF%VEG_LSET_FUEL_INDEX<=0) THEN
83818383
IF (SF%VEG_LSET_SIGMA<0._EB) SF%VEG_LSET_SIGMA = 50._EB
83828384
IF (SF%VEG_LSET_HT<0._EB) SF%VEG_LSET_HT = 0.2_EB
83838385
IF (SF%VEG_LSET_SURF_LOAD<0._EB) SF%VEG_LSET_SURF_LOAD = 1.0_EB
@@ -9306,7 +9308,7 @@ SUBROUTINE SET_SURF_DEFAULTS
93069308
VEG_LSET_M100 = 0.05_EB
93079309
VEG_LSET_MLW = 0.70_EB
93089310
VEG_LSET_MLH = 0.70_EB
9309-
VEG_LSET_FUEL_INDEX = 0
9311+
VEG_LSET_FUEL_INDEX = -1 ! -1=undefined, 0=custom Rothermel, 1-13=Albini models
93109312
VEG_LSET_SURF_LOAD = -1.0_EB !kg/m^2
93119313
VEG_LSET_FIREBASE_TIME = -1.0_EB
93129314
VEG_LSET_CHAR_FRACTION = 0.20_EB

Source/vege.f90

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,18 @@ SUBROUTINE INITIALIZE_LEVEL_SET_FIRESPREAD_1(NM)
4646

4747
M => MESHES(NM)
4848

49-
! Loop through all SURFace types and find level set cases that need a calculated RoS
49+
! Loop through all SURFace types and find level set cases that need a calculated RoS.
50+
! VEG_LSET_FUEL_INDEX: -1=undefined (user ROS_00), 0=custom Rothermel, 1-13=Albini models.
5051

5152
DO SURF_INDEX=0,N_SURF
5253
SF => SURFACE(SURF_INDEX)
53-
IF (SF%VEG_LSET_SPREAD .AND. SF%VEG_LSET_FUEL_INDEX>0) THEN
54+
IF (.NOT.SF%VEG_LSET_SPREAD) CYCLE
55+
IF (SF%VEG_LSET_FUEL_INDEX>=0) THEN
5456
SF%VEG_LSET_ROS_00 = ROS_NO_WIND_NO_SLOPE(SF%VEG_LSET_FUEL_INDEX,SURF_INDEX)
55-
ENDIF
56-
IF (SF%VEG_LSET_SPREAD .AND. SF%VEG_LSET_FUEL_INDEX==0) THEN
57-
SF%BURN_DURATION = SF%VEG_LSET_FIREBASE_TIME
58-
IF (LEVEL_SET_COUPLED_FIRE) SF%MASS_FLUX(REACTION(1)%FUEL_SMIX_INDEX) = &
59-
(1._EB-SF%VEG_LSET_CHAR_FRACTION)*SF%VEG_LSET_SURF_LOAD/SF%VEG_LSET_FIREBASE_TIME
57+
ELSE
58+
SF%BURN_DURATION = SF%VEG_LSET_FIREBASE_TIME
59+
IF (LEVEL_SET_COUPLED_FIRE) SF%MASS_FLUX(REACTION(1)%FUEL_SMIX_INDEX) = &
60+
(1._EB-SF%VEG_LSET_CHAR_FRACTION)*SF%VEG_LSET_SURF_LOAD/SF%VEG_LSET_FIREBASE_TIME
6061
ENDIF
6162
ENDDO
6263

@@ -1010,6 +1011,11 @@ REAL(EB) FUNCTION ROS_NO_WIND_NO_SLOPE(ROTHERMEL_FUEL_INDEX,SURF_INDEX)
10101011
mlh = SF%VEG_LSET_MLH
10111012

10121013
SELECT CASE(ROTHERMEL_FUEL_INDEX)
1014+
CASE(0) ! Custom homogeneous fuel from SURF layer properties
1015+
w0d1=SF%VEG_LSET_SURF_LOAD ; w0d2=0._EB ; w0d3=0._EB ; w0lh=0._EB ; w0lw=0._EB
1016+
svd1=SF%VEG_LSET_SIGMA*100._EB ! stored as 1/cm; Rothermel formulas use 1/m
1017+
svd2=358._EB ; svd3=98._EB ; svlh=4921._EB ; svlw=4921._EB
1018+
mx=0.15_EB ; depth=SF%VEG_LSET_HT ; rhop=512._EB ; heat=18607._EB ; st=0.0555_EB ; se=0.01_EB
10131019
CASE(1) ! 'Short Grass'
10141020
w0d1=0.1659 ; w0d2=0. ; w0d3=0. ; w0lh=0. ; w0lw=0. ! dry mass per unit area (kg/m2)
10151021
svd1=11483. ; svd2=358. ; svd3=98. ; svlh=4921. ; svlw=4921. ! surface area to volume (1/m)
@@ -1076,6 +1082,8 @@ REAL(EB) FUNCTION ROS_NO_WIND_NO_SLOPE(ROTHERMEL_FUEL_INDEX,SURF_INDEX)
10761082
w0lh = SF%VEG_LSET_SURF_LOAD/w0*w0lh
10771083
w0lw = SF%VEG_LSET_SURF_LOAD/w0*w0lw
10781084
w0 = (w0d1 + w0d2 + w0d3 + w0lh + w0lw)
1085+
ELSE
1086+
SF%VEG_LSET_SURF_LOAD = w0
10791087
ENDIF
10801088

10811089
! Auxiliary functions

0 commit comments

Comments
 (0)