/[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.8 - (show annotations) (download)
Mon May 25 16:17:36 1998 UTC (26 years ago) by cnh
Branch: MAIN
Changes since 1.7: +17 -3 lines
Added changes to support implicit free-surface.
 - included gBaro a "barotropic" gravity that can
   be set differently to the g.rhoprime gravity.
 - discovered and fixed coding error in dynamics
   loop. Per tile temporaries that needed correct
   initial values were not being reset for each tile.

1 C $Header: /u/gcmpack/models/MITgcmUV/model/src/ini_parms.F,v 1.7 1998/05/21 18:25:49 cnh 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, gBaro, 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 & implicitFreeSurface, rigidLid, freeSurfFac
64
65 C-- Elliptic solver parameters
66 NAMELIST /PARM02/
67 & cg2dMaxIters, cg2dChkResFreq, cg2dTargetResidual, cg2dpcOffDFac
68
69 C-- Time stepping parammeters
70 NAMELIST /PARM03/
71 & nIter0, nTimeSteps, deltaT, deltaTmom, deltaTtracer, abEps, tauCD, rCD,
72 & startTime, endTime, chkPtFreq, dumpFreq, deltaTClock, pChkPtFreq
73
74 C-- Gridding parameters
75 NAMELIST /PARM04/
76 & usingCartesianGrid, delZ, dxSpacing, dySpacing, delX, delY,
77 & usingSphericalPolarGrid, phiMin, thetaMin, rSphere,
78 & l, m, n
79
80 C
81 _BEGIN_MASTER(myThid)
82
83 C-- Open the parameter file
84 OPEN(UNIT=scrUnit1,STATUS='SCRATCH')
85 OPEN(UNIT=scrUnit2,STATUS='SCRATCH')
86 OPEN(UNIT=modelDataUnit,FILE='data',STATUS='OLD',err=1,IOSTAT=errIO)
87 IF ( errIO .GE. 0 ) GOTO 2
88 1 CONTINUE
89 WRITE(msgBuf,'(A)')
90 & 'S/R INI_PARMS'
91 CALL PRINT_ERROR( msgBuf , 1)
92 WRITE(msgBuf,'(A)')
93 & 'Unable to open model parameter'
94 CALL PRINT_ERROR( msgBuf , 1)
95 WRITE(msgBuf,'(A)')
96 & 'file "data"'
97 CALL PRINT_ERROR( msgBuf , 1)
98 CALL MODELDATA_EXAMPLE( myThid )
99 STOP 'ABNORMAL END: S/R INI_PARMS'
100 2 CONTINUE
101
102 1000 CONTINUE
103 READ(modelDataUnit,FMT='(A)',END=1001) RECORD
104 IL = MAX(ILNBLNK(RECORD),1)
105 IF ( RECORD(1:1) .NE. commentCharacter )
106 & WRITE(UNIT=scrUnit1,FMT='(A)') RECORD(:IL)
107 WRITE(UNIT=scrUnit2,FMT='(A)') RECORD(:IL)
108 GOTO 1000
109 1001 CONTINUE
110 CLOSE(modelDataUnit)
111
112 C-- Report contents of model parameter file
113 WRITE(msgBuf,'(A)')
114 &'// ======================================================='
115 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, SQUEEZE_RIGHT , 1)
116 WRITE(msgBuf,'(A)') '// Model parameter file "data"'
117 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, SQUEEZE_RIGHT , 1)
118 WRITE(msgBuf,'(A)')
119 &'// ======================================================='
120 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
121 & SQUEEZE_RIGHT , 1)
122 iUnit = scrUnit2
123 REWIND(iUnit)
124 2000 CONTINUE
125 READ(UNIT=iUnit,FMT='(A)',END=2001) RECORD
126 IL = MAX(ILNBLNK(RECORD),1)
127 WRITE(msgBuf,'(A,A)') '>',RECORD(:IL)
128 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, SQUEEZE_RIGHT , 1)
129 GOTO 2000
130 2001 CONTINUE
131 CLOSE(iUnit)
132 WRITE(msgBuf,'(A)') ' '
133 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
134 & SQUEEZE_RIGHT , 1)
135
136
137 C-- Read settings from model parameter file "data".
138 iUnit = scrUnit1
139 REWIND(iUnit)
140
141 C-- Set default "physical" parameters
142 DO K =1,Nz
143 tRef(K) = 30.D0 - FLOAT(K)
144 ENDDO
145 gravity = 9.81 D0
146 gBaro = gravity
147 rhoNil = 999.8 D0
148 tAlpha=2.d-4
149 sBeta=1.d-5
150 f0=1.D-4
151 beta = 1. _d -11
152 viscAh=1.d3
153 viscA4=0.
154 viscAz=1.d-3
155 diffKhT=1.0d3
156 diffKzT=1.d-5
157 diffKhS=1.0d3
158 diffKzS=1.d-1
159 diffK4T=0.
160 diffK4S=0.
161 GMmaxslope=1.d-2
162 GMlength=200.d3
163 GMalpha=0.
164 GMdepth=1000.
165 GMkbackground=0.
166 implicitFreeSurface = .TRUE.
167 rigidLid = .FALSE.
168 freeSurfFac = 1. _d 0
169 READ(UNIT=iUnit,NML=PARM01,IOSTAT=errIO,err=3)
170 IF ( errIO .GE. 0 ) GOTO 4
171 3 CONTINUE
172 WRITE(msgBuf,'(A)')
173 & 'S/R INI_PARMS'
174 CALL PRINT_ERROR( msgBuf , 1)
175 WRITE(msgBuf,'(A)')
176 & 'Error reading numerical model '
177 CALL PRINT_ERROR( msgBuf , 1)
178 WRITE(msgBuf,'(A)')
179 & 'parameter file "data"'
180 CALL PRINT_ERROR( msgBuf , 1)
181 WRITE(msgBuf,'(A)')
182 & 'Problem in namelist PARM01'
183 CALL PRINT_ERROR( msgBuf , 1)
184 CALL MODELDATA_EXAMPLE( myThid )
185 STOP 'ABNORMAL END: S/R INI_PARMS'
186 4 CONTINUE
187 IF ( implicitFreeSurface ) freeSurfFac = 1. _d 0
188 IF ( rigidLid ) freeSurfFac = 0. _d 0
189
190 IF ( implicitFreeSurface .AND. rigidLid ) THEN
191 WRITE(msgBuf,'(A)')
192 & 'S/R INI_PARMS: Cannot select implicitFreeSurface and rigidLid.'
193 CALL PRINT_ERROR( msgBuf , myThid)
194 STOP 'ABNORMAL END: S/R INI_PARMS'
195 ENDIF
196
197 C-- Elliptic solver parameters
198 cg2dMaxIters = 150
199 cg2dTargetResidual = 1. _d -7
200 cg2dChkResFreq = 1
201 cg2dpcOffDFac = 0.51 _d 0
202 READ(UNIT=iUnit,NML=PARM02,IOSTAT=errIO,err=5)
203 IF ( errIO .GE. 0 ) GOTO 6
204 5 CONTINUE
205 WRITE(msgBuf,'(A)')
206 & 'S/R INI_PARMS'
207 CALL PRINT_ERROR( msgBuf , 1)
208 WRITE(msgBuf,'(A)')
209 & 'Error reading numerical model '
210 CALL PRINT_ERROR( msgBuf , 1)
211 WRITE(msgBuf,'(A)')
212 & 'parameter file "data".'
213 CALL PRINT_ERROR( msgBuf , 1)
214 WRITE(msgBuf,'(A)')
215 & 'Problem in namelist PARM02'
216 CALL PRINT_ERROR( msgBuf , 1)
217 CALL MODELDATA_EXAMPLE( myThid )
218 STOP 'ABNORMAL END: S/R INI_PARMS'
219 6 CONTINUE
220
221 C-- Time stepping parameters
222 startTime = 0.
223 nTimeSteps = 0
224 endTime = 0.
225 nIter0 = 0
226 deltaT = 0.
227 deltaTClock = 0.
228 deltaTtracer = 0.
229 deltaTMom = 0.
230 abEps = 0.01
231 pchkPtFreq = 0.
232 chkPtFreq = 3600.*25
233 dumpFreq = 3600.*100
234 writeStatePrec = precFloat32
235 nCheckLev = 1
236 checkPtSuff(1) = 'ckptA'
237 checkPtSuff(2) = 'ckptB'
238 READ(UNIT=iUnit,NML=PARM03,IOSTAT=errIO,err=7)
239 IF ( errIO .GE. 0 ) GOTO 8
240 7 CONTINUE
241 WRITE(msgBuf,'(A)')
242 & 'S/R INI_PARMS'
243 CALL PRINT_ERROR( msgBuf , 1)
244 WRITE(msgBuf,'(A)')
245 & 'Error reading numerical model '
246 CALL PRINT_ERROR( msgBuf , 1)
247 WRITE(msgBuf,'(A)')
248 & 'parameter file "data"'
249 CALL PRINT_ERROR( msgBuf , 1)
250 WRITE(msgBuf,'(A)')
251 & 'Problem in namelist PARM03'
252 CALL PRINT_ERROR( msgBuf , 1)
253 CALL MODELDATA_EXAMPLE( myThid )
254 STOP 'ABNORMAL END: S/R INI_PARMS'
255 8 CONTINUE
256 C Process "timestepping" params
257 C o Time step size
258 IF ( deltaT .EQ. 0. ) deltaT = deltaTmom
259 IF ( deltaT .EQ. 0. ) deltaT = deltaTtracer
260 IF ( deltaTmom .EQ. 0. ) deltaTmom = deltaT
261 IF ( deltaTtracer .EQ. 0. ) deltaTtracer = deltaT
262 IF ( deltaTClock .EQ. 0. ) deltaTClock = deltaT
263 C o Time step count
264 IF ( endTime .NE. 0 ) THEN
265 IF ( deltaTClock .NE. 0 ) nTimeSteps =
266 & INT((endTime-startTime)/deltaTClock)
267 ENDIF
268 C o Finish time
269 IF ( endTime .EQ. 0. ) endTime = FLOAT(nTimeSteps)*deltaTClock
270
271 C-- Grid parameters
272 C In cartesian coords distances are in metres
273 usingCartesianGrid = .TRUE.
274 DO K =1,Nz
275 delZ(K) = 100. _d 0
276 ENDDO
277 dxSpacing = 20. _d 0 * 1000. _d 0
278 dySpacing = 20. _d 0 * 1000. _d 0
279 DO i=1,Nx
280 delX(i) = dxSpacing
281 ENDDO
282 DO j=1,Ny
283 delY(j) = dySpacing
284 ENDDO
285 C In spherical polar distances are in degrees
286 usingSphericalPolarGrid = .FALSE.
287 IF ( usingSphericalPolarGrid ) THEN
288 phiMin = -5.0
289 thetaMin = 0.
290 dxSpacing = 1.
291 dySpacing = 1.
292 rSphere = 6370. * 1. _d 3
293 DO I=1,Nx
294 delX(I) = dxSpacing
295 ENDDO
296 DO J=1,Ny
297 delY(J) = dySpacing
298 ENDDO
299 ENDIF
300
301 READ(UNIT=iUnit,NML=PARM04,IOSTAT=errIO,err=9)
302 IF ( errIO .GE. 0 ) GOTO 10
303 9 CONTINUE
304 WRITE(msgBuf,'(A)')
305 & 'S/R INI_PARMS'
306 CALL PRINT_ERROR( msgBuf , 1)
307 WRITE(msgBuf,'(A)')
308 & 'Error reading numerical model '
309 CALL PRINT_ERROR( msgBuf , 1)
310 WRITE(msgBuf,'(A)')
311 & 'parameter file "data"'
312 CALL PRINT_ERROR( msgBuf , 1)
313 WRITE(msgBuf,'(A)')
314 & 'Problem in namelist PARM04'
315 CALL PRINT_ERROR( msgBuf , 1)
316 CALL MODELDATA_EXAMPLE( myThid )
317 STOP 'ABNORMAL END: S/R INI_PARMS'
318 10 CONTINUE
319
320 goptCount = 0
321 IF ( usingCartesianGrid ) goptCount = goptCount+1
322 IF ( usingSphericalPolarGrid ) goptCount = goptCount+1
323 IF ( goptCount .NE. 1 ) THEN
324 WRITE(msgBuf,'(A)')
325 & 'S/R INI_PARMS: More than one coordinate system requested'
326 CALL PRINT_ERROR( msgBuf , myThid)
327 STOP 'ABNORMAL END: S/R INI_PARMS'
328 ENDIF
329
330 _END_MASTER(myThid)
331
332 C-- Everyone else must wait for the parameters to be loaded
333 _BARRIER
334 C
335
336 RETURN
337 END
338

  ViewVC Help
Powered by ViewVC 1.1.22