*IF DEF,OCEAN                                                              IPDCOFCO.2      
C ******************************COPYRIGHT******************************    IPDCOFCO.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    IPDCOFCO.4      
C                                                                          IPDCOFCO.5      
C Use, duplication or disclosure of this code is subject to the            IPDCOFCO.6      
C restrictions as set forth in the contract.                               IPDCOFCO.7      
C                                                                          IPDCOFCO.8      
C                Meteorological Office                                     IPDCOFCO.9      
C                London Road                                               IPDCOFCO.10     
C                BRACKNELL                                                 IPDCOFCO.11     
C                Berkshire UK                                              IPDCOFCO.12     
C                RG12 2SZ                                                  IPDCOFCO.13     
C                                                                          IPDCOFCO.14     
C If no contract has been raised with this copy of the code, the use,      IPDCOFCO.15     
C duplication or disclosure of it is strictly prohibited.  Permission      IPDCOFCO.16     
C to do so must first be obtained in writing from the Head of Numerical    IPDCOFCO.17     
C Modelling at the above address.                                          IPDCOFCO.18     
C ******************************COPYRIGHT******************************    IPDCOFCO.19     
C                                                                          IPDCOFCO.20     
C*LL  Subroutine IPDCOFCO                                                  IPDCOFCO.21     
CLL                                                                        IPDCOFCO.22     
CLL   Can run on any compiler accepting lower case variables.              IPDCOFCO.23     
CLL                                                                        IPDCOFCO.24     
CLL   Author:  D.J.Carrington                                              IPDCOFCO.25     
CLL   Date:  12 December 1990                                              IPDCOFCO.26     
CLL   Reviewer:  R.A.Wood                                                  IPDCOFCO.27     
CLL   Date:  19 December 1990                                              IPDCOFCO.28     
CLL                                                                        IPDCOFCO.29     
!     3.5    16.01.95   Remove *IF dependency. R.Hill                      IPDCOFCO.30     
CLL   4.2    7.11.96    This subroutine, originally IPDCOFCL, was          IPDCOFCO.31     
CLL          removed at 4.0, but is now being restored as an               IPDCOFCO.32     
CLL          alternative for use with HADCM2 in particular. JMG/TCJ        IPDCOFCO.33     
!   4.4  15/08/97  Remove SKIPLAND code. R. Hill                           ORH7F404.54     
CLL                                                                        IPDCOFCO.34     
CLL   External documentation:                                              IPDCOFCO.35     
CLL     Unified Model Documentation Paper No. 51.                          IPDCOFCO.36     
CLL                                                                        IPDCOFCO.37     
CLL   Naming convention of variables: Cox naming convention is used,       IPDCOFCO.38     
CLL     with the addition that lower-case variables are                    IPDCOFCO.39     
CLL     introduced by the Isopycnal Diffusion scheme.                      IPDCOFCO.40     
CLL                                                                        IPDCOFCO.41     
CLL   Purpose of Subroutine:                                               IPDCOFCO.42     
CLL     Calculates isopycnal diffusion coefficients.                       IPDCOFCO.43     
CLL                                                                        IPDCOFCO.44     
CLL   List of subroutines required for implementation of Isopycnal         IPDCOFCO.45     
CLL     Diffusion Scheme (in order of being called):                       IPDCOFCO.46     
CLL        VERTCOFC *                                                      IPDCOFCO.47     
CLL        VDIFCALC                                                        IPDCOFCO.48     
CLL        VERTCOFT *                                                      IPDCOFCO.49     
CLL        IPDCOFCL                                                        IPDCOFCO.50     
CLL        IPDFLXCL                                                        IPDCOFCO.51     
CLL        VDIFCALT            *  K-theory mixing scheme                   IPDCOFCO.52     
CLL                                                                        IPDCOFCO.53     
CLLEND------------------------------------------------------------------   IPDCOFCO.54     
C*                                                                         IPDCOFCO.55     
C*L---- Arguments ------------------------------------------------------   IPDCOFCO.56     
C                                                                          IPDCOFCO.57     

      SUBROUTINE IPDCOFCO                                                   4,4IPDCOFCO.58     
     &  ( J,JMT,IMT,IMTM1,KM,KMT,KMP,KMP1,KMP2,NT,NTMIN2,                  IPDCOFCO.59     
     & J_OFFSET,                                                           ORH7F404.55     
     &  T,TP,TDIF,                                                         IPDCOFCO.62     
     &  DXUR,DXU2RQ,DXT4RQ,DYUR,DYT4R,DZ2RQ,DZZ2RQ,ZDZ,DTTS,               IPDCOFCO.63     
     &  NERGY,CSR,CSTR,ITT,FM,FMP,                                         IPDCOFCO.64     
     &  RHOS,RHON,AH,ahi,                                                  IPDCOFCO.65     
     &  gnu,JFT0,esav,fk1,fk2,fk3,                                         IPDCOFCO.66     
     &  rxp,ry,rrzp                                                        IPDCOFCO.67     
     &  ,mld                                                               IPDCOFCO.68     
     &  ,slope_max                                                         IPDCOFCO.69     
     &  )                                                                  IPDCOFCO.70     
C                                                                          IPDCOFCO.71     
C                                                                          IPDCOFCO.72     
      IMPLICIT NONE                                                        IPDCOFCO.73     
C                                                                          IPDCOFCO.74     
*CALL OARRYSIZ                                                             PXORDER.24     
      INTEGER                                                              IPDCOFCO.75     
     &  I,J,K,M,N,L,                                                       IPDCOFCO.76     
     &  JMT,IMT,IMTM1,KM,KMT,KMP,KMP1,KMP2,NT,NTMIN2,                      IPDCOFCO.77     
     &  NERGY,ITT,KS,JFT0                                                  IPDCOFCO.78     
     &,J_OFFSET         ! IN base row of block                             IPDCOFCO.83     
C                                                                          IPDCOFCO.84     
      REAL                                                                 IPDCOFCO.85     
     &  T(IMT,KM,NT),TP(IMT,KM,NT),TDIF(IMT,KMP2,NTMIN2),                  IPDCOFCO.86     
     &  DXUR(IMT),DXU2RQ(IMT,KM),DXT4RQ(IMT,KM),                           IPDCOFCO.87     
     &  DYUR(JMT),DYT4R(JMT),DZ2RQ(IMT,KM),DZZ2RQ(IMT,KM),ZDZ(KM),DTTS,    IPDCOFCO.88     
     &  RHOS(IMT,KM),RHON(IMT,KM),                                         IPDCOFCO.89     
     &  FM(IMT,KM),FMP(IMT,KM),CSR(JMT),CSTR(JMT),                         IPDCOFCO.90     
     &  AH,               ! IN   BACKGROUND horizontal diffusivity         IPDCOFCO.91     
C                                  Ah in Eq.1.10 (cm2/s)                   IPDCOFCO.92     
     &  ahi(KM),          ! IN   along-isopycnal coeff. of diffusion       IPDCOFCO.93     
C                                  Ai in Eq.1.8 (cm2/s)                    IPDCOFCO.94     
     &  gnu(IMT,KM),      ! IN   coeff. of vertical diffusion at TOP of    IPDCOFCO.95     
C                                  box. Av in Eq.1.10 (cm2/s)              IPDCOFCO.96     
     &  fk1(IMT,KM,3),    ! OUT } Rows 1,2,3 of diffusion matrix (Eq1.8)   IPDCOFCO.97     
     &  fk2(IMT,KM,3),    ! OUT } fk1 is on EAST face, fk2 on NORTH face   IPDCOFCO.98     
     &  fk3(IMT,KM,3),    ! OUT } & fk3 on TOP face of grid box (i,j,k)    IPDCOFCO.99     
     &  rxp(IMT,KM),      ! INOUT delta-rho in x dirn, row J+1 (E face)    IPDCOFCO.100    
     &  ry(IMT,KM),       ! INOUT delta-rho in y dirn, row J   (N face)    IPDCOFCO.101    
     &  rrzp(IMT,KMP1),   ! INOUT delta-rho in z dirn, row J+1 (top face   IPDCOFCO.102    
     &  esav(IMT,KM,NT)   ! OUT  used to save e(I,K,2) in                  IPDCOFCO.103    
C                                  subroutine IPDFLXCL                     IPDCOFCO.104    
     &  ,mld(IMT_IPD_MIX) ! IN mixed layer depth (m)                       IPDCOFCO.105    
     &  ,slope_max         ! IN    Maximum slope for diffusion             IPDCOFCO.106    
C                                                                          IPDCOFCO.107    
C                                                                          IPDCOFCO.108    
C        Declare local constants and arrays                                IPDCOFCO.109    
C                                                                          IPDCOFCO.110    
      REAL                                                                 IPDCOFCO.111    
     &  rx(IMT,KM),       !      delta-rho in x-dir, row J   (E face)      IPDCOFCO.112    
     &  rym(IMT,KM),      !          "     "  y-dir,  "  J-1 (N face)      IPDCOFCO.113    
     &  rrz(IMT,KMP1),    !          "     "  z-dir,  "  J   (top face)    IPDCOFCO.114    
     &  e(IMT,KMP1,3),    !      d-rho/d-x , d-rho/d-y ,  d-rho/d-z        IPDCOFCO.115    
     &  slmxr(KM),        !      cst. used in stability check on           IPDCOFCO.116    
C                                  d-rho-dz in Eq.1.24                     IPDCOFCO.117    
     &  tempa(IMT,KMP1),  !      workspace                                 IPDCOFCO.118    
     &  tempb(IMT,KMP1),  !      workspace                                 IPDCOFCO.119    
     &  fxa,              !      }                                         IPDCOFCO.120    
     &  fxb,              !      }                                         IPDCOFCO.121    
     &  fxc,              !      } local csts.                             IPDCOFCO.122    
     &  fxd,              !      }                                         IPDCOFCO.123    
     &  fxe,              !      }                                         IPDCOFCO.124    
     &  temp              !      temporary variable                        IPDCOFCO.125    
*CALL CNTLOCN                                                              IPDCOFCO.126    
C*                                                                         IPDCOFCO.128    
C*L---- External subroutines called ------------------------------------   IPDCOFCO.129    
      EXTERNAL STATEC                                                      IPDCOFCO.130    
C*                                                                         IPDCOFCO.131    
C                                                                          IPDCOFCO.132    
C --------------------------------------------------------------           IPDCOFCO.133    
CL Initial conditions for the isopycnal diffusion code.                    IPDCOFCO.134    
CL These involve working out delta-rho in the x and z directions           IPDCOFCO.135    
CL for the second row, so that the process for calculating                 IPDCOFCO.136    
CL these quantities for the other rows can be initiated.                   IPDCOFCO.137    
C --------------------------------------------------------------           IPDCOFCO.138    
C                                                                          IPDCOFCO.139    
      DO 502 N=1,3                                                         IPDCOFCO.140    
      DO 502 K=1,KM                                                        IPDCOFCO.141    
      DO 502 I=1,IMT                                                       IPDCOFCO.142    
        fk1(I,K,N)=0.                                                      IPDCOFCO.143    
        fk2(I,K,N)=0.                                                      IPDCOFCO.144    
        fk3(I,K,N)=0.                                                      IPDCOFCO.145    
 502  CONTINUE                                                             IPDCOFCO.146    
      fxa=1.E-25                                                           IPDCOFCO.147    
      fxb=2.                                                               IPDCOFCO.148    
      fxc=.5                                                               IPDCOFCO.149    
      fxd=1.                                                               IPDCOFCO.150    
      fxe=1.E10    ! Big number used to multiply all density gradients.    IPDCOFCO.151    
C                    Always cancels out in the end, so must be             IPDCOFCO.152    
C                    something to do with reducing rounding error.         IPDCOFCO.153    
C                                                                          IPDCOFCO.154    
      DO 503 K=1,KM                                                        IPDCOFCO.155    
C                                                                          IPDCOFCO.156    
C         Set maximum allowable slope for the diffusion to slope_max.      IPDCOFCO.157    
C         Also included here (commented out) are two old versions.         IPDCOFCO.158    
C         The first value of temp implements the criterion in Cox          IPDCOFCO.159    
C         (Ocean modelling #74, 1987). I think the 4. should be a          IPDCOFCO.160    
C         1. (RAW 6/5/92), but in any case this criterion gave             IPDCOFCO.161    
C         poor results in a 2.5x3.75 GCM. The second, hardwired value      IPDCOFCO.162    
C         of temp has worked in that GCM and in the 1x1 FOAM model.        IPDCOFCO.163    
C         In either of these cases note that slmxr contains 2*temp,        IPDCOFCO.164    
C         but that this is cancelled by a division by 2*dzz later on.      IPDCOFCO.165    
C                                                                          IPDCOFCO.166    
C         In all cases, the maximum slope through which the diffusion      IPDCOFCO.167    
C         tensor can be rotated is set to 2*DZ(k)/slmxr(k).                IPDCOFCO.168    
C                                                                          IPDCOFCO.169    
C       temp=4.*DTTS*ahi(K)      ! Cox's criterion                         IPDCOFCO.170    
C       temp=2.e13               ! Oscar's FOAM value                      IPDCOFCO.171    
C       slmxr(K)=(temp+temp)*                                              IPDCOFCO.172    
!  For L_OFILTER = true -> MAX(DYUR(J),DXUR(1)*MIN(CSTR(J),CSTR(JFT0)))    IPDCOFCO.173    
!  For L_OFILTER = false-> MAX(DYUR(J),DXUR(1)*CSTR(J))                    IPDCOFCO.174    
!                                                                          IPDCOFCO.175    
C                                                                          IPDCOFCO.176    
        slmxr(K)=1./slope_max/DZ2RQ(2,K)  ! DZ2RQ(2,.) chosen arbitraril   IPDCOFCO.177    
 503  CONTINUE                                                             IPDCOFCO.178    
C                                                                          IPDCOFCO.179    
      IF(J+J_OFFSET.EQ.2) THEN                                             IPDCOFCO.180    
        DO 505 K=1,KM                                                      IPDCOFCO.181    
        DO 505 I=1,IMT                                                     IPDCOFCO.182    
          ry(I,K)=0.                                                       IPDCOFCO.183    
 505    CONTINUE                                                           IPDCOFCO.184    
        DO 508 K=1,KMP1                                                    IPDCOFCO.185    
        DO 508 I=1,IMT                                                     IPDCOFCO.186    
          rrzp(I,K)=0.                                                     IPDCOFCO.187    
 508    CONTINUE                                                           IPDCOFCO.188    
        DO 510 K=1,KM                                                      IPDCOFCO.189    
          DO 509 I=1,IMTM1                                                 IPDCOFCO.190    
            rxp(I,K)=FM(I,K)*FM(I+1,K)*(RHOS(I+1,K)-RHOS(I,K))*fxe         IPDCOFCO.191    
 509      CONTINUE                                                         IPDCOFCO.192    
      IF (L_OCYCLIC) THEN                                                  IPDCOFCO.193    
         rxp(IMT,K)=rxp(2,K)                                               IPDCOFCO.194    
      ELSE                                                                 IPDCOFCO.195    
         rxp(IMT,K)=0.0                                                    IPDCOFCO.196    
      ENDIF                                                                IPDCOFCO.197    
 510    CONTINUE                                                           IPDCOFCO.198    
      DO 777 K=1,KMP1                                                      IPDCOFCO.199    
      DO 777 I=1,IMT                                                       IPDCOFCO.200    
        tempa(I,K)=0.       ! Initialise tempa                             IPDCOFCO.201    
        tempb(I,K)=0.       ! Initialise tempb                             IPDCOFCO.202    
  777 CONTINUE                                                             IPDCOFCO.203    
                                                                           IPDCOFCO.204    
                                                                           IPDCOFCO.205    
        CALL STATEC(T,T(1,1,2),tempa,TDIF,TDIF(1,1,2),1,IMT,KM,2           IPDCOFCO.206    
     &,JMT                                                                 ORH7F404.56     
     &)                                                                    IPDCOFCO.209    
        CALL STATEC(T,T(1,1,2),tempb,TDIF,TDIF(1,1,2),2,IMT,KM,2           IPDCOFCO.210    
     &,JMT                                                                 ORH7F404.57     
     &)                                                                    IPDCOFCO.213    
                                                                           IPDCOFCO.214    
                                                                           IPDCOFCO.215    
      DO 778 I=1,IMT                                                       IPDCOFCO.216    
        tempa(I,KMP1)=tempa(I,KM)                                          IPDCOFCO.217    
        tempb(I,KMP1)=tempb(I,KM)                                          IPDCOFCO.218    
  778 CONTINUE                                                             IPDCOFCO.219    
        DO 520 K=2,KM,2                                                    IPDCOFCO.220    
        DO 520 I=1,IMT                                                     IPDCOFCO.221    
          rrzp(I,K )=tempa(I,K-1)-tempa(I,K  )                             IPDCOFCO.222    
          rrzp(I,K+1)=tempb(I,K )-tempb(I,K+1)                             IPDCOFCO.223    
 520    CONTINUE                                                           IPDCOFCO.224    
        DO 530 K=2,KM                                                      IPDCOFCO.225    
        DO 530 I=1,IMT                                                     IPDCOFCO.226    
      rrzp(I,K)=FM(I,K)*rrzp(I,K)*fxe                                      IPDCOFCO.227    
 530    CONTINUE                                                           IPDCOFCO.228    
        DO 540 I=1,IMT                                                     IPDCOFCO.229    
          rrzp(I,KMP1)=0.                                                  IPDCOFCO.230    
 540    CONTINUE                                                           IPDCOFCO.231    
C                                                                          IPDCOFCO.232    
C  Set e and esav to zero initially                                        IPDCOFCO.233    
C                                                                          IPDCOFCO.234    
        DO 542 M=1,3                                                       IPDCOFCO.235    
        DO 542 K=1,KMP1                                                    IPDCOFCO.236    
        DO 542 I=1,IMT                                                     IPDCOFCO.237    
          e(I,K,M)=0.                                                      IPDCOFCO.238    
 542    CONTINUE                                                           IPDCOFCO.239    
        DO 544 M=1,NT                                                      IPDCOFCO.240    
        DO 544 K=1,KM                                                      IPDCOFCO.241    
        DO 544 I=1,IMT                                                     IPDCOFCO.242    
          esav(I,K,M)=0.                                                   IPDCOFCO.243    
 544    CONTINUE                                                           IPDCOFCO.244    
      ENDIF                                                                IPDCOFCO.245    
C                                                                          IPDCOFCO.246    
C --------------------------------------------------------------           IPDCOFCO.247    
CL Calculation of delta-rho in all three model directions for              IPDCOFCO.248    
CL all points in the slab                                                  IPDCOFCO.249    
C --------------------------------------------------------------           IPDCOFCO.250    
C                                                                          IPDCOFCO.251    
      DO 546 K=1,KMP1                                                      IPDCOFCO.252    
      DO 546 I=1,IMT                                                       IPDCOFCO.253    
        rrz(I,K)=rrzp(I,K)                                                 IPDCOFCO.254    
 546  CONTINUE                                                             IPDCOFCO.255    
      DO 548 K=1,KM                                                        IPDCOFCO.256    
      DO 548 I=1,IMT                                                       IPDCOFCO.257    
        rx(I,K)=rxp(I,K)                                                   IPDCOFCO.258    
        rym(I,K)=ry(I,K)                                                   IPDCOFCO.259    
 548  CONTINUE                                                             IPDCOFCO.260    
                                                                           IPDCOFCO.261    
                                                                           IPDCOFCO.262    
        CALL STATEC(TP,TP(1,1,2),tempa,TDIF,TDIF(1,1,2),1,IMT,KM,J+1       IPDCOFCO.263    
     &,JMT                                                                 ORH7F404.58     
     &)                                                                    IPDCOFCO.266    
        CALL STATEC(TP,TP(1,1,2),tempb,TDIF,TDIF(1,1,2),2,IMT,KM,J+1       IPDCOFCO.267    
     &,JMT                                                                 ORH7F404.59     
     &)                                                                    IPDCOFCO.270    
                                                                           IPDCOFCO.271    
                                                                           IPDCOFCO.272    
      DO 779 I=1,IMT                                                       IPDCOFCO.273    
        tempa(I,KMP1)=tempa(I,KM)                                          IPDCOFCO.274    
        tempb(I,KMP1)=tempb(I,KM)                                          IPDCOFCO.275    
  779 CONTINUE                                                             IPDCOFCO.276    
      DO 550 K=2,KM,2                                                      IPDCOFCO.277    
      DO 550 I=1,IMT                                                       IPDCOFCO.278    
        rrzp(I,K )=tempa(I,K-1)-tempa(I,K  )                               IPDCOFCO.279    
        rrzp(I,K+1)=tempb(I,K )-tempb(I,K+1)                               IPDCOFCO.280    
 550  CONTINUE                                                             IPDCOFCO.281    
      DO 560 K=2,KM                                                        IPDCOFCO.282    
      DO 560 I=1,IMT                                                       IPDCOFCO.283    
      rrzp(I,K)=FMP(I,K)*rrzp(I,K)*fxe                                     IPDCOFCO.284    
 560  CONTINUE                                                             IPDCOFCO.285    
      DO 570 I=1,IMT                                                       IPDCOFCO.286    
        rrzp(I,KMP1)=0.                                                    IPDCOFCO.287    
 570  CONTINUE                                                             IPDCOFCO.288    
      DO 580 K=1,KM                                                        IPDCOFCO.289    
        DO 575 I=1,IMTM1                                                   IPDCOFCO.290    
          rxp(I,K)=FMP(I,K)*FMP(I+1,K)*(RHON(I+1,K)-RHON(I,K))*fxe         IPDCOFCO.291    
 575    CONTINUE                                                           IPDCOFCO.292    
      IF (L_OCYCLIC) THEN                                                  IPDCOFCO.293    
         rxp(IMT,K)=rxp(2,K)                                               IPDCOFCO.294    
      ELSE                                                                 IPDCOFCO.295    
         rxp(IMT,K)=0.0                                                    IPDCOFCO.296    
      ENDIF                                                                IPDCOFCO.297    
      DO 576 I=1,IMT                                                       IPDCOFCO.298    
        ry (I,K)=FMP(I,K)*FM (I  ,K)*(RHON(I  ,K)-RHOS(I,K))*fxe           IPDCOFCO.299    
 576  CONTINUE                                                             IPDCOFCO.300    
 580  CONTINUE                                                             IPDCOFCO.301    
C                                                                          IPDCOFCO.302    
C --------------------------------------------------------------           IPDCOFCO.303    
CL  In this section, (d-rho/d-x , d-rho/d-y , d-rho/d-z) (contained        IPDCOFCO.304    
CL  in e) and the 1st row of the diffusion matrix (contained in fk1)       IPDCOFCO.305    
CL  are calculated.                                                        IPDCOFCO.306    
CL  A numerical stability check on d-rho/d-z, Equation (1.23), is          IPDCOFCO.307    
CL  also performed.                                                        IPDCOFCO.308    
C --------------------------------------------------------------           IPDCOFCO.309    
C                                                                          IPDCOFCO.310    
      DO 590 K=1,KM                                                        IPDCOFCO.311    
        DO 585 I=1,IMTM1                                                   IPDCOFCO.312    
          e(I,K,1)=(fxb*CSTR(J))*rx(I,K)*DXU2RQ(I,K)                       IPDCOFCO.313    
          e(I,K,2)=(ry(I+1,K)+ry(I,K)+rym(I+1,K)+rym(I,K))*DYT4R(J)        IPDCOFCO.314    
          e(I,K,3)=(rrz(I,K)+rrz(I+1,K)+rrz(I,K+1)+rrz(I+1,K+1))           IPDCOFCO.315    
     &              *fxc*DZ2RQ(I,K)                                        IPDCOFCO.316    
          tempa(I,K)=-SQRT(e(I,K,1)*e(I,K,1)+e(I,K,2)*e(I,K,2))            IPDCOFCO.317    
     &                *(DZ2RQ(I,K)*slmxr(K))                               IPDCOFCO.318    
 585    CONTINUE                                                           IPDCOFCO.319    
      DO I=1,3                                                             IPDCOFCO.320    
        IF (L_OCYCLIC) THEN                                                IPDCOFCO.321    
           e(IMT,K,I)=e(2,K,I)                                             IPDCOFCO.322    
        ELSE                                                               IPDCOFCO.323    
           e(IMT,K,I)=0.0                                                  IPDCOFCO.324    
        ENDIF                                                              IPDCOFCO.325    
!                                                                          IPDCOFCO.326    
      ENDDO                                                                IPDCOFCO.327    
!                                                                          IPDCOFCO.328    
      IF (L_OCYCLIC) THEN                                                  IPDCOFCO.329    
         tempa(IMT,K)=tempa(2,K)                                           IPDCOFCO.330    
      ELSE                                                                 IPDCOFCO.331    
         tempa(IMT,K)=0.0                                                  IPDCOFCO.332    
      ENDIF                                                                IPDCOFCO.333    
 590  CONTINUE                                                             IPDCOFCO.334    
C                                                                          IPDCOFCO.335    
C  Performance of stability check                                          IPDCOFCO.336    
C                                                                          IPDCOFCO.337    
      DO 600 K=1,KM                                                        IPDCOFCO.338    
      DO 600 I=1,IMT                                                       IPDCOFCO.339    
        IF(e(I,K,3).GT.tempa(I,K))  e(I,K,3)=tempa(I,K)                    IPDCOFCO.340    
 600  CONTINUE                                                             IPDCOFCO.341    
C                                                                          IPDCOFCO.342    
 630  CONTINUE                                                             IPDCOFCO.343    
      IF (L_OMIXLAY) THEN                                                  IPDCOFCO.344    
C                                                                          IPDCOFCO.345    
C  Set e(I,K,1) to zero in Mixed Layer                                     IPDCOFCO.346    
C                                                                          IPDCOFCO.347    
      DO 635 K=1,KM                                                        IPDCOFCO.348    
      DO 635 I=1,IMT                                                       IPDCOFCO.349    
        IF ((mld(I)*100.) .GE. ZDZ(K)) e(I,K,1)=0.                         IPDCOFCO.350    
 635  CONTINUE                                                             IPDCOFCO.351    
C                                                                          IPDCOFCO.352    
      ENDIF                                                                IPDCOFCO.353    
!                                                                          IPDCOFCO.354    
      DO 640 K=1,KM                                                        IPDCOFCO.355    
      DO 640 I=1,IMT                                                       IPDCOFCO.356    
        tempb(I,K)=-e(I,K,1)/(e(I,K,3)*e(I,K,3)+fxa)                       IPDCOFCO.357    
        fk1(I,K,1)=fxd                                                     IPDCOFCO.358    
        fk1(I,K,2)=e(I,K,2)*tempb(I,K)                                     IPDCOFCO.359    
        fk1(I,K,3)=e(I,K,3)*tempb(I,K)                                     IPDCOFCO.360    
 640  CONTINUE                                                             IPDCOFCO.361    
C                                                                          IPDCOFCO.362    
C --------------------------------------------------------------           IPDCOFCO.363    
CL  Previous section repeated for 2nd and 3rd rows                         IPDCOFCO.364    
CL  of diffusion matrix (contained in fk2 and fk3).                        IPDCOFCO.365    
C --------------------------------------------------------------           IPDCOFCO.366    
C                                                                          IPDCOFCO.367    
      DO 650 K=1,KM                                                        IPDCOFCO.368    
        DO 645 I=2,IMT                                                     IPDCOFCO.369    
          e(I,K,1)=(rxp(I,K)+rxp(I-1,K)+rx(I,K)+rx(I-1,K))                 IPDCOFCO.370    
     &              *CSR(J)*DXT4RQ(I,K)                                    IPDCOFCO.371    
          e(I,K,2)=ry(I,K)*DYUR(J)                                         IPDCOFCO.372    
          e(I,K,3)=(rrzp(I,K)+rrz(I,K)+rrzp(I,K+1)+rrz(I,K+1))             IPDCOFCO.373    
     &            *fxc*DZ2RQ(I,K)                                          IPDCOFCO.374    
          tempa(I,K)=-SQRT(e(I,K,1)*e(I,K,1)+e(I,K,2)*e(I,K,2))            IPDCOFCO.375    
     &              *(DZ2RQ(I,K)*slmxr(K))                                 IPDCOFCO.376    
 645    CONTINUE                                                           IPDCOFCO.377    
      DO I=1,3                                                             IPDCOFCO.378    
        IF (L_OCYCLIC) THEN                                                IPDCOFCO.379    
           e(1,K,I)=e(IMTM1,K,I)                                           IPDCOFCO.380    
        ELSE                                                               IPDCOFCO.381    
           e(1,K,I)=0.0                                                    IPDCOFCO.382    
        ENDIF                                                              IPDCOFCO.383    
!                                                                          IPDCOFCO.384    
      ENDDO                                                                IPDCOFCO.385    
!                                                                          IPDCOFCO.386    
      IF (L_OCYCLIC) THEN                                                  IPDCOFCO.387    
         tempa(1,K)=tempa(IMTM1,K)                                         IPDCOFCO.388    
      ELSE                                                                 IPDCOFCO.389    
         tempa(1,K)=0.0                                                    IPDCOFCO.390    
      ENDIF                                                                IPDCOFCO.391    
 650  CONTINUE                                                             IPDCOFCO.392    
      DO 660 K=1,KM                                                        IPDCOFCO.393    
      DO 660 I=1,IMT                                                       IPDCOFCO.394    
        IF(e(I,K,3).GT.tempa(I,K))  e(I,K,3)=tempa(I,K)                    IPDCOFCO.395    
 660  CONTINUE                                                             IPDCOFCO.396    
 690  CONTINUE                                                             IPDCOFCO.397    
      IF (L_OMIXLAY) THEN                                                  IPDCOFCO.398    
C                                                                          IPDCOFCO.399    
C  Set e(I,K,2) to zero in Mixed Layer                                     IPDCOFCO.400    
C                                                                          IPDCOFCO.401    
      DO 695 K=1,KM                                                        IPDCOFCO.402    
      DO 695 I=1,IMT                                                       IPDCOFCO.403    
        IF ((mld(I)*100.) .GT. ZDZ(K)) e(I,K,2)=0.                         IPDCOFCO.404    
 695  CONTINUE                                                             IPDCOFCO.405    
C                                                                          IPDCOFCO.406    
      ENDIF                                                                IPDCOFCO.407    
      DO 700 K=1,KM                                                        IPDCOFCO.408    
      DO 700 I=1,IMT                                                       IPDCOFCO.409    
        tempb(I,K)=-e(I,K,2)/(e(I,K,3)*e(I,K,3)+fxa)                       IPDCOFCO.410    
        fk2(I,K,1)=e(I,K,1)*tempb(I,K)                                     IPDCOFCO.411    
        fk2(I,K,2)=fxd                                                     IPDCOFCO.412    
        fk2(I,K,3)=e(I,K,3)*tempb(I,K)                                     IPDCOFCO.413    
 700  CONTINUE                                                             IPDCOFCO.414    
C                                                                          IPDCOFCO.415    
      DO 708 K=2,KM                                                        IPDCOFCO.416    
        DO 705 I=2,IMT                                                     IPDCOFCO.417    
          e(I,K,1)=(rx(I,K-1)+rx(I-1,K-1)+rx(I,K)+rx(I-1,K))               IPDCOFCO.418    
     &              *CSTR(J)*DXT4RQ(I,K)                                   IPDCOFCO.419    
          e(I,K,2)=(ry(I,K-1)+rym(I,K-1)+ry(I,K)+rym(I,K))*DYT4R(J)        IPDCOFCO.420    
          e(I,K,3)=rrz(I,K)*DZZ2RQ(I,K)*fxb                                IPDCOFCO.421    
          tempb(I,K)=e(I,K,1)*e(I,K,1)+e(I,K,2)*e(I,K,2)                   IPDCOFCO.422    
          tempa(I,K)=-SQRT(tempb(I,K))*(DZZ2RQ(I,K)*slmxr(K))              IPDCOFCO.423    
 705    CONTINUE                                                           IPDCOFCO.424    
      IF (L_OCYCLIC) THEN                                                  IPDCOFCO.425    
         DO I = 1,3                                                        IPDCOFCO.426    
            e(1,K,I)=e(IMTM1,K,I)                                          IPDCOFCO.427    
         ENDDO                                                             IPDCOFCO.428    
         tempa(1,K)=tempa(IMTM1,K)                                         IPDCOFCO.429    
         tempb(1,K)=tempb(IMTM1,K)                                         IPDCOFCO.430    
      ELSE                                                                 IPDCOFCO.431    
         DO I = 1,3                                                        IPDCOFCO.432    
            e(1,K,I)=0.0                                                   IPDCOFCO.433    
         ENDDO                                                             IPDCOFCO.434    
         tempa(1,K)=0.0                                                    IPDCOFCO.435    
         tempb(1,K)=0.0                                                    IPDCOFCO.436    
      ENDIF                                                                IPDCOFCO.437    
!                                                                          IPDCOFCO.438    
 708  CONTINUE                                                             IPDCOFCO.439    
      K=1                                                                  IPDCOFCO.440    
        DO 710 I=2,IMT                                                     IPDCOFCO.441    
          e(I,K,1)=(rx(I,K)+rx(I-1,K))*2.*CSTR(J)*DXT4RQ(I,K)              IPDCOFCO.442    
          e(I,K,2)=(ry(I,K)+rym(I,K))*2.*DYT4R(J)                          IPDCOFCO.443    
          e(I,K,3)=rrz(I,K)*DZZ2RQ(I,K)*fxb                                IPDCOFCO.444    
          tempb(I,K)=e(I,K,1)*e(I,K,1)+e(I,K,2)*e(I,K,2)                   IPDCOFCO.445    
          tempa(I,K)=-SQRT(tempb(I,K))*(DZZ2RQ(I,K)*slmxr(K))              IPDCOFCO.446    
 710    CONTINUE                                                           IPDCOFCO.447    
      IF (L_OCYCLIC) THEN                                                  IPDCOFCO.448    
         DO I = 1,3                                                        IPDCOFCO.449    
            e(1,K,I)=e(IMTM1,K,I)                                          IPDCOFCO.450    
         ENDDO                                                             IPDCOFCO.451    
         tempa(1,K)=tempa(IMTM1,K)                                         IPDCOFCO.452    
         tempb(1,K)=tempb(IMTM1,K)                                         IPDCOFCO.453    
      ELSE                                                                 IPDCOFCO.454    
         DO I = 1,3                                                        IPDCOFCO.455    
            e(1,K,I)=0.0                                                   IPDCOFCO.456    
         ENDDO                                                             IPDCOFCO.457    
         tempa(1,K)=0.0                                                    IPDCOFCO.458    
         tempb(1,K)=0.0                                                    IPDCOFCO.459    
      ENDIF                                                                IPDCOFCO.460    
C                                                                          IPDCOFCO.461    
      DO 720 K=1,KM                                                        IPDCOFCO.462    
      DO 720 I=1,IMT                                                       IPDCOFCO.463    
        IF(e(I,K,3).GT.tempa(I,K))  e(I,K,3)=tempa(I,K)                    IPDCOFCO.464    
 720  CONTINUE                                                             IPDCOFCO.465    
 750  CONTINUE                                                             IPDCOFCO.466    
      IF (L_OMIXLAY) THEN                                                  IPDCOFCO.467    
C                                                                          IPDCOFCO.468    
C  Set e(I,K,3) to zero in Mixed Layer                                     IPDCOFCO.469    
C                                                                          IPDCOFCO.470    
      DO 755 K=1,KM                                                        IPDCOFCO.471    
      DO 755 I=1,IMT                                                       IPDCOFCO.472    
        IF ((mld(I)*100.) .GE. ZDZ(K)) THEN                                IPDCOFCO.473    
          e(I,K,3)=0.                                                      IPDCOFCO.474    
          tempb(I,K)=0.                                                    IPDCOFCO.475    
        ENDIF                                                              IPDCOFCO.476    
 755  CONTINUE                                                             IPDCOFCO.477    
C                                                                          IPDCOFCO.478    
      ENDIF                                                                IPDCOFCO.479    
      DO 760 K=1,KM                                                        IPDCOFCO.480    
      DO 760 I=1,IMT                                                       IPDCOFCO.481    
        tempa(I,K)=fxd/(e(I,K,3)*e(I,K,3)+fxa)                             IPDCOFCO.482    
C                                                                          IPDCOFCO.483    
C At this stage, fk3(I,K,3) only contains the delta-squared term;          IPDCOFCO.484    
C the epsilon term is added below.                                         IPDCOFCO.485    
C                                                                          IPDCOFCO.486    
        fk3(I,K,3)=tempa(I,K)*tempb(I,K)                                   IPDCOFCO.487    
        tempb(I,K)=-e(I,K,3)*tempa(I,K)                                    IPDCOFCO.488    
        fk3(I,K,1)=e(I,K,1)*tempb(I,K)                                     IPDCOFCO.489    
        fk3(I,K,2)=e(I,K,2)*tempb(I,K)                                     IPDCOFCO.490    
 760  CONTINUE                                                             IPDCOFCO.491    
C                                                                          IPDCOFCO.492    
C --------------------------------------------------------------           IPDCOFCO.493    
CL  Creates the diffusion matrix in its entirety                           IPDCOFCO.494    
C --------------------------------------------------------------           IPDCOFCO.495    
C                                                                          IPDCOFCO.496    
      DO 770 L=1,3                                                         IPDCOFCO.497    
      DO 770 K=1,KM                                                        IPDCOFCO.498    
      DO 770 I=1,IMT                                                       IPDCOFCO.499    
        fk1(I,K,L)=fk1(I,K,L)*ahi(K)                                       IPDCOFCO.500    
        fk2(I,K,L)=fk2(I,K,L)*ahi(K)                                       IPDCOFCO.501    
        fk3(I,K,L)=fk3(I,K,L)*ahi(K)                                       IPDCOFCO.502    
 770  CONTINUE                                                             IPDCOFCO.503    
C                                                                          IPDCOFCO.504    
C --------------------------------------------------------------           IPDCOFCO.505    
CL  To prevent horizontal roughnesses in the tracer fields                 IPDCOFCO.506    
CL  small hor. and vert. diffusion coeffs. are added to the                IPDCOFCO.507    
CL  relevant diagonal elements of the diffusion matrix.                    IPDCOFCO.508    
CL  The epsilon term is also added in to fk3(I,K,3).                       IPDCOFCO.509    
C --------------------------------------------------------------           IPDCOFCO.510    
C                                                                          IPDCOFCO.511    
      DO 780 K=1,KM                                                        IPDCOFCO.512    
      DO 780 I=1,IMT                                                       IPDCOFCO.513    
        fk1(I,K,1)=fk1(I,K,1)+AH                                           IPDCOFCO.514    
        fk2(I,K,2)=fk2(I,K,2)+AH                                           IPDCOFCO.515    
        fk3(I,K,3)=fk3(I,K,3)+gnu(I,K)                                     IPDCOFCO.516    
 780  CONTINUE                                                             IPDCOFCO.517    
C                                                                          IPDCOFCO.518    
       DO K=1,KM-1                                                         IPDCOFCO.519    
         DO I=1,IMT                                                        IPDCOFCO.520    
          FK3(I,K,3)=FK3(I,K,3)*FM(I,K)                                    IPDCOFCO.521    
         END DO                                                            IPDCOFCO.522    
       END DO                                                              IPDCOFCO.523    
C                                                                          IPDCOFCO.524    
 790  CONTINUE                                                             IPDCOFCO.525    
      RETURN                                                               IPDCOFCO.526    
      END                                                                  IPDCOFCO.527    
*ENDIF                                                                     IPDCOFCO.528