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

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

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


Revision 1.14 - (show annotations) (download)
Wed Apr 29 20:58:56 2009 UTC (15 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62, checkpoint61n, checkpoint61o, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.13: +2 -2 lines
only Proc. zero writes file "available_diagnostics.log"

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_set_levels.F,v 1.13 2008/02/05 15:31:19 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 CBOP 0
7 C !ROUTINE: DIAGNOSTICS_SET_LEVELS
8
9 C !INTERFACE:
10 SUBROUTINE DIAGNOSTICS_SET_LEVELS( myThid )
11
12 C !DESCRIPTION:
13 C Initialize Diagnostic Levels, according to GDIAG
14 C for all available diagnostics
15 C Notes: needs to be called after all packages set they own available
16 C diagnostics
17
18 C \begin{center}
19 C \begin{tabular}[h]{|c|c|}\hline
20 C \textbf{Positions} & \textbf{Characters}
21 C & \textbf{Meanings} \\\hline
22 C parse(10) & 0 & levels = 0 \\
23 C & 1 & levels = 1 \\
24 C & R & levels = Nr \\
25 C & L & levels = MAX(Nr,NrPhys) \\
26 C & M & levels = MAX(Nr,NrPhys) - 1 \\
27 C & G & levels = Ground_level Number \\
28 C & I & levels = sea-Ice_level Number \\
29 C \end{tabular}
30 C \end{center}
31
32 C !USES:
33 IMPLICIT NONE
34
35 #include "SIZE.h"
36 #define SIZE_IS_SET
37 #include "EEPARAMS.h"
38 #include "PARAMS.h"
39 #include "DIAGNOSTICS_SIZE.h"
40 #include "DIAGNOSTICS.h"
41
42 #ifdef ALLOW_FIZHI
43 #include "fizhi_SIZE.h"
44 #else
45 INTEGER Nrphys
46 PARAMETER (Nrphys=0)
47 #endif
48
49 #ifdef ALLOW_LAND
50 #include "LAND_SIZE.h"
51 #else
52 INTEGER land_nLev
53 PARAMETER ( land_nLev = 0 )
54 #endif
55
56 C !INPUT PARAMETERS:
57 C myThid :: my Thread Id number
58 INTEGER myThid
59 CEOP
60
61 C !LOCAL VARIABLES:
62 INTEGER l, n, ncount
63 INTEGER nlevs, nGroundLev
64 INTEGER dUnit, stdUnit
65 CHARACTER*(MAX_LEN_MBUF) msgBuf
66 CHARACTER*84 ccHead, ccLine
67 CHARACTER*8 blk8c
68 CHARACTER*10 gcode
69 INTEGER ILNBLNK
70 EXTERNAL ILNBLNK
71
72 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
73
74 _BEGIN_MASTER( myThid )
75
76 nlevs = MAX(Nr,Nrphys)
77 nGroundLev = land_nLev
78
79 C Diagnostic Levels
80 C -----------------
81 DO n = 1,ndiagt
82 IF (gdiag(n)(10:10) .EQ. '0') THEN
83 kdiag(n) = 0
84 ELSEIF (gdiag(n)(10:10) .EQ. '1') THEN
85 kdiag(n) = 1
86 ELSEIF (gdiag(n)(10:10) .EQ. 'R') THEN
87 kdiag(n) = Nr
88 ELSEIF (gdiag(n)(10:10) .EQ. 'L') THEN
89 kdiag(n) = nlevs
90 ELSEIF (gdiag(n)(10:10) .EQ. 'M') THEN
91 kdiag(n) = nlevs - 1
92 ELSEIF (gdiag(n)(10:10) .EQ. 'G') THEN
93 kdiag(n) = nGroundLev
94 ELSEIF (gdiag(n)(10:10) .NE. ' ') THEN
95 C- others: set 1 level:
96 kdiag(n) = 1
97 ENDIF
98 ENDDO
99
100 C-- Check for unvalid diag.mate number
101 ncount = 0
102 DO n = 1,ndiagt
103 IF ( hdiag(n).LT.0 .OR. hdiag(n).GT.ndiagt ) THEN
104 WRITE(msgBuf,'(2A,I6,3A)') 'DIAGNOSTICS_SET_LEVELS: ',
105 & 'unvalid mate number=',hdiag(n),' for diag."',cdiag(n),'"'
106 CALL PRINT_ERROR( msgBuf , myThid )
107 ncount = ncount + 1
108 ENDIF
109 ENDDO
110 IF ( ncount.GT.0 ) THEN
111 WRITE(msgBuf,'(2A,I6,3A)') 'DIAGNOSTICS_SET_LEVELS: ',
112 & 'found', ncount, ' unvalid mate number(s) => STOP'
113 CALL PRINT_ERROR( msgBuf , myThid )
114 STOP 'ABNORMAL END: S/R DIAGSTATS_SET_LEVELS'
115 ENDIF
116
117 stdUnit = standardMessageUnit
118 WRITE(msgBuf,'(2A)')
119 & '------------------------------------------------------------'
120 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
121 WRITE(msgBuf,'(A)') 'DIAGNOSTICS_SET_LEVELS: done'
122 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
123 WRITE(msgBuf,'(A,I6)')
124 & ' Total Nb of available Diagnostics: ndiagt=', ndiagt
125 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
126
127 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
128 C write a summary of the (long) list of all available diagnostics:
129 IF ( debugLevel.GE.debLevA .AND. myProcId.EQ.0 ) THEN
130
131 WRITE(msgBuf,'(2A)')
132 & ' write list of available Diagnostics to file: ',
133 & 'available_diagnostics.log'
134 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
135
136 WRITE(ccHead,'(2A)')
137 & ' Num |<-Name->|Levs| mate |<- code ->|',
138 & '<-- Units -->|<- Tile (max=80c)'
139 DO l=1,LEN(ccLine)
140 ccLine(l:l) = '-'
141 ENDDO
142
143 CALL MDSFINDUNIT( dUnit, mythid )
144 OPEN(dUnit, file='available_diagnostics.log',
145 & status='unknown', form='formatted')
146 WRITE(dUnit,'(A,I6)')
147 & ' Total Nb of available Diagnostics: ndiagt=', ndiagt
148 WRITE(dUnit,'(A)') ccLine
149 WRITE(dUnit,'(A)') ccHead
150 WRITE(dUnit,'(A)') ccLine
151 DO n=1,ndiagt
152 IF ( MOD(n,100).EQ.0 ) THEN
153 WRITE(dUnit,'(A)') ccLine
154 WRITE(dUnit,'(A)') ccHead
155 WRITE(dUnit,'(A)') ccLine
156 ENDIF
157 l = ILNBLNK(tdiag(n))
158 gcode = gdiag(n)(1:10)
159 IF ( hdiag(n).NE.0 .AND. l.GE.1 ) THEN
160 WRITE(dUnit,'(I6,3A,I3,A,I6,6A)') n, ' |', cdiag(n), '|',
161 & kdiag(n),' |', hdiag(n), ' |', gcode, '|',
162 & udiag(n), '|', tdiag(n)(1:l)
163 ELSEIF ( hdiag(n).NE.0 ) THEN
164 WRITE(dUnit,'(I6,3A,I3,A,I6,6A)') n, ' |', cdiag(n), '|',
165 & kdiag(n),' |', hdiag(n), ' |', gcode, '|',
166 & udiag(n), '|'
167 ELSEIF (l.GE.1) THEN
168 WRITE(dUnit,'(I6,3A,I3,6A)') n, ' |', cdiag(n), '|',
169 & kdiag(n),' | |', gcode, '|',
170 & udiag(n), '|', tdiag(n)(1:l)
171 ELSE
172 WRITE(dUnit,'(I6,3A,I3,6A)') n, ' |', cdiag(n), '|',
173 & kdiag(n),' | |', gcode, '|',
174 & udiag(n), '|'
175 ENDIF
176 ENDDO
177 WRITE(dUnit,'(A)') ccLine
178 WRITE(dUnit,'(A)') ccHead
179 WRITE(dUnit,'(A)') ccLine
180 CLOSE(dUnit)
181
182 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
183 ENDIF
184
185 C-- Check for multiple definition of the same diagnostic name
186 blk8c = ' '
187 DO n = 2,ndiagt
188 IF ( cdiag(n).NE.blk8c ) THEN
189 DO l = 1,n-1
190 IF ( cdiag(l).EQ.cdiag(n) ) THEN
191 WRITE(msgBuf,'(4A)') 'DIAGNOSTICS_SET_LEVELS: ',
192 & 'diag.Name: ',cdiag(n),' registered 2 times :'
193 CALL PRINT_ERROR( msgBuf , myThid )
194 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_SET_LEVELS: ',
195 & '1rst (l=', l, ' ), title= ',tdiag(l)
196 CALL PRINT_ERROR( msgBuf , myThid )
197 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_SET_LEVELS: ',
198 & ' 2nd (n=', n, ' ), title= ',tdiag(n)
199 CALL PRINT_ERROR( msgBuf , myThid )
200 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SET_LEVELS'
201 ENDIF
202 ENDDO
203 ENDIF
204 ENDDO
205
206 C-- Check that number of levels to write (in data.diagnostics) does not
207 C exceeds max size: nlevs=max(Nr,NrPhys)
208 C note: max size of array to write has been changed to "numLevels",
209 C so that this checking is no longer usefull since nlevels
210 C cannot be larger than "numLevels" anyway.
211
212 _END_MASTER( myThid )
213
214 C-- Everyone else must wait for the levels to be set
215 _BARRIER
216
217 RETURN
218 END

  ViewVC Help
Powered by ViewVC 1.1.22