/[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.214 - (hide annotations) (download)
Fri May 30 03:05:21 2008 UTC (16 years ago) by cnh
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61
Changes since 1.213: +2 -2 lines
Put eddyPsi back now that PARAMS is there!!!! :-)

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

  ViewVC Help
Powered by ViewVC 1.1.22