** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.
Last-Modified: Sun, 12 Jul 2025 05:09:02 GMT
Content-Type: text/html; charset=utf-8
MITgcm/MITgcm/pkg/diagnostics/diagnostics_set_levels.F
File indexing completed on 2024-05-11 05:10:23 UTC
view on github raw file Latest commit 41c4545f on 2024-05-10 15:00:41 UTC
09ceb40cd6 Jean* 0001 #include "DIAG_OPTIONS.h "
0002
0003
0004
0005
0006
0007 SUBROUTINE DIAGNOSTICS_SET_LEVELS ( myThid )
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
83678acfcc Jean* 0024
0025
a0bbeea03c Jean* 0026
09ceb40cd6 Jean* 0027
0028
0029
0030
0031 IMPLICIT NONE
0032
0033 #include "SIZE.h "
83678acfcc Jean* 0034 #define SIZE_IS_SET
09ceb40cd6 Jean* 0035 #include "EEPARAMS.h "
0036 #include "PARAMS.h "
0037 #include "DIAGNOSTICS_SIZE.h "
0038 #include "DIAGNOSTICS.h "
0039
0040 #ifdef ALLOW_FIZHI
0041 #include "fizhi_SIZE.h "
0042 #else
0043 INTEGER Nrphys
0044 PARAMETER (Nrphys =0)
0045 #endif
0046
83678acfcc Jean* 0047 #ifdef ALLOW_LAND
0048 #include "LAND_SIZE.h "
0049 #else
0050 INTEGER land_nLev
0051 PARAMETER ( land_nLev = 0 )
0052 #endif
0053
09ceb40cd6 Jean* 0054
8c2b124434 Jean* 0055
09ceb40cd6 Jean* 0056 INTEGER myThid
0057
0058
8c2b124434 Jean* 0059
e129400813 Jean* 0060 INTEGER l , n , ncount
0061 INTEGER nlevs , nGroundLev
8c2b124434 Jean* 0062 INTEGER dUnit , stdUnit
0063 CHARACTER *(MAX_LEN_MBUF ) msgBuf
e129400813 Jean* 0064 CHARACTER *84 ccHead , ccLine
0065 CHARACTER *10 gcode
a0bbeea03c Jean* 0066 CHARACTER *1 g10code
8c2b124434 Jean* 0067 INTEGER ILNBLNK
0068 EXTERNAL ILNBLNK
09ceb40cd6 Jean* 0069
8c2b124434 Jean* 0070
09ceb40cd6 Jean* 0071
e01144d3ad Jean* 0072 _BARRIER
e3e2b00dee Jean* 0073 _BEGIN_MASTER ( myThid )
0074
a0bbeea03c Jean* 0075
ab43bc12c4 Jean* 0076
0077 diag_pkgStatus = 3
a0bbeea03c Jean* 0078
09ceb40cd6 Jean* 0079 nlevs = MAX(Nr ,Nrphys )
83678acfcc Jean* 0080 nGroundLev = land_nLev
09ceb40cd6 Jean* 0081
e129400813 Jean* 0082
0083
a0bbeea03c Jean* 0084 ncount = 0
09ceb40cd6 Jean* 0085 DO n = 1,ndiagt
a0bbeea03c Jean* 0086 g10code = gdiag (n )(10:10)
0087 IF ( g10code .EQ. '0' ) THEN
219b3f2d10 Jean* 0088 kdiag (n ) = 0
a0bbeea03c Jean* 0089 ELSEIF ( g10code .EQ. '1' ) THEN
219b3f2d10 Jean* 0090 kdiag (n ) = 1
a0bbeea03c Jean* 0091 ELSEIF ( g10code .EQ. 'R' ) THEN
219b3f2d10 Jean* 0092 kdiag (n ) = Nr
a0bbeea03c Jean* 0093 ELSEIF ( g10code .EQ. 'L' ) THEN
219b3f2d10 Jean* 0094 kdiag (n ) = nlevs
a0bbeea03c Jean* 0095 ELSEIF ( g10code .EQ. 'M' ) THEN
219b3f2d10 Jean* 0096 kdiag (n ) = nlevs - 1
a0bbeea03c Jean* 0097 ELSEIF ( g10code .EQ. 'G' ) THEN
219b3f2d10 Jean* 0098 kdiag (n ) = nGroundLev
a0bbeea03c Jean* 0099 ELSEIF ( g10code .EQ. 'g' ) THEN
219b3f2d10 Jean* 0100 kdiag (n ) = 1
a0bbeea03c Jean* 0101 ELSEIF ( g10code .EQ. 'X' ) THEN
0102 IF ( kdiag (n ) .LE. 0 ) THEN
0103 WRITE (msgBuf ,'(2A,I4,3A)' )
0104 & '** WARNING ** DIAGNOSTICS_SET_LEVELS: ' ,
0105 & 'level Nb =' , kdiag (n ), ' < 1 for diag."' , cdiag (n ),'"'
0106 CALL PRINT_MESSAGE ( msgBuf , errorMessageUnit ,
0107 & SQUEEZE_RIGHT , myThid )
0108 ENDIF
0109 ELSE
0110
0111 WRITE (msgBuf ,'(2A,4A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0112 & 'invalid gdiag(10)="' , g10code , '" code for diag."' ,
0113 & cdiag (n ),'"'
0114 CALL PRINT_ERROR ( msgBuf , myThid )
0115 ncount = ncount + 1
219b3f2d10 Jean* 0116 ENDIF
09ceb40cd6 Jean* 0117 ENDDO
a0bbeea03c Jean* 0118 IF ( ncount .GT. 0 ) THEN
0119 WRITE (msgBuf ,'(2A,I6,3A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0120 & 'found' , ncount , ' invalid parser "gdiag(10)" => STOP'
0121 CALL PRINT_ERROR ( msgBuf , myThid )
0122 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_LEVELS'
0123 ENDIF
09ceb40cd6 Jean* 0124
9de9316d99 Jean* 0125
0126 ncount = 0
0127 DO n = 1,ndiagt
0128 gcode = gdiag (n )(1:10)
0129 IF ( ( gcode (3:3).EQ. 'r' .OR. gcode (3:3).EQ. 'R' )
0130 & .AND. gcode (10:10).NE. 'R' ) THEN
0131 WRITE (msgBuf ,'(2A,4A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0132 & 'inconsistent gdiag(3&10)="' ,gcode ,'" for diag."' ,cdiag (n ),'"'
0133 CALL PRINT_ERROR ( msgBuf , myThid )
0134 ncount = ncount + 1
0135 ENDIF
0136 ENDDO
0137 IF ( ncount .GT. 0 ) THEN
0138 WRITE (msgBuf ,'(2A,I6,3A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0139 & 'found' , ncount , ' inconsistent parser "gdiag" => STOP'
0140 CALL PRINT_ERROR ( msgBuf , myThid )
0141 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_LEVELS'
0142 ENDIF
0143
e129400813 Jean* 0144
0145 ncount = 0
0146 DO n = 1,ndiagt
0147 IF ( hdiag (n ).LT. 0 .OR. hdiag (n ).GT. ndiagt ) THEN
0148 WRITE (msgBuf ,'(2A,I6,3A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0149 & 'unvalid mate number=' ,hdiag (n ),' for diag."' ,cdiag (n ),'"'
0150 CALL PRINT_ERROR ( msgBuf , myThid )
0151 ncount = ncount + 1
0152 ENDIF
c534926046 Jean* 0153 gcode = gdiag (n )(1:10)
0154 IF ( ( gcode (5:5).EQ. 'C' .OR. gcode (5:5).EQ. 'P' )
0155 & .AND. hdiag (n ).EQ. 0 ) THEN
0156 WRITE (msgBuf ,'(6A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0157 & 'mate number required for diag."' ,cdiag (n ),
0158 & '" (gdiag(5)=' ,gcode (5:5),')'
0159 CALL PRINT_ERROR ( msgBuf , myThid )
0160 ncount = ncount + 1
0161 ENDIF
e129400813 Jean* 0162 ENDDO
0163 IF ( ncount .GT. 0 ) THEN
0164 WRITE (msgBuf ,'(2A,I6,3A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
c534926046 Jean* 0165 & 'found' , ncount , ' unvalid/missing mate number(s) => STOP'
e129400813 Jean* 0166 CALL PRINT_ERROR ( msgBuf , myThid )
0167 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_LEVELS'
0168 ENDIF
0169
9de9316d99 Jean* 0170
8c2b124434 Jean* 0171 stdUnit = standardMessageUnit
0172 WRITE (msgBuf ,'(2A)' )
0173 & '------------------------------------------------------------'
0174 CALL PRINT_MESSAGE ( msgBuf , stdUnit ,SQUEEZE_RIGHT , myThid )
0175 WRITE (msgBuf ,'(A)' ) 'DIAGNOSTICS_SET_LEVELS: done'
0176 CALL PRINT_MESSAGE ( msgBuf , stdUnit ,SQUEEZE_RIGHT , myThid )
e129400813 Jean* 0177 WRITE (msgBuf ,'(A,I6)' )
8c2b124434 Jean* 0178 & ' Total Nb of available Diagnostics: ndiagt=' , ndiagt
0179 CALL PRINT_MESSAGE ( msgBuf , stdUnit ,SQUEEZE_RIGHT , myThid )
0180
0181
0182
41c4545f8f Jean* 0183 IF ( diag_dBugLevel .GE. debLevA .AND. myProcId .EQ. 0 ) THEN
8c2b124434 Jean* 0184
0185 WRITE (msgBuf ,'(2A)' )
0186 & ' write list of available Diagnostics to file: ' ,
b89cfd6db1 Jean* 0187 & 'available_diagnostics.log'
8c2b124434 Jean* 0188 CALL PRINT_MESSAGE ( msgBuf , stdUnit ,SQUEEZE_RIGHT , myThid )
0189
0190 WRITE (ccHead ,'(2A)' )
e129400813 Jean* 0191 & ' Num |<-Name->|Levs| mate |<- code ->|' ,
0192 & '<-- Units -->|<- Tile (max=80c)'
8c2b124434 Jean* 0193 DO l =1,LEN (ccLine )
0194 ccLine (l :l ) = '-'
0195 ENDDO
0196
e01144d3ad Jean* 0197 CALL MDSFINDUNIT ( dUnit , myThid )
dd5a4867c9 Jean* 0198 OPEN (dUnit , file='available_diagnostics.log' ,
0199 & status ='unknown' , form='formatted' )
e129400813 Jean* 0200 WRITE (dUnit ,'(A,I6)' )
8c2b124434 Jean* 0201 & ' Total Nb of available Diagnostics: ndiagt=' , ndiagt
0202 WRITE (dUnit ,'(A)' ) ccLine
0203 WRITE (dUnit ,'(A)' ) ccHead
0204 WRITE (dUnit ,'(A)' ) ccLine
0205 DO n =1,ndiagt
0206 IF ( MOD(n ,100).EQ. 0 ) THEN
0207 WRITE (dUnit ,'(A)' ) ccLine
0208 WRITE (dUnit ,'(A)' ) ccHead
0209 WRITE (dUnit ,'(A)' ) ccLine
0210 ENDIF
0211 l = ILNBLNK (tdiag (n ))
e129400813 Jean* 0212 gcode = gdiag (n )(1:10)
0213 IF ( hdiag (n ).NE. 0 .AND. l .GE. 1 ) THEN
0214 WRITE (dUnit ,'(I6,3A,I3,A,I6,6A)' ) n , ' |' , cdiag (n ), '|' ,
0215 & kdiag (n ),' |' , hdiag (n ), ' |' , gcode , '|' ,
0216 & udiag (n ), '|' , tdiag (n )(1:l )
0217 ELSEIF ( hdiag (n ).NE. 0 ) THEN
0218 WRITE (dUnit ,'(I6,3A,I3,A,I6,6A)' ) n , ' |' , cdiag (n ), '|' ,
0219 & kdiag (n ),' |' , hdiag (n ), ' |' , gcode , '|' ,
0220 & udiag (n ), '|'
0221 ELSEIF (l .GE. 1) THEN
0222 WRITE (dUnit ,'(I6,3A,I3,6A)' ) n , ' |' , cdiag (n ), '|' ,
0223 & kdiag (n ),' | |' , gcode , '|' ,
0224 & udiag (n ), '|' , tdiag (n )(1:l )
8c2b124434 Jean* 0225 ELSE
e129400813 Jean* 0226 WRITE (dUnit ,'(I6,3A,I3,6A)' ) n , ' |' , cdiag (n ), '|' ,
0227 & kdiag (n ),' | |' , gcode , '|' ,
0228 & udiag (n ), '|'
8c2b124434 Jean* 0229 ENDIF
0230 ENDDO
0231 WRITE (dUnit ,'(A)' ) ccLine
0232 WRITE (dUnit ,'(A)' ) ccHead
0233 WRITE (dUnit ,'(A)' ) ccLine
0234 CLOSE (dUnit )
0235
0236
0237 ENDIF
94db193af3 Jean* 0238
0239
0240 DO n = 2,ndiagt
ab43bc12c4 Jean* 0241 IF ( cdiag (n ).NE. blkName ) THEN
94db193af3 Jean* 0242 DO l = 1,n -1
0243 IF ( cdiag (l ).EQ. cdiag (n ) ) THEN
0244 WRITE (msgBuf ,'(4A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0245 & 'diag.Name: ' ,cdiag (n ),' registered 2 times :'
0246 CALL PRINT_ERROR ( msgBuf , myThid )
0247 WRITE (msgBuf ,'(2A,I4,2A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0248 & '1rst (l=' , l , ' ), title= ' ,tdiag (l )
0249 CALL PRINT_ERROR ( msgBuf , myThid )
0250 WRITE (msgBuf ,'(2A,I4,2A)' ) 'DIAGNOSTICS_SET_LEVELS: ' ,
0251 & ' 2nd (n=' , n , ' ), title= ' ,tdiag (n )
0252 CALL PRINT_ERROR ( msgBuf , myThid )
0253 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SET_LEVELS'
0254 ENDIF
0255 ENDDO
0256 ENDIF
0257 ENDDO
0258
ada33f880b Jean* 0259
0260
49f3c51920 Jean* 0261
0262
0263
ada33f880b Jean* 0264
8c2b124434 Jean* 0265 _END_MASTER ( myThid )
0266
e3e2b00dee Jean* 0267
0268 _BARRIER
0269
09ceb40cd6 Jean* 0270 RETURN
0271 END