Skip to content

Commit bbc8d51

Browse files
Reintroduced support for DR-HOOK and Logging units
- DR-HOOK is not needed anymore with the error handling, but still useful in some cases) - Refactored some whitespaces in CMakfiles
1 parent 445d863 commit bbc8d51

File tree

6 files changed

+158
-7
lines changed

6 files changed

+158
-7
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ ecbuild_add_option( FEATURE OUTPUT_MANAGER
104104

105105
ecbuild_add_option( FEATURE OUTPUT_MANAGER_ENCODER_REPORT
106106
CONDITION HAVE_OUTPUT_MANAGER
107-
DEFAULT OFF
107+
DEFAULT OFF
108108
DESCRIPTION "Enable generation of the encoding report" )
109109

110110
ecbuild_add_option( FEATURE OUTPUT_MANAGER_TOOL

src/multiom/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
if ( HAVE_OUTPUT_MANAGER )
42

53
# Update on new big features

src/multiom/common/general_utils_mod.F90

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,44 @@
1010
#define PP_SECTION_NAME 'GENERAL_UTILS_MOD'
1111
MODULE GENERAL_UTILS_MOD
1212

13+
! Symbolds imported from intrinsic modules
14+
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: ERROR_UNIT
15+
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: OUTPUT_UNIT
16+
17+
! Symbols imported from other modules within the project.
18+
USE :: DATAKINDS_DEF_MOD, ONLY: JPIB_K
19+
1320
IMPLICIT NONE
1421

1522
!> Default visibility of the module
1623
PRIVATE
1724

18-
! Whitelist of public symbols
25+
!> Dr Hook interface for tracing forwarding
26+
INTERFACE
27+
SUBROUTINE DR_HOOK_DEFAULT8_IF(CDNAME,KSWITCH,PKEY)
28+
USE :: DATAKINDS_DEF_MOD, ONLY: JPIM_K
29+
USE :: DATAKINDS_DEF_MOD, ONLY: JPTR_K
30+
IMPLICIT NONE
31+
CHARACTER(LEN=*), INTENT(IN) :: CDNAME
32+
INTEGER(KIND=JPIM_K), INTENT(IN) :: KSWITCH
33+
REAL(KIND=JPTR_K), INTENT(INOUT) :: PKEY
34+
END SUBROUTINE DR_HOOK_DEFAULT8_IF
35+
END INTERFACE
36+
37+
!> Tracing variables
38+
PROCEDURE(DR_HOOK_DEFAULT8_IF), POINTER :: DR_HOOK => NULL()
39+
LOGICAL :: LHOOK_ = .FALSE.
40+
41+
!> Default error unit
42+
INTEGER(KIND=JPIB_K) :: JPERR_UNIT=ERROR_UNIT
43+
INTEGER(KIND=JPIB_K) :: JPOUT_UNIT=OUTPUT_UNIT
44+
45+
!> Whitelist of public symbols (Interfaces)
46+
PUBLIC :: DR_HOOK_DEFAULT8_IF
47+
48+
!> Whitelist of public symbols (Procedures)
49+
PUBLIC :: SET_CUSTOM_UNITS
50+
PUBLIC :: SET_DR_HOOK
1951
PUBLIC :: ENVVAR_IS_DEFINED
2052
PUBLIC :: READ_ENVVAR
2153
PUBLIC :: REPLACE_ENVVAR_IN_STRING
@@ -28,6 +60,42 @@ MODULE GENERAL_UTILS_MOD
2860

2961
CONTAINS
3062

63+
#define PP_PROCEDURE_TYPE 'SUBROUTINE'
64+
#define PP_PROCEDURE_NAME 'SET_DR_HOOK'
65+
SUBROUTINE SET_DR_HOOK( LHOOK, DR_HOOK_PROCEDURE )
66+
IMPLICIT NONE
67+
68+
! Dummy arguments
69+
LOGICAL, INTENT(IN) :: LHOOK
70+
PROCEDURE(DR_HOOK_DEFAULT8_IF), POINTER, INTENT(IN) :: DR_HOOK_PROCEDURE
71+
72+
!> Set the hook
73+
LHOOK_ = LHOOK
74+
DR_HOOK => DR_HOOK_PROCEDURE
75+
76+
END SUBROUTINE SET_DR_HOOK
77+
#undef PP_PROCEDURE_NAME
78+
#undef PP_PROCEDURE_TYPE
79+
80+
#define PP_PROCEDURE_TYPE 'SUBROUTINE'
81+
#define PP_PROCEDURE_NAME 'SET_CUSTOM_UNITS'
82+
SUBROUTINE SET_CUSTOM_UNITS( CUSTOM_OUTPUT_UNIT, CUSTOM_ERROR_UNIT )
83+
84+
! Symbols imported from other modules within the project.
85+
USE :: DATAKINDS_DEF_MOD, ONLY: JPIM_K
86+
87+
IMPLICIT NONE
88+
89+
! Dummy arguments
90+
INTEGER(KIND=JPIM_K), INTENT(IN) :: CUSTOM_OUTPUT_UNIT
91+
INTEGER(KIND=JPIM_K), INTENT(IN) :: CUSTOM_ERROR_UNIT
92+
93+
JPERR_UNIT = CUSTOM_ERROR_UNIT
94+
JPOUT_UNIT = CUSTOM_OUTPUT_UNIT
95+
96+
END SUBROUTINE SET_CUSTOM_UNITS
97+
#undef PP_PROCEDURE_NAME
98+
#undef PP_PROCEDURE_TYPE
3199

32100
#define PP_PROCEDURE_TYPE 'FUNCTION'
33101
#define PP_PROCEDURE_NAME 'NEED_FIT_SPECTRUM'

src/multiom/hooks/debug/debug_mod.F90

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ MODULE DEBUG_MOD
104104
!> TODO: Add more options to add messages to the frame (i.e. int message, float messge, etc.)
105105

106106
!> Print all error frames and their messages
107-
PROCEDURE, PUBLIC, PASS, NON_OVERRIDABLE :: PRINT_ERROR_STACK => DEBUG_PRINT_ERROR_STACK
107+
PROCEDURE, PUBLIC, PASS, NON_OVERRIDABLE :: PRINT_ERROR_STACK_I64 => DEBUG_PRINT_ERROR_STACK_I64
108+
PROCEDURE, PUBLIC, PASS, NON_OVERRIDABLE :: PRINT_ERROR_STACK_I32 => DEBUG_PRINT_ERROR_STACK_I32
109+
110+
GENERIC, PUBLIC :: PRINT_ERROR_STACK => PRINT_ERROR_STACK_I64, PRINT_ERROR_STACK_I32
108111

109112
END TYPE
110113

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

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

509-
END SUBROUTINE DEBUG_PRINT_ERROR_STACK
512+
END SUBROUTINE DEBUG_PRINT_ERROR_STACK_I64
513+
514+
!>
515+
!> @brief Prints all error frames and their associated messages in the `DEBUG_T` structure.
516+
!>
517+
!> This subroutine traverses the error stack in the `DEBUG_T` object and prints
518+
!> each error frame along with its corresponding error messages to the specified
519+
!> output unit. This is useful for debugging purposes, as it provides a complete
520+
!> overview of all recorded errors.
521+
!>
522+
!> @param [in] THIS The `DEBUG_T` object containing the error stack to be printed.
523+
!> @param [in] UNIT The output unit where the error stack will be printed.
524+
!> This can be a file unit or the standard output.
525+
SUBROUTINE DEBUG_PRINT_ERROR_STACK_I32( THIS, UNIT )
526+
527+
! Symbols imported from other modules within the project.
528+
USE :: DATAKINDS_DEF_MOD, ONLY: JPIM_K
529+
USE :: DATAKINDS_DEF_MOD, ONLY: JPIB_K
530+
531+
IMPLICIT NONE
532+
533+
!> Dummy arguments
534+
CLASS(DEBUG_T), INTENT(IN) :: THIS
535+
INTEGER(KIND=JPIM_K), INTENT(IN) :: UNIT
536+
537+
!> Local variables
538+
INTEGER(KIND=JPIB_K) :: LOC_UNIT
539+
540+
!> Convert the integer unit to the default kind
541+
LOC_UNIT = INT(UNIT, KIND=JPIB_K)
542+
543+
!> Call the I64 version of the subroutine
544+
CALL THIS%PRINT_ERROR_STACK_I64( LOC_UNIT )
545+
546+
END SUBROUTINE DEBUG_PRINT_ERROR_STACK_I32
510547

511548
END MODULE DEBUG_MOD

src/multiom/ifs-interface/ifs_msg_mod.F90

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ MODULE IFS_MSG_MOD
9797
INTEGER (KIND=JPIB_K) :: KLEV
9898
INTEGER (KIND=JPIB_K) :: IFCST
9999
INTEGER (KIND=JPIB_K) :: NSTEP
100+
INTEGER (KIND=JPIB_K) :: ITMAX
101+
INTEGER (KIND=JPIB_K) :: ITMIN
100102
CHARACTER(LEN=2) :: MARSTYPE
101103
CHARACTER(LEN=14) :: CDATE !> @brief true if there are missing values in the message
102104
END TYPE
@@ -1909,6 +1911,12 @@ PP_THREAD_SAFE FUNCTION WRITE_WAM( DATA, UNIT, HOOKS ) RESULT(RET)
19091911
WRITE(UNIT,IOSTAT=STAT) INT( DATA%NSTEP, INT64 )
19101912
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )
19111913

1914+
WRITE(UNIT,IOSTAT=STAT) INT( DATA%ITMIN, INT64 )
1915+
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )
1916+
1917+
WRITE(UNIT,IOSTAT=STAT) INT( DATA%ITMAX, INT64 )
1918+
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )
1919+
19121920
WRITE(UNIT,IOSTAT=STAT) DATA%LRSTST0
19131921
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_WRITE_WAM )
19141922

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

2182+
READ(UNIT,IOSTAT=STAT) ITMP
2183+
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_READ_WAM )
2184+
DATA%ITMIN = INT( ITMP, KIND(DATA%ITMIN) )
2185+
IF ( VERBOSE ) THEN
2186+
WRITE(ERROR_UNIT,*) ' + MSG_WAM%ITMIN................. :: ', DATA%ITMIN
2187+
ENDIF
2188+
2189+
READ(UNIT,IOSTAT=STAT) ITMP
2190+
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_READ_WAM )
2191+
DATA%ITMAX = INT( ITMP, KIND(DATA%ITMAX) )
2192+
IF ( VERBOSE ) THEN
2193+
WRITE(ERROR_UNIT,*) ' + MSG_WAM%ITMAX................. :: ', DATA%ITMAX
2194+
ENDIF
2195+
21742196
READ(UNIT,IOSTAT=STAT) DATA%LRSTST0
21752197
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_READ_WAM )
21762198
IF ( VERBOSE ) THEN
@@ -2354,6 +2376,10 @@ PP_THREAD_SAFE FUNCTION PRINT_WAM( DATA, UNIT, HOOKS ) RESULT(RET)
23542376
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
23552377
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%NSTEP................. :: ', DATA%NSTEP
23562378
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
2379+
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%ITMIN................. :: ', DATA%ITMIN
2380+
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
2381+
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%ITMAX................. :: ', DATA%ITMAX
2382+
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
23572383
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%LRSTST0............... :: ', DATA%LRSTST0
23582384
PP_DEBUG_DEVELOP_COND_THROW( STAT.NE.0, ERRFLAG_UNABLE_TO_PRINT_WAM )
23592385
WRITE(UNIT,*,IOSTAT=STAT) ' + MSG_WAM%MARSTYPE.............. :: ', DATA%MARSTYPE

src/multiom/multiom_api.F90

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ MODULE MULTIOM_API
9797
USE :: GENERAL_UTILS_MOD, ONLY: READ_TYPE_FROM_ENV
9898
USE :: GENERAL_UTILS_MOD, ONLY: READ_YAML_FROM_ENV
9999
USE :: GENERAL_UTILS_MOD, ONLY: NEED_FIT_SPECTRUM
100+
USE :: GENERAL_UTILS_MOD, ONLY: SET_CUSTOM_UNITS
101+
USE :: GENERAL_UTILS_MOD, ONLY: SET_DR_HOOK
102+
USE :: GENERAL_UTILS_MOD, ONLY: DR_HOOK_DEFAULT8_IF
100103

101104
IMPLICIT NONE
102105

@@ -116,12 +119,23 @@ MODULE MULTIOM_API
116119
PUBLIC :: JPRM_K
117120
PUBLIC :: JPRD_K
118121

122+
! Serialization helpers
123+
PUBLIC :: MODEL_PAR_SERIAL_T
124+
PUBLIC :: PAR_SERIALIZE
125+
PUBLIC :: PAR_DESERIALIZE
126+
119127
! Enumerators
128+
PUBLIC :: CPREFIX2IPREFIX
129+
PUBLIC :: IPREFIX2IMSGTYPE
120130
PUBLIC :: IPREFIX2ILEVTYPE
121131
PUBLIC :: ILEVTYPE2CLEVTYPE
122132
PUBLIC :: IREPRES2CREPRES
123133
PUBLIC :: VALUES_SP_E
124134
PUBLIC :: VALUES_DP_E
135+
PUBLIC :: ATM_MSG_E
136+
PUBLIC :: WAM_MSG_E
137+
PUBLIC :: REPRES_GAUSSIANGRID_E
138+
PUBLIC :: REPRES_SPHERICALHARMONICS_E
125139

126140
! ifs interface
127141
PUBLIC :: OM_ATM_MSG_T
@@ -165,6 +179,14 @@ MODULE MULTIOM_API
165179
PUBLIC :: MAKE_OUTPUT_MANAGER
166180
PUBLIC :: DESTROY_OUTPUT_MANAGER
167181

182+
! General utils
183+
PUBLIC :: READ_TYPE_FROM_ENV
184+
PUBLIC :: READ_YAML_FROM_ENV
185+
PUBLIC :: NEED_FIT_SPECTRUM
186+
PUBLIC :: SET_CUSTOM_UNITS
187+
PUBLIC :: SET_DR_HOOK
188+
PUBLIC :: DR_HOOK_DEFAULT8_IF
189+
168190
END MODULE MULTIOM_API
169191
#undef PP_SECTION_NAME
170192
#undef PP_SECTION_TYPE

0 commit comments

Comments
 (0)