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

Annotation 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 - (hide 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 zhc 1.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