/[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.10 - (show annotations) (download)
Sun Oct 22 01:00:51 2006 UTC (17 years, 7 months ago) by heimbach
Branch: MAIN
Changes since 1.9: +3 -1 lines
Preparing diagnostics for pkg/seaice

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_set_levels.F,v 1.9 2006/07/30 01:19:18 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, nlevs, nGroundLev
63 INTEGER dUnit, stdUnit
64 CHARACTER*(MAX_LEN_MBUF) msgBuf
65 CHARACTER*(72) ccHead, ccLine
66 CHARACTER*8 blk8c
67 INTEGER ILNBLNK
68 EXTERNAL ILNBLNK
69
70 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
71
72 _BEGIN_MASTER( myThid )
73
74 nlevs = MAX(Nr,Nrphys)
75 nGroundLev = land_nLev
76
77 c Diagnostic Levels
78 c -----------------
79 DO n = 1,ndiagt
80 IF (gdiag(n)(10:10) .EQ. '0') THEN
81 kdiag(n) = 0
82 ELSEIF (gdiag(n)(10:10) .EQ. '1') THEN
83 kdiag(n) = 1
84 ELSEIF (gdiag(n)(10:10) .EQ. 'R') THEN
85 kdiag(n) = Nr
86 ELSEIF (gdiag(n)(10:10) .EQ. 'L') THEN
87 kdiag(n) = nlevs
88 ELSEIF (gdiag(n)(10:10) .EQ. 'M') THEN
89 kdiag(n) = nlevs - 1
90 ELSEIF (gdiag(n)(10:10) .EQ. 'G') THEN
91 kdiag(n) = nGroundLev
92 ELSEIF (gdiag(n)(10:10) .EQ. 'I') THEN
93 kdiag(n) = 3
94 ELSEIF (gdiag(n)(10:10) .NE. ' ') THEN
95 C- others: set 1 level:
96 kdiag(n) = 1
97 ENDIF
98 ENDDO
99
100 stdUnit = standardMessageUnit
101 WRITE(msgBuf,'(2A)')
102 & '------------------------------------------------------------'
103 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
104 WRITE(msgBuf,'(A)') 'DIAGNOSTICS_SET_LEVELS: done'
105 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
106 WRITE(msgBuf,'(A,I4)')
107 & ' Total Nb of available Diagnostics: ndiagt=', ndiagt
108 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
109
110 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
111 C write a summary of the (long) list of all available diagnostics:
112 IF ( debugLevel.GE.debLevA ) THEN
113
114 WRITE(msgBuf,'(2A)')
115 & ' write list of available Diagnostics to file: ',
116 & 'available_diagnostics.log'
117 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
118
119 WRITE(ccHead,'(2A)')
120 & ' Num |<-Name->|Levs|<-parsing code->|<-- Units -->|',
121 & '<- Tile (max=80c)'
122 DO l=1,LEN(ccLine)
123 ccLine(l:l) = '-'
124 ENDDO
125
126 CALL MDSFINDUNIT( dUnit, mythid )
127 OPEN(dUnit, file='available_diagnostics.log',
128 & status='unknown', form='formatted')
129 WRITE(dUnit,'(A,I4)')
130 & ' Total Nb of available Diagnostics: ndiagt=', ndiagt
131 WRITE(dUnit,'(A)') ccLine
132 WRITE(dUnit,'(A)') ccHead
133 WRITE(dUnit,'(A)') ccLine
134 DO n=1,ndiagt
135 IF ( MOD(n,100).EQ.0 ) THEN
136 WRITE(dUnit,'(A)') ccLine
137 WRITE(dUnit,'(A)') ccHead
138 WRITE(dUnit,'(A)') ccLine
139 ENDIF
140 l = ILNBLNK(tdiag(n))
141 IF (l.GE.1) THEN
142 WRITE(dUnit,'(I4,3A,I3,6A)') n,' |',cdiag(n),'|',
143 & kdiag(n),' |',gdiag(n),'|',udiag(n),'|',tdiag(n)(1:l)
144 ELSE
145 WRITE(dUnit,'(I4,3A,I3,6A)') n,' |',cdiag(n),'|',
146 & kdiag(n),' |',gdiag(n),'|',udiag(n),'|'
147 ENDIF
148 ENDDO
149 WRITE(dUnit,'(A)') ccLine
150 WRITE(dUnit,'(A)') ccHead
151 WRITE(dUnit,'(A)') ccLine
152 CLOSE(dUnit)
153
154 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
155 ENDIF
156
157 C-- Check for multiple definition of the same diagnostic name
158 blk8c = ' '
159 DO n = 2,ndiagt
160 IF ( cdiag(n).NE.blk8c ) THEN
161 DO l = 1,n-1
162 IF ( cdiag(l).EQ.cdiag(n) ) THEN
163 WRITE(msgBuf,'(4A)') 'DIAGNOSTICS_SET_LEVELS: ',
164 & 'diag.Name: ',cdiag(n),' registered 2 times :'
165 CALL PRINT_ERROR( msgBuf , myThid )
166 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_SET_LEVELS: ',
167 & '1rst (l=', l, ' ), title= ',tdiag(l)
168 CALL PRINT_ERROR( msgBuf , myThid )
169 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_SET_LEVELS: ',
170 & ' 2nd (n=', n, ' ), title= ',tdiag(n)
171 CALL PRINT_ERROR( msgBuf , myThid )
172 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SET_LEVELS'
173 ENDIF
174 ENDDO
175 ENDIF
176 ENDDO
177
178 C-- Check that number of levels to write (in data.diagnostics) does not
179 C exceeds max size: nlevs=max(Nr,NrPhys)
180 C- note: a better place would be in DIAGNOSTICS_CHECK but prefer to do it
181 C here where nlevs is defined.
182 DO n=1,nlists
183 IF ( nlevels(n).GT.nlevs ) THEN
184 WRITE(msgBuf,'(3A,I3,2A)') 'DIAGNOSTICS_SET_LEVELS: ',
185 & 'Ask for too many levels',
186 & ' in list n=', n, ', filename: ', fnames(n)
187 CALL PRINT_ERROR( msgBuf , myThid )
188 WRITE(msgBuf,'(2A,I4,A,I4)') 'DIAGNOSTICS_SET_LEVELS: ',
189 & ' number of lev= ', nlevels(n), ' exceeds Max=',nlevs
190 CALL PRINT_ERROR( msgBuf , myThid )
191 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SET_LEVELS'
192 ENDIF
193 ENDDO
194
195 _END_MASTER( myThid )
196
197 C-- Everyone else must wait for the levels to be set
198 _BARRIER
199
200 RETURN
201 END

  ViewVC Help
Powered by ViewVC 1.1.22