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

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

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


Revision 1.219 - (hide annotations) (download)
Fri Nov 14 03:04:09 2008 UTC (15 years, 6 months ago) by dfer
Branch: MAIN
CVS Tags: checkpoint61f, checkpoint61g, checkpoint61h
Changes since 1.218: +2 -2 lines
Add smoothing parameter for mixed-layer diagnostics

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

  ViewVC Help
Powered by ViewVC 1.1.22