@@ -971,6 +971,7 @@ SUBROUTINE COMBUSTION_MODEL(T,DT,ZZ_GET,Q_OUT,MIX_TIME_OUT,CHI_R_OUT,CHEM_SUBIT_
971971 ZETA = 1._EB + Q_ALLOWED* DT/ (RHO_IN * (SUM (SPECIES_MIXTURE% H_F* (ZZ_MIXED- ZZ_0))) + TWO_EPSILON_EB)
972972 ZETA = MAX (0._EB ,MIN (1.0_EB ,ZETA))
973973 Q_CAPPED_CELLS = Q_CAPPED_CELLS + 1
974+ WRITE (LU_ERR,* )" Capped cell."
974975 ENDIF
975976 ENDIF
976977 ENDIF
@@ -1013,7 +1014,7 @@ SUBROUTINE COMBUSTION_MODEL(T,DT,ZZ_GET,Q_OUT,MIX_TIME_OUT,CHI_R_OUT,CHEM_SUBIT_
10131014
10141015
10151016! Compute heat release rate
1016-
1017+ CALL PERFORM_ELEMENTAL_BALANCE(ZZ_GET,ZZ_0)
10171018Q_OUT = - RHO_IN* SUM (SPECIES_MIXTURE% H_F* (ZZ_GET- ZZ_0))/ DT ! FDS Tech Guide (5.47)
10181019
10191020! Extinction model
@@ -1064,6 +1065,113 @@ SUBROUTINE COMBUSTION_MODEL(T,DT,ZZ_GET,Q_OUT,MIX_TIME_OUT,CHI_R_OUT,CHEM_SUBIT_
10641065
10651066END SUBROUTINE COMBUSTION_MODEL
10661067
1068+ SUBROUTINE PERFORM_ELEMENTAL_BALANCE (ZZ_GET , ZZ_0 )
1069+ USE PROPERTY_DATA
1070+ REAL (EB), INTENT (IN ) :: ZZ_GET(N_TRACKED_SPECIES),ZZ_0(N_TRACKED_SPECIES)
1071+
1072+ INTEGER :: NE, NS
1073+ INTEGER :: N_ELEMENTS
1074+ REAL (EB), ALLOCATABLE :: ZZ_ELEM_GET(:), ZZ_ELEM_0(:)
1075+ REAL (EB) :: DIFF
1076+ LOGICAL :: IMBALANCE_FOUND
1077+
1078+ !- ------------------------------
1079+ ! Setup
1080+ !- ------------------------------
1081+ N_ELEMENTS = 118
1082+
1083+ ALLOCATE (ZZ_ELEM_GET(N_ELEMENTS))
1084+ ALLOCATE (ZZ_ELEM_0(N_ELEMENTS))
1085+
1086+ ZZ_ELEM_GET = 0.0_EB
1087+ ZZ_ELEM_0 = 0.0_EB
1088+ IMBALANCE_FOUND = .FALSE.
1089+
1090+ !- ------------------------------
1091+ ! Compute elemental mass fractions
1092+ !- ------------------------------
1093+ DO NS = 1 , N_TRACKED_SPECIES
1094+ DO NE = 1 , N_ELEMENTS
1095+
1096+ ZZ_ELEM_GET(NE) = ZZ_ELEM_GET(NE) + &
1097+ ZZ_GET(NS) * SPECIES_MIXTURE(NS)% ATOMS(NE) * ELEMENT(NE)% MASS / &
1098+ SPECIES_MIXTURE(NS)% MW
1099+
1100+ ZZ_ELEM_0(NE) = ZZ_ELEM_0(NE) + &
1101+ ZZ_0(NS) * SPECIES_MIXTURE(NS)% ATOMS(NE) * ELEMENT(NE)% MASS / &
1102+ SPECIES_MIXTURE(NS)% MW
1103+
1104+ END DO
1105+ END DO
1106+
1107+ !- ------------------------------
1108+ ! Compare elemental balances
1109+ !- ------------------------------
1110+ DO NE = 1 , N_ELEMENTS
1111+
1112+ IF (ZZ_ELEM_GET(NE) > 0.0_EB .OR. ZZ_ELEM_0(NE) > 0.0_EB ) THEN
1113+
1114+ DIFF = ABS (ZZ_ELEM_GET(NE) - ZZ_ELEM_0(NE))
1115+
1116+ IF (DIFF > 1.0E-4_EB ) THEN
1117+ IMBALANCE_FOUND = .TRUE.
1118+ ! WRITE(*,'(A,I3,3E14.6)') 'Imbalance in element ', NE, &
1119+ ! ZZ_ELEM_GET(NE), ZZ_ELEM_0(NE), DIFF
1120+ END IF
1121+
1122+ END IF
1123+
1124+ END DO
1125+
1126+ !- ------------------------------
1127+ ! Optional summary message
1128+ !- ------------------------------
1129+ IF (IMBALANCE_FOUND) THEN
1130+
1131+ WRITE (LU_ERR,* ) ' '
1132+ WRITE (LU_ERR,* ) ' *** Elemental conservation violated ***'
1133+ WRITE (LU_ERR,* ) ' '
1134+
1135+ !- --------------------------------------
1136+ ! Elemental mass fractions
1137+ !- --------------------------------------
1138+ WRITE (LU_ERR,' (A)' ) ' Elemental mass fractions (GET vs 0):'
1139+ WRITE (LU_ERR,' (A)' ) ' -------------------------------------'
1140+
1141+ DO NE = 1 , N_ELEMENTS
1142+ IF (ZZ_ELEM_GET(NE) > 0.0_EB .OR. ZZ_ELEM_0(NE) > 0.0_EB ) THEN
1143+ WRITE (LU_ERR,' (A4,3E16.8)' ) TRIM (ELEMENT(NE)% ABBREVIATION), &
1144+ ZZ_ELEM_GET(NE), ZZ_ELEM_0(NE), &
1145+ ZZ_ELEM_GET(NE) - ZZ_ELEM_0(NE)
1146+ END IF
1147+ END DO
1148+
1149+ !- --------------------------------------
1150+ ! Species comparison
1151+ !- --------------------------------------
1152+ WRITE (LU_ERR,* ) ' '
1153+ WRITE (LU_ERR,' (A)' ) ' Species with differences (ZZ_GET vs ZZ_0):'
1154+ WRITE (LU_ERR,' (A)' ) ' -------------------------------------------'
1155+
1156+ DO NS = 1 , N_TRACKED_SPECIES
1157+ IF (ABS (ZZ_GET(NS) - ZZ_0(NS)) > 1.0E-8_EB ) THEN
1158+ WRITE (LU_ERR,' (A20,3E16.8)' ) TRIM (SPECIES_MIXTURE(NS)% ID), &
1159+ ZZ_GET(NS), ZZ_0(NS), ZZ_GET(NS) - ZZ_0(NS)
1160+ END IF
1161+ END DO
1162+
1163+ !- --------------------------------------
1164+ ! Totals
1165+ !- --------------------------------------
1166+ WRITE (LU_ERR,* ) ' '
1167+ WRITE (LU_ERR,' (A,2E16.8)' ) ' Sum ZZ_GET, ZZ_0 = ' , SUM (ZZ_GET), SUM (ZZ_0)
1168+
1169+ END IF
1170+
1171+ DEALLOCATE (ZZ_ELEM_GET, ZZ_ELEM_0)
1172+
1173+ END SUBROUTINE PERFORM_ELEMENTAL_BALANCE
1174+
10671175! > \brief call cvode_interface after converting mass fraction to molar concentration.
10681176! > \param ZZ species mass fraction array
10691177! > \param TMP_IN is the temperature
0 commit comments