@@ -41,6 +41,7 @@ SUBROUTINE COMBUSTION_LOAD_BALANCED(T,DT)
4141
4242USE SOOT_ROUTINES, ONLY: SOOT_SURFACE_OXIDATION
4343USE COMP_FUNCTIONS, ONLY: CURRENT_TIME
44+ USE CHEMCONS, ONLY: CVODE_WARNING_CELLS,INIT_CVODE_WARN_MESSAGES
4445REAL (EB), INTENT (IN ) :: T,DT
4546INTEGER :: NM,ICC,JCC
4647REAL (EB) :: TNOW
@@ -55,12 +56,14 @@ SUBROUTINE COMBUSTION_LOAD_BALANCED(T,DT)
5556 COMBUSTION_INIT = .TRUE.
5657 NVAR_TO_SEND = N_TRACKED_SPECIES + 7 ! NS, TEMP, RHO, PRES, MU, DELTA, VOL, IGN_ZN
5758 NVAR_TO_RECEIVE = N_TRACKED_SPECIES + 4 ! NS, Q_OUT, MIX_TIME_OUT, CHI_R_OUT, CHEM_SUBIT_TMP_OUT
59+ CALL INIT_CVODE_WARN_MESSAGES()
5860ENDIF
5961
6062DO NM= LOWER_MESH_INDEX,UPPER_MESH_INDEX
6163 CALL POINT_TO_MESH(NM)
6264 Q = 0._EB
6365 CHI_R = 0._EB
66+ CVODE_WARNING_CELLS = 0
6467 IF (CC_IBM) THEN
6568 DO ICC= 1 ,MESHES(NM)% N_CUTCELL_MESH
6669 DO JCC= 1 ,CUT_CELL(ICC)% NCELL
@@ -109,6 +112,7 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT)
109112REAL (EB) :: MIX_TIME_OUT, Q_OUT, CHI_R_OUT, MYTEMP, MYRHO, MYMU, DELTA, VOL, TNOW2
110113INTEGER :: IGN_ZN
111114
115+
112116Q_EXISTS = .FALSE.
113117
114118!- -----
@@ -329,6 +333,13 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT)
329333 ENDDO
330334ENDIF
331335
336+ ! Output accumulated CVODE warnings (instead of cell by cell) in verbose mode
337+ #ifdef WITH_SUNDIALS
338+ IF (COMBUSTION_ODE_SOLVER == CVODE_SOLVER .AND. VERBOSE) THEN
339+ CALL DUMP_CVODE_WARNING_SUMMARY(NCHEM_ACTIVE_CELLS_AND_CC)
340+ ENDIF
341+ #endif
342+
332343END SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED
333344
334345
@@ -1269,6 +1280,60 @@ SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD)
12691280
12701281END SUBROUTINE CALC_AFT_REAC_AND_PROD
12711282
1283+ ! > \brief Dump CVODE warning summary
1284+ SUBROUTINE DUMP_CVODE_WARNING_SUMMARY (NCHEM_ACTIVE_CELLS_AND_CC )
1285+ USE CHEMCONS, ONLY: CVODE_WARNING_CELLS,CVODE_ERR_CODE_MIN,CVODE_ERR_CODE_MAX,CVODE_WARN_MESSAGES
1286+
1287+ INTEGER , INTENT (IN ) :: NCHEM_ACTIVE_CELLS_AND_CC
1288+ INTEGER :: NCHEM_ACTIVE_CELLS_AND_CC_GLOBAL,IERR, CVODE_ERR_CODE, TOT_WARN_CELLS
1289+ REAL (EB) :: PCNT
1290+ CHARACTER (LEN= 16 ) :: CELL_STR, PCNT_STR
1291+ CHARACTER (LEN= 40 ) :: CELL_INFO
1292+
1293+ IF (N_MPI_PROCESSES > 1 ) THEN
1294+ CALL MPI_ALLREDUCE(MPI_IN_PLACE, CVODE_WARNING_CELLS, SIZE (CVODE_WARNING_CELLS), &
1295+ MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD, IERR)
1296+
1297+ CALL MPI_ALLREDUCE(NCHEM_ACTIVE_CELLS_AND_CC, NCHEM_ACTIVE_CELLS_AND_CC_GLOBAL, &
1298+ 1 , MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD, IERR)
1299+ ELSE
1300+ NCHEM_ACTIVE_CELLS_AND_CC_GLOBAL = NCHEM_ACTIVE_CELLS_AND_CC
1301+ END IF
1302+ TOT_WARN_CELLS = SUM (CVODE_WARNING_CELLS)
1303+
1304+ IF (TOT_WARN_CELLS > 0 .AND. NCHEM_ACTIVE_CELLS_AND_CC_GLOBAL > 0 .AND. MY_RANK == 0 ) THEN
1305+
1306+ WRITE (LU_ERR, ' (A)' ) ' --------------- CVODE Warning Summary ----------------'
1307+ WRITE (LU_ERR, ' (A)' ) ' Code Cells (% Chem) Message'
1308+
1309+ DO CVODE_ERR_CODE = CVODE_ERR_CODE_MIN, CVODE_ERR_CODE_MAX
1310+ IF (CVODE_WARNING_CELLS(CVODE_ERR_CODE) > 0 ) THEN
1311+
1312+ PCNT = REAL (CVODE_WARNING_CELLS(CVODE_ERR_CODE)) / &
1313+ REAL (NCHEM_ACTIVE_CELLS_AND_CC_GLOBAL) * 100.0_EB
1314+
1315+ ! Convert to strings and left-align
1316+ WRITE (CELL_STR, ' (I0)' ) CVODE_WARNING_CELLS(CVODE_ERR_CODE)
1317+ WRITE (PCNT_STR, ' (F6.2)' ) PCNT
1318+ CELL_STR = ADJUSTL (CELL_STR)
1319+ PCNT_STR = ADJUSTL (PCNT_STR)
1320+
1321+ ! Combine count + percentage into one left-aligned string
1322+ WRITE (CELL_INFO, ' (A, " (", A, " %)")' ) TRIM (CELL_STR), TRIM (PCNT_STR)
1323+ CELL_INFO = ADJUSTL (CELL_INFO)
1324+
1325+ ! Print one line of summary
1326+ WRITE (LU_ERR, ' (1X, I4, 5X, A, 5X, A)' ) CVODE_ERR_CODE, &
1327+ TRIM (CELL_INFO), TRIM (CVODE_WARN_MESSAGES(CVODE_ERR_CODE))
1328+ END IF
1329+ END DO
1330+
1331+ WRITE (LU_ERR, ' (A)' ) ' ------------------------------------------------------'
1332+
1333+ END IF
1334+
1335+ END SUBROUTINE DUMP_CVODE_WARNING_SUMMARY
1336+
12721337#endif
12731338
12741339SUBROUTINE CHECK_AUTO_IGNITION (EXTINCT ,TMP_IN ,AIT ,IIC ,JJC ,KKC ,REAC_INDEX )
0 commit comments