/[MITgcm]/MITgcm/pkg/ptracers/ptracers_readparms.F
ViewVC logotype

Contents of /MITgcm/pkg/ptracers/ptracers_readparms.F

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


Revision 1.18 - (show annotations) (download)
Mon Feb 7 19:07:18 2005 UTC (19 years, 4 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57g_pre, checkpoint57g_post, checkpoint57d_post, checkpoint57f_post, checkpoint57h_pre, checkpoint57e_post, eckpoint57e_pre, checkpoint57f_pre
Changes since 1.17: +1 -5 lines
 o remove unnecessary flags

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_readparms.F,v 1.17 2004/12/20 16:22:22 mlosch Exp $
2 C $Name: $
3
4 #include "PTRACERS_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: PTRACERS_READPARMS
9
10 C !INTERFACE:
11 SUBROUTINE PTRACERS_READPARMS( myThid )
12
13 C !DESCRIPTION:
14 C Initialize PTRACERS parameters, read in data.ptracers
15
16 C !USES:
17 IMPLICIT NONE
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PTRACERS_SIZE.h"
21 #include "PTRACERS.h"
22 #include "PARAMS.h"
23
24 C !INPUT PARAMETERS:
25 INTEGER myThid
26 CEOP
27
28 #ifdef ALLOW_PTRACERS
29
30 C !LOCAL VARIABLES:
31 C k,iTracer :: loop indices
32 C iUnit :: unit number for I/O
33 C msgBuf :: message buffer
34 INTEGER k, iTracer
35 INTEGER iUnit
36 INTEGER ic
37 CHARACTER*(MAX_LEN_MBUF) msgBuf
38 _RL PTRACERS_diffKr(PTRACERS_num)
39
40 C PTRACERS_taveFreq :: Frequency with which time-averaged PTRACERS
41 C are written to post-processing files.
42 NAMELIST /PTRACERS_PARM01/
43 & PTRACERS_dumpFreq,
44 & PTRACERS_taveFreq,
45 & PTRACERS_monitorFreq,
46 & PTRACERS_advScheme,
47 & PTRACERS_ImplVertAdv,
48 & PTRACERS_diffKh,
49 & PTRACERS_diffK4,
50 & PTRACERS_diffKr,
51 & PTRACERS_diffKrNr,
52 & PTRACERS_useGMRedi,
53 & PTRACERS_useKPP,
54 & PTRACERS_numInUse,
55 & PTRACERS_initialFile,
56 & PTRACERS_useRecords,
57 & PTRACERS_names,
58 & PTRACERS_long_names,
59 & PTRACERS_units,
60 & PTRACERS_write_mnc
61
62 C This routine has been called by the main model so we set our
63 C internal flag to indicate we are in business
64 PTRACERSisON=.TRUE.
65
66 C Set defaults values for parameters in PTRACERS.h
67 PTRACERS_dumpFreq = dumpFreq
68 PTRACERS_taveFreq = taveFreq
69 PTRACERS_monitorFreq = monitorFreq
70 PTRACERS_numInUse=-1
71 DO iTracer=1,PTRACERS_num
72 PTRACERS_advScheme(iTracer)=saltAdvScheme
73 PTRACERS_ImplVertAdv(iTracer) = .FALSE.
74 PTRACERS_diffKh(iTracer)=diffKhS
75 PTRACERS_diffK4(iTracer)=diffK4S
76 PTRACERS_diffKr(iTracer)=UNSET_RL
77 DO k=1,Nr
78 PTRACERS_diffKrNr(k,iTracer)=diffKrNrS(k)
79 ENDDO
80 PTRACERS_useGMRedi(iTracer)=useGMRedi
81 PTRACERS_useKPP(iTracer)=useKPP
82 PTRACERS_initialFile(iTracer)=' '
83 DO ic = 1,MAX_LEN_FNAM
84 PTRACERS_names(iTracer)(ic:ic) = ' '
85 PTRACERS_long_names(iTracer)(ic:ic) = ' '
86 PTRACERS_units(iTracer)(ic:ic) = ' '
87 ENDDO
88 ENDDO
89 PTRACERS_useRecords = .FALSE.
90 PTRACERS_write_mdsio = .TRUE.
91 PTRACERS_write_mnc = .FALSE.
92
93 C Open and read the data.ptracers file
94 _BEGIN_MASTER(myThid)
95 WRITE(msgBuf,'(A)') ' PTRACERS_READPARMS: opening data.ptracers'
96 CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
97 & SQUEEZE_RIGHT , 1)
98 CALL OPEN_COPY_DATA_FILE(
99 I 'data.ptracers', 'PTRACERS_READPARMS',
100 O iUnit,
101 I myThid )
102 READ(UNIT=iUnit,NML=PTRACERS_PARM01)
103 WRITE(msgBuf,'(A)')
104 & ' PTRACERS_READPARMS: finished reading data.ptracers'
105 CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
106 & SQUEEZE_RIGHT , 1)
107
108 C Close the open data file
109 CLOSE(iUnit)
110 _END_MASTER(myThid)
111
112 C Everyone else must wait for the parameters to be loaded
113 _BARRIER
114
115 C Now set-up any remaining parameters that result from the input
116 C parameters
117
118 C If PTRACERS_numInUse was not set in data.ptracers then we can
119 C assume that all PTRACERS fields will be in use
120 IF (PTRACERS_numInUse.LT.0) THEN
121 PTRACERS_numInUse=PTRACERS_num
122 ENDIF
123 C Check we are not trying to use more tracers than allowed
124 IF (PTRACERS_numInUse.GT.PTRACERS_num) THEN
125 WRITE(msgBuf,'(A,I2,A,I2,A)')
126 & ' PTRACERS_READPARMS: You requested ',PTRACERS_numInUse,
127 & ' tracers at run time when only ',PTRACERS_num,
128 & ' were specified at compile time. Naughty! '
129 CALL PRINT_ERROR(msgBuf, 1)
130 STOP 'ABNORMAL END: S/R PTRACERS_READPARMS'
131 ENDIF
132 C Check that enough parameters were specified
133 DO iTracer=1,PTRACERS_numInUse
134 IF (PTRACERS_advScheme(iTracer).EQ.0) THEN
135 WRITE(msgBuf,'(A,A,I2)')
136 & ' PTRACERS_READPARMS: ',
137 & 'No advect. scheme specified for tracer #',
138 & iTracer
139 CALL PRINT_ERROR(msgBuf, 1)
140 STOP 'ABNORMAL END: S/R PTRACERS_READPARMS'
141 ENDIF
142 ENDDO
143 #ifndef INCLUDE_IMPLVERTADV_CODE
144 DO iTracer=1,PTRACERS_numInUse
145 IF ( PTRACERS_ImplVertAdv(iTracer) ) THEN
146 WRITE(msgBuf,'(A)')
147 & 'PTRACERS_READPARMS: #undef INCLUDE_IMPLVERTADV_CODE'
148 CALL PRINT_ERROR( msgBuf , myThid)
149 WRITE(msgBuf,'(2A,I2,A)') 'PTRACERS_READPARMS:',
150 & ' but pTracers_ImplVertAdv(',iTracer,' ) is TRUE'
151 CALL PRINT_ERROR( msgBuf , myThid)
152 STOP 'ABNORMAL END: S/R PTRACERS_READPARMS'
153 ENDIF
154 ENDDO
155 #endif
156 DO iTracer=1,PTRACERS_numInUse
157 PTRACERS_useGMRedi(iTracer) = PTRACERS_useGMRedi(iTracer)
158 & .AND.useGMRedi
159 PTRACERS_useKPP(iTracer) = PTRACERS_useKPP(iTracer)
160 & .AND.useKPP
161 IF ( PTRACERS_diffKr(iTracer).NE.UNSET_RL ) THEN
162 DO k=1,Nr
163 PTRACERS_diffKrNr(k,iTracer)=PTRACERS_diffKr(iTracer)
164 ENDDO
165 ENDIF
166 ENDDO
167
168 #ifdef ALLOW_MNC
169 IF (useMNC) THEN
170 C Set the default I/O Types
171 IF ( (.NOT. outputTypesInclusive)
172 & .AND. PTRACERS_write_mnc ) PTRACERS_write_mdsio = .FALSE.
173
174 C Initialize the MNC variable types for PTRACERS
175 CALL PTRACERS_MNC_INIT( myThid )
176 ENDIF
177 #endif /* ALLOW_MNC */
178
179 C-- Print a summary of pTracer parameter values:
180 iUnit = standardMessageUnit
181 WRITE(msgBuf,'(A)') '// ==================================='
182 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , 1)
183 WRITE(msgBuf,'(A)') '// PTRACERS parameters '
184 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , 1)
185 WRITE(msgBuf,'(A)') '// ==================================='
186 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , 1)
187 CALL WRITE_0D_I( PTRACERS_numInUse, INDEX_NONE,
188 & 'PTRACERS_numInUse =',
189 & ' /* number of tracers */')
190 CALL WRITE_0D_R8(PTRACERS_dumpFreq, INDEX_NONE,
191 & 'PTRACERS_dumpFreq =',
192 & ' /* Frequency^-1 for snapshot output (s) */')
193 CALL WRITE_0D_R8(PTRACERS_taveFreq, INDEX_NONE,
194 & 'PTRACERS_taveFreq =',
195 & ' /* Frequency^-1 for time-Aver. output (s) */')
196 CALL WRITE_0D_L( PTRACERS_useRecords, INDEX_NONE,
197 & 'PTRACERS_useRecords =', ' /* all tracers in 1 file */')
198 CALL WRITE_0D_L( PTRACERS_write_mdsio, INDEX_NONE,
199 & 'PTRACERS_write_mdsio =', ' /* write mdsio files */')
200 CALL WRITE_0D_L( PTRACERS_write_mnc, INDEX_NONE,
201 & 'PTRACERS_write_mnc =', ' /* write mnc files */')
202
203 DO iTracer=1,PTRACERS_numInUse
204 WRITE(msgBuf,'(A)') ' -----------------------------------'
205 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , 1)
206 WRITE(msgBuf,'(A,I4)') ' tracer number : ',iTracer
207 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , 1)
208 CALL WRITE_0D_I( PTRACERS_advScheme(iTracer), INDEX_NONE,
209 & 'PTRACERS_advScheme =', ' /* Advection Scheme */')
210 CALL WRITE_0D_L( PTRACERS_ImplVertAdv(iTracer), INDEX_NONE,
211 & 'PTRACERS_ImplVertAdv =',
212 & ' /* implicit vert. advection flag */')
213 CALL WRITE_0D_R8( PTRACERS_diffKh(iTracer), INDEX_NONE,
214 & 'PTRACERS_diffKh =', ' /* Laplacian Diffusivity */')
215 CALL WRITE_0D_R8( PTRACERS_diffK4(iTracer), INDEX_NONE,
216 & 'PTRACERS_diffK4 =', ' /* Biharmonic Diffusivity */')
217 CALL WRITE_1D_R8( PTRACERS_diffKrNr(1,iTracer), Nr, INDEX_K,
218 & 'PTRACERS_diffKrNr =', ' /* Vertical Diffusivity */')
219 CALL WRITE_0D_L( PTRACERS_useGMRedi(iTracer), INDEX_NONE,
220 & 'PTRACERS_useGMRedi =', ' /* apply GM-Redi */')
221 CALL WRITE_0D_L( PTRACERS_useKPP(iTracer), INDEX_NONE,
222 & 'PTRACERS_useKPP =', ' /* apply KPP scheme */')
223
224 ENDDO
225 WRITE(msgBuf,'(A)') ' -----------------------------------'
226 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT , 1)
227 #endif /* ALLOW_PTRACERS */
228
229 RETURN
230 END
231

  ViewVC Help
Powered by ViewVC 1.1.22