*IF DEF,OCEAN                                                              LARGE.2      
C ******************************COPYRIGHT******************************    LARGE.3      
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    LARGE.4      
C                                                                          LARGE.5      
C Use, duplication or disclosure of this code is subject to the            LARGE.6      
C restrictions as set forth in the contract.                               LARGE.7      
C                                                                          LARGE.8      
C                Meteorological Office                                     LARGE.9      
C                London Road                                               LARGE.10     
C                BRACKNELL                                                 LARGE.11     
C                Berkshire UK                                              LARGE.12     
C                RG12 2SZ                                                  LARGE.13     
C                                                                          LARGE.14     
C If no contract has been raised with this copy of the code, the use,      LARGE.15     
C duplication or disclosure of it is strictly prohibited.  Permission      LARGE.16     
C to do so must first be obtained in writing from the Head of Numerical    LARGE.17     
C Modelling at the above address.                                          LARGE.18     
C ******************************COPYRIGHT******************************    LARGE.19     
C                                                                          LARGE.20     
CLL                                                                        LARGE.21     
CLL SEVERAL ROUTINES REQUIRED BY THE FULL LARGE SCHEME                     LARGE.22     
CLL                                                                        LARGE.23     
CLL   Author: Carolyn Roberts                                              LARGE.24     
CLL                                                                        LARGE.25     
CLL Description :                                                          LARGE.26     
CLL                                                                        LARGE.27     
CLL A. FUNCTION CALCULATING THE SOLAR IRRADIANCE AT DEPTH D                LARGE.28     
CLL    IN THE FORM                                                         LARGE.29     
CLL       I(D)=I0 * SUM (R(I) EXP (-D/MU(I))  (SUM FROM I=1 TO N)          LARGE.30     
CLL       WHERE I(D)=SOLAR IRRADIANCE AT DEPTH D                           LARGE.31     
CLL             I0=SOLAR IRRADIANCE AT SURFACE                             LARGE.32     
CLL             N=NO OF BANDS SOLAR SPECTRUM DIVIDED INTO                  LARGE.33     
CLL             R(I) = FRACTION OF TOTAL RADIATION IN BAND I               LARGE.34     
CLL             MU(I) = RECIPROCAL OF BAND I'S ABSORPTION COEFF            LARGE.35     
CLL                                                                        LARGE.36     
CLL                                                                        LARGE.37     
CLL B. FUNCTIONS CALCULATING THE NONDIMENSIONAL FLUX PROFILE FOR           LARGE.38     
CLL    MOMENTUM AND TRACERS AS FUNCTIONS OF THE STABILITY PARAMETER        LARGE.39     
CLL    AS DEFINED IN APPENDIX B OF LARGE                                   LARGE.40     
CLL    1. FOR MOMENTUM  FLUX_PROFILEM(STABIL_PARAM)                        LARGE.41     
CLL       FLUX_PROFILEM = 1 + 5*STABIL_PARAM                               LARGE.42     
CLL                                  FOR 0.0 LE STABIL_PARAM               LARGE.43     
CLL                     = ( 1 - 16*STABIL_PARAM )**(-1/4)                  LARGE.44     
CLL                                  FOR -0.2 LE STABIL_PARAM LT 0.0       LARGE.45     
CLL                     = (1.26 - 8.38*STABIL_PARAM )**(-1/3)              LARGE.46     
CLL                                  FOR STABIL_PARAM LT -0.2              LARGE.47     
CLL    2. FOR TRACERS  FLUX_PROFILET(STABIL_PARAM)                         LARGE.48     
CLL       FLUX_PROFILET = 1 + 5*STABIL_PARAM                               LARGE.49     
CLL                                  FOR 0.0 LE STABIL_PARAM               LARGE.50     
CLL                     = ( 1 - 16*STABIL_PARAM )**(-1/2)                  LARGE.51     
CLL                                  FOR -1.0 LE STABIL_PARAM LT 0.0       LARGE.52     
CLL                     = (-28.86 - 98.96*STABIL_PARAM )**(-1/3)           LARGE.53     
CLL                                  FOR STABIL_PARAM LT -1.0              LARGE.54     
CLL                                                                        LARGE.55     
CLL C. SUBROUTINE CALCULATING THE MIXED LAYER DEPTH BASED ON FINDING       LARGE.56     
CLL    THE DEPTH WHERE THE RICHARDSON NO EXCEEDS A CRITICAL VALUE,         LARGE.57     
CLL    CRIT_RI_FL, USING GRADIENT RICHARDSON NUMBER (CALC_MLD_LARGEG).     LARGE.58     
CLL                                                                        LARGE.59     
CLL D. SUBROUTINE CALCULATING THE MIXED LAYER DEPTH BASED ON FINDING       LARGE.60     
CLL    THE DEPTH WHERE THE RICHARDSON NO EXCEEDS A CRITICAL VALUE,         LARGE.61     
CLL    CRIT_RI_FL, USING BULK RICHARDSON NUMBER (CALC_MLD_LARGEB).         LARGE.62     
CLL                                                                        LARGE.63     
CLL E. FUNCTION CALCULATING THE LOCAL GRADIENT RICHARDSON NO               LARGE.64     
CLL    GRADIENT_RICHSN((DRHO,RHOBAR,DU,DV,GRAV)                            LARGE.65     
CLL      GRADIENT_RICHSN=-(GRAV*DRHO)/MAX(RHOBAR*(DU*DU+DV*DV,FX)          LARGE.66     
CLL                   WHERE FX=1.E-12                                      LARGE.67     
CLL      I.E. RI= -G*DRHO/DZ / (AVERAGE RHO)*(DU/DZ^2+DV/DZ^2)             LARGE.68     
CLL                                                                        LARGE.69     
CLL   External documentation:                                              LARGE.70     
CLL                                                                        LARGE.71     
CLL   Implemented at UM vn 4.5 26 June 1998                                LARGE.72     
CLL                                                                        LARGE.73     
CLL   Modification History  :                                              LARGE.74     
CLL   Version   Date     Comment & Name                                    LARGE.75     
CLL   ------- --------  --------------------------------------------       LARGE.76     
CLL                                                                        LARGE.77     
CLL   Subroutine dependencies.                                             LARGE.78     
CLL                                                                        LARGE.79     
CLL   SOL_IRRA_1B, FLUX_PROFILEM, and FLUX_PROFILET called by VERTCOFT     LARGE.80     
CLL   and VERTCOFC.                                                        LARGE.81     
CLL   CALC_MLD_LARGEG (or CALC_MLD_LARGEB) called by ROWCALC, and          LARGE.82     
CLL   CALCESAV or CALCDIFF.                                                LARGE.83     
CLL                                                                        LARGE.84     
CLLEND------------------------------------------------------------------   LARGE.85     
C                                                                          LARGE.86     

      REAL FUNCTION SOL_IRRA_1B(I0,D)                                       3LARGE.87     
      IMPLICIT NONE                                                        LARGE.88     
C                                                                          LARGE.89     
      REAL                                                                 LARGE.90     
     &  I0     ! IN SOLAR IRRADIANCE AT SURFACE                            LARGE.91     
     &, D      ! IN DEPTH TO CALCULATE SOLAR IRRADIANCE AT IN CM           LARGE.92     
      INTEGER                                                              LARGE.93     
     &  N      ! NO OF BANDS SOLAR SPECTRUM DIVIDED INTO                   LARGE.94     
      PARAMETER(N=2)                                                       LARGE.95     
      REAL                                                                 LARGE.96     
     &  R(N)   ! FRACTION OF TOTAL RADIATION IN BAND I                     LARGE.97     
     &, MUR(N) ! ABSORPTION COEFF FOR BAND I IN CM^-1                      LARGE.98     
C                                                                          LARGE.99     
*CALL UMSCALAR                                                             LARGE.100    
C                                                                          LARGE.101    
C      R(1)=RSOL AND R(2)=1.0-R(1)                                         LARGE.102    
C THE VALUES BELOW OF R(I) ARE THOSE USED IN THE MIXED LAYER CODE          LARGE.103    
      R(1)=RSOL                                                            LARGE.104    
      R(2)=1.0 - RSOL                                                      LARGE.105    
      MUR(1)=ETA1_SI*1.E-2            ! CONVERSION TO CM^-1                LARGE.106    
      MUR(2)=ETA2_SI*1.E-2            ! CONVERSION TO CM^-1                LARGE.107    
C                                                                          LARGE.108    
      SOL_IRRA_1B=I0*(R(1)*EXP(-D*MUR(1))+R(2)*EXP(-D*MUR(2)))             LARGE.109    
C                                                                          LARGE.110    
      RETURN                                                               LARGE.111    
      END                                                                  LARGE.112    
C                                                                          LARGE.113    

      REAL FUNCTION FLUX_PROFILEM(STABIL_PARAM)                             3LARGE.114    
      IMPLICIT NONE                                                        LARGE.115    
C                                                                          LARGE.116    
      REAL                                                                 LARGE.117    
     &  STABIL_PARAM  ! IN STABILITY PARAMETER                             LARGE.118    
      IF (0.0.LE.STABIL_PARAM) THEN                                        LARGE.119    
        FLUX_PROFILEM = 1.0 + 5.0*STABIL_PARAM                             LARGE.120    
      ELSE                                                                 LARGE.121    
        IF (-0.2.LE.STABIL_PARAM) THEN                                     LARGE.122    
          FLUX_PROFILEM = ( 1.0 - 16.0*STABIL_PARAM )**(-0.25)             LARGE.123    
        ELSE                                                               LARGE.124    
          FLUX_PROFILEM = (1.26 - 8.38*STABIL_PARAM )**(-1.0/3.0)          LARGE.125    
        ENDIF                                                              LARGE.126    
      ENDIF                                                                LARGE.127    
      RETURN                                                               LARGE.128    
      END                                                                  LARGE.129    
C                                                                          LARGE.130    

      REAL FUNCTION FLUX_PROFILET(STABIL_PARAM)                             5LARGE.131    
      IMPLICIT NONE                                                        LARGE.132    
C                                                                          LARGE.133    
      REAL                                                                 LARGE.134    
     &  STABIL_PARAM  ! IN STABILITY PARAMETER                             LARGE.135    
      IF (0.0.LE.STABIL_PARAM) THEN                                        LARGE.136    
        FLUX_PROFILET = 1.0 + 5.0*STABIL_PARAM                             LARGE.137    
      ELSE                                                                 LARGE.138    
        IF (-1.0.LE.STABIL_PARAM) THEN                                     LARGE.139    
          FLUX_PROFILET = ( 1.0 - 16.0*STABIL_PARAM )**(-0.5)              LARGE.140    
        ELSE                                                               LARGE.141    
          FLUX_PROFILET = (-28.86 - 98.96*STABIL_PARAM )**(-1.0/3.0)       LARGE.142    
        ENDIF                                                              LARGE.143    
      ENDIF                                                                LARGE.144    
      RETURN                                                               LARGE.145    
      END                                                                  LARGE.146    
C                                                                          LARGE.147    

      SUBROUTINE CALC_MLD_LARGEG(J,KM,IMT                                   4,2LARGE.148    
     &, RHO_WATER_SI,GRAV_SI,CRIT_RI_FL,NO_LAYERS_IN_LEV                   LARGE.149    
     &, ZDZ,DZ,DZZ,L_OCYCLIC                                               LARGE.150    
     &, UB,VB,UBM,VBM                                                      LARGE.151    
     &, FM,RHO,MLD_LARGE,RI                                                LARGE.152    
     &  )                                                                  LARGE.153    
CLL CALCULATE THE MIXED LAYER DEPTH AS THE DEPTH WHERE THE RICHARDSON      LARGE.154    
CLL NUMBER EXCEEDS CRIT_RI_FL                                              LARGE.155    
      IMPLICIT NONE                                                        LARGE.156    
C DEFINE ARGUMENT LIST VARIABLES                                           LARGE.157    
      INTEGER                                                              LARGE.158    
     &  KM,IMT,I,J,K,M                                                     LARGE.159    
      REAL                                                                 LARGE.160    
     &  RHO_WATER_SI   ! IN DENSITY OF SEA WATER = 1026. KG/M^3            LARGE.161    
     &, UB(IMT,KM),VB(IMT,KM)   ! IN HORIZ VELOCITY IN CM/S, ROW J         LARGE.162    
     &, UBM(IMT,KM),VBM(IMT,KM) ! IN HORIZ VELOCITY IN CM/S, ROW J-1       LARGE.163    
     &, FM(IMT,KM)     ! IN LAND/SEA MASK ON TRACER POINTS                 LARGE.164    
     &, GRAV_SI        ! IN ACCELERATION DUE TO GRAVITY (M/S^2)            LARGE.165    
     &, ZDZ(KM)        ! IN DEPTH OF BOTTOM OF LAYER (CM)                  LARGE.166    
     &, DZZ(KM+1)      ! IN DISTANCE BETWEEN MIDPTS OF LEVELS (CM)         LARGE.167    
     &, DZ(KM)         ! IN DEPTH OF LEVEL K (CM)                          LARGE.168    
     &, CRIT_RI_FL      ! IN CRITICAL RICHARDSON NO TO FIND MLD            LARGE.169    
     &, RHO(IMT,KM)    ! IN DENSITY IN G/CM^3 ?????????? UNITS             LARGE.170    
     &, MLD_LARGE(IMT) ! OUT MIXED LAYER DEPTH (CM)                        LARGE.171    
     &, RI(IMT,KM)     ! OUT GRADIENT RICHARDSON NO AT BOTTOM OF BOX       LARGE.172    
      INTEGER                                                              LARGE.173    
     &  NO_LAYERS_IN_LEV  ! IN NO OF LEVELS WITHIN A LAYER CONSIDERED TO   LARGE.174    
                          ! CALCULATE MLD_LARGE                            LARGE.175    
      LOGICAL                                                              LARGE.176    
     &  L_OCYCLIC      ! IN LOGICAL FOR CYCLIC CONDITIONS                  LARGE.177    
C DEFINE LOCAL VARIABLES                                                   LARGE.178    
      REAL                                                                 LARGE.179    
     &  RHO0 ! DENSITY OF SEA WATER = 1.026 G/CM^3                         LARGE.180    
     &, WSXT(IMT),WSYT(IMT)     ! WIND STRESS ON TRACER GRID               LARGE.181    
     &, UBT(IMT,KM),VBT(IMT,KM) ! HORIZONTAL VELOCITY ON TRACER GRID       LARGE.182    
     &, DUTOP(KM+1)    ! DU/DZ AT TOP OF GRIDBOX AT TRACER POINTS          LARGE.183    
     &, DVTOP(KM+1)    ! DV/DZ AT TOP OF GRIDBOX AT TRACER POINTS          LARGE.184    
     &, DRHOTOP(KM+1)  ! DRHO/DZ AT TOP OF GRIDBOX AT TRACER POINTS        LARGE.185    
     &, GRAV           ! GRAV_SI IN CGS UNITS                              LARGE.186    
     &, DU,DV,DRHO     ! DU/DZ,DV/DZ,DRHO/DZ ON LAYERS NEAR MLD            LARGE.187    
     &, RIC            ! RICHARDSON NO ON LEVEL CONSIDERED                 LARGE.188    
      INTEGER                                                              LARGE.189    
     &  N_LEVELS(IMT)  ! NO OF VERTICAL SEA LEVELS AT A GRIDPOINT          LARGE.190    
     &, CRIT_LEVEL     ! LEVEL WITHIN WHICH THE MLD_LARGE IS CONTAINED     LARGE.191    
C DEFINE FUNCTIONS                                                         LARGE.192    
      REAL GRADIENT_RICHSN                                                 LARGE.193    
      INTEGER L1                                                           LARGE.194    
                                                                           LARGE.195    
C SET CONSTANTS REQUIRED BELOW                                             LARGE.196    
      RHO0=RHO_WATER_SI*0.001  ! CONVERT TO CGS UNITS                      LARGE.197    
      GRAV=GRAV_SI*100.        ! CONVERT TO CGS UNITS                      LARGE.198    
                                                                           LARGE.199    
C CALCULATE NO OF SEA LEVELS                                               LARGE.200    
      DO I=1,IMT                                                           LARGE.201    
        N_LEVELS(I)=0                                                      LARGE.202    
        DO K=1,KM                                                          LARGE.203    
          IF (FM(I,K).GT.0.5) THEN                                         LARGE.204    
            N_LEVELS(I)=N_LEVELS(I)+1                                      LARGE.205    
          ELSE                                                             LARGE.206    
            GOTO 30                                                        LARGE.207    
          ENDIF                                                            LARGE.208    
        ENDDO                                                              LARGE.209    
 30     CONTINUE                                                           LARGE.210    
      ENDDO                                                                LARGE.211    
C NEED CURRENTS ON TRACER POINTS                                           LARGE.212    
      DO I=2,IMT                                                           LARGE.213    
        DO K=1,KM                                                          LARGE.214    
          UBT(I,K)=0.25*(UB(I-1,K)+UB(I,K)+UBM(I-1,K)+UBM(I,K))            LARGE.215    
          VBT(I,K)=0.25*(VB(I-1,K)+VB(I,K)+VBM(I-1,K)+VBM(I,K))            LARGE.216    
        ENDDO                                                              LARGE.217    
      ENDDO                                                                LARGE.218    
      IF (L_OCYCLIC) THEN                                                  LARGE.219    
        DO K=1,KM                                                          LARGE.220    
          UBT(1,K)=UBT(IMT-1,K)                                            LARGE.221    
          VBT(1,K)=VBT(IMT-1,K)                                            LARGE.222    
        ENDDO                                                              LARGE.223    
      ELSE                                                                 LARGE.224    
        DO K=1,KM                                                          LARGE.225    
          UBT(1,K)=0.5*(UB(1,K)+UBM(1,K))                                  LARGE.226    
          VBT(1,K)=0.5*(VB(1,K)+VBM(1,K))                                  LARGE.227    
        ENDDO                                                              LARGE.228    
      ENDIF                                                                LARGE.229    
C CALCULATE THE MIXED LAYER DEPTH                                          LARGE.230    
      DO I=1,IMT                                                           LARGE.231    
        MLD_LARGE(I)=0.0                                                   LARGE.232    
        DO K=1,KM                                                          LARGE.233    
          RI(I,K)=50000.                                                   LARGE.234    
        ENDDO                                                              LARGE.235    
        IF (FM(I,1).GT.0.5) THEN                                           LARGE.236    
          L1=0                                                             LARGE.237    
C CALCULATE RI AT THE TOP OF EACH LEVEL UNTIL THE CRITICAL RI NUMBER       LARGE.238    
C IS EXCEEDED.                                                             LARGE.239    
          DO K=2,N_LEVELS(I)+1                                             LARGE.240    
            IF (K.LT.KM+1) THEN                                            LARGE.241    
              DUTOP(K)=(UBT(I,K-1)-UBT(I,K))/DZZ(K)                        LARGE.242    
              DVTOP(K)=(VBT(I,K-1)-VBT(I,K))/DZZ(K)                        LARGE.243    
              DRHOTOP(K)=(RHO(I,K-1)-RHO(I,K))/DZZ(K)                      LARGE.244    
            ELSE                                                           LARGE.245    
              DUTOP(K)=0.                                                  LARGE.246    
              DVTOP(K)=0.                                                  LARGE.247    
              DRHOTOP(K)=0.                                                LARGE.248    
            ENDIF                                                          LARGE.249    
            RI(I,K-1)=GRADIENT_RICHSN(DRHOTOP(K),RHO0,DUTOP(K),            LARGE.250    
     &             DVTOP(K),GRAV)                                          LARGE.251    
            IF (RI(I,K-1).GT.CRIT_RI_FL) THEN                              LARGE.252    
              CRIT_LEVEL=K-1                                               LARGE.253    
              GOTO 10                                                      LARGE.254    
            ENDIF                                                          LARGE.255    
          ENDDO                                                            LARGE.256    
C THE FOLLOWING 2 LINES ONLY OCCUR IF RI_CRIT HAS NOT BEEN EXCEEDED        LARGE.257    
C BY BOTTOM OF OCEAN. IN THIS CASE SET MLD_LARGE AS OCEAN BOTTOM           LARGE.258    
          L1=1                                                             LARGE.259    
          MLD_LARGE(I)=ZDZ(N_LEVELS(I))                                    LARGE.260    
          GOTO 100                                                         LARGE.261    
  10      CONTINUE                                                         LARGE.262    
          IF (CRIT_LEVEL.EQ.1) THEN                                        LARGE.263    
C IF RI AT BOTTOM OF 1ST LAYER IS GREATER THAN CRIT_RI_FL SET MLD_LARGE    LARGE.264    
C TO BOTTOM OF FIRST LAYER                                                 LARGE.265    
            MLD_LARGE(I)=ZDZ(1)                                            LARGE.266    
            L1=2                                                           LARGE.267    
          ELSE                                                             LARGE.268    
C CONSIDER LEVEL IN WHICH MLD_LARGE OCCURS AND FIND MLD_LARGE WITHIN       LARGE.269    
C THIS LEVEL.                                                              LARGE.270    
C PENG (AS HERE) USES A MAX OF 5 LAYERS WITHIN EACH LEVEL AND SETS         LARGE.271    
C MLD_LARGE TO NEAREST.                                                    LARGE.272    
            L1=3                                                           LARGE.273    
            DO M=1,NO_LAYERS_IN_LEV-1                                      LARGE.274    
              DU=DUTOP(CRIT_LEVEL) +                                       LARGE.275    
     &          (DUTOP(CRIT_LEVEL+1)-DUTOP(CRIT_LEVEL))                    LARGE.276    
     &             *FLOAT(M)/FLOAT(NO_LAYERS_IN_LEV)                       LARGE.277    
              DV=DVTOP(CRIT_LEVEL) +                                       LARGE.278    
     &          (DVTOP(CRIT_LEVEL+1)-DVTOP(CRIT_LEVEL))                    LARGE.279    
     &             *FLOAT(M)/FLOAT(NO_LAYERS_IN_LEV)                       LARGE.280    
              DRHO=DRHOTOP(CRIT_LEVEL) +                                   LARGE.281    
     &          (DRHOTOP(CRIT_LEVEL+1)-DRHOTOP(CRIT_LEVEL))                LARGE.282    
     &             *FLOAT(M)/FLOAT(NO_LAYERS_IN_LEV)                       LARGE.283    
              RIC=GRADIENT_RICHSN(DRHO,RHO0,DU,DV,GRAV)                    LARGE.284    
              IF (RIC.GE.CRIT_RI_FL) THEN                                  LARGE.285    
                MLD_LARGE(I)=0.0                                           LARGE.286    
                IF (CRIT_LEVEL.GT.1) MLD_LARGE(I)=ZDZ(CRIT_LEVEL-1)        LARGE.287    
                MLD_LARGE(I)=MLD_LARGE(I) +                                LARGE.288    
     &          FLOAT(M)*DZ(CRIT_LEVEL)/FLOAT(NO_LAYERS_IN_LEV)            LARGE.289    
                GOTO 20                                                    LARGE.290    
              ELSE                                                         LARGE.291    
                IF (M.EQ.NO_LAYERS_IN_LEV-1)                               LARGE.292    
     &                    MLD_LARGE(I)=ZDZ(CRIT_LEVEL)                     LARGE.293    
              ENDIF                                                        LARGE.294    
              L1=L1+1                                                      LARGE.295    
            ENDDO                                                          LARGE.296    
 20         CONTINUE                                                       LARGE.297    
          ENDIF                                                            LARGE.298    
 100      CONTINUE                                                         LARGE.299    
          IF (ABS(MLD_LARGE(I)).LT.0.5)                                    LARGE.300    
     &          WRITE(6,*) 'CALC_MLD_LARGE',I,L1                           LARGE.301    
        ENDIF                                                              LARGE.302    
      ENDDO                                                                LARGE.303    
      RETURN                                                               LARGE.304    
      END                                                                  LARGE.305    
C                                                                          LARGE.306    

      SUBROUTINE CALC_MLD_LARGEB(J,KM,IMT,NT                                4,4LARGE.307    
     &, RHO_WATER_SI,GRAV_SI,SPECIFIC_HEAT_SI,CRIT_RI_FL                   LARGE.308    
     &, ZDZ,DZ,ZDZZ,DZZ,L_OCYCLIC,L_SEAICE                                 LARGE.309    
     &, UB,VB,UBM,VBM,TB,RHO,HTN                                           LARGE.310    
     &, PME,WATERFLUX_ICE,SOL,WME,OCEANHEATFLUX,CARYHEAT,FLXTOICE          LARGE.311    
     &, FM,MLD_LARGE,RI                                                    LARGE.312    
     &  )                                                                  LARGE.313    
CLL CALCULATE THE MIXED LAYER DEPTH AS THE DEPTH WHERE THE BULK            LARGE.314    
CLL RICHARDSON NUMBER EXCEEDS CRIT_RI_FL                                   LARGE.315    
      IMPLICIT NONE                                                        LARGE.316    
C DEFINE ARGUMENT LIST VARIABLES                                           LARGE.317    
C                                                                          LARGE.318    
C*----------------------------------------------------------------------   LARGE.319    
C VKMAN IS VON KARMAN'S CONSTANT                                           LARGE.320    
      REAL VKMAN                                                           LARGE.321    
                                                                           LARGE.322    
      PARAMETER(VKMAN=0.4)                                                 LARGE.323    
C*----------------------------------------------------------------------   LARGE.324    
                                                                           LARGE.325    
C                                                                          LARGE.326    
      INTEGER                                                              LARGE.327    
     &  KM,IMT,NT,I,J,K,M                                                  LARGE.328    
      REAL                                                                 LARGE.329    
     &  UB(IMT,KM),VB(IMT,KM)   ! IN HORIZ VELOCITY IN CM/S, ROW J         LARGE.330    
     &, UBM(IMT,KM),VBM(IMT,KM) ! IN HORIZ VELOCITY IN CM/S, ROW J-1       LARGE.331    
     &, TB(IMT,KM,NT)   ! IN                                               LARGE.332    
     &, RHO(IMT,KM)    ! IN DENSITY ARRAY FOR ROW J                        LARGE.333    
     &, FM(IMT,KM)     ! IN LAND/SEA MASK ON TRACER POINTS                 LARGE.334    
     &, RHO_WATER_SI,GRAV_SI,SPECIFIC_HEAT_SI   ! IN CONSTANTS             LARGE.335    
     &, ZDZ(KM)        ! IN DEPTH OF BOTTOM OF LAYER (CM)                  LARGE.336    
     &, DZ(KM)         ! IN DEPTH OF LEVEL K (CM)                          LARGE.337    
     &, DZZ(KM+1)      ! IN DISTANCE BETWEEN MIDPTS OF LEVELS (CM)         LARGE.338    
     &, ZDZZ(KM+1)     ! IN DEPTH OF MIDPTS OF LEVELS (CM)                 LARGE.339    
     &, CRIT_RI_FL,UBTREF,VBTREF,RHOREF,SLD                                LARGE.340    
     &, DRZ,DUZ,DVZ,DELZ,DRDZ,DUDZ,DVDZ                                    LARGE.341    
     &, MLD_LARGE(IMT) ! OUT MIXED LAYER DEPTH (CM)                        LARGE.342    
     &, RI(IMT,KM) !OUT                                                    LARGE.343    
     &, PME(IMT),WATERFLUX_ICE(IMT),SOL(IMT),WME(IMT),HTN(IMT) !IN         LARGE.344    
     &, OCEANHEATFLUX(IMT),CARYHEAT(IMT),FLXTOICE(IMT)   !IN               LARGE.345    
      INTEGER                                                              LARGE.346    
     &  NO_LAYERS_IN_LEV  ! IN NO OF LEVELS WITHIN A LAYER CONSIDERED TO   LARGE.347    
                          ! CALCULATE MLD_LARGE                            LARGE.348    
      LOGICAL                                                              LARGE.349    
     &  L_OCYCLIC,L_SEAICE                                                 LARGE.350    
C DEFINE LOCAL VARIABLES                                                   LARGE.351    
      REAL                                                                 LARGE.352    
     &  UBT(IMT,KM),VBT(IMT,KM) ! HORIZONTAL VELOCITY ON TRACER GRID       LARGE.353    
     &, RHO0,GRAV,CP0            ! RHO/GRAV/CP IN CGS UNITS                LARGE.354    
     &, UDIFF,VDIFF,RDIFF    ! VERT JUMPS(LEV 1 - LEV K)                   LARGE.355    
     &, DENOM,ANSQ,ANSET,WATERFLUX,SFC_HEATFLUX,ALPHA,BETA,WTK             LARGE.356    
     &, FX,BFK,BF(IMT),L_T(IMT),STABIL_PARAM,EPSILON,SIGMA                 LARGE.357    
     &, ALPHAI(IMT,1),BETAI(IMT,1),RHO_FRESHWATER,USTAR(IMT)               LARGE.358    
     &, ZCV,ZCS,ZEPSILON,ZBT,ZCONST                                        LARGE.359    
      INTEGER                                                              LARGE.360    
     &  N_LEVELS(IMT)  ! NO OF VERTICAL SEA LEVELS AT A GRIDPOINT          LARGE.361    
     &, CRIT_LEVEL     ! LEVEL WITHIN WHICH THE MLD_LARGE IS CONTAINED     LARGE.362    
     &, KK,ITEST                                                           LARGE.363    
C DEFINE FUNCTIONS                                                         LARGE.364    
      REAL                                                                 LARGE.365    
     &  SOL_IRRA_1B, FLUX_PROFILET                                         LARGE.366    
C                                                                          LARGE.367    
C                                                                          LARGE.368    
C SET CONSTANTS REQUIRED BELOW                                             LARGE.369    
      RHO_FRESHWATER=1.0        ! IN G/CM^3                                LARGE.370    
      RHO0=RHO_WATER_SI*0.001   ! CONVERT TO CGS UNITS                     LARGE.371    
      GRAV=GRAV_SI*100.         ! CONVERT TO CGS UNITS                     LARGE.372    
      CP0=SPECIFIC_HEAT_SI*1.E4 !  IN CM^2 S^-2 K^-1                       LARGE.373    
      EPSILON=0.1                                                          LARGE.374    
C                                                                          LARGE.375    
C CONSTANTS ASSOCIATED WITH VT TERM IN BULK RI (EQUATION 21 IN             LARGE.376    
C LARGE, EQUATION 8.3.11 IN NURSER REVIEW).                                LARGE.377    
      ZCV=1.5                                                              LARGE.378    
      ZCS=98.96                                                            LARGE.379    
      ZEPSILON=EPSILON                                                     LARGE.380    
      ZBT=0.2                                                              LARGE.381    
      ZCONST=(ZCV*SQRT(ZBT))/                                              LARGE.382    
     &       (CRIT_RI_FL*(VKMAN**2)*SQRT(ZCS*ZEPSILON))                    LARGE.383    
C                                                                          LARGE.384    
C CALCULATE NO OF SEA LEVELS                                               LARGE.385    
      DO I=1,IMT                                                           LARGE.386    
        N_LEVELS(I)=0                                                      LARGE.387    
        DO K=1,KM                                                          LARGE.388    
          IF (FM(I,K).GT.0.5) THEN                                         LARGE.389    
            N_LEVELS(I)=N_LEVELS(I)+1                                      LARGE.390    
          ELSE                                                             LARGE.391    
            GOTO 30                                                        LARGE.392    
          ENDIF                                                            LARGE.393    
        ENDDO                                                              LARGE.394    
 30     CONTINUE                                                           LARGE.395    
      ENDDO                                                                LARGE.396    
C SET UP USTAR. 1000.0 CONVERTS FROM SI UNITS TO CGS UNITS.                LARGE.397    
C USTAR^3 = WME/RHO0                                                       LARGE.398    
C                                                                          LARGE.399    
          DO I=1,IMT                                                       LARGE.400    
            USTAR(I)=(1000.0*WME(I)/RHO0)**(1.0/3.0)                       LARGE.401    
          ENDDO                                                            LARGE.402    
C                                                                          LARGE.403    
C CALCULATE ALPHA AND BETA FOR ROW J                                       LARGE.404    
C                                                                          LARGE.405    
        CALL DRODT(TB,TB(1,1,2),ALPHAI,IMT,1)                              LARGE.406    
        CALL DRODS(TB,TB(1,1,2),BETAI,IMT,1)                               LARGE.407    
C                                                                          LARGE.408    
C FIND BF CONTRIBUTION FROM SURFACE TERMS                                  LARGE.409    
C                                                                          LARGE.410    
        DO I=1,IMT                                                         LARGE.411    
          ALPHA=-1.*ALPHAI(I,1)                                            LARGE.412    
          BETA=BETAI(I,1)                                                  LARGE.413    
C                                                                          LARGE.414    
          IF (FM(I,1).GT.0.5) THEN                                         LARGE.415    
C FACTORS CONVERT TO CGS UNITS.                                            LARGE.416    
C HTN,SOL W/M^2=KG/S^3=1000G/S^3                                           LARGE.417    
C PME,WATERFLUX_ICE      KG/M^2/S=0.1G/CM^2/S                              LARGE.418    
C *******************************************************************      LARGE.419    
            WATERFLUX=PME(I)+WATERFLUX_ICE(I)                              LARGE.420    
                                                                           LARGE.421    
            IF(L_SEAICE)THEN                                               LARGE.422    
            SFC_HEATFLUX=OCEANHEATFLUX(I)-FLXTOICE(I)+CARYHEAT(I)          LARGE.423    
            ELSE                                                           LARGE.424    
            SFC_HEATFLUX=HTN(I)                                            LARGE.425    
            ENDIF                                                          LARGE.426    
C                                                                          LARGE.427    
C FIND SURFACE ONLY CONTRIBUTIONS TO BF                                    LARGE.428    
C                                                                          LARGE.429    
        BF(I) =  GRAV*( ((ALPHA*SFC_HEATFLUX*1000.)/(RHO0*CP0))            LARGE.430    
     &         + ((BETA*WATERFLUX*0.1*0.035)/RHO_FRESHWATER)   )           LARGE.431    
     &         + (GRAV*ALPHA*SOL(I)*1000.)/(RHO0*CP0)                      LARGE.432    
C **************************************************************           LARGE.433    
          ELSE                                                             LARGE.434    
          BF(I)=0.0                                                        LARGE.435    
          ENDIF                                                            LARGE.436    
        ENDDO                                                              LARGE.437    
C                                                                          LARGE.438    
C NEED CURRENTS ON TRACER POINTS                                           LARGE.439    
C                                                                          LARGE.440    
      DO I=2,IMT                                                           LARGE.441    
        DO K=1,KM                                                          LARGE.442    
          UBT(I,K)=0.25*(UB(I-1,K)+UB(I,K)+UBM(I-1,K)+UBM(I,K))            LARGE.443    
          VBT(I,K)=0.25*(VB(I-1,K)+VB(I,K)+VBM(I-1,K)+VBM(I,K))            LARGE.444    
        ENDDO                                                              LARGE.445    
      ENDDO                                                                LARGE.446    
      IF (L_OCYCLIC) THEN                                                  LARGE.447    
        DO K=1,KM                                                          LARGE.448    
          UBT(1,K)=UBT(IMT-1,K)                                            LARGE.449    
          VBT(1,K)=VBT(IMT-1,K)                                            LARGE.450    
        ENDDO                                                              LARGE.451    
      ELSE                                                                 LARGE.452    
        DO K=1,KM                                                          LARGE.453    
          UBT(1,K)=0.5*(UB(1,K)+UBM(1,K))                                  LARGE.454    
          VBT(1,K)=0.5*(VB(1,K)+VBM(1,K))                                  LARGE.455    
        ENDDO                                                              LARGE.456    
      ENDIF                                                                LARGE.457    
C CALCULATE THE MIXED LAYER DEPTH                                          LARGE.458    
      FX=1.E-12                                                            LARGE.459    
C                                                                          LARGE.460    
C MAIN I-LOOP                                                              LARGE.461    
C                                                                          LARGE.462    
      DO I=1,IMT                                                           LARGE.463    
C                                                                          LARGE.464    
        ALPHA=-1.0*ALPHAI(I,1)                                             LARGE.465    
        MLD_LARGE(I)=0.0                                                   LARGE.466    
C                                                                          LARGE.467    
        DO K=1,KM                                                          LARGE.468    
          RI(I,K)=50000.0                                                  LARGE.469    
        ENDDO                                                              LARGE.470    
C                                                                          LARGE.471    
        IF (FM(I,1).GT.0.5) THEN   ! OCEAN POINT CHOICE                    LARGE.472    
C                                                                          LARGE.473    
C CALCULATE BULK RI AT MID-LAYER POINTS UNTIL THE                          LARGE.474    
C CRITICAL RI NUMBER IS EXCEEDED.                                          LARGE.475    
C                                                                          LARGE.476    
C    MAIN K-LOOP TO CALCULATE RI                                           LARGE.477    
C                                                                          LARGE.478    
          DO K=2,MIN(N_LEVELS(I),KM-1)                                     LARGE.479    
C                                                                          LARGE.480    
C SET UP MONIN-OBUKOV DEPTH FOR LEVEL K                                    LARGE.481    
C                                                                          LARGE.482    
          BFK=BF(I) - (GRAV*ALPHA)* (                                      LARGE.483    
     &      SOL_IRRA_1B(SOL(I)*1000.,ZDZZ(K))/(RHO0*CP0) )                 LARGE.484    
C                                                                          LARGE.485    
            IF (ABS(BFK).LT.1.0E-12) THEN                                  LARGE.486    
              IF (BFK.GE.0.0) BFK=1.0E-12                                  LARGE.487    
              IF (BFK.LT.0.0) BFK=-1.0E-12                                 LARGE.488    
            ENDIF                                                          LARGE.489    
C CALCULATE MONIN-OBUKHOV LENGTH, L_T, CM = (CM/S)^3 / (CM^2/S^3)          LARGE.490    
            L_T(I) = USTAR(I)**3/(VKMAN*BFK)                               LARGE.491    
            IF (ABS(L_T(I)).LT.1.0E-12) THEN                               LARGE.492    
              IF (L_T(I).GE.0.0) L_T(I)=1.0E-12                            LARGE.493    
              IF (L_T(I).LT.0.0) L_T(I)=-1.0E-12                           LARGE.494    
            ENDIF                                                          LARGE.495    
C                                                                          LARGE.496    
C CALCULATE WTK - DEPTH DEPENDENT TURBULENT VELOCITY SCALE PROFILE         LARGE.497    
C AT LEVEL K (LARGE, EQN 13). ZDZZ(K) IS THE BOUNDARY LAYER DEPTH          LARGE.498    
C HT THAT WE SEEK, HENCE SIGMA IS ALWAYS 1.                                LARGE.499    
C                                                                          LARGE.500    
              STABIL_PARAM=ZDZZ(K)/L_T(I)                                  LARGE.501    
              SIGMA=1.0                                                    LARGE.502    
C                                                                          LARGE.503    
              IF (STABIL_PARAM.LT.0.0.AND.SIGMA.GT.EPSILON)THEN            LARGE.504    
              STABIL_PARAM=(EPSILON*ZDZZ(K))/L_T(I)                        LARGE.505    
              ENDIF                                                        LARGE.506    
C                                                                          LARGE.507    
              WTK=(VKMAN*USTAR(I))/FLUX_PROFILET(STABIL_PARAM)             LARGE.508    
C                                                                          LARGE.509    
C FIND LOCAL BUOYANCY FREQUENCY N. CAREFUL TOO                             LARGE.510    
C WITH UNSTABLE PROFILES SINCE USING STATED RHO HERE.                      LARGE.511    
C                                                                          LARGE.512    
C  TRY A ONE-SIDED DERIVATIVE FOR N^2                                      LARGE.513    
C            ANSQ=GRAV*(RHO(I,K+1)-RHO(I,K))/(RHO0*DZZ(K+1))               LARGE.514    
C                                                                          LARGE.515    
C  TRY CENTRED DERIVATIVE FORM (LARGE EQN D4b) FOR N^2.                    LARGE.516    
            ANSQ=(GRAV*(RHO(I,K+1)-RHO(I,K-1)))/                           LARGE.517    
     &            ( RHO0*(DZZ(K)+DZZ(K+1)) )                               LARGE.518    
C                                                                          LARGE.519    
            IF(ANSQ.LT.0.0)THEN                                            LARGE.520    
            ANSET=0.0                                                      LARGE.521    
            ELSE                                                           LARGE.522    
            ANSET=SQRT(ANSQ)                                               LARGE.523    
            ENDIF                                                          LARGE.524    
C                                                                          LARGE.525    
C COMPUTE SURFACE REFERENCE VALUES AS AVERAGES OVER THE SURFACE            LARGE.526    
C LAYER DEPTH EPSILON*H. USE LARGE EQN D3 FORMS.                           LARGE.527    
C                                                                          LARGE.528    
C    SURFACE LAYER REFERENCE VALUES                                        LARGE.529    
C                                                                          LARGE.530    
             RHOREF=RHO(I,1)                                               LARGE.531    
             UBTREF=UBT(I,1)                                               LARGE.532    
             VBTREF=VBT(I,1)                                               LARGE.533    
C                                                                          LARGE.534    
            SLD=EPSILON*ZDZZ(K)                                            LARGE.535    
            IF(SLD.GT.ZDZZ(1))THEN                                         LARGE.536    
C                                                                          LARGE.537    
             ITEST=0                                                       LARGE.538    
             RHOREF=(RHO(I,1)*ZDZZ(1))/SLD                                 LARGE.539    
             UBTREF=(UBT(I,1)*ZDZZ(1))/SLD                                 LARGE.540    
             VBTREF=(VBT(I,1)*ZDZZ(1))/SLD                                 LARGE.541    
C                                                                          LARGE.542    
             DO KK=2,MIN(N_LEVELS(I),KM-1)                                 LARGE.543    
C                                                                          LARGE.544    
             IF(ITEST.EQ.0)THEN                                            LARGE.545    
C                                                                          LARGE.546    
             IF(ZDZZ(KK).LT.SLD)THEN                                       LARGE.547    
C                                                                          LARGE.548    
             DELZ=ZDZZ(KK)-ZDZZ(KK-1)                                      LARGE.549    
             DRZ=RHO(I,KK)-RHO(I,KK-1)                                     LARGE.550    
             DUZ=UBT(I,KK)-UBT(I,KK-1)                                     LARGE.551    
             DVZ=VBT(I,KK)-VBT(I,KK-1)                                     LARGE.552    
             DRDZ=DRZ/DELZ                                                 LARGE.553    
             DUDZ=DUZ/DELZ                                                 LARGE.554    
             DVDZ=DVZ/DELZ                                                 LARGE.555    
             RHOREF=RHOREF+ (                                              LARGE.556    
     & DELZ*(RHO(I,KK-1)-DRDZ*ZDZZ(KK-1))+                                 LARGE.557    
     & 0.5*( ZDZZ(KK)**2 - ZDZZ(KK-1)**2 )*(DRDZ) )/SLD                    LARGE.558    
             UBTREF=UBTREF+ (                                              LARGE.559    
     & DELZ*(UBT(I,KK-1)-DUDZ*ZDZZ(KK-1))+                                 LARGE.560    
     & 0.5*( ZDZZ(KK)**2 - ZDZZ(KK-1)**2 )*(DUDZ) )/SLD                    LARGE.561    
             VBTREF=VBTREF+ (                                              LARGE.562    
     & DELZ*(VBT(I,KK-1)-DVDZ*ZDZZ(KK-1))+                                 LARGE.563    
     & 0.5*( ZDZZ(KK)**2 - ZDZZ(KK-1)**2 )*(DVDZ) )/SLD                    LARGE.564    
C                                                                          LARGE.565    
             ELSE        ! ZDZZ(KK) GE SLD                                 LARGE.566    
C                                                                          LARGE.567    
             ITEST=1                                                       LARGE.568    
             DELZ=ZDZZ(KK)-ZDZZ(KK-1)                                      LARGE.569    
             DRZ=RHO(I,KK)-RHO(I,KK-1)                                     LARGE.570    
             DUZ=UBT(I,KK)-UBT(I,KK-1)                                     LARGE.571    
             DVZ=VBT(I,KK)-VBT(I,KK-1)                                     LARGE.572    
             DRDZ=DRZ/DELZ                                                 LARGE.573    
             DUDZ=DUZ/DELZ                                                 LARGE.574    
             DVDZ=DVZ/DELZ                                                 LARGE.575    
             RHOREF=RHOREF+ (                                              LARGE.576    
     & (SLD-ZDZZ(KK-1))*(RHO(I,KK-1)-DRDZ*ZDZZ(KK-1))+                     LARGE.577    
     & 0.5*( SLD**2 - ZDZZ(KK-1)**2 )*(DRDZ) )/SLD                         LARGE.578    
             UBTREF=UBTREF+ (                                              LARGE.579    
     & (SLD-ZDZZ(KK-1))*(UBT(I,KK-1)-DUDZ*ZDZZ(KK-1))+                     LARGE.580    
     & 0.5*( SLD**2 - ZDZZ(KK-1)**2 )*(DUDZ) )/SLD                         LARGE.581    
             VBTREF=VBTREF+ (                                              LARGE.582    
     & (SLD-ZDZZ(KK-1))*(VBT(I,KK-1)-DVDZ*ZDZZ(KK-1))+                     LARGE.583    
     & 0.5*( SLD**2 - ZDZZ(KK-1)**2 )*(DVDZ) )/SLD                         LARGE.584    
C                                                                          LARGE.585    
             ENDIF          ! ZDZZ(KK) LT SLD                              LARGE.586    
C                                                                          LARGE.587    
             ENDIF          ! ITEST EQ 0                                   LARGE.588    
C                                                                          LARGE.589    
             ENDDO          ! CLOSE KK LOOP                                LARGE.590    
C                                                                          LARGE.591    
            ENDIF           ! SLD.GT.ZDZZ(1)                               LARGE.592    
C                                                                          LARGE.593    
C FINALLY COMPUTE BULK RI WITH ALL LARGE TERMS AT DEPTH ZDZZ(K)            LARGE.594    
C                                                                          LARGE.595    
            UDIFF=UBTREF-UBT(I,K)                                          LARGE.596    
            VDIFF=VBTREF-VBT(I,K)                                          LARGE.597    
            RDIFF=RHOREF-RHO(I,K)                                          LARGE.598    
            DENOM=(UDIFF*UDIFF)+(VDIFF*VDIFF)+                             LARGE.599    
     &             (ZCONST*ANSET)*(ZDZZ(K)*WTK)                            LARGE.600    
            RI(I,K-1)=-((GRAV*ZDZZ(K))*RDIFF) / MAX(DENOM,FX)              LARGE.601    
C                                                                          LARGE.602    
C MAIN ESCAPE CLAUSE                                                       LARGE.603    
C                                                                          LARGE.604    
              IF(RI(I,K-1).GT.CRIT_RI_FL) THEN                             LARGE.605    
              CRIT_LEVEL=K                                                 LARGE.606    
              GOTO 10                                                      LARGE.607    
              ENDIF                                                        LARGE.608    
C                                                                          LARGE.609    
          ENDDO       ! CLOSE MAIN K-LOOP                                  LARGE.610    
C                                                                          LARGE.611    
C THE FOLLOWING 2 LINES ONLY OCCUR IF RI_CRIT HAS NOT BEEN EXCEEDED        LARGE.612    
C BY BOTTOM OF OCEAN. IN THIS CASE SET MLD_LARGE AS OCEAN BOTTOM           LARGE.613    
C                                                                          LARGE.614    
          MLD_LARGE(I)=ZDZ(N_LEVELS(I))                                    LARGE.615    
         GOTO 100                                                          LARGE.616    
C                                                                          LARGE.617    
  10      CONTINUE                                                         LARGE.618    
C                                                                          LARGE.619    
          IF (CRIT_LEVEL.EQ.2) THEN                                        LARGE.620    
C FIRST DEPTH AT WHICH BULK RI FOUND IS GREATER THAN CRIT_RI_FL            LARGE.621    
C SO SET MLD_LARGE AS DEPTH OF FIRST LAYER.                                LARGE.622    
            MLD_LARGE(I)=ZDZ(1)                                            LARGE.623    
          ELSE                                                             LARGE.624    
C CONSIDER LEVEL IN WHICH MLD_LARGE OCCURS AND FIND MLD_LARGE WITHIN       LARGE.625    
C THIS LEVEL BY LINEAR INTERPOLATION                                       LARGE.626    
            MLD_LARGE(I)=ZDZZ(CRIT_LEVEL-1) +                              LARGE.627    
     &      (DZZ(CRIT_LEVEL)*(CRIT_RI_FL-RI(I,CRIT_LEVEL-2))) /            LARGE.628    
     &              (RI(I,CRIT_LEVEL-1)-RI(I,CRIT_LEVEL-2))                LARGE.629    
          ENDIF                                                            LARGE.630    
C                                                                          LARGE.631    
        ENDIF        ! IF OCEAN POINT CHOICE                               LARGE.632    
C                                                                          LARGE.633    
 100    CONTINUE                                                           LARGE.634    
C                                                                          LARGE.635    
      ENDDO          ! CLOSE MAIN I-LOOP                                   LARGE.636    
C                                                                          LARGE.637    
      RETURN                                                               LARGE.638    
      END                                                                  LARGE.639    
C                                                                          LARGE.640    

      FUNCTION GRADIENT_RICHSN(DRHO,RHOBAR,DU,DV,GRAV)                      2LARGE.641    
C CALCULATE THE LOCAL GRADIENT RICHARDSON NUMBER                           LARGE.642    
      REAL                                                                 LARGE.643    
     &  DRHO   ! DRHO/DZ - DERIVATIVE OF DENSITY                           LARGE.644    
     &, RHOBAR ! AVERAGE DENSITY OF WATER COLUMN                           LARGE.645    
     &, DU     ! DU/DZ - DERIVATIVE OF EASTWARD CURRENT VELOCITY           LARGE.646    
     &, DV     ! DV/DZ - DERIVATIVE OF NORTHWARD CURRENT VELOCITY          LARGE.647    
     &, GRAV   ! ACCELERATION DUE TO GRAVITY IN CM/S^2                     LARGE.648    
     &, FX     ! NO TO DIVIDE BY SO THAT DIVISION BY ZERO IS AVOIDED       LARGE.649    
      FX=1.E-12                                                            LARGE.650    
      GRADIENT_RICHSN=-(GRAV*DRHO)/MAX(RHOBAR*(DU*DU+DV*DV),FX)            LARGE.651    
      RETURN                                                               LARGE.652    
      END                                                                  LARGE.653    
*ENDIF                                                                     LARGE.654