57 |
_RL diffKrTDefault |
_RL diffKrTDefault |
58 |
_RL diffKrSDefault |
_RL diffKrSDefault |
59 |
_RL hFacMinDrDefault |
_RL hFacMinDrDefault |
60 |
_RL delRDefault |
_RL delRDefault(Nr) |
61 |
C zCoordInputData - These are used to select between different coordinate systems. |
C zCoordInputData - These are used to select between different coordinate systems. |
62 |
C pCoordInputData The vertical coordinate system in the rest of the model is |
C pCoordInputData The vertical coordinate system in the rest of the model is |
63 |
C rCoordInputData written in terms of r. In the model "data" file input data can |
C rCoordInputData written in terms of r. In the model "data" file input data can |
85 |
& diffKhS, diffKzS, diffK4S, |
& diffKhS, diffKzS, diffK4S, |
86 |
& GMmaxslope,GMlength,GMalpha,GMdepth,GMkbackground,GMmaxval, |
& GMmaxslope,GMlength,GMalpha,GMdepth,GMkbackground,GMmaxval, |
87 |
& tRef, sRef, eosType, |
& tRef, sRef, eosType, |
88 |
|
& no_slip_sides,no_slip_bottom, |
89 |
& momViscosity, momAdvection, momForcing, useCoriolis, |
& momViscosity, momAdvection, momForcing, useCoriolis, |
90 |
& momPressureForcing, metricTerms, |
& momPressureForcing, metricTerms, |
91 |
& tempDiffusion, tempAdvection, tempForcing, |
& tempDiffusion, tempAdvection, tempForcing, |
95 |
& viscAr, diffKrT, diffKrS, hFacMinDr, |
& viscAr, diffKrT, diffKrS, hFacMinDr, |
96 |
& viscAp, diffKpT, diffKpS, hFacMinDp, |
& viscAp, diffKpT, diffKpS, hFacMinDp, |
97 |
& rhoConst, buoyancyRelation, |
& rhoConst, buoyancyRelation, |
98 |
|
& writeStatePrec, readBinaryPrec, writeStatePrec, |
99 |
& openBoundaries |
& openBoundaries |
100 |
|
|
101 |
C-- Elliptic solver parameters |
C-- Elliptic solver parameters |
130 |
C |
C |
131 |
_BEGIN_MASTER(myThid) |
_BEGIN_MASTER(myThid) |
132 |
|
|
133 |
|
C Defaults values for input parameters |
134 |
|
CALL SET_DEFAULTS( |
135 |
|
O viscArDefault, diffKrTDefault, diffKrSDefault, |
136 |
|
O hFacMinDrDefault, delRdefault, |
137 |
|
I myThid ) |
138 |
|
|
139 |
C-- Initialise "which vertical coordinate system used" flags. |
C-- Initialise "which vertical coordinate system used" flags. |
140 |
zCoordInputData = .FALSE. |
zCoordInputData = .FALSE. |
141 |
pCoordInputData = .FALSE. |
pCoordInputData = .FALSE. |
206 |
REWIND(iUnit) |
REWIND(iUnit) |
207 |
|
|
208 |
C-- Set default "physical" parameters |
C-- Set default "physical" parameters |
|
DO K =1,Nr |
|
|
tRef(K) = 30.D0 - FLOAT( K ) |
|
|
ENDDO |
|
|
gravity = 9.81D0 |
|
|
gBaro = gravity |
|
|
rhoNil = 999.8D0 |
|
|
rhoConst = 999.8D0 |
|
|
f0 = 1.D-4 |
|
|
beta = 1.D-11 |
|
|
viscAh = 1.D3 |
|
|
diffKhT = 1.D3 |
|
|
diffKhS = 1.D3 |
|
|
viscArDefault = 1.D-3 |
|
209 |
viscAz = UNSET_RL |
viscAz = UNSET_RL |
210 |
viscAr = UNSET_RL |
viscAr = UNSET_RL |
211 |
viscAp = UNSET_RL |
viscAp = UNSET_RL |
|
diffKrTDefault = 1.D-5 |
|
212 |
diffKzT = UNSET_RL |
diffKzT = UNSET_RL |
213 |
diffKpT = UNSET_RL |
diffKpT = UNSET_RL |
214 |
diffKrT = UNSET_RL |
diffKrT = UNSET_RL |
|
diffKrSDefault = 1.D-5 |
|
215 |
diffKzS = UNSET_RL |
diffKzS = UNSET_RL |
216 |
diffKpS = UNSET_RL |
diffKpS = UNSET_RL |
217 |
diffKrS = UNSET_RL |
diffKrS = UNSET_RL |
218 |
viscA4 = 0. |
gBaro = UNSET_RL |
219 |
diffK4T = 0. |
rhoConst = UNSET_RL |
|
diffK4S = 0. |
|
|
GMmaxslope = 1.D-2 |
|
|
GMlength = 200.D3 |
|
|
GMalpha = 0.D0 |
|
|
GMdepth = 1000.D0 |
|
|
GMkbackground= 0.D0 |
|
|
GMmaxval = 2500.D0 |
|
|
tAlpha = 2.D-4 |
|
|
sBeta = 7.4D-4 |
|
|
eosType = 'LINEAR' |
|
|
buoyancyRelation = 'OCEANIC' |
|
|
implicitFreeSurface = .TRUE. |
|
|
rigidLid = .FALSE. |
|
|
freeSurfFac = 1.D0 |
|
|
hFacMin = 0.D0 |
|
|
hFacMinDrDefault = 0.D0 |
|
220 |
hFacMinDr = UNSET_RL |
hFacMinDr = UNSET_RL |
221 |
hFacMinDz = UNSET_RL |
hFacMinDz = UNSET_RL |
222 |
hFacMinDp = UNSET_RL |
hFacMinDp = UNSET_RL |
|
momViscosity = .TRUE. |
|
|
momAdvection = .TRUE. |
|
|
momForcing = .TRUE. |
|
|
useCoriolis = .TRUE. |
|
|
momPressureForcing = .TRUE. |
|
|
momStepping = .TRUE. |
|
|
tempStepping = .TRUE. |
|
|
saltStepping = .TRUE. |
|
|
metricTerms = .TRUE. |
|
|
implicitDiffusion = .FALSE. |
|
|
openBoundaries = .FALSE. |
|
223 |
READ(UNIT=iUnit,NML=PARM01,IOSTAT=errIO) |
READ(UNIT=iUnit,NML=PARM01,IOSTAT=errIO) |
224 |
IF ( errIO .LT. 0 ) THEN |
IF ( errIO .LT. 0 ) THEN |
225 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
239 |
ENDIF |
ENDIF |
240 |
IF ( implicitFreeSurface ) freeSurfFac = 1.D0 |
IF ( implicitFreeSurface ) freeSurfFac = 1.D0 |
241 |
IF ( rigidLid ) freeSurfFac = 0.D0 |
IF ( rigidLid ) freeSurfFac = 0.D0 |
242 |
|
IF ( gBaro .EQ. UNSET_RL ) gBaro=gravity |
243 |
|
IF ( rhoConst .EQ. UNSET_RL ) rhoConst=rhoNil |
244 |
C-- Momentum viscosity on/off flag. |
C-- Momentum viscosity on/off flag. |
245 |
IF ( momViscosity ) THEN |
IF ( momViscosity ) THEN |
246 |
vfFacMom = 1.D0 |
vfFacMom = 1.D0 |
339 |
ELSE |
ELSE |
340 |
recip_rhoNil = 1.D0 / rhoNil |
recip_rhoNil = 1.D0 / rhoNil |
341 |
ENDIF |
ENDIF |
342 |
|
IF ( HeatCapacity_Cp .LE. 0. ) THEN |
343 |
|
WRITE(msgBuf,'(A)') |
344 |
|
& 'S/R INI_PARMS: HeatCapacity_Cp must be greater than 0.' |
345 |
|
CALL PRINT_ERROR( msgBuf , myThid) |
346 |
|
STOP 'ABNORMAL END: S/R INI_PARMS' |
347 |
|
ELSE |
348 |
|
recip_Cp = 1.D0 / HeatCapacity_Cp |
349 |
|
ENDIF |
350 |
IF ( gravity .LE. 0. ) THEN |
IF ( gravity .LE. 0. ) THEN |
351 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
352 |
& 'S/R INI_PARMS: gravity must be greater than 0.' |
& 'S/R INI_PARMS: gravity must be greater than 0.' |
357 |
ENDIF |
ENDIF |
358 |
|
|
359 |
C-- Elliptic solver parameters |
C-- Elliptic solver parameters |
|
cg2dMaxIters = 150 |
|
|
cg2dTargetResidual = 1.D-7 |
|
|
cg2dChkResFreq = 1 |
|
|
cg3dMaxIters = 150 |
|
|
cg3dTargetResidual = 1.D-7 |
|
|
cg3dChkResFreq = 1 |
|
|
cg2dpcOffDFac = 0.51D0 |
|
360 |
READ(UNIT=iUnit,NML=PARM02,IOSTAT=errIO) |
READ(UNIT=iUnit,NML=PARM02,IOSTAT=errIO) |
361 |
IF ( errIO .LT. 0 ) THEN |
IF ( errIO .LT. 0 ) THEN |
362 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
376 |
ENDIF |
ENDIF |
377 |
|
|
378 |
C-- Time stepping parameters |
C-- Time stepping parameters |
|
startTime = 0. |
|
|
nTimeSteps = 0 |
|
|
endTime = 0. |
|
|
nIter0 = 0 |
|
|
deltaT = 0. |
|
|
deltaTClock = 0. |
|
|
deltaTtracer = 0. |
|
|
deltaTMom = 0. |
|
|
abEps = 0.01 |
|
|
pchkPtFreq = 0. |
|
|
chkPtFreq = 3600.*25 |
|
|
dumpFreq = 3600.*100 |
|
|
taveFreq = 0. |
|
|
writeStatePrec = precFloat64 |
|
|
nCheckLev = 1 |
|
|
checkPtSuff(1) = 'ckptA' |
|
|
checkPtSuff(2) = 'ckptB' |
|
|
cAdjFreq = -1.D0 |
|
379 |
rCD = -1.D0 |
rCD = -1.D0 |
|
tauCD = 0.D0 |
|
|
tauThetaClimRelax = 0.D0 |
|
|
doThetaClimRelax = .FALSE. |
|
|
tauSaltClimRelax = 0.D0 |
|
|
doSaltClimRelax = .FALSE. |
|
|
periodicExternalForcing = .FALSE. |
|
|
externForcingPeriod = 0. |
|
|
externForcingCycle = 0. |
|
380 |
READ(UNIT=iUnit,NML=PARM03,IOSTAT=errIO) |
READ(UNIT=iUnit,NML=PARM03,IOSTAT=errIO) |
381 |
IF ( errIO .LT. 0 ) THEN |
IF ( errIO .LT. 0 ) THEN |
382 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
484 |
C-- Grid parameters |
C-- Grid parameters |
485 |
C In cartesian coords distances are in metres |
C In cartesian coords distances are in metres |
486 |
rkFac = UNSET_I |
rkFac = UNSET_I |
|
usingCartesianGrid = .TRUE. |
|
|
delRDefault = 1.D2 |
|
487 |
DO K =1,Nr |
DO K =1,Nr |
488 |
delZ(K) = UNSET_RL |
delZ(K) = UNSET_RL |
489 |
delP(K) = UNSET_RL |
delP(K) = UNSET_RL |
490 |
delR(K) = UNSET_RL |
delR(K) = UNSET_RL |
491 |
ENDDO |
ENDDO |
|
dxSpacing = 20.D0 * 1000.D0 |
|
|
dySpacing = 20.D0 * 1000.D0 |
|
|
DO i=1,Nx |
|
|
delX(i) = dxSpacing |
|
|
ENDDO |
|
|
DO j=1,Ny |
|
|
delY(j) = dySpacing |
|
|
ENDDO |
|
492 |
C In spherical polar distances are in degrees |
C In spherical polar distances are in degrees |
|
usingSphericalPolarGrid = .FALSE. |
|
|
phiMin = -5.0 |
|
|
thetaMin = 0. |
|
|
rSphere = 6370. * 1.D3 |
|
493 |
recip_rSphere = 1.D0/rSphere |
recip_rSphere = 1.D0/rSphere |
494 |
IF ( usingSphericalPolarGrid ) THEN |
dxSpacing = UNSET_RL |
495 |
dxSpacing = 1. |
dySpacing = UNSET_RL |
|
dySpacing = 1. |
|
|
DO I=1,Nx |
|
|
delX(I) = dxSpacing |
|
|
ENDDO |
|
|
DO J=1,Ny |
|
|
delY(J) = dySpacing |
|
|
ENDDO |
|
|
ENDIF |
|
|
|
|
496 |
READ(UNIT=iUnit,NML=PARM04,IOSTAT=errIO) |
READ(UNIT=iUnit,NML=PARM04,IOSTAT=errIO) |
497 |
IF ( errIO .LT. 0 ) THEN |
IF ( errIO .LT. 0 ) THEN |
498 |
WRITE(msgBuf,'(A)') |
WRITE(msgBuf,'(A)') |
511 |
STOP 'ABNORMAL END: S/R INI_PARMS' |
STOP 'ABNORMAL END: S/R INI_PARMS' |
512 |
ENDIF |
ENDIF |
513 |
C |
C |
514 |
|
IF ( dxSpacing .NE. UNSET_RL ) THEN |
515 |
|
DO i=1,Nx |
516 |
|
delX(i) = dxSpacing |
517 |
|
ENDDO |
518 |
|
ENDIF |
519 |
|
IF ( dySpacing .NE. UNSET_RL ) THEN |
520 |
|
DO j=1,Ny |
521 |
|
delY(j) = dySpacing |
522 |
|
ENDDO |
523 |
|
ENDIF |
524 |
IF ( rSphere .NE. 0 ) THEN |
IF ( rSphere .NE. 0 ) THEN |
525 |
recip_rSphere = 1.D0/rSphere |
recip_rSphere = 1.D0/rSphere |
526 |
ELSE |
ELSE |
578 |
IF ( delR(K) .NE. UNSET_RL ) rCoordInputData = .TRUE. |
IF ( delR(K) .NE. UNSET_RL ) rCoordInputData = .TRUE. |
579 |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delZ(K) |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delZ(K) |
580 |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delP(K) |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delP(K) |
581 |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delRDefault |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delRDefault(K) |
582 |
ENDDO |
ENDDO |
583 |
C Check for multiple coordinate systems |
C Check for multiple coordinate systems |
584 |
coordsSet = 0 |
CoordsSet = 0 |
585 |
IF ( zCoordInputData ) coordsSet = coordsSet + 1 |
IF ( zCoordInputData ) coordsSet = coordsSet + 1 |
586 |
IF ( pCoordInputData ) coordsSet = coordsSet + 1 |
IF ( pCoordInputData ) coordsSet = coordsSet + 1 |
587 |
IF ( rCoordInputData ) coordsSet = coordsSet + 1 |
IF ( rCoordInputData ) coordsSet = coordsSet + 1 |
645 |
IF ( pCoordInputData ) usingPCoords = .TRUE. |
IF ( pCoordInputData ) usingPCoords = .TRUE. |
646 |
|
|
647 |
C-- OBCS |
C-- OBCS |
|
DO I=1,Nx |
|
|
OB_Jnorth(I)=0 |
|
|
OB_Jsouth(I)=0 |
|
|
ENDDO |
|
|
DO J=1,Ny |
|
|
OB_Ieast(J)=0 |
|
|
OB_Iwest(J)=0 |
|
|
ENDDO |
|
648 |
IF (openBoundaries) THEN |
IF (openBoundaries) THEN |
649 |
READ(UNIT=iUnit,NML=PARM06) |
READ(UNIT=iUnit,NML=PARM06) |
650 |
DO J=1,Ny |
DO J=1,Ny |