*IF DEF,OCEAN @DYALLOC.4681
C ******************************COPYRIGHT****************************** GTS2F400.11575
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.11576
C GTS2F400.11577
C Use, duplication or disclosure of this code is subject to the GTS2F400.11578
C restrictions as set forth in the contract. GTS2F400.11579
C GTS2F400.11580
C Meteorological Office GTS2F400.11581
C London Road GTS2F400.11582
C BRACKNELL GTS2F400.11583
C Berkshire UK GTS2F400.11584
C RG12 2SZ GTS2F400.11585
C GTS2F400.11586
C If no contract has been raised with this copy of the code, the use, GTS2F400.11587
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.11588
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.11589
C Modelling at the above address. GTS2F400.11590
C ******************************COPYRIGHT****************************** GTS2F400.11591
C GTS2F400.11592
C VERTCOFT.3
C Subroutine VERTCOFT VERTCOFT.4
C ------------------- VERTCOFT.5
C VERTCOFT.6
C Calculates the vertical coefficient of diffusion VERTCOFT.7
C at every oceanic grid point in the slab, VERTCOFT.8
C using the model of Pacanowski & Philander (1981) VERTCOFT.9
C ('K-theory diffusion'). VERTCOFT.10
C VERTCOFT.11
C Called from TRACER in the Introductory Section. VERTCOFT.12
C VERTCOFT.13
CLL 4.3 C.M.Roberts Quadratic Large scheme introduced OLA0F404.150
CLL 4.4 C.M.Roberts Changes introduced to Quadratic Large scheme OLA0F404.151
CLL 4.5 G.J.Rickard Introduce full Large scheme, optional use OOM1F405.1414
CLL of STATEC for Richardson no calculation, and OOM1F405.1415
CLL optional use of Peters et al mixing. OOM1F405.1416
CLL OOM1F405.1417
C VERTCOFT.14
SUBROUTINE VERTCOFT 6,7VERTCOFT.15
& ( J,IMT,KM,KMM1,NT, VERTCOFT.16
& IMT_QLARGE,L_OQLARGE,L_OCYCLIC, OLA3F403.295
& IMT_FULARGE,L_OFULARGE,L_OUSTARWME,L_OWINDMIX,L_OBULKMAXMLD, OOM1F405.1423
& L_OROTATE,L_OSTATEC,L_SEAICE,L_OPANDP,PHIT,TB, OOM1F405.1424
& UB,VB,UBM,VBM, VERTCOFT.17
& WSX,WSY,WSXM,WSYM, ! surface stress fields OLA3F403.296
& ZDZZ,ZDZ,DZ,DZZ, OOM1F405.1425
& DZZ2RQ,DZ2RQ, OLA3F403.298
& NERGY,GRAV_SI,FM, VERTCOFT.19
& RHOSRN,RHOSRNA,RHOSRNB, OOM1F405.1419
& hT,RiT,max_qLarge_depth,crit_Ri, OLA0F404.153
& MLD_LARGE,MAX_LARGE_DEPTH,MAX_LARGE_LEVELS,RHO_WATER_SI, OOM1F405.1426
& HTN,PME,WATERFLUX_ICE,SOL,WME,L_T,LAMBDA_LARGE, OOM1F405.1427
& SPECIFIC_HEAT_SI, OOM1F405.1428
& gnu,FNU0_SI,FNUB_SI,STABLM_SI,FKAPB_SI,GNUMINT_SI RW071293.17
& ,KAPPA_B_SI,OCEANHEATFLUX,CARYHEAT,FLXTOICE,CGFLUX ) OOM1F405.1429
C VERTCOFT.22
C VERTCOFT.23
IMPLICIT NONE VERTCOFT.24
*CALL C_VKMAN
OLA0F404.154
*CALL C_OMEGA
OOM1F405.1431
*CALL C_PI
OOM1F405.1432
C VERTCOFT.25
INTEGER VERTCOFT.26
& I,J,K,IMT,KM,KMM1,NT,ITT,NERGY,NDUM OOM1F405.1418
C VERTCOFT.28
REAL VERTCOFT.29
& UB(IMT,KM),VB(IMT,KM),UBM(IMT,KM),VBM(IMT,KM), VERTCOFT.30
& FM(IMT,KM),DZZ2RQ(IMT,KM),DZ2RQ(IMT,KM),GRAV_SI, OLA3F403.300
& rhosrn(IMT,KM), ! IN Density on row J. Calculated using VERTCOFT.32
& RHOSRNA(IMT,KM+1),RHOSRNB(IMT,KM+1), OOM1F405.1420
C ! IN DENSITY ON ROW J. CALCULATED USING STATEC IN VERTCOFC OOM1F405.1421
C ! IN CLINIC AND PASSED THROUGH ARGUMENT LISTS. OOM1F405.1422
C STATED in VERTCOFC in CLINIC and VERTCOFT.33
C passed through argument lists. VERTCOFT.34
& gnu(IMT,KM), ! OUT Vertical diffusion coeff. (cm2/s) VERTCOFT.35
C at TOP of box k VERTCOFT.36
& FNU0_SI, ! IN Max value of stability-dependent term VERTCOFT.37
C of vert. momentum diffusivity (m2/s) VERTCOFT.38
& FNUB_SI, ! IN Background value of momentum VERTCOFT.39
C diffusivity (m2/s) VERTCOFT.40
& STABLM_SI, ! IN Max value of diffusivity (m2/s) VERTCOFT.41
& FKAPB_SI ! IN Background value of tracer VERTCOFT.42
C diffusivity (m2/s) VERTCOFT.43
& ,GNUMINT_SI ! IN Min. value of tracer diffusivity VERTCOFT.44
C between top two levels (m2/s) VERTCOFT.45
& ,KAPPA_B_SI(KM) ! IN Vertically varying background tracer RW071293.19
C diffusivity at TOP of box K (m2/s) RW071293.20
REAL WSX(IMT),WSY(IMT) ! surface wind stress fields on row j OLA3F403.301
REAL WSXM(IMT),WSYM(IMT) ! surface wind stress on row j-1 OLA3F403.302
REAL ZDZZ(KM+1) ! IN DEPTH OF MIDDLE OF LAYER (CM) OOM1F405.1433
REAL ZDZ ( KM) ! depth of bottom of layer (cm) OLA3F403.304
REAL DZ(KM) ! IN distance between half-levels (cm) OLA0F404.155
INTEGER IMT_QLARGE ! imt for large scheme PXORDER.58
REAL OLA0F404.156
& hT(IMT_QLARGE) ! OUT depth quadratic Large scheme applied to OLA0F404.157
&, RiT(IMT,KMM1) ! OUT Richardson no at half levels (+ve) OLA0F404.158
&, max_qLarge_depth ! IN max depth allowed for quadratic Large OLA0F404.159
&, crit_Ri ! IN critical Richardson no used for depth of OLA0F404.160
! quadratic Large scheme OLA0F404.161
LOGICAL L_OQLARGE ! Logical for large scheme OLA3F403.306
LOGICAL L_OCYCLIC ! Logical for cyclic model EW OLA3F403.307
REAL OOM1F405.1434
& OCEANHEATFLUX(IMT) !HTN:NON-PEN SURF HEATFLUX INTO OCEAN BUDGET OOM1F405.1435
&,CARYHEAT(IMT) !MISCELLANEOUS HEATFLUX FROM ICE OOM1F405.1436
&,FLXTOICE(IMT) !OCEAN TO ICE HEATFLUX OOM1F405.1437
C VERTCOFT.46
REAL OOM1F405.1438
& MLD_LARGE(IMT) ! IN MIXED LAYER DEPTH (CM) OOM1F405.1439
&, WME(IMT) ! IN WIND MIXING ENERGY FOR ROW J OOM1F405.1440
&, DZZ(KM+1) ! IN DISTANCE BETWEEN MIDPTS OF LEVELS (CM) OOM1F405.1441
&, MAX_LARGE_DEPTH ! IN MAX DEPTH LARGE SCHEME APPLIED TO (M) OOM1F405.1442
&, RHO_WATER_SI ! IN DENSITY OF SEA WATER = 1026. KG/M^3 OOM1F405.1443
&, L_T(IMT) ! OUT MONIN OBUKHOV LENGTH LARGE SCHEME (MOMENTUM) OOM1F405.1444
&, ALPHAI(IMT,1),BETAI(IMT,1) ! EXPANSION COEFFICIENTS ON ROW J OOM1F405.1445
REAL OOM1F405.1446
& HTN(IMT) ! IN NON-PENETRATING HEAT FLUX (W/M2) ON ROW J OOM1F405.1447
&, PME(IMT) ! IN PRECIP MINUS EVAP (KG/M2/S) ON ROW J OOM1F405.1448
&, SOL(IMT) ! IN SOLAR IRRADIANCE (W/M2) AT SURFACE ON ROW J OOM1F405.1449
&, WATERFLUX_ICE(IMT) ! IN WATER FLUX FROM ICE (KG/M2/S) ON ROW J OOM1F405.1450
&, LAMBDA_LARGE,SPECIFIC_HEAT_SI ! IN FOR CALCULATING MINIMUM MLD OOM1F405.1451
&, PHIT ! IN LATITUDE OF ROW J ON TRACER GRID (RADIANS) OOM1F405.1452
&, TB(IMT,KM,NT) ! IN TEMPERATURE ARRAY FROM PREVIOUS TIMESTEP OOM1F405.1453
&, CGFLUX(IMT,KM,NT) !OUT COUNTER-GRADIENT FLUXES FOR TRACERS OOM1F405.1454
&, WT0(IMT),WS0(IMT),WTR0(IMT),WTRZ !LOCAL VARIABLES OOM1F405.1455
INTEGER OOM1F405.1456
& MAX_LARGE_LEVELS ! IN MAX NO OF LEVS FOR LARGE SCHEME OOM1F405.1457
&, IMT_FULARGE ! IN IMT FOR FULL LARGE SCHEME OOM1F405.1458
LOGICAL OOM1F405.1459
& L_OFULARGE ! IN LOGICAL FOR FULL LARGE SCHEME OOM1F405.1460
&, L_OUSTARWME,L_OWINDMIX,L_OBULKMAXMLD,L_OROTATE,L_OSTATEC OOM1F405.1461
LOGICAL L_OPANDP,L_SEAICE OOM1F405.1462
C VERTCOFT.47
C Decalre local variables and arrays VERTCOFT.48
C VERTCOFT.49
REAL VERTCOFT.50
& ripq(IMT,KMM1), ! d(rho)/dz at BOTTOM of box k VERTCOFT.51
& dvel2q(IMT,KMM1), ! Uz*Uz + Vz*Vz at BOTTOM of box k VERTCOFT.52
& uz, ! Uz at BOTTOM of current box VERTCOFT.53
& vz, ! Vz at BOTTOM of current box VERTCOFT.54
& wsxT,wsyT, ! wind stress on tracer grid OLA3F403.310
& ustar(IMT_QLARGE),! surface friction velocity on tracer grid OLA3F403.311
& Kath, ! K at z=h OLA3F403.312
& b2, ! used in calculation of gnu for Large scheme OLA3F403.313
& sigma, ! depth/h OLA3F403.314
& RHOZ,RHOZA,RHOZB, OOM1F405.1430
& fx, VERTCOFT.56
& fxa, VERTCOFT.57
& fxb VERTCOFT.58
C VERTCOFT.59
REAL OOM1F405.1463
& GNUATHT ! VERTICAL VISCOSITY (CM2/S) AT LEVEL HT OOM1F405.1464
&, GNUZATHT ! D(GNU)/DZV AT LEVEL HT OOM1F405.1465
&, ZDZ_AT_MLKM1 ! ZDZ AT LEVEL MLK-1 OOM1F405.1466
&, GNUOFMLK ! GNU(I,MLK(I)) OOM1F405.1467
&, GNUZ(2) ! D(GNU)/DZ AT MIDPOINTS OF LEVELS MLK,MLK+1 OOM1F405.1468
&, COEFF ! PROPORTION OF DEPTH BELOW TOP OF BOX FOR MLD OOM1F405.1469
&, RHO_FRESHWATER ! DENSITY OF FRESH WATER = 1.0 G/CM^3 OOM1F405.1470
&, RHO0 ! DENSITY OF SEA WATER = 1.026 G/CM^3 OOM1F405.1471
&, GRAV ! GRAV_SI IN CGS UNITS OOM1F405.1472
&, ALPHA,BETA ! THERMODYNAMIC EXPANSION COEFFS FOR T,S OOM1F405.1473
&, CP0 ! SPECIFIC HEAT CAPACITY AT CONST PRESSURE AT SURFACE(CGS) OOM1F405.1474
&, BF ! BUOYANCY FREQUENCY OOM1F405.1475
&, WATERFLUX,SFC_HEATFLUX ! TOTAL WATER FLUX (PME + WATERFLUX_ICE) OOM1F405.1476
REAL OOM1F405.1477
& W1T ! TURBULENT VELOCITY SCALE AT MLD OOM1F405.1478
&, DW1T ! DERIV OF TURBULENT VELOCITY SCALE WRT SIGMA AT MLD OOM1F405.1479
&, STABIL_PARAM ! STABILITY PARAMETER OOM1F405.1480
&, G1 ! SHAPE FUNCTION WHEN SIGMA=Z/H=1 OOM1F405.1481
&, DG1 ! DG/DSIGMA EVALUATED AT SIGMA=1 OOM1F405.1482
&, A(3) ! COEFFICIENTS OF CUBIC SHAPE FUNCTION OOM1F405.1483
&, WT(KM) ! TURBULENT VELOCITY SCALE PROFILE AT TOP OF BOX K OOM1F405.1484
&, EPSILON ! =0.1 (LARGE P365) OOM1F405.1485
&, G ! SHAPE FUNCTION AT TOP OF BOX K. OOM1F405.1486
INTEGER OOM1F405.1487
& MLK(IMT) ! LEVEL WITHIN WHICH MLD_LARGE IS CONTAINED OOM1F405.1488
INTEGER I2 OOM1F405.1489
C DEFINE FUNCTION OOM1F405.1490
REAL OOM1F405.1491
& SOL_IRRA_1B OOM1F405.1492
&, FLUX_PROFILET OOM1F405.1493
C OOM1F405.1494
C PARAMETERS FOR PETERS SCHEME OOM1F405.1495
C OOM1F405.1496
REAL RICRITT,RICRITT100 ! CRITICAL NUMBERS FOR TRACERS OOM1F405.1497
PARAMETER(RICRITT = 0.3752198666334,RICRITT100=0.2091865) OOM1F405.1498
C OOM1F405.1499
INTEGER l ! level within which hT is contained OLA0F404.162
! for quadratic Large scheme OLA0F404.163
CL Parameters OLA3F403.318
C VERTCOFT.60
C Zero out gnu VERTCOFT.61
C VERTCOFT.62
fx=0. VERTCOFT.63
DO 110 K=1,KM VERTCOFT.64
DO 110 I=1,IMT VERTCOFT.65
gnu(I,K)=fx VERTCOFT.66
110 CONTINUE VERTCOFT.67
C OOM1F405.1586
C Zero cgflux to be sure OOM1F405.1587
C OOM1F405.1588
DO NDUM=1,NT OOM1F405.1589
DO K=1,KM OOM1F405.1590
DO I=1,IMT OOM1F405.1591
CGFLUX(I,K,NDUM)=0.0 OOM1F405.1592
ENDDO OOM1F405.1593
ENDDO OOM1F405.1594
ENDDO OOM1F405.1595
C OOM1F405.1596
IF (L_OFULARGE) THEN OOM1F405.1597
C SET CONSTANTS OOM1F405.1598
RHO_FRESHWATER=1.0 ! IN G/CM^3 OOM1F405.1599
RHO0=RHO_WATER_SI*0.001 ! CONVERT TO CGS UNITS OOM1F405.1600
GRAV=GRAV_SI*100. ! CONVERT TO CGS UNITS OOM1F405.1601
EPSILON=0.1 OOM1F405.1602
C CALCULATE SURFACE FRICTION VELOCITY IN CGS UNITS OOM1F405.1603
IF (L_OUSTARWME) THEN OOM1F405.1604
C 1000.0 CONVERTS FROM SI UNITS TO CGS UNITS OOM1F405.1605
C USTAR^3 = WME/RHO0 OOM1F405.1606
DO I=1,IMT OOM1F405.1607
IF (FM(I,1).GT.0.5) THEN OOM1F405.1608
USTAR(I)=(1000.0*WME(I)/RHO0)**(1.0/3.0) OOM1F405.1609
ELSE OOM1F405.1610
USTAR(I)=0.0 OOM1F405.1611
ENDIF OOM1F405.1612
ENDDO OOM1F405.1613
ELSE OOM1F405.1614
C 10.0 CONVERTS FROM N M^-2 TO DYNES CM^-2 OOM1F405.1615
C USTAR^2 = TAU/RHO0 OOM1F405.1616
C OOM1F405.1617
C IF TAKE THIS CHOICE THEN CAREFUL ON OCEAN OOM1F405.1618
C POINTS ADJOINING LAND SINCE WSX/Y ARE SET TO MISSING DATA OOM1F405.1619
C VALUES ON ALL LAND POINTS OOM1F405.1620
C OOM1F405.1621
DO I=2,IMT OOM1F405.1622
WSXT=0.25*(WSX(I-1)+WSX(I)+WSXM(I-1)+WSXM(I)) OOM1F405.1623
WSYT=0.25*(WSY(I-1)+WSY(I)+WSYM(I-1)+WSYM(I)) OOM1F405.1624
USTAR(I)= SQRT(WSXT*WSXT+WSYT*WSYT) OOM1F405.1625
USTAR(I)= 10.0 * USTAR(I) / RHO0 OOM1F405.1626
USTAR(I)= SQRT(USTAR(I)) OOM1F405.1627
END DO OOM1F405.1628
IF (L_OCYCLIC) THEN OOM1F405.1629
USTAR(1)=USTAR(IMT-1) OOM1F405.1630
ELSE OOM1F405.1631
WSXT=0.5*(WSX(1)+WSXM(1)) OOM1F405.1632
WSYT=0.5*(WSY(1)+WSYM(1)) OOM1F405.1633
USTAR(1)= SQRT(WSXT*WSXT+WSYT*WSYT) OOM1F405.1634
USTAR(1)= 10.0 * FM(1,1) * USTAR(1) / RHO0 OOM1F405.1635
USTAR(1)= SQRT(USTAR(1)) OOM1F405.1636
ENDIF OOM1F405.1637
ENDIF OOM1F405.1638
C DO PRELIMINARY CALCULATION OF HT AS NEEDED TO CALC BUOYANCY FREQUENCY OOM1F405.1639
DO I=1,IMT OOM1F405.1640
HT(I)=MIN(MLD_LARGE(I),MAX_LARGE_DEPTH*100.) OOM1F405.1641
HT(I)=MAX(HT(I),1.5*ZDZ(1)) OOM1F405.1642
ENDDO OOM1F405.1643
C OOM1F405.1644
C CALCULATE SURFACE BUOYANCY FORCING , BF, IN CM^2/S^3 OOM1F405.1645
C ************************************************************** OOM1F405.1646
C OOM1F405.1647
C CALCULATE ALPHA AND BETA FOR ROW J OOM1F405.1648
CALL DRODT
(TB,TB(1,1,2),ALPHAI,IMT,1) OOM1F405.1649
CALL DRODS
(TB,TB(1,1,2),BETAI,IMT,1) OOM1F405.1650
C OOM1F405.1651
CP0 = SPECIFIC_HEAT_SI*1.E4 ! IN CM^2 S^-2 K^-1 OOM1F405.1652
C OOM1F405.1653
DO I=1,IMT OOM1F405.1654
ALPHA=-1.*ALPHAI(I,1) OOM1F405.1655
BETA=BETAI(I,1) OOM1F405.1656
C OOM1F405.1657
L_T(I)=0.0 OOM1F405.1658
C OOM1F405.1659
WS0(I)=0.0 OOM1F405.1660
WT0(I)=0.0 OOM1F405.1661
WTR0(I)=0.0 OOM1F405.1662
C OOM1F405.1663
IF (FM(I,1).GT.0.5) THEN OOM1F405.1664
C FACTORS CONVERT TO CGS UNITS. OOM1F405.1665
C HTN,SOL W/M^2=KG/S^3=1000G/S^3 OOM1F405.1666
C PME,WATERFLUX_ICE KG/M^2/S=0.1G/CM^2/S OOM1F405.1667
C ******************************************************************* OOM1F405.1668
WATERFLUX=PME(I)+WATERFLUX_ICE(I) OOM1F405.1669
C OOM1F405.1670
IF(L_SEAICE)THEN OOM1F405.1671
SFC_HEATFLUX=OCEANHEATFLUX(I)-FLXTOICE(I)+CARYHEAT(I) OOM1F405.1672
ELSE OOM1F405.1673
SFC_HEATFLUX=HTN(I) OOM1F405.1674
ENDIF OOM1F405.1675
C OOM1F405.1676
C ************************************************************** OOM1F405.1677
BF=GRAV * ( (ALPHA*SFC_HEATFLUX*1000.)/(RHO0*CP0) OOM1F405.1678
& + (BETA*WATERFLUX*0.1*0.035)/RHO_FRESHWATER ) OOM1F405.1679
& + GRAV*ALPHA* ( (SOL(I)*1000.)/(RHO0*CP0) OOM1F405.1680
& - (SOL_IRRA_1B
(SOL(I)*1000.,HT(I)))/(RHO0*CP0) ) OOM1F405.1681
C ************************************************************** OOM1F405.1682
C OOM1F405.1683
C local surface variables for cgflux calculation OOM1F405.1684
C OOM1F405.1685
WS0(I)=(WATERFLUX*0.1*0.035)/RHO_FRESHWATER OOM1F405.1686
WT0(I)=-(SFC_HEATFLUX*1000.)/(RHO0*CP0) OOM1F405.1687
C note that define WTR=WTRZ-WTR0 OOM1F405.1688
WTR0(I)=(SOL(I)*1000.)/(RHO0*CP0) OOM1F405.1689
C OOM1F405.1690
IF (ABS(BF).LT.1.0E-12) THEN OOM1F405.1691
IF (BF.GE.0.0) BF=1.0E-12 OOM1F405.1692
IF (BF.LT.0.0) BF=-1.0E-12 OOM1F405.1693
ENDIF OOM1F405.1694
C CALCULATE MONIN-OBUKHOV LENGTH, L_T, CM = (CM/S)^3 / (CM^2/S^3) OOM1F405.1695
L_T(I) = USTAR(I)**3/(VKMAN*BF) OOM1F405.1696
IF (ABS(L_T(I)).LT.1.0E-12) THEN OOM1F405.1697
IF (L_T(I).GE.0.0) L_T(I)=1.0E-12 OOM1F405.1698
IF (L_T(I).LT.0.0) L_T(I)=-1.0E-12 OOM1F405.1699
ENDIF OOM1F405.1700
ENDIF OOM1F405.1701
ENDDO OOM1F405.1702
C CALCULATE DEPTH TO APPLY LARGE SCHEME TO (100 CONVERTS TO CM) OOM1F405.1703
DO I=1,IMT OOM1F405.1704
C OOM1F405.1705
HT(I)=MLD_LARGE(I) OOM1F405.1706
C OOM1F405.1707
IF (L_OWINDMIX.AND.L_T(I).GT.0.0) THEN OOM1F405.1708
HT(I)=MAX(HT(I),2*LAMBDA_LARGE*VKMAN*L_T(I)) OOM1F405.1709
ENDIF OOM1F405.1710
C OOM1F405.1711
IF (L_OBULKMAXMLD.AND.L_T(I).GT.0.0) THEN OOM1F405.1712
HT(I)=MIN(HT(I),L_T(I)) OOM1F405.1713
IF (.NOT.L_OROTATE) THEN OOM1F405.1714
C CALCULATE CORIOLIS PARAMETER F. IF PHIT<5 DEG, ASSUME PHIT=5 OOM1F405.1715
FX=2*OMEGA*SIN(MAX(PHIT,5.0*PI_OVER_180)) OOM1F405.1716
HT(I)=MIN(HT(I),0.7*USTAR(I)/FX) OOM1F405.1717
ENDIF OOM1F405.1718
ENDIF OOM1F405.1719
C OOM1F405.1720
C SOME FINAL CHECKS ON HT OOM1F405.1721
C OOM1F405.1722
HT(I)=MAX(HT(I),1.5*ZDZ(1)) OOM1F405.1723
HT(I)=MIN(HT(I),MAX_LARGE_DEPTH*100.) OOM1F405.1724
C OOM1F405.1725
ENDDO OOM1F405.1726
C CALCULATE MIN NO OF LEVELS WITHIN WHICH MIXED LAYER IS CONTAINED OOM1F405.1727
C I.E. LEVEL WITHIN WHICH THE MIXED LAYER LIES OOM1F405.1728
DO I=1,IMT OOM1F405.1729
MLK(I)=1 OOM1F405.1730
DO K=MAX_LARGE_LEVELS,1,-1 OOM1F405.1731
IF ((MLK(I).EQ.1).AND.(ZDZ(K).LE.HT(I))) MLK(I)=K+1 OOM1F405.1732
ENDDO OOM1F405.1733
ENDDO OOM1F405.1734
ELSE OOM1F405.1735
C calculate surface friction velocity in cgs units OLA3F403.321
C 10.0 converts from N m^-2 to dynes cm^-2 OLA3F403.322
C FM(I,1) is land-sea mask for tracer grid OLA3F403.323
C RHO0 = 1 g cm^-3 used in last line; tau = rho0 u*^2 OLA3F403.324
IF (L_OQLARGE) THEN OLA3F403.325
C SET CONSTANTS OOM1F405.1875
RHO0=RHO_WATER_SI*0.001 ! CONVERT TO CGS UNITS OOM1F405.1876
C CALCULATE SURFACE FRICTION VELOCITY IN CGS UNITS OOM1F405.1877
IF (L_OUSTARWME) THEN OOM1F405.1878
C 1000.0 CONVERTS FROM SI UNITS TO CGS UNITS OOM1F405.1879
C USTAR^3 = WME/RHO0 OOM1F405.1880
DO I=1,IMT OOM1F405.1881
IF (FM(I,1).GT.0.5) THEN OOM1F405.1882
USTAR(I)=(1000.0*WME(I)/RHO0)**(1.0/3.0) OOM1F405.1883
ELSE OOM1F405.1884
USTAR(I)=0.0 OOM1F405.1885
ENDIF OOM1F405.1886
ENDDO OOM1F405.1887
ELSE OOM1F405.1888
C OOM1F405.1889
C IF TAKE THIS CHOICE THEN CAREFUL ON OCEAN OOM1F405.1890
C POINTS ADJOINING LAND SINCE WSX/Y ARE SET TO MISSING DATA OOM1F405.1891
C VALUES ON ALL LAND POINTS OOM1F405.1892
C OOM1F405.1893
do i=2,imt OLA3F403.326
wsxT=0.25*(WSX(I-1)+WSX(I)+WSXM(I-1)+WSXM(I)) OLA3F403.327
wsyT=0.25*(WSY(I-1)+WSY(I)+WSYM(I-1)+WSYM(I)) OLA3F403.328
ustar(i)= sqrt(wsxT*wsxT+wsyT*wsyT) OLA3F403.329
ustar(i)= 10.0 * FM(I,1) * ustar(i) OLA3F403.330
ustar(i)= sqrt(ustar(i)) OLA3F403.331
end do OLA3F403.332
IF (L_OCYCLIC) THEN OLA3F403.333
ustar(1)=ustar(imt-1) OLA3F403.334
ELSE OLA3F403.335
wsxT=0.5*(WSX(1)+WSXM(1)) OLA3F403.336
wsyT=0.5*(WSY(1)+WSYM(1)) OLA3F403.337
ustar(1)= sqrt(wsxT*wsxT+wsyT*wsyT) OLA3F403.338
ustar(1)= 10.0 * FM(1,1) * ustar(1) OLA3F403.339
ustar(1)= sqrt(ustar(1)) OLA3F403.340
ENDIF OLA3F403.341
ENDIF !L_OUSTARWME OOM1F405.1894
C OOM1F405.1895
C Initialise hT to zero OLA3F403.343
do i=1,imt OLA0F404.164
hT(i)=0.0 OLA3F403.345
enddo OLA3F403.346
ENDIF ! L_OQLARGE OLA0F404.165
C Initialise RiT to zero OLA3F403.347
do k=1,kmm1 OLA3F403.348
do i=1,imt OLA3F403.349
RiT(i,k)=0.0 OLA3F403.350
enddo OLA3F403.351
enddo OLA3F403.352
ENDIF OOM1F405.1736
C VERTCOFT.68
fx=2. VERTCOFT.69
fxa=0.5 VERTCOFT.70
IF (L_OSTATEC) THEN OOM1F405.1500
C-------------- AT PRESENT HARDWIRE CODING FOR KM EVEN OOM1F405.1501
DO 210 K=1,KM-3,2 OOM1F405.1502
DO 211 I=2,IMT OOM1F405.1503
C OOM1F405.1504
UZ=((UB(I-1,K)-UB(I-1,K+1))+(UB(I,K)-UB(I,K+1))+ OOM1F405.1505
& (UBM(I-1,K)-UBM(I-1,K+1))+(UBM(I,K)-UBM(I,K+1))) OOM1F405.1506
& *FXA*DZZ2RQ(I,K+1) OOM1F405.1507
VZ=((VB(I-1,K)-VB(I-1,K+1))+(VB(I,K)-VB(I,K+1))+ OOM1F405.1508
& (VBM(I-1,K)-VBM(I-1,K+1))+(VBM(I,K)-VBM(I,K+1))) OOM1F405.1509
& *FXA*DZZ2RQ(I,K+1) OOM1F405.1510
DVEL2Q(I,K)=UZ*UZ+VZ*VZ OOM1F405.1511
UZ=((UB(I-1,K+1)-UB(I-1,K+2))+(UB(I,K+1)-UB(I,K+2))+ OOM1F405.1512
& (UBM(I-1,K+1)-UBM(I-1,K+2))+(UBM(I,K+1)-UBM(I,K+2))) OOM1F405.1513
& *FXA*DZZ2RQ(I,K+2) OOM1F405.1514
VZ=((VB(I-1,K+1)-VB(I-1,K+1))+(VB(I,K+1)-VB(I,K+2))+ OOM1F405.1515
& (VBM(I-1,K+1)-VBM(I-1,K+1))+(VBM(I,K+1)-VBM(I,K+2))) OOM1F405.1516
& *FXA*DZZ2RQ(I,K+2) OOM1F405.1517
DVEL2Q(I,K+1)=UZ*UZ+VZ*VZ OOM1F405.1518
211 CONTINUE OOM1F405.1519
DVEL2Q(1,K)=0.0 OOM1F405.1520
DVEL2Q(1,K+1)=0.0 OOM1F405.1521
DO 212 I=1,IMT OOM1F405.1522
RHOZA=(RHOSRNA(I,K)-RHOSRNA(I,K+1))*FX*DZZ2RQ(I,K+1) OOM1F405.1523
RHOZB=(RHOSRNB(I,K+1)-RHOSRNB(I,K+2))*FX*DZZ2RQ(I,K+2) OOM1F405.1524
RIPQ(I,K)=-GRAV_SI*100.*RHOZA ! 100. CONVERTS GRAV_SI TO CGS OOM1F405.1525
RIPQ(I,K+1)=-GRAV_SI*100.*RHOZB ! 100. CONVERTS GRAV_SI TO CGS OOM1F405.1526
212 CONTINUE OOM1F405.1527
210 CONTINUE OOM1F405.1528
C OOM1F405.1529
K=KMM1 OOM1F405.1530
DO I=2,IMT OOM1F405.1531
C OOM1F405.1532
UZ=((UB(I-1,K)-UB(I-1,K+1))+(UB(I,K)-UB(I,K+1))+ OOM1F405.1533
& (UBM(I-1,K)-UBM(I-1,K+1))+(UBM(I,K)-UBM(I,K+1))) OOM1F405.1534
& *FXA*DZZ2RQ(I,K+1) OOM1F405.1535
VZ=((VB(I-1,K)-VB(I-1,K+1))+(VB(I,K)-VB(I,K+1))+ OOM1F405.1536
& (VBM(I-1,K)-VBM(I-1,K+1))+(VBM(I,K)-VBM(I,K+1))) OOM1F405.1537
& *FXA*DZZ2RQ(I,K+1) OOM1F405.1538
DVEL2Q(I,K)=UZ*UZ+VZ*VZ OOM1F405.1539
ENDDO OOM1F405.1540
DVEL2Q(1,K)=0.0 OOM1F405.1541
DO I=1,IMT OOM1F405.1542
RHOZA=(RHOSRNA(I,K)-RHOSRNA(I,K+1))*FX*DZZ2RQ(I,K+1) OOM1F405.1543
RIPQ(I,K)=-GRAV_SI*100.*RHOZA ! 100. CONVERTS GRAV_SI TO CGS OOM1F405.1544
ENDDO OOM1F405.1545
ELSE OOM1F405.1546
DO 410 K=1,KMM1 VERTCOFT.71
DO 411 I=2,IMT VERTCOFT.72
C VERTCOFT.73
C -------------------------------------------------------------- VERTCOFT.74
C Evaluate Richardson No. VERTCOFT.75
C and thereby coefficient of diffusivity for mid-levels. VERTCOFT.76
C Note that the density rhosrn is calculated in CLINIC VERTCOFT.77
C VERTCOFT.78
C Note also that Ri = (g/rho0)*drhodz/(dudz*dudz + dvdz*dvdz). VERTCOFT.79
C This code assumes rho0=1 (OK in cgs units!) VERTCOFT.80
C -------------------------------------------------------------- VERTCOFT.81
C VERTCOFT.82
uz=((UB(I-1,K)-UB(I-1,K+1))+(UB(I,K)-UB(I,K+1))+ VERTCOFT.83
& (UBM(I-1,K)-UBM(I-1,K+1))+(UBM(I,K)-UBM(I,K+1))) VERTCOFT.84
& *fxa*DZZ2RQ(I,K+1) VERTCOFT.85
vz=((VB(I-1,K)-VB(I-1,K+1))+(VB(I,K)-VB(I,K+1))+ VERTCOFT.86
& (VBM(I-1,K)-VBM(I-1,K+1))+(VBM(I,K)-VBM(I,K+1))) VERTCOFT.87
& *fxa*DZZ2RQ(I,K+1) VERTCOFT.88
dvel2q(I,K)=uz*uz+vz*vz VERTCOFT.89
411 CONTINUE VERTCOFT.90
dvel2q(1,K)=0.0 VERTCOFT.91
DO 412 I=1,IMT VERTCOFT.92
rhoz=(rhosrn(I,K)-rhosrn(I,K+1))*fx*DZZ2RQ(I,K+1) VERTCOFT.93
ripq(I,K)=-GRAV_SI*100.*rhoz ! 100. converts GRAV_SI to cgs VERTCOFT.94
412 CONTINUE VERTCOFT.95
410 CONTINUE VERTCOFT.96
ENDIF ! L_OSTATEC OOM1F405.1547
C OOM1F405.1548
C VERTCOFT.97
C Convective adjustment takes care of unstable profiles VERTCOFT.98
C VERTCOFT.99
fx=0. VERTCOFT.100
DO 420 K=1,KMM1 VERTCOFT.101
DO 420 I=1,IMT VERTCOFT.102
IF (ripq(I,K).LT.fx) ripq(I,K)=fx VERTCOFT.103
420 CONTINUE VERTCOFT.104
C VERTCOFT.105
C If currents are zero set dvel2q to a small number.This is done VERTCOFT.106
C to prevent a divide check in the calculation of gnu VERTCOFT.107
C VERTCOFT.108
fx=1.E-12 VERTCOFT.109
DO 430 K=1,KMM1 VERTCOFT.110
DO 430 I=1,IMT VERTCOFT.111
IF (dvel2q(I,K).LT.fx) dvel2q(I,K)=fx VERTCOFT.112
430 CONTINUE VERTCOFT.113
C VERTCOFT.114
C OOM1F405.1549
IF(L_OPANDP)THEN OOM1F405.1550
C OOM1F405.1551
C Now calculate the diffusivity. Note that 1.E4 converts external VERTCOFT.115
C constants to cgs. The k's are offset by 1 since gnu(*,k) is the VERTCOFT.116
C diffusivity at the TOP of box k. gnu(*,1) is set at the end of VERTCOFT.117
C the routine. VERTCOFT.118
C VERTCOFT.119
fx=1. VERTCOFT.120
fxa=5. VERTCOFT.121
DO 440 K=1,KMM1 VERTCOFT.122
DO 440 I=1,IMT VERTCOFT.123
IF (FM(I,K+1).GT.0.9) THEN VERTCOFT.124
gnu(I,K+1)=FNU0_SI*1.E4*dvel2q(I,K)*dvel2q(I,K)/ VERTCOFT.125
& ((dvel2q(I,K)+fxa*ripq(I,K))* VERTCOFT.126
& (dvel2q(I,K)+fxa*ripq(I,K)))+FNUB_SI*1.E4 VERTCOFT.127
gnu(I,K+1)=gnu(I,K+1)*dvel2q(I,K)/ VERTCOFT.128
& (dvel2q(I,K)+fxa*ripq(I,K))+KAPPA_B_SI(K+1)*1.E4 RW071293.21
ENDIF VERTCOFT.130
440 CONTINUE VERTCOFT.131
C VERTCOFT.132
C OOM1F405.1552
ENDIF OOM1F405.1553
C OOM1F405.1554
C Calculate Richardson number OLA3F403.353
do K=1,KMM1 OLA3F403.354
do I=1,IMT OLA3F403.355
RiT(I,K)=ripq(I,K)/dvel2q(I,K) OLA3F403.356
end do OLA3F403.357
end do OLA3F403.358
C OOM1F405.1555
IF(.NOT.L_OPANDP)THEN OOM1F405.1556
C OOM1F405.1557
C CALCULATE GNU - TRACER DIFFUSIVITY USING PETERS. OOM1F405.1558
C Modify to limit dvel2q setting gnu if below a certain level. OOM1F405.1559
C If dvel2q too small, then regardless of ripq, set gnu to its OOM1F405.1560
C background value there. OOM1F405.1561
C GJR July 1998 OOM1F405.1562
C OOM1F405.1563
DO K=1,KMM1 OOM1F405.1564
DO I=1,IMT OOM1F405.1565
IF (FM(I,K+1).GT.0.9) THEN OOM1F405.1566
IF (DVEL2Q(I,K).GT.1.E-6)THEN OOM1F405.1567
IF (RIT(I,K).LT.RICRITT100) OOM1F405.1568
& GNU(I,K+1)=100. OOM1F405.1569
& +KAPPA_B_SI(K+1)*1.E4 OOM1F405.1570
IF (RIT(I,K).LT.RICRITT.AND.RIT(I,K).GT.RICRITT100) OOM1F405.1571
& GNU(I,K+1)=3.0E-5/(RIT(I,K)**9.6) OOM1F405.1572
& +KAPPA_B_SI(K+1)*1.E4 OOM1F405.1573
IF (RIT(I,K).GE.RICRITT) OOM1F405.1574
& GNU(I,K+1)=5.0/((1+5*RIT(I,K))**2.5) OOM1F405.1575
& +KAPPA_B_SI(K+1)*1.E4 OOM1F405.1576
ELSE OOM1F405.1577
GNU(I,K+1)=KAPPA_B_SI(K+1)*1.E4 OOM1F405.1578
ENDIF OOM1F405.1579
ENDIF OOM1F405.1580
ENDDO OOM1F405.1581
ENDDO OOM1F405.1582
C OOM1F405.1583
ENDIF OOM1F405.1584
C OOM1F405.1585
OLA3F403.359
IF (L_OFULARGE) THEN OOM1F405.1737
C CALCULATE VERTICAL DIFFUSIVITY, GNU, AT HT OOM1F405.1738
C OOM1F405.1739
DO I=1,IMT OOM1F405.1740
C OOM1F405.1741
IF (FM(I,1).GT.0.5.AND.HT(I).GE.ZDZ(1)) THEN OOM1F405.1742
C OOM1F405.1743
ZDZ_AT_MLKM1=0.0 OOM1F405.1744
GNUOFMLK=0.0 OOM1F405.1745
IF (MLK(I).GT.1) THEN OOM1F405.1746
ZDZ_AT_MLKM1=ZDZ(MLK(I)-1) OOM1F405.1747
GNUOFMLK=GNU(I,MLK(I)) OOM1F405.1748
ENDIF OOM1F405.1749
COEFF=(HT(I)-ZDZ_AT_MLKM1)/DZ(MLK(I)) OOM1F405.1750
GNUATHT=(1-COEFF)*GNUOFMLK+COEFF*GNU(I,MLK(I)+1) OOM1F405.1751
C CALCULATE D(GNU)/DZ AT HT TO RESTRICT TO MINIMUM OF 0.0 AS OTHERWISE OOM1F405.1752
C MAY OBTAIN POSSIBLE NEGATIVE VALUES OF GNU FROM LARGE SCHEME DUE OOM1F405.1753
C TO FITTING OF CUBIC FUNCTION. OOM1F405.1754
GNUZ(1)=(GNUOFMLK-GNU(I,MLK(I)+1))/DZ(MLK(I)) OOM1F405.1755
IF (GNUZ(1).GT.0.0) THEN OOM1F405.1756
IF (COEFF.LE.0.5) GNUZATHT=GNUZ(1) OOM1F405.1757
IF (COEFF.GT.0.5) THEN OOM1F405.1758
GNUZ(2)=(GNU(I,MLK(I)+1)-GNU(I,MLK(I)+2))/DZ(MLK(I)+1) OOM1F405.1759
COEFF=(HT(I)-ZDZZ(MLK(I)))/DZZ(MLK(I)+1) OOM1F405.1760
GNUZATHT=(1-COEFF)*GNUZ(1)+COEFF*GNUZ(2) OOM1F405.1761
GNUZATHT=MAX(GNUZATHT,0.0) OOM1F405.1762
ENDIF OOM1F405.1763
ELSE OOM1F405.1764
GNUZATHT=0.0 OOM1F405.1765
ENDIF OOM1F405.1766
C CALCULATE DEPTH DEPENDENT TURBULENT VELOCITY SCALE AT HT, OOM1F405.1767
C W1T, (LARGE EQN 13 WITH SIGMA=1) AND ITS DERIVATIVE WRT SIGMA, OOM1F405.1768
C DW1T. OOM1F405.1769
C OOM1F405.1770
IF (L_T(I).LT.0.0)THEN OOM1F405.1771
C OOM1F405.1772
STABIL_PARAM=EPSILON*HT(I)/L_T(I) OOM1F405.1773
W1T=VKMAN*USTAR(I)/FLUX_PROFILET
(STABIL_PARAM) OOM1F405.1774
DW1T=0.0 OOM1F405.1775
C OOM1F405.1776
ELSE OOM1F405.1777
C OOM1F405.1778
STABIL_PARAM=HT(I)/L_T(I) OOM1F405.1779
W1T=VKMAN*USTAR(I)/FLUX_PROFILET
(STABIL_PARAM) OOM1F405.1780
IF (0.0.LE.STABIL_PARAM) THEN OOM1F405.1781
DW1T = -5.0*VKMAN*USTAR(I)*STABIL_PARAM OOM1F405.1782
& /((1.0+5.0*STABIL_PARAM)**2) OOM1F405.1783
ELSE OOM1F405.1784
IF (-1.0.LE.STABIL_PARAM) THEN OOM1F405.1785
DW1T = -8.0*VKMAN*USTAR(I)*STABIL_PARAM OOM1F405.1786
& /((1.0-16.0*STABIL_PARAM)**0.5) OOM1F405.1787
ELSE OOM1F405.1788
DW1T = - 98.96/3.0 *VKMAN*USTAR(I)*STABIL_PARAM OOM1F405.1789
& /((-28.86-98.96*STABIL_PARAM)**(2.0/3.0)) OOM1F405.1790
ENDIF OOM1F405.1791
ENDIF OOM1F405.1792
C OOM1F405.1793
ENDIF ! L_T(I).LT.0.0 OOM1F405.1794
C OOM1F405.1795
C CALCULATE, WHEN SIGMA=Z/H=1, THE SHAPE FUNCTION AND ITS DERIVATIVE OOM1F405.1796
C WRT SIGMA (LARGE EQN 18) OOM1F405.1797
C N.B. G1=G(1)=SHAPE FUNCTION WHEN SIGMA=1 OOM1F405.1798
C DG1= DG(1)/DSIGMA OOM1F405.1799
IF (ABS(HT(I)).LT.1.0E-12.OR.ABS(W1T).LT.1.0E-12) THEN OOM1F405.1800
IF (W1T.GE.0.) W1T=1.0E-12 OOM1F405.1801
IF (W1T.LT.0.) W1T=-1.0E-12 OOM1F405.1802
ENDIF OOM1F405.1803
G1 = GNUATHT/(HT(I)*W1T) OOM1F405.1804
DG1 = - GNUZATHT/W1T - (GNUATHT*DW1T)/(HT(I)*W1T*W1T) OOM1F405.1805
C CALCULATE COEFFICIENTS OF SHAPE FUNCTION (LARGE EQN 17) OOM1F405.1806
A(1)=1. OOM1F405.1807
A(2)=-2.0+3.0*G1-DG1 OOM1F405.1808
A(3)=1.0-2.0*G1+DG1 OOM1F405.1809
C CALCULATE WT(K) - DEPTH DEPENDENT TURBULENT VELOCITY SCALE PROFILE OOM1F405.1810
C AT TOP OF LEVEL K (LARGE, EQN 13). WILL ALSO INCLUDE OOM1F405.1811
C COUNTER-GRADIENT FLUX CALCULATIONS HERE, TERMS OF WHICH ARE OOM1F405.1812
C DIFFERENT FOR POT. TEMP AND SALINITY, AND WHICH ARE ZERO OOM1F405.1813
C IF STABLE FORCING. THESE FLUXES ARE ALWAYS ZERO FOR MOMENTUM! OOM1F405.1814
C OOM1F405.1815
DO K=2,MLK(I) OOM1F405.1816
C OOM1F405.1817
STABIL_PARAM=ZDZ(K-1)/L_T(I) OOM1F405.1818
SIGMA=ZDZ(K-1)/HT(I) OOM1F405.1819
C OOM1F405.1820
IF(STABIL_PARAM.LT.0.0)THEN OOM1F405.1821
IF (SIGMA.GT.EPSILON)THEN OOM1F405.1822
STABIL_PARAM=(EPSILON*HT(I))/L_T(I) OOM1F405.1823
ENDIF OOM1F405.1824
WT(K)=(VKMAN*USTAR(I))/FLUX_PROFILET
(STABIL_PARAM) OOM1F405.1825
C OOM1F405.1826
C FIND NON-ZERO COUNTER-GRAIDENT FLUX TERMS HERE. LARGE et al OOM1F405.1827
C RECOMMEND NOT INCLUDING SOLAR PENETRATION TERMS... OOM1F405.1828
C OOM1F405.1829
C GAMMAT=7.5*(WT0+(WTRZ-WTR0))/(WT(K)*HT(I)) OOM1F405.1830
C OOM1F405.1831
C WTRZ=SOL_IRRA_1B(SOL(I)*1000.,ZDZ(K-1))/(RHO0*CP0) OOM1F405.1832
C CGFLUX(I,K,1)=7.5*(WT0(I)+(WTRZ-WTR0(I)))/(WT(K)*HT(I)) OOM1F405.1833
CGFLUX(I,K,1)=(7.5*WT0(I))/(WT(K)*HT(I)) OOM1F405.1834
C OOM1F405.1835
C GAMMAS=7.5*WS0/(WT(K)*HT(I)) OOM1F405.1836
CGFLUX(I,K,2)=(7.5*WS0(I))/(WT(K)*HT(I)) OOM1F405.1837
C OOM1F405.1838
ELSE OOM1F405.1839
C OOM1F405.1840
WT(K)=(VKMAN*USTAR(I))/FLUX_PROFILET
(STABIL_PARAM) OOM1F405.1841
CGFLUX(I,K,1)=0.0 OOM1F405.1842
CGFLUX(I,K,2)=0.0 OOM1F405.1843
C OOM1F405.1844
ENDIF OOM1F405.1845
C OOM1F405.1846
ENDDO OOM1F405.1847
C OOM1F405.1848
C CALCULATE SHAPE FUNCTION G THEN VERTICAL VISCOSITY PROFILE, GNU(K) OOM1F405.1849
C AT TOP OF LEVEL K IN THE MIXED LAYER (LARGE EQNS 11 AND 10) OOM1F405.1850
GNU(I,1)=0. OOM1F405.1851
DO K=2,MLK(I) OOM1F405.1852
SIGMA=ZDZ(K-1)/HT(I) OOM1F405.1853
G=SIGMA*(A(1)+SIGMA*(A(2)+A(3)*SIGMA)) OOM1F405.1854
GNU(I,K)= (HT(I)*WT(K))*G OOM1F405.1855
CGFLUX(I,K,1)=CGFLUX(I,K,1)*GNU(I,K) OOM1F405.1856
CGFLUX(I,K,2)=CGFLUX(I,K,2)*GNU(I,K) OOM1F405.1857
ENDDO OOM1F405.1858
C OOM1F405.1859
ELSE OOM1F405.1860
C OOM1F405.1861
DO K=1,KM OOM1F405.1862
GNU(I,K)=0.0 OOM1F405.1863
ENDDO OOM1F405.1864
C OOM1F405.1865
ENDIF !IF (FM(I,1).GT.0.5.AND.HT(I).GE.ZDZ(1)) OOM1F405.1866
C OOM1F405.1867
ENDDO ! DO I=1,IMT OOM1F405.1868
C OOM1F405.1869
ELSE OOM1F405.1870
IF (L_OQLARGE) THEN OLA3F403.360
C Simple quadratic form of Large scheme - OLA3F403.361
C applies - neutral Large in 'mixed layer' - defined to be where OLA3F403.362
C Richardson number is less than 0.3. OLA3F403.363
C - normal model Packonowski and Philander below mixed layer OLA3F403.364
C - functions specified so that vertical diffusion coeff is OLA3F403.365
C continuous at z=h OLA3F403.366
C - Constants chosen to give a quadratic form for G(z/h) OLA3F403.367
C Reference: OLA3F403.368
C W.G.Large et al 1994, Oceanic Vertical Mixing : A review and a OLA3F403.369
C model with a nonlocal boundary layer parametrisation, Rev Geophys, OLA3F403.370
C 32, 363-403. OLA3F403.371
C This scheme is a simplified neutral case of Large OLA3F403.372
C Vertical diffusion coeff, OLA3F403.373
C K(z)=h*kk*ustar*G(z/h) OLA3F403.374
C where z=depth (positive downwards) OLA3F403.375
C h=mixed layer depth OLA3F403.376
C kk=0.4 , von Karman's constant OLA0F404.166
C ustar= surface friction velocity OLA3F403.378
C = sqrt(wsx**2+wsy**2)/rho_w OLA3F403.379
C G(z/h)=z/h+a2*(z/h)**2 OLA3F403.380
C where a2 = Kath/(kk*ustar*h) - 1 OLA3F403.381
C Kath=K(Ri) at z=h OLA3F403.382
C To avoid problems where ustar is zero this is actually implemented as OLA3F403.383
C K(z)=h*kk*(z/h)*ustar*b2*(z/h)**2 OLA3F403.384
C where b2 = Kath/(kk*h) - ustar OLA3F403.385
C Scheme - for both momentum and tracers OLA3F403.386
C 1. Calculate gnu as usual OLA3F403.387
C 2. Find 'mixed layer depth' for Large scheme, h OLA3F403.388
C 3. For depths shallower than h, recalculate gnu using Large. OLA3F403.389
C OLA3F403.390
do i=1,imt OLA0F404.167
C Find 'mixed layer depth', hT, for quadratic Large scheme defined as OLA0F404.168
C min(depth where the critical Richardson no reached,max_qLarge_depth) OLA0F404.169
IF (FM(I,1).GT.0.9) THEN OLA0F404.170
do k=1,km OLA0F404.171
l=k OLA0F404.172
if (RiT(I,K).ge.crit_Ri.or.zdz(k).gt.max_qLarge_depth*100. OLA0F404.173
& .or.FM(i,min(k+1,km)).lt.0.5) goto 10 OLA0F404.174
enddo OLA0F404.175
10 continue OLA0F404.176
if (l.gt.1) then OLA0F404.177
if (RiT(i,l).ge.crit_Ri) then OLA0F404.178
if (RiT(i,l).ne.RiT(i,l-1)) then OLA0F404.179
hT(i)=zdz(l-1) + dz(l) OLA0F404.180
& *(crit_Ri-RiT(i,l-1))/(RiT(i,l)-RiT(i,l-1)) OLA0F404.181
hT(i)=min(hT(i),max_qLarge_depth*100.) OLA0F404.182
else OLA0F404.183
hT(i)=zdz(l-1) OLA0F404.184
endif OLA0F404.185
else OLA0F404.186
hT(i)=min(zdz(l),max_qLarge_depth*100.) OLA0F404.187
endif OLA0F404.188
C Calculate altered gnu i.e. applying quadratic Large where depth < hT OLA0F404.189
Kath=gnu(i,l-1) + (gnu(i,l)-gnu(i,l-1)) OLA0F404.190
& *(hT(i)-zdz(l-1))/dz(l) OLA0F404.191
b2 = Kath/(vkman*hT(i)) - ustar(i) OLA0F404.192
do k=1,l-1 OLA0F404.193
sigma=zdz(k)/hT(i) OLA0F404.194
gnu(i,k+1)=hT(i)*vkman*sigma*(ustar(i)+b2*sigma) OLA0F404.195
end do OLA0F404.196
endif OLA0F404.197
ENDIF OLA0F404.198
end do OLA3F403.415
ELSE OLA3F403.416
C The following occurs if the quadratic Large scheme is not chosen OLA3F403.417
C Reset gnu if value is greater than the stability limit. VERTCOFT.133
C 1.E4 converts STABLM_SI to cgs. VERTCOFT.134
C VERTCOFT.135
DO 450 K=2,KM VERTCOFT.136
DO 450 I=1,IMT VERTCOFT.137
IF (gnu(I,K).GT.STABLM_SI*1.E4) gnu(I,K)=STABLM_SI*1.E4 VERTCOFT.138
450 CONTINUE VERTCOFT.139
C VERTCOFT.140
ENDIF OLA3F403.418
C Reset diffusivity between top 2 levels to a min of GNUMINT_SI VERTCOFT.141
C The surface value gnu(*,1) is also set to GNUMINT_SI here. VERTCOFT.142
C VERTCOFT.143
fx=GNUMINT_SI*1.E4 ! 1.E4 converts to cgs VERTCOFT.144
DO 460 I=1,IMT VERTCOFT.145
IF (gnu(I,2).LT.fx) gnu(I,2)=fx*FM(I,2) VERTCOFT.146
gnu(I,1)=fx*FM(I,1) VERTCOFT.147
460 CONTINUE VERTCOFT.148
470 CONTINUE VERTCOFT.149
C VERTCOFT.150
ENDIF OOM1F405.1871
C Finally, multiply by the land-sea mask for safety. VERTCOFT.151
C VERTCOFT.152
DO 480 K=1,KM VERTCOFT.153
DO 490 I=1,IMT VERTCOFT.154
gnu(I,K)=gnu(I,K)*FM(I,K) VERTCOFT.155
DO NDUM=1,NT OOM1F405.1872
CGFLUX(I,K,NDUM)=CGFLUX(I,K,NDUM)*FM(I,K) OOM1F405.1873
ENDDO OOM1F405.1874
490 CONTINUE VERTCOFT.156
480 CONTINUE VERTCOFT.157
C VERTCOFT.158
RETURN VERTCOFT.159
END VERTCOFT.160
*ENDIF @DYALLOC.4682