/[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.8 - (hide annotations) (download)
Mon May 23 02:22:07 2005 UTC (19 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, checkpoint57t_post, checkpoint57o_post, checkpoint58e_post, checkpoint57m_post, checkpoint57s_post, checkpoint57k_post, checkpoint57i_post, checkpoint57y_post, checkpoint58h_post, checkpoint57y_pre, checkpoint57v_post, checkpoint58j_post, checkpoint57r_post, checkpoint58, checkpoint58f_post, checkpoint57x_post, checkpoint57n_post, checkpoint58d_post, checkpoint58c_post, checkpoint57w_post, checkpoint57p_post, checkpint57u_post, checkpoint58a_post, checkpoint58i_post, checkpoint57q_post, checkpoint58g_post, checkpoint57z_post, checkpoint58k_post, checkpoint57j_post, checkpoint58b_post, checkpoint58m_post, checkpoint57l_post
Changes since 1.7: +18 -8 lines
set kdiag to 1 when parser field gdiag(10:10) is not recognized

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

  ViewVC Help
Powered by ViewVC 1.1.22