1 |
C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diag_readparms.F,v 1.18 2004/10/20 20:04:11 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: DIAG_READPARMS |
9 |
|
10 |
C !INTERFACE: |
11 |
SUBROUTINE DIAG_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 |
|
22 |
#include "diagnostics_SIZE.h" |
23 |
#include "diagnostics.h" |
24 |
|
25 |
C !INPUT PARAMETERS: |
26 |
integer myThid |
27 |
CEOP |
28 |
|
29 |
C !LOCAL VARIABLES: |
30 |
character*(MAX_LEN_MBUF) msgBuf |
31 |
integer ku |
32 |
integer l,n,m,ndim |
33 |
_RL undef, getcon |
34 |
parameter ( ndim = 100 ) ! Max Number of Levels,Fields,Lists |
35 |
integer frequency(ndim) ! Frequency of Output (hhmmss) |
36 |
_RL levels (ndim,ndim) ! List Output Levels |
37 |
character*8 fields(ndim,ndim) ! List Output Fields |
38 |
character*8 filename(ndim) ! List Output Filename |
39 |
character*8 blank |
40 |
LOGICAL diag_mdsio, diag_mnc |
41 |
INTEGER mnc_lev_used(ndim) |
42 |
integer levrest, ll |
43 |
|
44 |
namelist / diagnostics_list / |
45 |
& frequency, levels, fields, filename, |
46 |
& diag_mdsio, diag_mnc |
47 |
|
48 |
C Initialize and Read Diagnostics Namelist |
49 |
_BEGIN_MASTER(myThid) |
50 |
|
51 |
undef = getcon('UNDEF') |
52 |
blank = ' ' |
53 |
|
54 |
do n = 1,ndim |
55 |
frequency(n) = 0 |
56 |
do m = 1,ndim |
57 |
levels (n,m) = undef |
58 |
fields (n,m) = blank |
59 |
enddo |
60 |
enddo |
61 |
|
62 |
diag_mdsio = .true. |
63 |
diag_mnc = .false. |
64 |
|
65 |
#ifdef ALLOW_MNC |
66 |
IF (useMNC .and. diag_use_mnc) THEN |
67 |
do n = 1,ndim |
68 |
mnc_lev_used(n) = 0 |
69 |
enddo |
70 |
ENDIF |
71 |
#endif /* ALLOW_MNC */ |
72 |
|
73 |
WRITE(msgBuf,'(A)') ' DIAG_READPARMS: opening data.diagnostics' |
74 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,SQUEEZE_RIGHT,1) |
75 |
|
76 |
CALL OPEN_COPY_DATA_FILE('data.diagnostics', 'DIAG_READPARMS', |
77 |
. ku,myThid ) |
78 |
read (ku,NML=diagnostics_list) |
79 |
close (ku) |
80 |
|
81 |
|
82 |
C Initialise diag_choices common block |
83 |
nlists = 0 |
84 |
do n = 1,numlists |
85 |
freq(n) = 0 |
86 |
nlevels(n) = 0 |
87 |
nfields(n) = 0 |
88 |
fnames(n) = blank |
89 |
do m = 1,numperlist |
90 |
levs(m,n) = 0 |
91 |
flds(m,n) = ' ' |
92 |
enddo |
93 |
enddo |
94 |
|
95 |
C Fill Diagnostics Common Block with Namelist Info |
96 |
diag_use_mdsio = diag_mdsio |
97 |
diag_use_mnc = diag_mnc |
98 |
IF (diag_mnc .AND. (.NOT. outputTypesInclusive)) THEN |
99 |
diag_use_mdsio = .FALSE. |
100 |
ENDIF |
101 |
|
102 |
do n = 1,numlists |
103 |
if (frequency(n) .ne. 0) then |
104 |
nlists = nlists + 1 |
105 |
freq(n) = frequency(n) |
106 |
fnames(n) = filename (n) |
107 |
nlevels(n) = 0 |
108 |
nfields(n) = 0 |
109 |
do m=1,ndim |
110 |
if (levels(m,n) .ne. undef) then |
111 |
nlevels(n) = nlevels(n) + 1 |
112 |
endif |
113 |
if (fields(m,n) .ne. blank) nfields(n) = nfields(n) + 1 |
114 |
enddo |
115 |
if (levels(1,n) .ne. undef) then |
116 |
do m=1,nlevels(n) |
117 |
levs(m,n) = levels(m,n) |
118 |
enddo |
119 |
else |
120 |
nlevels(n) = Nr |
121 |
do m=1,nlevels(n) |
122 |
levs(m,n) = m |
123 |
enddo |
124 |
endif |
125 |
do m=1,nfields(n) |
126 |
flds(m,n) = fields(m,n) |
127 |
enddo |
128 |
endif |
129 |
enddo |
130 |
|
131 |
C Echo History List Data Structure |
132 |
do n = 1,nlists |
133 |
WRITE(msgBuf,'(2a)') 'Creating Output Stream: ',fnames(n) |
134 |
CALL PRINT_MESSAGE( |
135 |
& msgBuf, standardMessageUnit, SQUEEZE_RIGHT, mythid) |
136 |
WRITE(msgBuf,*) 'Frequency: ',freq(n) |
137 |
CALL PRINT_MESSAGE( |
138 |
& msgBuf, standardMessageUnit, SQUEEZE_RIGHT, mythid) |
139 |
do L=1,nlevels(n),20 |
140 |
levrest = min(nlevels(n)-L+1,20) |
141 |
WRITE(msgBuf,*) 'Levels: ',(levs(LL,n),LL=L,L+levrest-1) |
142 |
CALL PRINT_MESSAGE( |
143 |
& msgBuf, standardMessageUnit, SQUEEZE_RIGHT, mythid) |
144 |
enddo |
145 |
WRITE(msgBuf,*) 'Fields: ',(' ',flds(l,n),l=1,nfields(n)) |
146 |
CALL PRINT_MESSAGE( |
147 |
& msgBuf, standardMessageUnit, SQUEEZE_RIGHT, mythid) |
148 |
enddo |
149 |
|
150 |
1000 format(' ',a11,' ',20f4.0) |
151 |
_END_MASTER(myThid) |
152 |
|
153 |
return |
154 |
end |