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

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

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


Revision 1.7 - (hide annotations) (download)
Tue Feb 15 02:19:52 2005 UTC (19 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57g_post, checkpoint57e_post, checkpoint57g_pre, checkpoint57f_pre, eckpoint57e_pre, checkpoint57h_done, checkpoint57f_post, checkpoint57h_pre, checkpoint57h_post
Changes since 1.6: +2 -2 lines
update comment

1 jmc 1.7 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_set_levels.F,v 1.6 2005/02/13 23:26:03 jmc Exp $
2 jmc 1.1 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 jmc 1.6 C & G & levels = Ground_level Number \\
28     C & I & levels = sea-Ice_level Number \\
29 jmc 1.1 C \end{tabular}
30     C \end{center}
31    
32     C !USES:
33     IMPLICIT NONE
34    
35     #include "SIZE.h"
36 jmc 1.6 #define SIZE_IS_SET
37 jmc 1.1 #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 jmc 1.6 #ifdef ALLOW_LAND
50     #include "LAND_SIZE.h"
51     #else
52     INTEGER land_nLev
53     PARAMETER ( land_nLev = 0 )
54     #endif
55    
56 jmc 1.1 C !INPUT PARAMETERS:
57 jmc 1.2 C myThid :: my Thread Id number
58 jmc 1.1 INTEGER myThid
59     CEOP
60    
61 jmc 1.2 C !LOCAL VARIABLES:
62 jmc 1.6 INTEGER l, n, nlevs, nGroundLev
63 jmc 1.2 INTEGER dUnit, stdUnit
64     CHARACTER*(MAX_LEN_MBUF) msgBuf
65     CHARACTER*(72) ccHead, ccLine
66 jmc 1.3 CHARACTER*8 blk8c
67 jmc 1.2 INTEGER ILNBLNK
68     EXTERNAL ILNBLNK
69    
70 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
71    
72     nlevs = MAX(Nr,Nrphys)
73 jmc 1.6 nGroundLev = land_nLev
74 jmc 1.1
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 jmc 1.6 IF (gdiag(n)(10:10) .EQ. 'G') kdiag(n) = nGroundLev
84 jmc 1.1 ENDDO
85    
86 jmc 1.2 _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 jmc 1.7 & 'available_diagnostics.log'
104 jmc 1.2 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 jmc 1.4 OPEN(dUnit, file='available_diagnostics.log',
115     & status='unknown', form='formatted')
116 jmc 1.2 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 jmc 1.3
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 jmc 1.5 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 jmc 1.2 _END_MASTER( myThid )
183    
184 jmc 1.1 RETURN
185     END

  ViewVC Help
Powered by ViewVC 1.1.22