Skip to content

Commit 8715783

Browse files
committed
FDS Source: Revert Flux MW
1 parent ff65161 commit 8715783

File tree

10 files changed

+380
-564
lines changed

10 files changed

+380
-564
lines changed

Source/cons.f90

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,6 @@ MODULE GLOBAL_CONSTANTS
278278
LOGICAL :: STORE_FIRE_RESIDENCE=.FALSE. !< Flag for tracking residence time of spreading fire front over a surface
279279
LOGICAL :: STORE_LS_SPREAD_RATE=.FALSE. !< Flag for outputting local level set spread rate magnitude
280280
LOGICAL :: TEST_NEW_CHAR_MODEL=.FALSE. !< Flag to envoke new char model
281-
LOGICAL :: FLUX_LIMITER_MW_CORRECTION=.TRUE. !< Flag for MW correction ensure consistent equation of state at face
282281

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

Source/data.f90

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,42 @@ SUBROUTINE DEFINE_OUTPUT_QUANTITIES
13601360
OUTPUT_QUANTITY(553)%UNITS = 'm/s'
13611361
OUTPUT_QUANTITY(553)%SHORT_NAME = 'V_LS'
13621362

1363+
OUTPUT_QUANTITY(560)%NAME = 'BFX'
1364+
OUTPUT_QUANTITY(560)%UNITS = ''
1365+
OUTPUT_QUANTITY(560)%SHORT_NAME = 'bfx'
1366+
OUTPUT_QUANTITY(560)%CELL_POSITION = CELL_FACE
1367+
OUTPUT_QUANTITY(560)%IOR = 1
1368+
1369+
OUTPUT_QUANTITY(561)%NAME = 'BFY'
1370+
OUTPUT_QUANTITY(561)%UNITS = ''
1371+
OUTPUT_QUANTITY(561)%SHORT_NAME = 'bfy'
1372+
OUTPUT_QUANTITY(561)%CELL_POSITION = CELL_FACE
1373+
OUTPUT_QUANTITY(561)%IOR = 2
1374+
1375+
OUTPUT_QUANTITY(562)%NAME = 'BFZ'
1376+
OUTPUT_QUANTITY(562)%UNITS = ''
1377+
OUTPUT_QUANTITY(562)%SHORT_NAME = 'bfz'
1378+
OUTPUT_QUANTITY(562)%CELL_POSITION = CELL_FACE
1379+
OUTPUT_QUANTITY(562)%IOR = 3
1380+
1381+
OUTPUT_QUANTITY(563)%NAME = 'BFX MINUS'
1382+
OUTPUT_QUANTITY(563)%UNITS = ''
1383+
OUTPUT_QUANTITY(563)%SHORT_NAME = 'bfx-'
1384+
OUTPUT_QUANTITY(563)%CELL_POSITION = CELL_FACE
1385+
OUTPUT_QUANTITY(563)%IOR = 1
1386+
1387+
OUTPUT_QUANTITY(564)%NAME = 'BFY MINUS'
1388+
OUTPUT_QUANTITY(564)%UNITS = ''
1389+
OUTPUT_QUANTITY(564)%SHORT_NAME = 'bfy-'
1390+
OUTPUT_QUANTITY(564)%CELL_POSITION = CELL_FACE
1391+
OUTPUT_QUANTITY(564)%IOR = 2
1392+
1393+
OUTPUT_QUANTITY(565)%NAME = 'BFZ MINUS'
1394+
OUTPUT_QUANTITY(565)%UNITS = ''
1395+
OUTPUT_QUANTITY(565)%SHORT_NAME = 'bfz-'
1396+
OUTPUT_QUANTITY(565)%CELL_POSITION = CELL_FACE
1397+
OUTPUT_QUANTITY(565)%IOR = 3
1398+
13631399
! Boundary Quantities (Negative indices)
13641400

13651401
OUTPUT_QUANTITY(-1)%NAME = 'RADIATIVE HEAT FLUX'

Source/divg.f90

Lines changed: 69 additions & 145 deletions
Large diffs are not rendered by default.

Source/dump.f90

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8583,7 +8583,20 @@ REAL(EB) RECURSIVE FUNCTION GAS_PHASE_OUTPUT(T,DT,NM,II,JJ,KK,IND,IND2,Y_INDEX,Z
85838583
CASE(553) ! V_LS
85848584
GAS_PHASE_OUTPUT_RES = V_LS(II,JJ)
85858585

8586-
END SELECT IND_SELECT
8586+
CASE(560) ! BFX
8587+
GAS_PHASE_OUTPUT_RES = BFX(II,JJ,KK)
8588+
CASE(561) ! BFY
8589+
GAS_PHASE_OUTPUT_RES = BFY(II,JJ,KK)
8590+
CASE(562) ! BFZ
8591+
GAS_PHASE_OUTPUT_RES = BFZ(II,JJ,KK)
8592+
CASE(563) ! BFX MINUS
8593+
GAS_PHASE_OUTPUT_RES = BFX(MAX(0,II-1),JJ,KK)
8594+
CASE(564) ! BFY MINUS
8595+
GAS_PHASE_OUTPUT_RES = BFY(II,MAX(0,JJ-1),KK)
8596+
CASE(565) ! BFZ MINUS
8597+
GAS_PHASE_OUTPUT_RES = BFZ(II,JJ,MAX(0,KK-1))
8598+
8599+
END SELECT IND_SELECT
85878600

85888601
! Fill GAS_PHASE_OUTPUT for CUT_CELLs.
85898602
! Some variables have already been filled in fire.f90

Source/func.f90

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,6 +1451,159 @@ END FUNCTION MP5
14511451
END SUBROUTINE GET_SCALAR_FACE_VALUE
14521452

14531453

1454+
SUBROUTINE GET_SCALAR_FACE_COEF(A,U,BF,I1,I2,J1,J2,K1,K2,IOR,LIMITER)
1455+
1456+
USE GLOBAL_CONSTANTS, ONLY: CENTRAL_LIMITER,GODUNOV_LIMITER,SUPERBEE_LIMITER,CHARM_LIMITER
1457+
1458+
REAL(EB), INTENT(IN) :: A(0:,0:,0:),U(-1:,-1:,-1:)
1459+
REAL(EB), INTENT(INOUT) :: BF(0:,0:,0:)
1460+
INTEGER, INTENT(IN) :: LIMITER,I1,I2,J1,J2,K1,K2,IOR
1461+
REAL(EB) :: R,B,DU_UP,DU_LOC
1462+
INTEGER :: I,J,K,IM1,JM1,KM1,IP1,JP1,KP1,IP2,JP2,KP2
1463+
1464+
SELECT CASE(LIMITER)
1465+
CASE(GODUNOV_LIMITER,CENTRAL_LIMITER)
1466+
BF=0._EB
1467+
RETURN
1468+
END SELECT
1469+
1470+
SELECT CASE(IOR)
1471+
CASE(1) ; IM1=-1 ; JM1= 0 ; KM1= 0 ; IP1=1 ; JP1=0 ; KP1=0 ; IP2=2 ; JP2=0 ; KP2=0
1472+
CASE(2) ; IM1= 0 ; JM1=-1 ; KM1= 0 ; IP1=0 ; JP1=1 ; KP1=0 ; IP2=0 ; JP2=2 ; KP2=0
1473+
CASE(3) ; IM1= 0 ; JM1= 0 ; KM1=-1 ; IP1=0 ; JP1=0 ; KP1=1 ; IP2=0 ; JP2=0 ; KP2=2
1474+
END SELECT
1475+
1476+
!$OMP PARALLEL DEFAULT(NONE) IF(I2>1) &
1477+
!$OMP& SHARED(U,A,BF,I1,I2,J1,J2,K1,K2,IP1,JP1,KP1,IM1,JM1,KM1,IP2,JP2,KP2,LIMITER) &
1478+
!$OMP& PRIVATE(I,J,K,DU_UP,DU_LOC,B,R)
1479+
1480+
SELECT CASE (LIMITER)
1481+
1482+
CASE (SUPERBEE_LIMITER)
1483+
!$OMP DO COLLAPSE(3) SCHEDULE(STATIC)
1484+
DO K=K1,K2
1485+
DO J=J1,J2
1486+
DO I=I1,I2
1487+
DU_LOC = U(I+IP1,J+JP1,K+KP1) - U(I,J,K)
1488+
IF (A(I,J,K) > 0._EB) THEN
1489+
DU_UP = U(I,J,K) - U(I+IM1,J+JM1,K+KM1)
1490+
ELSE
1491+
DU_UP = U(I+IP2,J+JP2,K+KP2) - U(I+IP1,J+JP1,K+KP1)
1492+
ENDIF
1493+
R = 0._EB ; B = 0._EB
1494+
IF (ABS(DU_LOC) > TWO_EPSILON_EB) R = DU_UP/DU_LOC
1495+
IF (R > TWO_EPSILON_EB) B = MAX(0._EB, MIN(2._EB*R,1._EB), MIN(R,2._EB))
1496+
BF(I,J,K) = MAX(0._EB, MIN(B, BF(I,J,K)))
1497+
ENDDO
1498+
ENDDO
1499+
ENDDO
1500+
!$OMP END DO
1501+
1502+
CASE (CHARM_LIMITER)
1503+
!$OMP DO COLLAPSE(3) SCHEDULE(STATIC)
1504+
DO K=K1,K2
1505+
DO J=J1,J2
1506+
DO I=I1,I2
1507+
DU_LOC = U(I+IP1,J+JP1,K+KP1) - U(I,J,K)
1508+
IF (A(I,J,K) > 0._EB) THEN
1509+
DU_UP = U(I,J,K) - U(I+IM1,J+JM1,K+KM1)
1510+
ELSE
1511+
DU_UP = U(I+IP2,J+JP2,K+KP2) - U(I+IP1,J+JP1,K+KP1)
1512+
ENDIF
1513+
R = 0._EB ; B = 0._EB
1514+
IF (ABS(DU_UP) > TWO_EPSILON_EB) R = DU_LOC/DU_UP
1515+
IF (R > TWO_EPSILON_EB) B = R*(3._EB*R+1._EB)/((R+1._EB)**2)
1516+
BF(I,J,K) = MAX(0._EB, MIN(B, BF(I,J,K)))
1517+
ENDDO
1518+
ENDDO
1519+
ENDDO
1520+
!$OMP END DO
1521+
1522+
END SELECT
1523+
!$OMP END PARALLEL
1524+
1525+
END SUBROUTINE GET_SCALAR_FACE_COEF
1526+
1527+
1528+
SUBROUTINE GET_SCALAR_FACE_VALUE_NEW(A,U,F,BF,I1,I2,J1,J2,K1,K2,IOR,LIMITER)
1529+
1530+
USE GLOBAL_CONSTANTS, ONLY: CENTRAL_LIMITER,GODUNOV_LIMITER,SUPERBEE_LIMITER,CHARM_LIMITER
1531+
1532+
REAL(EB), INTENT(IN) :: A(0:,0:,0:),U(-1:,-1:,-1:),BF(0:,0:,0:)
1533+
REAL(EB), INTENT(OUT) :: F(0:,0:,0:)
1534+
INTEGER, INTENT(IN) :: LIMITER,I1,I2,J1,J2,K1,K2,IOR
1535+
REAL(EB) :: DU_UP,DU_LOC
1536+
INTEGER :: I,J,K,IM1,JM1,KM1,IP1,JP1,KP1,IP2,JP2,KP2
1537+
1538+
SELECT CASE(IOR)
1539+
CASE(1) ; IM1=-1 ; JM1= 0 ; KM1= 0 ; IP1=1 ; JP1=0 ; KP1=0 ; IP2=2 ; JP2=0 ; KP2=0
1540+
CASE(2) ; IM1= 0 ; JM1=-1 ; KM1= 0 ; IP1=0 ; JP1=1 ; KP1=0 ; IP2=0 ; JP2=2 ; KP2=0
1541+
CASE(3) ; IM1= 0 ; JM1= 0 ; KM1=-1 ; IP1=0 ; JP1=0 ; KP1=1 ; IP2=0 ; JP2=0 ; KP2=2
1542+
END SELECT
1543+
1544+
!$OMP PARALLEL IF(I2>1)
1545+
SELECT CASE(LIMITER)
1546+
CASE(CENTRAL_LIMITER) ! central differencing
1547+
!$OMP DO SCHEDULE(STATIC)
1548+
DO K=K1,K2
1549+
DO J=J1,J2
1550+
DO I=I1,I2
1551+
F(I,J,K) = 0.5_EB*(U(I,J,K) + U(I+IP1,J+JP1,K+KP1))
1552+
ENDDO
1553+
ENDDO
1554+
ENDDO
1555+
!$OMP END DO
1556+
CASE(GODUNOV_LIMITER) ! first-order upwinding
1557+
!$OMP DO SCHEDULE(STATIC)
1558+
DO K=K1,K2
1559+
DO J=J1,J2
1560+
DO I=I1,I2
1561+
IF (A(I,J,K)>0._EB) THEN
1562+
F(I,J,K) = U(I,J,K)
1563+
ELSE
1564+
F(I,J,K) = U(I+IP1,J+JP1,K+KP1)
1565+
ENDIF
1566+
ENDDO
1567+
ENDDO
1568+
ENDDO
1569+
!$OMP END DO
1570+
CASE(SUPERBEE_LIMITER) ! SUPERBEE, Roe (1986)
1571+
!$OMP DO SCHEDULE(STATIC) PRIVATE(DU_LOC)
1572+
DO K=K1,K2
1573+
DO J=J1,J2
1574+
DO I=I1,I2
1575+
DU_LOC = U(I+IP1,J+JP1,K+KP1)-U(I,J,K)
1576+
IF (A(I,J,K)>0._EB) THEN
1577+
F(I,J,K) = U(I,J,K) + 0.5_EB*BF(I,J,K)*DU_LOC
1578+
ELSE
1579+
F(I,J,K) = U(I+IP1,J+JP1,K+KP1) - 0.5_EB*BF(I,J,K)*DU_LOC
1580+
ENDIF
1581+
ENDDO
1582+
ENDDO
1583+
ENDDO
1584+
!$OMP END DO
1585+
CASE(CHARM_LIMITER) ! CHARM
1586+
!$OMP DO SCHEDULE(STATIC) PRIVATE(DU_UP)
1587+
DO K=K1,K2
1588+
DO J=J1,J2
1589+
DO I=I1,I2
1590+
IF (A(I,J,K)>0._EB) THEN
1591+
DU_UP = U(I,J,K)-U(I+IM1,J+JM1,K+KM1)
1592+
F(I,J,K) = U(I,J,K) + 0.5_EB*BF(I,J,K)*DU_UP
1593+
ELSE
1594+
DU_UP = U(I+IP2,J+JP2,K+KP2)-U(I+IP1,J+JP1,K+KP1)
1595+
F(I,J,K) = U(I+IP1,J+JP1,K+KP1) - 0.5_EB*BF(I,J,K)*DU_UP
1596+
ENDIF
1597+
ENDDO
1598+
ENDDO
1599+
ENDDO
1600+
!$OMP END DO
1601+
END SELECT
1602+
!$OMP END PARALLEL
1603+
1604+
END SUBROUTINE GET_SCALAR_FACE_VALUE_NEW
1605+
1606+
14541607
!> \brief Random fluctuation, Theta'(t+dt) = R^2*Theta'(t) + Normal(0,sqrt(1-R^2)*SIGMA) ; R = exp(-dt/TAU)
14551608
!> \param SIGMA Standard deviation of time series
14561609
!> \param TAU Time scale or period of the time function (s)

Source/init.f90

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
499499
USE RADCONS, ONLY: UIIDIM
500500
USE CONTROL_VARIABLES
501501
USE MATH_FUNCTIONS, ONLY: EVALUATE_RAMP
502-
INTEGER :: N,I,J,K,IZERO,N_LOWER_SCALARS,NS,IW
502+
INTEGER :: N,I,J,K,IZERO,NS,IW
503503
REAL(EB), INTENT(IN) :: DT
504504
INTEGER, INTENT(IN) :: NM
505505
REAL(EB) :: MU_N,CS,DELTA
@@ -595,20 +595,6 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
595595

596596
ALLOCATE(M%RSUM(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO) ; CALL ChkMemErr('INIT','RSUM',IZERO) ; M%RSUM=RSUM0
597597

598-
! Allocate scalar face values
599-
600-
! Required for cell face density correction for multicomponent mixtures
601-
602-
IF (FLUX_LIMITER_MW_CORRECTION) THEN
603-
N_LOWER_SCALARS=0
604-
ELSE
605-
N_LOWER_SCALARS=1
606-
ENDIF
607-
608-
ALLOCATE( M%FX(0:IBP1,0:JBP1,0:KBP1,N_LOWER_SCALARS:N_TOTAL_SCALARS),STAT=IZERO); CALL ChkMemErr('INIT','FX',IZERO) ; M%FX=0._EB
609-
ALLOCATE( M%FY(0:IBP1,0:JBP1,0:KBP1,N_LOWER_SCALARS:N_TOTAL_SCALARS),STAT=IZERO); CALL ChkMemErr('INIT','FY',IZERO) ; M%FY=0._EB
610-
ALLOCATE( M%FZ(0:IBP1,0:JBP1,0:KBP1,N_LOWER_SCALARS:N_TOTAL_SCALARS),STAT=IZERO); CALL ChkMemErr('INIT','FZ',IZERO) ; M%FZ=0._EB
611-
612598
! Allocate storage for scalar total fluxes
613599

614600
IF (STORE_SPECIES_FLUX) THEN
@@ -696,9 +682,9 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
696682
ALLOCATE(M%WORK9(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO) ; CALL ChkMemErr('INIT','WORK9',IZERO)
697683

698684
ALLOCATE(M%IWORK1(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO) ; CALL ChkMemErr('INIT','IWORK1',IZERO)
699-
ALLOCATE(M%SWORK1(0:IBP1,0:JBP1,0:KBP1,N_LOWER_SCALARS:N_TOTAL_SCALARS),STAT=IZERO) ; CALL ChkMemErr('INIT','SWORK1',IZERO)
700-
ALLOCATE(M%SWORK2(0:IBP1,0:JBP1,0:KBP1,N_LOWER_SCALARS:N_TOTAL_SCALARS),STAT=IZERO) ; CALL ChkMemErr('INIT','SWORK2',IZERO)
701-
ALLOCATE(M%SWORK3(0:IBP1,0:JBP1,0:KBP1,N_LOWER_SCALARS:N_TOTAL_SCALARS),STAT=IZERO) ; CALL ChkMemErr('INIT','SWORK3',IZERO)
685+
ALLOCATE(M%SWORK1(0:IBP1,0:JBP1,0:KBP1,1:N_TOTAL_SCALARS),STAT=IZERO) ; CALL ChkMemErr('INIT','SWORK1',IZERO)
686+
ALLOCATE(M%SWORK2(0:IBP1,0:JBP1,0:KBP1,1:N_TOTAL_SCALARS),STAT=IZERO) ; CALL ChkMemErr('INIT','SWORK2',IZERO)
687+
ALLOCATE(M%SWORK3(0:IBP1,0:JBP1,0:KBP1,1:N_TOTAL_SCALARS),STAT=IZERO) ; CALL ChkMemErr('INIT','SWORK3',IZERO)
702688
ALLOCATE(M%SWORK4(0:IBP1,0:JBP1,0:KBP1,1:N_TOTAL_SCALARS),STAT=IZERO) ; CALL ChkMemErr('INIT','SWORK4',IZERO)
703689
M%IWORK1=0
704690
M%SWORK1=0._EB
@@ -833,6 +819,23 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM)
833819
M%ZZS(:,:,:,N) = INITIAL_UNMIXED_FRACTION
834820
ENDDO
835821

822+
! Allocate scalar face values
823+
824+
ALLOCATE( M%FX(0:IBP1,0:JBP1,0:KBP1,1:N_TOTAL_SCALARS),STAT=IZERO); CALL ChkMemErr('INIT','FX',IZERO) ; M%FX=0._EB
825+
ALLOCATE( M%FY(0:IBP1,0:JBP1,0:KBP1,1:N_TOTAL_SCALARS),STAT=IZERO); CALL ChkMemErr('INIT','FY',IZERO) ; M%FY=0._EB
826+
ALLOCATE( M%FZ(0:IBP1,0:JBP1,0:KBP1,1:N_TOTAL_SCALARS),STAT=IZERO); CALL ChkMemErr('INIT','FZ',IZERO) ; M%FZ=0._EB
827+
DO N=1,N_TRACKED_SPECIES
828+
M%FX(:,:,:,N)=RHOA*SPECIES_MIXTURE(N)%ZZ0
829+
M%FY(:,:,:,N)=RHOA*SPECIES_MIXTURE(N)%ZZ0
830+
M%FZ(:,:,:,N)=RHOA*SPECIES_MIXTURE(N)%ZZ0
831+
ENDDO
832+
833+
! Allocate flux limiter coefficients
834+
835+
ALLOCATE( M%BFX(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO); CALL ChkMemErr('INIT','BFX',IZERO) ; M%BFX=0._EB
836+
ALLOCATE( M%BFY(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO); CALL ChkMemErr('INIT','BFY',IZERO) ; M%BFY=0._EB
837+
ALLOCATE( M%BFZ(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO); CALL ChkMemErr('INIT','BFZ',IZERO) ; M%BFZ=0._EB
838+
836839
! Allocate and Initialize Mesh-Dependent Radiation Arrays
837840

838841
M%QR = 0._EB

0 commit comments

Comments
 (0)