/[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.6 - (show annotations) (download)
Sun Feb 13 23:26:03 2005 UTC (19 years, 3 months ago) by jmc
Branch: MAIN
Changes since 1.5: +14 -2 lines
add a new type of levels "G" for multi-levels ground variables (in land pkg)

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

  ViewVC Help
Powered by ViewVC 1.1.22