*IF DEF,MPP                                                                MPPOCSIZ.2      
*IF DEF,OCEAN                                                              MPPOCSIZ.3      
C *****************************COPYRIGHT******************************     MPPOCSIZ.4      
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved.    MPPOCSIZ.5      
C                                                                          MPPOCSIZ.6      
C Use, duplication or disclosure of this code is subject to the            MPPOCSIZ.7      
C restrictions as set forth in the contract.                               MPPOCSIZ.8      
C                                                                          MPPOCSIZ.9      
C                Meteorological Office                                     MPPOCSIZ.10     
C                London Road                                               MPPOCSIZ.11     
C                BRACKNELL                                                 MPPOCSIZ.12     
C                Berkshire UK                                              MPPOCSIZ.13     
C                RG12 2SZ                                                  MPPOCSIZ.14     
C                                                                          MPPOCSIZ.15     
C If no contract has been raised with this copy of the code, the use,      MPPOCSIZ.16     
C duplication or disclosure of it is strictly prohibited.  Permission      MPPOCSIZ.17     
C to do so must first be obtained in writing from the Head of Numerical    MPPOCSIZ.18     
C Modelling at the above address.                                          MPPOCSIZ.19     
C ******************************COPYRIGHT******************************    MPPOCSIZ.20     
!       SUBROUTINE: OCEAN_SIZES                                            MPPOCSIZ.21     
!                                                                          MPPOCSIZ.22     
!       Description:                                                       MPPOCSIZ.23     
!                                                                          MPPOCSIZ.24     
! Subroutine to work out start and end indices                             GJC0F405.65     
!       for each process in the MPP ocean model.                           MPPOCSIZ.26     
!                                                                          MPPOCSIZ.27     
!       Typically, arrays will be dimensioned as JMT                       MPPOCSIZ.28     
!       which is a local value to each processor including                 MPPOCSIZ.29     
!       halos.                                                             MPPOCSIZ.30     
!                                                                          MPPOCSIZ.31     
!       Within this array, we must set indices so as to                    MPPOCSIZ.32     
!       work only on non halo points. Say for a halo size                  MPPOCSIZ.33     
!       of 1, we must set the start index to be 2 and the                  MPPOCSIZ.34     
!       end index to be JMT - 1.                                           MPPOCSIZ.35     
!          *** Remember: JMT is a local value ***                          MPPOCSIZ.36     
!                                                                          MPPOCSIZ.37     
!       Author: R. Hill                                                    MPPOCSIZ.38     
!                                                                          MPPOCSIZ.39     
!       Date:   August 1996                                                MPPOCSIZ.40     
!                                                                          MPPOCSIZ.41     
!       Modification History:                                              MPPOCSIZ.42     
!                                                                          MPPOCSIZ.43     
!-----------------------------------------------------------------------   MPPOCSIZ.44     

      SUBROUTINE OCEAN_SIZES(JMT)                                           1MPPOCSIZ.45     
                                                                           MPPOCSIZ.46     
      IMPLICIT NONE                                                        MPPOCSIZ.47     
                                                                           MPPOCSIZ.48     
      INTEGER JMT   ! IN Local value of JMT                                MPPOCSIZ.49     
                                                                           MPPOCSIZ.50     
*CALL PARVARS                                                              MPPOCSIZ.51     
*CALL COCNINDX                                                             MPPOCSIZ.52     
                                                                           MPPOCSIZ.53     
      ! Set ocean NPROC value. This may appear undesirable                 MPPOCSIZ.54     
      ! since it is duplication of an existing variable                    MPPOCSIZ.55     
      ! but in fact it allows NPROC to be communicated to ocean            MPPOCSIZ.56     
      ! routines without having to carry a lot of CONTROL/ATMOS            MPPOCSIZ.57     
      ! "baggage" through ocean argument lists.                            MPPOCSIZ.58     
      O_NPROC = NPROC                                                      MPPOCSIZ.59     
                                                                           MPPOCSIZ.60     
      ! Set up global values of data sizes                                 MPPOCSIZ.61     
      JMT_GLOBAL = glsize(2)                                               MPPOCSIZ.62     
      JMTP1_GLOBAL = JMT_GLOBAL + 1                                        MPPOCSIZ.63     
      JMTM1_GLOBAL = JMT_GLOBAL - 1                                        MPPOCSIZ.64     
      JMTM2_GLOBAL = JMT_GLOBAL - 2                                        MPPOCSIZ.65     
                                                                           MPPOCSIZ.66     
      ! First row this process (global pointer)                            MPPOCSIZ.67     
      JST  = datastart(2)                                                  MPPOCSIZ.68     
      ! Last row this process (global pointer)                             MPPOCSIZ.69     
      JFIN = JST + JMT - (2*OFFy) - 1                                      MPPOCSIZ.70     
                                                                           MPPOCSIZ.71     
      J_OFFSET = JST - OFFy - 1                                            MPPOCSIZ.72     
                                                                           MPPOCSIZ.73     
                                                                           MPPOCSIZ.74     
      ! Start indices for ocean row-wise loop controls within              MPPOCSIZ.75     
      ! the array of locally defined data - exclude halos.                 MPPOCSIZ.76     
      J_1 = 1 + OFFy                                                       MPPOCSIZ.77     
                                                                           MPPOCSIZ.78     
      ! Where loops previously started at row 2, we need a start           MPPOCSIZ.79     
      ! index which excludes row 1 from the calculation.                   MPPOCSIZ.80     
      IF (JST.GE.2) THEN                                                   MPPOCSIZ.81     
         J_2 = J_1                                                         MPPOCSIZ.82     
      ELSE                                                                 MPPOCSIZ.83     
         J_2 = 2 + OFFy                                                    MPPOCSIZ.84     
      ENDIF                                                                MPPOCSIZ.85     
                                                                           MPPOCSIZ.86     
      ! Where loops previously started at row 3, we need a start           MPPOCSIZ.87     
      ! index which excludes rows 1 and 2 from the calculation.            MPPOCSIZ.88     
      IF (JST.GE.3) THEN                                                   MPPOCSIZ.89     
         J_3 = J_1                                                         MPPOCSIZ.90     
      ELSE                                                                 MPPOCSIZ.91     
         J_3 = 3 + OFFy                                                    MPPOCSIZ.92     
      ENDIF                                                                MPPOCSIZ.93     
                                                                           MPPOCSIZ.94     
      ! End indices for ocean row-wise loop controls excluding halos       MPPOCSIZ.95     
      ! subsequent values of J_JMT* are based on this calculation.         MPPOCSIZ.96     
      J_JMT = lasize(2) - OFFY                                             MPPOCSIZ.97     
                                                                           MPPOCSIZ.98     
                                                                           MPPOCSIZ.99     
      ! Where loops previously ended at row JMT - 1, we need an end        MPPOCSIZ.100    
      ! index which excludes row JMT.                                      MPPOCSIZ.101    
      IF (JFIN.LE.JMTM1_GLOBAL) THEN                                       MPPOCSIZ.102    
          J_JMTM1 = J_JMT                                                  MPPOCSIZ.103    
      ELSE                                                                 MPPOCSIZ.104    
          J_JMTM1 = J_JMT - 1                                              MPPOCSIZ.105    
      ENDIF                                                                MPPOCSIZ.106    
                                                                           MPPOCSIZ.107    
      ! Where loops previously ended at row JMT - 2, we need an end        MPPOCSIZ.108    
      ! index which excludes rows JMT and JMT - 1.                         MPPOCSIZ.109    
      IF (JFIN.LE.JMTM2_GLOBAL) THEN                                       MPPOCSIZ.110    
          J_JMTM2 = J_JMT                                                  MPPOCSIZ.111    
      ELSE                                                                 MPPOCSIZ.112    
          IF (JFIN.EQ.JMT_GLOBAL) THEN                                     MPPOCSIZ.113    
             J_JMTM2 = J_JMT - 2                                           MPPOCSIZ.114    
          ENDIF                                                            MPPOCSIZ.115    
          IF (JFIN.EQ.JMTM1_GLOBAL) THEN                                   MPPOCSIZ.116    
             J_JMTM2 = J_JMT - 1                                           MPPOCSIZ.117    
          ENDIF                                                            MPPOCSIZ.118    
      ENDIF                                                                MPPOCSIZ.119    
                                                                           MPPOCSIZ.120    
      ! Where loops previously ended at row JMT + 1, we need an end        MPPOCSIZ.121    
      ! index which includes row JMT + 1 on the final processor.           MPPOCSIZ.122    
      IF (JFIN.LT.JMT_GLOBAL) THEN                                         MPPOCSIZ.123    
         J_JMTP1 = J_JMT                                                   MPPOCSIZ.124    
      ELSE                                                                 MPPOCSIZ.125    
         J_JMTP1 = J_JMT + 1                                               MPPOCSIZ.126    
      ENDIF                                                                MPPOCSIZ.127    
                                                                           MPPOCSIZ.128    
      ! Set PE no for use in ocean argument lists                          MPPOCSIZ.129    
      O_MYPE = MYPE                                                        MPPOCSIZ.130    
                                                                           MPPOCSIZ.131    
      O_EW_HALO = OFFx                                                     MPPOCSIZ.132    
      O_NS_HALO = OFFy                                                     MPPOCSIZ.133    
                                                                           MPPOCSIZ.134    
                                                                           MPPOCSIZ.135    
      RETURN                                                               MPPOCSIZ.136    
      END                                                                  MPPOCSIZ.137    
*ENDIF                                                                     MPPOCSIZ.138    
*ENDIF                                                                     MPPOCSIZ.139