@@ -156,7 +156,7 @@ SUBROUTINE INITIALIZE_LEVEL_SET_FIRESPREAD_2(NM,MODE)
156156
157157INTEGER , INTENT (IN ) :: NM,MODE
158158INTEGER :: I,IM1,IM2,IIG,IP1,IP2,J,JJG,JM1,JP1
159- REAL (EB) :: DZT_DUM,G_EAST,G_WEST,G_SOUTH,G_NORTH
159+ REAL (EB) :: DZT_DUM,DZTDX_DUM,DZTDY_DUM, G_EAST,G_WEST,G_SOUTH,G_NORTH
160160
161161T_NOW = CURRENT_TIME()
162162
@@ -218,7 +218,6 @@ SUBROUTINE INITIALIZE_LEVEL_SET_FIRESPREAD_2(NM,MODE)
218218! Rothermel 'Phi' factors for effects of Wind and Slope on ROS
219219
220220ALLOCATE (M% PHI_WS(IBAR,JBAR)) ; CALL ChkMemErr(' VEGE:LEVEL SET' ,' PHI_W' ,IZERO) ; PHI_WS = > M% PHI_WS ; PHI_WS = 0.0_EB
221- ALLOCATE (M% PHI_S(IBAR,JBAR)) ; CALL ChkMemErr(' VEGE:LEVEL SET' ,' PHI_S' ,IZERO) ; PHI_S = > M% PHI_S
222221ALLOCATE (M% PHI_S_X(IBAR,JBAR)) ; CALL ChkMemErr(' VEGE:LEVEL SET' ,' PHI_S_X' ,IZERO) ; PHI_S_X = > M% PHI_S_X
223222ALLOCATE (M% PHI_S_Y(IBAR,JBAR)) ; CALL ChkMemErr(' VEGE:LEVEL SET' ,' PHI_S_Y' ,IZERO) ; PHI_S_Y = > M% PHI_S_Y
224223
@@ -296,16 +295,19 @@ SUBROUTINE INITIALIZE_LEVEL_SET_FIRESPREAD_2(NM,MODE)
296295 E_ROTH = 0.715_EB * EXP (- 0.01094_EB * SF% VEG_LSET_SIGMA)
297296 BETA_OP_ROTH = 0.20395_EB * (SF% VEG_LSET_SIGMA** (- 0.8189_EB ))! Optimum packing ratio
298297
299- ! Limit effect to slope lte 80 degrees. Phi_s_x,y are slope factors (Rothermel model)
300-
301- DZT_DUM = MIN (5.67_EB ,ABS (DZTDX(IIG,JJG))) ! 5.67 ~ tan 80 deg
302- PHI_S_X(IIG,JJG) = 5.275_EB * ((SF% VEG_LSET_BETA)** (- 0.3_EB )) * DZT_DUM** 2
303- PHI_S_X(IIG,JJG) = SIGN (PHI_S_X(IIG,JJG),DZTDX(IIG,JJG))
304- DZT_DUM = MIN (1.73_EB ,ABS (DZTDY(IIG,JJG))) ! 1.73 ~ tan 60 deg
305- PHI_S_Y(IIG,JJG) = 5.275_EB * ((SF% VEG_LSET_BETA)** (- 0.3_EB )) * DZT_DUM** 2
306- PHI_S_Y(IIG,JJG) = SIGN (PHI_S_Y(IIG,JJG),DZTDY(IIG,JJG))
298+ ! Slope vector
299+ DZTDX_DUM = DZTDX(IIG,JJG)
300+ DZTDY_DUM = DZTDY(IIG,JJG)
301+ DZT_DUM = SQRT (DZTDX_DUM** 2._EB + DZTDY_DUM** 2._EB )
302+ ! Limit effect to slope lte 80 degrees
303+ IF (DZT_DUM> 5.67_EB ) THEN
304+ DZTDX_DUM = DZTDX_DUM * 5.67_EB / DZT_DUM
305+ DZTDY_DUM = DZTDY_DUM * 5.67_EB / DZT_DUM
306+ DZT_DUM = 5.67_EB
307+ ENDIF
307308
308- PHI_S(IIG,JJG) = SQRT (PHI_S_X(IIG,JJG)** 2 + PHI_S_Y(IIG,JJG)** 2 )
309+ PHI_S_X(IIG,JJG) = 5.275_EB * ((SF% VEG_LSET_BETA)** (- 0.3_EB )) * DZTDX_DUM * DZT_DUM
310+ PHI_S_Y(IIG,JJG) = 5.275_EB * ((SF% VEG_LSET_BETA)** (- 0.3_EB )) * DZTDY_DUM * DZT_DUM
309311
310312 ENDIF IF_ELLIPSE
311313
@@ -332,8 +334,8 @@ SUBROUTINE LEVEL_SET_FIRESPREAD(T,DT,NM)
332334REAL (EB), INTENT (IN ) :: T,DT
333335INTEGER :: IIG,IW,JJG,IC,OUTPUT_INDEX
334336INTEGER :: KDUM,KWIND,ICF,IKT
335- REAL (EB) :: UMF_TMP,PHX,PHY,MAG_PHI,PHI_W_X,PHI_W_Y,UMF_X,UMF_Y,UMAG,ROS_MAG,UMF_MAG,WIND_FACTOR ,&
336- SIN_THETA,COS_THETA,THETA,ZWIND(2 ),U_Z(2 ),V_Z(2 ),REF_WIND_HEIGHT
337+ REAL (EB) :: UMF_TMP,PHX,PHY,MAG_PHI,PHI_S, PHI_W_X,PHI_W_Y,UMF_X,UMF_Y,UMAG,ROS_MAG,UMF_MAG,&
338+ WIND_FACTOR, SIN_THETA,COS_THETA,THETA,ZWIND(2 ),U_Z(2 ),V_Z(2 ),REF_WIND_HEIGHT
337339
338340T_NOW = CURRENT_TIME()
339341
@@ -464,7 +466,9 @@ SUBROUTINE LEVEL_SET_FIRESPREAD(T,DT,NM)
464466
465467 ! Include Rothermel slope factor
466468
467- IF (PHI_S(IIG,JJG) > 0.0_EB ) THEN
469+ PHI_S = SQRT (PHI_S_X(IIG,JJG)+ PHI_S_Y(IIG,JJG))
470+
471+ IF (PHI_S > 0.0_EB ) THEN
468472
469473 PHX = PHI_W_X + PHI_S_X(IIG,JJG)
470474 PHY = PHI_W_Y + PHI_S_Y(IIG,JJG)
@@ -487,13 +491,11 @@ SUBROUTINE LEVEL_SET_FIRESPREAD(T,DT,NM)
487491 ! 0.3048 ~= 1/3.281
488492 ! if phi_s < 0 then a complex value (NaN) results. Using abs(phi_s) and sign function to correct.
489493
490- UMF_TMP = (((ABS (PHI_S_X(IIG,JJG)) * (SF% VEG_LSET_BETA / BETA_OP_ROTH)** E_ROTH)/ C_ROTH)** (1 / B_ROTH))* 0.3048
491- UMF_TMP = SIGN (UMF_TMP,PHI_S_X(IIG,JJG))
492- UMF_X = UMF_X + UMF_TMP
494+ UMF_TMP = &
495+ 0.3048_EB / PHI_S* (((SF% VEG_LSET_BETA / BETA_OP_ROTH)** E_ROTH)* PHI_S/ C_ROTH)** (1._EB / B_ROTH)
493496
494- UMF_TMP = (((ABS (PHI_S_Y(IIG,JJG)) * (SF% VEG_LSET_BETA / BETA_OP_ROTH)** E_ROTH)/ C_ROTH)** (1 / B_ROTH))* 0.3048
495- UMF_TMP = SIGN (UMF_TMP,PHI_S_Y(IIG,JJG))
496- UMF_Y = UMF_Y + UMF_TMP
497+ UMF_X = UMF_X + UMF_TMP* PHI_S_X(IIG,JJG)
498+ UMF_Y = UMF_Y + UMF_TMP* PHI_S_Y(IIG,JJG)
497499
498500 ELSE
499501
0 commit comments