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

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

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


Revision 1.9 - (show annotations) (download)
Sat May 14 20:45:28 2005 UTC (19 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57h_done, checkpoint57h_post
Changes since 1.8: +13 -4 lines
output frequency is now defined in seconds => Needs to change data.diagnostics

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_readparms.F,v 1.8 2005/05/13 18:22:52 molod Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP 0
8 C !ROUTINE: DIAGNOSTICS_READPARMS
9
10 C !INTERFACE:
11 SUBROUTINE DIAGNOSTICS_READPARMS(myThid)
12
13 C !DESCRIPTION:
14 C Read Diagnostics Namelists to specify output sequence.
15
16 C !USES:
17 IMPLICIT NONE
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 #include "DIAGNOSTICS_SIZE.h"
22 #include "DIAGNOSTICS.h"
23
24 C !INPUT PARAMETERS:
25 INTEGER myThid
26 CEOP
27
28 C !LOCAL VARIABLES:
29 C ldimLoc :: Max Number of Lists
30 C kdimLoc :: Max Number of Levels
31 C fdimLoc :: Max Number of Fields
32 C frequency :: Frequency of Output (ouput every "frequency" iteration)
33 C levels :: List Output Levels
34 C fields :: List Output Fields
35 C filename :: List Output Filename
36 INTEGER ldimLoc, kdimLoc, fdimLoc
37 PARAMETER ( ldimLoc = 2*numlists )
38 PARAMETER ( kdimLoc = 2*numLevels )
39 PARAMETER ( fdimLoc = 2*numperlist )
40 _RL frequency(ldimLoc), timePhase(ldimLoc)
41 _RL levels(kdimLoc,ldimLoc)
42 CHARACTER*8 fields(fdimLoc,ldimLoc)
43 CHARACTER*80 filename(ldimLoc), blkFilName
44 CHARACTER*8 fileflags(ldimLoc)
45 CHARACTER*8 blk8c
46 CHARACTER*(MAX_LEN_MBUF) msgBuf
47 INTEGER ku, stdUnit
48 INTEGER k,l,n,m,iL
49 _RL undef, getcon
50 INTEGER ILNBLNK
51 EXTERNAL ILNBLNK
52
53 NAMELIST / diagnostics_list /
54 & frequency, timePhase, levels, fields, filename, fileflags,
55 & diag_mnc,
56 & diag_pickup_read, diag_pickup_write,
57 & diag_pickup_read_mnc, diag_pickup_write_mnc
58
59 C Initialize and Read Diagnostics Namelist
60 _BEGIN_MASTER(myThid)
61
62 undef = getcon('UNDEF')
63 blk8c = ' '
64 DO k=1,LEN(blkFilName)
65 blkFilName(k:k) = ' '
66 ENDDO
67
68 DO l = 1,ldimLoc
69 frequency(l) = 0.
70 timePhase(l) = UNSET_RL
71 filename (l) = blkFilName
72 C eight spaces: 12345678
73 fileflags(l)(1:8) = ' '
74 DO k = 1,kdimLoc
75 levels (k,l) = undef
76 ENDDO
77 DO m = 1,fdimLoc
78 fields (m,l) = blk8c
79 ENDDO
80 ENDDO
81 diag_mnc = useMNC
82 diag_pickup_read = .FALSE.
83 diag_pickup_write = .FALSE.
84 diag_pickup_read_mnc = .FALSE.
85 diag_pickup_write_mnc = .FALSE.
86
87 WRITE(msgBuf,'(A)')
88 & ' DIAGNOSTICS_READPARMS: opening data.diagnostics'
89 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,SQUEEZE_RIGHT,1)
90
91 CALL OPEN_COPY_DATA_FILE('data.diagnostics',
92 & 'DIAGNOSTICS_READPARMS', ku, myThid )
93 READ (ku,NML=diagnostics_list)
94 CLOSE (ku)
95
96 C Initialise diag_choices common block
97 nlists = 0
98 DO n = 1,numlists
99 freq(n) = 0.
100 phase(n) = 0.
101 nlevels(n) = 0
102 nfields(n) = 0
103 fnames(n) = blkFilName
104 DO k = 1,numLevels
105 levs(k,n) = 0
106 ENDDO
107 DO m = 1,numperlist
108 flds(m,n) = blk8c
109 jdiag(m,n) = 0
110 ENDDO
111 ENDDO
112
113 C Fill Diagnostics Common Block with Namelist Info
114 diag_mnc = diag_mnc .AND. useMNC
115 diag_mdsio = (.NOT. diag_mnc) .OR. outputTypesInclusive
116 diag_pickup_read_mnc = diag_pickup_read_mnc .AND. diag_mnc
117 diag_pickup_write_mnc = diag_pickup_write_mnc .AND. diag_mnc
118 diag_pickup_read_mdsio =
119 & diag_pickup_read .AND. (.NOT. diag_pickup_read_mnc)
120 diag_pickup_write_mdsio = diag_pickup_write .AND.
121 & ((.NOT. diag_pickup_write_mnc) .OR. outputTypesInclusive)
122
123 DO l = 1,ldimLoc
124 iL = ILNBLNK(filename(l))
125 IF ( frequency(l).NE.0. .AND. iL.EQ.0 ) THEN
126 WRITE(msgBuf,'(2A,I3,A,I6)') 'DIAGNOSTICS_READPARMS: ',
127 & 'Empty File-name ! (list l=', l, ' ), freq:',frequency(l)
128 CALL PRINT_ERROR( msgBuf , myThid )
129 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
130 ENDIF
131 IF ( frequency(l).NE.0. .AND. nlists.LT.numlists ) THEN
132 n = nlists + 1
133 freq(n) = frequency(l)
134 IF ( timePhase(l).NE. UNSET_RL ) THEN
135 phase(n) = timePhase(l)
136 ELSEIF ( frequency(l) .LT. 0. ) THEN
137 phase(n) = -0.5 _d 0 * frequency(l)
138 ENDIF
139 fnames(n) = filename (l)
140 fflags(n) = fileflags(l)
141 nlevels(n) = 0
142 IF ( levels(1,l).NE.undef ) THEN
143 DO k=1,kdimLoc
144 IF ( levels(k,l).NE.undef .AND.
145 & nlevels(n).LT.numLevels ) THEN
146 nlevels(n) = nlevels(n) + 1
147 levs(nlevels(n),n) = levels(k,l)
148 ELSEIF ( levels(k,l).NE.undef ) THEN
149 WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
150 & 'Exceed Max.Num. of Levels numLevels=', numLevels
151 CALL PRINT_ERROR( msgBuf , myThid )
152 WRITE(msgBuf,'(2A,I3,A,F3.0)') 'DIAGNOSTICS_READPARMS: ',
153 & 'when trying to add level(k=', k, ' )=', levels(k,l)
154 CALL PRINT_ERROR( msgBuf , myThid )
155 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
156 & ' for list l=', l, ', filename: ', filename(l)
157 CALL PRINT_ERROR( msgBuf , myThid )
158 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
159 ENDIF
160 ENDDO
161 ELSE
162 C- will set levels later, once the Nb of levels of each diag is known
163 nlevels(n) = -1
164 ENDIF
165 nfields(n) = 0
166 DO m=1,fdimLoc
167 IF ( fields(m,l).NE.blk8c .AND.
168 & nfields(n).LT.numperlist ) THEN
169 nfields(n) = nfields(n) + 1
170 flds(nfields(n),n) = fields(m,l)
171 ELSEIF ( fields(m,l).NE.blk8c ) THEN
172 WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
173 & 'Exceed Max.Num. of Fields/list numperlist=', numperlist
174 CALL PRINT_ERROR( msgBuf , myThid )
175 WRITE(msgBuf,'(2A,I3,3A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
176 & 'when trying to add field (m=', m, ' ): ',fields(m,l)
177 CALL PRINT_ERROR( msgBuf , myThid )
178 WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
179 & ' in list l=', l, ', filename: ', filename(l)
180 CALL PRINT_ERROR( msgBuf , myThid )
181 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
182 ENDIF
183 ENDDO
184 nlists = nlists + 1
185 c write(6,*) 'list summary:',n,nfields(n),nlevels(n)
186 ELSEIF ( frequency(l).NE.0. ) THEN
187 WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
188 & 'Exceed Max.Num. of list numlists=', numlists
189 CALL PRINT_ERROR( msgBuf , myThid )
190 WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
191 & 'when trying to add list l=', l
192 CALL PRINT_ERROR( msgBuf , myThid )
193 WRITE(msgBuf,'(2A,I6,2A)') 'DIAGNOSTICS_READPARMS: ',
194 & ' Frq=', frequency(l), ', filename: ', filename(l)
195 CALL PRINT_ERROR( msgBuf , myThid )
196 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
197 ENDIF
198 ENDDO
199
200 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
201 C Echo History List Data Structure
202 stdUnit = standardMessageUnit
203 WRITE(msgBuf,'(A)')
204 & '-----------------------------------------------------'
205 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
206 WRITE(msgBuf,'(A)')
207 & ' DIAGNOSTICS_READPARMS: active diagnostics summary:'
208 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
209 WRITE(msgBuf,'(A)')
210 & '-----------------------------------------------------'
211 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
212 DO n = 1,nlists
213 WRITE(msgBuf,'(2a)') 'Creating Output Stream: ',fnames(n)
214 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
215 c WRITE(msgBuf,*) 'Frequency: ',freq(n)
216 WRITE(msgBuf,'(2(A,F17.6))') 'Frequency : ',freq(n),
217 & ' ; Phase: ', phase(n)
218 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
219 IF ( nlevels(n).EQ.-1 ) THEN
220 WRITE(msgBuf,'(A,A)') ' Levels: ','will be set later'
221 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
222 ELSE
223 DO l=1,nlevels(n),20
224 m = MIN(nlevels(n),l+19)
225 WRITE(msgBuf,'(A,20F5.0)') ' Levels: ', (levs(k,n),k=l,m)
226 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
227 ENDDO
228 ENDIF
229 WRITE(msgBuf,*) 'Fields: ',(' ',flds(l,n),l=1,nfields(n))
230 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
231 ENDDO
232 WRITE(msgBuf,'(A)')
233 & '-----------------------------------------------------'
234 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
235 WRITE(msgBuf,'(A)')
236 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
237
238 _END_MASTER(myThid)
239
240 RETURN
241 END

  ViewVC Help
Powered by ViewVC 1.1.22