*IF DEF,OCEAN                                                              @DYALLOC.4683   
C ******************************COPYRIGHT******************************    GTS2F400.11557  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.11558  
C                                                                          GTS2F400.11559  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.11560  
C restrictions as set forth in the contract.                               GTS2F400.11561  
C                                                                          GTS2F400.11562  
C                Meteorological Office                                     GTS2F400.11563  
C                London Road                                               GTS2F400.11564  
C                BRACKNELL                                                 GTS2F400.11565  
C                Berkshire UK                                              GTS2F400.11566  
C                RG12 2SZ                                                  GTS2F400.11567  
C                                                                          GTS2F400.11568  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.11569  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.11570  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.11571  
C Modelling at the above address.                                          GTS2F400.11572  
C ******************************COPYRIGHT******************************    GTS2F400.11573  
C                                                                          GTS2F400.11574  
C                                                                          VERTCOFC.3      
C  Subroutine VERTCOFC                                                     VERTCOFC.4      
C  -------------------                                                     VERTCOFC.5      
C                                                                          VERTCOFC.6      
C  Calculates the vertical coefficient of viscosity                        VERTCOFC.7      
C  at every oceanic grid point in the slab,                                VERTCOFC.8      
C  using the model of Pacanowski & Philander (1981)                        VERTCOFC.9      
C  ('K-theory diffusion').                                                 VERTCOFC.10     
C                                                                          VERTCOFC.11     
C  Called from CLINIC.                                                     VERTCOFC.12     
C                                                                          VERTCOFC.13     
!     3.5    16.01.95   Remove *IF dependency. R.Hill                      ORH1F305.5357   
CLL    4.3  C.M.Roberts Quadratic Large scheme introduced                  OLA0F404.199    
CLL    4.4  C.M.Roberts Changes introduced to Quadratic Large scheme       OLA0F404.200    
!   4.4  15/08/97  Remove SKIPLAND code. R. Hill                           ORH7F404.44     
CLL 4.5 G.J.Rickard Introduce full Large scheme, optional use              OOM1F405.896    
CLL                 of STATEC for Richardson no calculation, and           OOM1F405.897    
CLL                 optional use of Peters et al mixing.                   OOM1F405.898    
CLL                                                                        OOM1F405.899    
C                                                                          VERTCOFC.14     

      SUBROUTINE VERTCOFC                                                   2,14VERTCOFC.15     
     &  ( J,IMT,KM,KMM1,NT,                                                VERTCOFC.16     
     &  JMT,                                                               ORH7F404.45     
     &  TB,TBP, UB,VB,                                                     VERTCOFC.17     
     &  DZZ2RQ,DZ2RQ,                                                      OLA3F403.48     
     &  NERGY,GRAV_SI,GM,                                                  VERTCOFC.19     
     &  RHOSRN,RHOSRNA,RHOSRNB,                                            OOM1F405.900    
     &  WSX, WSY,                                                          OLA3F403.49     
     &  ZDZZ,ZDZ,DZ,DZZ,                                                   OOM1F405.901    
     &  Rim,hm,max_qLarge_depth,crit_Ri,                                   OLA0F404.202    
     &  L_M,MAX_LARGE_DEPTH,MAX_LARGE_LEVELS,RHO_WATER_SI,                 OOM1F405.902    
     &  MLD_LARGE,MLD_LARGEP,HTN,HTNP,PME,PMEP,SOL,SOLP,                   OOM1F405.903    
     &  WATERFLUX_ICE,WATERFLUX_ICEP,LAMBDA_LARGE,SPECIFIC_HEAT_SI,        OOM1F405.904    
     &  WME,WMEP,L_OWINDMIX,L_OBULKMAXMLD,                                 OOM1F405.905    
     &  PHI,                                                               OOM1F405.906    
     &  GNU,FNU0_SI,FNUB_SI,STABLM_SI,GNUMINC_SI                           OOM1F405.907    
     &,OCEANHEATFLUX,OCEANHEATFLUXP                                        OOM1F405.908    
     &,CARYHEAT,CARYHEATP                                                  OOM1F405.909    
     &,FLXTOICE,FLXTOICEP)                                                 OOM1F405.910    
C                                                                          VERTCOFC.22     
C                                                                          VERTCOFC.23     
      IMPLICIT NONE                                                        VERTCOFC.24     
*CALL CNTLOCN                                                              ORH1F305.5358   
*CALL OARRYSIZ                                                             ORH1F305.5359   
C                                                                          VERTCOFC.25     
*CALL C_VKMAN                                                              OLA0F404.203    
*CALL C_PI                                                                 OOM1F405.913    
*CALL C_OMEGA                                                              OOM1F405.914    
      INTEGER                                                              VERTCOFC.26     
     &  I,J,K,IMT,KM,KMM1,NT,NERGY                                         VERTCOFC.27     
     &,JMT         ! IN No of rows                                         ORH1F305.5360   
C                                                                          VERTCOFC.28     
      REAL                                                                 VERTCOFC.29     
     &  TB(IMT,KM,NT),TBP(IMT,KM,NT),UB(IMT,KM),VB(IMT,KM),                VERTCOFC.30     
     &  GM(IMT,KM),DZZ2RQ(IMT,KM),DZ2RQ(IMT,KM),GRAV_SI,                   OLA3F403.52     
     &  rhosrn(IMT,KM),  ! OUT  Density on TS row to S of vel row J        VERTCOFC.32     
     &  RHOSRNA(IMT,KM+1),  ! OUT  DENSITY ON TS ROW TO S OF VEL ROW J     OOM1F405.911    
     &  RHOSRNB(IMT,KM+1),  ! OUT  DENSITY ON TS ROW TO S OF VEL ROW J     OOM1F405.912    
     &  gnu(IMT,KM),     ! OUT  Vertical viscosity (cm2/s) at TOP of box   VERTCOFC.33     
     &  FNU0_SI,         ! IN   Max value of stability-dependent term      VERTCOFC.34     
C                               of vert. momentum diffusivity (m2/s)       VERTCOFC.35     
     &  FNUB_SI,         ! IN   Background value of momentum               VERTCOFC.36     
C                               diffusivity (m2/s)                         VERTCOFC.37     
     &  STABLM_SI        ! IN   Max value of diffusivity (m2/s)            VERTCOFC.38     
     & ,GNUMINC_SI       ! IN   Min value of momentum diffusivity          VERTCOFC.39     
C                               between top two levels (m2/s)              VERTCOFC.40     
      REAL                                                                 OOM1F405.920    
     &  MLD_LARGE(IMT)  ! IN MIXED LAYER DEPTH ON T GRID, ROW J (CM)       OOM1F405.921    
     &, MLD_LARGEP(IMT) ! IN MIXED LAYER DEPTH ON T GRID, ROW J+1 (CM)     OOM1F405.922    
     &, WME(IMT),WMEP(IMT) ! IN WIND MIXING ENERGY FOR ROW J,J+1           OOM1F405.923    
     &, DZZ(KM+1)       ! IN DISTANCE BETWEEN MIDPTS OF LEVELS (CM)        OOM1F405.924    
     &, MAX_LARGE_DEPTH ! IN MAX DEPTH LARGE CAN BE APPLIED TO (M)         OOM1F405.925    
     &, RHO_WATER_SI    ! IN DENSITY OF SEA WATER = 1026. KG/M^3           OOM1F405.926    
     &, L_M(IMT)   ! OUT MONIN OBUKHOV LENGTH LARGE SCHEME (MOMENTUM)      OOM1F405.927    
     &, ALPHAI(IMT,1),BETAI(IMT,1) ! EXPANSION COEFF-TRACER GRID (J)       OOM1F405.928    
     &, ALPHAIP(IMT,1),BETAIP(IMT,1) ! EXPANSION COEFF-TRACER GRID (J+1)   OOM1F405.929    
      REAL                                                                 OOM1F405.930    
     &  HTN(IMT)  ! IN NON-PENETRATING HEAT FLUX (W/M2) ON ROW J           OOM1F405.931    
     &, HTNP(IMT) ! IN NON-PENETRATING HEAT FLUX (W/M2) ON ROW J+1         OOM1F405.932    
     &, PME(IMT)  ! IN PRECIP MINUS EVAP (KG/M2/S) ON ROW J                OOM1F405.933    
     &, PMEP(IMT) ! IN PRECIP MINUS EVAP (KG/M2/S) ON ROW J+1              OOM1F405.934    
     &, SOL(IMT)  ! IN SOLAR IRRADIANCE (W/M2) AT SURFACE ON ROW J         OOM1F405.935    
     &, SOLP(IMT) ! IN SOLAR IRRADIANCE (W/M2) AT SURFACE ON ROW J+1       OOM1F405.936    
     &, WATERFLUX_ICE(IMT) ! IN WATER FLUX FROM ICE (KG/M2/S) ,ROW J       OOM1F405.937    
     &, WATERFLUX_ICEP(IMT) ! IN WATER FLUX FROM ICE (KG/M2/S) ,ROW J+1    OOM1F405.938    
     &, LAMBDA_LARGE,SPECIFIC_HEAT_SI   ! IN FOR CALCULATING MINIMUM MLD   OOM1F405.939    
     &, PHI ! IN LATITUDE OF ROW J ON UV GRID (RADIANS)                    OOM1F405.940    
      INTEGER                                                              OOM1F405.941    
     &  MAX_LARGE_LEVELS ! IN MAX NO OF LEVS FOR LARGE SCHEME              OOM1F405.942    
      LOGICAL L_OWINDMIX,L_OBULKMAXMLD                                     OOM1F405.943    
      REAL WSX(IMT),WSY(IMT) ! surface stress (in SI units, N m^-2)        OLA3F403.53     
      REAL ZDZZ(KM+1)  ! IN DEPTH OF MIDDLE OF LAYER  (CM)                 OOM1F405.947    
      REAL ZDZ  ( KM)       ! depth of bottom of layer  (cm)               OLA3F403.55     
      REAL DZ(KM)  !  IN distance between half-levels (cm)                 OLA0F404.210    
      REAL                                                                 OLA0F404.204    
     &  hm(IMT_QLARGE) ! OUT depth quadratic Large scheme applied to       OLA0F404.205    
     &, Rim(IMT,KMM1)  ! OUT Richardson no at BOTTOM of box k              OLA0F404.206    
     &, max_qLarge_depth ! IN max depth allowed for quadratic Large        OLA0F404.207    
     &, crit_Ri  ! IN critical Richardson no used for depth of             OLA0F404.208    
                 !    quadratic Large scheme                               OLA0F404.209    
       REAL                                                                OOM1F405.915    
     & OCEANHEATFLUX(IMT),OCEANHEATFLUXP(IMT)                              OOM1F405.916    
     &      !HTN:NON-PENETRATIVE SURFACE HEATFLUX INTO OCEAN BUDGET        OOM1F405.917    
     &,CARYHEAT(IMT),CARYHEATP(IMT) !MISCELLANEOUS HEATFLUX FROM ICE       OOM1F405.918    
     &,FLXTOICE(IMT),FLXTOICEP(IMT) !OCEAN TO ICE HEATFLUX                 OOM1F405.919    
C                                                                          VERTCOFC.41     
C                                                                          VERTCOFC.42     
C         Declare local variables and arrays                               VERTCOFC.43     
C                                                                          VERTCOFC.44     
      REAL                                                                 VERTCOFC.45     
     &  ripq(IMT,KMM1),  ! d(rho)/dz at BOTTOM of box k                    VERTCOFC.46     
     &  dvel2q(IMT,KMM1),! Uz*Uz + Vz*Vz at BOTTOM of box k                VERTCOFC.47     
     &  rhonrn(IMT,KM),  ! Density on TS row to N of vel row J             VERTCOFC.48     
     &  RHONRNA(IMT,KM+1),  ! DENSITY ON TS ROW TO N OF VEL ROW J          OOM1F405.944    
     &  RHONRNB(IMT,KM+1),  ! DENSITY ON TS ROW TO N OF VEL ROW J          OOM1F405.945    
     &  worka(IMT,KM),   ! Workspace                                       VERTCOFC.49     
     &  workb(IMT,KM),   ! Workspace                                       VERTCOFC.50     
     &  uz,              ! Uz at BOTTOM of current box                     VERTCOFC.51     
     &  vz,              ! Vz at BOTTOM of current box                     VERTCOFC.52     
     &  ustar(IMT_QLARGE),! surface friction velocity on velocity grid     OLA3F403.58     
     &  Kath,           ! K at z=h                                         OLA3F403.59     
     &  b2,             ! value used in calculation of gnu for Large.      OLA3F403.60     
     &  sigma,          ! depth/h                                          OLA3F403.61     
     &  RHOZ,RHOZA,RHOZB,                                                  OOM1F405.946    
     &  fx,                                                                VERTCOFC.54     
     &  fxa,                                                               VERTCOFC.55     
     &  fxb                                                                VERTCOFC.56     
C                                                                          VERTCOFC.57     
      REAL                                                                 OOM1F405.948    
     &  GNUATHM      ! VERTICAL DIFFUSION COEFF (CM2/S) AT LEVEL HM        OOM1F405.949    
     &, GNUZATHM     ! D(GNU)/DZ AT HM                                     OOM1F405.950    
     &, ZDZ_AT_MLKM1 ! ZDZ AT LEVEL MLK-1                                  OOM1F405.951    
     &, GNUOFMLK     ! GNU(I,MLK(I))                                       OOM1F405.952    
     &, GNUZ(2)      ! D(GNU)/DZ AT MIDPOINTS OF LEVELS MLK,MLK+1          OOM1F405.953    
     &, COEFF        ! PROPORTION OF DEPTH BELOW TOP OF BOX FOR MLD        OOM1F405.954    
     &, RHO_FRESHWATER ! DENSITY OF FRESH WATER = 1.0 G/CM^3               OOM1F405.955    
     &, RHO0 ! DENSITY OF SEA WATER = 1.026 G/CM^3                         OOM1F405.956    
     &, WATERFLUX_MOM,SFC_HEATFLUX_MOM ! WATERFLUX ON UV GRID IN CGS       OOM1F405.957    
     &, SOL_MOM ! SOL ON UV GRID IN CGS UNITS                              OOM1F405.958    
     &, WME_MOM ! WIND MIXING ENERGY ON UV GRID IN CGS UNITS               OOM1F405.959    
     &, GRAV  !  GRAV_SI IN CGS UNITS                                      OOM1F405.960    
     &, ALPHA,BETA ! THERMODYNAMIC EXPANSION COEFFS FOR T,S                OOM1F405.961    
     &, CP0 ! SPECIFIC HEAT CAPACITY AT CONST PRESSURE AT SURFACE(CGS)     OOM1F405.962    
     &, BF     ! BUOYANCY FREQUENCY                                        OOM1F405.963    
      REAL                                                                 OOM1F405.964    
     &  W1M    ! TURBULENT VELOCITY SCALE AT MLD                           OOM1F405.965    
     &, DW1M   ! DERIV OF TURBULENT VELOCITY SCALE WRT SIGMA AT MLD        OOM1F405.966    
     &, STABIL_PARAM  !  STABILITY PARAMETER                               OOM1F405.967    
     &, G1     ! SHAPE FUNCTION WHEN SIGMA=Z/H=1                           OOM1F405.968    
     &, DG1    ! DG/DSIGMA  EVALUATED AT SIGMA=1                           OOM1F405.969    
     &, A(3)   ! COEFFICIENTS OF CUBIC SHAPE FUNCTION                      OOM1F405.970    
     &, WM(KM)  ! TURBULENT VELOCITY SCALE PROFILE AT TOP OF BOX K         OOM1F405.971    
     &, EPSILON  !  =0.1 (LARGE P365)                                      OOM1F405.972    
     &, G      ! SHAPE FUNCTION AT TOP OF BOX K.                           OOM1F405.973    
      INTEGER                                                              OOM1F405.974    
     &  MLK(IMT) ! LEVEL WITHIN WHICH MLD_LARGE IS CONTAINED               OOM1F405.975    
     &, IP1      ! I+1                                                     OOM1F405.976    
      INTEGER I2                                                           OOM1F405.977    
C DEFINE FUNCTIONS                                                         OOM1F405.978    
      REAL                                                                 OOM1F405.979    
     &  SOL_IRRA_1B                                                        OOM1F405.980    
     &, FLUX_PROFILEM                                                      OOM1F405.981    
C PARAMETERS FOR PETERS SCHEME                                             OOM1F405.982    
C                                                                          OOM1F405.983    
      REAL RICRITM,RICRITM100  ! CRITICAL NUMBERS FOR MOMENTUM             OOM1F405.984    
      PARAMETER(RICRITM = 0.39331063,RICRITM100 = 0.2288417)               OOM1F405.985    
C                                                                          OOM1F405.986    
      INTEGER  l  ! level within which hm is contained                     OLA0F404.211    
                  ! for quadratic Large scheme                             OLA0F404.212    
CL Parameters                                                              OLA3F403.65     
C                                                                          VERTCOFC.58     
C Zero out gnu                                                             VERTCOFC.59     
C                                                                          VERTCOFC.60     
      fx=0.                                                                VERTCOFC.61     
      DO 110 K=1,KM                                                        VERTCOFC.62     
      DO 110 I=1,IMT                                                       VERTCOFC.63     
        gnu(I,K)=fx                                                        VERTCOFC.64     
  110 CONTINUE                                                             VERTCOFC.65     
C CALCULATE SURFACE FRICTION VELOCITY IN CGS UNITS                         OOM1F405.1116   
      IF (L_OFULARGE) THEN                                                 OOM1F405.1117   
        RHO_FRESHWATER=1.0       ! IN G/CM^3                               OOM1F405.1118   
        RHO0=RHO_WATER_SI*0.001  ! CONVERT TO CGS UNITS                    OOM1F405.1119   
        GRAV=GRAV_SI*100.        ! CONVERT TO CGS UNITS                    OOM1F405.1120   
        EPSILON=0.1                                                        OOM1F405.1121   
        IF (L_OUSTARWME) THEN                                              OOM1F405.1122   
C 1000.0 CONVERTS FROM SI TO CGS                                           OOM1F405.1123   
C USTAR^3 = WME/RHO0                                                       OOM1F405.1124   
          DO I=1,IMT-1                                                     OOM1F405.1125   
            WME_MOM=1000.0*0.25*(WME(I)+WME(I+1)+WMEP(I)+WMEP(I+1))        OOM1F405.1126   
            IF (GM(I,1).GT.0.5) THEN                                       OOM1F405.1127   
            USTAR(I)=(WME_MOM/RHO0)**(1.0/3.0)                             OOM1F405.1128   
            ELSE                                                           OOM1F405.1129   
            USTAR(I)=0.0                                                   OOM1F405.1130   
            ENDIF                                                          OOM1F405.1131   
          END DO                                                           OOM1F405.1132   
          IF (L_OCYCLIC) THEN                                              OOM1F405.1133   
            USTAR(IMT)=USTAR(2)                                            OOM1F405.1134   
            USTAR(IMT-1)=USTAR(1)                                          OOM1F405.1135   
          ELSE                                                             OOM1F405.1136   
            WME_MOM=1000.0*0.5*(WME(IMT)+WMEP(IMT))                        OOM1F405.1137   
            IF (GM(IMT,1).GT.0.5) THEN                                     OOM1F405.1138   
            USTAR(IMT)=(WME_MOM/RHO0)**(1.0/3.0)                           OOM1F405.1139   
            ELSE                                                           OOM1F405.1140   
            USTAR(IMT)=0.0                                                 OOM1F405.1141   
            ENDIF                                                          OOM1F405.1142   
          ENDIF                                                            OOM1F405.1143   
        ELSE                                                               OOM1F405.1144   
C 10.0 CONVERTS FROM N M^-2 TO DYNES CM^-2                                 OOM1F405.1145   
C USTAR^2 = TAU/RHO0                                                       OOM1F405.1146   
          DO I=1,IMT                                                       OOM1F405.1147   
            USTAR(I)= SQRT(WSX(I)*WSX(I)+WSY(I)*WSY(I))                    OOM1F405.1148   
            USTAR(I)= 10.0 * USTAR(I) / RHO0                               OOM1F405.1149   
            USTAR(I)= SQRT(USTAR(I))                                       OOM1F405.1150   
          END DO                                                           OOM1F405.1151   
        ENDIF                                                              OOM1F405.1152   
C DO PRELIMINARY CALCULATION OF HM AS NEEDED TO CALCULATE BUOYANCY         OOM1F405.1153   
C FREQUENCY                                                                OOM1F405.1154   
        DO I=1,IMT-1                                                       OOM1F405.1155   
          HM(I)=0.25*(MLD_LARGE(I)+MLD_LARGE(I+1)+                         OOM1F405.1156   
     &             MLD_LARGEP(I)+MLD_LARGEP(I+1))                          OOM1F405.1157   
          HM(I)=MIN(HM(I),MAX_LARGE_DEPTH*100.)                            OOM1F405.1158   
          HM(I)=MAX(HM(I),1.5*ZDZ(1))                                      OOM1F405.1159   
        ENDDO                                                              OOM1F405.1160   
        IF (L_OCYCLIC) THEN                                                OOM1F405.1161   
          HM(IMT)=HM(2)                                                    OOM1F405.1162   
          HM(IMT-1)=HM(1)                                                  OOM1F405.1163   
        ELSE                                                               OOM1F405.1164   
          HM(IMT)=0.5*(MLD_LARGE(IMT)+MLD_LARGEP(IMT))                     OOM1F405.1165   
          HM(IMT)=MIN(HM(IMT),MAX_LARGE_DEPTH*100.)                        OOM1F405.1166   
          HM(IMT)=MAX(HM(IMT),1.5*ZDZ(1))                                  OOM1F405.1167   
        ENDIF                                                              OOM1F405.1168   
C                                                                          OOM1F405.1169   
C CALCULATE SURFACE BUOYANCY FORCING , BF, IN CM^2/S^3                     OOM1F405.1170   
C **************************************************************           OOM1F405.1171   
C SET UP ALPHA AND BETA AT THE SURFACE FOR ROWS J AND J+1                  OOM1F405.1172   
C                                                                          OOM1F405.1173   
        CALL DRODT(TB,TB(1,1,2),ALPHAI,IMT,1)                              OOM1F405.1174   
        CALL DRODS(TB,TB(1,1,2),BETAI,IMT,1)                               OOM1F405.1175   
        CALL DRODT(TBP,TBP(1,1,2),ALPHAIP,IMT,1)                           OOM1F405.1176   
        CALL DRODS(TBP,TBP(1,1,2),BETAIP,IMT,1)                            OOM1F405.1177   
C                                                                          OOM1F405.1178   
        CP0   = SPECIFIC_HEAT_SI*1.E4  !  IN CM^2 S^-2 K^-1                OOM1F405.1179   
C **************************************************************           OOM1F405.1180   
        DO I=1,IMT                                                         OOM1F405.1181   
          L_M(I)=0.0                                                       OOM1F405.1182   
          IF (GM(I,1).GT.0.5) THEN                                         OOM1F405.1183   
            IP1=I+1                                                        OOM1F405.1184   
            IF (I.EQ.IMT) THEN                                             OOM1F405.1185   
C---- I EQ IMT IS EQUIVALENT TO I=2 ON VELOCITY GRID, HENCE...             OOM1F405.1186   
              IP1=3                                                        OOM1F405.1187   
              IF (.NOT.L_OCYCLIC) IP1=IMT                                  OOM1F405.1188   
            ENDIF                                                          OOM1F405.1189   
            ALPHA=-0.25*( ALPHAI(I,1)+ALPHAI(IP1,1)+                       OOM1F405.1190   
     &                    ALPHAIP(I,1)+ALPHAIP(IP1,1) )                    OOM1F405.1191   
            BETA=0.25*( BETAI(I,1)+BETAI(IP1,1)+                           OOM1F405.1192   
     &                  BETAIP(I,1)+BETAIP(IP1,1) )                        OOM1F405.1193   
C FACTORS CONVERT TO CGS UNITS. W/M^2=KG/S^3=1000G/S^3                     OOM1F405.1194   
C                               KG/M^2/S=0.1G/CM^2/S                       OOM1F405.1195   
C                                                                          OOM1F405.1196   
       IF(L_SEAICE)THEN                                                    OOM1F405.1197   
            SFC_HEATFLUX_MOM=1000.0*0.25*(                                 OOM1F405.1198   
     & OCEANHEATFLUX(I)+OCEANHEATFLUX(IP1)+                                OOM1F405.1199   
     & OCEANHEATFLUXP(I)+OCEANHEATFLUXP(IP1)-                              OOM1F405.1200   
     & FLXTOICE(I)-FLXTOICE(IP1)-                                          OOM1F405.1201   
     & FLXTOICEP(I)-FLXTOICEP(IP1)+                                        OOM1F405.1202   
     & CARYHEAT(I)+CARYHEAT(IP1)+                                          OOM1F405.1203   
     & CARYHEATP(I)+CARYHEATP(IP1)    )                                    OOM1F405.1204   
       ELSE                                                                OOM1F405.1205   
            SFC_HEATFLUX_MOM=1000.0*0.25*(                                 OOM1F405.1206   
     & HTN(I)+HTN(IP1)+                                                    OOM1F405.1207   
     & HTNP(I)+HTNP(IP1)   )                                               OOM1F405.1208   
       ENDIF                                                               OOM1F405.1209   
C                                                                          OOM1F405.1210   
            SOL_MOM=0.25*(SOL(I)+SOL(IP1)+SOLP(I)+SOLP(IP1))*1000.         OOM1F405.1211   
            WATERFLUX_MOM=0.25*(PME(I)+WATERFLUX_ICE(I)                    OOM1F405.1212   
     &                     +PME(IP1)+WATERFLUX_ICE(IP1)                    OOM1F405.1213   
     &                     +PMEP(I)+WATERFLUX_ICEP(I)                      OOM1F405.1214   
     &                     +PMEP(IP1)+WATERFLUX_ICEP(IP1))*0.1             OOM1F405.1215   
C *******************************************************************      OOM1F405.1216   
            BF=GRAV * ( ALPHA*SFC_HEATFLUX_MOM/(RHO0*CP0)                  OOM1F405.1217   
     &                 + BETA*WATERFLUX_MOM*0.035/RHO_FRESHWATER )         OOM1F405.1218   
     &          + GRAV*ALPHA* ( SOL_MOM/(RHO0*CP0)                         OOM1F405.1219   
     &              - SOL_IRRA_1B(SOL_MOM,HM(I))/(RHO0*CP0) )              OOM1F405.1220   
C *******************************************************************      OOM1F405.1221   
C CALCULATE MONIN-OBUKHOV LENGTH, L_M, CM = (CM/S)^3 / (CM^2/S^3)          OOM1F405.1222   
            IF (ABS(BF).LT.1.0E-12) THEN                                   OOM1F405.1223   
              IF (BF.GE.0.0) BF=1.0E-12                                    OOM1F405.1224   
              IF (BF.LT.0.0) BF=-1.0E-12                                   OOM1F405.1225   
            ENDIF                                                          OOM1F405.1226   
            L_M(I) = USTAR(I)**3/(VKMAN*BF)                                OOM1F405.1227   
            IF (ABS(L_M(I)).LT.1.0E-12) THEN                               OOM1F405.1228   
              IF (L_M(I).GE.0.0) L_M(I)=1.0E-12                            OOM1F405.1229   
              IF (L_M(I).LT.0.0) L_M(I)=-1.0E-12                           OOM1F405.1230   
            ENDIF                                                          OOM1F405.1231   
          ENDIF                                                            OOM1F405.1232   
        ENDDO                                                              OOM1F405.1233   
C CALCULATE DEPTH TO APPLY LARGE SCHEME TO (100 CONVERTS TO CM)            OOM1F405.1234   
        DO I=1,IMT-1                                                       OOM1F405.1235   
          HM(I)=0.25*(MLD_LARGE(I)+MLD_LARGE(I+1)+                         OOM1F405.1236   
     &             MLD_LARGEP(I)+MLD_LARGEP(I+1))                          OOM1F405.1237   
C                                                                          OOM1F405.1238   
          IF (L_OWINDMIX.AND.L_M(I).GT.0.0) THEN                           OOM1F405.1239   
            HM(I)=MAX(HM(I),2*LAMBDA_LARGE*VKMAN*L_M(I))                   OOM1F405.1240   
          ENDIF                                                            OOM1F405.1241   
C                                                                          OOM1F405.1242   
          IF (L_OBULKMAXMLD.AND.L_M(I).GT.0.0) THEN                        OOM1F405.1243   
            HM(I)=MIN(HM(I),L_M(I))                                        OOM1F405.1244   
            IF (.NOT.L_OROTATE) THEN                                       OOM1F405.1245   
C          CALCULATE CORIOLIS PARAMETER F. IF PHI<5 DEG, ASSUME PHI=5      OOM1F405.1246   
              FX=2*OMEGA*SIN(MAX(PHI,5.0*PI_OVER_180))                     OOM1F405.1247   
              HM(I)=MIN(HM(I),0.7*USTAR(I)/FX)                             OOM1F405.1248   
            ENDIF                                                          OOM1F405.1249   
          ENDIF                                                            OOM1F405.1250   
C                                                                          OOM1F405.1251   
C         SOME FINAL CHECKS ON HM                                          OOM1F405.1252   
C                                                                          OOM1F405.1253   
          HM(I)=MIN(HM(I),MAX_LARGE_DEPTH*100.)                            OOM1F405.1254   
          HM(I)=MAX(HM(I),1.5*ZDZ(1))                                      OOM1F405.1255   
C                                                                          OOM1F405.1256   
        ENDDO                                                              OOM1F405.1257   
        IF (L_OCYCLIC) THEN                                                OOM1F405.1258   
          HM(IMT)=HM(2)                                                    OOM1F405.1259   
          HM(IMT-1)=HM(1)                                                  OOM1F405.1260   
        ELSE                                                               OOM1F405.1261   
          HM(IMT)=0.5*(MLD_LARGE(IMT)+MLD_LARGEP(IMT))                     OOM1F405.1262   
C                                                                          OOM1F405.1263   
          IF (L_OWINDMIX.AND.L_M(IMT).GT.0.0) THEN                         OOM1F405.1264   
            HM(IMT)=MAX(HM(IMT),2*LAMBDA_LARGE*VKMAN*L_M(IMT))             OOM1F405.1265   
          ENDIF                                                            OOM1F405.1266   
C                                                                          OOM1F405.1267   
          IF (L_OBULKMAXMLD.AND.L_M(IMT).GT.0.0) THEN                      OOM1F405.1268   
            HM(IMT)=MIN(HM(IMT),L_M(IMT))                                  OOM1F405.1269   
            IF (.NOT.L_OROTATE) THEN                                       OOM1F405.1270   
C          CALCULATE CORIOLIS PARAMETER F. IF PHI<5 DEG, ASSUME PHI=5      OOM1F405.1271   
              FX=2*OMEGA*SIN(MAX(PHI,5.0*PI_OVER_180))                     OOM1F405.1272   
              HM(IMT)=MIN(HM(IMT),0.7*USTAR(IMT)/FX)                       OOM1F405.1273   
            ENDIF                                                          OOM1F405.1274   
          ENDIF                                                            OOM1F405.1275   
C                                                                          OOM1F405.1276   
C         SOME FINAL CHECKS ON HM                                          OOM1F405.1277   
C                                                                          OOM1F405.1278   
          HM(IMT)=MAX(HM(IMT),1.5*ZDZ(1))                                  OOM1F405.1279   
          HM(IMT)=MIN(HM(IMT),MAX_LARGE_DEPTH*100.)                        OOM1F405.1280   
C                                                                          OOM1F405.1281   
        ENDIF                                                              OOM1F405.1282   
C CALCULATE MIN NO OF LEVELS WITHIN WHICH MIXED LAYER IS CONTAINED         OOM1F405.1283   
C I.E. LEVEL WITHIN WHICH THE MIXED LAYER LIES                             OOM1F405.1284   
        DO I=1,IMT                                                         OOM1F405.1285   
          MLK(I)=1                                                         OOM1F405.1286   
          DO K=MAX_LARGE_LEVELS,1,-1                                       OOM1F405.1287   
            IF (MLK(I).EQ.1.AND.ZDZ(K).LE.HM(I)) MLK(I)=K+1                OOM1F405.1288   
          ENDDO                                                            OOM1F405.1289   
        ENDDO                                                              OOM1F405.1290   
      ELSE                                                                 OOM1F405.1291   
C For quadratic Large scheme calculate surface friction velocity           OLA3F403.68     
C in cgs units. 10.0 converts from N m^-2 to dynes cm^-2                   OLA3F403.69     
C GM(I,1) is land-sea mask for velocity grid                               OLA3F403.70     
C RHO0 = 1 g cm^-3 used in last line; tau = rho0 u*^2                      OLA3F403.71     
      IF (L_OQLARGE) THEN                                                  OLA3F403.72     
        RHO0=RHO_WATER_SI*0.001  ! CONVERT TO CGS UNITS                    OOM1F405.1388   
        IF (L_OUSTARWME) THEN                                              OOM1F405.1389   
C 1000.0 CONVERTS FROM SI TO CGS                                           OOM1F405.1390   
C USTAR^3 = WME/RHO0                                                       OOM1F405.1391   
          DO I=1,IMT-1                                                     OOM1F405.1392   
            WME_MOM=1000.0*0.25*(WME(I)+WME(I+1)+WMEP(I)+WMEP(I+1))        OOM1F405.1393   
            IF (GM(I,1).GT.0.5) THEN                                       OOM1F405.1394   
            USTAR(I)=(WME_MOM/RHO0)**(1.0/3.0)                             OOM1F405.1395   
            ELSE                                                           OOM1F405.1396   
            USTAR(I)=0.0                                                   OOM1F405.1397   
            ENDIF                                                          OOM1F405.1398   
          END DO                                                           OOM1F405.1399   
          IF (L_OCYCLIC) THEN                                              OOM1F405.1400   
            USTAR(IMT)=USTAR(2)                                            OOM1F405.1401   
            USTAR(IMT-1)=USTAR(1)                                          OOM1F405.1402   
          ELSE                                                             OOM1F405.1403   
            WME_MOM=1000.0*0.5*(WME(IMT)+WMEP(IMT))                        OOM1F405.1404   
            IF (GM(IMT,1).GT.0.5) THEN                                     OOM1F405.1405   
            USTAR(IMT)=(WME_MOM/RHO0)**(1.0/3.0)                           OOM1F405.1406   
            ELSE                                                           OOM1F405.1407   
            USTAR(IMT)=0.0                                                 OOM1F405.1408   
            ENDIF                                                          OOM1F405.1409   
          ENDIF                                                            OOM1F405.1410   
        ELSE                                                               OOM1F405.1411   
      do i=1,imt                                                           OLA3F403.73     
        ustar(i)= sqrt(WSX(i)*WSX(i)+WSY(i)*WSY(i))                        OLA3F403.74     
        ustar(i)= 10.0 * GM(I,1) * ustar(i)                                OLA3F403.75     
        ustar(i)= sqrt(ustar(i))                                           OLA3F403.76     
      end do                                                               OLA3F403.77     
        ENDIF                                                              OOM1F405.1412   
C                                                                          OOM1F405.1413   
C Initialise hm to zero                                                    OLA3F403.79     
      do i=1,imt                                                           OLA0F404.213    
        hm(i)=0.0                                                          OLA3F403.81     
      enddo                                                                OLA3F403.82     
      ENDIF ! L_OQLARGE                                                    OLA0F404.214    
C Initialise Rim to zero                                                   OLA3F403.83     
      do k=1,kmm1                                                          OLA3F403.84     
        do i=1,imt                                                         OLA3F403.85     
          Rim(i,k)=0.0                                                     OLA3F403.86     
        enddo                                                              OLA3F403.87     
      enddo                                                                OLA3F403.88     
      ENDIF                                                                OOM1F405.1292   
C                                                                          VERTCOFC.66     
C --------------------------------------------------------------           VERTCOFC.67     
C Calculate density on TS rows to north and south of UV row                VERTCOFC.68     
C --------------------------------------------------------------           VERTCOFC.69     
C                                                                          VERTCOFC.70     
C                                                                          OOM1F405.987    
       IF(L_OSTATEC)THEN                                                   OOM1F405.988    
C                                                                          OOM1F405.989    
C--------------- USE STATEC TO FIND VALUES FOR RHO                         OOM1F405.990    
      CALL STATEC(TB(1,1,1),TB(1,1,2),RHOSRNA,WORKA,WORKB,1,               OOM1F405.991    
     &            IMT,KM,J,JMT)                                            OOM1F405.992    
      CALL STATEC(TB(1,1,1),TB(1,1,2),RHOSRNB,WORKA,WORKB,2,               OOM1F405.993    
     &            IMT,KM,J,JMT)                                            OOM1F405.994    
      CALL STATEC(TBP(1,1,1),TBP(1,1,2),RHONRNA,WORKA,WORKB,1,             OOM1F405.995    
     &            IMT,KM,J+1,JMT)                                          OOM1F405.996    
      CALL STATEC(TBP(1,1,1),TBP(1,1,2),RHONRNB,WORKA,WORKB,2,             OOM1F405.997    
     &            IMT,KM,J+1,JMT)                                          OOM1F405.998    
C                                                                          OOM1F405.999    
      DO I=1,IMT                                                           OOM1F405.1000   
      RHOSRNA(I,KM+1)=RHOSRNA(I,KM)                                        OOM1F405.1001   
      RHOSRNB(I,KM+1)=RHOSRNB(I,KM)                                        OOM1F405.1002   
      RHONRNA(I,KM+1)=RHONRNA(I,KM)                                        OOM1F405.1003   
      RHONRNB(I,KM+1)=RHONRNB(I,KM)                                        OOM1F405.1004   
      ENDDO                                                                OOM1F405.1005   
C                                                                          OOM1F405.1006   
       ELSE                                                                OOM1F405.1007   
C                                                                          OOM1F405.1008   
C--------------- USE STATED TO FIND VALUES FOR RHO                         OOM1F405.1009   
                                                                           JA121293.275    
      CALL STATED(TB(1,1,1),TB(1,1,2),rhosrn,worka,workb,IMT,KM,J          JA121293.276    
     &,KM                                                                  JA121293.277    
     & , JMT                                                               ORH7F404.46     
     &)                                                                    JA121293.280    
      CALL STATED(TBP(1,1,1),TBP(1,1,2),rhonrn,worka,workb,IMT,KM,J+1      JA121293.281    
     &,KM                                                                  JA121293.282    
     & , JMT                                                               ORH7F404.47     
     &)                                                                    JA121293.285    
                                                                           JA121293.286    
C                                                                          OOM1F405.1010   
       ENDIF   ! L_OSTATEC                                                 OOM1F405.1011   
C                                                                          OOM1F405.1012   
C                                                                          VERTCOFC.73     
C --------------------------------------------------------------           VERTCOFC.74     
C Evaluate Richardson No.                                                  VERTCOFC.75     
C and thereby coefficient of viscosity for mid-levels                      VERTCOFC.76     
C                                                                          VERTCOFC.77     
C Note Ri = (g/rho0)*drhodz/(dudz*dudz + dvdz*dvdz).                       VERTCOFC.78     
C This code assumes rho0=1 (OK in cgs units!)                              VERTCOFC.79     
C --------------------------------------------------------------           VERTCOFC.80     
C                                                                          VERTCOFC.81     
      fxa=0.5                                                              VERTCOFC.82     
      fxb=2.                                                               VERTCOFC.83     
C                                                                          OOM1F405.1013   
      IF (L_OSTATEC) THEN                                                  OOM1F405.1014   
C---------- AT PRESENT HARDWIRE CODING FOR KM EVEN AND STATEC              OOM1F405.1015   
      DO K=1,KM-3,2                                                        OOM1F405.1016   
      DO I=1,IMT-1                                                         OOM1F405.1017   
          RHOZA=((RHONRNA(I,K)-RHONRNA(I,K+1))                             OOM1F405.1018   
     &         +(RHONRNA(I+1,K)-RHONRNA(I+1,K+1))                          OOM1F405.1019   
     &        +( RHOSRNA(I,K)-RHOSRNA(I,K+1))                              OOM1F405.1020   
     &         +(RHOSRNA(I+1,K)-RHOSRNA(I+1,K+1)))                         OOM1F405.1021   
     &         *FXA*DZZ2RQ(I,K+1)                                          OOM1F405.1022   
          RHOZB=((RHONRNB(I,K+1)-RHONRNB(I,K+2))                           OOM1F405.1023   
     &         +(RHONRNB(I+1,K+1)-RHONRNB(I+1,K+2))                        OOM1F405.1024   
     &        +( RHOSRNB(I,K+1)-RHOSRNB(I,K+2))                            OOM1F405.1025   
     &         +(RHOSRNB(I+1,K+1)-RHOSRNB(I+1,K+2)))                       OOM1F405.1026   
     &         *FXA*DZZ2RQ(I,K+2)                                          OOM1F405.1027   
        UZ=(UB(I,K)-UB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1028   
        VZ=(VB(I,K)-VB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1029   
        DVEL2Q(I,K)=UZ*UZ+VZ*VZ                                            OOM1F405.1030   
        RIPQ(I,K)=-GRAV_SI*100.*RHOZA   ! 100. CONVERTS GRAV_SI TO CGS     OOM1F405.1031   
        UZ=(UB(I,K+1)-UB(I,K+2))*FXB*DZZ2RQ(I,K+2)                         OOM1F405.1032   
        VZ=(VB(I,K+1)-VB(I,K+2))*FXB*DZZ2RQ(I,K+2)                         OOM1F405.1033   
        DVEL2Q(I,K+1)=UZ*UZ+VZ*VZ                                          OOM1F405.1034   
        RIPQ(I,K+1)=-GRAV_SI*100.*RHOZB   ! 100. CONVERTS GRAV_SI TO CGS   OOM1F405.1035   
      ENDDO                                                                OOM1F405.1036   
      ENDDO                                                                OOM1F405.1037   
      I=IMT                                                                OOM1F405.1038   
      DO K=1,KM-3,2                                                        OOM1F405.1039   
          RHOZA=((RHONRNA(I,K)-RHONRNA(I,K+1))                             OOM1F405.1040   
     &        +( RHOSRNA(I,K)-RHOSRNA(I,K+1)))                             OOM1F405.1041   
     &         *DZZ2RQ(I,K+1)                                              OOM1F405.1042   
          RHOZB=((RHONRNB(I,K+1)-RHONRNB(I,K))                             OOM1F405.1043   
     &        +( RHOSRNB(I,K+1)-RHOSRNB(I,K)))                             OOM1F405.1044   
     &         *DZZ2RQ(I,K+2)                                              OOM1F405.1045   
        UZ=(UB(I,K)-UB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1046   
        VZ=(VB(I,K)-VB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1047   
        DVEL2Q(I,K)=UZ*UZ+VZ*VZ                                            OOM1F405.1048   
        RIPQ(I,K)=-GRAV_SI*100.*RHOZA   ! 100. CONVERTS GRAV_SI TO CGS     OOM1F405.1049   
        UZ=(UB(I,K+1)-UB(I,K+2))*FXB*DZZ2RQ(I,K+2)                         OOM1F405.1050   
        VZ=(VB(I,K+1)-VB(I,K+2))*FXB*DZZ2RQ(I,K+2)                         OOM1F405.1051   
        DVEL2Q(I,K+1)=UZ*UZ+VZ*VZ                                          OOM1F405.1052   
        RIPQ(I,K+1)=-GRAV_SI*100.*RHOZB   ! 100. CONVERTS GRAV_SI TO CGS   OOM1F405.1053   
      ENDDO                                                                OOM1F405.1054   
C                                                                          OOM1F405.1055   
      K=KMM1                                                               OOM1F405.1056   
      DO I=1,IMT-1                                                         OOM1F405.1057   
          RHOZA=((RHONRNA(I,K)-RHONRNA(I,K+1))                             OOM1F405.1058   
     &         +(RHONRNA(I+1,K)-RHONRNA(I+1,K+1))                          OOM1F405.1059   
     &        +( RHOSRNA(I,K)-RHOSRNA(I,K+1))                              OOM1F405.1060   
     &         +(RHOSRNA(I+1,K)-RHOSRNA(I+1,K+1)))                         OOM1F405.1061   
     &         *FXA*DZZ2RQ(I,K+1)                                          OOM1F405.1062   
        UZ=(UB(I,K)-UB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1063   
        VZ=(VB(I,K)-VB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1064   
        DVEL2Q(I,K)=UZ*UZ+VZ*VZ                                            OOM1F405.1065   
        RIPQ(I,K)=-GRAV_SI*100.*RHOZA   ! 100. CONVERTS GRAV_SI TO CGS     OOM1F405.1066   
      ENDDO                                                                OOM1F405.1067   
      I=IMT                                                                OOM1F405.1068   
          RHOZA=((RHONRNA(I,K)-RHONRNA(I,K+1))                             OOM1F405.1069   
     &        +( RHOSRNA(I,K)-RHOSRNA(I,K+1)))                             OOM1F405.1070   
     &         *DZZ2RQ(I,K+1)                                              OOM1F405.1071   
        UZ=(UB(I,K)-UB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1072   
        VZ=(VB(I,K)-VB(I,K+1))*FXB*DZZ2RQ(I,K+1)                           OOM1F405.1073   
        DVEL2Q(I,K)=UZ*UZ+VZ*VZ                                            OOM1F405.1074   
        RIPQ(I,K)=-GRAV_SI*100.*RHOZA   ! 100. CONVERTS GRAV_SI TO CGS     OOM1F405.1075   
       ELSE                                                                OOM1F405.1076   
      DO 120 K=1,KMM1                                                      VERTCOFC.84     
      DO 120 I=1,IMT                                                       VERTCOFC.85     
        IF (I.NE.IMT) THEN                                                 VERTCOFC.86     
          rhoz=((rhonrn(I,K)-rhonrn(I,K+1))                                VERTCOFC.87     
     &         +(rhonrn(I+1,K)-rhonrn(I+1,K+1))                            VERTCOFC.88     
     &        +( rhosrn(I,K)-rhosrn(I,K+1))                                VERTCOFC.89     
     &         +(rhosrn(I+1,K)-rhosrn(I+1,K+1)))                           VERTCOFC.90     
     &         *fxa*DZZ2RQ(I,K+1)                                          VERTCOFC.91     
        ELSE                                                               VERTCOFC.92     
          rhoz=((rhonrn(I,K)-rhonrn(I,K+1))                                VERTCOFC.93     
     &        +( rhosrn(I,K)-rhosrn(I,K+1)))                               VERTCOFC.94     
     &         *DZZ2RQ(I,K+1)                                              VERTCOFC.95     
        ENDIF                                                              VERTCOFC.96     
        uz=(UB(I,K)-UB(I,K+1))*fxb*DZZ2RQ(I,K+1)                           VERTCOFC.97     
        vz=(VB(I,K)-VB(I,K+1))*fxb*DZZ2RQ(I,K+1)                           VERTCOFC.98     
        dvel2q(I,K)=uz*uz+vz*vz                                            VERTCOFC.99     
        ripq(I,K)=-GRAV_SI*100.*rhoz   ! 100. converts GRAV_SI to cgs      VERTCOFC.100    
  120 CONTINUE                                                             VERTCOFC.101    
       ENDIF           ! L_OSTATEC                                         OOM1F405.1077   
C                                                                          OOM1F405.1078   
C                                                                          VERTCOFC.102    
C Convective adjustment takes care of unstable profiles                    VERTCOFC.103    
C                                                                          VERTCOFC.104    
      DO 150 K=1,KMM1                                                      VERTCOFC.105    
      DO 150 I=1,IMT                                                       VERTCOFC.106    
        IF (ripq(I,K).LT.fx)  ripq(I,K)=fx                                 VERTCOFC.107    
  150 CONTINUE                                                             VERTCOFC.108    
C                                                                          VERTCOFC.109    
C If currents are zero set dvel2q to a small number. This is done          VERTCOFC.110    
C to prevent a divide check in the calculation of gnu                      VERTCOFC.111    
C                                                                          VERTCOFC.112    
      fx=1.E-12                                                            VERTCOFC.113    
      DO 160 K=1,KMM1                                                      VERTCOFC.114    
      DO 160 I=1,IMT                                                       VERTCOFC.115    
        IF (dvel2q(I,K).LT.fx)  dvel2q(I,K)=fx                             VERTCOFC.116    
  160 CONTINUE                                                             VERTCOFC.117    
C                                                                          VERTCOFC.118    
C                                                                          OOM1F405.1079   
       IF(L_OPANDP)THEN                                                    OOM1F405.1080   
C                                                                          OOM1F405.1081   
C Now calculate viscosity. 1.E4 converts external consts. to cgs           VERTCOFC.119    
C Note k's are offset by 1 since gnu(*,k) is the viscostiy at the          VERTCOFC.120    
C TOP of box k. gnu(*,1) is set at the end of the routine.                 VERTCOFC.121    
C                                                                          VERTCOFC.122    
      fx=1.                                                                VERTCOFC.123    
      fxa=5.                                                               VERTCOFC.124    
      DO 170 K=1,KMM1                                                      VERTCOFC.125    
      DO 170 I=1,IMT                                                       VERTCOFC.126    
        IF (GM(I,K+1).GT.0.9) THEN                                         VERTCOFC.127    
          gnu(I,K+1)=FNU0_SI*1.E4*dvel2q(I,K)*dvel2q(I,K)/                 VERTCOFC.128    
     &              ((dvel2q(I,K)+fxa*ripq(I,K))*                          VERTCOFC.129    
     &               (dvel2q(I,K)+fxa*ripq(I,K)))+FNUB_SI*1.E4             VERTCOFC.130    
        ENDIF                                                              VERTCOFC.131    
  170 CONTINUE                                                             VERTCOFC.132    
C                                                                          OOM1F405.1082   
       ENDIF                                                               OOM1F405.1083   
C                                                                          OOM1F405.1084   
                                                                           OLA3F403.89     
C Calculate Richardson number                                              OLA3F403.90     
      do K=1,KMM1                                                          OLA3F403.91     
        do I=1,IMT                                                         OLA3F403.92     
          Rim(I,K)=ripq(I,K)/dvel2q(I,K)                                   OLA3F403.93     
        end do                                                             OLA3F403.94     
      end do                                                               OLA3F403.95     
C                                                                          OOM1F405.1085   
       IF(.NOT.L_OPANDP)THEN                                               OOM1F405.1086   
C                                                                          OOM1F405.1087   
C CALCULATE GNU - MOMENTUM DIFFUSIVITY USING PETERS SCHEME.                OOM1F405.1088   
C Modify to limit dvel2q setting gnu if below a certain level.             OOM1F405.1089   
C If dvel2q too small, then regardless of ripq, set gnu to its             OOM1F405.1090   
C background value there.                                                  OOM1F405.1091   
C GJR July 1998                                                            OOM1F405.1092   
C                                                                          OOM1F405.1093   
        DO K=1,KMM1                                                        OOM1F405.1094   
        DO I=1,IMT                                                         OOM1F405.1095   
          IF (GM(I,K+1).GT.0.9) THEN                                       OOM1F405.1096   
           IF (DVEL2Q(I,K).GT.1.E-6)THEN                                   OOM1F405.1097   
            IF (RIM(I,K).LT.RICRITM100)                                    OOM1F405.1098   
     &        GNU(I,K+1)=100.                                              OOM1F405.1099   
     &                  +FNUB_SI*1.E4                                      OOM1F405.1100   
            IF (RIM(I,K).LT.RICRITM.AND.RIM(I,K).GT.RICRITM100)            OOM1F405.1101   
     &        GNU(I,K+1)=5.6E-4/RIM(I,K)**8.2                              OOM1F405.1102   
     &                  +FNUB_SI*1.E4                                      OOM1F405.1103   
            IF (RIM(I,K).GE.RICRITM)                                       OOM1F405.1104   
     &        GNU(I,K+1)=5.0/((1+5*RIM(I,K))**1.5)                         OOM1F405.1105   
     &                  +FNUB_SI*1.E4                                      OOM1F405.1106   
           ELSE                                                            OOM1F405.1107   
           GNU(I,K+1)=FNUB_SI*1.E4                                         OOM1F405.1108   
           ENDIF                                                           OOM1F405.1109   
          ENDIF                                                            OOM1F405.1110   
        ENDDO                                                              OOM1F405.1111   
        ENDDO                                                              OOM1F405.1112   
C                                                                          OOM1F405.1113   
       ENDIF                                                               OOM1F405.1114   
C                                                                          OOM1F405.1115   
                                                                           OLA3F403.96     
      IF (L_OFULARGE) THEN                                                 OOM1F405.1293   
C CALCULATE VERTICAL DIFFUSIVITY, GNU, AT HM                               OOM1F405.1294   
        DO I=1,IMT                                                         OOM1F405.1295   
          IF (GM(I,1).GT.0.5.AND.HM(I).GE.ZDZ(1)) THEN                     OOM1F405.1296   
            ZDZ_AT_MLKM1=0.0                                               OOM1F405.1297   
            GNUOFMLK=0.0                                                   OOM1F405.1298   
            IF (MLK(I).GT.1) THEN                                          OOM1F405.1299   
              ZDZ_AT_MLKM1=ZDZ(MLK(I)-1)                                   OOM1F405.1300   
              GNUOFMLK=GNU(I,MLK(I))                                       OOM1F405.1301   
            ENDIF                                                          OOM1F405.1302   
            COEFF=(HM(I)-ZDZ_AT_MLKM1)/DZ(MLK(I))                          OOM1F405.1303   
            GNUATHM=(1-COEFF)*GNUOFMLK+COEFF*GNU(I,MLK(I)+1)               OOM1F405.1304   
C CALCULATE D(GNU)/DZ AT HM AND RESTRICT TO MINIMUM OF 0.0 AS OTHERWISE    OOM1F405.1305   
C MAY OBTAIN POSSIBLE NEGATIVE VALUES OF GNU FROM LARGE SCHEME DUE         OOM1F405.1306   
C TO FITTING OF CUBIC FUNCTION.                                            OOM1F405.1307   
            GNUZ(1)=(GNUOFMLK-GNU(I,MLK(I)+1))/DZ(MLK(I))                  OOM1F405.1308   
            IF (GNUZ(1).GT.0.0) THEN                                       OOM1F405.1309   
              IF (COEFF.LE.0.5) GNUZATHM=GNUZ(1)                           OOM1F405.1310   
              IF (COEFF.GT.0.5) THEN                                       OOM1F405.1311   
                GNUZ(2)=(GNU(I,MLK(I)+1)-GNU(I,MLK(I)+2))/DZ(MLK(I)+1)     OOM1F405.1312   
                COEFF=(HM(I)-ZDZZ(MLK(I)))/DZZ(MLK(I)+1)                   OOM1F405.1313   
                GNUZATHM=(1-COEFF)*GNUZ(1)+COEFF*GNUZ(2)                   OOM1F405.1314   
                GNUZATHM=MAX(GNUZATHM,0.0)                                 OOM1F405.1315   
              ENDIF                                                        OOM1F405.1316   
            ELSE                                                           OOM1F405.1317   
              GNUZATHM=0.0                                                 OOM1F405.1318   
            ENDIF                                                          OOM1F405.1319   
C CALCULATE DEPTH DEPENDENT TURBULENT VELOCITY SCALE AT HM,                OOM1F405.1320   
C W1M, (LARGE EQN 13 WITH SIGMA=1) AND ITS DERIVATIVE WRT                  OOM1F405.1321   
C SIGMA, DW1M.                                                             OOM1F405.1322   
C                                                                          OOM1F405.1323   
              IF (L_M(I).LT.0.0)THEN                                       OOM1F405.1324   
C                                                                          OOM1F405.1325   
            STABIL_PARAM=EPSILON*HM(I)/L_M(I)                              OOM1F405.1326   
            W1M=VKMAN*USTAR(I)/FLUX_PROFILEM(STABIL_PARAM)                 OOM1F405.1327   
            DW1M=0.0                                                       OOM1F405.1328   
C                                                                          OOM1F405.1329   
              ELSE                                                         OOM1F405.1330   
            STABIL_PARAM=HM(I)/L_M(I)                                      OOM1F405.1331   
            W1M=VKMAN*USTAR(I)/FLUX_PROFILEM(STABIL_PARAM)                 OOM1F405.1332   
              IF (0.0.LE.STABIL_PARAM) THEN                                OOM1F405.1333   
              DW1M = -5.0*VKMAN*USTAR(I)*STABIL_PARAM                      OOM1F405.1334   
     &                     /((1.0+5.0*STABIL_PARAM)**2)                    OOM1F405.1335   
              ELSE                                                         OOM1F405.1336   
              IF (-0.2.LE.STABIL_PARAM) THEN                               OOM1F405.1337   
                DW1M = -4.0*VKMAN*USTAR(I)*STABIL_PARAM                    OOM1F405.1338   
     &                    /((1.0-16.0*STABIL_PARAM)**0.75)                 OOM1F405.1339   
              ELSE                                                         OOM1F405.1340   
                DW1M = - 8.38/3.0 *VKMAN*USTAR(I)*STABIL_PARAM             OOM1F405.1341   
     &                    /((1.26-8.38*STABIL_PARAM)**(2.0/3.0))           OOM1F405.1342   
              ENDIF                                                        OOM1F405.1343   
              ENDIF                                                        OOM1F405.1344   
C                                                                          OOM1F405.1345   
              ENDIF      ! L_M(I).LT.0.0                                   OOM1F405.1346   
C                                                                          OOM1F405.1347   
C CALCULATE, WHEN SIGMA=Z/H=1, THE SHAPE FUNCTION AND ITS DERIVATIVE       OOM1F405.1348   
C WRT SIGMA (LARGE EQN 18)                                                 OOM1F405.1349   
C N.B. G1=G(1)=SHAPE FUNCTION WHEN SIGMA=1                                 OOM1F405.1350   
C      DG1= DG(1)/DSIGMA                                                   OOM1F405.1351   
            IF (ABS(HM(I)).LT.1.0E-12.OR.ABS(W1M).LT.1.0E-12) THEN         OOM1F405.1352   
              IF (W1M.GE.0.) W1M=1.0E-12                                   OOM1F405.1353   
              IF (W1M.LT.0.) W1M=-1.0E-12                                  OOM1F405.1354   
            ENDIF                                                          OOM1F405.1355   
            G1 = GNUATHM/(HM(I)*W1M)                                       OOM1F405.1356   
            DG1 = - GNUZATHM/W1M - (GNUATHM*DW1M)/(HM(I)*W1M*W1M)          OOM1F405.1357   
C CALCULATE COEFFICIENTS OF SHAPE FUNCTION (LARGE EQN 17)                  OOM1F405.1358   
            A(1)=1.                                                        OOM1F405.1359   
            A(2)=-2.0+3.0*G1-DG1                                           OOM1F405.1360   
            A(3)=1.0-2.0*G1+DG1                                            OOM1F405.1361   
C CALCULATE WM(K) - DEPTH DEPENDENT TURBULENT VELOCITY SCALE PROFILE       OOM1F405.1362   
C AT TOP OF LEVEL K (LARGE, EQN 13)                                        OOM1F405.1363   
            DO K=2,MLK(I)                                                  OOM1F405.1364   
              STABIL_PARAM=ZDZ(K-1)/L_M(I)                                 OOM1F405.1365   
              SIGMA=ZDZ(K-1)/HM(I)                                         OOM1F405.1366   
              IF (STABIL_PARAM.LT.0.0.AND.SIGMA.GT.EPSILON)THEN            OOM1F405.1367   
              STABIL_PARAM=EPSILON*HM(I)/L_M(I)                            OOM1F405.1368   
              ENDIF                                                        OOM1F405.1369   
              WM(K)=VKMAN*USTAR(I)/FLUX_PROFILEM(STABIL_PARAM)             OOM1F405.1370   
            ENDDO                                                          OOM1F405.1371   
C CALCULATE SHAPE FUNCTION G THEN VERTICAL DIFFUSION COEFF PROFILE,        OOM1F405.1372   
C GNU(K) AT TOP OF LEVEL K IN THE MIXED LAYER (LARGE EQNS 11 AND 10)       OOM1F405.1373   
            GNU(I,1)=0.                                                    OOM1F405.1374   
            DO K=2,MLK(I)                                                  OOM1F405.1375   
              SIGMA=ZDZ(K-1)/HM(I)                                         OOM1F405.1376   
              G=SIGMA*(A(1)+SIGMA*(A(2)+A(3)*SIGMA))                       OOM1F405.1377   
              GNU(I,K)=HM(I)*WM(K)*G                                       OOM1F405.1378   
            ENDDO                                                          OOM1F405.1379   
          ELSE                                                             OOM1F405.1380   
            DO K=1,KM                                                      OOM1F405.1381   
              GNU(I,K)=0.0                                                 OOM1F405.1382   
            ENDDO                                                          OOM1F405.1383   
          ENDIF                                                            OOM1F405.1384   
        ENDDO                                                              OOM1F405.1385   
      ELSE                                                                 OOM1F405.1386   
      IF (L_OQLARGE) THEN                                                  OLA3F403.97     
C Simple quadratic form of Large scheme -                                  OLA3F403.98     
C    applies - neutral Large in 'mixed layer' - defined to be where        OLA3F403.99     
C              Richardson number is less than 0.3.                         OLA3F403.100    
C            - normal model Packonowski and Philander below mixed layer    OLA3F403.101    
C            - functions specified so that vertical diffusion coeff is     OLA3F403.102    
C              continuous at z=h                                           OLA3F403.103    
C            - Constants chosen to give a quadratic form for G(z/h)        OLA3F403.104    
C  Reference:                                                              OLA3F403.105    
C   W.G.Large et al 1994, Oceanic Vertical Mixing : A review and a         OLA3F403.106    
C    model with a nonlocal boundary layer parametrisation, Rev Geophys,    OLA3F403.107    
C    32, 363-403.                                                          OLA3F403.108    
C  This scheme is a simplified neutral case of Large                       OLA3F403.109    
C  Vertical diffusion coeff,                                               OLA3F403.110    
C         K(z)=h*kk*ustar*G(z/h)                                           OLA3F403.111    
C            where z=depth (positive downwards)                            OLA3F403.112    
C                  h=mixed layer depth                                     OLA3F403.113    
C                  kk=0.4 , von Karman's constant                          OLA0F404.215    
C                  ustar= surface friction velocity                        OLA3F403.115    
C                       = sqrt(wsx**2+wsy**2)/rho_w                        OLA3F403.116    
C         G(z/h)=z/h+a2*(z/h)**2                                           OLA3F403.117    
C            where a2 = Kath/(kk*ustar*h) - 1                              OLA3F403.118    
C                  Kath=K(Ri) at z=h                                       OLA3F403.119    
C To avoid problems where ustar is zero this is actually implemented as    OLA3F403.120    
C           K(z)=h*kk*(z/h)*ustar*b2*(z/h)**2                              OLA3F403.121    
C           where b2 = Kath/(kk*h) - ustar                                 OLA3F403.122    
C Scheme - for both momentum and tracers                                   OLA3F403.123    
C  1. Calculate gnu as usual                                               OLA3F403.124    
C  2. Find 'mixed layer depth' for Large scheme, h                         OLA3F403.125    
C  3. For depths shallower than h, recalculate gnu using Large.            OLA3F403.126    
C                                                                          OLA3F403.127    
      do i=1,imt                                                           OLA0F404.216    
C Find 'mixed layer depth', hm, for quadratic Large scheme defined as      OLA0F404.217    
C min(depth where the critical Richardson no reached,max_qLarge_depth)     OLA0F404.218    
        IF (GM(I,1).GT.0.9) THEN                                           OLA0F404.219    
        do k=1,km                                                          OLA0F404.220    
          l=k                                                              OLA0F404.221    
          if (Rim(I,K).ge.crit_Ri.or.zdz(k).gt.max_qLarge_depth*100.       OLA0F404.222    
     &       .or.GM(i,min(k+1,km)).lt.0.5)  goto 10                        OLA0F404.223    
        enddo                                                              OLA0F404.224    
  10    continue                                                           OLA0F404.225    
        if (l.gt.1) then                                                   OLA0F404.226    
          if (Rim(i,l).ge.crit_Ri) then                                    OLA0F404.227    
            if (Rim(i,l).ne.Rim(i,l-1)) then                               OLA0F404.228    
              hm(i)=zdz(l-1) + dz(l)                                       OLA0F404.229    
     &               *(crit_Ri-Rim(i,l-1))/(Rim(i,l)-Rim(i,l-1))           OLA0F404.230    
              hm(i)=min(hm(i),max_qLarge_depth*100.)                       OLA0F404.231    
            else                                                           OLA0F404.232    
              hm(i)=zdz(l-1)                                               OLA0F404.233    
            endif                                                          OLA0F404.234    
          else                                                             OLA0F404.235    
            hm(i)=min(zdz(l),max_qLarge_depth*100.)                        OLA0F404.236    
          endif                                                            OLA0F404.237    
C Calculate altered gnu i.e. applying quadratic Large where depth < hm     OLA0F404.238    
          Kath=gnu(i,l-1) + (gnu(i,l)-gnu(i,l-1))                          OLA0F404.239    
     &                         *(hm(i)-zdz(l-1))/dz(l)                     OLA0F404.240    
          b2 = Kath/(vkman*hm(i)) - ustar(i)                               OLA0F404.241    
          do k=1,l-1                                                       OLA0F404.242    
            sigma=zdz(k)/hm(i)                                             OLA0F404.243    
            gnu(i,k+1)=hm(i)*vkman*sigma*(ustar(i)+b2*sigma)               OLA0F404.244    
          end do                                                           OLA0F404.245    
        endif                                                              OLA0F404.246    
        ENDIF                                                              OLA0F404.247    
      end do                                                               OLA3F403.152    
      ELSE                                                                 OLA3F403.153    
C The following occurs if the quadratic Large scheme is not chosen.        OLA3F403.154    
C                                                                          VERTCOFC.133    
C Reset gnu if value is greater than the stability limit.                  VERTCOFC.134    
C 1.E4 converts STABLM_SI to cgs                                           VERTCOFC.135    
C                                                                          VERTCOFC.136    
      DO 180 K=2,KM                                                        VERTCOFC.137    
      DO 180 I=1,IMT                                                       VERTCOFC.138    
        IF (gnu(I,K).GT.STABLM_SI*1.E4)  gnu(I,K)=STABLM_SI*1.E4           VERTCOFC.139    
  180 CONTINUE                                                             VERTCOFC.140    
      ENDIF                                                                OLA3F403.155    
C                                                                          VERTCOFC.141    
C Reset mixing coeff. between first two levels to a min of GNUMINC_SI      VERTCOFC.142    
C The surface value gnu(*,1) is also set to GNUMINC_SI here.               VERTCOFC.143    
C                                                                          VERTCOFC.144    
      fx=GNUMINC_SI*1.E4   ! 1.E4 converts to cgs                          VERTCOFC.145    
      DO 190 I=1,IMT                                                       VERTCOFC.146    
        IF (gnu(I,2).LT.fx)  gnu(I,2)=fx*GM(I,2)                           VERTCOFC.147    
        gnu(I,1)=fx*GM(I,1)                                                VERTCOFC.148    
  190 CONTINUE                                                             VERTCOFC.149    
C                                                                          VERTCOFC.150    
      ENDIF                                                                OOM1F405.1387   
C Finally, multiply by the land-sea mask for safety.                       VERTCOFC.151    
C                                                                          VERTCOFC.152    
      DO 200 K=1,KM                                                        VERTCOFC.153    
        DO 210 I=1,IMT                                                     VERTCOFC.154    
          gnu(I,K)=gnu(I,K)*GM(I,K)                                        VERTCOFC.155    
  210   CONTINUE                                                           VERTCOFC.156    
  200 CONTINUE                                                             VERTCOFC.157    
C                                                                          VERTCOFC.158    
      RETURN                                                               VERTCOFC.159    
      END                                                                  VERTCOFC.160    
*ENDIF                                                                     @DYALLOC.4686