Skip to content

Commit bc530c4

Browse files
authored
Merge pull request #14723 from ericvmueller/master
FDS Source: improve HRR curves for LEVEL_SET_MODE=4
2 parents 01dd888 + 0d0351f commit bc530c4

File tree

4 files changed

+32
-9
lines changed

4 files changed

+32
-9
lines changed

Source/func.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4368,6 +4368,7 @@ SUBROUTINE PACK_BOUNDARY_PROP2(NM,IC,RC,OS,B2_INDEX,UNPACK_IT,COUNT_ONLY)
43684368
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B2%Y_PLUS,UNPACK_IT)
43694369
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B2%Z_STAR,UNPACK_IT)
43704370
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B2%PHI_LS,UNPACK_IT)
4371+
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B2%TAU_LS,UNPACK_IT)
43714372
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B2%WORK1,UNPACK_IT)
43724373
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B2%WORK2,UNPACK_IT)
43734374
RC=RC+1 ; IF (.NOT.COUNT_ONLY) CALL EQUATE(OS%REALS(RC),B2%WORK3,UNPACK_IT)

Source/type.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ MODULE TYPES
351351
REAL(EB) :: Y_PLUS=1._EB !< Dimensionless boundary layer thickness unit
352352
REAL(EB) :: Z_STAR=1._EB !< Dimensionless boundary layer unit
353353
REAL(EB) :: PHI_LS=-1._EB !< Level Set value for output only
354+
REAL(EB) :: TAU_LS=-1._EB !< Level Set HRR ramp characteristic time
354355
REAL(EB) :: WORK1=0._EB !< Work array
355356
REAL(EB) :: WORK2=0._EB !< Work array
356357
REAL(EB) :: WORK3=0._EB !< Work array

Source/vege.f90

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -555,18 +555,18 @@ SUBROUTINE LEVEL_SET_FIRESPREAD(T,DT,NM)
555555
WC => WALL(IW)
556556
B1 => BOUNDARY_PROP1(WC%B1_INDEX)
557557
OUTPUT_INDEX = IW
558-
IF (PHI_LS(IIG,JJG)>=0._EB .AND. B1%T_IGN>9.E5_EB) CALL IGNITE_GRID_CELL
559558
B2 => BOUNDARY_PROP2(WC%B2_INDEX)
560559
B2%PHI_LS = PHI_LS(IIG,JJG)
560+
IF (PHI_LS(IIG,JJG)>=0._EB .AND. B1%T_IGN>9.E5_EB) CALL IGNITE_GRID_CELL
561561
ELSE
562562
DO IW=1,CUT_FACE(ICF)%NFACE ! All CC_INBOUNDARY CFACES on this cell.
563563
CFA => CFACE(CUT_FACE(ICF)%CFACE_INDEX(IW))
564564
B1 => BOUNDARY_PROP1(CFA%B1_INDEX)
565565
OUTPUT_INDEX = CUT_FACE(ICF)%CFACE_INDEX(IW) - &
566566
INTERNAL_CFACE_CELLS_LB+N_EXTERNAL_WALL_CELLS+N_INTERNAL_WALL_CELLS
567-
IF (PHI_LS(IIG,JJG)>=0._EB .AND. B1%T_IGN>9.E5_EB) CALL IGNITE_GRID_CELL
568567
B2 => BOUNDARY_PROP2(CFA%B2_INDEX)
569568
B2%PHI_LS = PHI_LS(IIG,JJG)
569+
IF (PHI_LS(IIG,JJG)>=0._EB .AND. B1%T_IGN>9.E5_EB) CALL IGNITE_GRID_CELL
570570
ENDDO
571571
ENDIF
572572
ENDDO
@@ -583,9 +583,9 @@ SUBROUTINE LEVEL_SET_FIRESPREAD(T,DT,NM)
583583
WC => WALL(IW)
584584
B1 => BOUNDARY_PROP1(WC%B1_INDEX)
585585
OUTPUT_INDEX = IW
586-
IF (PHI_LS(IIG,JJG)>=0._EB .AND. B1%T_IGN>9.E5_EB) CALL IGNITE_GRID_CELL
587586
B2 => BOUNDARY_PROP2(WC%B2_INDEX)
588587
B2%PHI_LS = PHI_LS(IIG,JJG)
588+
IF (PHI_LS(IIG,JJG)>=0._EB .AND. B1%T_IGN>9.E5_EB) CALL IGNITE_GRID_CELL
589589
ENDDO
590590
ENDDO
591591
ENDIF
@@ -600,10 +600,10 @@ SUBROUTINE LEVEL_SET_FIRESPREAD(T,DT,NM)
600600

601601
SUBROUTINE IGNITE_GRID_CELL
602602

603-
REAL(EB) :: CROSSING_DISTANCE
603+
REAL(EB) :: CROSSING_DISTANCE,FIRE_DEPTH,TAU_2
604604

605605
B1%T_IGN = T
606-
ROS_MAG = MAX(0.01_EB,SQRT(SR_X_LS(IIG,JJG)**2 + SR_Y_LS(IIG,JJG)**2)) ! Rate Of Spread magnitude
606+
ROS_MAG = MAX(0.0001_EB,SQRT(SR_X_LS(IIG,JJG)**2 + SR_Y_LS(IIG,JJG)**2)) ! Rate Of Spread magnitude
607607
IF (ABS(SR_X_LS(IIG,JJG))<TWO_EPSILON_EB) THEN
608608
CROSSING_DISTANCE = DY(JJG)
609609
ELSEIF (ABS(SR_Y_LS(IIG,JJG))<TWO_EPSILON_EB) THEN
@@ -612,11 +612,23 @@ SUBROUTINE IGNITE_GRID_CELL
612612
CROSSING_DISTANCE = SQRT( (MIN(DX(IIG),ABS(SR_X_LS(IIG,JJG)/SR_Y_LS(IIG,JJG))*DY(JJG)))**2 + &
613613
(MIN(DY(JJG),ABS(SR_Y_LS(IIG,JJG)/SR_X_LS(IIG,JJG))*DX(IIG)))**2 )
614614
ENDIF
615-
B1%BURN_DURATION = SF%BURN_DURATION + CROSSING_DISTANCE/ROS_MAG
616-
B1%AREA_ADJUST = SF%BURN_DURATION/B1%BURN_DURATION
617-
! Adjust mass flux for TAU ramp to conserve total energy output
615+
FIRE_DEPTH = SF%BURN_DURATION*ROS_MAG
616+
IF (FIRE_DEPTH >= CROSSING_DISTANCE) THEN
617+
! tau_1
618+
B2%TAU_LS = CROSSING_DISTANCE/ROS_MAG
619+
! tau_2
620+
TAU_2 = (FIRE_DEPTH - CROSSING_DISTANCE)/ROS_MAG
621+
ELSE
622+
! tau_1
623+
B2%TAU_LS = FIRE_DEPTH/ROS_MAG
624+
! tau_2
625+
TAU_2 = (CROSSING_DISTANCE - FIRE_DEPTH)/ROS_MAG
626+
ENDIF
627+
628+
B1%BURN_DURATION = 2._EB*B2%TAU_LS + TAU_2
629+
! Adjust mass flux to conserve total energy output
618630
IF (LEVEL_SET_COUPLED_FIRE) B1%AREA_ADJUST = B1%AREA_ADJUST * &
619-
B1%BURN_DURATION/(B1%BURN_DURATION - TWTH*SF%RAMP(REACTION(1)%FUEL_SMIX_INDEX)%TAU)
631+
SF%BURN_DURATION/(B2%TAU_LS+TAU_2)
620632

621633
IF (STORE_LS_SPREAD_RATE) LS_SPREAD_RATE(OUTPUT_INDEX) = SQRT(SR_X_LS(IIG,JJG)**2 + SR_Y_LS(IIG,JJG)**2)
622634

Source/wall.f90

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,6 +1322,15 @@ SUBROUTINE CALCULATE_ZZ_F(T,DT,WALL_INDEX,CFACE_INDEX,PARTICLE_INDEX)
13221322
B1%M_DOT_G_PP_ACTUAL(N) = 0._EB
13231323
ENDIF
13241324
ENDIF
1325+
! Trapezoidal HRR curve for level set spread
1326+
ELSEIF (SF%VEG_LSET_SPREAD) THEN
1327+
IF (TSI <= B2%TAU_LS) THEN
1328+
B1%M_DOT_G_PP_ACTUAL(N) = TSI/B2%TAU_LS*SF%MASS_FLUX(N)
1329+
ELSEIF (TSI <= B1%BURN_DURATION-B2%TAU_LS) THEN
1330+
B1%M_DOT_G_PP_ACTUAL(N) = SF%MASS_FLUX(N)
1331+
ELSE
1332+
B1%M_DOT_G_PP_ACTUAL(N) = (1-(TSI-B1%BURN_DURATION+B2%TAU_LS)/B2%TAU_LS)*SF%MASS_FLUX(N)
1333+
ENDIF
13251334
ELSE
13261335
B1%M_DOT_G_PP_ACTUAL(N) = EVALUATE_RAMP(TSI,SF%RAMP(N)%INDEX,TAU=SF%RAMP(N)%TAU)*SF%MASS_FLUX(N)
13271336
ENDIF

0 commit comments

Comments
 (0)