/[MITgcm]/MITgcm_contrib/llc_hires/llc_270/code_ad/ini_parms.F
ViewVC logotype

Contents of /MITgcm_contrib/llc_hires/llc_270/code_ad/ini_parms.F

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


Revision 1.1 - (show annotations) (download)
Thu Mar 2 20:13:27 2017 UTC (8 years, 5 months ago) by zhc
Branch: MAIN
CVS Tags: HEAD
llc270 iter33

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

  ViewVC Help
Powered by ViewVC 1.1.22