*IF DEF,OCEAN LARGE.2
C ******************************COPYRIGHT****************************** LARGE.3
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. LARGE.4
C LARGE.5
C Use, duplication or disclosure of this code is subject to the LARGE.6
C restrictions as set forth in the contract. LARGE.7
C LARGE.8
C Meteorological Office LARGE.9
C London Road LARGE.10
C BRACKNELL LARGE.11
C Berkshire UK LARGE.12
C RG12 2SZ LARGE.13
C LARGE.14
C If no contract has been raised with this copy of the code, the use, LARGE.15
C duplication or disclosure of it is strictly prohibited. Permission LARGE.16
C to do so must first be obtained in writing from the Head of Numerical LARGE.17
C Modelling at the above address. LARGE.18
C ******************************COPYRIGHT****************************** LARGE.19
C LARGE.20
CLL LARGE.21
CLL SEVERAL ROUTINES REQUIRED BY THE FULL LARGE SCHEME LARGE.22
CLL LARGE.23
CLL Author: Carolyn Roberts LARGE.24
CLL LARGE.25
CLL Description : LARGE.26
CLL LARGE.27
CLL A. FUNCTION CALCULATING THE SOLAR IRRADIANCE AT DEPTH D LARGE.28
CLL IN THE FORM LARGE.29
CLL I(D)=I0 * SUM (R(I) EXP (-D/MU(I)) (SUM FROM I=1 TO N) LARGE.30
CLL WHERE I(D)=SOLAR IRRADIANCE AT DEPTH D LARGE.31
CLL I0=SOLAR IRRADIANCE AT SURFACE LARGE.32
CLL N=NO OF BANDS SOLAR SPECTRUM DIVIDED INTO LARGE.33
CLL R(I) = FRACTION OF TOTAL RADIATION IN BAND I LARGE.34
CLL MU(I) = RECIPROCAL OF BAND I'S ABSORPTION COEFF LARGE.35
CLL LARGE.36
CLL LARGE.37
CLL B. FUNCTIONS CALCULATING THE NONDIMENSIONAL FLUX PROFILE FOR LARGE.38
CLL MOMENTUM AND TRACERS AS FUNCTIONS OF THE STABILITY PARAMETER LARGE.39
CLL AS DEFINED IN APPENDIX B OF LARGE LARGE.40
CLL 1. FOR MOMENTUM FLUX_PROFILEM(STABIL_PARAM) LARGE.41
CLL FLUX_PROFILEM = 1 + 5*STABIL_PARAM LARGE.42
CLL FOR 0.0 LE STABIL_PARAM LARGE.43
CLL = ( 1 - 16*STABIL_PARAM )**(-1/4) LARGE.44
CLL FOR -0.2 LE STABIL_PARAM LT 0.0 LARGE.45
CLL = (1.26 - 8.38*STABIL_PARAM )**(-1/3) LARGE.46
CLL FOR STABIL_PARAM LT -0.2 LARGE.47
CLL 2. FOR TRACERS FLUX_PROFILET(STABIL_PARAM) LARGE.48
CLL FLUX_PROFILET = 1 + 5*STABIL_PARAM LARGE.49
CLL FOR 0.0 LE STABIL_PARAM LARGE.50
CLL = ( 1 - 16*STABIL_PARAM )**(-1/2) LARGE.51
CLL FOR -1.0 LE STABIL_PARAM LT 0.0 LARGE.52
CLL = (-28.86 - 98.96*STABIL_PARAM )**(-1/3) LARGE.53
CLL FOR STABIL_PARAM LT -1.0 LARGE.54
CLL LARGE.55
CLL C. SUBROUTINE CALCULATING THE MIXED LAYER DEPTH BASED ON FINDING LARGE.56
CLL THE DEPTH WHERE THE RICHARDSON NO EXCEEDS A CRITICAL VALUE, LARGE.57
CLL CRIT_RI_FL, USING GRADIENT RICHARDSON NUMBER (CALC_MLD_LARGEG). LARGE.58
CLL LARGE.59
CLL D. SUBROUTINE CALCULATING THE MIXED LAYER DEPTH BASED ON FINDING LARGE.60
CLL THE DEPTH WHERE THE RICHARDSON NO EXCEEDS A CRITICAL VALUE, LARGE.61
CLL CRIT_RI_FL, USING BULK RICHARDSON NUMBER (CALC_MLD_LARGEB). LARGE.62
CLL LARGE.63
CLL E. FUNCTION CALCULATING THE LOCAL GRADIENT RICHARDSON NO LARGE.64
CLL GRADIENT_RICHSN((DRHO,RHOBAR,DU,DV,GRAV) LARGE.65
CLL GRADIENT_RICHSN=-(GRAV*DRHO)/MAX(RHOBAR*(DU*DU+DV*DV,FX) LARGE.66
CLL WHERE FX=1.E-12 LARGE.67
CLL I.E. RI= -G*DRHO/DZ / (AVERAGE RHO)*(DU/DZ^2+DV/DZ^2) LARGE.68
CLL LARGE.69
CLL External documentation: LARGE.70
CLL LARGE.71
CLL Implemented at UM vn 4.5 26 June 1998 LARGE.72
CLL LARGE.73
CLL Modification History : LARGE.74
CLL Version Date Comment & Name LARGE.75
CLL ------- -------- -------------------------------------------- LARGE.76
CLL LARGE.77
CLL Subroutine dependencies. LARGE.78
CLL LARGE.79
CLL SOL_IRRA_1B, FLUX_PROFILEM, and FLUX_PROFILET called by VERTCOFT LARGE.80
CLL and VERTCOFC. LARGE.81
CLL CALC_MLD_LARGEG (or CALC_MLD_LARGEB) called by ROWCALC, and LARGE.82
CLL CALCESAV or CALCDIFF. LARGE.83
CLL LARGE.84
CLLEND------------------------------------------------------------------ LARGE.85
C LARGE.86
REAL FUNCTION SOL_IRRA_1B(I0,D) 3LARGE.87
IMPLICIT NONE LARGE.88
C LARGE.89
REAL LARGE.90
& I0 ! IN SOLAR IRRADIANCE AT SURFACE LARGE.91
&, D ! IN DEPTH TO CALCULATE SOLAR IRRADIANCE AT IN CM LARGE.92
INTEGER LARGE.93
& N ! NO OF BANDS SOLAR SPECTRUM DIVIDED INTO LARGE.94
PARAMETER(N=2) LARGE.95
REAL LARGE.96
& R(N) ! FRACTION OF TOTAL RADIATION IN BAND I LARGE.97
&, MUR(N) ! ABSORPTION COEFF FOR BAND I IN CM^-1 LARGE.98
C LARGE.99
*CALL UMSCALAR
LARGE.100
C LARGE.101
C R(1)=RSOL AND R(2)=1.0-R(1) LARGE.102
C THE VALUES BELOW OF R(I) ARE THOSE USED IN THE MIXED LAYER CODE LARGE.103
R(1)=RSOL LARGE.104
R(2)=1.0 - RSOL LARGE.105
MUR(1)=ETA1_SI*1.E-2 ! CONVERSION TO CM^-1 LARGE.106
MUR(2)=ETA2_SI*1.E-2 ! CONVERSION TO CM^-1 LARGE.107
C LARGE.108
SOL_IRRA_1B=I0*(R(1)*EXP(-D*MUR(1))+R(2)*EXP(-D*MUR(2))) LARGE.109
C LARGE.110
RETURN LARGE.111
END LARGE.112
C LARGE.113
REAL FUNCTION FLUX_PROFILEM(STABIL_PARAM) 3LARGE.114
IMPLICIT NONE LARGE.115
C LARGE.116
REAL LARGE.117
& STABIL_PARAM ! IN STABILITY PARAMETER LARGE.118
IF (0.0.LE.STABIL_PARAM) THEN LARGE.119
FLUX_PROFILEM = 1.0 + 5.0*STABIL_PARAM LARGE.120
ELSE LARGE.121
IF (-0.2.LE.STABIL_PARAM) THEN LARGE.122
FLUX_PROFILEM = ( 1.0 - 16.0*STABIL_PARAM )**(-0.25) LARGE.123
ELSE LARGE.124
FLUX_PROFILEM = (1.26 - 8.38*STABIL_PARAM )**(-1.0/3.0) LARGE.125
ENDIF LARGE.126
ENDIF LARGE.127
RETURN LARGE.128
END LARGE.129
C LARGE.130
REAL FUNCTION FLUX_PROFILET(STABIL_PARAM) 5LARGE.131
IMPLICIT NONE LARGE.132
C LARGE.133
REAL LARGE.134
& STABIL_PARAM ! IN STABILITY PARAMETER LARGE.135
IF (0.0.LE.STABIL_PARAM) THEN LARGE.136
FLUX_PROFILET = 1.0 + 5.0*STABIL_PARAM LARGE.137
ELSE LARGE.138
IF (-1.0.LE.STABIL_PARAM) THEN LARGE.139
FLUX_PROFILET = ( 1.0 - 16.0*STABIL_PARAM )**(-0.5) LARGE.140
ELSE LARGE.141
FLUX_PROFILET = (-28.86 - 98.96*STABIL_PARAM )**(-1.0/3.0) LARGE.142
ENDIF LARGE.143
ENDIF LARGE.144
RETURN LARGE.145
END LARGE.146
C LARGE.147
SUBROUTINE CALC_MLD_LARGEG(J,KM,IMT 4,2LARGE.148
&, RHO_WATER_SI,GRAV_SI,CRIT_RI_FL,NO_LAYERS_IN_LEV LARGE.149
&, ZDZ,DZ,DZZ,L_OCYCLIC LARGE.150
&, UB,VB,UBM,VBM LARGE.151
&, FM,RHO,MLD_LARGE,RI LARGE.152
& ) LARGE.153
CLL CALCULATE THE MIXED LAYER DEPTH AS THE DEPTH WHERE THE RICHARDSON LARGE.154
CLL NUMBER EXCEEDS CRIT_RI_FL LARGE.155
IMPLICIT NONE LARGE.156
C DEFINE ARGUMENT LIST VARIABLES LARGE.157
INTEGER LARGE.158
& KM,IMT,I,J,K,M LARGE.159
REAL LARGE.160
& RHO_WATER_SI ! IN DENSITY OF SEA WATER = 1026. KG/M^3 LARGE.161
&, UB(IMT,KM),VB(IMT,KM) ! IN HORIZ VELOCITY IN CM/S, ROW J LARGE.162
&, UBM(IMT,KM),VBM(IMT,KM) ! IN HORIZ VELOCITY IN CM/S, ROW J-1 LARGE.163
&, FM(IMT,KM) ! IN LAND/SEA MASK ON TRACER POINTS LARGE.164
&, GRAV_SI ! IN ACCELERATION DUE TO GRAVITY (M/S^2) LARGE.165
&, ZDZ(KM) ! IN DEPTH OF BOTTOM OF LAYER (CM) LARGE.166
&, DZZ(KM+1) ! IN DISTANCE BETWEEN MIDPTS OF LEVELS (CM) LARGE.167
&, DZ(KM) ! IN DEPTH OF LEVEL K (CM) LARGE.168
&, CRIT_RI_FL ! IN CRITICAL RICHARDSON NO TO FIND MLD LARGE.169
&, RHO(IMT,KM) ! IN DENSITY IN G/CM^3 ?????????? UNITS LARGE.170
&, MLD_LARGE(IMT) ! OUT MIXED LAYER DEPTH (CM) LARGE.171
&, RI(IMT,KM) ! OUT GRADIENT RICHARDSON NO AT BOTTOM OF BOX LARGE.172
INTEGER LARGE.173
& NO_LAYERS_IN_LEV ! IN NO OF LEVELS WITHIN A LAYER CONSIDERED TO LARGE.174
! CALCULATE MLD_LARGE LARGE.175
LOGICAL LARGE.176
& L_OCYCLIC ! IN LOGICAL FOR CYCLIC CONDITIONS LARGE.177
C DEFINE LOCAL VARIABLES LARGE.178
REAL LARGE.179
& RHO0 ! DENSITY OF SEA WATER = 1.026 G/CM^3 LARGE.180
&, WSXT(IMT),WSYT(IMT) ! WIND STRESS ON TRACER GRID LARGE.181
&, UBT(IMT,KM),VBT(IMT,KM) ! HORIZONTAL VELOCITY ON TRACER GRID LARGE.182
&, DUTOP(KM+1) ! DU/DZ AT TOP OF GRIDBOX AT TRACER POINTS LARGE.183
&, DVTOP(KM+1) ! DV/DZ AT TOP OF GRIDBOX AT TRACER POINTS LARGE.184
&, DRHOTOP(KM+1) ! DRHO/DZ AT TOP OF GRIDBOX AT TRACER POINTS LARGE.185
&, GRAV ! GRAV_SI IN CGS UNITS LARGE.186
&, DU,DV,DRHO ! DU/DZ,DV/DZ,DRHO/DZ ON LAYERS NEAR MLD LARGE.187
&, RIC ! RICHARDSON NO ON LEVEL CONSIDERED LARGE.188
INTEGER LARGE.189
& N_LEVELS(IMT) ! NO OF VERTICAL SEA LEVELS AT A GRIDPOINT LARGE.190
&, CRIT_LEVEL ! LEVEL WITHIN WHICH THE MLD_LARGE IS CONTAINED LARGE.191
C DEFINE FUNCTIONS LARGE.192
REAL GRADIENT_RICHSN LARGE.193
INTEGER L1 LARGE.194
LARGE.195
C SET CONSTANTS REQUIRED BELOW LARGE.196
RHO0=RHO_WATER_SI*0.001 ! CONVERT TO CGS UNITS LARGE.197
GRAV=GRAV_SI*100. ! CONVERT TO CGS UNITS LARGE.198
LARGE.199
C CALCULATE NO OF SEA LEVELS LARGE.200
DO I=1,IMT LARGE.201
N_LEVELS(I)=0 LARGE.202
DO K=1,KM LARGE.203
IF (FM(I,K).GT.0.5) THEN LARGE.204
N_LEVELS(I)=N_LEVELS(I)+1 LARGE.205
ELSE LARGE.206
GOTO 30 LARGE.207
ENDIF LARGE.208
ENDDO LARGE.209
30 CONTINUE LARGE.210
ENDDO LARGE.211
C NEED CURRENTS ON TRACER POINTS LARGE.212
DO I=2,IMT LARGE.213
DO K=1,KM LARGE.214
UBT(I,K)=0.25*(UB(I-1,K)+UB(I,K)+UBM(I-1,K)+UBM(I,K)) LARGE.215
VBT(I,K)=0.25*(VB(I-1,K)+VB(I,K)+VBM(I-1,K)+VBM(I,K)) LARGE.216
ENDDO LARGE.217
ENDDO LARGE.218
IF (L_OCYCLIC) THEN LARGE.219
DO K=1,KM LARGE.220
UBT(1,K)=UBT(IMT-1,K) LARGE.221
VBT(1,K)=VBT(IMT-1,K) LARGE.222
ENDDO LARGE.223
ELSE LARGE.224
DO K=1,KM LARGE.225
UBT(1,K)=0.5*(UB(1,K)+UBM(1,K)) LARGE.226
VBT(1,K)=0.5*(VB(1,K)+VBM(1,K)) LARGE.227
ENDDO LARGE.228
ENDIF LARGE.229
C CALCULATE THE MIXED LAYER DEPTH LARGE.230
DO I=1,IMT LARGE.231
MLD_LARGE(I)=0.0 LARGE.232
DO K=1,KM LARGE.233
RI(I,K)=50000. LARGE.234
ENDDO LARGE.235
IF (FM(I,1).GT.0.5) THEN LARGE.236
L1=0 LARGE.237
C CALCULATE RI AT THE TOP OF EACH LEVEL UNTIL THE CRITICAL RI NUMBER LARGE.238
C IS EXCEEDED. LARGE.239
DO K=2,N_LEVELS(I)+1 LARGE.240
IF (K.LT.KM+1) THEN LARGE.241
DUTOP(K)=(UBT(I,K-1)-UBT(I,K))/DZZ(K) LARGE.242
DVTOP(K)=(VBT(I,K-1)-VBT(I,K))/DZZ(K) LARGE.243
DRHOTOP(K)=(RHO(I,K-1)-RHO(I,K))/DZZ(K) LARGE.244
ELSE LARGE.245
DUTOP(K)=0. LARGE.246
DVTOP(K)=0. LARGE.247
DRHOTOP(K)=0. LARGE.248
ENDIF LARGE.249
RI(I,K-1)=GRADIENT_RICHSN
(DRHOTOP(K),RHO0,DUTOP(K), LARGE.250
& DVTOP(K),GRAV) LARGE.251
IF (RI(I,K-1).GT.CRIT_RI_FL) THEN LARGE.252
CRIT_LEVEL=K-1 LARGE.253
GOTO 10 LARGE.254
ENDIF LARGE.255
ENDDO LARGE.256
C THE FOLLOWING 2 LINES ONLY OCCUR IF RI_CRIT HAS NOT BEEN EXCEEDED LARGE.257
C BY BOTTOM OF OCEAN. IN THIS CASE SET MLD_LARGE AS OCEAN BOTTOM LARGE.258
L1=1 LARGE.259
MLD_LARGE(I)=ZDZ(N_LEVELS(I)) LARGE.260
GOTO 100 LARGE.261
10 CONTINUE LARGE.262
IF (CRIT_LEVEL.EQ.1) THEN LARGE.263
C IF RI AT BOTTOM OF 1ST LAYER IS GREATER THAN CRIT_RI_FL SET MLD_LARGE LARGE.264
C TO BOTTOM OF FIRST LAYER LARGE.265
MLD_LARGE(I)=ZDZ(1) LARGE.266
L1=2 LARGE.267
ELSE LARGE.268
C CONSIDER LEVEL IN WHICH MLD_LARGE OCCURS AND FIND MLD_LARGE WITHIN LARGE.269
C THIS LEVEL. LARGE.270
C PENG (AS HERE) USES A MAX OF 5 LAYERS WITHIN EACH LEVEL AND SETS LARGE.271
C MLD_LARGE TO NEAREST. LARGE.272
L1=3 LARGE.273
DO M=1,NO_LAYERS_IN_LEV-1 LARGE.274
DU=DUTOP(CRIT_LEVEL) + LARGE.275
& (DUTOP(CRIT_LEVEL+1)-DUTOP(CRIT_LEVEL)) LARGE.276
& *FLOAT(M)/FLOAT(NO_LAYERS_IN_LEV) LARGE.277
DV=DVTOP(CRIT_LEVEL) + LARGE.278
& (DVTOP(CRIT_LEVEL+1)-DVTOP(CRIT_LEVEL)) LARGE.279
& *FLOAT(M)/FLOAT(NO_LAYERS_IN_LEV) LARGE.280
DRHO=DRHOTOP(CRIT_LEVEL) + LARGE.281
& (DRHOTOP(CRIT_LEVEL+1)-DRHOTOP(CRIT_LEVEL)) LARGE.282
& *FLOAT(M)/FLOAT(NO_LAYERS_IN_LEV) LARGE.283
RIC=GRADIENT_RICHSN
(DRHO,RHO0,DU,DV,GRAV) LARGE.284
IF (RIC.GE.CRIT_RI_FL) THEN LARGE.285
MLD_LARGE(I)=0.0 LARGE.286
IF (CRIT_LEVEL.GT.1) MLD_LARGE(I)=ZDZ(CRIT_LEVEL-1) LARGE.287
MLD_LARGE(I)=MLD_LARGE(I) + LARGE.288
& FLOAT(M)*DZ(CRIT_LEVEL)/FLOAT(NO_LAYERS_IN_LEV) LARGE.289
GOTO 20 LARGE.290
ELSE LARGE.291
IF (M.EQ.NO_LAYERS_IN_LEV-1) LARGE.292
& MLD_LARGE(I)=ZDZ(CRIT_LEVEL) LARGE.293
ENDIF LARGE.294
L1=L1+1 LARGE.295
ENDDO LARGE.296
20 CONTINUE LARGE.297
ENDIF LARGE.298
100 CONTINUE LARGE.299
IF (ABS(MLD_LARGE(I)).LT.0.5) LARGE.300
& WRITE(6,*) 'CALC_MLD_LARGE',I,L1 LARGE.301
ENDIF LARGE.302
ENDDO LARGE.303
RETURN LARGE.304
END LARGE.305
C LARGE.306
SUBROUTINE CALC_MLD_LARGEB(J,KM,IMT,NT 4,4LARGE.307
&, RHO_WATER_SI,GRAV_SI,SPECIFIC_HEAT_SI,CRIT_RI_FL LARGE.308
&, ZDZ,DZ,ZDZZ,DZZ,L_OCYCLIC,L_SEAICE LARGE.309
&, UB,VB,UBM,VBM,TB,RHO,HTN LARGE.310
&, PME,WATERFLUX_ICE,SOL,WME,OCEANHEATFLUX,CARYHEAT,FLXTOICE LARGE.311
&, FM,MLD_LARGE,RI LARGE.312
& ) LARGE.313
CLL CALCULATE THE MIXED LAYER DEPTH AS THE DEPTH WHERE THE BULK LARGE.314
CLL RICHARDSON NUMBER EXCEEDS CRIT_RI_FL LARGE.315
IMPLICIT NONE LARGE.316
C DEFINE ARGUMENT LIST VARIABLES LARGE.317
C LARGE.318
C*---------------------------------------------------------------------- LARGE.319
C VKMAN IS VON KARMAN'S CONSTANT LARGE.320
REAL VKMAN LARGE.321
LARGE.322
PARAMETER(VKMAN=0.4) LARGE.323
C*---------------------------------------------------------------------- LARGE.324
LARGE.325
C LARGE.326
INTEGER LARGE.327
& KM,IMT,NT,I,J,K,M LARGE.328
REAL LARGE.329
& UB(IMT,KM),VB(IMT,KM) ! IN HORIZ VELOCITY IN CM/S, ROW J LARGE.330
&, UBM(IMT,KM),VBM(IMT,KM) ! IN HORIZ VELOCITY IN CM/S, ROW J-1 LARGE.331
&, TB(IMT,KM,NT) ! IN LARGE.332
&, RHO(IMT,KM) ! IN DENSITY ARRAY FOR ROW J LARGE.333
&, FM(IMT,KM) ! IN LAND/SEA MASK ON TRACER POINTS LARGE.334
&, RHO_WATER_SI,GRAV_SI,SPECIFIC_HEAT_SI ! IN CONSTANTS LARGE.335
&, ZDZ(KM) ! IN DEPTH OF BOTTOM OF LAYER (CM) LARGE.336
&, DZ(KM) ! IN DEPTH OF LEVEL K (CM) LARGE.337
&, DZZ(KM+1) ! IN DISTANCE BETWEEN MIDPTS OF LEVELS (CM) LARGE.338
&, ZDZZ(KM+1) ! IN DEPTH OF MIDPTS OF LEVELS (CM) LARGE.339
&, CRIT_RI_FL,UBTREF,VBTREF,RHOREF,SLD LARGE.340
&, DRZ,DUZ,DVZ,DELZ,DRDZ,DUDZ,DVDZ LARGE.341
&, MLD_LARGE(IMT) ! OUT MIXED LAYER DEPTH (CM) LARGE.342
&, RI(IMT,KM) !OUT LARGE.343
&, PME(IMT),WATERFLUX_ICE(IMT),SOL(IMT),WME(IMT),HTN(IMT) !IN LARGE.344
&, OCEANHEATFLUX(IMT),CARYHEAT(IMT),FLXTOICE(IMT) !IN LARGE.345
INTEGER LARGE.346
& NO_LAYERS_IN_LEV ! IN NO OF LEVELS WITHIN A LAYER CONSIDERED TO LARGE.347
! CALCULATE MLD_LARGE LARGE.348
LOGICAL LARGE.349
& L_OCYCLIC,L_SEAICE LARGE.350
C DEFINE LOCAL VARIABLES LARGE.351
REAL LARGE.352
& UBT(IMT,KM),VBT(IMT,KM) ! HORIZONTAL VELOCITY ON TRACER GRID LARGE.353
&, RHO0,GRAV,CP0 ! RHO/GRAV/CP IN CGS UNITS LARGE.354
&, UDIFF,VDIFF,RDIFF ! VERT JUMPS(LEV 1 - LEV K) LARGE.355
&, DENOM,ANSQ,ANSET,WATERFLUX,SFC_HEATFLUX,ALPHA,BETA,WTK LARGE.356
&, FX,BFK,BF(IMT),L_T(IMT),STABIL_PARAM,EPSILON,SIGMA LARGE.357
&, ALPHAI(IMT,1),BETAI(IMT,1),RHO_FRESHWATER,USTAR(IMT) LARGE.358
&, ZCV,ZCS,ZEPSILON,ZBT,ZCONST LARGE.359
INTEGER LARGE.360
& N_LEVELS(IMT) ! NO OF VERTICAL SEA LEVELS AT A GRIDPOINT LARGE.361
&, CRIT_LEVEL ! LEVEL WITHIN WHICH THE MLD_LARGE IS CONTAINED LARGE.362
&, KK,ITEST LARGE.363
C DEFINE FUNCTIONS LARGE.364
REAL LARGE.365
& SOL_IRRA_1B, FLUX_PROFILET LARGE.366
C LARGE.367
C LARGE.368
C SET CONSTANTS REQUIRED BELOW LARGE.369
RHO_FRESHWATER=1.0 ! IN G/CM^3 LARGE.370
RHO0=RHO_WATER_SI*0.001 ! CONVERT TO CGS UNITS LARGE.371
GRAV=GRAV_SI*100. ! CONVERT TO CGS UNITS LARGE.372
CP0=SPECIFIC_HEAT_SI*1.E4 ! IN CM^2 S^-2 K^-1 LARGE.373
EPSILON=0.1 LARGE.374
C LARGE.375
C CONSTANTS ASSOCIATED WITH VT TERM IN BULK RI (EQUATION 21 IN LARGE.376
C LARGE, EQUATION 8.3.11 IN NURSER REVIEW). LARGE.377
ZCV=1.5 LARGE.378
ZCS=98.96 LARGE.379
ZEPSILON=EPSILON LARGE.380
ZBT=0.2 LARGE.381
ZCONST=(ZCV*SQRT(ZBT))/ LARGE.382
& (CRIT_RI_FL*(VKMAN**2)*SQRT(ZCS*ZEPSILON)) LARGE.383
C LARGE.384
C CALCULATE NO OF SEA LEVELS LARGE.385
DO I=1,IMT LARGE.386
N_LEVELS(I)=0 LARGE.387
DO K=1,KM LARGE.388
IF (FM(I,K).GT.0.5) THEN LARGE.389
N_LEVELS(I)=N_LEVELS(I)+1 LARGE.390
ELSE LARGE.391
GOTO 30 LARGE.392
ENDIF LARGE.393
ENDDO LARGE.394
30 CONTINUE LARGE.395
ENDDO LARGE.396
C SET UP USTAR. 1000.0 CONVERTS FROM SI UNITS TO CGS UNITS. LARGE.397
C USTAR^3 = WME/RHO0 LARGE.398
C LARGE.399
DO I=1,IMT LARGE.400
USTAR(I)=(1000.0*WME(I)/RHO0)**(1.0/3.0) LARGE.401
ENDDO LARGE.402
C LARGE.403
C CALCULATE ALPHA AND BETA FOR ROW J LARGE.404
C LARGE.405
CALL DRODT
(TB,TB(1,1,2),ALPHAI,IMT,1) LARGE.406
CALL DRODS
(TB,TB(1,1,2),BETAI,IMT,1) LARGE.407
C LARGE.408
C FIND BF CONTRIBUTION FROM SURFACE TERMS LARGE.409
C LARGE.410
DO I=1,IMT LARGE.411
ALPHA=-1.*ALPHAI(I,1) LARGE.412
BETA=BETAI(I,1) LARGE.413
C LARGE.414
IF (FM(I,1).GT.0.5) THEN LARGE.415
C FACTORS CONVERT TO CGS UNITS. LARGE.416
C HTN,SOL W/M^2=KG/S^3=1000G/S^3 LARGE.417
C PME,WATERFLUX_ICE KG/M^2/S=0.1G/CM^2/S LARGE.418
C ******************************************************************* LARGE.419
WATERFLUX=PME(I)+WATERFLUX_ICE(I) LARGE.420
LARGE.421
IF(L_SEAICE)THEN LARGE.422
SFC_HEATFLUX=OCEANHEATFLUX(I)-FLXTOICE(I)+CARYHEAT(I) LARGE.423
ELSE LARGE.424
SFC_HEATFLUX=HTN(I) LARGE.425
ENDIF LARGE.426
C LARGE.427
C FIND SURFACE ONLY CONTRIBUTIONS TO BF LARGE.428
C LARGE.429
BF(I) = GRAV*( ((ALPHA*SFC_HEATFLUX*1000.)/(RHO0*CP0)) LARGE.430
& + ((BETA*WATERFLUX*0.1*0.035)/RHO_FRESHWATER) ) LARGE.431
& + (GRAV*ALPHA*SOL(I)*1000.)/(RHO0*CP0) LARGE.432
C ************************************************************** LARGE.433
ELSE LARGE.434
BF(I)=0.0 LARGE.435
ENDIF LARGE.436
ENDDO LARGE.437
C LARGE.438
C NEED CURRENTS ON TRACER POINTS LARGE.439
C LARGE.440
DO I=2,IMT LARGE.441
DO K=1,KM LARGE.442
UBT(I,K)=0.25*(UB(I-1,K)+UB(I,K)+UBM(I-1,K)+UBM(I,K)) LARGE.443
VBT(I,K)=0.25*(VB(I-1,K)+VB(I,K)+VBM(I-1,K)+VBM(I,K)) LARGE.444
ENDDO LARGE.445
ENDDO LARGE.446
IF (L_OCYCLIC) THEN LARGE.447
DO K=1,KM LARGE.448
UBT(1,K)=UBT(IMT-1,K) LARGE.449
VBT(1,K)=VBT(IMT-1,K) LARGE.450
ENDDO LARGE.451
ELSE LARGE.452
DO K=1,KM LARGE.453
UBT(1,K)=0.5*(UB(1,K)+UBM(1,K)) LARGE.454
VBT(1,K)=0.5*(VB(1,K)+VBM(1,K)) LARGE.455
ENDDO LARGE.456
ENDIF LARGE.457
C CALCULATE THE MIXED LAYER DEPTH LARGE.458
FX=1.E-12 LARGE.459
C LARGE.460
C MAIN I-LOOP LARGE.461
C LARGE.462
DO I=1,IMT LARGE.463
C LARGE.464
ALPHA=-1.0*ALPHAI(I,1) LARGE.465
MLD_LARGE(I)=0.0 LARGE.466
C LARGE.467
DO K=1,KM LARGE.468
RI(I,K)=50000.0 LARGE.469
ENDDO LARGE.470
C LARGE.471
IF (FM(I,1).GT.0.5) THEN ! OCEAN POINT CHOICE LARGE.472
C LARGE.473
C CALCULATE BULK RI AT MID-LAYER POINTS UNTIL THE LARGE.474
C CRITICAL RI NUMBER IS EXCEEDED. LARGE.475
C LARGE.476
C MAIN K-LOOP TO CALCULATE RI LARGE.477
C LARGE.478
DO K=2,MIN(N_LEVELS(I),KM-1) LARGE.479
C LARGE.480
C SET UP MONIN-OBUKOV DEPTH FOR LEVEL K LARGE.481
C LARGE.482
BFK=BF(I) - (GRAV*ALPHA)* ( LARGE.483
& SOL_IRRA_1B
(SOL(I)*1000.,ZDZZ(K))/(RHO0*CP0) ) LARGE.484
C LARGE.485
IF (ABS(BFK).LT.1.0E-12) THEN LARGE.486
IF (BFK.GE.0.0) BFK=1.0E-12 LARGE.487
IF (BFK.LT.0.0) BFK=-1.0E-12 LARGE.488
ENDIF LARGE.489
C CALCULATE MONIN-OBUKHOV LENGTH, L_T, CM = (CM/S)^3 / (CM^2/S^3) LARGE.490
L_T(I) = USTAR(I)**3/(VKMAN*BFK) LARGE.491
IF (ABS(L_T(I)).LT.1.0E-12) THEN LARGE.492
IF (L_T(I).GE.0.0) L_T(I)=1.0E-12 LARGE.493
IF (L_T(I).LT.0.0) L_T(I)=-1.0E-12 LARGE.494
ENDIF LARGE.495
C LARGE.496
C CALCULATE WTK - DEPTH DEPENDENT TURBULENT VELOCITY SCALE PROFILE LARGE.497
C AT LEVEL K (LARGE, EQN 13). ZDZZ(K) IS THE BOUNDARY LAYER DEPTH LARGE.498
C HT THAT WE SEEK, HENCE SIGMA IS ALWAYS 1. LARGE.499
C LARGE.500
STABIL_PARAM=ZDZZ(K)/L_T(I) LARGE.501
SIGMA=1.0 LARGE.502
C LARGE.503
IF (STABIL_PARAM.LT.0.0.AND.SIGMA.GT.EPSILON)THEN LARGE.504
STABIL_PARAM=(EPSILON*ZDZZ(K))/L_T(I) LARGE.505
ENDIF LARGE.506
C LARGE.507
WTK=(VKMAN*USTAR(I))/FLUX_PROFILET
(STABIL_PARAM) LARGE.508
C LARGE.509
C FIND LOCAL BUOYANCY FREQUENCY N. CAREFUL TOO LARGE.510
C WITH UNSTABLE PROFILES SINCE USING STATED RHO HERE. LARGE.511
C LARGE.512
C TRY A ONE-SIDED DERIVATIVE FOR N^2 LARGE.513
C ANSQ=GRAV*(RHO(I,K+1)-RHO(I,K))/(RHO0*DZZ(K+1)) LARGE.514
C LARGE.515
C TRY CENTRED DERIVATIVE FORM (LARGE EQN D4b) FOR N^2. LARGE.516
ANSQ=(GRAV*(RHO(I,K+1)-RHO(I,K-1)))/ LARGE.517
& ( RHO0*(DZZ(K)+DZZ(K+1)) ) LARGE.518
C LARGE.519
IF(ANSQ.LT.0.0)THEN LARGE.520
ANSET=0.0 LARGE.521
ELSE LARGE.522
ANSET=SQRT(ANSQ) LARGE.523
ENDIF LARGE.524
C LARGE.525
C COMPUTE SURFACE REFERENCE VALUES AS AVERAGES OVER THE SURFACE LARGE.526
C LAYER DEPTH EPSILON*H. USE LARGE EQN D3 FORMS. LARGE.527
C LARGE.528
C SURFACE LAYER REFERENCE VALUES LARGE.529
C LARGE.530
RHOREF=RHO(I,1) LARGE.531
UBTREF=UBT(I,1) LARGE.532
VBTREF=VBT(I,1) LARGE.533
C LARGE.534
SLD=EPSILON*ZDZZ(K) LARGE.535
IF(SLD.GT.ZDZZ(1))THEN LARGE.536
C LARGE.537
ITEST=0 LARGE.538
RHOREF=(RHO(I,1)*ZDZZ(1))/SLD LARGE.539
UBTREF=(UBT(I,1)*ZDZZ(1))/SLD LARGE.540
VBTREF=(VBT(I,1)*ZDZZ(1))/SLD LARGE.541
C LARGE.542
DO KK=2,MIN(N_LEVELS(I),KM-1) LARGE.543
C LARGE.544
IF(ITEST.EQ.0)THEN LARGE.545
C LARGE.546
IF(ZDZZ(KK).LT.SLD)THEN LARGE.547
C LARGE.548
DELZ=ZDZZ(KK)-ZDZZ(KK-1) LARGE.549
DRZ=RHO(I,KK)-RHO(I,KK-1) LARGE.550
DUZ=UBT(I,KK)-UBT(I,KK-1) LARGE.551
DVZ=VBT(I,KK)-VBT(I,KK-1) LARGE.552
DRDZ=DRZ/DELZ LARGE.553
DUDZ=DUZ/DELZ LARGE.554
DVDZ=DVZ/DELZ LARGE.555
RHOREF=RHOREF+ ( LARGE.556
& DELZ*(RHO(I,KK-1)-DRDZ*ZDZZ(KK-1))+ LARGE.557
& 0.5*( ZDZZ(KK)**2 - ZDZZ(KK-1)**2 )*(DRDZ) )/SLD LARGE.558
UBTREF=UBTREF+ ( LARGE.559
& DELZ*(UBT(I,KK-1)-DUDZ*ZDZZ(KK-1))+ LARGE.560
& 0.5*( ZDZZ(KK)**2 - ZDZZ(KK-1)**2 )*(DUDZ) )/SLD LARGE.561
VBTREF=VBTREF+ ( LARGE.562
& DELZ*(VBT(I,KK-1)-DVDZ*ZDZZ(KK-1))+ LARGE.563
& 0.5*( ZDZZ(KK)**2 - ZDZZ(KK-1)**2 )*(DVDZ) )/SLD LARGE.564
C LARGE.565
ELSE ! ZDZZ(KK) GE SLD LARGE.566
C LARGE.567
ITEST=1 LARGE.568
DELZ=ZDZZ(KK)-ZDZZ(KK-1) LARGE.569
DRZ=RHO(I,KK)-RHO(I,KK-1) LARGE.570
DUZ=UBT(I,KK)-UBT(I,KK-1) LARGE.571
DVZ=VBT(I,KK)-VBT(I,KK-1) LARGE.572
DRDZ=DRZ/DELZ LARGE.573
DUDZ=DUZ/DELZ LARGE.574
DVDZ=DVZ/DELZ LARGE.575
RHOREF=RHOREF+ ( LARGE.576
& (SLD-ZDZZ(KK-1))*(RHO(I,KK-1)-DRDZ*ZDZZ(KK-1))+ LARGE.577
& 0.5*( SLD**2 - ZDZZ(KK-1)**2 )*(DRDZ) )/SLD LARGE.578
UBTREF=UBTREF+ ( LARGE.579
& (SLD-ZDZZ(KK-1))*(UBT(I,KK-1)-DUDZ*ZDZZ(KK-1))+ LARGE.580
& 0.5*( SLD**2 - ZDZZ(KK-1)**2 )*(DUDZ) )/SLD LARGE.581
VBTREF=VBTREF+ ( LARGE.582
& (SLD-ZDZZ(KK-1))*(VBT(I,KK-1)-DVDZ*ZDZZ(KK-1))+ LARGE.583
& 0.5*( SLD**2 - ZDZZ(KK-1)**2 )*(DVDZ) )/SLD LARGE.584
C LARGE.585
ENDIF ! ZDZZ(KK) LT SLD LARGE.586
C LARGE.587
ENDIF ! ITEST EQ 0 LARGE.588
C LARGE.589
ENDDO ! CLOSE KK LOOP LARGE.590
C LARGE.591
ENDIF ! SLD.GT.ZDZZ(1) LARGE.592
C LARGE.593
C FINALLY COMPUTE BULK RI WITH ALL LARGE TERMS AT DEPTH ZDZZ(K) LARGE.594
C LARGE.595
UDIFF=UBTREF-UBT(I,K) LARGE.596
VDIFF=VBTREF-VBT(I,K) LARGE.597
RDIFF=RHOREF-RHO(I,K) LARGE.598
DENOM=(UDIFF*UDIFF)+(VDIFF*VDIFF)+ LARGE.599
& (ZCONST*ANSET)*(ZDZZ(K)*WTK) LARGE.600
RI(I,K-1)=-((GRAV*ZDZZ(K))*RDIFF) / MAX(DENOM,FX) LARGE.601
C LARGE.602
C MAIN ESCAPE CLAUSE LARGE.603
C LARGE.604
IF(RI(I,K-1).GT.CRIT_RI_FL) THEN LARGE.605
CRIT_LEVEL=K LARGE.606
GOTO 10 LARGE.607
ENDIF LARGE.608
C LARGE.609
ENDDO ! CLOSE MAIN K-LOOP LARGE.610
C LARGE.611
C THE FOLLOWING 2 LINES ONLY OCCUR IF RI_CRIT HAS NOT BEEN EXCEEDED LARGE.612
C BY BOTTOM OF OCEAN. IN THIS CASE SET MLD_LARGE AS OCEAN BOTTOM LARGE.613
C LARGE.614
MLD_LARGE(I)=ZDZ(N_LEVELS(I)) LARGE.615
GOTO 100 LARGE.616
C LARGE.617
10 CONTINUE LARGE.618
C LARGE.619
IF (CRIT_LEVEL.EQ.2) THEN LARGE.620
C FIRST DEPTH AT WHICH BULK RI FOUND IS GREATER THAN CRIT_RI_FL LARGE.621
C SO SET MLD_LARGE AS DEPTH OF FIRST LAYER. LARGE.622
MLD_LARGE(I)=ZDZ(1) LARGE.623
ELSE LARGE.624
C CONSIDER LEVEL IN WHICH MLD_LARGE OCCURS AND FIND MLD_LARGE WITHIN LARGE.625
C THIS LEVEL BY LINEAR INTERPOLATION LARGE.626
MLD_LARGE(I)=ZDZZ(CRIT_LEVEL-1) + LARGE.627
& (DZZ(CRIT_LEVEL)*(CRIT_RI_FL-RI(I,CRIT_LEVEL-2))) / LARGE.628
& (RI(I,CRIT_LEVEL-1)-RI(I,CRIT_LEVEL-2)) LARGE.629
ENDIF LARGE.630
C LARGE.631
ENDIF ! IF OCEAN POINT CHOICE LARGE.632
C LARGE.633
100 CONTINUE LARGE.634
C LARGE.635
ENDDO ! CLOSE MAIN I-LOOP LARGE.636
C LARGE.637
RETURN LARGE.638
END LARGE.639
C LARGE.640
FUNCTION GRADIENT_RICHSN(DRHO,RHOBAR,DU,DV,GRAV) 2LARGE.641
C CALCULATE THE LOCAL GRADIENT RICHARDSON NUMBER LARGE.642
REAL LARGE.643
& DRHO ! DRHO/DZ - DERIVATIVE OF DENSITY LARGE.644
&, RHOBAR ! AVERAGE DENSITY OF WATER COLUMN LARGE.645
&, DU ! DU/DZ - DERIVATIVE OF EASTWARD CURRENT VELOCITY LARGE.646
&, DV ! DV/DZ - DERIVATIVE OF NORTHWARD CURRENT VELOCITY LARGE.647
&, GRAV ! ACCELERATION DUE TO GRAVITY IN CM/S^2 LARGE.648
&, FX ! NO TO DIVIDE BY SO THAT DIVISION BY ZERO IS AVOIDED LARGE.649
FX=1.E-12 LARGE.650
GRADIENT_RICHSN=-(GRAV*DRHO)/MAX(RHOBAR*(DU*DU+DV*DV),FX) LARGE.651
RETURN LARGE.652
END LARGE.653
*ENDIF LARGE.654