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

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

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


Revision 1.5 - (hide annotations) (download)
Sun Feb 20 04:31:54 2005 UTC (19 years, 3 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57e_post, eckpoint57e_pre
Changes since 1.4: +14 -2 lines
 o diagnostics: add pickup functionality
   - off by default for backwards compatibility
   - current version only uses MDSIO -- MNC will be added

1 edhill 1.5 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_readparms.F,v 1.4 2005/02/07 20:49:09 jmc Exp $
2 jmc 1.1 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 jmc 1.3
16 jmc 1.1 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     INTEGER frequency(ldimLoc)
41     _RL levels(kdimLoc,ldimLoc)
42     CHARACTER*8 fields(fdimLoc,ldimLoc)
43     CHARACTER*8 filename(ldimLoc)
44     CHARACTER*8 blk8c
45     CHARACTER*(MAX_LEN_MBUF) msgBuf
46     INTEGER ku, stdUnit
47     INTEGER k,l,n,m
48     _RL undef, getcon
49    
50     NAMELIST / diagnostics_list /
51     & frequency, levels, fields, filename,
52 edhill 1.5 & diag_mnc,
53     & diag_pickup_read, diag_pickup_write,
54     & diag_pickup_read_mnc, diag_pickup_write_mnc
55 jmc 1.1
56     C Initialize and Read Diagnostics Namelist
57     _BEGIN_MASTER(myThid)
58    
59     undef = getcon('UNDEF')
60     blk8c = ' '
61    
62     DO l = 1,ldimLoc
63     frequency(l) = 0
64     DO k = 1,kdimLoc
65     levels (k,l) = undef
66     ENDDO
67     DO m = 1,fdimLoc
68     fields (m,l) = blk8c
69     ENDDO
70     ENDDO
71 jmc 1.4 diag_mnc = useMNC
72 edhill 1.5 diag_pickup_read = .FALSE.
73     diag_pickup_write = .FALSE.
74     diag_pickup_read_mnc = .FALSE.
75     diag_pickup_write_mnc = .FALSE.
76 jmc 1.1
77     WRITE(msgBuf,'(A)')
78     & ' DIAGNOSTICS_READPARMS: opening data.diagnostics'
79     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,SQUEEZE_RIGHT,1)
80 jmc 1.3
81     CALL OPEN_COPY_DATA_FILE('data.diagnostics',
82 jmc 1.1 & 'DIAGNOSTICS_READPARMS', ku, myThid )
83     READ (ku,NML=diagnostics_list)
84     CLOSE (ku)
85    
86     C Initialise diag_choices common block
87     nlists = 0
88     DO n = 1,numlists
89     freq(n) = 0
90     nlevels(n) = 0
91     nfields(n) = 0
92     fnames(n) = blk8c
93     DO k = 1,numLevels
94     levs(k,n) = 0
95     ENDDO
96     DO m = 1,numperlist
97     flds(m,n) = ' '
98     jdiag(m,n) = 0
99     ENDDO
100     ENDDO
101    
102     C Fill Diagnostics Common Block with Namelist Info
103 jmc 1.4 diag_mnc = diag_mnc .AND. useMNC
104     diag_mdsio = (.NOT. diag_mnc) .OR. outputTypesInclusive
105 edhill 1.5 diag_pickup_read_mnc = diag_pickup_read_mnc .AND. diag_mnc
106     diag_pickup_write_mnc = diag_pickup_write_mnc .AND. diag_mnc
107     diag_pickup_read_mdsio =
108     & diag_pickup_read .AND. (.NOT. diag_pickup_read_mnc)
109     diag_pickup_write_mdsio = diag_pickup_write .AND.
110     & ((.NOT. diag_pickup_write_mnc) .OR. outputTypesInclusive)
111 jmc 1.3
112 jmc 1.1 DO l = 1,ldimLoc
113     IF ( frequency(l).NE.0 .AND. nlists.LT.numlists ) THEN
114     n = nlists + 1
115     freq(n) = frequency(l)
116     fnames(n) = filename (l)
117     nlevels(n) = 0
118     IF ( levels(1,l).NE.undef ) THEN
119     DO k=1,kdimLoc
120 jmc 1.3 IF ( levels(k,l).NE.undef .AND.
121 jmc 1.1 & nlevels(n).LT.numLevels ) THEN
122     nlevels(n) = nlevels(n) + 1
123     levs(nlevels(n),n) = levels(k,l)
124     ELSEIF ( levels(k,l).NE.undef ) THEN
125     WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
126     & 'Exceed Max.Num. of Levels numLevels=', numLevels
127     CALL PRINT_ERROR( msgBuf , myThid )
128     WRITE(msgBuf,'(2A,I3,A,F3.0)') 'DIAGNOSTICS_READPARMS: ',
129 jmc 1.3 & 'when trying to add level(k=', k, ' )=', levels(k,l)
130 jmc 1.1 CALL PRINT_ERROR( msgBuf , myThid )
131     WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
132     & ' for list l=', l, ', filename: ', filename(l)
133     CALL PRINT_ERROR( msgBuf , myThid )
134     STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
135     ENDIF
136     ENDDO
137     ELSE
138 jmc 1.3 C- will set levels later, once the Nb of levels of each diag is known
139     nlevels(n) = -1
140 jmc 1.1 ENDIF
141     nfields(n) = 0
142     DO m=1,fdimLoc
143 jmc 1.3 IF ( fields(m,l).NE.blk8c .AND.
144 jmc 1.1 & nfields(n).LT.numperlist ) THEN
145     nfields(n) = nfields(n) + 1
146     flds(nfields(n),n) = fields(m,l)
147 jmc 1.2 ELSEIF ( fields(m,l).NE.blk8c ) THEN
148 jmc 1.1 WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
149     & 'Exceed Max.Num. of Fields/list numperlist=', numperlist
150     CALL PRINT_ERROR( msgBuf , myThid )
151     WRITE(msgBuf,'(2A,I3,3A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
152     & 'when trying to add field (m=', m, ' ): ',fields(m,l)
153     CALL PRINT_ERROR( msgBuf , myThid )
154     WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
155     & ' in list l=', l, ', filename: ', filename(l)
156     CALL PRINT_ERROR( msgBuf , myThid )
157     STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
158     ENDIF
159     ENDDO
160     nlists = nlists + 1
161 jmc 1.2 c write(6,*) 'list summary:',n,nfields(n),nlevels(n)
162 jmc 1.1 ELSEIF ( frequency(l).NE.0 ) THEN
163     WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
164     & 'Exceed Max.Num. of list numlists=', numlists
165     CALL PRINT_ERROR( msgBuf , myThid )
166     WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
167     & 'when trying to add list l=', l
168     CALL PRINT_ERROR( msgBuf , myThid )
169     WRITE(msgBuf,'(2A,I6,2A)') 'DIAGNOSTICS_READPARMS: ',
170     & ' Frq=', frequency(l), ', filename: ', filename(l)
171     CALL PRINT_ERROR( msgBuf , myThid )
172     STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
173     ENDIF
174     ENDDO
175    
176     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
177     C Echo History List Data Structure
178     stdUnit = standardMessageUnit
179     WRITE(msgBuf,'(A)')
180     & '-----------------------------------------------------'
181     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
182     WRITE(msgBuf,'(A)')
183     & ' DIAGNOSTICS_READPARMS: active diagnostics summary:'
184     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
185     WRITE(msgBuf,'(A)')
186     & '-----------------------------------------------------'
187     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
188     DO n = 1,nlists
189     WRITE(msgBuf,'(2a)') 'Creating Output Stream: ',fnames(n)
190     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
191     WRITE(msgBuf,*) 'Frequency: ',freq(n)
192     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
193 jmc 1.3 IF ( nlevels(n).EQ.-1 ) THEN
194     WRITE(msgBuf,'(A,A)') ' Levels: ','will be set later'
195     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
196     ELSE
197     DO l=1,nlevels(n),20
198 jmc 1.1 m = MIN(nlevels(n),l+19)
199     WRITE(msgBuf,'(A,20F5.0)') ' Levels: ', (levs(k,n),k=l,m)
200     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
201 jmc 1.3 ENDDO
202     ENDIF
203 jmc 1.1 WRITE(msgBuf,*) 'Fields: ',(' ',flds(l,n),l=1,nfields(n))
204     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
205     ENDDO
206     WRITE(msgBuf,'(A)')
207     & '-----------------------------------------------------'
208     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
209     WRITE(msgBuf,'(A)')
210     CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
211    
212     _END_MASTER(myThid)
213    
214     RETURN
215     END

  ViewVC Help
Powered by ViewVC 1.1.22