@@ -15,6 +15,7 @@ MODULE CVODE_INTERFACE
1515USE TYPES
1616USE CHEMCONS
1717USE , INTRINSIC :: ISO_C_BINDING
18+ USE FSUNDIALS_CORE_MOD
1819
1920IMPLICIT NONE
2021
@@ -44,7 +45,6 @@ MODULE CVODE_INTERFACE
4445INTEGER (C_INT) FUNCTION RHSFN(TN_C, SUNVEC_Y, SUNVEC_F, C_USER_DATA) &
4546 RESULT(IERR) BIND(C,NAME= ' RHSFN' )
4647
47- USE FSUNDIALS_NVECTOR_MOD
4848
4949! CALLING VARIABLES
5050REAL (C_DOUBLE), VALUE :: TN_C ! CURRENT TIME
@@ -268,9 +268,7 @@ INTEGER(C_INT) FUNCTION JACFN(TN_C, SUNVEC_Y, SUNVEC_F, SUNMAT_J, &
268268 C_USER_DATA, TMP1, TMP2, TMP3) &
269269 RESULT(IERR) BIND(C,NAME= ' JACFN' )
270270
271- USE FSUNDIALS_NVECTOR_MOD
272271USE FSUNMATRIX_DENSE_MOD
273- USE FSUNDIALS_MATRIX_MOD
274272
275273! CALLING VARIABLES
276274REAL (C_DOUBLE), VALUE :: TN_C ! CURRENT TIME
@@ -810,13 +808,9 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, TMP_UNMIX, PR_IN, ZETA0, TAU_MIX, CELL_
810808USE CHEMCONS, ONLY: CVODE_WARNING_CELLS,CVODE_ERR_CODE_MIN,CVODE_ERR_CODE_MAX
811809USE GLOBAL_CONSTANTS
812810USE FCVODE_MOD ! FORTRAN INTERFACE TO CVODE
813- USE FSUNDIALS_CONTEXT_MOD ! FORTRAN INTERFACE TO SUNCONTEXT
814811USE FNVECTOR_SERIAL_MOD ! FORTRAN INTERFACE TO SERIAL N_VECTOR
815812USE FSUNMATRIX_DENSE_MOD ! FORTRAN INTERFACE TO DENSE SUNMATRIX
816813USE FSUNLINSOL_DENSE_MOD ! FORTRAN INTERFACE TO DENSE SUNLINEARSOLVER
817- USE FSUNDIALS_LINEARSOLVER_MOD ! FORTRAN INTERFACE TO GENERIC SUNLINEARSOLVER
818- USE FSUNDIALS_MATRIX_MOD ! FORTRAN INTERFACE TO GENERIC SUNMATRIX
819- USE FSUNDIALS_NVECTOR_MOD ! FORTRAN INTERFACE TO GENERIC N_VECTOR
820814
821815REAL (EB), INTENT (INOUT ) :: CC(N_TRACKED_SPECIES)
822816REAL (EB), INTENT (IN ) :: ZZ_0(N_TRACKED_SPECIES),TMP_IN,TMP_UNMIX,PR_IN,ZETA0,TAU_MIX,CELL_MASS,TCUR,TEND
@@ -864,7 +858,7 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, TMP_UNMIX, PR_IN, ZETA0, TAU_MIX, CELL_
864858ATOLVEC_C(N_TRACKED_SPECIES+2 ) = 0.001_EB
865859
866860! CREATE SUNDIALS CONTEXT
867- IERR_C = FSUNCONTEXT_CREATE(C_NULL_PTR , SUNCTX)
861+ IERR_C = FSUNCONTEXT_CREATE(SUN_COMM_NULL , SUNCTX)
868862
869863! CREATE SUNDIALS N_VECTOR
870864SUNVEC_Y = > FN_VMAKE_SERIAL(NEQ, CVEC_C, SUNCTX)
@@ -943,7 +937,7 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, TMP_UNMIX, PR_IN, ZETA0, TAU_MIX, CELL_
943937ENDIF
944938
945939! SET ERROR HANDLER
946- IERR_C = FCVODESETERRHANDLERFN(CVODE_MEM , C_FUNLOC(FDS_CVODE_ERR_HANDLER), C_NULL_PTR)
940+ IERR_C = FSUNCONTEXT_PUSHERRHANDLER(SUNCTX , C_FUNLOC(FDS_CVODE_ERR_HANDLER), C_NULL_PTR)
947941IF (IERR_C /= 0 ) THEN
948942 WRITE (LU_ERR,* ) ' ERROR IN FCVODESETMAXNUMSTEPS, IERR = ' , IERR_C, ' ; HALTING'
949943 STOP 1
@@ -1069,21 +1063,25 @@ END SUBROUTINE CVODE_SERIAL
10691063! > \param FUNC_NAME The functio name where error occured send by CVODE
10701064! > \param MESSAGE The error message
10711065! > \param USER_DATA User data, not used in FDS.
1072- SUBROUTINE FDS_CVODE_ERR_HANDLER ( ERR_CODE , MOD_NAME , FUNC_NAME , MESSAGE , USER_DATA ) &
1066+ SUBROUTINE FDS_CVODE_ERR_HANDLER (LINE , FUNC_NAME , FILE_NAME , MESSAGE , ERR_CODE , USER_DATA , CTX ) &
10731067 BIND(C,NAME= ' FDS_CVODE_ERR_HANDLER' )
1074- INTEGER (C_INT), VALUE :: ERR_CODE
1075- CHARACTER (KIND= C_CHAR),DIMENSION (* ),INTENT (IN ) :: MOD_NAME
1076- CHARACTER (KIND= C_CHAR),DIMENSION (* ),INTENT (IN ) :: FUNC_NAME
1077- CHARACTER (KIND= C_CHAR),DIMENSION (* ),INTENT (IN ) :: MESSAGE
1078- TYPE (C_PTR), VALUE :: USER_DATA ! USER-DEFINED DATA
1068+
1069+ INTEGER (C_INT), VALUE :: LINE
1070+ CHARACTER (KIND= C_CHAR),DIMENSION (* ),INTENT (IN ):: FUNC_NAME
1071+ CHARACTER (KIND= C_CHAR),DIMENSION (* ),INTENT (IN ):: FILE_NAME
1072+ CHARACTER (KIND= C_CHAR),DIMENSION (* ),INTENT (IN ):: MESSAGE
1073+ INTEGER (C_INT), VALUE :: ERR_CODE
1074+ TYPE (C_PTR), VALUE :: USER_DATA
1075+ TYPE (C_PTR), VALUE :: CTX ! SUNCONTEXT POINTER
1076+
10791077CHARACTER (LEN= 200 ) :: TEMP_STRING
10801078LOGICAL :: FOUND_NULL
10811079INTEGER :: J
10821080
1083-
10841081IF (DEBUG) THEN
10851082 WRITE (LU_ERR,' (A, E18.8)' )" WARN: CVODE message at CFD time. CUR_CFD_TIME=" , CUR_CFD_TIME
10861083 WRITE (LU_ERR,* ) ' CVODE CODE : ' , ERR_CODE
1084+ WRITE (LU_ERR,* ) ' LINE NUMBER : ' , LINE
10871085
10881086 ! Print Message
10891087 FOUND_NULL = .FALSE.
@@ -1104,14 +1102,14 @@ SUBROUTINE FDS_CVODE_ERR_HANDLER( ERR_CODE, MOD_NAME, FUNC_NAME, MESSAGE, USER_D
11041102 TEMP_STRING = ' '
11051103 J = 1
11061104 DO WHILE (.NOT. FOUND_NULL)
1107- IF (MOD_NAME (J) == C_NULL_CHAR) THEN
1105+ IF (FILE_NAME (J) == C_NULL_CHAR) THEN
11081106 FOUND_NULL = .TRUE.
11091107 ELSE
1110- TEMP_STRING(J:J) = MOD_NAME (J)
1108+ TEMP_STRING(J:J) = FILE_NAME (J)
11111109 J = J + 1
11121110 END IF
11131111 END DO
1114- WRITE (LU_ERR,* ) ' MODULE : ' , TRIM (TEMP_STRING)
1112+ WRITE (LU_ERR,* ) ' FILE NAME : ' , TRIM (TEMP_STRING)
11151113
11161114 ! Print func name
11171115 FOUND_NULL = .FALSE.
@@ -1128,6 +1126,7 @@ SUBROUTINE FDS_CVODE_ERR_HANDLER( ERR_CODE, MOD_NAME, FUNC_NAME, MESSAGE, USER_D
11281126 WRITE (LU_ERR,* ) ' FUNCTION : ' , TRIM (TEMP_STRING)
11291127
11301128 IF (.NOT. C_ASSOCIATED(USER_DATA)) WRITE (LU_ERR,* )" NO USER_DATA IS PROVIDED"
1129+ IF (.NOT. C_ASSOCIATED(CTX)) WRITE (LU_ERR,* )" SUNCONTEXT IS NOT VALID"
11311130ENDIF
11321131
11331132END SUBROUTINE FDS_CVODE_ERR_HANDLER
0 commit comments