/[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.219 - (show annotations) (download)
Fri Nov 14 03:04:09 2008 UTC (15 years, 6 months ago) by dfer
Branch: MAIN
CVS Tags: checkpoint61f, checkpoint61g, checkpoint61h
Changes since 1.218: +2 -2 lines
Add smoothing parameter for mixed-layer diagnostics

1 C $Header: /u/gcmpack/MITgcm/model/src/ini_parms.F,v 1.218 2008/11/06 01:22:59 dfer Exp $
2 C $Name: $
3
4 c #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
8 CBOP
9 C !ROUTINE: INI_PARMS
10 C !INTERFACE:
11 SUBROUTINE INI_PARMS( myThid )
12
13 C !DESCRIPTION:
14 C Routine to load model "parameters" from parameter file "data"
15
16 C !USES:
17 IMPLICIT NONE
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 c#include "GRID.h"
22 #include "EOS.h"
23
24 C !INPUT/OUTPUT PARAMETERS:
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 SadournyCoriolis :: for backward compatibility
34 C deltaTtracer :: Timestep for tracer equations ( s )
35 C forcing_In_AB :: flag to put all forcings (Temp,Salt,Tracers,Momentum)
36 C :: contribution in (or out of) Adams-Bashforth time stepping.
37 C goptCount :: Used to count the nuber of grid options (only one is allowed!)
38 C msgBuf :: Informational/error meesage buffer
39 C errIO :: IO error flag
40 C iUnit :: Work variable for IO unit number
41 C record :: Work variable for IO buffer
42 C K, I, J :: Loop counters
43 C xxxDefault :: Default value for variable xxx
44 _RL dxSpacing
45 _RL dySpacing
46 _RL deltaTtracer
47 CHARACTER*(MAX_LEN_MBUF) msgBuf
48 CHARACTER*(MAX_LEN_PREC) record
49 LOGICAL SadournyCoriolis
50 LOGICAL forcing_In_AB
51 INTEGER goptCount
52 INTEGER K, i, j, IL, iUnit
53 INTEGER errIO
54 INTEGER IFNBLNK
55 EXTERNAL IFNBLNK
56 INTEGER ILNBLNK
57 EXTERNAL ILNBLNK
58 C Default values for variables which have vertical coordinate system
59 C dependency.
60 _RL viscArDefault
61 _RL diffKrTDefault
62 _RL diffKrSDefault
63 _RL hFacMinDrDefault
64 _RL delRDefault(Nr)
65 _RS rkFacDefault
66 C zCoordInputData :: Variables used to select between different coordinate systems.
67 C pCoordInputData :: The vertical coordinate system in the rest of the model is
68 C rCoordInputData :: written in terms of r. In the model "data" file input data
69 C coordsSet :: can be interms of z, p or r.
70 C :: e.g. delZ or delP or delR for the vertical grid spacing.
71 C :: The following rules apply:
72 C :: All parameters must use the same vertical coordinate system.
73 C :: e.g. delZ and viscAz is legal but
74 C :: delZ and viscAr is an error.
75 C :: Similarly specifying delZ and delP is an error.
76 C :: zCoord..., pCoord..., rCoord... are used to flag when
77 C :: z, p or r are used.
78 C :: coordsSet counts how many vertical coordinate systems have
79 C :: been used to specify variables. coordsSet > 1 is an error.
80 C
81
82 LOGICAL zCoordInputData
83 LOGICAL pCoordInputData
84 LOGICAL rCoordInputData
85 INTEGER coordsSet
86 LOGICAL diffKrSet
87
88 C Variables which have vertical coordinate system dependency.
89 C delZ :: Vertical grid spacing ( m ).
90 C delP :: Vertical grid spacing ( Pa ).
91 C viscAz :: Eddy viscosity coeff. for mixing of momentum vertically ( m^2/s )
92 C viscAp :: Eddy viscosity coeff. for mixing of momentum vertically ( Pa^2/s )
93 C diffKzT :: Laplacian diffusion coeff. for mixing of heat vertically ( m^2/s )
94 C diffKpT :: Laplacian diffusion coeff. for mixing of heat vertically ( Pa^2/s )
95 C diffKzS :: Laplacian diffusion coeff. for mixing of salt vertically ( m^2/s )
96 C diffKpS :: Laplacian diffusion coeff. for mixing of salt vertically ( Pa^2/s )
97 _RL delZ(Nr)
98 _RL delP(Nr)
99 _RL viscAz
100 _RL viscAp
101 _RL diffKzT
102 _RL diffKpT
103 _RL diffKrT
104 _RL diffKzS
105 _RL diffKpS
106 _RL diffKrS
107
108 C Retired main data file parameters. Kept here to trap use of old data files.
109 C Namelist PARM01:
110 C tracerAdvScheme :: tracer advection scheme (old passive tracer code)
111 C trac_EvPrRn :: tracer conc. in Rain & Evap (old passive tracer code)
112 C saltDiffusion :: diffusion of salinity on/off (flag not used)
113 C tempDiffusion :: diffusion of temperature on/off (flag not used)
114 C zonal_filt_lat :: Moved to package "zonal_filt"
115 C gravitySign :: direction of gravity relative to R direction
116 C :: (removed from namelist and set according to z/p coordinate)
117 C viscAstrain :: replaced by standard viscosity coeff & useStrainTensionVisc
118 C viscAtension :: replaced by standard viscosity coeff & useStrainTensionVisc
119 C useAnisotropicViscAgridMax :: Changed to be default behavior. Can
120 C use old method by setting useAreaViscLength=.true.
121 C usePickupBeforeC35 :: to restart from old-pickup files (generated with code
122 C from before checkpoint-35, Feb 08, 2001): disabled (Jan 2007)
123 C Namelist PARM03:
124 C tauThetaClimRelax3Dim :: replaced by pkg/rbcs (3.D Relaxation B.Cs)
125 C tauSaltClimRelax3Dim :: replaced by pkg/rbcs (3.D Relaxation B.Cs)
126 C calendarDumps :: moved to package "cal" (calendar)
127 C Namelist PARM04:
128 C groundAtK1 :: put the surface(k=1) at the ground (replaced by usingPCoords)
129 C rkFac :: removed from namelist ; replaced by -rkSign
130 C nRetired :: Counter used to trap gracefully namelists containing "retired"
131 C :: parameters. These are parameters that are either no-longer used
132 C or that have moved to a different input file and/or namelist.
133 C Namelist PARM05:
134 C shelfIceFile :: File containing the topography of the shelfice draught
135 C (replaced by SHELFICEtopoFile in SHELFICE.h)
136
137 LOGICAL tempDiffusion, saltDiffusion
138 INTEGER tracerAdvScheme
139 _RL trac_EvPrRn
140 _RL zonal_filt_lat, gravitySign
141 _RL viscAstrain, viscAtension
142 LOGICAL useAnisotropicViscAgridMax
143 LOGICAL usePickupBeforeC35
144 C-
145 _RL tauThetaClimRelax3Dim, tauSaltClimRelax3Dim
146 LOGICAL calendarDumps
147 C-
148 LOGICAL groundAtK1
149 _RL rkFac
150 CHARACTER*(MAX_LEN_FNAM) shelfIceFile
151 INTEGER nRetired
152
153 C-- Continuous equation parameters
154 NAMELIST /PARM01/
155 & gravitySign, nh_Am2,
156 & gravity, gBaro, rhonil, tAlpha, sBeta,
157 & f0, beta, omega, rotationPeriod,
158 & viscAh, viscAhW, viscAhMax,
159 & viscAhGrid, viscAhGridMax, viscAhGridMin,
160 & viscC2leith, viscC4leith,
161 & useFullLeith, useAnisotropicViscAgridMax, useStrainTensionVisc,
162 & useAreaViscLength,
163 & viscC2leithD, viscC4leithD, viscC2smag, viscC4smag,
164 & viscAhD, viscAhZ, viscA4D, viscA4Z,
165 & viscA4, viscA4W,
166 & viscA4Max, viscA4Grid, viscA4GridMax, viscA4GridMin,
167 & viscA4ReMax, viscAhReMax,
168 & viscAz, cosPower, viscAstrain, viscAtension,
169 & diffKhT, diffKzT, diffK4T,
170 & diffKhS, diffKzS, diffK4S,
171 & tRef, sRef, tRefFile, sRefFile, rhoRefFile,
172 & eosType, integr_GeoPot, selectFindRoSurf,
173 & atm_Cp, atm_Rd, atm_Rq, atm_Po,
174 & no_slip_sides, sideDragFactor,
175 & no_slip_bottom, bottomDragLinear, bottomDragQuadratic,
176 & momViscosity, momAdvection, momForcing, useCoriolis,
177 & useConstantF, useBetaPlaneF, useSphereF, use3dCoriolis,
178 & momPressureForcing, metricTerms, vectorInvariantMomentum,
179 & tempDiffusion, tempAdvection, tempForcing,
180 & saltDiffusion, saltAdvection, saltForcing,
181 & implicSurfPress, implicDiv2Dflow,
182 & implicitFreeSurface, rigidLid, freeSurfFac, hFacMin, hFacMinDz,
183 & exactConserv, linFSConserveTr, uniformLin_PhiSurf,
184 & nonlinFreeSurf, hFacInf, hFacSup, select_rStar,
185 & implicitIntGravWave, staggerTimeStep,
186 & tempStepping, saltStepping, momStepping,
187 & implicitDiffusion, implicitViscosity,
188 & tempImplVertAdv, saltImplVertAdv, momImplVertAdv,
189 & viscAr, diffKrT, diffKrS, diffKrNrT, diffKrNrS, hFacMinDr,
190 & viscAp, diffKpT, diffKpS, hFacMinDp,
191 & diffKrBL79surf, diffKrBL79deep, diffKrBL79scl, diffKrBL79Ho,
192 & BL79LatVary,
193 & diffKrBLEQsurf, diffKrBLEQdeep, diffKrBLEQscl, diffKrBLEQHo,
194 & rhoConst, rhoConstFresh, buoyancyRelation, HeatCapacity_Cp,
195 & writeBinaryPrec, readBinaryPrec, writeStatePrec,
196 & nonHydrostatic, quasiHydrostatic, globalFiles, useSingleCpuIO,
197 & allowFreezing, useOldFreezing, ivdc_kappa,
198 & hMixCriteria, dRhoSmall, hMixSmooth,
199 & usePickupBeforeC35, usePickupBeforeC54, debugMode, debugLevel,
200 & tempAdvScheme, tempVertAdvScheme,
201 & saltAdvScheme, saltVertAdvScheme, tracerAdvScheme,
202 & multiDimAdvection, useEnergyConservingCoriolis,
203 & useCDscheme, useJamartWetPoints, useJamartMomAdv, useNHMTerms,
204 & selectVortScheme, upwindVorticity, highOrderVorticity,
205 & SadournyCoriolis, useAbsVorticity, upwindShear, selectKEscheme,
206 & selectAddFluid, useRealFreshWaterFlux, convertFW2Salt,
207 & temp_EvPrRn, salt_EvPrRn, trac_EvPrRn,
208 & zonal_filt_lat,
209 & inAdExact, smoothAbsFuncRange,
210 & balanceEmPmR, balanceQnet, balancePrintMean
211
212 C-- Elliptic solver parameters
213 NAMELIST /PARM02/
214 & cg2dMaxIters, cg2dChkResFreq, cg2dTargetResidual,
215 & cg2dTargetResWunit, cg2dpcOffDFac, cg2dPreCondFreq,
216 & cg3dMaxIters, cg3dChkResFreq, cg3dTargetResidual
217
218 C-- Time stepping parammeters
219 NAMELIST /PARM03/
220 & nIter0, nTimeSteps, nEndIter,
221 & baseTime, startTime, endTime,
222 & deltaT, deltaTClock, deltaTmom,
223 & deltaTtracer, dTtracerLev, deltaTfreesurf,
224 & forcing_In_AB, momForcingOutAB, tracForcingOutAB,
225 & momDissip_In_AB, doAB_onGtGs,
226 & abEps, alph_AB, beta_AB, startFromPickupAB2,
227 & tauCD, rCD, cAdjFreq,
228 & chkPtFreq, pChkPtFreq, pickupSuff, pickupStrictlyMatch,
229 & writePickupAtEnd,
230 & dumpFreq, dumpInitAndLast, adjDumpFreq, taveFreq, tave_lastIter,
231 & diagFreq, monitorFreq, adjMonitorFreq, monitorSelect,
232 & outputTypesInclusive,
233 & tauThetaClimRelax, tauSaltClimRelax, latBandClimRelax,
234 & tauThetaClimRelax3Dim, tauSaltClimRelax3Dim,
235 & periodicExternalForcing, externForcingPeriod, externForcingCycle,
236 & calendarDumps
237
238 C-- Gridding parameters
239 NAMELIST /PARM04/
240 & usingCartesianGrid, usingCylindricalGrid,
241 & dxSpacing, dySpacing, delX, delY, delXFile, delYFile,
242 & usingSphericalPolarGrid, phiMin, thetaMin, rSphere,
243 & usingCurvilinearGrid, horizGridFile, deepAtmosphere,
244 & Ro_SeaLevel, delZ, delP, delR, delRc, delRFile, delRcFile,
245 & rkFac, groundAtK1,
246 & phiEuler, thetaEuler, psiEuler
247
248 C-- Input files
249 NAMELIST /PARM05/
250 & bathyFile, topoFile, shelfIceFile,
251 & hydrogThetaFile, hydrogSaltFile, diffKrFile,
252 & zonalWindFile, meridWindFile,
253 & thetaClimFile, saltClimFile,
254 & surfQfile, surfQnetFile, surfQswFile, EmPmRfile, saltFluxFile,
255 & lambdaThetaFile, lambdaSaltFile,
256 & uVelInitFile, vVelInitFile, pSurfInitFile,
257 & dQdTFile, ploadFile,tCylIn,tCylOut,
258 & eddyPsiXFile, eddyPsiYFile,
259 & mdsioLocalDir,
260 & the_run_name
261 CEOP
262
263 C
264 _BEGIN_MASTER(myThid)
265
266 C Defaults values for input parameters
267 CALL SET_DEFAULTS(
268 O viscArDefault, diffKrTDefault, diffKrSDefault,
269 O hFacMinDrDefault, delRDefault, rkFacDefault,
270 I myThid )
271 SadournyCoriolis = .FALSE.
272
273 C-- Initialise "which vertical coordinate system used" flags.
274 zCoordInputData = .FALSE.
275 pCoordInputData = .FALSE.
276 rCoordInputData = .FALSE.
277 coordsSet = 0
278
279 C-- Initialise retired parameters to unlikely value
280 nRetired = 0
281 tempDiffusion = .TRUE.
282 saltDiffusion = .TRUE.
283 tracerAdvScheme = UNSET_I
284 trac_EvPrRn = UNSET_RL
285 zonal_filt_lat = UNSET_RL
286 gravitySign = UNSET_RL
287 viscAstrain = UNSET_RL
288 viscAtension = UNSET_RL
289 useAnisotropicViscAgridMax=.TRUE.
290 usePickupBeforeC35 = .FALSE.
291 tauThetaClimRelax3Dim = UNSET_RL
292 tauSaltClimRelax3Dim = UNSET_RL
293 calendarDumps = .FALSE.
294 rkFac = UNSET_RL
295 groundAtK1 = .FALSE.
296 shelfIceFile = ' '
297
298 C-- Open the parameter file
299 #if defined (TARGET_BGL) || defined (TARGET_CRAYXT)
300 OPEN(UNIT=scrUnit1,FILE='scratch1',STATUS='UNKNOWN')
301 OPEN(UNIT=scrUnit2,FILE='scratch2',STATUS='UNKNOWN')
302 #else
303 OPEN(UNIT=scrUnit1,STATUS='SCRATCH')
304 OPEN(UNIT=scrUnit2,STATUS='SCRATCH')
305 #endif
306 OPEN(UNIT=modelDataUnit,FILE='data',STATUS='OLD',
307 & IOSTAT=errIO)
308 IF ( errIO .LT. 0 ) THEN
309 WRITE(msgBuf,'(A)')
310 & 'S/R INI_PARMS'
311 CALL PRINT_ERROR( msgBuf, myThid )
312 WRITE(msgBuf,'(A)')
313 & 'Unable to open model parameter'
314 CALL PRINT_ERROR( msgBuf, myThid )
315 WRITE(msgBuf,'(A)')
316 & 'file "data"'
317 CALL PRINT_ERROR( msgBuf, myThid )
318 CALL MODELDATA_EXAMPLE( myThid )
319 STOP 'ABNORMAL END: S/R INI_PARMS'
320 ENDIF
321
322 DO WHILE ( .TRUE. )
323 READ(modelDataUnit,FMT='(A)',END=1001) RECORD
324 IL = MAX(ILNBLNK(RECORD),1)
325 IF ( RECORD(1:1) .NE. commentCharacter ) THEN
326 CALL NML_SET_TERMINATOR( RECORD )
327 WRITE(UNIT=scrUnit1,FMT='(A)') RECORD(:IL)
328 ENDIF
329 WRITE(UNIT=scrUnit2,FMT='(A)') RECORD(:IL)
330 ENDDO
331 1001 CONTINUE
332 CLOSE(modelDataUnit)
333
334 C-- Report contents of model parameter file
335 WRITE(msgBuf,'(A)')
336 &'// ======================================================='
337 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
338 & SQUEEZE_RIGHT, myThid )
339 WRITE(msgBuf,'(A)') '// Model parameter file "data"'
340 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
341 & SQUEEZE_RIGHT, myThid )
342 WRITE(msgBuf,'(A)')
343 &'// ======================================================='
344 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
345 & SQUEEZE_RIGHT, myThid )
346 iUnit = scrUnit2
347 REWIND(iUnit)
348 DO WHILE ( .TRUE. )
349 READ(UNIT=iUnit,FMT='(A)',END=2001) RECORD
350 IL = MAX(ILNBLNK(RECORD),1)
351 WRITE(msgBuf,'(A,A)') '>',RECORD(:IL)
352 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
353 & SQUEEZE_RIGHT, myThid )
354 ENDDO
355 2001 CONTINUE
356 CLOSE(iUnit)
357 WRITE(msgBuf,'(A)') ' '
358 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
359 & SQUEEZE_RIGHT, myThid )
360
361
362 C-- Read settings from model parameter file "data".
363 iUnit = scrUnit1
364 REWIND(iUnit)
365
366 C-- Set default "physical" parameters
367 viscAhW = UNSET_RL
368 viscA4W = UNSET_RL
369 viscAhD = UNSET_RL
370 viscAhZ = UNSET_RL
371 viscA4D = UNSET_RL
372 viscA4Z = UNSET_RL
373 viscAz = UNSET_RL
374 viscAr = UNSET_RL
375 viscAp = UNSET_RL
376 diffKzT = UNSET_RL
377 diffKpT = UNSET_RL
378 diffKrT = UNSET_RL
379 diffKzS = UNSET_RL
380 diffKpS = UNSET_RL
381 diffKrS = UNSET_RL
382 DO k=1,Nr
383 diffKrNrT(k) = UNSET_RL
384 diffKrNrS(k) = UNSET_RL
385 tRef(k) = UNSET_RL
386 sRef(k) = UNSET_RL
387 ENDDO
388 gBaro = UNSET_RL
389 rhoConst = UNSET_RL
390 omega = UNSET_RL
391 hFacMinDr = UNSET_RL
392 hFacMinDz = UNSET_RL
393 hFacMinDp = UNSET_RL
394 rhoConstFresh = UNSET_RL
395 convertFW2Salt = UNSET_RL
396 tAlpha = UNSET_RL
397 sBeta = UNSET_RL
398 tempVertAdvScheme = 0
399 saltVertAdvScheme = 0
400 C-- z,p,r coord input switching.
401 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; starts to read PARM01'
402 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
403 & SQUEEZE_RIGHT, myThid )
404 READ(UNIT=iUnit,NML=PARM01) !,IOSTAT=errIO)
405 IF ( errIO .LT. 0 ) THEN
406 WRITE(msgBuf,'(A)')
407 & 'S/R INI_PARMS'
408 CALL PRINT_ERROR( msgBuf, myThid )
409 WRITE(msgBuf,'(A)')
410 & 'Error reading numerical model '
411 CALL PRINT_ERROR( msgBuf, myThid )
412 WRITE(msgBuf,'(A)')
413 & 'parameter file "data"'
414 CALL PRINT_ERROR( msgBuf, myThid )
415 WRITE(msgBuf,'(A)')
416 & 'Problem in namelist PARM01'
417 CALL PRINT_ERROR( msgBuf, myThid )
418 CALL MODELDATA_EXAMPLE( myThid )
419 STOP 'ABNORMAL END: S/R INI_PARMS'
420 ELSE
421 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; read PARM01 : OK'
422 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
423 & SQUEEZE_RIGHT, myThid )
424 ENDIF
425
426 C- set the type of vertical coordinate and type of fluid
427 C according to buoyancyRelation
428 usingPCoords = .FALSE.
429 usingZCoords = .FALSE.
430 fluidIsAir = .FALSE.
431 fluidIsWater = .FALSE.
432 IF ( buoyancyRelation.EQ.'ATMOSPHERIC' ) THEN
433 usingPCoords = .TRUE.
434 fluidIsAir = .TRUE.
435 ELSEIF ( buoyancyRelation.EQ.'OCEANICP') THEN
436 usingPCoords = .TRUE.
437 fluidIsWater = .TRUE.
438 ELSEIF ( buoyancyRelation.EQ.'OCEANIC' ) THEN
439 usingZCoords = .TRUE.
440 fluidIsWater = .TRUE.
441 ELSE
442 WRITE(msgBuf,'(2A)') 'S/R INI_PARMS:',
443 & ' Bad value of buoyancyRelation '
444 CALL PRINT_ERROR( msgBuf, myThid )
445 STOP 'ABNORMAL END: S/R INI_PARMS'
446 ENDIF
447
448 IF ( .NOT.rigidLid .AND.
449 & .NOT.implicitFreeSurface ) THEN
450 C- No barotropic solver selected => use implicitFreeSurface as default
451 WRITE(msgBuf,'(A)')
452 & 'S/R INI_PARMS: No request for barotropic solver'
453 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
454 & SQUEEZE_RIGHT, myThid )
455 WRITE(msgBuf,'(A)')
456 & 'S/R INI_PARMS: => Use implicitFreeSurface as default'
457 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
458 & SQUEEZE_RIGHT, myThid )
459 implicitFreeSurface = .TRUE.
460 ENDIF
461 IF ( implicitFreeSurface ) freeSurfFac = 1.D0
462 IF ( rigidLid ) freeSurfFac = 0.D0
463 IF ( gBaro .EQ. UNSET_RL ) gBaro=gravity
464 IF ( rhoConst .EQ. UNSET_RL ) rhoConst=rhoNil
465 IF ( rhoConstFresh .EQ. UNSET_RL ) rhoConstFresh=rhoConst
466 IF ( omega .EQ. UNSET_RL ) THEN
467 omega = 0. _d 0
468 IF ( rotationPeriod .NE. 0. _d 0 )
469 & omega = 2.D0 * PI / rotationPeriod
470 ELSEIF ( omega .EQ. 0. _d 0 ) THEN
471 rotationPeriod = 0. _d 0
472 ELSE
473 rotationPeriod = 2.D0 * PI / omega
474 ENDIF
475 IF (atm_Rd .EQ. UNSET_RL) THEN
476 atm_Rd = atm_Cp * atm_kappa
477 ELSE
478 atm_kappa = atm_Rd / atm_Cp
479 ENDIF
480 C-- Non-hydrostatic/quasi-hydrostatic
481 IF (nonHydrostatic.AND.quasiHydrostatic) THEN
482 WRITE(msgBuf,'(A)')
483 & 'Illegal: both nonHydrostatic = quasiHydrostatic = TRUE'
484 CALL PRINT_ERROR( msgBuf, myThid )
485 STOP 'ABNORMAL END: S/R INI_PARMS'
486 ENDIF
487 C-- Advection and Forcing for Temp and salt
488 IF (tempVertAdvScheme.EQ.0) tempVertAdvScheme = tempAdvScheme
489 IF (saltVertAdvScheme.EQ.0) saltVertAdvScheme = saltAdvScheme
490 C-- horizontal viscosity for vertical moments
491 IF ( viscAhW .EQ. UNSET_RL ) viscAhW = viscAh
492 IF ( viscA4W .EQ. UNSET_RL ) viscA4W = viscA4
493 C-- horizontal viscosity (acting on Divergence or Vorticity)
494 IF ( viscAhD .EQ. UNSET_RL ) viscAhD = viscAh
495 IF ( viscAhZ .EQ. UNSET_RL ) viscAhZ = viscAh
496 IF ( viscA4D .EQ. UNSET_RL ) viscA4D = viscA4
497 IF ( viscA4Z .EQ. UNSET_RL ) viscA4Z = viscA4
498 C-- z,p,r coord input switching.
499 IF ( viscAz .NE. UNSET_RL ) zCoordInputData = .TRUE.
500 IF ( viscAp .NE. UNSET_RL ) pCoordInputData = .TRUE.
501 IF ( viscAr .NE. UNSET_RL ) rCoordInputData = .TRUE.
502 IF ( viscAr .EQ. UNSET_RL ) viscAr = viscAz
503 IF ( viscAr .EQ. UNSET_RL ) viscAr = viscAp
504 IF ( viscAr .EQ. UNSET_RL ) viscAr = viscArDefault
505
506 IF ( diffKzT .NE. UNSET_RL ) zCoordInputData = .TRUE.
507 IF ( diffKpT .NE. UNSET_RL ) pCoordInputData = .TRUE.
508 IF ( diffKrT .NE. UNSET_RL ) rCoordInputData = .TRUE.
509 IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKzT
510 IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKpT
511 IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKrTDefault
512 diffKrSet = .TRUE.
513 DO k=1,Nr
514 IF ( diffKrNrT(k).EQ. UNSET_RL ) diffKrSet = .FALSE.
515 ENDDO
516 IF ( .NOT.diffKrSet ) THEN
517 DO k=1,Nr
518 diffKrNrT(k) = diffKrT
519 ENDDO
520 ELSEIF ( diffKrT.NE.diffKrTDefault ) THEN
521 WRITE(msgBuf,'(2A)') 'S/R INI_PARMS: Cannot set both ',
522 & 'diffKrNrT and diffKrT (or Kp,Kz) in input file data'
523 CALL PRINT_ERROR( msgBuf, myThid )
524 STOP 'ABNORMAL END: S/R INI_PARMS'
525 ENDIF
526
527 IF ( diffKzS .NE. UNSET_RL ) zCoordInputData = .TRUE.
528 IF ( diffKpS .NE. UNSET_RL ) pCoordInputData = .TRUE.
529 IF ( diffKrS .NE. UNSET_RL ) rCoordInputData = .TRUE.
530 IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKzS
531 IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKpS
532 IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKrSDefault
533 diffKrSet = .TRUE.
534 DO k=1,Nr
535 IF ( diffKrNrS(k).EQ. UNSET_RL ) diffKrSet = .FALSE.
536 ENDDO
537 IF ( .NOT.diffKrSet ) THEN
538 DO k=1,Nr
539 diffKrNrS(k) = diffKrS
540 ENDDO
541 ELSEIF ( diffKrS.NE.diffKrSDefault ) THEN
542 WRITE(msgBuf,'(2A)') 'S/R INI_PARMS: Cannot set both ',
543 & 'diffKrNrS and diffKrS (or Kp,Kz) in input file data'
544 CALL PRINT_ERROR( msgBuf, myThid )
545 STOP 'ABNORMAL END: S/R INI_PARMS'
546 ENDIF
547
548 IF (diffKrBLEQsurf .EQ. UNSET_RL) diffKrBLEQsurf = diffKrBL79surf
549 IF (diffKrBLEQdeep .EQ. UNSET_RL) diffKrBLEQdeep = diffKrBL79deep
550 IF (diffKrBLEQscl .EQ. UNSET_RL) diffKrBLEQscl = diffKrBL79scl
551 IF (diffKrBLEQHo .EQ. UNSET_RL) diffKrBLEQHo = diffKrBL79Ho
552
553 IF ( hFacMinDz .NE. UNSET_RL ) zCoordInputData = .TRUE.
554 IF ( hFacMinDp .NE. UNSET_RL ) pCoordInputData = .TRUE.
555 IF ( hFacMinDr .NE. UNSET_RL ) rCoordInputData = .TRUE.
556 IF ( hFacMinDr .EQ. UNSET_RL ) hFacMinDr = hFacMinDz
557 IF ( hFacMinDr .EQ. UNSET_RL ) hFacMinDr = hFacMinDp
558 IF ( hFacMinDr .EQ. UNSET_RL ) hFacMinDr = hFacMinDrDefault
559
560 IF (convertFW2Salt.EQ.UNSET_RL) THEN
561 convertFW2Salt = 35.
562 IF (useRealFreshWaterFlux) convertFW2Salt=-1
563 IF ( selectAddFluid.GE.1 ) convertFW2Salt=-1
564 ENDIF
565
566 IF ( SadournyCoriolis ) THEN
567 C-- for backward compatibility :
568 IF ( selectVortScheme.EQ.UNSET_I ) selectVortScheme = 2
569 IF ( selectVortScheme.NE.2 ) THEN
570 WRITE(msgBuf,'(A,I5,A)')
571 & 'S/R INI_PARMS: selectVortScheme=', selectVortScheme,
572 & ' conflicts with "SadournyCoriolis"'
573 CALL PRINT_ERROR( msgBuf, myThid )
574 STOP 'ABNORMAL END: S/R INI_PARMS'
575 ENDIF
576 ENDIF
577
578 IF ( ivdc_kappa .NE. 0. .AND. .NOT. implicitDiffusion ) THEN
579 WRITE(msgBuf,'(A,A)')
580 & 'S/R INI_PARMS: To use ivdc_kappa you must enable implicit',
581 & ' vertical diffusion.'
582 CALL PRINT_ERROR( msgBuf, myThid )
583 STOP 'ABNORMAL END: S/R INI_PARMS'
584 ENDIF
585
586 coordsSet = 0
587 IF ( zCoordInputData ) coordsSet = coordsSet + 1
588 IF ( pCoordInputData ) coordsSet = coordsSet + 1
589 IF ( rCoordInputData ) coordsSet = coordsSet + 1
590 IF ( coordsSet .GT. 1 ) THEN
591 WRITE(msgBuf,'(A)')
592 & 'S/R INI_PARMS: Cannot mix z, p and r in the input data.'
593 CALL PRINT_ERROR( msgBuf, myThid )
594 STOP 'ABNORMAL END: S/R INI_PARMS'
595 ENDIF
596 IF ( rhoConst .LE. 0. ) THEN
597 WRITE(msgBuf,'(A)')
598 & 'S/R INI_PARMS: rhoConst must be greater than 0.'
599 CALL PRINT_ERROR( msgBuf, myThid )
600 STOP 'ABNORMAL END: S/R INI_PARMS'
601 ELSE
602 recip_rhoConst = 1.D0 / rhoConst
603 ENDIF
604 IF ( rhoNil .LE. 0. ) THEN
605 WRITE(msgBuf,'(A)')
606 & 'S/R INI_PARMS: rhoNil must be greater than 0.'
607 CALL PRINT_ERROR( msgBuf, myThid )
608 STOP 'ABNORMAL END: S/R INI_PARMS'
609 ELSE
610 recip_rhoNil = 1.D0 / rhoNil
611 ENDIF
612 IF ( HeatCapacity_Cp .LE. 0. ) THEN
613 WRITE(msgBuf,'(A)')
614 & 'S/R INI_PARMS: HeatCapacity_Cp must be greater than 0.'
615 CALL PRINT_ERROR( msgBuf, myThid )
616 STOP 'ABNORMAL END: S/R INI_PARMS'
617 ELSE
618 recip_Cp = 1.D0 / HeatCapacity_Cp
619 ENDIF
620 IF ( gravity .LE. 0. ) THEN
621 WRITE(msgBuf,'(A)')
622 & 'S/R INI_PARMS: gravity must be greater than 0.'
623 CALL PRINT_ERROR( msgBuf, myThid )
624 STOP 'ABNORMAL END: S/R INI_PARMS'
625 ELSE
626 recip_gravity = 1.D0 / gravity
627 ENDIF
628 C This flags are now passed to RW and MDSIO packages in ini_model_io.F
629 C Set globalFiles flag for READ_WRITE_FLD package
630 c CALL SET_WRITE_GLOBAL_FLD( globalFiles )
631 C Set globalFiles flag for READ_WRITE_REC package
632 c CALL SET_WRITE_GLOBAL_REC( globalFiles )
633 C Set globalFiles flag for READ_WRITE_REC package
634 c CALL SET_WRITE_GLOBAL_PICKUP( globalFiles )
635
636 C Check for retired parameters still being used
637 nRetired = 0
638 IF ( zonal_filt_lat .NE. UNSET_RL ) THEN
639 nRetired = nRetired+1
640 WRITE(msgBuf,'(A,A)')
641 & 'S/R INI_PARMS: Paramater "zonal_filt_lat" is',
642 & ' no longer allowed in file "data".'
643 CALL PRINT_ERROR( msgBuf, myThid )
644 WRITE(msgBuf,'(A,A)')
645 & 'S/R INI_PARMS: Paramater "zonal_filt_lat" is',
646 & ' now read from file "data.zonfilt".'
647 CALL PRINT_ERROR( msgBuf, myThid )
648 ENDIF
649 IF ( gravitySign .NE. UNSET_RL ) THEN
650 nRetired = nRetired+1
651 WRITE(msgBuf,'(A,A)')
652 & 'S/R INI_PARMS: "gravitySign" is set according to vertical ',
653 & ' coordinate and is no longer allowed in file "data".'
654 CALL PRINT_ERROR( msgBuf, myThid )
655 ENDIF
656 IF ( tracerAdvScheme .NE. UNSET_I ) THEN
657 nRetired = nRetired+1
658 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: "tracerAdvScheme" ',
659 & '(old passive tracer code) is no longer allowed in file "data"'
660 CALL PRINT_ERROR( msgBuf, myThid )
661 ENDIF
662 IF ( trac_EvPrRn .NE. UNSET_RL ) THEN
663 nRetired = nRetired+1
664 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: "trac_EvPrRn" ',
665 & '(old passive tracer code) is no longer allowed in file "data"'
666 CALL PRINT_ERROR( msgBuf, myThid )
667 ENDIF
668 IF ( .NOT. tempDiffusion ) THEN
669 nRetired = nRetired+1
670 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: "tempDiffusion" ',
671 & 'is no longer allowed in file "data"'
672 CALL PRINT_ERROR( msgBuf, myThid )
673 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: to turn off diffusion',
674 & ' => set diffusivity to zero'
675 CALL PRINT_ERROR( msgBuf, myThid )
676 ENDIF
677 IF ( .NOT. saltDiffusion ) THEN
678 nRetired = nRetired+1
679 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: "saltDiffusion" ',
680 & 'is no longer allowed in file "data"'
681 CALL PRINT_ERROR( msgBuf, myThid )
682 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: to turn off diffusion',
683 & ' => set diffusivity to zero'
684 CALL PRINT_ERROR( msgBuf, myThid )
685 ENDIF
686 IF ( viscAstrain .NE. UNSET_RL ) THEN
687 nRetired = nRetired+1
688 WRITE(msgBuf,'(A,A)')
689 & 'S/R INI_PARMS: "viscAstrain" ',
690 & 'is no longer allowed in file "data"'
691 CALL PRINT_ERROR( msgBuf, myThid )
692 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: to use Strain & Tension',
693 & ' formulation => set useStrainTensionVisc to TRUE'
694 CALL PRINT_ERROR( msgBuf, myThid )
695 ENDIF
696 IF ( viscAtension .NE. UNSET_RL ) THEN
697 nRetired = nRetired+1
698 WRITE(msgBuf,'(A,A)')
699 & 'S/R INI_PARMS: "viscAtension" ',
700 & 'is no longer allowed in file "data"'
701 CALL PRINT_ERROR( msgBuf, myThid )
702 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: to use Strain & Tension',
703 & ' formulation => set useStrainTensionVisc to TRUE'
704 CALL PRINT_ERROR( msgBuf, myThid )
705 ENDIF
706 IF ( .NOT.useAnisotropicViscAgridMax ) THEN
707 nRetired = nRetired+1
708 WRITE(msgBuf,'(A,A)')
709 & 'S/R INI_PARMS: "useAnisotropicViscAgridMax" ',
710 & 'is not allowed in "data" substitute useAreaViscLength=true'
711 CALL PRINT_ERROR( msgBuf, myThid )
712 ENDIF
713 IF ( usePickupBeforeC35 ) THEN
714 nRetired = nRetired+1
715 WRITE(msgBuf,'(A,A)')
716 & 'S/R INI_PARMS: "usePickupBeforeC35" ',
717 & 'is no longer supported & not longer allowed in file "data"'
718 CALL PRINT_ERROR( msgBuf, myThid )
719 ENDIF
720
721 C-- Elliptic solver parameters
722 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; starts to read PARM02'
723 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
724 & SQUEEZE_RIGHT, myThid )
725 READ(UNIT=iUnit,NML=PARM02) !,IOSTAT=errIO)
726 IF ( errIO .LT. 0 ) THEN
727 WRITE(msgBuf,'(A)')
728 & 'S/R INI_PARMS'
729 CALL PRINT_ERROR( msgBuf, myThid )
730 WRITE(msgBuf,'(A)')
731 & 'Error reading numerical model '
732 CALL PRINT_ERROR( msgBuf, myThid )
733 WRITE(msgBuf,'(A)')
734 & 'parameter file "data".'
735 CALL PRINT_ERROR( msgBuf, myThid )
736 WRITE(msgBuf,'(A)')
737 & 'Problem in namelist PARM02'
738 CALL PRINT_ERROR( msgBuf, myThid )
739 CALL MODELDATA_EXAMPLE( myThid )
740 STOP 'ABNORMAL END: S/R INI_PARMS'
741 ELSE
742 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; read PARM02 : OK'
743 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
744 & SQUEEZE_RIGHT, myThid )
745 ENDIF
746
747 C-- Time stepping parameters
748 rCD = -1.D0
749 latBandClimRelax = UNSET_RL
750 deltaTtracer = 0. _d 0
751 forcing_In_AB = .TRUE.
752 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; starts to read PARM03'
753 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
754 & SQUEEZE_RIGHT, myThid )
755 READ(UNIT=iUnit,NML=PARM03) !,IOSTAT=errIO)
756 IF ( errIO .LT. 0 ) THEN
757 WRITE(msgBuf,'(A)')
758 & 'S/R INI_PARMS'
759 CALL PRINT_ERROR( msgBuf, myThid )
760 WRITE(msgBuf,'(A)')
761 & 'Error reading numerical model '
762 CALL PRINT_ERROR( msgBuf, myThid )
763 WRITE(msgBuf,'(A)')
764 & 'parameter file "data"'
765 CALL PRINT_ERROR( msgBuf, myThid )
766 WRITE(msgBuf,'(A)')
767 & 'Problem in namelist PARM03'
768 CALL PRINT_ERROR( msgBuf, myThid )
769 CALL MODELDATA_EXAMPLE( myThid )
770 STOP 'ABNORMAL END: S/R INI_PARMS'
771 ELSE
772 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; read PARM03 : OK'
773 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
774 & SQUEEZE_RIGHT, myThid )
775 ENDIF
776 C Check for retired parameters still being used
777 IF ( tauThetaClimRelax3Dim .NE. UNSET_RL ) THEN
778 nRetired = nRetired+1
779 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: "tauThetaClimRelax3Dim" ',
780 & 'is no longer allowed in file "data"'
781 CALL PRINT_ERROR( msgBuf, myThid )
782 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: 3-dim. relaxation code',
783 & ' has moved to separate pkg/rbcs.'
784 CALL PRINT_ERROR( msgBuf, myThid )
785 ENDIF
786 IF ( tauSaltClimRelax3Dim .NE. UNSET_RL ) THEN
787 nRetired = nRetired+1
788 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: "tauSaltClimRelax3Dim" ',
789 & 'is no longer allowed in file "data"'
790 CALL PRINT_ERROR( msgBuf, myThid )
791 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: 3-dim. relaxation code',
792 & ' has moved to separate pkg/rbcs.'
793 CALL PRINT_ERROR( msgBuf, myThid )
794 ENDIF
795 IF ( calendarDumps ) THEN
796 nRetired = nRetired+1
797 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: "calendarDumps" ',
798 & 'is no longer allowed in file "data"'
799 CALL PRINT_ERROR( msgBuf, myThid )
800 WRITE(msgBuf,'(A,A)') 'S/R INI_PARMS: calendarDumps',
801 & ' has moved to "data.cal"'
802 CALL PRINT_ERROR( msgBuf, myThid )
803 ENDIF
804
805 C Process "timestepping" params
806 C o Time step size
807 IF ( deltaTtracer .NE. dTtracerLev(1) .AND.
808 & deltaTtracer .NE. 0. .AND. dTtracerLev(1) .NE. 0. ) THEN
809 WRITE(msgBuf,'(A)')
810 & 'S/R INI_PARMS: deltaTtracer & dTtracerLev(1) not equal'
811 CALL PRINT_ERROR( msgBuf, myThid )
812 STOP 'ABNORMAL END: S/R INI_PARMS'
813 ELSEIF ( dTtracerLev(1) .NE. 0. ) THEN
814 deltaTtracer = dTtracerLev(1)
815 ENDIF
816 IF ( deltaT .EQ. 0. ) deltaT = deltaTClock
817 IF ( deltaT .EQ. 0. ) deltaT = deltaTtracer
818 IF ( deltaT .EQ. 0. ) deltaT = deltaTmom
819 IF ( deltaT .EQ. 0. ) deltaT = deltaTfreesurf
820 IF ( deltaTmom .EQ. 0. ) deltaTmom = deltaT
821 IF ( deltaTtracer .EQ. 0. ) deltaTtracer = deltaT
822 IF ( deltaTClock .EQ. 0. ) deltaTClock = deltaT
823 DO k=1,Nr
824 IF (dTtracerLev(k).EQ.0.) dTtracerLev(k)= deltaTtracer
825 ENDDO
826 C Note that this line should set deltaFreesurf=deltaTtracer
827 C but this would change a lot of existing set-ups so we are
828 C obliged to set the default inappropriately.
829 C Be advised that when using asynchronous time stepping
830 C it is better to set deltaTreesurf=deltaTtracer
831 IF ( deltaTfreesurf .EQ. 0. ) deltaTfreesurf = deltaTmom
832 IF ( periodicExternalForcing ) THEN
833 IF ( externForcingCycle*externForcingPeriod .EQ. 0. ) THEN
834 WRITE(msgBuf,'(A)')
835 & 'S/R INI_PARMS: externForcingCycle,externForcingPeriod =0'
836 CALL PRINT_ERROR( msgBuf, myThid )
837 STOP 'ABNORMAL END: S/R INI_PARMS'
838 ENDIF
839 IF ( INT(externForcingCycle/externForcingPeriod) .NE.
840 & externForcingCycle/externForcingPeriod ) THEN
841 WRITE(msgBuf,'(A)')
842 & 'S/R INI_PARMS: externForcingCycle <> N*externForcingPeriod'
843 CALL PRINT_ERROR( msgBuf, myThid )
844 STOP 'ABNORMAL END: S/R INI_PARMS'
845 ENDIF
846 IF ( externForcingCycle.lt.externForcingPeriod ) THEN
847 WRITE(msgBuf,'(A)')
848 & 'S/R INI_PARMS: externForcingCycle < externForcingPeriod'
849 CALL PRINT_ERROR( msgBuf, myThid )
850 STOP 'ABNORMAL END: S/R INI_PARMS'
851 ENDIF
852 IF ( externForcingPeriod.lt.deltaTclock ) THEN
853 WRITE(msgBuf,'(A)')
854 & 'S/R INI_PARMS: externForcingPeriod < deltaTclock'
855 CALL PRINT_ERROR( msgBuf, myThid )
856 STOP 'ABNORMAL END: S/R INI_PARMS'
857 ENDIF
858 ENDIF
859 C o Adams-Bashforth time stepping:
860 IF ( momForcingOutAB .EQ. UNSET_I ) THEN
861 momForcingOutAB = 1
862 IF ( forcing_In_AB ) momForcingOutAB = 0
863 ENDIF
864 IF ( tracForcingOutAB .EQ. UNSET_I ) THEN
865 tracForcingOutAB = 1
866 IF ( forcing_In_AB ) tracForcingOutAB = 0
867 ENDIF
868 C o Convection frequency
869 IF ( cAdjFreq .LT. 0. ) THEN
870 cAdjFreq = deltaTClock
871 ENDIF
872 IF ( ivdc_kappa .NE. 0. .AND. cAdjFreq .NE. 0. ) THEN
873 WRITE(msgBuf,'(A,A)')
874 & 'S/R INI_PARMS: You have enabled both ivdc_kappa and',
875 & ' convective adjustment.'
876 CALL PRINT_ERROR( msgBuf, myThid )
877 STOP 'ABNORMAL END: S/R INI_PARMS'
878 ENDIF
879 IF (useCDscheme) THEN
880 C o CD coupling (CD scheme):
881 IF ( tauCD .EQ. 0.D0 ) tauCD = deltaTmom
882 IF ( rCD .LT. 0. ) rCD = 1. _d 0 - deltaTMom/tauCD
883 ENDIF
884 C o Temperature climatology relaxation time scale
885 IF ( tauThetaClimRelax .EQ. 0.D0 ) THEN
886 doThetaClimRelax = .FALSE.
887 ELSE
888 doThetaClimRelax = .TRUE.
889 ENDIF
890 C o Salinity climatology relaxation time scale
891 IF ( tauSaltClimRelax .EQ. 0.D0 ) THEN
892 doSaltClimRelax = .FALSE.
893 ELSE
894 doSaltClimRelax = .TRUE.
895 ENDIF
896
897 C o Base time
898 IF ( nIter0.NE.0 .AND. startTime.NE.0. .AND. baseTime.EQ.0. )
899 & baseTime = startTime - deltaTClock*float(nIter0)
900 C o Start time
901 IF ( nIter0 .NE. 0 .AND. startTime .EQ. 0. )
902 & startTime = baseTime + deltaTClock*float(nIter0)
903 C o nIter0
904 IF ( nIter0 .EQ. 0 .AND. startTime .NE. baseTime )
905 & nIter0 = NINT( (startTime-baseTime)/deltaTClock )
906
907 C o nTimeSteps 1
908 IF ( nTimeSteps .EQ. 0 .AND. nEndIter .NE. 0 )
909 & nTimeSteps = nEndIter-nIter0
910 C o nTimeSteps 2
911 IF ( nTimeSteps .EQ. 0 .AND. endTime .NE. 0. )
912 & nTimeSteps = NINT((endTime-startTime)/deltaTclock)
913 C o nEndIter 1
914 IF ( nEndIter .EQ. 0 .AND. nTimeSteps .NE. 0 )
915 & nEndIter = nIter0+nTimeSteps
916 C o nEndIter 2
917 IF ( nEndIter .EQ. 0 .AND. endTime .NE. 0. )
918 & nEndIter = NINT((endTime-baseTime)/deltaTclock)
919 C o End Time 1
920 IF ( endTime .EQ. 0. .AND. nTimeSteps .NE. 0 )
921 & endTime = startTime + deltaTClock*float(nTimeSteps)
922 C o End Time 2
923 IF ( endTime .EQ. 0. .AND. nEndIter .NE. 0 )
924 & endTime = baseTime + deltaTClock*float(nEndIter)
925
926 C o Consistent?
927 IF ( startTime .NE. baseTime+deltaTClock*float(nIter0) ) THEN
928 WRITE(msgBuf,'(A)')
929 & 'S/R INI_PARMS: startTime, baseTime and nIter0 are inconsistent'
930 CALL PRINT_ERROR( msgBuf, myThid )
931 WRITE(msgBuf,'(A)')
932 & 'S/R INI_PARMS: Perhaps more than two were set at once'
933 CALL PRINT_ERROR( msgBuf, myThid )
934 STOP 'ABNORMAL END: S/R INI_PARMS'
935 ENDIF
936 IF ( nEndIter .NE. nIter0+nTimeSteps ) THEN
937 WRITE(msgBuf,'(A)')
938 & 'S/R INI_PARMS: nIter0, nTimeSteps and nEndIter are inconsistent'
939 CALL PRINT_ERROR( msgBuf, myThid )
940 WRITE(msgBuf,'(A)')
941 & 'S/R INI_PARMS: Perhaps more than two were set at once'
942 CALL PRINT_ERROR( msgBuf, myThid )
943 STOP 'ABNORMAL END: S/R INI_PARMS'
944 ENDIF
945 IF ( nTimeSteps .NE. NINT((endTime-startTime)/deltaTClock)
946 & ) THEN
947 WRITE(msgBuf,'(A)')
948 & 'S/R INI_PARMS: both endTime and nTimeSteps have been set'
949 CALL PRINT_ERROR( msgBuf, myThid )
950 WRITE(msgBuf,'(A)')
951 & 'S/R INI_PARMS: but are inconsistent'
952 CALL PRINT_ERROR( msgBuf, myThid )
953 STOP 'ABNORMAL END: S/R INI_PARMS'
954 ENDIF
955
956 C o Monitor (should also add CPP flag for monitor?)
957 IF (monitorFreq.LT.0.) THEN
958 monitorFreq=0.
959 IF (dumpFreq.NE.0.) monitorFreq=dumpFreq
960 IF (diagFreq.NE.0..AND.diagFreq.LT.monitorFreq)
961 & monitorFreq=diagFreq
962 IF (taveFreq.NE.0..AND.taveFreq.LT.monitorFreq)
963 & monitorFreq=taveFreq
964 IF (chkPtFreq.NE.0..AND.chkPtFreq.LT.monitorFreq)
965 & monitorFreq=chkPtFreq
966 IF (pChkPtFreq.NE.0..AND.pChkPtFreq.LT.monitorFreq)
967 & monitorFreq=pChkPtFreq
968 IF (monitorFreq.EQ.0.) monitorFreq=deltaTclock
969 ENDIF
970 IF ( monitorSelect.EQ.UNSET_I ) THEN
971 monitorSelect = 2
972 IF ( fluidIsWater ) monitorSelect = 3
973 ENDIF
974
975 C-- Grid parameters
976 C In cartesian coords distances are in metres
977 DO K =1,Nr
978 delZ(K) = UNSET_RL
979 delP(K) = UNSET_RL
980 delR(K) = UNSET_RL
981 ENDDO
982 C In spherical polar distances are in degrees
983 dxSpacing = UNSET_RL
984 dySpacing = UNSET_RL
985 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; starts to read PARM04'
986 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
987 & SQUEEZE_RIGHT, myThid )
988 READ(UNIT=iUnit,NML=PARM04,IOSTAT=errIO)
989 IF ( errIO .LT. 0 ) THEN
990 WRITE(msgBuf,'(A)')
991 & 'S/R INI_PARMS'
992 CALL PRINT_ERROR( msgBuf, myThid )
993 WRITE(msgBuf,'(A)')
994 & 'Error reading numerical model '
995 CALL PRINT_ERROR( msgBuf, myThid )
996 WRITE(msgBuf,'(A)')
997 & 'parameter file "data"'
998 CALL PRINT_ERROR( msgBuf, myThid )
999 WRITE(msgBuf,'(A)')
1000 & 'Problem in namelist PARM04'
1001 CALL PRINT_ERROR( msgBuf, myThid )
1002 CALL MODELDATA_EXAMPLE( myThid )
1003 STOP 'ABNORMAL END: S/R INI_PARMS'
1004 ELSE
1005 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; read PARM04 : OK'
1006 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
1007 & SQUEEZE_RIGHT, myThid )
1008 ENDIF
1009
1010 C Check for retired parameters still being used
1011 IF ( rkFac .NE. UNSET_RL ) THEN
1012 nRetired = nRetired+1
1013 WRITE(msgBuf,'(A,A)')
1014 & 'S/R INI_PARMS: "rkFac" has been replaced by -rkSign ',
1015 & ' and is no longer allowed in file "data".'
1016 CALL PRINT_ERROR( msgBuf, myThid )
1017 ENDIF
1018 IF ( groundAtK1 ) THEN
1019 c nRetired = nRetired+1
1020 WRITE(msgBuf,'(A,A)')
1021 & 'S/R INI_PARMS: "groundAtK1" is set according to vertical ',
1022 & ' coordinate and is no longer allowed in file "data".'
1023 CALL PRINT_ERROR( msgBuf, myThid )
1024 ENDIF
1025
1026 C X coordinate : Check for multiple definitions
1027 goptCount = 0
1028 IF ( delX(1) .NE. UNSET_RL ) goptCount = goptCount + 1
1029 IF ( dxSpacing .NE. UNSET_RL ) goptCount = goptCount + 1
1030 IF ( delXFile .NE. ' ' ) goptCount = goptCount + 1
1031 IF ( goptCount.GT.1 ) THEN
1032 WRITE(msgBuf,'(A,A)') 'Too many specifications for delX:',
1033 & 'Specify only one of delX, dxSpacing or delXfile'
1034 CALL PRINT_ERROR( msgBuf, myThid )
1035 STOP 'ABNORMAL END: S/R INI_PARMS'
1036 ENDIF
1037 IF ( dxSpacing .NE. UNSET_RL ) THEN
1038 DO i=1,Nx
1039 delX(i) = dxSpacing
1040 ENDDO
1041 ENDIF
1042 C Y coordinate : Check for multiple definitions
1043 goptCount = 0
1044 IF ( delY(1) .NE. UNSET_RL ) goptCount = goptCount + 1
1045 IF ( dySpacing .NE. UNSET_RL ) goptCount = goptCount + 1
1046 IF ( delYFile .NE. ' ' ) goptCount = goptCount + 1
1047 IF ( goptCount.GT.1 ) THEN
1048 WRITE(msgBuf,'(A,A)') 'Too many specifications for delY:',
1049 & 'Specify only one of delY, dySpacing or delYfile'
1050 CALL PRINT_ERROR( msgBuf, myThid )
1051 STOP 'ABNORMAL END: S/R INI_PARMS'
1052 ENDIF
1053 IF ( dySpacing .NE. UNSET_RL ) THEN
1054 DO j=1,Ny
1055 delY(j) = dySpacing
1056 ENDDO
1057 ENDIF
1058 C
1059 IF ( rSphere .NE. 0. ) THEN
1060 recip_rSphere = 1. _d 0/rSphere
1061 ELSE
1062 recip_rSphere = 0.
1063 ENDIF
1064 C-- Check for conflicting grid definitions.
1065 goptCount = 0
1066 IF ( usingCartesianGrid ) goptCount = goptCount+1
1067 IF ( usingSphericalPolarGrid ) goptCount = goptCount+1
1068 IF ( usingCurvilinearGrid ) goptCount = goptCount+1
1069 IF ( usingCylindricalGrid ) goptCount = goptCount+1
1070 IF ( goptCount .GT. 1 ) THEN
1071 WRITE(msgBuf,'(A)')
1072 & 'S/R INI_PARMS: More than one coordinate system requested'
1073 CALL PRINT_ERROR( msgBuf, myThid )
1074 STOP 'ABNORMAL END: S/R INI_PARMS'
1075 ENDIF
1076 IF ( goptCount .LT. 1 ) THEN
1077 C- No horizontal grid is specified => use Cartesian grid as default:
1078 WRITE(msgBuf,'(A)')
1079 & 'S/R INI_PARMS: No horizontal grid requested'
1080 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
1081 & SQUEEZE_RIGHT, myThid )
1082 WRITE(msgBuf,'(A)')
1083 & 'S/R INI_PARMS: => Use Cartesian Grid as default'
1084 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
1085 & SQUEEZE_RIGHT, myThid )
1086 usingCartesianGrid = .TRUE.
1087 ENDIF
1088 C-- Make metric term & Coriolis settings consistent with underlying grid.
1089 IF ( usingCartesianGrid ) THEN
1090 metricTerms = .FALSE.
1091 useNHMTerms = .FALSE.
1092 useBetaPlaneF = .TRUE.
1093 ENDIF
1094 IF ( usingCylindricalGrid ) THEN
1095 useNHMTerms = .FALSE.
1096 useBetaPlaneF = .TRUE.
1097 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; Cylinder OK'
1098 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
1099 & SQUEEZE_RIGHT, myThid )
1100 ENDIF
1101 IF ( usingCurvilinearGrid ) THEN
1102 metricTerms = .FALSE.
1103 ENDIF
1104 IF ( useConstantF ) useBetaPlaneF = .FALSE.
1105 IF ( useConstantF ) useSphereF = .FALSE.
1106 IF ( useBetaPlaneF ) useSphereF = .FALSE.
1107 IF ( usingCartesianGrid .OR. usingCylindricalGrid
1108 & .OR. .NOT.(nonHydrostatic.OR.quasiHydrostatic) )
1109 & use3dCoriolis = .FALSE.
1110
1111 C-- Grid rotation
1112 IF ( phiEuler .NE. 0. _d 0 .OR. thetaEuler .NE. 0. _d 0
1113 & .OR. psiEuler .NE. 0. _d 0 ) rotateGrid = .TRUE.
1114
1115 C-- Set default for latitude-band where relaxation to climatology applies
1116 C note: done later (once domain size is known) if using CartesianGrid
1117 IF ( latBandClimRelax .EQ. UNSET_RL) THEN
1118 IF ( usingSphericalPolarGrid ) latBandClimRelax= 180. _d 0
1119 IF ( usingCurvilinearGrid ) latBandClimRelax= 180. _d 0
1120 ENDIF
1121 C-- set cell Center depth and put Interface at the middle between 2 C
1122 setCenterDr = .FALSE.
1123 DO K=1,Nr+1
1124 IF ( delRc(K).EQ.UNSET_RL ) THEN
1125 IF ( setCenterDr ) THEN
1126 WRITE(msgBuf,'(A,I4)')
1127 & 'S/R INI_PARMS: No value for delRc at K =', K
1128 CALL PRINT_ERROR( msgBuf, myThid )
1129 STOP 'ABNORMAL END: S/R INI_PARMS'
1130 ENDIF
1131 ELSE
1132 IF ( k.EQ.1 ) setCenterDr = .TRUE.
1133 IF ( .NOT.setCenterDr ) THEN
1134 WRITE(msgBuf,'(A,I4)')
1135 & 'S/R INI_PARMS: No value for delRc at K <', K
1136 CALL PRINT_ERROR( msgBuf, myThid )
1137 STOP 'ABNORMAL END: S/R INI_PARMS'
1138 ENDIF
1139 ENDIF
1140 ENDDO
1141 IF ( setCenterDr ) rCoordInputData = .TRUE.
1142 C-- p, z, r coord parameters
1143 setInterFDr = .FALSE.
1144 DO K = 1, Nr
1145 IF ( delZ(K) .NE. UNSET_RL ) zCoordInputData = .TRUE.
1146 IF ( delP(K) .NE. UNSET_RL ) pCoordInputData = .TRUE.
1147 IF ( delR(K) .NE. UNSET_RL ) rCoordInputData = .TRUE.
1148 IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delZ(K)
1149 IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delP(K)
1150 IF ( delR(K) .EQ. UNSET_RL ) THEN
1151 IF ( setInterFDr ) THEN
1152 WRITE(msgBuf,'(A,I4)')
1153 & 'S/R INI_PARMS: No value for delZ/delP/delR at K =', K
1154 CALL PRINT_ERROR( msgBuf, myThid )
1155 STOP 'ABNORMAL END: S/R INI_PARMS'
1156 ENDIF
1157 ELSE
1158 IF ( k.EQ.1 ) setInterFDr = .TRUE.
1159 IF ( .NOT.setInterFDr ) THEN
1160 WRITE(msgBuf,'(A,I4)')
1161 & 'S/R INI_PARMS: No value for delZ/delP/delR at K <', K
1162 CALL PRINT_ERROR( msgBuf, myThid )
1163 STOP 'ABNORMAL END: S/R INI_PARMS'
1164 ENDIF
1165 ENDIF
1166 ENDDO
1167 C Check for multiple coordinate systems
1168 coordsSet = 0
1169 IF ( zCoordInputData ) coordsSet = coordsSet + 1
1170 IF ( pCoordInputData ) coordsSet = coordsSet + 1
1171 IF ( rCoordInputData ) coordsSet = coordsSet + 1
1172 IF ( coordsSet .GT. 1 ) THEN
1173 WRITE(msgBuf,'(A)')
1174 & 'S/R INI_PARMS: Cannot mix z, p and r in the input data.'
1175 CALL PRINT_ERROR( msgBuf, myThid )
1176 STOP 'ABNORMAL END: S/R INI_PARMS'
1177 ENDIF
1178 C- Check for double definition (file & namelist)
1179 IF ( delRcFile.NE.' ' ) THEN
1180 IF ( setCenterDr ) THEN
1181 WRITE(msgBuf,'(A)')
1182 & 'S/R INI_PARMS: Cannot set both delRc and delRcFile'
1183 CALL PRINT_ERROR( msgBuf, myThid )
1184 STOP 'ABNORMAL END: S/R INI_PARMS'
1185 ENDIF
1186 setCenterDr = .TRUE.
1187 ENDIF
1188 IF ( delRFile.NE.' ' ) THEN
1189 IF ( setInterFDr ) THEN
1190 WRITE(msgBuf,'(A)')
1191 & 'S/R INI_PARMS: Cannot set both delR and delRFile'
1192 CALL PRINT_ERROR( msgBuf, myThid )
1193 STOP 'ABNORMAL END: S/R INI_PARMS'
1194 ENDIF
1195 setInterFDr = .TRUE.
1196 ENDIF
1197 c IF ( setInterFDr .AND. setCenterDr ) THEN
1198 c WRITE(msgBuf,'(2A)') 'S/R INI_PARMS:',
1199 c & ' Cannot specify both delRc and delZ/delP/delR'
1200 c CALL PRINT_ERROR( msgBuf, myThid )
1201 c STOP 'ABNORMAL END: S/R INI_PARMS'
1202 c ENDIF
1203
1204 C-- Input files
1205 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; starts to read PARM05'
1206 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
1207 & SQUEEZE_RIGHT, myThid )
1208 READ(UNIT=iUnit,NML=PARM05) !,IOSTAT=errIO)
1209 IF ( errIO .LT. 0 ) THEN
1210 WRITE(msgBuf,'(A)')
1211 & 'Error reading numerical model '
1212 CALL PRINT_ERROR( msgBuf, myThid )
1213 WRITE(msgBuf,'(A)')
1214 & 'parameter file "data"'
1215 CALL PRINT_ERROR( msgBuf, myThid )
1216 WRITE(msgBuf,'(A)')
1217 & 'Problem in namelist PARM05'
1218 CALL PRINT_ERROR( msgBuf, myThid )
1219 CALL MODELDATA_EXAMPLE( myThid )
1220 STOP 'ABNORMAL END: S/R INI_PARMS'
1221 ELSE
1222 WRITE(msgBuf,'(A)') 'S/R INI_PARMS ; read PARM05 : OK'
1223 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
1224 & SQUEEZE_RIGHT, myThid )
1225 ENDIF
1226 C Check for retired parameters still being used
1227 IF ( shelfIceFile .NE. ' ' ) THEN
1228 nRetired = nRetired+1
1229 WRITE(msgBuf,'(A,A)')
1230 & 'S/R INI_PARMS: "shelfIceFile" is not allowed in "data", ',
1231 & 'substitute "SHELFICEtopoFile" in data.shelfice'
1232 CALL PRINT_ERROR( msgBuf, myThid )
1233 ENDIF
1234
1235 C-- Set Units conversion factor required to incorporate
1236 C surface forcing into z-p isomorphic equations:
1237 C mass2rUnit: from mass per unit area [kg/m2] to r-coordinate (z:=1/rho;p:=g)
1238 C rUnit2mass: from r-coordinate to mass per unit area [kg/m2] (z:=rho;p:=1/g)
1239 IF ( usingPCoords ) THEN
1240 mass2rUnit = gravity
1241 rUnit2mass = recip_gravity
1242 ELSE
1243 mass2rUnit = recip_rhoConst
1244 rUnit2mass = rhoConst
1245 ENDIF
1246
1247 c-- gradually replacing debugMode by debugLevel
1248 IF ( debugMode ) debugLevel = debLevB
1249 IF ( debugLevel .GE. debLevB ) debugMode = .TRUE.
1250
1251 c-- flag for approximate adjoint
1252 IF ( inAdExact ) THEN
1253 inAdTrue = .FALSE.
1254 inAdFALSE = .FALSE.
1255 ELSE
1256 inAdTrue = .TRUE.
1257 inAdFALSE = .FALSE.
1258 ENDIF
1259 C
1260 CLOSE(iUnit)
1261
1262 C-- Check whether any retired parameters were found.
1263 C-- Stop if they were
1264 IF ( nRetired .GT. 0 ) THEN
1265 WRITE(msgBuf,'(A)')
1266 & 'Error reading parameter file "data"'
1267 CALL PRINT_ERROR( msgBuf, myThid )
1268 WRITE(msgBuf,'(A)')
1269 & 'some out of date parameters were found in the namelist'
1270 CALL PRINT_ERROR( msgBuf, myThid )
1271 STOP 'ABNORMAL END: S/R INI_PARMS'
1272 ENDIF
1273
1274 _END_MASTER(myThid)
1275
1276 C-- Everyone else must wait for the parameters to be loaded
1277 _BARRIER
1278 C
1279 RETURN
1280 END

  ViewVC Help
Powered by ViewVC 1.1.22