/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_set_levels.F
ViewVC logotype

Diff of /MITgcm/pkg/diagnostics/diagnostics_set_levels.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.12 by jmc, Wed Jan 31 21:47:55 2007 UTC revision 1.18 by jmc, Wed Aug 14 00:57:33 2013 UTC
# Line 26  C                   &  L  &  levels = MA Line 26  C                   &  L  &  levels = MA
26  C                   &  M  &  levels = MAX(Nr,NrPhys) - 1  \\  C                   &  M  &  levels = MAX(Nr,NrPhys) - 1  \\
27  C                   &  G  &  levels = Ground_level Number \\  C                   &  G  &  levels = Ground_level Number \\
28  C                   &  I  &  levels = sea-Ice_level Number \\  C                   &  I  &  levels = sea-Ice_level Number \\
29    C                   &  X  &  free levels option (need to be set explicitly) \\
30  C       \end{tabular}  C       \end{tabular}
31  C     \end{center}  C     \end{center}
32    
# Line 59  C     myThid :: my Thread Id number Line 60  C     myThid :: my Thread Id number
60  CEOP  CEOP
61    
62  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
63        INTEGER l, n, nlevs, nGroundLev        INTEGER l, n, ncount
64          INTEGER nlevs, nGroundLev
65        INTEGER  dUnit, stdUnit        INTEGER  dUnit, stdUnit
66        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
67        CHARACTER*(72) ccHead, ccLine        CHARACTER*84 ccHead, ccLine
68        CHARACTER*8 blk8c        CHARACTER*10 gcode
69          CHARACTER*1  g10code
70        INTEGER  ILNBLNK        INTEGER  ILNBLNK
71        EXTERNAL ILNBLNK        EXTERNAL ILNBLNK
72    
# Line 71  C---+----1----+----2----+----3----+----4 Line 74  C---+----1----+----2----+----3----+----4
74    
75        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
76    
77    C--   Diagnostics definition/setting ends (cannot add diags to list anymore)
78    c     IF ( diag_pkgStatus.NE.2 ) STOP
79          diag_pkgStatus = 3
80    
81        nlevs   = MAX(Nr,Nrphys)        nlevs   = MAX(Nr,Nrphys)
82        nGroundLev = land_nLev        nGroundLev = land_nLev
83    
84  c     Diagnostic Levels  C     Diagnostic Levels
85  c     -----------------  C     -----------------
86          ncount = 0
87        DO n = 1,ndiagt        DO n = 1,ndiagt
88          IF     (gdiag(n)(10:10) .EQ. '0') THEN          g10code = gdiag(n)(10:10)
89            IF     ( g10code .EQ. '0' ) THEN
90            kdiag(n) = 0            kdiag(n) = 0
91          ELSEIF (gdiag(n)(10:10) .EQ. '1') THEN          ELSEIF ( g10code .EQ. '1' ) THEN
92            kdiag(n) = 1            kdiag(n) = 1
93          ELSEIF (gdiag(n)(10:10) .EQ. 'R') THEN          ELSEIF ( g10code .EQ. 'R' ) THEN
94            kdiag(n) = Nr            kdiag(n) = Nr
95          ELSEIF (gdiag(n)(10:10) .EQ. 'L') THEN          ELSEIF ( g10code .EQ. 'L' ) THEN
96            kdiag(n) = nlevs            kdiag(n) = nlevs
97          ELSEIF (gdiag(n)(10:10) .EQ. 'M') THEN          ELSEIF ( g10code .EQ. 'M' ) THEN
98            kdiag(n) = nlevs - 1            kdiag(n) = nlevs - 1
99          ELSEIF (gdiag(n)(10:10) .EQ. 'G') THEN          ELSEIF ( g10code .EQ. 'G' ) THEN
100            kdiag(n) = nGroundLev            kdiag(n) = nGroundLev
101          ELSEIF (gdiag(n)(10:10) .NE. ' ') THEN          ELSEIF ( g10code .EQ. 'g' ) THEN
 C-      others: set 1 level:  
102            kdiag(n) = 1            kdiag(n) = 1
103            ELSEIF ( g10code .EQ. 'X' ) THEN
104             IF ( kdiag(n) .LE. 0 ) THEN
105              WRITE(msgBuf,'(2A,I4,3A)')
106         &     '** WARNING ** DIAGNOSTICS_SET_LEVELS: ',
107         &     'level Nb =', kdiag(n), ' < 1 for diag."', cdiag(n),'"'
108              CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
109         &                        SQUEEZE_RIGHT , myThid )
110             ENDIF
111            ELSE
112    C-      enforce a strict matching:
113              WRITE(msgBuf,'(2A,4A)') 'DIAGNOSTICS_SET_LEVELS: ',
114         &     'invalid gdiag(10)="', g10code, '" code for diag."',
115         &                            cdiag(n),'"'
116              CALL PRINT_ERROR( msgBuf , myThid )
117              ncount = ncount + 1
118          ENDIF          ENDIF
119        ENDDO        ENDDO
120          IF ( ncount.GT.0 ) THEN
121            WRITE(msgBuf,'(2A,I6,3A)') 'DIAGNOSTICS_SET_LEVELS: ',
122         &   'found', ncount, ' invalid parser "gdiag(10)" => STOP'
123            CALL PRINT_ERROR( msgBuf , myThid )
124            STOP 'ABNORMAL END: S/R DIAGSTATS_SET_LEVELS'
125          ENDIF
126    
127    C--   Check for inconsistent diagnostic parser field
128          ncount = 0
129          DO n = 1,ndiagt
130           gcode = gdiag(n)(1:10)
131           IF ( ( gcode(3:3).EQ.'r' .OR. gcode(3:3).EQ.'R' )
132         &                         .AND. gcode(10:10).NE.'R' ) THEN
133            WRITE(msgBuf,'(2A,4A)') 'DIAGNOSTICS_SET_LEVELS: ',
134         &   'inconsistent gdiag(3&10)="',gcode,'" for diag."',cdiag(n),'"'
135            CALL PRINT_ERROR( msgBuf , myThid )
136            ncount = ncount + 1
137           ENDIF
138          ENDDO
139          IF ( ncount.GT.0 ) THEN
140            WRITE(msgBuf,'(2A,I6,3A)') 'DIAGNOSTICS_SET_LEVELS: ',
141         &   'found', ncount, ' inconsistent parser "gdiag" => STOP'
142            CALL PRINT_ERROR( msgBuf , myThid )
143            STOP 'ABNORMAL END: S/R DIAGSTATS_SET_LEVELS'
144          ENDIF
145    
146    C--   Check for unvalid diag.mate number
147          ncount = 0
148          DO n = 1,ndiagt
149           IF ( hdiag(n).LT.0 .OR. hdiag(n).GT.ndiagt ) THEN
150            WRITE(msgBuf,'(2A,I6,3A)') 'DIAGNOSTICS_SET_LEVELS: ',
151         &    'unvalid mate number=',hdiag(n),' for diag."',cdiag(n),'"'
152            CALL PRINT_ERROR( msgBuf , myThid )
153            ncount = ncount + 1
154           ENDIF
155           gcode = gdiag(n)(1:10)
156           IF ( ( gcode(5:5).EQ.'C' .OR. gcode(5:5).EQ.'P' )
157         &                         .AND. hdiag(n).EQ.0 ) THEN
158            WRITE(msgBuf,'(6A)') 'DIAGNOSTICS_SET_LEVELS: ',
159         &    'mate number required for diag."',cdiag(n),
160         &    '" (gdiag(5)=',gcode(5:5),')'
161            CALL PRINT_ERROR( msgBuf , myThid )
162            ncount = ncount + 1
163           ENDIF
164          ENDDO
165          IF ( ncount.GT.0 ) THEN
166            WRITE(msgBuf,'(2A,I6,3A)') 'DIAGNOSTICS_SET_LEVELS: ',
167         &    'found', ncount, ' unvalid/missing mate number(s) => STOP'
168            CALL PRINT_ERROR( msgBuf , myThid )
169            STOP 'ABNORMAL END: S/R DIAGSTATS_SET_LEVELS'
170          ENDIF
171    
172    C--   Print to standard output
173        stdUnit = standardMessageUnit        stdUnit = standardMessageUnit
174        WRITE(msgBuf,'(2A)')        WRITE(msgBuf,'(2A)')
175       &   '------------------------------------------------------------'       &   '------------------------------------------------------------'
176        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
177        WRITE(msgBuf,'(A)') 'DIAGNOSTICS_SET_LEVELS: done'        WRITE(msgBuf,'(A)') 'DIAGNOSTICS_SET_LEVELS: done'
178        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
179        WRITE(msgBuf,'(A,I4)')        WRITE(msgBuf,'(A,I6)')
180       &   ' Total Nb of available Diagnostics: ndiagt=', ndiagt       &   ' Total Nb of available Diagnostics: ndiagt=', ndiagt
181        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
182    
183  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
184  C     write a summary of the (long) list of all available diagnostics:  C     write a summary of the (long) list of all available diagnostics:
185        IF ( debugLevel.GE.debLevA ) THEN        IF ( debugLevel.GE.debLevA .AND. myProcId.EQ.0 ) THEN
186    
187          WRITE(msgBuf,'(2A)')          WRITE(msgBuf,'(2A)')
188       &   ' write list of available Diagnostics to file: ',       &   ' write list of available Diagnostics to file: ',
# Line 115  C     write a summary of the (long) list Line 190  C     write a summary of the (long) list
190          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
191    
192          WRITE(ccHead,'(2A)')          WRITE(ccHead,'(2A)')
193       &   ' Num |<-Name->|Levs|<-parsing code->|<--  Units   -->|',       &   '  Num  |<-Name->|Levs|  mate |<- code ->|',
194       &   '<- Tile (max=80c)'       &   '<--  Units   -->|<- Tile (max=80c)'
195          DO l=1,LEN(ccLine)          DO l=1,LEN(ccLine)
196           ccLine(l:l) = '-'           ccLine(l:l) = '-'
197          ENDDO          ENDDO
# Line 124  C     write a summary of the (long) list Line 199  C     write a summary of the (long) list
199          CALL MDSFINDUNIT( dUnit, mythid )          CALL MDSFINDUNIT( dUnit, mythid )
200          OPEN(dUnit, file='available_diagnostics.log',          OPEN(dUnit, file='available_diagnostics.log',
201       &              status='unknown', form='formatted')       &              status='unknown', form='formatted')
202          WRITE(dUnit,'(A,I4)')          WRITE(dUnit,'(A,I6)')
203       &   ' Total Nb of available Diagnostics: ndiagt=', ndiagt       &   ' Total Nb of available Diagnostics: ndiagt=', ndiagt
204          WRITE(dUnit,'(A)') ccLine          WRITE(dUnit,'(A)') ccLine
205          WRITE(dUnit,'(A)') ccHead          WRITE(dUnit,'(A)') ccHead
# Line 136  C     write a summary of the (long) list Line 211  C     write a summary of the (long) list
211             WRITE(dUnit,'(A)') ccLine             WRITE(dUnit,'(A)') ccLine
212           ENDIF           ENDIF
213           l = ILNBLNK(tdiag(n))           l = ILNBLNK(tdiag(n))
214           IF (l.GE.1) THEN           gcode = gdiag(n)(1:10)
215             WRITE(dUnit,'(I4,3A,I3,6A)') n,' |',cdiag(n),'|',           IF ( hdiag(n).NE.0 .AND. l.GE.1 ) THEN
216       &           kdiag(n),' |',gdiag(n),'|',udiag(n),'|',tdiag(n)(1:l)             WRITE(dUnit,'(I6,3A,I3,A,I6,6A)') n, ' |', cdiag(n), '|',
217         &                 kdiag(n),' |', hdiag(n), ' |', gcode, '|',
218         &                 udiag(n), '|', tdiag(n)(1:l)
219             ELSEIF ( hdiag(n).NE.0 ) THEN
220               WRITE(dUnit,'(I6,3A,I3,A,I6,6A)') n, ' |', cdiag(n), '|',
221         &                 kdiag(n),' |', hdiag(n), ' |', gcode, '|',
222         &                 udiag(n), '|'
223             ELSEIF (l.GE.1) THEN
224               WRITE(dUnit,'(I6,3A,I3,6A)')      n, ' |', cdiag(n), '|',
225         &                 kdiag(n),' |       |',         gcode, '|',
226         &                 udiag(n), '|', tdiag(n)(1:l)
227           ELSE           ELSE
228             WRITE(dUnit,'(I4,3A,I3,6A)') n,' |',cdiag(n),'|',             WRITE(dUnit,'(I6,3A,I3,6A)')      n, ' |', cdiag(n), '|',
229       &           kdiag(n),' |',gdiag(n),'|',udiag(n),'|'       &                 kdiag(n),' |       |',         gcode, '|',
230         &                 udiag(n), '|'
231           ENDIF           ENDIF
232          ENDDO          ENDDO
233          WRITE(dUnit,'(A)') ccLine          WRITE(dUnit,'(A)') ccLine
# Line 153  C---+----1----+----2----+----3----+----4 Line 239  C---+----1----+----2----+----3----+----4
239        ENDIF        ENDIF
240    
241  C--   Check for multiple definition of the same diagnostic name  C--   Check for multiple definition of the same diagnostic name
       blk8c  = '        '  
242        DO n = 2,ndiagt        DO n = 2,ndiagt
243         IF ( cdiag(n).NE.blk8c ) THEN         IF ( cdiag(n).NE.blkName ) THEN
244          DO l = 1,n-1          DO l = 1,n-1
245           IF ( cdiag(l).EQ.cdiag(n) ) THEN           IF ( cdiag(l).EQ.cdiag(n) ) THEN
246              WRITE(msgBuf,'(4A)') 'DIAGNOSTICS_SET_LEVELS: ',              WRITE(msgBuf,'(4A)') 'DIAGNOSTICS_SET_LEVELS: ',

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.18

  ViewVC Help
Powered by ViewVC 1.1.22