Skip to content

Commit

Permalink
Reintroduced support for DR-HOOK and Logging units
Browse files Browse the repository at this point in the history
- DR-HOOK is not needed anymore with the error handling, but still useful in some cases)
- Refactored some whitespaces in CMakfiles
  • Loading branch information
MircoValentiniECMWF authored and dsarmany committed Jan 27, 2025
1 parent 831011a commit 73a0627
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 7 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ ecbuild_add_option( FEATURE OUTPUT_MANAGER

ecbuild_add_option( FEATURE OUTPUT_MANAGER_ENCODER_REPORT
CONDITION HAVE_OUTPUT_MANAGER
DEFAULT OFF
DEFAULT OFF
DESCRIPTION "Enable generation of the encoding report" )

ecbuild_add_option( FEATURE OUTPUT_MANAGER_TOOL
Expand Down
2 changes: 0 additions & 2 deletions src/multiom/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


if ( HAVE_OUTPUT_MANAGER )

# Update on new big features
Expand Down
70 changes: 69 additions & 1 deletion src/multiom/common/general_utils_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,44 @@
#define PP_SECTION_NAME 'GENERAL_UTILS_MOD'
MODULE GENERAL_UTILS_MOD

! Symbolds imported from intrinsic modules
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: ERROR_UNIT
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: OUTPUT_UNIT

! Symbols imported from other modules within the project.
USE :: DATAKINDS_DEF_MOD, ONLY: JPIB_K

IMPLICIT NONE

!> Default visibility of the module
PRIVATE

! Whitelist of public symbols
!> Dr Hook interface for tracing forwarding
INTERFACE
SUBROUTINE DR_HOOK_DEFAULT8_IF(CDNAME,KSWITCH,PKEY)
USE :: DATAKINDS_DEF_MOD, ONLY: JPIM_K
USE :: DATAKINDS_DEF_MOD, ONLY: JPTR_K
IMPLICIT NONE
CHARACTER(LEN=*), INTENT(IN) :: CDNAME
INTEGER(KIND=JPIM_K), INTENT(IN) :: KSWITCH
REAL(KIND=JPTR_K), INTENT(INOUT) :: PKEY
END SUBROUTINE DR_HOOK_DEFAULT8_IF
END INTERFACE

!> Tracing variables
PROCEDURE(DR_HOOK_DEFAULT8_IF), POINTER :: DR_HOOK => NULL()
LOGICAL :: LHOOK_ = .FALSE.

!> Default error unit
INTEGER(KIND=JPIB_K) :: JPERR_UNIT=ERROR_UNIT
INTEGER(KIND=JPIB_K) :: JPOUT_UNIT=OUTPUT_UNIT

!> Whitelist of public symbols (Interfaces)
PUBLIC :: DR_HOOK_DEFAULT8_IF

!> Whitelist of public symbols (Procedures)
PUBLIC :: SET_CUSTOM_UNITS
PUBLIC :: SET_DR_HOOK
PUBLIC :: ENVVAR_IS_DEFINED
PUBLIC :: READ_ENVVAR
PUBLIC :: REPLACE_ENVVAR_IN_STRING
Expand All @@ -28,6 +60,42 @@ MODULE GENERAL_UTILS_MOD

CONTAINS

#define PP_PROCEDURE_TYPE 'SUBROUTINE'
#define PP_PROCEDURE_NAME 'SET_DR_HOOK'
SUBROUTINE SET_DR_HOOK( LHOOK, DR_HOOK_PROCEDURE )
IMPLICIT NONE

! Dummy arguments
LOGICAL, INTENT(IN) :: LHOOK
PROCEDURE(DR_HOOK_DEFAULT8_IF), POINTER, INTENT(IN) :: DR_HOOK_PROCEDURE

!> Set the hook
LHOOK_ = LHOOK
DR_HOOK => DR_HOOK_PROCEDURE

END SUBROUTINE SET_DR_HOOK
#undef PP_PROCEDURE_NAME
#undef PP_PROCEDURE_TYPE

#define PP_PROCEDURE_TYPE 'SUBROUTINE'
#define PP_PROCEDURE_NAME 'SET_CUSTOM_UNITS'
SUBROUTINE SET_CUSTOM_UNITS( CUSTOM_OUTPUT_UNIT, CUSTOM_ERROR_UNIT )

! Symbols imported from other modules within the project.
USE :: DATAKINDS_DEF_MOD, ONLY: JPIM_K

IMPLICIT NONE

! Dummy arguments
INTEGER(KIND=JPIM_K), INTENT(IN) :: CUSTOM_OUTPUT_UNIT
INTEGER(KIND=JPIM_K), INTENT(IN) :: CUSTOM_ERROR_UNIT

JPERR_UNIT = CUSTOM_ERROR_UNIT
JPOUT_UNIT = CUSTOM_OUTPUT_UNIT

END SUBROUTINE SET_CUSTOM_UNITS
#undef PP_PROCEDURE_NAME
#undef PP_PROCEDURE_TYPE

#define PP_PROCEDURE_TYPE 'FUNCTION'
#define PP_PROCEDURE_NAME 'NEED_FIT_SPECTRUM'
Expand Down
43 changes: 40 additions & 3 deletions src/multiom/hooks/debug/debug_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,10 @@ MODULE DEBUG_MOD
!> TODO: Add more options to add messages to the frame (i.e. int message, float messge, etc.)

!> Print all error frames and their messages
PROCEDURE, PUBLIC, PASS, NON_OVERRIDABLE :: PRINT_ERROR_STACK => DEBUG_PRINT_ERROR_STACK
PROCEDURE, PUBLIC, PASS, NON_OVERRIDABLE :: PRINT_ERROR_STACK_I64 => DEBUG_PRINT_ERROR_STACK_I64
PROCEDURE, PUBLIC, PASS, NON_OVERRIDABLE :: PRINT_ERROR_STACK_I32 => DEBUG_PRINT_ERROR_STACK_I32

GENERIC, PUBLIC :: PRINT_ERROR_STACK => PRINT_ERROR_STACK_I64, PRINT_ERROR_STACK_I32

END TYPE

Expand Down Expand Up @@ -360,7 +363,7 @@ END SUBROUTINE DEBUG_PUSH_ERROR_MSG
!> @param [in] THIS The `DEBUG_T` object containing the error stack to be printed.
!> @param [in] UNIT The output unit where the error stack will be printed.
!> This can be a file unit or the standard output.
SUBROUTINE DEBUG_PRINT_ERROR_STACK( THIS, UNIT )
SUBROUTINE DEBUG_PRINT_ERROR_STACK_I64( THIS, UNIT )

! Symbols imported from other modules within the project.
USE :: DATAKINDS_DEF_MOD, ONLY: JPIB_K
Expand Down Expand Up @@ -506,6 +509,40 @@ SUBROUTINE DEBUG_PRINT_ERROR_STACK( THIS, UNIT )
!> Exit point
RETURN

END SUBROUTINE DEBUG_PRINT_ERROR_STACK
END SUBROUTINE DEBUG_PRINT_ERROR_STACK_I64

!>
!> @brief Prints all error frames and their associated messages in the `DEBUG_T` structure.
!>
!> This subroutine traverses the error stack in the `DEBUG_T` object and prints
!> each error frame along with its corresponding error messages to the specified
!> output unit. This is useful for debugging purposes, as it provides a complete
!> overview of all recorded errors.
!>
!> @param [in] THIS The `DEBUG_T` object containing the error stack to be printed.
!> @param [in] UNIT The output unit where the error stack will be printed.
!> This can be a file unit or the standard output.
SUBROUTINE DEBUG_PRINT_ERROR_STACK_I32( THIS, UNIT )

! Symbols imported from other modules within the project.
USE :: DATAKINDS_DEF_MOD, ONLY: JPIM_K
USE :: DATAKINDS_DEF_MOD, ONLY: JPIB_K

IMPLICIT NONE

!> Dummy arguments
CLASS(DEBUG_T), INTENT(IN) :: THIS
INTEGER(KIND=JPIM_K), INTENT(IN) :: UNIT

!> Local variables
INTEGER(KIND=JPIB_K) :: LOC_UNIT

!> Convert the integer unit to the default kind
LOC_UNIT = INT(UNIT, KIND=JPIB_K)

!> Call the I64 version of the subroutine
CALL THIS%PRINT_ERROR_STACK_I64( LOC_UNIT )

END SUBROUTINE DEBUG_PRINT_ERROR_STACK_I32

END MODULE DEBUG_MOD
26 changes: 26 additions & 0 deletions src/multiom/ifs-interface/ifs_msg_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ MODULE IFS_MSG_MOD
INTEGER (KIND=JPIB_K) :: KLEV
INTEGER (KIND=JPIB_K) :: IFCST
INTEGER (KIND=JPIB_K) :: NSTEP
INTEGER (KIND=JPIB_K) :: ITMAX
INTEGER (KIND=JPIB_K) :: ITMIN
CHARACTER(LEN=2) :: MARSTYPE
CHARACTER(LEN=14) :: CDATE !> @brief true if there are missing values in the message
END TYPE
Expand Down Expand Up @@ -1909,6 +1911,12 @@ PP_THREAD_SAFE FUNCTION WRITE_WAM( DATA, UNIT, HOOKS ) RESULT(RET)
WRITE(UNIT,IOSTAT=STAT) INT( DATA%NSTEP, INT64 )
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )

WRITE(UNIT,IOSTAT=STAT) INT( DATA%ITMIN, INT64 )
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )

WRITE(UNIT,IOSTAT=STAT) INT( DATA%ITMAX, INT64 )
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )

WRITE(UNIT,IOSTAT=STAT) DATA%LRSTST0
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )

Expand Down Expand Up @@ -2171,6 +2179,20 @@ PP_THREAD_SAFE FUNCTION READ_WAM(DATA, UNIT, VERBOSE, HOOKS ) RESULT(RET)
WRITE(ERROR_UNIT,*) ' + MSG_WAM%NSTEP................. :: ', DATA%NSTEP
ENDIF

READ(UNIT,IOSTAT=STAT) ITMP
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_READ_WAM )
DATA%ITMIN = INT( ITMP, KIND(DATA%ITMIN) )
IF ( VERBOSE ) THEN
WRITE(ERROR_UNIT,*) ' + MSG_WAM%ITMIN................. :: ', DATA%ITMIN
ENDIF

READ(UNIT,IOSTAT=STAT) ITMP
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_READ_WAM )
DATA%ITMAX = INT( ITMP, KIND(DATA%ITMAX) )
IF ( VERBOSE ) THEN
WRITE(ERROR_UNIT,*) ' + MSG_WAM%ITMAX................. :: ', DATA%ITMAX
ENDIF

READ(UNIT,IOSTAT=STAT) DATA%LRSTST0
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_READ_WAM )
IF ( VERBOSE ) THEN
Expand Down Expand Up @@ -2354,6 +2376,10 @@ PP_THREAD_SAFE FUNCTION PRINT_WAM( DATA, UNIT, HOOKS ) RESULT(RET)
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%NSTEP................. :: ', DATA%NSTEP
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%ITMIN................. :: ', DATA%ITMIN
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%ITMAX................. :: ', DATA%ITMAX
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%LRSTST0............... :: ', DATA%LRSTST0
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%MARSTYPE.............. :: ', DATA%MARSTYPE
Expand Down
22 changes: 22 additions & 0 deletions src/multiom/multiom_api.F90
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ MODULE MULTIOM_API
USE :: GENERAL_UTILS_MOD, ONLY: READ_TYPE_FROM_ENV
USE :: GENERAL_UTILS_MOD, ONLY: READ_YAML_FROM_ENV
USE :: GENERAL_UTILS_MOD, ONLY: NEED_FIT_SPECTRUM
USE :: GENERAL_UTILS_MOD, ONLY: SET_CUSTOM_UNITS
USE :: GENERAL_UTILS_MOD, ONLY: SET_DR_HOOK
USE :: GENERAL_UTILS_MOD, ONLY: DR_HOOK_DEFAULT8_IF

IMPLICIT NONE

Expand All @@ -116,12 +119,23 @@ MODULE MULTIOM_API
PUBLIC :: JPRM_K
PUBLIC :: JPRD_K

! Serialization helpers
PUBLIC :: MODEL_PAR_SERIAL_T
PUBLIC :: PAR_SERIALIZE
PUBLIC :: PAR_DESERIALIZE

! Enumerators
PUBLIC :: CPREFIX2IPREFIX
PUBLIC :: IPREFIX2IMSGTYPE
PUBLIC :: IPREFIX2ILEVTYPE
PUBLIC :: ILEVTYPE2CLEVTYPE
PUBLIC :: IREPRES2CREPRES
PUBLIC :: VALUES_SP_E
PUBLIC :: VALUES_DP_E
PUBLIC :: ATM_MSG_E
PUBLIC :: WAM_MSG_E
PUBLIC :: REPRES_GAUSSIANGRID_E
PUBLIC :: REPRES_SPHERICALHARMONICS_E

! ifs interface
PUBLIC :: OM_ATM_MSG_T
Expand Down Expand Up @@ -165,6 +179,14 @@ MODULE MULTIOM_API
PUBLIC :: MAKE_OUTPUT_MANAGER
PUBLIC :: DESTROY_OUTPUT_MANAGER

! General utils
PUBLIC :: READ_TYPE_FROM_ENV
PUBLIC :: READ_YAML_FROM_ENV
PUBLIC :: NEED_FIT_SPECTRUM
PUBLIC :: SET_CUSTOM_UNITS
PUBLIC :: SET_DR_HOOK
PUBLIC :: DR_HOOK_DEFAULT8_IF

END MODULE MULTIOM_API
#undef PP_SECTION_NAME
#undef PP_SECTION_TYPE
Expand Down

0 comments on commit 73a0627

Please sign in to comment.