*IF DEF,OCEAN                                                              BLOKINIT.2      
C ******************************COPYRIGHT******************************    GTS2F400.559    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.560    
C                                                                          GTS2F400.561    
C Use, duplication or disclosure of this code is subject to the            GTS2F400.562    
C restrictions as set forth in the contract.                               GTS2F400.563    
C                                                                          GTS2F400.564    
C                Meteorological Office                                     GTS2F400.565    
C                London Road                                               GTS2F400.566    
C                BRACKNELL                                                 GTS2F400.567    
C                Berkshire UK                                              GTS2F400.568    
C                RG12 2SZ                                                  GTS2F400.569    
C                                                                          GTS2F400.570    
C If no contract has been raised with this copy of the code, the use,      GTS2F400.571    
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.572    
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.573    
C Modelling at the above address.                                          GTS2F400.574    
C ******************************COPYRIGHT******************************    GTS2F400.575    
C                                                                          GTS2F400.576    

      SUBROUTINE BLOKINIT(                                                  1,52BLOKINIT.3      
C                                                                          BLOKINIT.4      
CLL====================================================================    BLOKINIT.5      
CLL                                                                        BLOKINIT.6      
CLL  Subroutine : BLOKINIT                                                 BLOKINIT.7      
CLL                                                                        BLOKINIT.8      
CLL  Author : R.Hill                                                       BLOKINIT.9      
CLL                                                                        BLOKINIT.10     
CLL  Date   : 01.09.94                                                     BLOKINIT.11     
CLL                                                                        BLOKINIT.12     
CLL  Reviewer :                                                            BLOKINIT.13     
CLL                                                                        BLOKINIT.14     
CLL  Version  : 3.4                                                        BLOKINIT.15     
CLL                                                                        BLOKINIT.16     
CLL  Purpose: Carries out the initialisation of arrays local to            BLOKINIT.17     
CLL           blocks of rows. Once this is done, BLOKCALC is called        ORH5F401.3      
CLL           which is the main row by row calculation.                    BLOKINIT.19     
!     Modification History:                                                ORH1F305.3794   
!   Version    Date     Details                                            ORH1F305.3795   
!   -------  -------    ------------------------------------------         ORH1F305.3796   
!     3.5    16.01.95   Remove *IF dependency. R.Hill                      ORH1F305.3797   
!     4.3               Compute RHOSRN to be passed from BLOKINIT to       ORH6F404.751    
!                       ROWCALC for mpp code use.                          ORH6F404.752    
!                       Also Bug fix for when L_OEXTRAP is defined.        ORH6F404.753    
!                       R. Hill                                            ORH6F404.754    
!     4.4    14.08.97   General tidy up to ease maintenance,               ORH6F404.755    
!                       readability and future development. R.Hill         ORH6F404.756    
!                                                                          ORH6F404.757    
!   4.4  15/08/97  Remove SKIPLAND code. R. Hill                           ORH7F404.77     
CLL   4.4    15/06/97   Initialise barotropic mode for free surface        ORL1F404.770    
CLL                     solution.                           R.Lenton       ORL1F404.771    
!     4.5    05/08/97   Changes for open boundary code. M.Bell/S.I.        OSI1F405.99     
CLL   4.5     3.11.98   Read in row j+2 data (TPP etc) if required         OOM3F405.300    
CLL                     Calculate row j+2 total velocity and save          OOM3F405.301    
CLL                     row j+2 baroclinic velocity.                       OOM3F405.302    
CLL                     Calculate biharmonic mom diff variables D2U,       OOM3F405.303    
CLL                     D2V.       M. Roberts                              OOM3F405.304    
CLL   4.5   3.11.98   Call OUTFL_BC to set up boundary conditions on       OOM2F405.138    
CLL                   velocities for Med/Hud outflow    M. Roberts         OOM2F405.139    
CLL   4.5  10/11/98  Call CALCDIFF instead of CALCESAV if new              OOM1F405.305    
CLL                  isopycnal diffusion required.                         OOM1F405.306    
CLL                  Initialise variables used in new isopycnal            OOM1F405.307    
CLL                  diffusion and GM schemes.        M. Roberts           OOM1F405.308    
!LL   4.5     17/09/98 Update calls to timer, required because of          GPB8F405.72     
!LL                    new barrier inside timer.         P.Burton          GPB8F405.73     
CLL   4.5    26/01/98 Change variable names and logicals for use with      ODC1F405.19     
CLL          the freedrift scheme for sea-ice advection. D.Cresswell.      ODC1F405.20     
!     4.5     5/6/97   Introduce a call to ADV_SOURCE (and a new           OSY1F405.13     
!                      logical L_BOOTSTRAP) to calculate FLUXST for        OSY1F405.14     
!                      the first row of the block. Redefine FVST to        OSY1F405.15     
!                      be equal to the south face velocity with no         OSY1F405.16     
!                      grid-spacing factors etc. as previously.            OSY1F405.17     
!                      D.Storkey                                           OSY1F405.18     
CLL                                                                        BLOKINIT.20     
CLL  Calling Routine : BLOKCNTL                                            BLOKINIT.21     
CLL                                                                        BLOKINIT.22     
C=======================================================================   BLOKINIT.23     
CL   Argument list                                                         BLOKINIT.24     
*CALL ARGSIZE                                                              BLOKINIT.25     
*CALL ARGD1                                                                BLOKINIT.26     
*CALL ARGDUMO                                                              BLOKINIT.27     
*CALL ARGPTRO                                                              BLOKINIT.28     
*CALL ARGOCALL                                                             BLOKINIT.29     
*CALL ARGOINDX                                                             ORH7F402.313    
*CALL COCAROWS                                                             BLOKINIT.30     
     &,ISX, ISY, WSX_LEADS, WSY_LEADS                                      OLA0F404.11     
     &,TTN                                                                 BLOKINIT.32     
     &,TMT,                                                                BLOKINIT.34     
*CALL COCAWRKA                                                             BLOKINIT.35     
*CALL ARGOC2DG                                                             OOM1F405.438    
     &,L_OBULKRI,L_OWINDMIX,L_OBULKMAXMLD                                  OOM1F405.439    
     &,CARYSALT,CARYHEAT,FLXTOICE,LAMBDA_LARGE                             OOM1F405.440    
     &,co2_tot                                                             BLOKINIT.37     
     &,LL_ASS_BTRP,DU_ASS_BTRP,DV_ASS_BTRP                                 ORH1F305.3798   
     &,rxp,ry,rrzp,esav                                                    ORH7F402.316    
     &,VISOPN                                                              OLA0F401.104    
     &,drhob1p,drhob2p                                                     OLA0F401.105    
     &,MLDSAV,RHOSRN,RHOSRNA,RHOSRNB                                       OOM1F405.441    
     &,IMT_IPD_NOMIX_ARG                                                   ORH1F305.3799   
     &)                                                                    BLOKINIT.46     
C                                                                          BLOKINIT.47     
      IMPLICIT NONE                                                        BLOKINIT.48     
C                                                                          BLOKINIT.49     
C---------------------------------------------------------------------     BLOKINIT.50     
C  DEFINE GLOBAL DATA                                                      BLOKINIT.51     
C---------------------------------------------------------------------     BLOKINIT.52     
C                                                                          BLOKINIT.53     
*CALL OARRYSIZ                                                             ORH6F401.32     
*CALL TYPSIZE                                                              BLOKINIT.54     
*CALL TYPD1                                                                BLOKINIT.55     
*CALL TYPDUMO                                                              BLOKINIT.56     
*CALL TYPPTRO                                                              BLOKINIT.57     
*CALL TYPOINDX                                                             PXORDER.5      
*CALL TYPOCALL                                                             BLOKINIT.58     
*CALL COCTROWS                                                             BLOKINIT.59     
*CALL COCTWRKA                                                             BLOKINIT.60     
*CALL CNTLOCN                                                              ORH1F305.3800   
*CALL OTIMER                                                               ORH1F305.3802   
C                                                                          BLOKINIT.61     
      REAL                                                                 BLOKINIT.62     
     & TMT(JMT,KM)      ! Meridional mass transport                        BLOKINIT.63     
     &,co2_tot          ! Total net air-sea flux of CO2                    BLOKINIT.65     
     &,TTN(8,JMT,NTMIN2)      ! N'ward trnspt of tracers                   ORH1F305.3803   
     &,rxp(IMT_IPD,KM_IPD)    ! OUT delta-rho x dirn row J+1 (E face)      ORH1F305.3804   
     &,ry(IMT_IPD,KM_IPD)     ! OUT delta-rho y dirn row J (N face)        ORH1F305.3805   
     &,rrzp(IMT_IPD,KMP1_IPD) ! OUT delta-rho z dirn row J+1 (top face)    ORH1F305.3806   
     &,esav(IMT_IPD,KM_IPD,NT_IPD) ! OUT initial e(I,K,2) for IPDFXCL      ORH1F305.3807   
     &,VISOPN(IMT_GM,KM_GM)   ! G&McW v* at north face of T gridbox        OLA0F401.106    
     &,drhob1p(IMT_GM),drhob2p(IMT_GM,2)                                   OLA0F401.107    
*CALL TYPOC2DG                                                             OOM1F405.445    
     &,mldsav(IMT_IPD_MIX,JMT_IPD_MIX) ! IN from previous timestep         ORH1F305.3808   
     &,CARYSALT(IMT,JMT),CARYHEAT(IMT,JMT),FLXTOICE(IMT,JMT) ! IN ICE      OOM1F405.442    
      REAL                                                                 OLA0F404.12     
     & ISX(IMT _idr,JMTM1_idr)        ! IN Stress under sea ice            ODC1F405.21     
     &,ISY(IMT_idr,JMTM1_idr)        !    fraction                         ODC1F405.22     
     &,WSX_LEADS(IMT_idr,JMTM1_idr)     ! IN Stress under leads            ODC1F405.23     
     &,WSY_LEADS(IMT_idr,JMTM1_idr)  !    fraction                         ODC1F405.24     
C                                                                          BLOKINIT.77     
C variables related to Griffies GM implementation                          OOM1F405.1896   
       REAL                                                                OOM1F405.1897   
     &  adv_vetiso(imt_gmm,km_gmm),                                        OOM1F405.1898   
     &  adv_vbtiso(imt_gmm,0:km_gmm),adv_fbiso(imt_gmm,0:km_gmm)           OOM1F405.1899   
                                                                           OOM1F405.1900   
C                                                                          BLOKINIT.78     
*IF DEF,MPP                                                                ORH9F402.147    
        ! Variables required in message passing                            ORH9F402.154    
        INTEGER PE_SEND, PE_RECV, INFO                                     ORH9F402.155    
*ENDIF                                                                     ORH9F402.156    
      INTEGER                                                              BLOKINIT.79     
     &    IMT_IPD_NOMIX_ARG  ! for dynamic allocation                      ORH7F402.317    
C                                                                          BLOKINIT.82     
      REAL                                                                 BLOKINIT.84     
     & DV_ASS_BTRP(IMT_ASM,JMT_ASM)                                        ORH1F305.3810   
     &,DU_ASS_BTRP(IMT_ASM,JMT_ASM)                                        ORH1F305.3811   
      LOGICAL                                                              BLOKINIT.86     
     & LL_ASS_BTRP                                                         BLOKINIT.87     
C                                                                          BLOKINIT.89     
CL  ------------------------------------------------------------------     BLOKINIT.90     
C  DEFINE LOCAL VARIABLES                                                  BLOKINIT.91     
C---------------------------------------------------------------------     BLOKINIT.92     
      INTEGER I,             ! Grid point index (Zonal)                    BLOKINIT.93     
     &     J,                ! Grid point index (Meridional)               BLOKINIT.94     
     &     K,                ! Grid point index (Vertical)                 BLOKINIT.95     
     &     L,                ! Ocean segment loop control                  BLOKINIT.96     
     &     M,                ! Tracer indicator                            BLOKINIT.97     
     &     N,                ! Control index                               BLOKINIT.98     
     &     JJ,               ! Meridional grid pt index                    BLOKINIT.99     
     &     LL,               ! Loop control for energy components          BLOKINIT.100    
     &     KMP,              ! KM + 1                                      BLOKINIT.104    
     &     JTO                                                             ORH0F405.5      
     &,    JREAD             ! The value of J to use when reading          BLOKINIT.111    
                             ! data from disk for bootstrapping            BLOKINIT.112    
      REAL DIAG1    ! Temporary storage of diagonal diff                   ORH0F405.6      
     &,    DIAG2             !    "         "    "     "      "            BLOKINIT.116    
     &,    FX                ! Temporary value                             BLOKINIT.117    
     &,    FXA               ! Temporary value                             BLOKINIT.125    
     &,    FXB               ! Temporary value                             BLOKINIT.126    
     &  ,pt1,pt2,pt3        ! temporary variables                          OOM3F405.305    
     &,    SFUBM(IMT)        ! SFUB at J - 1                               BLOKINIT.128    
     &,    SFVBM(IMT)        ! SFVB at J - 1                               BLOKINIT.129    
     &,    RHOSM(IMT,KM)     ! RHOS at J - 1                               BLOKINIT.130    
     &,    RHOSM2(IMT,KM)    ! RHOS at J - 2                               BLOKINIT.131    
     &,RHOSRN(IMT,KM),RHOSRNA(IMT,KM+1),RHOSRNB(IMT,KM+1)                  OOM1F405.443    
C      FOR ROW JMTM1_GLOBAL                                                OOM1F405.444    
     &,    fxe               ! local constant                              BLOKINIT.132    
     &,    tempa(IMT,KMP1)   ! workspace                                   BLOKINIT.133    
     &,    tempb(IMT,KMP1)   ! workspace                                   BLOKINIT.134    
C local variables related to Griffies isopycnal diffusion + GM scheme      OOM1F405.1901   
       REAL at,bt,ab,bb,epsln,ath0,sc,absstn,abssbn,                       OOM1F405.1902   
     &   p5,c0,c1,slmxr,dtxsqr(km),top_bc(km),bot_bc(km),                  OOM1F405.1903   
c     &   athkdftu_bi(imt_gmm,km_gmm),athkdftv_bi(imt_gmm,km_gmm),         OOM1F405.1904   
     &   stn_d2(imt,km),sbn_d2(imt,km)                                     OOM1F405.1905   
                                                                           OOM1F405.1906   
       REAL part1, part2, Ath0_j, Ath0_jp1                                 OOM1F405.1907   
                                                                           OOM1F405.1908   
       REAL athkdftu_bi,athkdftv_bi,athstn,athsbn                          OOM1F405.1909   
       REAL athkdftu_mom(imt_gmm,km_gmm),athkdftv_mom(imt_gmm,km_gmm)      OOM1F405.1910   
                                                                           OOM1F405.1911   
       REAL tanh_temp(imt*2)                                               OOM1F405.1912   
                                                                           OOM1F405.1913   
                                                                           OOM1F405.1914   
       INTEGER km1,kp1                                                     OOM1F405.1915   
                                                                           OOM1F405.1916   
      REAL WATERFLUX_ICE(IMT)  ! WATER FLUX DUE TO ICE, ROW J              OOM1F405.446    
     &, LAMBDA_LARGE    ! IN VALUE USED IN CALCULATING MINIMUM MLD         OOM1F405.447    
      LOGICAL L_OBULKRI,L_OWINDMIX,L_OBULKMAXMLD                           OOM1F405.448    
      REAL WSXM(IMT),WSYM(IMT) ! wind stress on row j-1                    OLA3F403.156    
      REAL WSX_LEADSM(IMT),WSY_LEADSM(IMT),                                ODC1F405.37     
     &                                 !wind stress on leads on row j-1    ODC1F405.38     
     &     ISXM(IMT),ISYM(IMT)             !ocean-ice stress on row j-1    ODC1F405.39     
*IF DEF,MPP                                                                PXBLOKIN.1      
      REAL UBTBBCJ(IMT)  !\  barotropic velocities for points              ORL1F404.772    
     &    ,VBTBBCJ(IMT)  !/  outside standard halo.                        ORL1F404.773    
*ENDIF                                                                     PXBLOKIN.2      
                                                                           ORL1F404.774    
      LOGICAL                                                              OSY1F405.19     
     & L_BOOTSTRAP           !  =.true. For call to ADV_SOURCE.            OSY1F405.20     
C dummy local variables used in call to ADV_SOURCE                         OSY1F405.21     
      REAL tempmed(imt,km),temptend(km,nt,4)                               OSY1F405.22     
      INTEGER                                                              OLA0F404.17     
     & J_idr,J_idrM1 !  value dependent on L_ICEFREEDR                     ODC1F405.25     
        INTEGER top_flow                                                   OOM2F405.140    
C                                                                          BLOKINIT.135    
C     This condition is not currently allowed in the UM but                BLOKINIT.137    
C     is catered for in the subroutine TRACER so for the sake              BLOKINIT.138    
C     of consistency it's definition is included here.                     BLOKINIT.139    
      REAL DIAG_MLD(IMT_IPD_NOMIX_ARG)                                     ORH1F305.3812   
*CALL UMSCALAR                                                             BLOKINIT.142    
C                                                                          BLOKINIT.143    
C=======================================================================   BLOKINIT.144    
C  BEGIN EXECUTABLE CODE                                                   BLOKINIT.145    
C=======================================================================   BLOKINIT.146    
      IF (L_OTIMER) CALL TIMER('BLOKINIT',3)                               ORH1F305.3813   
C                                                                          BLOKINIT.150    
*IF DEF,MPP                                                                OOM1F405.449    
      CALL SWAPBOUNDS(CARYSALT,IMT,JMT,O_EW_HALO,O_NS_HALO,1)              OOM1F405.450    
      CALL SWAPBOUNDS(CARYHEAT,IMT,JMT,O_EW_HALO,O_NS_HALO,1)              OOM1F405.451    
      CALL SWAPBOUNDS(FLXTOICE,IMT,JMT,O_EW_HALO,O_NS_HALO,1)              OOM1F405.452    
      CALL SWAPBOUNDS(OCEANHEATFLUX,IMT,JMT,O_EW_HALO,O_NS_HALO,1)         OOM1F405.453    
*ENDIF                                                                     OOM1F405.454    
                                                                           OOM1F405.455    
      IF (L_OISOPYC.AND.(.NOT.L_OMIXLAY)) THEN                             ORH1F305.3814   
C     This condition is not currently allowed in the UMUI but              ORH6F404.758    
C     is catered for in the subroutine TRACER so for the sake              BLOKINIT.153    
C     of consistency it is initialised to zero here also.                  BLOKINIT.154    
         DO I = 1,IMT                                                      ORH6F404.759    
            DIAG_MLD(I) = 0.0                                              ORH6F404.760    
         ENDDO                                                             ORH6F404.761    
      ENDIF                                                                ORH1F305.3815   
C                                                                          BLOKINIT.159    
      KMP = KM + 1                                                         BLOKINIT.160    
C                                                                          BLOKINIT.161    
*IF DEF,MPP                                                                ORH9F402.58     
      JREAD = J_2                                                          ORH9F402.59     
! MPP version of code J_FROM_LOC is always 1 and J_TO_LOC is always        ORH9F402.60     
! equivalent to local version of JMT. This allows us to initialise         ORH9F402.61     
! full (local) domains of arrays, including halo areas                     ORH9F402.62     
      J_FROM_LOC = 1                                                       ORH9F402.63     
      J_TO_LOC   = JMT                                                     ORH9F402.64     
*ELSE                                                                      ORH9F402.65     
      IF (JST.EQ.1) THEN                                                   ORH9F402.66     
         JREAD=2                                                           ORH9F402.67     
      ELSE                                                                 ORH9F402.68     
         JREAD=JST                                                         ORH9F402.69     
      ENDIF                                                                ORH9F402.70     
                                                                           ORH9F402.71     
      J_FROM_LOC = JST                                                     ORH9F402.72     
                                                                           ORH9F402.73     
      IF (JFIN.GE.JMTM1_GLOBAL) THEN                                       ORH9F402.74     
          J_TO_LOC = JMT                                                   ORH9F402.75     
      ELSE                                                                 ORH9F402.76     
          J_TO_LOC = JFIN                                                  ORH9F402.77     
      ENDIF                                                                ORH9F402.78     
*ENDIF                                                                     ORH9F402.79     
C=======================================================================   BLOKINIT.176    
CL Set up pointers to find u,v in slabs and UOVER,UUNDER,VOVER,VUNDER      BLOKINIT.177    
C=======================================================================   BLOKINIT.178    
CL                                                                         BLOKINIT.179    
C                                                                          BLOKINIT.180    
      DO K=1,KM                                                            BLOKINIT.181    
         DO I=1,IMT                                                        BLOKINIT.182    
            DXTQ  (I,K)=DXT  (I)                                           BLOKINIT.183    
            DXT4RQ(I,K)=DXT4R(I)                                           BLOKINIT.184    
            DXUQ  (I,K)=DXU  (I)                                           BLOKINIT.185    
            DXU2RQ(I,K)=DXU2R(I)                                           BLOKINIT.186    
            DZZQ  (I,K)=DZZ  (K)                                           BLOKINIT.187    
            DZ2RQ (I,K)=DZ2R (K)                                           BLOKINIT.188    
            DZZ2RQ(I,K)=DZZ2R(K)                                           BLOKINIT.189    
            C2DZQ (I,K)=C2DZ (K)                                           BLOKINIT.190    
         ENDDO  ! Over I                                                   BLOKINIT.197    
      ENDDO     ! Over K                                                   BLOKINIT.198    
      IF (.NOT.L_ORICHARD) THEN                                            ORH1F305.3816   
          DO K=1,KM                                                        ORH1F305.3817   
             DO I=1,IMT                                                    ORH1F305.3818   
                EEHQ  (I,K)=EEH  (K)                                       ORH1F305.3819   
                EEMQ  (I,K)=EEM  (K)                                       ORH1F305.3820   
                FFHQ  (I,K)=FFH  (K)                                       ORH1F305.3821   
                FFMQ  (I,K)=FFM  (K)                                       ORH1F305.3822   
             ENDDO  ! over I                                               ORH1F305.3823   
          ENDDO     ! over K                                               ORH1F305.3824   
      ENDIF                                                                ORH1F305.3825   
C                                                                          BLOKINIT.199    
C                                                                          BLOKINIT.200    
      EKTOT=0.0                                                            BLOKINIT.201    
      co2_tot = 0.0                                                        BLOKINIT.203    
      BUOY=0.0                                                             ORH6F404.762    
C                                                                          BLOKINIT.205    
      DO M=1,NT                                                            BLOKINIT.206    
         DTABS(M)=0.0                                                      ORH6F404.763    
         TVAR(M)=0.0                                                       ORH6F404.764    
         DO LL=1,6                                                         ORH6F404.765    
            TTDTOT(LL,M)=0.0                                               ORH6F404.766    
         ENDDO    ! Over LL                                                ORH6F404.767    
      ENDDO     ! Over M                                                   BLOKINIT.209    
C                                                                          BLOKINIT.210    
      DO LL=1,8                                                            ORH6F404.768    
         ENGINT(LL)=0.0                                                    ORH6F404.769    
         IF (NERGY.EQ.1) THEN                                              ORH6F404.770    
            DO J=J_FROM_LOC,J_TO_LOC                                       ORH6F404.771    
               DO I=1,IMT                                                  ORH6F404.772    
                  ZUENG(I,LL,J)=0.0                                        ORH6F404.773    
                  ZVENG(I,LL,J)=0.0                                        ORH6F404.774    
               ENDDO  ! Over I                                             ORH6F404.775    
            ENDDO     ! Over J                                             ORH6F404.776    
         ENDIF                                                             ORH6F404.777    
      ENDDO       ! Over LL                                                ORH6F404.778    
C                                                                          BLOKINIT.214    
                                                                           ORH6F404.779    
      IF(NERGY.EQ.1) THEN                                                  ORH6F404.780    
         DO J=J_FROM_LOC,J_TO_LOC                                          ORH6F404.781    
            IF (.NOT.L_OHMEAD) THEN                                        ORH6F404.782    
               DO M=1,NTMIN2                                               ORH6F404.783    
                  DO LL=1,8                                                ORH6F404.784    
                     TTN(LL,J,M)=0.0                                       ORH6F404.785    
                  ENDDO  ! Over LL                                         ORH6F404.786    
               ENDDO     ! Over M                                          ORH6F404.787    
            ENDIF                                                          ORH6F404.788    
C                                                                          BLOKINIT.226    
            DO K=1,KM                                                      ORH6F404.789    
               TMT(J,K)=0.0                                                ORH6F404.790    
            ENDDO     ! Over K                                             ORH6F404.791    
         ENDDO        ! Over J                                             ORH6F404.792    
      ENDIF                                                                BLOKINIT.246    
C                                                                          BLOKINIT.247    
C---------------------------------------------------------------------     BLOKINIT.248    
C  INITIALISE CERTAIN VARIABLES TO ZERO EVERY TIMESTEP                     BLOKINIT.249    
C       TO AVOID AN "UNINITIALISED VARIABLE" TYPE OF ERROR                 BLOKINIT.250    
C       LATER WHERE, FOR PURPOSES OF VECTORISATION,                        BLOKINIT.251    
C       THE COMPUTATION PROCEEDS ACROSS LAND POINTS                        BLOKINIT.252    
C---------------------------------------------------------------------     BLOKINIT.253    
C                                                                          BLOKINIT.254    
C                                                                          BLOKINIT.255    
      DO I=1,IMT                                                           BLOKINIT.256    
         UUNDER(I)=0.0                                                     BLOKINIT.257    
         VUNDER(I)=0.0                                                     BLOKINIT.258    
      ENDDO   ! Over I                                                     BLOKINIT.259    
C                                                                          BLOKINIT.260    
!  Initialisation of ZTD could take place prior to calling                 ORH9F402.89     
!  this subroutine. However, the thinking behind doing it here             ORH9F402.90     
!  is to try to make the most of parallelism when the code                 ORH9F402.91     
!  is autotasked, so that only part of the array is dealt                  ORH9F402.92     
!  with by each processor.                                                 ORH9F402.93     
C                                                                          BLOKINIT.263    
      IF ((.NOT.L_ONOCLIN).AND.(.NOT.L_OFREESFC)) THEN                     ORL1F404.775    
         DO J=J_FROM_LOC,J_TO_LOC                                          ORH9F402.94     
            DO I=1,IMT                                                     ORH9F402.95     
               ZTD(I,J)=0.0                                                ORH9F402.96     
            ENDDO                                                          ORH9F402.97     
         ENDDO                                                             ORH9F402.98     
                                                                           ORH9F402.99     
      ENDIF                                                                ORH1F305.3829   
C                                                                          BLOKINIT.271    
      IF (L_OVISBECK) THEN                                                 OLA2F403.251    
c Initialise tmin1                                                         OLA2F403.252    
        DO J=J_FROM_LOC,J_TO_LOC                                           OLA2F403.253    
           DO I=1,IMT                                                      OLA2F403.254    
             tmin1(i,j)=0.0                                                OLA2F403.255    
           ENDDO                                                           OLA2F403.256    
        ENDDO                                                              OLA2F403.257    
      ENDIF                                                                OLA2F403.258    
C                                                                          BLOKINIT.272    
      DO M=1,NT                                                            BLOKINIT.273    
         DO K=1,KMP2                                                       BLOKINIT.274    
            DO I=1,IMT                                                     BLOKINIT.275    
               TDIF(I,K,M)=0.0                                             BLOKINIT.276    
            ENDDO ! Over I                                                 BLOKINIT.277    
         ENDDO    ! Over K                                                 BLOKINIT.278    
      ENDDO       ! Over M                                                 BLOKINIT.279    
      IF (L_OVARYT) THEN                                                   ORH1F305.3830   
C                                                                          BLOKINIT.281    
C-------------------------------------------------------------             BLOKINIT.282    
C         Set variable timestep with depth                                 BLOKINIT.283    
C-------------------------------------------------------------             BLOKINIT.284    
C                                                                          BLOKINIT.285    
         DO K=1,KM                                                         ORH6F404.793    
            DTTSA(K)=C2DTTS*RAT(K)                                         ORH6F404.794    
         ENDDO   ! Over K                                                  ORH6F404.795    
      ENDIF                                                                ORH1F305.3831   
C                                                                          BLOKINIT.290    
C=======================================================================   BLOKINIT.291    
C  BEGIN A BOOTSTRAP PROCEDURE TO PREPARE FOR THE  =====================   BLOKINIT.292    
C  ROW-BY-ROW COMPUTATION OF PROGNOSTIC VARIABLES  =====================   BLOKINIT.293    
C=======================================================================   BLOKINIT.294    
C                                                                          BLOKINIT.295    
C---------------------------------------------------------------------     BLOKINIT.296    
C  READ SLAB DATA FOR ROW JREAD FROM DUMP                                  BLOKINIT.297    
C---------------------------------------------------------------------     BLOKINIT.298    
C                                                                          BLOKINIT.299    
      CALL UMREAD(                                                         BLOKINIT.300    
*CALL ARGSIZE                                                              BLOKINIT.301    
*CALL ARGD1                                                                BLOKINIT.302    
*CALL ARGDUMO                                                              BLOKINIT.303    
*CALL ARGPTRO                                                              BLOKINIT.304    
     &            LABS(NDISKB),JREAD,TBP                                   BLOKINIT.305    
     &, NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                    OSI0F402.133    
      CALL UMREAD(                                                         BLOKINIT.307    
*CALL ARGSIZE                                                              BLOKINIT.308    
*CALL ARGD1                                                                BLOKINIT.309    
*CALL ARGDUMO                                                              BLOKINIT.310    
*CALL ARGPTRO                                                              BLOKINIT.311    
     &            LABS(NDISK),JREAD,TP                                     BLOKINIT.312    
     &, NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                    OSI0F402.134    
      IF (L_OBIMOM.or.L_OBIHARMGM) then                                    OOM3F405.306    
C  Read slab data for row JREAD+1 from dump if biharmonic                  OOM3F405.307    
      CALL UMREAD(                                                         OOM3F405.308    
*CALL ARGSIZE                                                              OOM3F405.309    
*CALL ARGD1                                                                OOM3F405.310    
*CALL ARGDUMO                                                              OOM3F405.311    
*CALL ARGPTRO                                                              OOM3F405.312    
     &            LABS(NDISKB),JREAD+1,TBPP   ! read j=3, t-1 timestep     OOM3F405.313    
     &, NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                    OOM3F405.314    
C                                                                          OOM3F405.315    
      CALL UMREAD(                                                         OOM3F405.316    
*CALL ARGSIZE                                                              OOM3F405.317    
*CALL ARGD1                                                                OOM3F405.318    
*CALL ARGDUMO                                                              OOM3F405.319    
*CALL ARGPTRO                                                              OOM3F405.320    
     &            LABS(NDISK),JREAD+1,TPP     ! read j=3, t timestep       OOM3F405.321    
     &, NDISKB,NDISK,NDISKA,FKMP,FKMQ )                                    OOM3F405.322    
C                                                                          OOM3F405.323    
      ENDIF  ! L_OBIMOM or L_OBIHARMGM                                     OOM3F405.324    
                                                                           OOM3F405.325    
C                                                                          BLOKINIT.314    
C set up the advective velocities for the new Med outflow scheme           OOM2F405.141    
C need to add the extra velocity into U here, as well as UP, since         OOM2F405.142    
C we might be initialising a block boundary                                OOM2F405.143    
                                                                           OOM2F405.144    
      IF (L_OMEDADV) THEN                                                  OOM2F405.145    
         top_flow=med_topflow                                              OOM2F405.146    
         CALL OUTFL_BC(JREAD,J_OFFSET,imout,jmout,                         OOM2F405.147    
     &      U,UB,UP,UBP,med_in,med_out,lev_med,top_flow,imt,km,            OOM2F405.148    
     &      L_OTIMER,L_OBIMOM,L_OBIHARMGM,UPP,UBPP)                        OOM2F405.149    
                                                                           OOM2F405.150    
        IF (L_OHUDOUT) THEN                                                OOM2F405.151    
         top_flow=lev_hud-1                                                OOM2F405.152    
         CALL OUTFL_BC(JREAD,J_OFFSET,imout_hud,jmout_hud,                 OOM2F405.153    
     &      U,UB,UP,UBP,hud_in,hud_out,lev_hud,top_flow,imt,km,            OOM2F405.154    
     &      L_OTIMER,L_OBIMOM,L_OBIHARMGM,UPP,UBPP)                        OOM2F405.155    
        ENDIF                                                              OOM2F405.156    
                                                                           OOM2F405.157    
      ENDIF ! L_OMEDADV                                                    OOM2F405.158    
                                                                           OOM2F405.159    
C---------------------------------------------------------------------     BLOKINIT.315    
C  READ IN MAXIMUM LEVEL INDICATORS FOR ROW JREAD DIRECTLY FROM ARRAYS     BLOKINIT.316    
C  EQUIVALENCED TO OFLDS LOCATIONS AND CONVERT TO INTEGER                  BLOKINIT.317    
C---------------------------------------------------------------------     BLOKINIT.318    
C                                                                          BLOKINIT.319    
      DO I=1,IMT                                                           BLOKINIT.320    
         KMT (I)=FKMP(I,JREAD - 1)                                         ORH6F404.796    
         KMU (I)=FKMQ(I,JREAD - 1)                                         ORH6F404.797    
         KMTP(I)=FKMP(I,JREAD)                                             ORH6F404.798    
         KMUP(I)=FKMQ(I,JREAD)                                             ORH6F404.799    
         KMTPP(I)=FKMP(I,JREAD+1)                                          ORH6F404.800    
      ENDDO  ! Over I                                                      BLOKINIT.323    
        IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                  OOM3F405.326    
C define the j+2 no of levels at each point                                OOM3F405.327    
          DO I=1,IMT                                                       OOM3F405.328    
            KMUPP(I)=FKMQ(I,JREAD+1)                                       OOM3F405.329    
          ENDDO  ! Over I                                                  OOM3F405.330    
        ENDIF                                                              OOM3F405.331    
C                                                                          BLOKINIT.324    
C---------------------------------------------------------------------     BLOKINIT.325    
C  MOVE TAU-1 DATA TO TAU LEVEL ON A MIXING TIMESTEP                       BLOKINIT.326    
C---------------------------------------------------------------------     BLOKINIT.327    
C                                                                          BLOKINIT.328    
      IF(MIX.EQ.1) THEN                                                    BLOKINIT.329    
         DO M=1,NT                                                         ORH6F404.801    
            DO K=1,KM                                                      ORH6F404.802    
               DO I=1,IMT                                                  ORH6F404.803    
                  TBP(I,K,M)=TP(I,K,M)                                     ORH6F404.804    
               ENDDO  ! Over I                                             ORH6F404.805    
            ENDDO     ! Over K                                             ORH6F404.806    
         ENDDO        ! Over M                                             ORH6F404.807    
C copy data in tpp to tbpp etc on mixing timestep                          OOM3F405.332    
       IF (L_OBIMOM.or.L_OBIHARMGM) then                                   OOM3F405.333    
         DO M=1,NT                                                         OOM3F405.334    
            DO K=1,KM                                                      OOM3F405.335    
               DO I=1,IMT                                                  OOM3F405.336    
                  TBPP(I,K,M)=TPP(I,K,M)                                   OOM3F405.337    
               ENDDO                                                       OOM3F405.338    
            ENDDO                                                          OOM3F405.339    
         ENDDO                                                             OOM3F405.340    
       ENDIF  ! L_OBIMOM or L_OBIHARMGM                                    OOM3F405.341    
         DO K=1,KM                                                         ORH6F404.808    
            DO I=1,IMT                                                     ORH6F404.809    
               UBP(I,K)=UP(I,K)                                            ORH6F404.810    
               VBP(I,K)=VP(I,K)                                            ORH6F404.811    
            ENDDO     ! Over I                                             ORH6F404.812    
         ENDDO        ! Over K                                             ORH6F404.813    
       IF (L_OBIMOM.or.L_OBIHARMGM) then                                   OOM3F405.342    
            DO K=1,KM                                                      OOM3F405.343    
               DO I=1,IMT                                                  OOM3F405.344    
                 UBPP(I,K)=UPP(I,K)                                        OOM3F405.345    
                 VBPP(I,K)=VPP(I,K)                                        OOM3F405.346    
               ENDDO                                                       OOM3F405.347    
            ENDDO                                                          OOM3F405.348    
       ENDIF  ! L_OBIMOM or L_OBIHARMGM                                    OOM3F405.349    
C                                                                          BLOKINIT.343    
C---------------------------------------------------------------------     BLOKINIT.344    
C  We must also mix other tracer rows as appropriate                       BLOKINIT.345    
C---------------------------------------------------------------------     BLOKINIT.346    
C                                                                          BLOKINIT.347    
            DO M=1,NT                                                      ORH6F404.815    
               DO K=1,KM                                                   ORH6F404.816    
                  DO I=1,IMT                                               ORH6F404.817    
                     TB (I,K,M)=T (I,K,M)                                  ORH6F404.818    
                     TBM(I,K,M)=TM(I,K,M)                                  ORH6F404.819    
                  ENDDO ! Over I                                           ORH6F404.820    
               ENDDO    ! Over K                                           ORH6F404.821    
            ENDDO       ! Over M                                           ORH6F404.822    
            DO K=1,KM                                                      ORH6F404.823    
               DO I=1,IMT                                                  ORH6F404.824    
                  UB (I,K)=U (I,K)                                         ORH6F404.825    
                  VB (I,K)=V (I,K)                                         ORH6F404.826    
                  UBM(I,K)=UM(I,K)                                         ORH6F404.827    
                  VBM(I,K)=VM(I,K)                                         ORH6F404.828    
               ENDDO    ! Over I                                           ORH6F404.829    
            ENDDO       ! Over K                                           ORH6F404.830    
      ENDIF   ! If a mixing timestep                                       BLOKINIT.366    
C                                                                          BLOKINIT.367    
C---------------------------------------------------------------------     BLOKINIT.368    
C  INITIALIZE ARRAYS FOR FIRST CALLS TO CLINIC AND TRACER                  BLOKINIT.369    
C---------------------------------------------------------------------     BLOKINIT.370    
C                                                                          BLOKINIT.371    
      IF (JST.EQ.1) THEN       ! This is the first block of rows           BLOKINIT.372    
!=====================================================================     ORH0F401.4      
!                                                                          ORH0F401.5      
!  If this is the first block of rows, the main loop of ROWCALC            ORH0F401.6      
!  runs from J = 2. However, this loop in ROWCALC needs values of          ORH0F401.7      
!  TB and T for J = 1. (These values will be zero) - assign them here.     ORH0F401.8      
!                                                                          ORH0F401.9      
!=====================================================================     ORH0F401.10     
                                                                           ORH0F401.11     
        IF( .NOT. L_OBDY_TRACER .OR. .NOT. L_OBDY_SOUTH) THEN              OSI1F405.100    
         DO M=1,NT                                                         ORH0F401.12     
            DO K=1,KM                                                      ORH0F401.13     
               DO I=1,IMT                                                  ORH0F401.14     
                  T  (I,K,M)=0.0                                           ORH0F401.15     
                  TB (I,K,M)=0.0                                           ORH0F401.16     
               ENDDO ! Over I                                              ORH0F401.17     
            ENDDO    ! Over K                                              ORH0F401.18     
         ENDDO       ! Over M                                              ORH0F401.19     
        END IF                                                             OSI1F405.101    
        IF( .NOT. L_OBDY_UV ) THEN                                         OSI1F405.102    
         DO K=1,KM                                                         ORH0F401.20     
            DO I=1,IMT                                                     ORH0F401.21     
               U (I,K) = 0.0                                               ORH0F401.22     
               V (I,K) = 0.0                                               ORH0F401.23     
               UB(I,K) = 0.0                                               ORH0F401.24     
               VB(I,K) = 0.0                                               ORH0F401.25     
            ENDDO    ! Over I                                              ORH0F401.26     
         ENDDO       ! Over K                                              ORH0F401.27     
        END IF                                                             OSI1F405.103    
       DO M=1,NT                                                           OSY1F405.23     
         DO K=1,KM                                                         OSY1F405.24     
           DO I=1,IMT                                                      OSY1F405.25     
             FLUXST(I,K,M)=0.                                              OSY1F405.26     
           ENDDO                                                           OSY1F405.27     
         ENDDO                                                             OSY1F405.28     
       ENDDO                                                               OSY1F405.29     
                                                                           OSY1F405.30     
C                                                                          BLOKINIT.373    
       IF (L_OBIMOM.or.L_OBIHARMGM) then                                   OOM3F405.350    
C initialise d2v,d2u                                                       OOM3F405.351    
         DO K=1,KM                                                         OOM3F405.352    
           DO I=1,IMT                                                      OOM3F405.353    
             D2U(I,K,1)=0.0                                                OOM3F405.354    
             D2V(I,K,1)=0.0                                                OOM3F405.355    
             D2U(I,K,2)=0.0                                                OOM3F405.356    
             D2V(I,K,2)=0.0                                                OOM3F405.357    
           ENDDO                                                           OOM3F405.358    
         ENDDO                                                             OOM3F405.359    
       ENDIF  ! L_OBIMOM or L_OBIHARMGM                                    OOM3F405.360    
                                                                           OOM3F405.361    
       IF  ( L_OBDY_SOUTH .AND. L_OGILL_LBCS ) THEN                        OSI1F405.116    
C                                                                          BLOKINIT.375    
C "Row 1" velocities are set equal to Row 2 velocities                     BLOKINIT.376    
C   in the initialization of the arrays for the 1st calls to               BLOKINIT.377    
C   CLINIC and TRACER.                                                     BLOKINIT.378    
C                                                                          BLOKINIT.379    
            DO K=1,KM                                                      ORH6F404.833    
               DO I=1,IMT                                                  ORH6F404.834    
                  U(I,K)=UP(I,K)                                           ORH6F404.835    
                  V(I,K)=VP(I,K)                                           ORH6F404.836    
                  UB(I,K)=UBP(I,K)                                         ORH6F404.837    
                  VB(I,K)=VBP(I,K)                                         ORH6F404.838    
               ENDDO     ! Over I                                          ORH6F404.839    
            ENDDO        ! Over K                                          ORH6F404.840    
         ENDIF                                                             ORH6F404.841    
                                                                           ORH6F404.842    
         FX=DYU2R(JREAD)*CSR(JREAD)*CST(JREAD)*0.5                         ORH6F404.843    
                                                                           ORH6F404.844    
         DO K=1,KM                                                         ORH6F404.845    
            DO I=1,IMT                                                     ORH6F404.846    
               FVST(I,K)=0.0                                               ORH6F404.847    
               RHOS(I,K)=0.0                                               ORH6F404.848    
               FMM (I,K)=0.0                                               ORH6F404.849    
               FM  (I,K)=0.0                                               ORH6F404.850    
C---------------------------------------------------------------------     BLOKINIT.400    
C  CONSTRUCT MASK ARRAY FOR ROW JREAD TRACERS                              BLOKINIT.401    
C---------------------------------------------------------------------     BLOKINIT.402    
               IF(KMTP(I).GE.KAR(K)) THEN                                  ORH6F404.851    
                  FMP(I,K)=1.0                                             ORH6F404.852    
               ELSE                                                        ORH6F404.853    
                  FMP(I,K)=0.0                                             ORH6F404.854    
               ENDIF                                                       ORH6F404.855    
C---------------------------------------------------------------------     BLOKINIT.415    
C  SAVE INTERNAL MODE VELOCITIES FOR ROW JREAD AND COMPUTE                 BLOKINIT.416    
C  ADVECTIVE COEFFICIENT FOR SOUTH FACE OF ROW JREAD U,V BOXES             BLOKINIT.417    
C---------------------------------------------------------------------     BLOKINIT.418    
               UCLIN(I,K)=UP(I,K)                                          BLOKINIT.424    
               VCLIN(I,K)=VP(I,K)                                          BLOKINIT.425    
               FVSU(I,K)=(VP(I,K)+V(I,K))*FX                               BLOKINIT.426    
            ENDDO   ! Over I                                               BLOKINIT.427    
         ENDDO     ! Over K                                                ORH6F404.856    
         IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                 OOM3F405.362    
          DO K=1,KM                                                        OOM3F405.363    
            DO I=1,IMT                                                     OOM3F405.364    
              IF (KMTPP(I).GE.KAR(K)) THEN                                 OOM3F405.365    
                FMPP(I,K)=1.0                                              OOM3F405.366    
              ELSE                                                         OOM3F405.367    
                FMPP(I,K)=0.0                                              OOM3F405.368    
              ENDIF                                                        OOM3F405.369    
            ENDDO                                                          OOM3F405.370    
          ENDDO                                                            OOM3F405.371    
C Save external mode velocities for row JREAD+1                            OOM3F405.372    
          DO K=1,KM                                                        OOM3F405.373    
            DO I=1,IMT                                                     OOM3F405.374    
              UCLINP(I,K)=UPP(I,K)                                         OOM3F405.375    
              VCLINP(I,K)=VPP(I,K)                                         OOM3F405.376    
            ENDDO                                                          OOM3F405.377    
          ENDDO                                                            OOM3F405.378    
         ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                  OOM3F405.379    
                                                                           OOM3F405.380    
C                                                                          OSI1F405.104    
C Set FM land / sea mask for row 2 if southern row is an open              OSI1F405.105    
C boundary. Mask for row 1 is assumed to be the same as row 1.             OSI1F405.106    
C                                                                          OSI1F405.107    
        IF ( L_OBDY_TRACER .AND. L_OBDY_SOUTH) THEN                        OSI1F405.108    
          DO K=1,KM                                                        OSI1F405.109    
             DO I=1,IMT                                                    OSI1F405.110    
                FM(I,K) = FMP(I,K)                                         OSI1F405.111    
             ENDDO   ! Over I                                              OSI1F405.112    
          ENDDO      ! Over K                                              OSI1F405.113    
        END IF !  L_OBDY_ conditions                                       OSI1F405.114    
                                                                           OSI1F405.115    
C                                                                          BLOKINIT.429    
      ELSE               ! This is not the first block of rows             BLOKINIT.430    
C                                                                          BLOKINIT.431    
C---------------------------------------------------------------------     BLOKINIT.432    
C  Set up values for FMP and FM for 1st row in this block                  BLOKINIT.433    
C  also FMM required for use in calculation of ry                          BLOKINIT.434    
C---------------------------------------------------------------------     BLOKINIT.435    
C                                                                          BLOKINIT.436    
         DO K=1,KM                                                         ORH6F404.857    
            DO I=1,IMT                                                     ORH6F404.858    
               ! JREAD - 2 is outside the range of the halos               ORH6F404.859    
               ! so we refer to a full global copy of this array           ORH6F404.860    
               IF (FKMP_GLOBAL(I,JREAD-2+J_OFFSET).GE.KAR(K)) THEN         ORH6F404.861    
                  FMM(I,K) = 1.0                                           ORH6F404.862    
               ELSE                                                        ORH6F404.863    
                  FMM(I,K) = 0.0                                           ORH6F404.864    
               ENDIF                                                       ORH6F404.865    
C                                                                          BLOKINIT.444    
               IF (FKMP(I,JREAD-1).GE.KAR(K)) THEN                         ORH6F404.866    
                  FM(I,K) = 1.0                                            ORH6F404.867    
               ELSE                                                        ORH6F404.868    
                  FM(I,K) = 0.0                                            ORH6F404.869    
               ENDIF                                                       ORH6F404.870    
C                                                                          BLOKINIT.450    
               IF (FKMP(I,JREAD).GE.KAR(K)) THEN                           ORH6F404.871    
                  FMP(I,K) = 1.0                                           ORH6F404.872    
               ELSE                                                        ORH6F404.873    
                  FMP(I,K) = 0.0                                           ORH6F404.874    
               ENDIF                                                       ORH6F404.875    
            ENDDO   ! Over I                                               ORH6F404.876    
         ENDDO      ! Over K                                               ORH6F404.877    
         IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                 OOM3F405.381    
           DO K=1,KM                                                       OOM3F405.382    
             DO I=1,IMT                                                    OOM3F405.383    
               IF (FKMP(I,JREAD+1).GE.KAR(K)) THEN                         OOM3F405.384    
                 FMPP(I,K)=1.0                                             OOM3F405.385    
               ELSE                                                        OOM3F405.386    
                 FMPP(I,K)=0.0                                             OOM3F405.387    
               ENDIF                                                       OOM3F405.388    
             ENDDO                                                         OOM3F405.389    
           ENDDO                                                           OOM3F405.390    
C Save external mode velocities for row JREAD+1                            OOM3F405.391    
           DO K=1,KM                                                       OOM3F405.392    
             DO I=1,IMT                                                    OOM3F405.393    
               UCLINP(I,K)=UPP(I,K)                                        OOM3F405.394    
               VCLINP(I,K)=VPP(I,K)                                        OOM3F405.395    
             ENDDO                                                         OOM3F405.396    
           ENDDO                                                           OOM3F405.397    
         ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                  OOM3F405.398    
                                                                           OOM3F405.399    
C                                                                          BLOKINIT.464    
C---------------------------------------------------------------------     BLOKINIT.465    
C  SAVE INTERNAL MODE VELOCITIES FOR ROW JREAD                             BLOKINIT.466    
C  AND COMPUTE ADVECTIVE COEFFICIENT FOR SOUTH FACE OF ROW 2 U,V BOXES     BLOKINIT.467    
C---------------------------------------------------------------------     BLOKINIT.468    
C                                                                          BLOKINIT.469    
         DO K=1,KM                                                         ORH6F404.878    
            DO I=1,IMT                                                     ORH6F404.879    
               UCLIN(I,K)=UP(I,K)                                          ORH6F404.880    
               VCLIN(I,K)=VP(I,K)                                          ORH6F404.881    
            ENDDO  ! Over I                                                ORH6F404.882    
         ENDDO     ! Over K                                                ORH6F404.883    
C                                                                          BLOKINIT.476    
C                                                                          BLOKINIT.477    
         IF (JST.EQ.JMTM1_GLOBAL) THEN                                     ORH6F404.884    
            ! If our 1st row is the last but one model row                 ORH6F404.885    
            ! then clinic will not get called unless L_OSYMM               ORH6F404.886    
            ! is true. However, ROWCALC needs a value for USAV             ORH6F404.887    
            ! and VSAV for row JMTM1_GLOBAL which is the same              ORH6F404.888    
             ! value as used for row JMTM1_GLOBAL - 1 ie:                  ORH6F404.889    
            DO K=1,KM                                                      ORH6F404.890    
               DO I = 1, IMT                                               ORH6F404.891    
                  USAV(I,K)=UP(I,K)                                        ORH6F404.892    
                  VSAV(I,K)=VP(I,K)                                        ORH6F404.893    
               ENDDO                                                       ORH6F404.894    
            ENDDO                                                          ORH6F404.895    
         ENDIF                                                             ORH6F404.896    
C---------------------------------------------------------------------     BLOKINIT.478    
C  COMPUTE FVSU FOR ROW JREAD - 1.                                         BLOKINIT.479    
C---------------------------------------------------------------------     BLOKINIT.480    
C                                                                          BLOKINIT.481    
         CALL CALCFVN(                                                     ORH6F404.897    
*CALL ARGSIZE                                                              BLOKINIT.483    
*CALL ARGD1                                                                BLOKINIT.484    
*CALL ARGDUMO                                                              BLOKINIT.485    
*CALL ARGPTRO                                                              BLOKINIT.486    
*CALL ARGOCALL                                                             BLOKINIT.487    
*CALL COCAROWS                                                             BLOKINIT.488    
     &  ,JREAD-1                                                           BLOKINIT.489    
     &  ,LL_ASS_BTRP,DV_ASS_BTRP                                           BLOKINIT.491    
     &  ,KMUP,KMU                                                          ORL1F404.1019   
     &  ,FVSU,VP,V                                                         BLOKINIT.493    
     &,JMT_GLOBAL                                                          ORH6F402.85     
     &  )                                                                  BLOKINIT.494    
                                                                           ORH6F404.898    
      ENDIF                                                                BLOKINIT.495    
                                                                           ORH6F404.899    
*IF DEF,MPP                                                                ORH9F402.100    
      IF (JST.EQ.1) THEN                                                   ORH9F402.101    
         J = J_1                                                           ORH9F402.102    
      ELSE                                                                 ORH9F402.103    
         J = J_1 -1                                                        ORH9F402.104    
      ENDIF                                                                ORH9F402.105    
*ELSE                                                                      ORH9F402.106    
      IF (JST.EQ.1) THEN                                                   BLOKINIT.517    
          J=1                                                              BLOKINIT.518    
      ELSE                                                                 BLOKINIT.519    
          J=JST-1                                                          BLOKINIT.520    
      ENDIF                                                                BLOKINIT.521    
*ENDIF                                                                     ORH9F402.107    
C                                                                          BLOKINIT.522    
      IF (.NOT.L_ONOCLIN) THEN                                             ORH1F305.3836   
                                                                           ORL1F404.776    
      IF (L_OFREESFC) THEN                                                 ORL1F404.777    
        DO I=1,IMTM1                                                       ORL1F404.778    
          SFUB(I) = UBTBBC(I,J+1)*HR(I,J+1)                                ORL1F404.779    
          SFVB(I) = VBTBBC(I,J+1)*HR(I,J+1)                                ORL1F404.780    
        ENDDO       ! over i                                               ORL1F404.781    
                                                                           ORL1F404.782    
      ELSE                                                                 ORL1F404.783    
                                                                           ORL1F404.784    
         DO I=1,IMTM1                                                      ORH6F404.900    
            DIAG1=PB(I+1,J+2)-PB(I  ,J+1)                                  ORH6F404.901    
            DIAG2=PB(I  ,J+2)-PB(I+1,J+1)                                  ORH6F404.902    
            SFUB(I)=-(DIAG1+DIAG2)*DYU2R(J+1)*HR(I,J+1)                    ORH6F404.903    
            SFVB(I)= (DIAG1-DIAG2)*DXU2R(I  )*HR(I,J+1)*CSR(J+1)           ORH6F404.904    
         ENDDO  ! Over I                                                   ORH6F404.905    
                                                                           ORL1F404.785    
      ENDIF   ! (L_OFREESFC)                                               ORL1F404.786    
                                                                           ORL1F404.787    
C                                                                          BLOKINIT.530    
C  2ND, COMPUTE FOR TAU TIME LEVEL                                         BLOKINIT.531    
C                                                                          BLOKINIT.532    
         IF (L_OFREESFC) THEN                                              ORH6F404.906    
            DO I=1,IMTM1                                                   ORH6F404.907    
               SFU(I) = UBT(I,J+1)*HR(I,J+1)                               ORH6F404.908    
               SFV(I) = VBT(I,J+1)*HR(I,J+1)                               ORH6F404.909    
            ENDDO                                                          ORH6F404.910    
         ELSE                                                              ORH6F404.911    
            DO I=1,IMTM1                                                   ORH6F404.912    
               DIAG1=P (I+1,J+2)-P (I  ,J+1)                               ORH6F404.913    
               DIAG2=P (I  ,J+2)-P (I+1,J+1)                               ORH6F404.914    
               SFU (I)=-(DIAG1+DIAG2)*DYU2R(J+1)*HR(I,J+1)                 ORH6F404.915    
               SFV (I)= (DIAG1-DIAG2)*DXU2R(I  )*HR(I,J+1)*CSR(J+1)        ORH6F404.916    
            ENDDO  ! Over I                                                ORH6F404.917    
         ENDIF                                                             ORH6F404.918    
         IF (L_OCYCLIC) THEN                                               ORH6F404.919    
C                                                                          BLOKINIT.541    
C  3RD, SET CYCLIC BOUNDARY CONDITIONS                                     BLOKINIT.542    
C                                                                          BLOKINIT.543    
            SFUB(IMT)=SFUB(2)                                              ORH6F404.920    
            SFVB(IMT)=SFVB(2)                                              ORH6F404.921    
            SFU (IMT)=SFU (2)                                              ORH6F404.922    
            SFV (IMT)=SFV (2)                                              ORH6F404.923    
         ELSE                                                              ORH6F404.924    
            SFUB(IMT)=0.0                                                  ORH6F404.925    
            SFVB(IMT)=0.0                                                  ORH6F404.926    
            SFU (IMT)=0.0                                                  ORH6F404.927    
            SFV (IMT)=0.0                                                  ORH6F404.928    
         ENDIF                                                             ORH6F404.929    
C                                                                          BLOKINIT.556    
C-----------------------------------------------------------------------   BLOKINIT.557    
C     SAVE EXTERNAL MODE FOR USE IN TIME FILTER                            BLOKINIT.558    
C-----------------------------------------------------------------------   BLOKINIT.559    
C                                                                          BLOKINIT.560    
         DO I=1,IMT                                                        ORH6F404.930    
            SSFUBP(I)=SFUB(I)                                              ORH6F404.931    
            SSFVBP(I)=SFVB(I)                                              ORH6F404.932    
         ENDDO  ! Over I                                                   ORH6F404.933    
C                                                                          BLOKINIT.565    
C---------------------------------------------------------------------     BLOKINIT.566    
C  ADD EXTERNAL MODE TO INTERNAL MODE FOR ROW JREAD (OCEAN PTS. ONLY)      BLOKINIT.567    
C---------------------------------------------------------------------     BLOKINIT.568    
C                                                                          BLOKINIT.569    
         DO K=1,KM                                                         ORH6F404.934    
            DO I=1,IMU                                                     ORH6F404.935    
               IF (KMUP(I).GE.KAR(K)) THEN                                 ORH6F404.936    
                  UBP(I,K)=UBP(I,K)+SFUB(I)                                ORH6F404.937    
                  VBP(I,K)=VBP(I,K)+SFVB(I)                                ORH6F404.938    
                  UP (I,K)=UP (I,K)+SFU (I)                                ORH6F404.939    
                  VP (I,K)=VP (I,K)+SFV (I)                                ORH6F404.940    
               ENDIF                                                       ORH6F404.941    
            ENDDO  ! Over I                                                ORH6F404.942    
         ENDDO     ! Over K                                                ORH6F404.943    
C  Add ext. mode to int. mode for row J+2 (OCEAN PTS. ONLY)                OOM3F405.400    
                                                                           OOM3F405.401    
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.402    
C calculate the external mode for j+2                                      OOM3F405.403    
C does this assume at least two rows per PE?                               OOM3F405.404    
      DO I=1,IMTM1                                                         OOM3F405.405    
        DIAG1=PB(I+1,J+3)-PB(I  ,J+2)                                      OOM3F405.406    
        DIAG2=PB(I  ,J+3)-PB(I+1,J+2)                                      OOM3F405.407    
        SFUB(I)=-(DIAG1+DIAG2)*DYU2R(J+2)*HR(I,J+2)                        OOM3F405.408    
        SFVB(I)= (DIAG1-DIAG2)*DXU2R(I  )*HR(I,J+2)*CSR(J+2)               OOM3F405.409    
      ENDDO  ! Over I                                                      OOM3F405.410    
C                                                                          OOM3F405.411    
C  2ND, COMPUTE FOR TAU TIME LEVEL                                         OOM3F405.412    
C                                                                          OOM3F405.413    
      DO I=1,IMTM1                                                         OOM3F405.414    
        DIAG1=P (I+1,J+3)-P (I  ,J+2)                                      OOM3F405.415    
        DIAG2=P (I  ,J+3)-P (I+1,J+2)                                      OOM3F405.416    
        SFU (I)=-(DIAG1+DIAG2)*DYU2R(J+2)*HR(I,J+2)                        OOM3F405.417    
        SFV (I)= (DIAG1-DIAG2)*DXU2R(I  )*HR(I,J+2)*CSR(J+2)               OOM3F405.418    
      ENDDO  ! Over I                                                      OOM3F405.419    
                                                                           OOM3F405.420    
      IF (L_OCYCLIC) THEN                                                  OOM3F405.421    
C                                                                          OOM3F405.422    
C  3RD, SET CYCLIC BOUNDARY CONDITIONS                                     OOM3F405.423    
C                                                                          OOM3F405.424    
        SFUB(IMT)=SFUB(2)                                                  OOM3F405.425    
        SFVB(IMT)=SFVB(2)                                                  OOM3F405.426    
        SFU (IMT)=SFU (2)                                                  OOM3F405.427    
        SFV (IMT)=SFV (2)                                                  OOM3F405.428    
      ELSE                                                                 OOM3F405.429    
        SFUB(IMT)=0.0                                                      OOM3F405.430    
        SFVB(IMT)=0.0                                                      OOM3F405.431    
        SFU (IMT)=0.0                                                      OOM3F405.432    
        SFV (IMT)=0.0                                                      OOM3F405.433    
      ENDIF                                                                OOM3F405.434    
C-------------------------------------------------------------------       OOM3F405.435    
C     SAVE EXTERNAL MODE FOR USE IN TIME FILTER                            OOM3F405.436    
C--------------------------------------------------------------------      OOM3F405.437    
C                                                                          OOM3F405.438    
      DO I=1,IMT                                                           OOM3F405.439    
         SSFUBPP(I)=SFUB(I)                                                OOM3F405.440    
         SSFVBPP(I)=SFVB(I)                                                OOM3F405.441    
      ENDDO  ! Over I                                                      OOM3F405.442    
C                                                                          OOM3F405.443    
C                                                                          OOM3F405.444    
         DO K=1,KM                                                         OOM3F405.445    
          DO I=1,IMU                                                       OOM3F405.446    
            IF (KMUPP(I).GE.KAR(K)) THEN                                   OOM3F405.447    
              UBPP(I,K)=UBPP(I,K)+SFUB(I)                                  OOM3F405.448    
              VBPP(I,K)=VBPP(I,K)+SFVB(I)                                  OOM3F405.449    
              UPP (I,K)=UPP (I,K)+SFU (I)                                  OOM3F405.450    
              VPP (I,K)=VPP (I,K)+SFV (I)                                  OOM3F405.451    
            ENDIF                                                          OOM3F405.452    
          ENDDO                                                            OOM3F405.453    
         ENDDO                                                             OOM3F405.454    
                                                                           OOM3F405.455    
      ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                     OOM3F405.456    
                                                                           OOM3F405.457    
      IF (L_OBIMOM) THEN                                                   OOM3F405.458    
                                                                           OOM3F405.459    
      IF (JST.EQ.1) THEN                                                   OOM3F405.460    
                                                                           OOM3F405.461    
C---------------------------------------------------------------           OOM3F405.462    
C COMPUTE LAPLACIANS FOR ROW j+1 with jst=1                                OOM3F405.463    
C---------------------------------------------------------------           OOM3F405.464    
C                                                                          OOM3F405.465    
      DO K=1,KM                                                            OOM3F405.466    
        DO I=1,IMT                                                         OOM3F405.467    
          D2U(I,K,2)=0.                                                    OOM3F405.468    
          D2V(I,K,2)=0.                                                    OOM3F405.469    
        ENDDO                                                              OOM3F405.470    
      ENDDO                                                                OOM3F405.471    
                                                                           OOM3F405.472    
         BBUD=8.0*(CSR(J+1)*CSR(J+1))                                      OOM3F405.473    
         CCUD=(CST(J+2)*DYTR(J+2))*(DYUR(J+1)*CSR(J+1))                    OOM3F405.474    
         DDUD=(CST(J+1)*DYTR(J+1))*(DYUR(J+1)*CSR(J+1))                    OOM3F405.475    
         GGUD=(1.0-(TNG(J+1)*TNG(J+1)))/(RADIUS*RADIUS)                    OOM3F405.476    
         HHUD=2.0*SINE(J+1)/(RADIUS*(CS(J+1)*CS(J+1)))                     OOM3F405.477    
                                                                           OOM3F405.478    
        DO K=1,KM                                                          OOM3F405.479    
          DO I=2,IMTM1                                                     OOM3F405.480    
            D2U(I,K,3)=(BBUD*DXU2RQ(I,K))*                                 OOM3F405.481    
     *      (DXT4RQ(I,K)*((UBP(I+1,K)-UBP(I,K))+(UBP(I-1,K)-UBP(I,K))))    OOM3F405.482    
            D2U(I,K,3)=D2U(I,K,3)+CCUD*(UBPP(I,K)-UBP(I,K))                OOM3F405.483    
     *                           -DDUD*UBP(I,K)                            OOM3F405.484    
            D2U(I,K,3)=D2U(I,K,3)+GGUD*UBP(I,K)                            OOM3F405.485    
     *        - (HHUD*DXU2RQ(I,K))*(VBP(I+1,K)-VBP(I-1,K))                 OOM3F405.486    
                                                                           OOM3F405.487    
            D2V(I,K,3)=(BBUD*DXU2RQ(I,K))*                                 OOM3F405.488    
     *      (DXT4RQ(I,K)*((VBP(I+1,K)-VBP(I,K))+(VBP(I-1,K)-VBP(I,K))))    OOM3F405.489    
            D2V(I,K,3)=D2V(I,K,3)+CCUD*(VBPP(I,K)-VBP(I,K))                OOM3F405.490    
     *                           -DDUD*VBP(I,K)                            OOM3F405.491    
            D2V(I,K,3)=D2V(I,K,3)+GGUD*VBP(I,K)                            OOM3F405.492    
     *        + (HHUD*DXU2RQ(I,K))*(UBP(I+1,K)-UBP(I-1,K))                 OOM3F405.493    
          ENDDO                                                            OOM3F405.494    
          IF (L_OCYCLIC) THEN                                              OOM3F405.495    
C  SET CYCLIC BOUNDARY CONDITIONS ON LAPLACIANS                            OOM3F405.496    
            D2U(1,K,3)=D2U(IMTM1,K,3)                                      OOM3F405.497    
            D2U(IMT,K,3)=D2U(2,K,3)                                        OOM3F405.498    
            D2V(1,K,3)=D2V(IMTM1,K,3)                                      OOM3F405.499    
            D2V(IMT,K,3)=D2V(2,K,3)                                        OOM3F405.500    
          ELSE                                                             OOM3F405.501    
C extra b.c. for biharmonic                                                OOM3F405.502    
            D2U(1,K,3)=0.                                                  OOM3F405.503    
            D2U(IMT,K,3)=0.                                                OOM3F405.504    
            D2V(1,K,3)=0.                                                  OOM3F405.505    
            D2V(IMT,K,3)=0.                                                OOM3F405.506    
          ENDIF                                                            OOM3F405.507    
        ENDDO                                                              OOM3F405.508    
                                                                           OOM3F405.509    
      ENDIF  !  jst=1                                                      OOM3F405.510    
      ENDIF ! L_OBIMOM                                                     OOM3F405.511    
                                                                           OOM3F405.512    
      ENDIF                                                                ORH1F305.3840   
                                                                           ORH6F404.944    
      IF (L_OCNASSM) THEN                                                  ORH1F305.3841   
C                                                                          BLOKINIT.582    
C-----------------------------------------------------------------------   BLOKINIT.583    
C ADD DATA ASSIMILATION INCREMENTS FOR ROW JREAD                           BLOKINIT.584    
C-----------------------------------------------------------------------   BLOKINIT.585    
C                                                                          BLOKINIT.586    
         IF (LL_ASS_BTRP) THEN                                             ORH6F404.945    
            DO K=1,KM                                                      ORH6F404.946    
               DO I=1,IMU                                                  ORH6F404.947    
                  IF (KMUP(I).GE.KAR(K)) THEN                              ORH6F404.948    
                     UP(I,K)=UP(I,K)+DU_ASS_BTRP(I,JREAD)                  ORH6F404.949    
                     VP(I,K)=VP(I,K)+DV_ASS_BTRP(I,JREAD)                  ORH6F404.950    
                  ENDIF                                                    ORH6F404.951    
               ENDDO  ! Over I                                             ORH6F404.952    
            ENDDO     ! Over K                                             ORH6F404.953    
         ENDIF                                                             ORH6F404.954    
      ENDIF                                                                ORH1F305.3842   
C                                                                          BLOKINIT.598    
C---------------------------------------------------------------------     BLOKINIT.599    
C  ACCUMULATE KINETIC ENERGY FROM ROW 2 EVERY NTSI TIMESTEPS               BLOKINIT.600    
C---------------------------------------------------------------------     BLOKINIT.601    
C                                                                          BLOKINIT.602    
      IF (JST.EQ.1) THEN                                                   BLOKINIT.603    
         IF (MOD(ITT,NTSI).EQ.0) THEN                                      BLOKINIT.605    
            DO K=1,KM                                                      ORH6F404.955    
               FX=0.5*CS(J+1)*DYU(J+1)*DZ(K)                               ORH6F404.956    
               DO I=2,IMUM1                                                ORH6F404.957    
                  EKTOT=EKTOT+(UP(I,K)*UP(I,K)+VP(I,K)*VP(I,K))*           ORH6F404.958    
     &                           FX*DXU(I)                                 ORH6F404.959    
               ENDDO  ! Over I                                             ORH6F404.960    
            ENDDO     ! Over K                                             ORH6F404.961    
         ENDIF                                                             BLOKINIT.612    
      ENDIF                                                                BLOKINIT.614    
C                                                                          BLOKINIT.615    
C---------------------------------------------------------------------     BLOKINIT.616    
C  COMPUTE DENSITY TO THE SOUTH OF ROW JST                                 BLOKINIT.617    
C---------------------------------------------------------------------     BLOKINIT.618    
C                                                                          BLOKINIT.619    
      CALL STATE(TP(1,1,1),TP(1,1,2),RHOS,                                 BLOKINIT.621    
     &           TDIF(1,1,1),TDIF(1,1,2),IMT,KM,                           BLOKINIT.622    
     &       JREAD,JMT)                                                    ORH7F404.78     
      IF (L_OCYCLIC) THEN                                                  ORH1F305.3843   
C                                                                          BLOKINIT.629    
C---------------------------------------------------------------------     ORH6F404.962    
C  SET CYCLIC BOUNDARY CONDITIONS ON DENSITY TO THE SOUTH OF ROW JST       ORH6F404.963    
C---------------------------------------------------------------------     ORH6F404.964    
C                                                                          BLOKINIT.631    
         DO K=1,KM                                                         ORH6F404.965    
            RHOS(IMT,K)=RHOS(2,K)                                          ORH6F404.966    
         ENDDO  ! Over K                                                   ORH6F404.967    
      ENDIF                                                                ORH1F305.3844   
C                                                                          BLOKINIT.636    
C                                                                          BLOKINIT.637    
C   If this is the first row of a block, we must ensure that               BLOKINIT.638    
C   certain southern boundary values are available for the main            BLOKINIT.639    
C   part of the computation.                                               BLOKINIT.640    
*IF DEF,MPP                                                                ORH9F402.157    
C   Pass between PEs values of WSX,WSY,WSX_LEADS,WSY_LEADS,                ODC1F405.40     
C   ISX and ISY in the next row outside the halo for use in                ODC1F405.41     
C   VERTCOFT (labelled WSXM etc)                                           ODC1F405.42     
      IF (J_PE_JFINP1.GE.0) THEN                                           ORH6F404.968    
         ! We must send row J_JMT-1                                        ORH6F404.969    
         PE_RECV=J_PE_JFINP1                                               ORH6F404.970    
         CALL GC_RSEND(5004,IMT,PE_RECV,INFO,WSXM,                         ORH6F404.971    
     &                   D1(joc_taux+(J_JMT-2)*IMT))                       ODC2F405.1      
      ENDIF                                                                ORH6F404.972    
      CALL GC_GSYNC(O_NPROC,INFO)                                          ORH6F404.973    
      IF (J_PE_JSTM1.GE.0) THEN                                            ORH6F404.974    
         ! We're expecting to receive a message:                           ORH6F404.975    
         PE_SEND = J_PE_JSTM1                                              ORH6F404.976    
         CALL GC_RRECV(5004,IMT,PE_SEND,INFO,WSXM,D1)                      ORH6F404.977    
      ENDIF                                                                ORH6F404.978    
      CALL GC_GSYNC(O_NPROC,INFO)                                          ORH6F404.979    
      IF (J_PE_JFINP1.GE.0) THEN                                           ORH6F404.980    
         ! We must send row J_JMT-1                                        ORH6F404.981    
         PE_RECV=J_PE_JFINP1                                               ORH6F404.982    
         CALL GC_RSEND(5005,IMT,PE_RECV,INFO,WSYM,                         ORH6F404.983    
     &                   D1(joc_tauy+(J_JMT-2)*IMT))                       ODC2F405.2      
      ENDIF                                                                ORH6F404.984    
      CALL GC_GSYNC(O_NPROC,INFO)                                          ORH6F404.985    
      IF (J_PE_JSTM1.GE.0) THEN                                            ORH6F404.986    
         ! We're expecting to receive a message:                           ORH6F404.987    
         PE_SEND = J_PE_JSTM1                                              ORH6F404.988    
         CALL GC_RRECV(5005,IMT,PE_SEND,INFO,WSYM,D1)                      ORH6F404.989    
      ENDIF                                                                ORH6F404.990    
      CALL GC_GSYNC(O_NPROC,INFO)                                          ORH6F404.991    
C   Swap WSX                                                               ODC1F405.43     
      IF (J_PE_JFINP1.GE.0) THEN                                           ODC1F405.44     
         ! We must send row J_JMT-1                                        ODC1F405.45     
         PE_RECV=J_PE_JFINP1                                               ODC1F405.46     
         CALL GC_RSEND(5004,IMT,PE_RECV,INFO,WSXM,                         ODC1F405.47     
     &                   D1(joc_taux+(J_JMT-1)*IMT))                       ODC1F405.48     
      ENDIF                                                                ODC1F405.49     
      CALL GC_GSYNC(O_NPROC,INFO)                                          ODC1F405.50     
      IF (J_PE_JSTM1.GE.0) THEN                                            ODC1F405.51     
         ! We're expecting to receive a message:                           ODC1F405.52     
         PE_SEND = J_PE_JSTM1                                              ODC1F405.53     
         CALL GC_RRECV(5004,IMT,PE_SEND,INFO,WSXM,D1)                      ODC1F405.54     
      ENDIF                                                                ODC1F405.55     
      CALL GC_GSYNC(O_NPROC,INFO)                                          ODC1F405.56     
C   Swap WSY                                                               ODC1F405.57     
      IF (J_PE_JFINP1.GE.0) THEN                                           ODC1F405.58     
         ! We must send row J_JMT-1                                        ODC1F405.59     
         PE_RECV=J_PE_JFINP1                                               ODC1F405.60     
         CALL GC_RSEND(5005,IMT,PE_RECV,INFO,WSYM,                         ODC1F405.61     
     &                   D1(joc_tauy+(J_JMT-1)*IMT))                       ODC1F405.62     
      ENDIF                                                                ODC1F405.63     
      CALL GC_GSYNC(O_NPROC,INFO)                                          ODC1F405.64     
      IF (J_PE_JSTM1.GE.0) THEN                                            ODC1F405.65     
         ! We're expecting to receive a message:                           ODC1F405.66     
         PE_SEND = J_PE_JSTM1                                              ODC1F405.67     
         CALL GC_RRECV(5005,IMT,PE_SEND,INFO,WSYM,D1)                      ODC1F405.68     
      ENDIF                                                                ODC1F405.69     
      CALL GC_GSYNC(O_NPROC,INFO)                                          ODC1F405.70     
                                                                           ODC1F405.71     
      ! Ice model related code only executed under suitable                ODC1F405.72     
      ! model configurations.                                              ODC1F405.73     
      IF (L_ICEFREEDR) THEN                                                ODC1F405.74     
C   Swap WSX_LEADS                                                         ODC1F405.75     
         IF (J_PE_JFINP1.GE.0) THEN                                        ODC1F405.76     
            ! We must send row J_JMT-1                                     ODC1F405.77     
            PE_RECV=J_PE_JFINP1                                            ODC1F405.78     
            CALL GC_RSEND(5006,IMT,PE_RECV,INFO,WSX_LEADSM,                ODC1F405.79     
     &                              WSX_LEADS(1,J_JMTM1))                  ODC1F405.80     
         ENDIF                                                             ODC1F405.81     
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.82     
         IF (J_PE_JSTM1.GE.0) THEN                                         ODC1F405.83     
            ! We're expecting to receive a message:                        ODC1F405.84     
            PE_SEND = J_PE_JSTM1                                           ODC1F405.85     
            CALL GC_RRECV(5006,IMT,PE_SEND,INFO,WSX_LEADSM,WSX_LEADS)      ODC1F405.86     
         ENDIF                                                             ODC1F405.87     
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.88     
C   Swap WSY_LEADS                                                         ODC1F405.89     
         IF (J_PE_JFINP1.GE.0) THEN                                        ODC1F405.90     
            ! We must send row J_JMT-1                                     ODC1F405.91     
            PE_RECV=J_PE_JFINP1                                            ODC1F405.92     
            CALL GC_RSEND(5007,IMT,PE_RECV,INFO,WSY_LEADSM,                ODC1F405.93     
     &                              WSY_LEADS(1,J_JMTM1))                  ODC1F405.94     
         ENDIF                                                             ODC1F405.95     
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.96     
         IF (J_PE_JSTM1.GE.0) THEN                                         ODC1F405.97     
            ! We're expecting to receive a message:                        ODC1F405.98     
            PE_SEND = J_PE_JSTM1                                           ODC1F405.99     
            CALL GC_RRECV(5007,IMT,PE_SEND,INFO,WSY_LEADSM,WSY_LEADS)      ODC1F405.100    
         ENDIF                                                             ODC1F405.101    
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.102    
C   Swap ISX                                                               ODC1F405.103    
         IF (J_PE_JFINP1.GE.0) THEN                                        ODC1F405.104    
            ! We must send row J_JMT-1                                     ODC1F405.105    
            PE_RECV=J_PE_JFINP1                                            ODC1F405.106    
            CALL GC_RSEND(5008,IMT,PE_RECV,INFO,ISXM,                      ODC1F405.107    
     &                              ISX(1,J_JMTM1))                        ODC1F405.108    
         ENDIF                                                             ODC1F405.109    
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.110    
         IF (J_PE_JSTM1.GE.0) THEN                                         ODC1F405.111    
            ! We're expecting to receive a message:                        ODC1F405.112    
            PE_SEND = J_PE_JSTM1                                           ODC1F405.113    
            CALL GC_RRECV(5008,IMT,PE_SEND,INFO,ISXM,ISX)                  ODC1F405.114    
         ENDIF                                                             ODC1F405.115    
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.116    
C   Swap ISY                                                               ODC1F405.117    
         IF (J_PE_JFINP1.GE.0) THEN                                        ODC1F405.118    
            ! We must send row J_JMT-1                                     ODC1F405.119    
            PE_RECV=J_PE_JFINP1                                            ODC1F405.120    
            CALL GC_RSEND(5009,IMT,PE_RECV,INFO,ISYM,                      ODC1F405.121    
     &                              ISY(1,J_JMTM1))                        ODC1F405.122    
         ENDIF                                                             ODC1F405.123    
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.124    
         IF (J_PE_JSTM1.GE.0) THEN                                         ODC1F405.125    
            ! We're expecting to receive a message:                        ODC1F405.126    
            PE_SEND = J_PE_JSTM1                                           ODC1F405.127    
            CALL GC_RRECV(5009,IMT,PE_SEND,INFO,ISYM,ISY)                  ODC1F405.128    
         ENDIF                                                             ODC1F405.129    
         CALL GC_GSYNC(O_NPROC,INFO)                                       ODC1F405.130    
        CALL SWAPBOUNDS(WSX_LEADS,IMT,JMT,O_EW_HALO,O_NS_HALO,1)           OLA0F404.20     
        CALL SWAPBOUNDS(WSY_LEADS,IMT,JMT,O_EW_HALO,O_NS_HALO,1)           OLA0F404.21     
        CALL SWAPBOUNDS(ISX,IMT,JMT,O_EW_HALO,O_NS_HALO,1)                 OLA0F404.22     
        CALL SWAPBOUNDS(ISY,IMT,JMT,O_EW_HALO,O_NS_HALO,1)                 OLA0F404.23     
      ENDIF                                                                OLA0F404.24     
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.513    
C need to read in value for the streamfunction at row j+3 and pass it      OOM3F405.514    
C back to the row that requires it (to calculate UPP, need                 OOM3F405.515    
C barotropic solution at UPPP).                                            OOM3F405.516    
                                                                           OOM3F405.517    
      IF (J_PE_JSTM1.GE.0) THEN                                            OOM3F405.518    
c       ! We must send row J_1+2                                           OOM3F405.519    
         PE_RECV=J_PE_JSTM1                                                OOM3F405.520    
         CALL GC_RSEND(5030,IMT,PE_RECV,INFO,PBJP,PB(1,J_1+2))             OOM3F405.521    
      ENDIF                                                                OOM3F405.522    
                                                                           OOM3F405.523    
      CALL GC_GSYNC(O_NPROC,INFO)                                          OOM3F405.524    
                                                                           OOM3F405.525    
      IF (J_PE_JFINP1.GE.0) THEN                                           OOM3F405.526    
c       ! We're expecting to receive a message:                            OOM3F405.527    
         PE_SEND = J_PE_JFINP1                                             OOM3F405.528    
         CALL GC_RRECV(5030,IMT,PE_SEND,INFO,PBJP,PB)                      OOM3F405.529    
      ENDIF                                                                OOM3F405.530    
                                                                           OOM3F405.531    
      CALL GC_GSYNC(O_NPROC,INFO)                                          OOM3F405.532    
                                                                           OOM3F405.533    
      IF (J_PE_JSTM1.GE.0) THEN                                            OOM3F405.534    
c       ! We must send row J_1+2                                           OOM3F405.535    
         PE_RECV=J_PE_JSTM1                                                OOM3F405.536    
         CALL GC_RSEND(5031,IMT,PE_RECV,INFO,PJP,P(1,J_1+2))               OOM3F405.537    
      ENDIF                                                                OOM3F405.538    
                                                                           OOM3F405.539    
      CALL GC_GSYNC(O_NPROC,INFO)                                          OOM3F405.540    
                                                                           OOM3F405.541    
      IF (J_PE_JFINP1.GE.0) THEN                                           OOM3F405.542    
c       ! We're expecting to receive a message:                            OOM3F405.543    
         PE_SEND = J_PE_JFINP1                                             OOM3F405.544    
         CALL GC_RRECV(5031,IMT,PE_SEND,INFO,PJP,P)                        OOM3F405.545    
      ENDIF                                                                OOM3F405.546    
                                                                           OOM3F405.547    
      CALL GC_GSYNC(O_NPROC,INFO)                                          OOM3F405.548    
                                                                           OOM3F405.549    
      ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                     OOM3F405.550    
                                                                           OOM3F405.551    
      IF (L_OBIMOM.or.L_OBIHARMGM) THEN                                    OOM3F405.552    
                                                                           OOM3F405.553    
C Send value of FKMQ(J_1+1) back to previous PE, to be FKMQJP              OOM3F405.554    
      IF (J_PE_JSTM1.GE.0) THEN                                            OOM3F405.555    
c       ! We must send row J_1+1                                           OOM3F405.556    
         PE_RECV=J_PE_JSTM1                                                OOM3F405.557    
         CALL GC_RSEND(5032,IMT,PE_RECV,INFO,FKMQJP,FKMQ(1,J_1+1))         OOM3F405.558    
      ENDIF                                                                OOM3F405.559    
                                                                           OOM3F405.560    
      CALL GC_GSYNC(O_NPROC,INFO)                                          OOM3F405.561    
                                                                           OOM3F405.562    
      IF (J_PE_JFINP1.GE.0) THEN                                           OOM3F405.563    
c       ! We're expecting to receive a message:                            OOM3F405.564    
         PE_SEND = J_PE_JFINP1                                             OOM3F405.565    
         CALL GC_RRECV(5032,IMT,PE_SEND,INFO,FKMQJP,FKMQ)                  OOM3F405.566    
      ENDIF                                                                OOM3F405.567    
                                                                           OOM3F405.568    
      CALL GC_GSYNC(O_NPROC,INFO)                                          OOM3F405.569    
                                                                           OOM3F405.570    
      ENDIF  ! L_OBIMOM.or.L_OBIHARMGM                                     OOM3F405.571    
                                                                           OOM3F405.572    
                                                                           ORL1F404.788    
      IF (L_OFREESFC) THEN                                                 ORL1F404.789    
        ! The following variables are needed for initialisation            ORL1F404.790    
        ! purposes at block boundaries, but are outside the scope of       ORL1F404.791    
        ! our standard mpp halo. We therefore set up special variables     ORL1F404.792    
        ! to handle them. It's a bit of a drag in terms of shuffling       ORL1F404.793    
        ! more data around in argument lists, but it does ensure           ORL1F404.794    
        ! that the necessary communications (which is the main             ORL1F404.795    
        ! performance overhead) are only performed once per run.           ORL1F404.796    
                                                                           ORL1F404.797    
        IF (J_PE_JFINP1.GE.0) THEN                                         ORL1F404.798    
           ! We must send row J_JMT-1                                      ORL1F404.799    
           PE_RECV=J_PE_JFINP1                                             ORL1F404.800    
           CALL GC_RSEND (5012,IMT,PE_RECV                                 ORL1F404.801    
     &                   ,INFO,UBTBBCJ,UBTBBC(1,J_JMT-1))                  ORL1F404.802    
        ENDIF                                                              ORL1F404.803    
                                                                           ORL1F404.804    
        CALL GC_GSYNC(O_NPROC,INFO)                                        ORL1F404.805    
                                                                           ORL1F404.806    
        IF (J_PE_JSTM1.GE.0) THEN                                          ORL1F404.807    
           ! We're expecting to receive a message:                         ORL1F404.808    
           PE_SEND = J_PE_JSTM1                                            ORL1F404.809    
           CALL GC_RRECV (5012,IMT,PE_SEND                                 ORL1F404.810    
     &                    ,INFO,UBTBBCJ,UBTBBC)                            ORL1F404.811    
        ENDIF                                                              ORL1F404.812    
                                                                           ORL1F404.813    
        CALL GC_GSYNC(O_NPROC,INFO)                                        ORL1F404.814    
        IF (J_PE_JFINP1.GE.0) THEN                                         ORL1F404.815    
           ! We must send row J_JMT-1                                      ORL1F404.816    
           PE_RECV=J_PE_JFINP1                                             ORL1F404.817    
           CALL GC_RSEND (5013,IMT,PE_RECV                                 ORL1F404.818    
     &                   ,INFO,VBTBBCJ,VBTBBC(1,J_JMT-1))                  ORL1F404.819    
        ENDIF                                                              ORL1F404.820    
                                                                           ORL1F404.821    
        CALL GC_GSYNC(O_NPROC,INFO)                                        ORL1F404.822    
                                                                           ORL1F404.823    
        IF (J_PE_JSTM1.GE.0) THEN                                          ORL1F404.824    
           ! We're expecting to receive a message:                         ORL1F404.825    
           PE_SEND = J_PE_JSTM1                                            ORL1F404.826    
           CALL GC_RRECV (5013,IMT,PE_SEND                                 ORL1F404.827    
     &                    ,INFO,VBTBBCJ,VBTBBC)                            ORL1F404.828    
        ENDIF                                                              ORL1F404.829    
                                                                           ORL1F404.830    
        CALL GC_GSYNC(O_NPROC,INFO)                                        ORL1F404.831    
                                                                           ORL1F404.832    
      ENDIF    ! (L_OFREESFC)                                              ORL1F404.833    
*ENDIF                                                                     OLA3F403.185    
C                                                                          BLOKINIT.641    
      IF (JST.GT.1) THEN                                                   BLOKINIT.642    
C                                                                          BLOKINIT.643    
C---------------------------------------------------------------------     BLOKINIT.644    
C  COMPUTE DENSITY TO THE SOUTH OF ROW JST - 1 (in order to calculate      BLOKINIT.645    
C  rxp, ry and rrzp for the first call to IPDCOFCL).                       BLOKINIT.646    
C---------------------------------------------------------------------     BLOKINIT.647    
C                                                                          BLOKINIT.648    
         CALL STATE (T (1,1,1),T (1,1,2),RHOSM,                            ORH6F404.992    
     &           TDIF(1,1,1),TDIF(1,1,2),IMT,KM,                           BLOKINIT.651    
     &     JREAD-1,JMT)                                                    ORH7F404.79     
                                                                           ORH6F404.993    
         CALL STATE (TM(1,1,1),TM(1,1,2),RHOSM2,                           ORH6F404.994    
     &           TDIF(1,1,1),TDIF(1,1,2),IMT,KM,                           BLOKINIT.654    
     &     JREAD-2,JMT)                                                    ORH7F404.80     
                                                                           ORH6F404.995    
         fxe = 1.E10                                                       ORH6F404.996    
                                                                           ORH6F404.997    
         IF (L_OCYCLIC) THEN                                               ORH6F404.998    
C                                                                          BLOKINIT.664    
C---------------------------------------------------------------------     ORH6F404.999    
C  SET CYCLIC BOUNDARY CONDITIONS ON DENSITY                               ORH6F404.1000   
C---------------------------------------------------------------------     ORH6F404.1001   
C                                                                          BLOKINIT.666    
            DO K=1,KM                                                      ORH6F404.1002   
               RHOSM2(IMT,K)=RHOSM2(2,K)                                   ORH6F404.1003   
               RHOSM (IMT,K)=RHOSM (2,K)                                   ORH6F404.1004   
            ENDDO  ! Over K                                                ORH6F404.1005   
         ENDIF                                                             ORH6F404.1006   
                                                                           ORH6F404.1007   
         IF (L_OISOPYC) THEN                                               ORH6F404.1008   
                                                                           ORH6F404.1009   
!-----------------------------------------------------------------------   ORH6F404.1010   
! Compute rxp, ry, rrzp ready for the first call to IPDCOFCL               ORH6F404.1011   
!-----------------------------------------------------------------------   ORH6F404.1012   
                                                                           ORH6F404.1013   
            DO K = 1, KM                                                   ORH6F404.1014   
               DO I = 1, IMT                                               ORH6F404.1015   
                  ry(I,K)=FM(I,K)*FMM(I,K)*(RHOSM(I,K)-RHOSM2(I,K))*fxe    ORH6F404.1016   
               ENDDO  ! Over I                                             ORH6F404.1017   
               DO I = 1, IMTM1                                             ORH6F404.1018   
                  rxp  (I,K)=                                              ORH6F404.1019   
     &                  FM(I,K)*FM(I+1,K)*(RHOSM(I+1,K)-RHOSM(I,K))*fxe    ORH6F404.1020   
               ENDDO ! Over I                                              ORH6F404.1021   
                                                                           ORH6F404.1022   
               IF (L_OCYCLIC) THEN                                         ORH6F404.1023   
                  rxp  (IMT,K) = rxp  (2,K)                                ORH6F404.1024   
               ELSE                                                        ORH6F404.1025   
                  rxp  (IMT,K) = 0.0                                       ORH6F404.1026   
               ENDIF                                                       ORH6F404.1027   
            ENDDO    ! Over K                                              ORH6F404.1028   
                                                                           ORH6F404.1029   
            DO K=1,KMP1                                                    ORH6F404.1030   
               DO I=1,IMT                                                  ORH6F404.1031   
                  tempa(I,K) = 0.0                                         ORH6F404.1032   
                  tempb(I,K) = 0.0                                         ORH6F404.1033   
               ENDDO ! Over I                                              ORH6F404.1034   
            ENDDO    ! Over K                                              ORH6F404.1035   
                                                                           ORH6F404.1036   
            CALL STATEC(T ,T (1,1,2),tempa,TDIF,TDIF(1,1,2),1,IMT,KM,      ORH6F404.1037   
     &                  JREAD-2,JMT)                                       ORH6F404.1038   
            CALL STATEC(T ,T (1,1,2),tempb,TDIF,TDIF(1,1,2),2,IMT,KM,      ORH6F404.1039   
     &                  JREAD-2,JMT)                                       ORH6F404.1040   
                                                                           ORH6F404.1041   
            DO I=1,IMT                                                     ORH6F404.1042   
               tempa(I,KMP1) = tempa(I,KM)                                 ORH6F404.1043   
               tempb(I,KMP1) = tempb(I,KM)                                 ORH6F404.1044   
            ENDDO      ! Over I                                            ORH6F404.1045   
                                                                           ORH6F404.1046   
            DO K=2,KM,2                                                    ORH6F404.1047   
               DO I=1,IMT                                                  ORH6F404.1048   
                  rrzp  (I,K )=tempa(I,K-1)-tempa(I,K )                    ORH6F404.1049   
                  rrzp  (I,K+1)=tempb(I,K)-tempb(I,K+1)                    ORH6F404.1050   
               ENDDO   ! Over I                                            ORH6F404.1051   
            ENDDO      ! Over K                                            ORH6F404.1052   
                                                                           ORH6F404.1053   
            IF (L_OEXTRAP) THEN                                            ORH6F404.1054   
               IF (L_OTIMER) CALL TIMER('EXTRAP  ',103)                    GPB8F405.74     
                  CALL EXTRAP                                              ORH6F404.1056   
     &                (imt,imtm1,kmp1,km,fxe,                              ORH6F404.1057   
     &                 kmt,kmtp,dzz,dzz2rq,dz2rq,                          ORH6F404.1058   
     &                 tempa,tempb,rrzp,drhob1p,drhob2p                    ORH6F404.1059   
     &                )                                                    ORH6F404.1060   
               IF (L_OTIMER) CALL TIMER('EXTRAP  ',104)                    GPB8F405.75     
C k loop from 1 to KM when setting rrz(k=1) to an interpolated value       OLA1F402.6      
C which is relevent for the middle of the t grid box                       OLA1F402.7      
               do k=1,km                                                   ORH6F404.1062   
                  do i=1,imt                                               ORH6F404.1063   
                     rrzp(i,k)=FM(i,k)*rrzp(i,k)*fxe                       ORH6F404.1064   
                  enddo                                                    ORH6F404.1065   
               enddo                                                       ORH6F404.1066   
               do i=1,imt                                                  ORH6F404.1067   
                  rrzp(i,kmp1)=0.0                                         ORH6F404.1068   
               enddo                                                       ORH6F404.1069   
            ELSE                                                           ORH6F404.1070   
C k loop from 2 to KM when setting rrz(k=1) to zero                        ORH6F404.1071   
               DO K=2,KM                                                   ORH6F404.1072   
                  DO I=1,IMT                                               ORH6F404.1073   
                     rrzp  (I,K)=FM (I,K)*rrzp  (I,K)*fxe                  ORH6F404.1074   
                  ENDDO   ! Over I                                         ORH6F404.1075   
               ENDDO      ! Over K                                         ORH6F404.1076   
               DO I=1,IMT                                                  ORH6F404.1077   
                  rrzp(I,1) = 0.0                                          ORH6F404.1078   
                  rrzp  (I,KMP1)=0.0                                       ORH6F404.1079   
               ENDDO      ! Over I                                         ORH6F404.1080   
            ENDIF                                                          ORH6F404.1081   
         ENDIF ! L_OISOPYC = true                                          ORH6F404.1082   
C this has j=j_1-1 set                                                     OOM1F405.1917   
                                                                           OOM1F405.1918   
      IF (L_OISOPYC) THEN                                                  OOM1F405.1919   
C Initialise values involved with new isopycnal diffusion and GM90         OOM1F405.1920   
C scheme                                                                   OOM1F405.1921   
      c0=0.                                                                OOM1F405.1922   
      c1=1.                                                                OOM1F405.1923   
      p5=.5                                                                OOM1F405.1924   
      epsln=1.0e-25                                                        OOM1F405.1925   
      slmxr=c1/slope_max                                                   OOM1F405.1926   
                                                                           OOM1F405.1927   
c-----------------------------------------------------------------------   OOM1F405.1928   
c     store the square root of the tracer timestep acceleration values     OOM1F405.1929   
c     into variable "dtxsqr" for use in isopycnal mixing                   OOM1F405.1930   
c     this is a MOM variable related to distorted timestepping:            OOM1F405.1931   
c     set equal to 1                                                       OOM1F405.1932   
c-----------------------------------------------------------------------   OOM1F405.1933   
      do k=1,km                                                            OOM1F405.1934   
       dtxsqr(k) = c1                                                      OOM1F405.1935   
      enddo                                                                OOM1F405.1936   
                                                                           OOM1F405.1937   
      IF (L_OISOGM) THEN                                                   OOM1F405.1938   
                                                                           OOM1F405.1939   
c diffusivity for biharmonic GM (set to zero if not selected)              OOM1F405.1940   
          athkdftu_bi=athkdf_bi                                            OOM1F405.1941   
          athkdftv_bi=athkdf_bi                                            OOM1F405.1942   
                                                                           OOM1F405.1943   
      IF (.NOT.L_OVISBECK) THEN                                            OOM1F405.1944   
        do k=1,km                                                          OOM1F405.1945   
         do i=1,imt                                                        OOM1F405.1946   
          athkdftu_mom(i,k)=athkdf(k)                                      OOM1F405.1947   
          athkdftv_mom(i,k)=athkdf(k)                                      OOM1F405.1948   
         enddo                                                             OOM1F405.1949   
        enddo                                                              OOM1F405.1950   
      ELSE                                                                 OOM1F405.1951   
        do k=1,km                                                          OOM1F405.1952   
         do i=1,imt                                                        OOM1F405.1953   
          athkdftu_mom(i,k)=athkdftu(i,j)                                  OOM1F405.1954   
          athkdftv_mom(i,k)=athkdftv(i,j)                                  OOM1F405.1955   
         enddo                                                             OOM1F405.1956   
        enddo                                                              OOM1F405.1957   
      ENDIF  ! L_OVISBECK                                                  OOM1F405.1958   
                                                                           OOM1F405.1959   
      do k=1,km                                                            OOM1F405.1960   
        top_bc(k) = c1                                                     OOM1F405.1961   
        bot_bc(k) = c1                                                     OOM1F405.1962   
      enddo                                                                OOM1F405.1963   
      top_bc(1)  = c0                                                      OOM1F405.1964   
      bot_bc(km) = c0                                                      OOM1F405.1965   
                                                                           OOM1F405.1966   
      ENDIF ! L_OISOGM                                                     OOM1F405.1967   
                                                                           OOM1F405.1968   
C initialise the expansion coeffs, alpha and beta, and the tracer          OOM1F405.1969   
C gradients before the first call to isopyc_m. Also need to                OOM1F405.1970   
C initialize variables for isopyc_a                                        OOM1F405.1971   
C this is inside a L_OSIOPYC and JST>1                                     OOM1F405.1972   
c=======================================================================   OOM1F405.1973   
c     Estimate alpha, beta, and normal gradients on faces of T cells       OOM1F405.1974   
c=======================================================================   OOM1F405.1975   
c                                                                          OOM1F405.1976   
       IF (L_OISOMOM) THEN                                                 OOM1F405.1977   
                                                                           OOM1F405.1978   
       CALL DRODT(TBM,TBM(1,1,2),alphai(1,1,0),imt,km)                     OOM1F405.1979   
       CALL DRODS(TBM,TBM(1,1,2),betai(1,1,0),imt,km)                      OOM1F405.1980   
       call SETBCX (alphai(1,1,0), imt, km)                                OOM1F405.1981   
       call SETBCX (betai(1,1,0),  imt, km)                                OOM1F405.1982   
                                                                           OOM1F405.1983   
       CALL DRODT(TB,TB(1,1,2),alphai(1,1,1),imt,km)                       OOM1F405.1984   
       CALL DRODS(TB,TB(1,1,2),betai(1,1,1),imt,km)                        OOM1F405.1985   
       call SETBCX (alphai(1,1,1), imt, km)                                OOM1F405.1986   
       call SETBCX (betai(1,1,1),  imt, km)                                OOM1F405.1987   
                                                                           OOM1F405.1988   
       IF (L_OBIHARMGM) THEN                                               OOM1F405.1989   
         CALL DRODT(TBP,TBP(1,1,2),alphai(1,1,2),imt,km)                   OOM1F405.1990   
         CALL DRODS(TBP,TBP(1,1,2),betai(1,1,2),imt,km)                    OOM1F405.1991   
         call SETBCX (alphai(1,1,2), imt, km)                              OOM1F405.1992   
         call SETBCX (betai(1,1,2),  imt, km)                              OOM1F405.1993   
       ENDIF                                                               OOM1F405.1994   
c                                                                          OOM1F405.1995   
       do n=1,2                                                            OOM1F405.1996   
         do k=1,km                                                         OOM1F405.1997   
            do i=1,imt-1                                                   OOM1F405.1998   
              ddxt(i,k,n,1) = (((fm(i,k)*fm(i+1,k))*cstr(j))*              OOM1F405.1999   
     &                   dxur(i))*(tb(i+1,k,n) - tb(i,k,n))                OOM1F405.2000   
            enddo                                                          OOM1F405.2001   
          enddo                                                            OOM1F405.2002   
          call SETBCX (ddxt(1,1,n,1), imt, km)                             OOM1F405.2003   
       enddo                                                               OOM1F405.2004   
c                                                                          OOM1F405.2005   
        do n=1,2                                                           OOM1F405.2006   
          do k=1,km                                                        OOM1F405.2007   
            do i=1,imt                                                     OOM1F405.2008   
             ddyt(i,k,n,1) = ((fmm(i,k)*fm(i,k))*dyurjm)*                  OOM1F405.2009   
     &                 (tb(i,k,n) - tbm(i,k,n))                            OOM1F405.2010   
            enddo                                                          OOM1F405.2011   
          enddo                                                            OOM1F405.2012   
          call SETBCX (ddyt(1,1,n,1), imt, km)                             OOM1F405.2013   
        enddo                                                              OOM1F405.2014   
c                                                                          OOM1F405.2015   
       IF (L_OBIHARMGM) THEN                                               OOM1F405.2016   
        do n=1,2                                                           OOM1F405.2017   
          do k=1,km                                                        OOM1F405.2018   
            do i=1,imt                                                     OOM1F405.2019   
              ddyt(i,k,n,2) = ((fm(i,k)*fmp(i,k))*dyur(j))*                OOM1F405.2020   
     &                 (tbp(i,k,n) - tb(i,k,n))                            OOM1F405.2021   
                                                                           OOM1F405.2022   
            enddo                                                          OOM1F405.2023   
          enddo                                                            OOM1F405.2024   
          call SETBCX (ddyt(1,1,n,2), imt, km)                             OOM1F405.2025   
        enddo                                                              OOM1F405.2026   
       ENDIF                                                               OOM1F405.2027   
c                                                                          OOM1F405.2028   
        do n=1,2                                                           OOM1F405.2029   
          do k=1,km                                                        OOM1F405.2030   
            kp1 = min(k+1,km)                                              OOM1F405.2031   
            do i=1,imt                                                     OOM1F405.2032   
              ddzt(i,k,n,0) = ((2.*fmm(i,kp1))*dzz2r(k+1))*                OOM1F405.2033   
     &                        (tbm(i,k,n) - tbm(i,kp1,n))                  OOM1F405.2034   
              ddzt(i,k,n,1) = ((2.*fm(i,kp1))*dzz2r(k+1))*                 OOM1F405.2035   
     &                        (tb(i,k,n) - tb(i,kp1,n))                    OOM1F405.2036   
            enddo                                                          OOM1F405.2037   
          enddo                                                            OOM1F405.2038   
          do i=1,imt                                                       OOM1F405.2039   
            ddzt(i,0,n,0) = 0.                                             OOM1F405.2040   
            ddzt(i,0,n,1) = 0.                                             OOM1F405.2041   
          enddo                                                            OOM1F405.2042   
          call SETBCX (ddzt(1,0,n,0), imt, km+1)                           OOM1F405.2043   
          call SETBCX (ddzt(1,0,n,1), imt, km+1)                           OOM1F405.2044   
        enddo                                                              OOM1F405.2045   
c                                                                          OOM1F405.2046   
       IF (L_OBIHARMGM) THEN                                               OOM1F405.2047   
        do n=1,2                                                           OOM1F405.2048   
          do k=1,km                                                        OOM1F405.2049   
            kp1 = min(k+1,km)                                              OOM1F405.2050   
            do i=1,imt                                                     OOM1F405.2051   
              ddzt(i,k,n,2) = ((2.*fmp(i,kp1))*dzz2r(k+1))*                OOM1F405.2052   
     &                        (tbp(i,k,n) - tbp(i,kp1,n))                  OOM1F405.2053   
            enddo                                                          OOM1F405.2054   
          enddo                                                            OOM1F405.2055   
          do i=1,imt                                                       OOM1F405.2056   
            ddzt(i,0,n,2) = 0.                                             OOM1F405.2057   
          enddo                                                            OOM1F405.2058   
          call SETBCX (ddzt(1,0,n,2), imt, km+1)                           OOM1F405.2059   
        enddo                                                              OOM1F405.2060   
       ENDIF                                                               OOM1F405.2061   
c                                                                          OOM1F405.2062   
        IF (L_OISOGM) THEN                                                 OOM1F405.2063   
        do k=1,km                                                          OOM1F405.2064   
          km1 = max(k-1,1)                                                 OOM1F405.2065   
          kp1 = min(k+1,km)                                                OOM1F405.2066   
          do i=1,imt                                                       OOM1F405.2067   
            at =  ((alphai(i,k,0) + alphai(i,k,1)) + alphai(i,km1,0))      OOM1F405.2068   
     &              + alphai(i,km1,1)                                      OOM1F405.2069   
            bt =  ((betai(i,k,0) + betai(i,k,1)) + betai(i,km1,0))         OOM1F405.2070   
     &              + betai(i,km1,1)                                       OOM1F405.2071   
            stn(i,k,1) = -(at*(ddyt(i,k,1,1) + ddyt(i,km1,1,1))            OOM1F405.2072   
     &               + bt*(ddyt(i,k,2,1) + ddyt(i,km1,2,1)))               OOM1F405.2073   
     &               / (at*(ddzt(i,km1,1,0) + ddzt(i,km1,1,1))             OOM1F405.2074   
     &               + bt*(ddzt(i,km1,2,0) + ddzt(i,km1,2,1))+epsln)       OOM1F405.2075   
c                                                                          OOM1F405.2076   
            ab =  ((alphai(i,k,0) + alphai(i,k,1)) + alphai(i,kp1,0))      OOM1F405.2077   
     &              + alphai(i,kp1,1)                                      OOM1F405.2078   
            bb =  ((betai(i,k,0) + betai(i,k,1)) + betai(i,kp1,0))         OOM1F405.2079   
     &              + betai(i,kp1,1)                                       OOM1F405.2080   
            sbn(i,k,1) = -(ab*(ddyt(i,k,1,1) + ddyt(i,kp1,1,1))            OOM1F405.2081   
     &               + bb*(ddyt(i,k,2,1) + ddyt(i,kp1,2,1)))               OOM1F405.2082   
     &               / (ab*(ddzt(i,k,1,0) + ddzt(i,k,1,1))                 OOM1F405.2083   
     &               + bb*(ddzt(i,k,2,0) + ddzt(i,k,2,1))+epsln)           OOM1F405.2084   
                                                                           OOM1F405.2085   
            stn(i,k,0)=c0                                                  OOM1F405.2086   
            sbn(i,k,0)=c0                                                  OOM1F405.2087   
          enddo                                                            OOM1F405.2088   
        enddo                                                              OOM1F405.2089   
                                                                           OOM1F405.2090   
      IF (L_OISOTAPER) THEN                                                OOM1F405.2091   
        do k=1,km                                                          OOM1F405.2092   
          kp1 = min(k+1,km)                                                OOM1F405.2093   
          do i=1,imt                                                       OOM1F405.2094   
             Ath0 = c1                                                     OOM1F405.2095   
c            Ath0 = athkdftv_bi(i,k)                                       OOM1F405.2096   
            ath_tn(i,k,0) = c0                                             OOM1F405.2097   
            ath_bn(i,k,0) = c0                                             OOM1F405.2098   
            absstn = abs(stn(i,k,1))                                       OOM1F405.2099   
            abssbn = abs(sbn(i,k,1))                                       OOM1F405.2100   
            tanh_temp(i) = (absstn-slopec)/dslope                          OOM1F405.2101   
            tanh_temp(i+imt) = (abssbn-slopec)/dslope                      OOM1F405.2102   
          enddo                                                            OOM1F405.2103   
                                                                           OOM1F405.2104   
          call fast_tanh(imt*2,tanh_temp)                                  OOM1F405.2105   
                                                                           OOM1F405.2106   
          do i=1,imt                                                       OOM1F405.2107   
             ath_tn(i,k,1) = (((Ath0*fmm(i,k))*fm(i,k))                    OOM1F405.2108   
     &             *p5)*(c1-tanh_temp(i))                                  OOM1F405.2109   
             ath_bn(i,k,1) = (((Ath0*fmm(i,kp1))*fm(i,kp1))                OOM1F405.2110   
     &             *p5)*(c1-tanh_temp(i+imt))                              OOM1F405.2111   
          enddo                                                            OOM1F405.2112   
        enddo                                                              OOM1F405.2113   
                                                                           OOM1F405.2114   
      ELSE                                                                 OOM1F405.2115   
                                                                           OOM1F405.2116   
        do k=1,km                                                          OOM1F405.2117   
          sc = c1/(slmxr*dtxsqr(k))                                        OOM1F405.2118   
          kp1 = min(k+1,km)                                                OOM1F405.2119   
          do i=1,imt                                                       OOM1F405.2120   
             Ath0 = c1                                                     OOM1F405.2121   
c            Ath0 = athkdftv_bi(i,k)                                       OOM1F405.2122   
            absstn = abs(stn(i,k,1))                                       OOM1F405.2123   
            abssbn = abs(sbn(i,k,1))                                       OOM1F405.2124   
            if (absstn .gt. sc) then                                       OOM1F405.2125   
              ath_tn(i,k,1) = ((Ath0*fmm(i,k))*fm(i,k))                    OOM1F405.2126   
     &              *(sc/(absstn + epsln))**2                              OOM1F405.2127   
            else                                                           OOM1F405.2128   
              ath_tn(i,k,1) = (Ath0*fmm(i,k))*fm(i,k)                      OOM1F405.2129   
            endif                                                          OOM1F405.2130   
            if (abssbn .gt. sc) then                                       OOM1F405.2131   
              ath_bn(i,k,1) = ((Ath0*fmm(i,kp1))*fm(i,kp1))                OOM1F405.2132   
     &              *(sc/(abssbn + epsln))**2                              OOM1F405.2133   
            else                                                           OOM1F405.2134   
              ath_bn(i,k,1) = (Ath0*fmm(i,kp1))*fm(i,kp1)                  OOM1F405.2135   
            endif                                                          OOM1F405.2136   
          enddo                                                            OOM1F405.2137   
        enddo                                                              OOM1F405.2138   
      ENDIF ! taper                                                        OOM1F405.2139   
                                                                           OOM1F405.2140   
      IF (L_OBIHARMGM) THEN                                                OOM1F405.2141   
        do k=1,km                                                          OOM1F405.2142   
          km1 = max(k-1,1)                                                 OOM1F405.2143   
          kp1 = min(k+1,km)                                                OOM1F405.2144   
          do i=1,imt                                                       OOM1F405.2145   
            at = ((alphai(i,k,1) + alphai(i,k,2)) + alphai(i,km1,1))       OOM1F405.2146   
     &            + alphai(i,km1,2)                                        OOM1F405.2147   
            bt = ((betai(i,k,1) + betai(i,k,2)) + betai(i,km1,1))          OOM1F405.2148   
     &            + betai(i,km1,2)                                         OOM1F405.2149   
            stn(i,k,2) = -(at*(ddyt(i,k,1,2) + ddyt(i,km1,1,2))            OOM1F405.2150   
     &               + bt*(ddyt(i,k,2,2) + ddyt(i,km1,2,2)))               OOM1F405.2151   
     &               / (at*(ddzt(i,km1,1,1) + ddzt(i,km1,1,2))             OOM1F405.2152   
     &               + bt*(ddzt(i,km1,2,1) + ddzt(i,km1,2,2))+epsln)       OOM1F405.2153   
                                                                           OOM1F405.2154   
            ab =  ((alphai(i,k,1) + alphai(i,k,2)) + alphai(i,kp1,1))      OOM1F405.2155   
     &            + alphai(i,kp1,2)                                        OOM1F405.2156   
            bb =  ((betai(i,k,1) + betai(i,k,2)) + betai(i,kp1,1))         OOM1F405.2157   
     &            + betai(i,kp1,2)                                         OOM1F405.2158   
            sbn(i,k,2) = -(ab*(ddyt(i,k,1,2) + ddyt(i,kp1,1,2))            OOM1F405.2159   
     &               + bb*(ddyt(i,k,2,2) + ddyt(i,kp1,2,2)))               OOM1F405.2160   
     &               / (ab*(ddzt(i,k,1,1) + ddzt(i,k,1,2))                 OOM1F405.2161   
     &               + bb*(ddzt(i,k,2,1) + ddzt(i,k,2,2))+epsln)           OOM1F405.2162   
          enddo                                                            OOM1F405.2163   
        enddo                                                              OOM1F405.2164   
                                                                           OOM1F405.2165   
      IF (L_OISOTAPER) THEN                                                OOM1F405.2166   
        do k=1,km                                                          OOM1F405.2167   
          kp1 = min(k+1,km)                                                OOM1F405.2168   
          do i=1,imt                                                       OOM1F405.2169   
            Ath0 = c1                                                      OOM1F405.2170   
c            Ath0 = athkdftv_bi(i,k)                                       OOM1F405.2171   
            absstn = abs(stn(i,k,2))                                       OOM1F405.2172   
            abssbn = abs(sbn(i,k,2))                                       OOM1F405.2173   
            tanh_temp(i) = (absstn-slopec)/dslope                          OOM1F405.2174   
            tanh_temp(i+imt) = (abssbn-slopec)/dslope                      OOM1F405.2175   
          enddo                                                            OOM1F405.2176   
                                                                           OOM1F405.2177   
          call fast_tanh(imt*2,tanh_temp)                                  OOM1F405.2178   
                                                                           OOM1F405.2179   
          do i=1,imt                                                       OOM1F405.2180   
            ath_tn(i,k,2) = (((Ath0*fm(i,k))*fmp(i,k))                     OOM1F405.2181   
     &             *p5)*(c1-tanh_temp(i))                                  OOM1F405.2182   
            ath_bn(i,k,2) = (((Ath0*fm(i,kp1))*fmp(i,kp1))                 OOM1F405.2183   
     &             *p5)*(c1-tanh_temp(i+imt))                              OOM1F405.2184   
          enddo                                                            OOM1F405.2185   
        enddo                                                              OOM1F405.2186   
                                                                           OOM1F405.2187   
      ELSE                                                                 OOM1F405.2188   
                                                                           OOM1F405.2189   
        do k=1,km                                                          OOM1F405.2190   
          sc = c1/(slmxr*dtxsqr(k))                                        OOM1F405.2191   
          kp1 = min(k+1,km)                                                OOM1F405.2192   
          do i=1,imt                                                       OOM1F405.2193   
             Ath0 = c1                                                     OOM1F405.2194   
c            Ath0 = athkdftv_bi(i,k)                                       OOM1F405.2195   
            absstn = abs(stn(i,k,2))                                       OOM1F405.2196   
            abssbn = abs(sbn(i,k,2))                                       OOM1F405.2197   
            if (absstn .gt. sc) then                                       OOM1F405.2198   
              ath_tn(i,k,2) = ((Ath0*fm(i,k))*fmp(i,k))                    OOM1F405.2199   
     &              *(sc/(absstn + epsln))**2                              OOM1F405.2200   
            else                                                           OOM1F405.2201   
              ath_tn(i,k,2) = (Ath0*fm(i,k))*fmp(i,k)                      OOM1F405.2202   
             endif                                                         OOM1F405.2203   
            if (abssbn .gt. sc) then                                       OOM1F405.2204   
              ath_bn(i,k,2) = ((Ath0*fm(i,kp1))*fmp(i,kp1))                OOM1F405.2205   
     &              *(sc/(abssbn + epsln))**2                              OOM1F405.2206   
             else                                                          OOM1F405.2207   
              ath_bn(i,k,2) = (Ath0*fm(i,kp1))*fmp(i,kp1)                  OOM1F405.2208   
             endif                                                         OOM1F405.2209   
          enddo                                                            OOM1F405.2210   
        enddo                                                              OOM1F405.2211   
      ENDIF ! taper                                                        OOM1F405.2212   
      ENDIF ! L_OBIHARMGM                                                  OOM1F405.2213   
                                                                           OOM1F405.2214   
        do k=1,km                                                          OOM1F405.2215   
          do i=1,imt                                                       OOM1F405.2216   
            Ath0 = athkdftv_mom(i,k)                                       OOM1F405.2217   
            adv_vntiso(i,k,1) = -((ath_tn(i,k,1)*stn(i,k,1))*top_bc(k) -   OOM1F405.2218   
     &              (ath_bn(i,k,1)*sbn(i,k,1))*bot_bc(k))*                 OOM1F405.2219   
     &              Ath0*(2.*dz2r(k))*csjm                                 OOM1F405.2220   
          enddo                                                            OOM1F405.2221   
        enddo                                                              OOM1F405.2222   
                                                                           OOM1F405.2223   
      IF (L_OBIHARMGM) THEN                                                OOM1F405.2224   
                                                                           OOM1F405.2225   
        do k=1,km                                                          OOM1F405.2226   
          do i=1,imt                                                       OOM1F405.2227   
            Ath0_j = (athkdftv_bi*dytr(j))*cst(j)                          OOM1F405.2228   
            Ath0_jp1 = (athkdftv_bi*dytr(j+1))*cst(j+1)                    OOM1F405.2229   
                                                                           OOM1F405.2230   
            part1 = (ath_tn(i,k,2)*stn(i,k,2)) -                           OOM1F405.2231   
     &                      (ath_tn(i,k,1)*stn(i,k,1))*Ath0_jp1            OOM1F405.2232   
            part2 = (ath_tn(i,k,1)*stn(i,k,1)) -                           OOM1F405.2233   
     &                      (ath_tn(i,k,0)*stn(i,k,0))*Ath0_j              OOM1F405.2234   
            stn_d2(i,k) = ((((part2-part1)                                 OOM1F405.2235   
     &         *dyur(j))*csr(j))*fm(i,k))*fmp(i,k)                         OOM1F405.2236   
                                                                           OOM1F405.2237   
                                                                           OOM1F405.2238   
            part1 = (ath_bn(i,k,2)*sbn(i,k,2)                              OOM1F405.2239   
     &                    - ath_bn(i,k,1)*sbn(i,k,1))*Ath0_jp1             OOM1F405.2240   
            part2 = (ath_bn(i,k,1)*sbn(i,k,1)                              OOM1F405.2241   
     &                    - ath_bn(i,k,0)*sbn(i,k,0))*Ath0_j               OOM1F405.2242   
            sbn_d2(i,k) = ((((part2-part1)                                 OOM1F405.2243   
     &         *dyur(j))*csr(j))*fm(i,k))*fmp(i,k)                         OOM1F405.2244   
          enddo                                                            OOM1F405.2245   
        enddo                                                              OOM1F405.2246   
                                                                           OOM1F405.2247   
        do k=1,km                                                          OOM1F405.2248   
          do i=1,imt                                                       OOM1F405.2249   
            adv_vntiso(i,k,1) = adv_vntiso(i,k,1) -                        OOM1F405.2250   
     &       (((stn_d2(i,k)*top_bc(k)) - (sbn_d2(i,k)*bot_bc(k)))*         OOM1F405.2251   
     &        (2.*dz2r(k)))*csjm                                           OOM1F405.2252   
          enddo                                                            OOM1F405.2253   
        enddo                                                              OOM1F405.2254   
                                                                           OOM1F405.2255   
       ENDIF ! L_OBIHARMGM                                                 OOM1F405.2256   
                                                                           OOM1F405.2257   
                                                                           OOM1F405.2258   
        ENDIF ! L_OISOGM                                                   OOM1F405.2259   
        ENDIF ! L_OISOMOM                                                  OOM1F405.2260   
                                                                           OOM1F405.2261   
        ENDIF ! L_OISOPYC                                                  OOM1F405.2262   
C---------------------------------------------------------------------     BLOKINIT.724    
C We must calculate EXTERNAL mode velocities for row JREAD - 1 since       BLOKINIT.725    
C we need to know U, UB, UBM, V, VB, VBM at row JREAD.                     BLOKINIT.726    
C---------------------------------------------------------------------     BLOKINIT.727    
*IF DEF,MPP                                                                ORH9F402.108    
         J=J_1 -2                                                          ORH6F404.1083   
*ELSE                                                                      ORH9F402.110    
         J=JST-2                                                           BLOKINIT.728    
*ENDIF                                                                     ORH9F402.111    
C                                                                          BLOKINIT.729    
         IF (.NOT.L_ONOCLIN) THEN                                          ORH6F404.1084   
            IF (L_OFREESFC) THEN                                           ORH6F404.1085   
                                                                           ORH6F404.1086   
               DO I=1,IMTM1                                                ORH6F404.1087   
                  SFUB(I) = UBTBBC(I,J+1)*HR(I,J+1)                        ORH6F404.1088   
                  SFVB(I) = VBTBBC(I,J+1)*HR(I,J+1)                        ORH6F404.1089   
*IF DEF,MPP                                                                PXBLOKIN.3      
                  SFUBM(I)= UBTBBCJ(I)*HRJ(I)                              ORH6F404.1090   
                  SFVBM(I)= VBTBBCJ(I)*HRJ(I)                              ORH6F404.1091   
*ENDIF                                                                     PXBLOKIN.4      
               ENDDO       ! over i                                        ORH6F404.1092   
                                                                           ORH6F404.1093   
            ELSE                                                           ORH6F404.1094   
                                                                           ORH6F404.1095   
               DO I=1,IMTM1                                                ORH6F404.1096   
                  DIAG1=PB(I+1,J+2)-PB(I ,J+1)                             ORH6F404.1097   
                  DIAG2=PB(I ,J+2)-PB(I+1,J+1)                             ORH6F404.1098   
                  SFUB(I)=-(DIAG1+DIAG2)*DYU2R(J+1)*HR(I,J+1)              ORH6F404.1099   
                  SFVB(I)= (DIAG1-DIAG2)*DXU2R(I )*HR(I,J+1)*CSR(J+1)      ORH6F404.1100   
                  DIAG1=PB(I+1,J+1)-PB(I ,J  )                             ORH6F404.1101   
                  DIAG2=PB(I ,J+1)-PB(I+1,J  )                             ORH6F404.1102   
*IF DEF,MPP                                                                ORH9F402.196    
                  ! MPP code must use the specially comunicated            ORH6F404.1103   
                  ! values for these calculations.                         ORH6F404.1104   
                  SFUBM(I)=-(DIAG1+DIAG2)*DYU2RJ*HRJ(I)                    ORH6F404.1105   
                  SFVBM(I)= (DIAG1-DIAG2)*DXU2R(I )*HRJ(I)*CSRJ            ORH6F404.1106   
*ELSE                                                                      ORH9F402.201    
                  SFUBM(I)=-(DIAG1+DIAG2)*DYU2R(J)*HR(I,J)                 ORH6F404.1107   
                  SFVBM(I)= (DIAG1-DIAG2)*DXU2R(I )*HR(I,J)*CSR(J)         ORH6F404.1108   
*ENDIF                                                                     ORH9F402.202    
               ENDDO  ! Over I                                             ORH6F404.1109   
            ENDIF   ! (L_OFREESFC)                                         ORH6F404.1110   
C                                                                          BLOKINIT.741    
C  2ND, COMPUTE FOR TAU TIME LEVEL                                         BLOKINIT.742    
C                                                                          BLOKINIT.743    
            IF (L_OFREESFC) THEN                                           ORH6F404.1111   
               DO I=1,IMTM1                                                ORH6F404.1112   
                  SFU(I) = UBT(I,J+1)*HR(I,J+1)                            ORH6F404.1113   
                  SFV(I) = VBT(I,J+1)*HR(I,J+1)                            ORH6F404.1114   
               ENDDO                                                       ORH6F404.1115   
                                                                           ORH6F404.1116   
            ELSE                                                           ORH6F404.1117   
               DO I=1,IMTM1                                                ORH6F404.1118   
                  DIAG1=P (I+1,J+2)-P (I ,J+1)                             ORH6F404.1119   
                  DIAG2=P (I ,J+2)-P (I+1,J+1)                             ORH6F404.1120   
                  SFU (I)=-(DIAG1+DIAG2)*DYU2R(J+1)*HR(I,J+1)              ORH6F404.1121   
                  SFV (I)= (DIAG1-DIAG2)*DXU2R(I )*HR(I,J+1)*CSR(J+1)      ORH6F404.1122   
               ENDDO    ! Over I                                           ORH6F404.1123   
            ENDIF                                                          ORH6F404.1124   
                                                                           ORH6F404.1125   
            IF (L_OCYCLIC) THEN                                            ORH6F404.1126   
C                                                                          BLOKINIT.752    
C  3RD, SET CYCLIC BOUNDARY CONDITIONS                                     BLOKINIT.753    
C                                                                          BLOKINIT.754    
               SFUB(IMT)=SFUB(2)                                           ORH6F404.1127   
               SFVB(IMT)=SFVB(2)                                           ORH6F404.1128   
               SFU (IMT)=SFU (2)                                           ORH6F404.1129   
               SFV (IMT)=SFV (2)                                           ORH6F404.1130   
               SFUBM(IMT)=SFUBM(2)                                         ORH6F404.1131   
               SFVBM(IMT)=SFVBM(2)                                         ORH6F404.1132   
            ENDIF                                                          ORH6F404.1133   
C---------------------------------------------------------------------     BLOKINIT.763    
C  ADD EXTERNAL MODE TO INTERNAL MODE FOR ROW JREAD (OCEAN PTS. ONLY)      BLOKINIT.764    
C---------------------------------------------------------------------     BLOKINIT.765    
C                                                                          BLOKINIT.766    
            DO K=1,KM                                                      ORH6F404.1134   
               DO I=1,IMU                                                  ORH6F404.1135   
                  IF (FKMQ(I,JREAD-1).GE.KAR(K)) THEN                      ORH6F404.1136   
                     UB (I,K)=UB (I,K)+SFUB(I)                             ORH6F404.1137   
                     VB (I,K)=VB (I,K)+SFVB(I)                             ORH6F404.1138   
                     U  (I,K)=U  (I,K)+SFU (I)                             ORH6F404.1139   
                     V  (I,K)=V  (I,K)+SFV (I)                             ORH6F404.1140   
                  ENDIF                                                    ORH6F404.1141   
*IF DEF,MPP                                                                ORH9F402.34     
                  ! JREAD - 2 is outside the range of the halos            ORH6F404.1142   
                  ! so we refer to a full global copy of this array        ORH6F404.1143   
                  IF (FKMQ_GLOBAL(I,JREAD-2+J_OFFSET).GE.KAR(K)) THEN      ORH6F404.1144   
*ELSE                                                                      ORH9F402.38     
                  IF(FKMQ(I,JREAD-2).GE.KAR(K)) THEN                       ORH6F404.1145   
*ENDIF                                                                     ORH9F402.39     
                     UBM(I,K)=UBM(I,K)+SFUBM(I)                            ORH6F404.1146   
                     VBM(I,K)=VBM(I,K)+SFVBM(I)                            ORH6F404.1147   
                  ENDIF                                                    ORH6F404.1148   
               ENDDO   ! Over I                                            ORH6F404.1149   
            ENDDO      ! Over K                                            ORH6F404.1150   
         ENDIF                                                             ORH6F404.1151   
         IF (L_OCNASSM) THEN                                               ORH6F404.1152   
C                                                                          BLOKINIT.783    
C-----------------------------------------------------------------------   BLOKINIT.784    
C ADD DATA ASSIMILATION INCREMENTS FOR ROW JREAD-1                         BLOKINIT.785    
C-----------------------------------------------------------------------   BLOKINIT.786    
C                                                                          BLOKINIT.787    
            IF (LL_ASS_BTRP) THEN                                          ORH6F404.1153   
               DO K=1,KM                                                   ORH6F404.1154   
                  DO I=1,IMU                                               ORH6F404.1155   
                     IF (FKMQ(I,JREAD-1).GE.KAR(K)) THEN                   ORH6F404.1156   
                        U (I,K)=U (I,K)+DU_ASS_BTRP(I,JREAD-1)             ORH6F404.1157   
                        V (I,K)=V (I,K)+DV_ASS_BTRP(I,JREAD-1)             ORH6F404.1158   
                     ENDIF                                                 ORH6F404.1159   
                  ENDDO  ! Over I                                          ORH6F404.1160   
               ENDDO     ! Over K                                          ORH6F404.1161   
            ENDIF                                                          ORH6F404.1162   
         ENDIF                                                             BLOKINIT.797    
                                                                           ORH6F404.1163   
*IF DEF,MPP                                                                ORH9F402.112    
         J=J_1-1                                                           ORH6F404.1164   
*ELSE                                                                      ORH9F402.114    
         J=JST-1                                                           BLOKINIT.800    
*ENDIF                                                                     ORH9F402.115    
C                                                                          BLOKINIT.801    
C---------------------------------------------------------------------     BLOKINIT.802    
C  COMPUTE VALUE OF FVST FOR ROW JST                                       BLOKINIT.803    
C---------------------------------------------------------------------     BLOKINIT.804    
C  The value of FVST depends on V at J-1 for the last timestep.            BLOKINIT.805    
C                                                                          BLOKINIT.806    
         FXB=(CSTR(J)*CS(J))                                               OSY1F405.31     
         DO K=1,KM                                                         ORH6F404.1167   
            DO I=2,IMT                                                     ORH6F404.1168   
               FVST(I,K)=((V(I,K)*DXU(I))+(V(I-1,K)*DXU(I-1)))*FXB         OSY1F405.32     
     &                                   *DXT2R(I)                         OSY1F405.33     
            ENDDO    ! Over I                                              ORH6F404.1170   
            FVST(1,K)=0.0                                                  ORH6F404.1171   
         ENDDO       ! Over K                                              ORH6F404.1172   
C                                                                          OSY1F405.34     
C  This call is to calculate FLUXST for the first row of the block.        OSY1F405.35     
C  This is the same quantity as FLUXNT for the halo row, so we call        OSY1F405.36     
C  ADV_SOURCE to calculate FLUXNT for the halo row and pass it back        OSY1F405.37     
C  as FLUXST. Therefore the order of the FLUXNT and FLUXST arguments       OSY1F405.38     
C  in the call is reversed. Also the FVN value for the halo row that       OSY1F405.39     
C  we pass into the routine is the FVST value just calculated.             OSY1F405.40     
C                                                                          OSY1F405.41     
        DO I=1,IMT                                                         OSY1F405.42     
          KMTJM(I)=FKMP_GLOBAL(I,J_1+J_OFFSET-2)                           OSY1F405.43     
        ENDDO                                                              OSY1F405.44     
                                                                           OSY1F405.45     
      L_BOOTSTRAP=.TRUE.                                                   OSY1F405.46     
      DO M=1,NT                                                            OSY1F405.47     
        CALL ADV_SOURCE(                                                   OSY1F405.48     
     &   O_ADVECT_SCHEME(1,M),                                             OSY1F405.49     
     &   J,                                                                OSY1F405.50     
     &   IMT,J_JMT,KM,                                                     OSY1F405.51     
     &   TEMPA,                                 ! Dummy return             OSY1F405.52     
     &   TEMPA,TEMPA,TEMPA,TEMPA,               ! variables.               OSY1F405.53     
     &   T(1,1,M),TB(1,1,M),                                               OSY1F405.54     
     &   TM(1,1,M),TBM(1,1,M),TP(1,1,M),TBP(1,1,M),                        OSY1F405.55     
     &   TPP(1,1,M),TBPP(1,1,M),                                           OSY1F405.56     
     &   FUW,FVST,FVST,W,                                                  OSY1F405.57     
     &   FLUXNT(1,1,M),FLUXST(1,1,M),TEMPA,                                OSY1F405.58     
     &   DXTR,DYTR,CSTR,DZ,DZZ,                                            OSY1F405.59     
     &   KMTJM,KMT,KMTP,KMTPP,                                             OSY1F405.60     
     &   L_OIMPADDF,                                                       OSY1F405.61     
     &   L_OFREESFC,                                                       OSY1F405.62     
     &   L_BOOTSTRAP,                                                      OSY1F405.63     
     &   L_OCYCLIC,                                                        OSY1F405.64     
     &   J_OFFSET,imout,jmout,imout_hud,jmout_hud,temptend,temptend,       OSY1F405.65     
     &   NMEDLEV,m,NT,L_OMEDADV,L_OHUDOUT,.FALSE.,.FALSE.,tempmed,         OSY1F405.66     
     &   tempmed,CS                                                        OSY1F405.67     
     &   )                                                                 OSY1F405.68     
      ENDDO ! over M.                                                      OSY1F405.69     
C                                                                          BLOKINIT.816    
         FXA = (CST(J)*CSTR(J+1))                                          OSY1F405.70     
         DO K=1,KM                                                         ORH6F404.1174   
            DO I=1,IMT                                                     ORH6F404.1175   
               FVST(I,K)=FVST(I,K) * FXA                                   ORH6F404.1176   
            do m=1,nt                                                      OSY1F405.71     
               FLUXST(I,K,M)=FLUXST(I,K,M)*FXA                             OSY1F405.72     
            enddo                                                          OSY1F405.73     
            ENDDO    ! Over I                                              ORH6F404.1177   
         ENDDO       ! Over K                                              ORH6F404.1178   
C                                                                          BLOKINIT.823    
C                                                                          BLOKINIT.824    
         IF (L_OISOPYC) THEN                                               ORH6F404.1179   
*IF DEF,MPP                                                                OLA3F403.186    
c Set up WSX and WSY                                                       OLA3F403.187    
            DO I=1,IMT                                                     ORH6F404.1180   
               WSX(I)=D1(joc_taux+I-1)                                     ORH6F404.1181   
               WSY(I)=D1(joc_tauy+I-1)                                     ORH6F404.1182   
C SET UP HTN,PME,SOL,WME                                                   OOM1F405.456    
        HTN(I)=D1(JOC_HEAT+I-1)                                            OOM1F405.457    
        PME(I)=D1(JOC_PLE+I-1)                                             OOM1F405.458    
        SOL(I)=D1(JOC_SOLAR+I-1)                                           OOM1F405.459    
        WME(I)=D1(JOC_WME+I-1)                                             OOM1F405.460    
            ENDDO                                                          ORH6F404.1183   
*ELSE                                                                      OLA3F403.192    
c Set up WSX,WSY,WSXM,WSYM                                                 OLA3F403.193    
            DO I=1,IMT                                                     ORH6F404.1184   
               WSX(I)=D1(joc_taux+(JST-2)*IMT+I-1)                         ORH6F404.1185   
               WSY(I)=D1(joc_tauy+(JST-2)*IMT+I-1)                         ORH6F404.1186   
               WSXM(I)=D1(joc_taux+(JST-3)*IMT+I-1)                        ORH6F404.1187   
               WSYM(I)=D1(joc_tauy+(JST-3)*IMT+I-1)                        ORH6F404.1188   
            ENDDO                                                          ORH6F404.1189   
C SET UP HTN,PME,SOL,WME                                                   OOM1F405.461    
      DO I=1,IMT                                                           OOM1F405.462    
        HTN(I)=D1(JOC_HEAT+(JST-2)*IMT+I-1)                                OOM1F405.463    
        PME(I)=D1(JOC_PLE+(JST-2)*IMT+I-1)                                 OOM1F405.464    
        SOL(I)=D1(JOC_SOLAR+(JST-2)*IMT+I-1)                               OOM1F405.465    
        WME(I)=D1(JOC_WME+(JST-2)*IMT+I-1)                                 OOM1F405.466    
      ENDDO                                                                OOM1F405.467    
*ENDIF                                                                     OLA3F403.200    
C CALCULATE WATERFLUX FROM SEAICE                                          OOM1F405.468    
      IF (L_SEAICE) THEN                                                   OOM1F405.469    
      DO I=1,IMT                                                           OOM1F405.470    
        WATERFLUX_ICE(I)=-1.*CARYSALT(I,J)*RHO_WATER_SI*DZ(1)              OOM1F405.471    
     &                             /0.035                                  OOM1F405.472    
      ENDDO                                                                OOM1F405.473    
      ELSE                                                                 OOM1F405.474    
      DO I=1,IMT                                                           OOM1F405.475    
        WATERFLUX_ICE(I)=0.0                                               OOM1F405.476    
      ENDDO                                                                OOM1F405.477    
      ENDIF                                                                OOM1F405.478    
      IF (L_SEAICE.AND.L_ICEFREEDR) THEN                                   ODC1F405.26     
          J_idr = J                                                        ODC1F405.27     
          J_idrM1 = J-1                                                    ODC1F405.28     
C   next line should be redundant, as should variable J_idrM1 here.        ODC1F405.29     
          J_idrM1 = MAX(1,J-1)                                             ODC1F405.30     
      ELSE                                                                 ODC1F405.31     
          J_idr = 1                                                        ODC1F405.32     
          J_idrM1 = 1                                                      ODC1F405.33     
      ENDIF                                                                OLA0F404.32     
C---------------------------------------------------------------------     BLOKINIT.826    
C  Now call the subroutine to calculate esav                               BLOKINIT.827    
C---------------------------------------------------------------------     BLOKINIT.828    
C if using Griffies scheme, now call CALCDIFF rather than CALCESAV,        OOM1F405.309    
C to calculate the appropriate variable (diff_fn rather than esav)         OOM1F405.310    
      IF (.NOT.L_OISOMOM) THEN                                             OOM1F405.311    
            CALL CALCESAV                                                  ORH1F305.3860   
     &       (J,JMT,IMT,IMTM1,KM,KMT,KMP,KMP1,KMP2,NT,NTMIN2,KMM1,         ORH1F305.3861   
     &        T,TP,TDIF,TB,TBP,TBM,                                        ORH1F305.3862   
     &        UB,VB,UBM,VBM,                                               ORH1F305.3863   
     &        DXUR,DXU2RQ,DXT4RQ,DYUR,DYT4R,DZ2RQ,DZZ2RQ,ZDZ,DYTR,         ORH1F305.3864   
     &        NERGY,CS,CSR,CSTR,ITT,FM,FMP,FMM,                            ORH1F305.3865   
     &        RHOSM,RHOS,ahi,                                              ORH1F305.3866   
     &  WSX,WSY,WSXM,WSYM,                                                 OLA3F403.201    
     &        ISX(1,J_idr),ISY(1,J_idr),WSX_LEADS(1,J_idr),                ODC1F405.34     
     &        WSY_LEADS(1,J_idr),ISXM,ISYM,                                ODC1F405.35     
     &        WSX_LEADSM,WSY_LEADSM,                                       ODC1F405.36     
     &  ZDZZ,DZ,L_OBULKRI,L_OWINDMIX,L_OBULKMAXMLD,                        OOM1F405.479    
     &  LAMBDA_LARGE,MAX_LARGE_LEVELS,                                     OOM1F405.480    
     &  NO_LAYERS_IN_LEV,HTN,PME,WATERFLUX_ICE,SOL,WME,                    OOM1F405.481    
     &  PHIT(J),OCEANHEATFLUX(1,J),CARYHEAT(1,J),FLXTOICE(1,J),            OOM1F405.482    
     &        JFT0, rxp,ry,rrzp,esav                                       ORH1F305.3867   
     &,J_OFFSET                                                            ORH7F402.315    
     & ,drhob1p,drhob2p,DZZ,KMTP,KMTPP,VISOPN,ATHKDF,DZ2R                  OLA0F401.120    
     & ,ATHKDFTU,ATHKDFTV                                                  OLA2F403.259    
     &        ,mldsav                                                      ORH1F305.3869   
     & , DIAG_MLD                                                          ORH0F401.41     
     &        ,KAPPA_B_SI                                                  ORH1F305.3870   
     &       )                                                             ORH1F305.3871   
      ELSE                                                                 OOM1F405.312    
           CALL CALCDIFF(                                                  OOM1F405.313    
*CALL ARGSIZE                                                              OOM1F405.314    
*CALL COCAWRKA                                                             OOM1F405.315    
     &  ,j,cstr,dyur,dxur,dz2r,dzz,dzz2r,athkdftu,athkdftv,ahi,athkdf,     OOM1F405.316    
     &  dz,dyu,dxu,cs,dxt4r,dyt4r,dxtr,dytr,cst,csjm,dyurjm,j_1,           OOM1F405.317    
     &  KMP,NERGY,FKAPB_SI,CSR,ITT,                                        OOM1F405.318    
     &  KAPPA_B_SI,J_OFFSET,                                               OOM1F405.319    
     &  WSXM,WSYM,OCEANHEATFLUX(1,J),CARYHEAT(1,J),FLXTOICE(1,J),          OOM1F405.320    
     &  max_Large_levels,no_layers_in_lev,                                 OOM1F405.321    
     &  waterflux_ice,L_OBULKRI,L_OWINDMIX,L_OBULKMAXMLD,                  OOM1F405.322    
     &  lambda_Large,phit(j),                                              OOM1F405.323    
     &  ISX(1,J_idr),ISY(1,J_idr),WSX_LEADS(1,J_idr),                      OOM1F405.324    
     &  WSY_LEADS(1,J_idr),ISXM,ISYM,                                      OOM1F405.325    
     &  WSX_LEADSM,WSY_LEADSM,                                             OOM1F405.326    
     &  ZDZZ,ZDZ,                                                          OOM1F405.327    
     &  adv_vetiso,                                                        OOM1F405.328    
     &  adv_vbtiso,adv_fbiso                                               OOM1F405.329    
     & )                                                                   OOM1F405.330    
                                                                           OOM1F405.331    
      ENDIF                                                                OOM1F405.332    
                                                                           OOM1F405.333    
                                                                           ORH6F404.1190   
         ENDIF                                                             ORH6F404.1191   
C                                                                          BLOKINIT.849    
C---------------------------------------------------------------------     BLOKINIT.850    
C                                                                          BLOKINIT.851    
      IF (L_OBIMOM) THEN                                                   OOM3F405.573    
C---------------------------------------------------------------           OOM3F405.574    
C COMPUTE LAPLACIANS FOR ROW j-1 for jst>1                                 OOM3F405.575    
C---------------------------------------------------------------           OOM3F405.576    
C                                                                          OOM3F405.577    
      BBUD=8.0*(CSR(J)*CSR(J))                                             OOM3F405.578    
      CCUD=(CST(J+1)*DYTR(J+1))*(DYUR(J)*CSR(J))                           OOM3F405.579    
      DDUD=(CST(J)*DYTR(J))*(DYUR(J)*CSR(J))                               OOM3F405.580    
      GGUD=(1.0-(TNG(J)*TNG(J)))/(RADIUS*RADIUS)                           OOM3F405.581    
      HHUD=2.0*SINE(J)/(RADIUS*(CS(J)*CS(J)))                              OOM3F405.582    
                                                                           OOM3F405.583    
        DO K=1,KM                                                          OOM3F405.584    
          DO I=2,IMTM1                                                     OOM3F405.585    
            pt1=(BBUD*DXU2RQ(I,K))*                                        OOM3F405.586    
     *      (DXT4RQ(I,K)*((UB(I+1,K)-UB(I,K))+(UB(I-1,K)-UB(I,K))))        OOM3F405.587    
            pt2=CCUD*(UBP(I,K)-UB(I,K))                                    OOM3F405.588    
     *                           +DDUD*(UBM(I,K)-UB(I,K))                  OOM3F405.589    
            pt3=GGUD*UB(I,K)                                               OOM3F405.590    
     *       -(HHUD*DXU2RQ(I,K))*(VB(I+1,K)-VB(I-1,K))                     OOM3F405.591    
            D2U(I,K,2)=pt1+pt2+pt3                                         OOM3F405.592    
          ENDDO                                                            OOM3F405.593    
C put in cyclic condition if appropriate                                   OOM3F405.594    
          IF (L_OCYCLIC) THEN                                              OOM3F405.595    
            D2U(  1,K,2)=D2U(IMTM1,K,2)                                    OOM3F405.596    
            D2U(IMT,K,2)=D2U(    2,K,2)                                    OOM3F405.597    
          ELSE                                                             OOM3F405.598    
            D2U(  1,K,2)=0.                                                OOM3F405.599    
            D2U(IMT,K,2)=0.                                                OOM3F405.600    
          ENDIF                                                            OOM3F405.601    
        ENDDO                                                              OOM3F405.602    
                                                                           OOM3F405.603    
        DO K=1,KM                                                          OOM3F405.604    
          DO I=2,IMTM1                                                     OOM3F405.605    
            pt1=(BBUD*DXU2RQ(I,K))*                                        OOM3F405.606    
     *      (DXT4RQ(I,K)*((VB(I+1,K)-VB(I,K))+(VB(I-1,K)-VB(I,K))))        OOM3F405.607    
            pt2=CCUD*(VBP(I,K)-VB(I,K))                                    OOM3F405.608    
     *                           +DDUD*(VBM(I,K)-VB(I,K))                  OOM3F405.609    
            pt3=GGUD*VB(I,K)                                               OOM3F405.610    
     *       +(HHUD*DXU2RQ(I,K))*(UB(I+1,K)-UB(I-1,K))                     OOM3F405.611    
            D2V(I,K,2)=pt1+pt2+pt3                                         OOM3F405.612    
          ENDDO                                                            OOM3F405.613    
          IF (L_OCYCLIC) THEN                                              OOM3F405.614    
            D2V(  1,K,2)=D2V(IMTM1,K,2)                                    OOM3F405.615    
            D2V(IMT,K,2)=D2V(    2,K,2)                                    OOM3F405.616    
          ELSE                                                             OOM3F405.617    
            D2V(  1,K,2)=0.                                                OOM3F405.618    
            D2V(IMT,K,2)=0.                                                OOM3F405.619    
          ENDIF                                                            OOM3F405.620    
        ENDDO                                                              OOM3F405.621    
                                                                           OOM3F405.622    
      ENDIF  ! L_OBIMOM                                                    OOM3F405.623    
                                                                           OOM3F405.624    
       IF (L_OBIMOM) THEN                                                  OOM3F405.625    
C---------------------------------------------------------------           OOM3F405.626    
C COMPUTE LAPLACIANS FOR ROW j+1 for jst>1                                 OOM3F405.627    
C---------------------------------------------------------------           OOM3F405.628    
C                                                                          OOM3F405.629    
      BBUD = 8.0*(CSR(J+1)*CSR(J+1))                                       OOM3F405.630    
      CCUD = (CST(J+2)*DYTR(J+2))*(DYUR(J+1)*CSR(J+1))                     OOM3F405.631    
      DDUD = (CST(J+1)*DYTR(J+1))*(DYUR(J+1)*CSR(J+1))                     OOM3F405.632    
      GGUD = (1.0-(TNG(J+1)*TNG(J+1)))/(RADIUS*RADIUS)                     OOM3F405.633    
      HHUD = 2.0*SINE(J+1)/(RADIUS*(CS(J+1)*CS(J+1)))                      OOM3F405.634    
                                                                           OOM3F405.635    
        DO K=1,KM                                                          OOM3F405.636    
          DO I=2,IMTM1                                                     OOM3F405.637    
            pt1=(BBUD*DXU2RQ(I,K))*                                        OOM3F405.638    
     *      (DXT4RQ(I,K)*((UBP(I+1,K)-UBP(I,K))+(UBP(I-1,K)-UBP(I,K))))    OOM3F405.639    
            pt2=CCUD*(UBPP(I,K)-UBP(I,K))                                  OOM3F405.640    
     *                           +DDUD*(UB(I,K)-UBP(I,K))                  OOM3F405.641    
            pt3=GGUD*UBP(I,K)                                              OOM3F405.642    
     *       -(HHUD*DXU2RQ(I,K))*(VBP(I+1,K)-VBP(I-1,K))                   OOM3F405.643    
            D2U(I,K,3)=pt1+pt2+pt3                                         OOM3F405.644    
          ENDDO                                                            OOM3F405.645    
C put in cyclic condition if appropriate                                   OOM3F405.646    
          IF (L_OCYCLIC) THEN                                              OOM3F405.647    
            D2U(  1,K,3)=D2U(IMTM1,K,3)                                    OOM3F405.648    
            D2U(IMT,K,3)=D2U(    2,K,3)                                    OOM3F405.649    
          ELSE                                                             OOM3F405.650    
            D2U(  1,K,3)=0.                                                OOM3F405.651    
            D2U(IMT,K,3)=0.                                                OOM3F405.652    
          ENDIF                                                            OOM3F405.653    
        ENDDO                                                              OOM3F405.654    
                                                                           OOM3F405.655    
        DO K=1,KM                                                          OOM3F405.656    
          DO I=2,IMTM1                                                     OOM3F405.657    
            pt1=(BBUD*DXU2RQ(I,K))*                                        OOM3F405.658    
     *      (DXT4RQ(I,K)*((VBP(I+1,K)-VBP(I,K))+(VBP(I-1,K)-VBP(I,K))))    OOM3F405.659    
            pt2=CCUD*(VBPP(I,K)-VBP(I,K))                                  OOM3F405.660    
     *                           +DDUD*(VB(I,K)-VBP(I,K))                  OOM3F405.661    
            pt3=GGUD*VBP(I,K)                                              OOM3F405.662    
     *       +(HHUD*DXU2RQ(I,K))*(UBP(I+1,K)-UBP(I-1,K))                   OOM3F405.663    
            D2V(I,K,3)=pt1+pt2+pt3                                         OOM3F405.664    
          ENDDO                                                            OOM3F405.665    
          IF (L_OCYCLIC) THEN                                              OOM3F405.666    
            D2V(  1,K,3)=D2V(IMTM1,K,3)                                    OOM3F405.667    
            D2V(IMT,K,3)=D2V(    2,K,3)                                    OOM3F405.668    
          ELSE                                                             OOM3F405.669    
            D2V(  1,K,3)=0.                                                OOM3F405.670    
            D2V(IMT,K,3)=0.                                                OOM3F405.671    
          ENDIF                                                            OOM3F405.672    
        ENDDO                                                              OOM3F405.673    
                                                                           OOM3F405.674    
       ENDIF ! L_OBIMOM                                                    OOM3F405.675    
                                                                           OOM3F405.676    
      ENDIF      ! Calculations for values to the south of JST             BLOKINIT.852    
C                                                                          BLOKINIT.853    
C                                                                          BLOKINIT.854    
      IF (JST.EQ.JMTM1_GLOBAL) THEN                                        ORH3F403.19     
        ! We need RHOSRN if we dont have a call to clinic on our           ORH3F403.20     
        ! first row.                                                       ORH3F403.21     
        J = J_1 - 1                                                        ORH3F403.22     
                                                                           ORH3F403.23     
      CALL STATEC(TB(1,1,1),TB(1,1,2),RHOSRNA,TEMPA,TEMPB,1,               OOM1F405.483    
     &            IMT,KM,J,JMT)                                            OOM1F405.484    
      CALL STATEC(TB(1,1,1),TB(1,1,2),RHOSRNB,TEMPA,TEMPB,2,               OOM1F405.485    
     &            IMT,KM,J,JMT)                                            OOM1F405.486    
      DO I=1,IMT                                                           OOM1F405.487    
      RHOSRNA(I,KM+1)=RHOSRNA(I,KM)                                        OOM1F405.488    
      RHOSRNB(I,KM+1)=RHOSRNB(I,KM)                                        OOM1F405.489    
      ENDDO                                                                OOM1F405.490    
        CALL STATED(TB(1,1,1),TB(1,1,2),rhosrn,tempa,tempb,IMT,KM,J        ORH3F403.24     
     &              ,KM,JMT)                                               ORH7F404.81     
                                                                           ORH3F403.26     
        ! We also need RHON                                                ORH3F403.27     
        CALL STATE(TP(1,1,1),TP(1,1,2),RHON,tempa,tempb,IMT,KM,J+1         ORH3F403.28     
     &              ,JMT)                                                  ORH7F404.82     
                                                                           ORH3F403.30     
      ENDIF                                                                ORH3F403.31     
C=======================================================================   BLOKINIT.855    
C  END OF BOOTSTRAP PROCEDURE  =========================================   BLOKINIT.856    
C=======================================================================   BLOKINIT.857    
C                                                                          BLOKINIT.858    
!=======================================================================   ORH0F401.28     
!  At this point, the following tracer values are available:               ORH0F401.29     
!                                                                          ORH0F401.30     
!       T   : Values for row JST-1 (row 1 if JST = 1)                      ORH6F404.1192   
!       TB  : Values for row JST-1 (row 1 if JST = 1)                      ORH0F401.32     
!       TM  : Values for row JST-2                                         ORH0F401.33     
!       TBM : Values for row JST-2                                         ORH0F401.34     
!       TBP : Values for row JST   (row 2 if JST = 1)                      ORH0F401.35     
!       TP  : Values for row JST   (row 2 if JST = 1)                      ORH0F401.36     
!       TPX : Values for row JFIN+1                                        ORH0F401.37     
!       TBPX: Values for row JFIN+1                                        ORH0F401.38     
!                                                                          ORH0F401.39     
!=======================================================================   ORH0F401.40     
      IF (L_OTIMER) CALL TIMER('BLOKINIT',4)                               ORH1F305.3887   
C                                                                          BLOKINIT.862    
      RETURN                                                               BLOKINIT.863    
      END                                                                  BLOKINIT.864    
C                                                                          BLOKINIT.865    
*ENDIF                                                                     BLOKINIT.866