/[MITgcm]/MITgcm/model/src/ini_parms.F
ViewVC logotype

Contents of /MITgcm/model/src/ini_parms.F

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


Revision 1.7 - (show annotations) (download)
Thu May 21 18:25:49 1998 UTC (26 years, 1 month ago) by cnh
Branch: MAIN
CVS Tags: checkpoint2
Changes since 1.6: +14 -5 lines
Added support for binary IO of model fields for restart and/or
postprocessing

1 C $Header: /u/gcmpack/models/MITgcmUV/model/src/ini_parms.F,v 1.6 1998/05/20 21:29:31 adcroft Exp $
2
3 #include "CPP_EEOPTIONS.h"
4
5 SUBROUTINE INI_PARMS( myThid )
6 C /==========================================================\
7 C | SUBROUTINE INI_PARMS |
8 C | o Routine to set model "parameters" |
9 C |==========================================================|
10 C | Notes: |
11 C | ====== |
12 C | The present version of this routine is a place-holder. |
13 C | A production version needs to handle parameters from an |
14 C | external file and possibly reading in some initial field |
15 C | values. |
16 C \==========================================================/
17
18 C === Global variables ===
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "PARAMS.h"
22 #include "CG2D.h"
23
24 C === Routine arguments ===
25 C myThid - Number of this instance of INI_PARMS
26 INTEGER myThid
27
28 C === Local variables ===
29 C dxSpacing, dySpacing - Default spacing in X and Y.
30 C Units are that of coordinate system
31 C i.e. cartesian => metres
32 C s. polar => degrees
33 C goptCount - Used to count the nuber of grid options
34 C (only one is allowed! )
35 C msgBuf - Informational/error meesage buffer
36 C errIO - IO error flag
37 C iUnit - Work variable for IO unit number
38 C record - Work variable for IO buffer
39 C K, I, J - Loop counters
40 REAL dxSpacing
41 REAL dySpacing
42 CHARACTER*(MAX_LEN_MBUF) msgBuf
43 CHARACTER*(MAX_LEN_PREC) record
44 INTEGER goptCount
45 INTEGER K, I, J, IL, iUnit
46 INTEGER errIO
47 INTEGER IFNBLNK
48 EXTERNAL IFNBLNK
49 INTEGER ILNBLNK
50 EXTERNAL ILNBLNK
51
52 C-- Continuous equation parameters
53 NAMELIST /PARM01/
54 & gravity, rhonil, tAlpha, sBeta, f0, beta,
55 & viscAh, viscAz, viscA4,
56 & diffKhT, diffKzT, diffK4T,
57 & diffKhS, diffKzS, diffK4S,
58 & GMmaxslope,GMlength,GMalpha,GMdepth,GMkbackground,
59 & tRef, sRef,
60 & momViscosity, momAdvection, momForcing, useCoriolis,
61 & tempDiffusion, tempAdvection, tempForcing,
62 & saltDiffusion, saltAdvection, saltForcing
63
64 C-- Elliptic solver parameters
65 NAMELIST /PARM02/
66 & cg2dMaxIters, cg2dChkResFreq, cg2dTargetResidual, cg2dpcOffDFac
67
68 C-- Time stepping parammeters
69 NAMELIST /PARM03/
70 & nIter0, nTimeSteps, deltaT, deltaTmom, deltaTtracer, abEps, tauCD, rCD,
71 & startTime, endTime, chkPtFreq, dumpFreq, deltaTClock, pChkPtFreq
72
73 C-- Gridding parameters
74 NAMELIST /PARM04/
75 & usingCartesianGrid, delZ, dxSpacing, dySpacing, delX, delY,
76 & usingSphericalPolarGrid, phiMin, thetaMin, rSphere,
77 & l, m, n
78
79 C
80 _BEGIN_MASTER(myThid)
81
82 C-- Open the parameter file
83 OPEN(UNIT=scrUnit1,STATUS='SCRATCH')
84 OPEN(UNIT=scrUnit2,STATUS='SCRATCH')
85 OPEN(UNIT=modelDataUnit,FILE='data',STATUS='OLD',err=1,IOSTAT=errIO)
86 IF ( errIO .GE. 0 ) GOTO 2
87 1 CONTINUE
88 WRITE(msgBuf,'(A)')
89 & 'S/R INI_PARMS'
90 CALL PRINT_ERROR( msgBuf , 1)
91 WRITE(msgBuf,'(A)')
92 & 'Unable to open model parameter'
93 CALL PRINT_ERROR( msgBuf , 1)
94 WRITE(msgBuf,'(A)')
95 & 'file "data"'
96 CALL PRINT_ERROR( msgBuf , 1)
97 CALL MODELDATA_EXAMPLE( myThid )
98 STOP 'ABNORMAL END: S/R INI_PARMS'
99 2 CONTINUE
100
101 1000 CONTINUE
102 READ(modelDataUnit,FMT='(A)',END=1001) RECORD
103 IL = MAX(ILNBLNK(RECORD),1)
104 IF ( RECORD(1:1) .NE. commentCharacter )
105 & WRITE(UNIT=scrUnit1,FMT='(A)') RECORD(:IL)
106 WRITE(UNIT=scrUnit2,FMT='(A)') RECORD(:IL)
107 GOTO 1000
108 1001 CONTINUE
109 CLOSE(modelDataUnit)
110
111 C-- Report contents of model parameter file
112 WRITE(msgBuf,'(A)')
113 &'// ======================================================='
114 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, SQUEEZE_RIGHT , 1)
115 WRITE(msgBuf,'(A)') '// Model parameter file "data"'
116 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, SQUEEZE_RIGHT , 1)
117 WRITE(msgBuf,'(A)')
118 &'// ======================================================='
119 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
120 & SQUEEZE_RIGHT , 1)
121 iUnit = scrUnit2
122 REWIND(iUnit)
123 2000 CONTINUE
124 READ(UNIT=iUnit,FMT='(A)',END=2001) RECORD
125 IL = MAX(ILNBLNK(RECORD),1)
126 WRITE(msgBuf,'(A,A)') '>',RECORD(:IL)
127 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, SQUEEZE_RIGHT , 1)
128 GOTO 2000
129 2001 CONTINUE
130 CLOSE(iUnit)
131 WRITE(msgBuf,'(A)') ' '
132 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
133 & SQUEEZE_RIGHT , 1)
134
135
136 C-- Read settings from model parameter file "data".
137 iUnit = scrUnit1
138 REWIND(iUnit)
139
140 C-- Set default "physical" parameters
141 DO K =1,Nz
142 tRef(K) = 30.D0 - FLOAT(K)
143 ENDDO
144 gravity = 9.81 D0
145 rhoNil = 999.8 D0
146 tAlpha=2.d-4
147 sBeta=1.d-5
148 f0=1.D-4
149 beta = 1. _d -11
150 viscAh=1.d3
151 viscA4=0.
152 viscAz=1.d-3
153 diffKhT=1.0d3
154 diffKzT=1.d-5
155 diffKhS=1.0d3
156 diffKzS=1.d-1
157 diffK4T=0.
158 diffK4S=0.
159 GMmaxslope=1.d-2
160 GMlength=200.d3
161 GMalpha=0.
162 GMdepth=1000.
163 GMkbackground=0.
164 READ(UNIT=iUnit,NML=PARM01,IOSTAT=errIO,err=3)
165 IF ( errIO .GE. 0 ) GOTO 4
166 3 CONTINUE
167 WRITE(msgBuf,'(A)')
168 & 'S/R INI_PARMS'
169 CALL PRINT_ERROR( msgBuf , 1)
170 WRITE(msgBuf,'(A)')
171 & 'Error reading numerical model '
172 CALL PRINT_ERROR( msgBuf , 1)
173 WRITE(msgBuf,'(A)')
174 & 'parameter file "data"'
175 CALL PRINT_ERROR( msgBuf , 1)
176 WRITE(msgBuf,'(A)')
177 & 'Problem in namelist PARM01'
178 CALL PRINT_ERROR( msgBuf , 1)
179 CALL MODELDATA_EXAMPLE( myThid )
180 STOP 'ABNORMAL END: S/R INI_PARMS'
181 4 CONTINUE
182
183 C-- Elliptic solver parameters
184 cg2dMaxIters = 150
185 cg2dTargetResidual = 1. _d -7
186 cg2dChkResFreq = 1
187 cg2dpcOffDFac = 0.51 _d 0
188 READ(UNIT=iUnit,NML=PARM02,IOSTAT=errIO,err=5)
189 IF ( errIO .GE. 0 ) GOTO 6
190 5 CONTINUE
191 WRITE(msgBuf,'(A)')
192 & 'S/R INI_PARMS'
193 CALL PRINT_ERROR( msgBuf , 1)
194 WRITE(msgBuf,'(A)')
195 & 'Error reading numerical model '
196 CALL PRINT_ERROR( msgBuf , 1)
197 WRITE(msgBuf,'(A)')
198 & 'parameter file "data".'
199 CALL PRINT_ERROR( msgBuf , 1)
200 WRITE(msgBuf,'(A)')
201 & 'Problem in namelist PARM02'
202 CALL PRINT_ERROR( msgBuf , 1)
203 CALL MODELDATA_EXAMPLE( myThid )
204 STOP 'ABNORMAL END: S/R INI_PARMS'
205 6 CONTINUE
206
207 C-- Time stepping parameters
208 startTime = 0.
209 nTimeSteps = 0
210 endTime = 0.
211 nIter0 = 0
212 deltaT = 0.
213 deltaTClock = 0.
214 deltaTtracer = 0.
215 deltaTMom = 0.
216 abEps = 0.01
217 pchkPtFreq = 0.
218 chkPtFreq = 3600.*25
219 dumpFreq = 3600.*100
220 writeStatePrec = precFloat32
221 nCheckLev = 1
222 checkPtSuff(1) = 'ckptA'
223 checkPtSuff(2) = 'ckptB'
224 READ(UNIT=iUnit,NML=PARM03,IOSTAT=errIO,err=7)
225 IF ( errIO .GE. 0 ) GOTO 8
226 7 CONTINUE
227 WRITE(msgBuf,'(A)')
228 & 'S/R INI_PARMS'
229 CALL PRINT_ERROR( msgBuf , 1)
230 WRITE(msgBuf,'(A)')
231 & 'Error reading numerical model '
232 CALL PRINT_ERROR( msgBuf , 1)
233 WRITE(msgBuf,'(A)')
234 & 'parameter file "data"'
235 CALL PRINT_ERROR( msgBuf , 1)
236 WRITE(msgBuf,'(A)')
237 & 'Problem in namelist PARM03'
238 CALL PRINT_ERROR( msgBuf , 1)
239 CALL MODELDATA_EXAMPLE( myThid )
240 STOP 'ABNORMAL END: S/R INI_PARMS'
241 8 CONTINUE
242 C Process "timestepping" params
243 C o Time step size
244 IF ( deltaT .EQ. 0. ) deltaT = deltaTmom
245 IF ( deltaT .EQ. 0. ) deltaT = deltaTtracer
246 IF ( deltaTmom .EQ. 0. ) deltaTmom = deltaT
247 IF ( deltaTtracer .EQ. 0. ) deltaTtracer = deltaT
248 IF ( deltaTClock .EQ. 0. ) deltaTClock = deltaT
249 C o Time step count
250 IF ( endTime .NE. 0 ) THEN
251 IF ( deltaTClock .NE. 0 ) nTimeSteps =
252 & INT((endTime-startTime)/deltaTClock)
253 ENDIF
254 C o Finish time
255 IF ( endTime .EQ. 0. ) endTime = FLOAT(nTimeSteps)*deltaTClock
256
257 C-- Grid parameters
258 C In cartesian coords distances are in metres
259 usingCartesianGrid = .TRUE.
260 DO K =1,Nz
261 delZ(K) = 100. _d 0
262 ENDDO
263 dxSpacing = 20. _d 0 * 1000. _d 0
264 dySpacing = 20. _d 0 * 1000. _d 0
265 DO i=1,Nx
266 delX(i) = dxSpacing
267 ENDDO
268 DO j=1,Ny
269 delY(j) = dySpacing
270 ENDDO
271 C In spherical polar distances are in degrees
272 usingSphericalPolarGrid = .FALSE.
273 IF ( usingSphericalPolarGrid ) THEN
274 phiMin = -5.0
275 thetaMin = 0.
276 dxSpacing = 1.
277 dySpacing = 1.
278 rSphere = 6370. * 1. _d 3
279 DO I=1,Nx
280 delX(I) = dxSpacing
281 ENDDO
282 DO J=1,Ny
283 delY(J) = dySpacing
284 ENDDO
285 ENDIF
286
287 READ(UNIT=iUnit,NML=PARM04,IOSTAT=errIO,err=9)
288 IF ( errIO .GE. 0 ) GOTO 10
289 9 CONTINUE
290 WRITE(msgBuf,'(A)')
291 & 'S/R INI_PARMS'
292 CALL PRINT_ERROR( msgBuf , 1)
293 WRITE(msgBuf,'(A)')
294 & 'Error reading numerical model '
295 CALL PRINT_ERROR( msgBuf , 1)
296 WRITE(msgBuf,'(A)')
297 & 'parameter file "data"'
298 CALL PRINT_ERROR( msgBuf , 1)
299 WRITE(msgBuf,'(A)')
300 & 'Problem in namelist PARM04'
301 CALL PRINT_ERROR( msgBuf , 1)
302 CALL MODELDATA_EXAMPLE( myThid )
303 STOP 'ABNORMAL END: S/R INI_PARMS'
304 10 CONTINUE
305
306 goptCount = 0
307 IF ( usingCartesianGrid ) goptCount = goptCount+1
308 IF ( usingSphericalPolarGrid ) goptCount = goptCount+1
309 IF ( goptCount .NE. 1 ) THEN
310 WRITE(msgBuf,'(A)')
311 & 'S/R INI_PARMS: More than one coordinate system requested'
312 CALL PRINT_ERROR( msgBuf , myThid)
313 STOP 'ABNORMAL END: S/R INI_PARMS'
314 ENDIF
315
316 _END_MASTER(myThid)
317
318 C-- Everyone else must wait for the parameters to be loaded
319 _BARRIER
320 C
321
322 RETURN
323 END
324

  ViewVC Help
Powered by ViewVC 1.1.22