59 |
LOGICAL SadournyCoriolis |
LOGICAL SadournyCoriolis |
60 |
LOGICAL forcing_In_AB |
LOGICAL forcing_In_AB |
61 |
INTEGER goptCount |
INTEGER goptCount |
62 |
INTEGER K, i, j, IL, iUnit |
INTEGER k, i, j, IL, iUnit |
63 |
INTEGER errIO |
INTEGER errIO |
64 |
C Default values for variables which have vertical coordinate system |
C Default values for variables which have vertical coordinate system |
65 |
C dependency. |
C dependency. |
83 |
C :: z, p or r are used. |
C :: z, p or r are used. |
84 |
C :: coordsSet counts how many vertical coordinate systems have |
C :: coordsSet counts how many vertical coordinate systems have |
85 |
C :: been used to specify variables. coordsSet > 1 is an error. |
C :: been used to specify variables. coordsSet > 1 is an error. |
86 |
C |
C vertSetCount :: to count number of vertical array elements which are set. |
87 |
|
|
88 |
LOGICAL zCoordInputData |
LOGICAL zCoordInputData |
89 |
LOGICAL pCoordInputData |
LOGICAL pCoordInputData |
90 |
LOGICAL rCoordInputData |
LOGICAL rCoordInputData |
91 |
INTEGER coordsSet |
INTEGER coordsSet |
92 |
LOGICAL diffKrSet |
INTEGER vertSetCount |
93 |
|
|
94 |
C Variables which have vertical coordinate system dependency. |
C Variables which have vertical coordinate system dependency. |
95 |
C delZ :: Vertical grid spacing ( m ). |
C delZ :: Vertical grid spacing ( m ). |
104 |
_RL delP(Nr) |
_RL delP(Nr) |
105 |
_RL viscAz |
_RL viscAz |
106 |
_RL viscAp |
_RL viscAp |
107 |
|
_RL viscAr |
108 |
_RL diffKzT |
_RL diffKzT |
109 |
_RL diffKpT |
_RL diffKpT |
110 |
_RL diffKrT |
_RL diffKrT |
175 |
& viscA4, viscA4W, |
& viscA4, viscA4W, |
176 |
& viscA4Max, viscA4Grid, viscA4GridMax, viscA4GridMin, |
& viscA4Max, viscA4Grid, viscA4GridMax, viscA4GridMin, |
177 |
& viscA4ReMax, viscAhReMax, |
& viscA4ReMax, viscAhReMax, |
178 |
& viscAz, cosPower, viscAstrain, viscAtension, |
& cosPower, viscAstrain, viscAtension, |
179 |
& diffKhT, diffKzT, diffK4T, |
& diffKhT, diffK4T, diffKhS, diffK4S, |
|
& diffKhS, diffKzS, diffK4S, |
|
180 |
& tRef, sRef, tRefFile, sRefFile, rhoRefFile, |
& tRef, sRef, tRefFile, sRefFile, rhoRefFile, |
181 |
& eosType, integr_GeoPot, selectFindRoSurf, |
& eosType, integr_GeoPot, selectFindRoSurf, |
182 |
& atm_Cp, atm_Rd, atm_Rq, atm_Po, |
& atm_Cp, atm_Rd, atm_Rq, atm_Po, |
188 |
& tempDiffusion, tempAdvection, tempForcing, |
& tempDiffusion, tempAdvection, tempForcing, |
189 |
& saltDiffusion, saltAdvection, saltForcing, |
& saltDiffusion, saltAdvection, saltForcing, |
190 |
& implicSurfPress, implicDiv2Dflow, |
& implicSurfPress, implicDiv2Dflow, |
191 |
& implicitFreeSurface, rigidLid, freeSurfFac, hFacMin, hFacMinDz, |
& implicitFreeSurface, rigidLid, freeSurfFac, |
192 |
|
& hFacMin, hFacMinDz, hFacMinDp, hFacMinDr, |
193 |
& exactConserv, linFSConserveTr, uniformLin_PhiSurf, |
& exactConserv, linFSConserveTr, uniformLin_PhiSurf, |
194 |
& nonlinFreeSurf, hFacInf, hFacSup, select_rStar, |
& nonlinFreeSurf, hFacInf, hFacSup, select_rStar, |
195 |
& implicitIntGravWave, staggerTimeStep, |
& implicitIntGravWave, staggerTimeStep, |
196 |
& tempStepping, saltStepping, momStepping, |
& tempStepping, saltStepping, momStepping, |
197 |
& implicitDiffusion, implicitViscosity, |
& implicitDiffusion, implicitViscosity, |
198 |
& tempImplVertAdv, saltImplVertAdv, momImplVertAdv, |
& tempImplVertAdv, saltImplVertAdv, momImplVertAdv, |
199 |
& viscAr, diffKrT, diffKrS, diffKrNrT, diffKrNrS, hFacMinDr, |
& viscAz, diffKzT, diffKzS, viscAp, diffKpT, diffKpS, |
200 |
& viscAp, diffKpT, diffKpS, hFacMinDp, |
& viscAr, diffKrT, diffKrS, viscArNr, diffKrNrT, diffKrNrS, |
201 |
& diffKrBL79surf, diffKrBL79deep, diffKrBL79scl, diffKrBL79Ho, |
& diffKrBL79surf, diffKrBL79deep, diffKrBL79scl, diffKrBL79Ho, |
202 |
& BL79LatVary, |
& BL79LatVary, |
203 |
& diffKrBLEQsurf, diffKrBLEQdeep, diffKrBLEQscl, diffKrBLEQHo, |
& diffKrBLEQsurf, diffKrBLEQdeep, diffKrBLEQscl, diffKrBLEQHo, |
386 |
viscA4D = UNSET_RL |
viscA4D = UNSET_RL |
387 |
viscA4Z = UNSET_RL |
viscA4Z = UNSET_RL |
388 |
viscAz = UNSET_RL |
viscAz = UNSET_RL |
|
viscAr = UNSET_RL |
|
389 |
viscAp = UNSET_RL |
viscAp = UNSET_RL |
390 |
|
viscAr = UNSET_RL |
391 |
diffKzT = UNSET_RL |
diffKzT = UNSET_RL |
392 |
diffKpT = UNSET_RL |
diffKpT = UNSET_RL |
393 |
diffKrT = UNSET_RL |
diffKrT = UNSET_RL |
395 |
diffKpS = UNSET_RL |
diffKpS = UNSET_RL |
396 |
diffKrS = UNSET_RL |
diffKrS = UNSET_RL |
397 |
DO k=1,Nr |
DO k=1,Nr |
398 |
|
viscArNr(k) = UNSET_RL |
399 |
diffKrNrT(k) = UNSET_RL |
diffKrNrT(k) = UNSET_RL |
400 |
diffKrNrS(k) = UNSET_RL |
diffKrNrS(k) = UNSET_RL |
401 |
tRef(k) = UNSET_RL |
tRef(k) = UNSET_RL |
518 |
IF ( viscAr .EQ. UNSET_RL ) viscAr = viscAz |
IF ( viscAr .EQ. UNSET_RL ) viscAr = viscAz |
519 |
IF ( viscAr .EQ. UNSET_RL ) viscAr = viscAp |
IF ( viscAr .EQ. UNSET_RL ) viscAr = viscAp |
520 |
IF ( viscAr .EQ. UNSET_RL ) viscAr = viscArDefault |
IF ( viscAr .EQ. UNSET_RL ) viscAr = viscArDefault |
521 |
|
vertSetCount = 0 |
522 |
|
DO k=1,Nr |
523 |
|
IF ( viscArNr(k).EQ.UNSET_RL ) THEN |
524 |
|
viscArNr(k) = viscAr |
525 |
|
ELSE |
526 |
|
vertSetCount = vertSetCount + 1 |
527 |
|
ENDIF |
528 |
|
ENDDO |
529 |
|
IF ( viscAr.NE.viscArDefault .AND. vertSetCount.GT.0 ) THEN |
530 |
|
WRITE(msgBuf,'(2A)') 'S/R INI_PARMS: Cannot set both ', |
531 |
|
& 'viscArNr and viscAr (or Ap,Az) in param file data' |
532 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
533 |
|
STOP 'ABNORMAL END: S/R INI_PARMS' |
534 |
|
ELSEIF ( vertSetCount.GT.0 .AND. vertSetCount.LT.Nr ) THEN |
535 |
|
WRITE(msgBuf,'(A,2(I5,A))') 'S/R INI_PARMS: Partial setting (', |
536 |
|
& vertSetCount, ' /', Nr, ') of viscArNr is not allowed' |
537 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
538 |
|
STOP 'ABNORMAL END: S/R INI_PARMS' |
539 |
|
ENDIF |
540 |
|
|
541 |
IF ( diffKzT .NE. UNSET_RL ) zCoordInputData = .TRUE. |
IF ( diffKzT .NE. UNSET_RL ) zCoordInputData = .TRUE. |
542 |
IF ( diffKpT .NE. UNSET_RL ) pCoordInputData = .TRUE. |
IF ( diffKpT .NE. UNSET_RL ) pCoordInputData = .TRUE. |
544 |
IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKzT |
IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKzT |
545 |
IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKpT |
IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKpT |
546 |
IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKrTDefault |
IF ( diffKrT .EQ. UNSET_RL ) diffKrT = diffKrTDefault |
547 |
diffKrSet = .TRUE. |
vertSetCount = 0 |
548 |
DO k=1,Nr |
DO k=1,Nr |
549 |
IF ( diffKrNrT(k).EQ. UNSET_RL ) diffKrSet = .FALSE. |
IF ( diffKrNrT(k).EQ.UNSET_RL ) THEN |
550 |
|
diffKrNrT(k) = diffKrT |
551 |
|
ELSE |
552 |
|
vertSetCount = vertSetCount + 1 |
553 |
|
ENDIF |
554 |
ENDDO |
ENDDO |
555 |
IF ( .NOT.diffKrSet ) THEN |
IF ( diffKrT.NE.diffKrTDefault .AND. vertSetCount.GT.0 ) THEN |
|
DO k=1,Nr |
|
|
diffKrNrT(k) = diffKrT |
|
|
ENDDO |
|
|
ELSEIF ( diffKrT.NE.diffKrTDefault ) THEN |
|
556 |
WRITE(msgBuf,'(2A)') 'S/R INI_PARMS: Cannot set both ', |
WRITE(msgBuf,'(2A)') 'S/R INI_PARMS: Cannot set both ', |
557 |
& 'diffKrNrT and diffKrT (or Kp,Kz) in input file data' |
& 'diffKrNrT and diffKrT (or Kp,Kz) in param file data' |
558 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
559 |
|
STOP 'ABNORMAL END: S/R INI_PARMS' |
560 |
|
ELSEIF ( vertSetCount.GT.0 .AND. vertSetCount.LT.Nr ) THEN |
561 |
|
WRITE(msgBuf,'(A,2(I5,A))') 'S/R INI_PARMS: Partial setting (', |
562 |
|
& vertSetCount, ' /', Nr, ') of diffKrNrT is not allowed' |
563 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
564 |
STOP 'ABNORMAL END: S/R INI_PARMS' |
STOP 'ABNORMAL END: S/R INI_PARMS' |
565 |
ENDIF |
ENDIF |
570 |
IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKzS |
IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKzS |
571 |
IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKpS |
IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKpS |
572 |
IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKrSDefault |
IF ( diffKrS .EQ. UNSET_RL ) diffKrS = diffKrSDefault |
573 |
diffKrSet = .TRUE. |
vertSetCount = 0 |
574 |
DO k=1,Nr |
DO k=1,Nr |
575 |
IF ( diffKrNrS(k).EQ. UNSET_RL ) diffKrSet = .FALSE. |
IF ( diffKrNrS(k).EQ.UNSET_RL ) THEN |
576 |
|
diffKrNrS(k) = diffKrS |
577 |
|
ELSE |
578 |
|
vertSetCount = vertSetCount + 1 |
579 |
|
ENDIF |
580 |
ENDDO |
ENDDO |
581 |
IF ( .NOT.diffKrSet ) THEN |
IF ( diffKrS.NE.diffKrSDefault .AND. vertSetCount.GT.0 ) THEN |
|
DO k=1,Nr |
|
|
diffKrNrS(k) = diffKrS |
|
|
ENDDO |
|
|
ELSEIF ( diffKrS.NE.diffKrSDefault ) THEN |
|
582 |
WRITE(msgBuf,'(2A)') 'S/R INI_PARMS: Cannot set both ', |
WRITE(msgBuf,'(2A)') 'S/R INI_PARMS: Cannot set both ', |
583 |
& 'diffKrNrS and diffKrS (or Kp,Kz) in input file data' |
& 'diffKrNrS and diffKrS (or Kp,Kz) in param file data' |
584 |
|
CALL PRINT_ERROR( msgBuf, myThid ) |
585 |
|
STOP 'ABNORMAL END: S/R INI_PARMS' |
586 |
|
ELSEIF ( vertSetCount.GT.0 .AND. vertSetCount.LT.Nr ) THEN |
587 |
|
WRITE(msgBuf,'(A,2(I5,A))') 'S/R INI_PARMS: Partial setting (', |
588 |
|
& vertSetCount, ' /', Nr, ') of diffKrNrS is not allowed' |
589 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
590 |
STOP 'ABNORMAL END: S/R INI_PARMS' |
STOP 'ABNORMAL END: S/R INI_PARMS' |
591 |
ENDIF |
ENDIF |
1019 |
|
|
1020 |
C-- Grid parameters |
C-- Grid parameters |
1021 |
C In cartesian coords distances are in metres |
C In cartesian coords distances are in metres |
1022 |
DO K =1,Nr |
DO k =1,Nr |
1023 |
delZ(K) = UNSET_RL |
delZ(k) = UNSET_RL |
1024 |
delP(K) = UNSET_RL |
delP(k) = UNSET_RL |
1025 |
delR(K) = UNSET_RL |
delR(k) = UNSET_RL |
1026 |
ENDDO |
ENDDO |
1027 |
C In spherical polar distances are in degrees |
C In spherical polar distances are in degrees |
1028 |
dxSpacing = UNSET_RL |
dxSpacing = UNSET_RL |
1197 |
ENDIF |
ENDIF |
1198 |
C-- set cell Center depth and put Interface at the middle between 2 C |
C-- set cell Center depth and put Interface at the middle between 2 C |
1199 |
setCenterDr = .FALSE. |
setCenterDr = .FALSE. |
1200 |
DO K=1,Nr+1 |
DO k=1,Nr+1 |
1201 |
IF ( delRc(K).EQ.UNSET_RL ) THEN |
IF ( delRc(k).EQ.UNSET_RL ) THEN |
1202 |
IF ( setCenterDr ) THEN |
IF ( setCenterDr ) THEN |
1203 |
WRITE(msgBuf,'(A,I4)') |
WRITE(msgBuf,'(A,I4)') |
1204 |
& 'S/R INI_PARMS: No value for delRc at K =', K |
& 'S/R INI_PARMS: No value for delRc at k =', k |
1205 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
1206 |
STOP 'ABNORMAL END: S/R INI_PARMS' |
STOP 'ABNORMAL END: S/R INI_PARMS' |
1207 |
ENDIF |
ENDIF |
1209 |
IF ( k.EQ.1 ) setCenterDr = .TRUE. |
IF ( k.EQ.1 ) setCenterDr = .TRUE. |
1210 |
IF ( .NOT.setCenterDr ) THEN |
IF ( .NOT.setCenterDr ) THEN |
1211 |
WRITE(msgBuf,'(A,I4)') |
WRITE(msgBuf,'(A,I4)') |
1212 |
& 'S/R INI_PARMS: No value for delRc at K <', K |
& 'S/R INI_PARMS: No value for delRc at k <', k |
1213 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
1214 |
STOP 'ABNORMAL END: S/R INI_PARMS' |
STOP 'ABNORMAL END: S/R INI_PARMS' |
1215 |
ENDIF |
ENDIF |
1218 |
IF ( setCenterDr ) rCoordInputData = .TRUE. |
IF ( setCenterDr ) rCoordInputData = .TRUE. |
1219 |
C-- p, z, r coord parameters |
C-- p, z, r coord parameters |
1220 |
setInterFDr = .FALSE. |
setInterFDr = .FALSE. |
1221 |
DO K = 1, Nr |
DO k = 1, Nr |
1222 |
IF ( delZ(K) .NE. UNSET_RL ) zCoordInputData = .TRUE. |
IF ( delZ(k) .NE. UNSET_RL ) zCoordInputData = .TRUE. |
1223 |
IF ( delP(K) .NE. UNSET_RL ) pCoordInputData = .TRUE. |
IF ( delP(k) .NE. UNSET_RL ) pCoordInputData = .TRUE. |
1224 |
IF ( delR(K) .NE. UNSET_RL ) rCoordInputData = .TRUE. |
IF ( delR(k) .NE. UNSET_RL ) rCoordInputData = .TRUE. |
1225 |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delZ(K) |
IF ( delR(k) .EQ. UNSET_RL ) delR(k) = delZ(k) |
1226 |
IF ( delR(K) .EQ. UNSET_RL ) delR(K) = delP(K) |
IF ( delR(k) .EQ. UNSET_RL ) delR(k) = delP(k) |
1227 |
IF ( delR(K) .EQ. UNSET_RL ) THEN |
IF ( delR(k) .EQ. UNSET_RL ) THEN |
1228 |
IF ( setInterFDr ) THEN |
IF ( setInterFDr ) THEN |
1229 |
WRITE(msgBuf,'(A,I4)') |
WRITE(msgBuf,'(A,I4)') |
1230 |
& 'S/R INI_PARMS: No value for delZ/delP/delR at K =', K |
& 'S/R INI_PARMS: No value for delZ/delP/delR at k =', k |
1231 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
1232 |
STOP 'ABNORMAL END: S/R INI_PARMS' |
STOP 'ABNORMAL END: S/R INI_PARMS' |
1233 |
ENDIF |
ENDIF |
1235 |
IF ( k.EQ.1 ) setInterFDr = .TRUE. |
IF ( k.EQ.1 ) setInterFDr = .TRUE. |
1236 |
IF ( .NOT.setInterFDr ) THEN |
IF ( .NOT.setInterFDr ) THEN |
1237 |
WRITE(msgBuf,'(A,I4)') |
WRITE(msgBuf,'(A,I4)') |
1238 |
& 'S/R INI_PARMS: No value for delZ/delP/delR at K <', K |
& 'S/R INI_PARMS: No value for delZ/delP/delR at k <', k |
1239 |
CALL PRINT_ERROR( msgBuf, myThid ) |
CALL PRINT_ERROR( msgBuf, myThid ) |
1240 |
STOP 'ABNORMAL END: S/R INI_PARMS' |
STOP 'ABNORMAL END: S/R INI_PARMS' |
1241 |
ENDIF |
ENDIF |