*IF DEF,OCEAN                                                              OFLTCNTL.2      
*IF DEF,T3E,AND,DEF,MPP                                                    ORH1F405.522    
C *****************************COPYRIGHT******************************     OFLTCNTL.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    OFLTCNTL.4      
C                                                                          OFLTCNTL.5      
C Use, duplication or disclosure of this code is subject to the            OFLTCNTL.6      
C restrictions as set forth in the contract.                               OFLTCNTL.7      
C                                                                          OFLTCNTL.8      
C                Meteorological Office                                     OFLTCNTL.9      
C                London Road                                               OFLTCNTL.10     
C                BRACKNELL                                                 OFLTCNTL.11     
C                Berkshire UK                                              OFLTCNTL.12     
C                RG12 2SZ                                                  OFLTCNTL.13     
C                                                                          OFLTCNTL.14     
C If no contract has been raised with this copy of the code, the use,      OFLTCNTL.15     
C duplication or disclosure of it is strictly prohibited.  Permission      OFLTCNTL.16     
C to do so must first be obtained in writing from the Head of Numerical    OFLTCNTL.17     
C Modelling at the above address.                                          OFLTCNTL.18     
C ******************************COPYRIGHT******************************    OFLTCNTL.19     

      SUBROUTINE OFILTR_CNTL(                                               1,6OFLTCNTL.20     
*CALL ARGSIZE                                                              OFLTCNTL.21     
*CALL ARGOCALL                                                             OFLTCNTL.22     
*CALL ARGOINDX                                                             OFLTCNTL.23     
     & J,FTARR,                                                            ORH1F405.523    
*CALL COCAWRKA                                                             OFLTCNTL.25     
     & )                                                                   OFLTCNTL.26     
!                                                                          OFLTCNTL.27     
!     Description: This subroutine is intended to provide an interface     OFLTCNTL.28     
!     to the calling of the Ocean model Fourier Filtering subroutine       OFLTCNTL.29     
!     OFILTR when called from CLINIC and TRACER. The routine contains      OFLTCNTL.30     
!     direct shmem calls and barriers to allow the filtering work          OFLTCNTL.31     
!     to be distributed over all available pes when running on the t3e     OFLTCNTL.32     
!     in MPP mode. In non t3e mode (mpp and non-mpp) the filtering         OFLTCNTL.33     
!     is not distributed and is just performed by those pes who            OFLTCNTL.34     
!     happen to be responsible for the rows in question.                   OFLTCNTL.35     
!                                                                          OFLTCNTL.36     
!                                                                          OFLTCNTL.37     
!     Author: R. Hill                                                      OFLTCNTL.38     
!                                                                          OFLTCNTL.39     
!     Date  : April 1997                                                   OFLTCNTL.40     
!                                                                          OFLTCNTL.41     
!     Modification History:                                                OFLTCNTL.42     
!                                                                          OFLTCNTL.43     
!     Date       Name        Description                                   OFLTCNTL.44     
!     ------     ---------   ----------------------------------------      OFLTCNTL.45     
!                                                                          OFLTCNTL.46     
!********************************************************************      OFLTCNTL.47     
                                                                           OFLTCNTL.48     
      IMPLICIT NONE                                                        OFLTCNTL.49     
                                                                           OFLTCNTL.50     
*CALL PARVARS                                                              ORH1F405.524    
*CALL OARRYSIZ                                                             OFLTCNTL.51     
*CALL TYPSIZE                                                              OFLTCNTL.52     
*CALL TYPOINDX                                                             PXORDER.35     
*CALL TYPOCALL                                                             OFLTCNTL.53     
*CALL COCTWRKA                                                             OFLTCNTL.55     
*CALL CNTLOCN                                                              OFLTCNTL.56     
*CALL UMSCALAR                                                             OFLTCNTL.57     
                                                                           OFLTCNTL.58     
       INTEGER IPROC       ! loop index over PEs                           ORH1F405.525    
     &,        J_TO_FILTER ! Row value to be filtered                      ORH1F405.526    
     &,        KMT1_TEMP   ! Temp KMT(1)                                   ORH1F405.527    
     &,        I,J,K,L,IS,IE,ISM1,IEA,IEB                                  ORH1F405.528    
     &,        IREDO,JJ,M,N,IM,II,IDX,MM                                   ORH1F405.529    
     &,        TS,TE,TLAST ! Tracer loop controls come into play           ORH1F405.530    
!                            only if more than the normal two tracers      ORH1F405.531    
!                            need to be filtered. (Eg Biology model)       ORH1F405.532    
!                            In this case, the load balancing may          ORH1F405.533    
!                            be less than optimal.                         ORH1F405.534    
     &,        SIZEA, SIZEB, IWK, KMT1_FILT                                ORH1F405.535    
                                                                           ORH1F405.536    
                                                                           OFLTCNTL.77     
                                                                           OFLTCNTL.81     
       REAL CS_TEMP                                                        OFLTCNTL.82     
     &,     PHI_TEMP                                                       OFLTCNTL.83     
     &,     CST_TEMP                                                       OFLTCNTL.84     
     &,     FTARR(IMTIMT_FLT)                                              OFLTCNTL.85     
     &,     FX                                                             OFLTCNTL.86     
     &,     CS_FILT                                                        ORH1F405.537    
     &,     CST_FILT                                                       ORH1F405.538    
     &,     PHI_FILT                                                       ORH1F405.539    
                                                                           ORH1F405.540    
                                                                           OFLTCNTL.87     
                                                                           OFLTCNTL.88     
*IF DEF,T3E,AND,DEF,MPP                                                    OFLTCNTL.89     
       ! Arrays used in t3e mpp mode only                                  OFLTCNTL.90     
                                                                           ORH1F405.541    
       INTEGER MAX_UVT_COLS                                                ORH1F405.542    
     &,        MAX_LEVELS                                                  ORH1F405.543    
                                                                           ORH1F405.544    
       ! The following parameters may be decreased to save space           ORH1F405.545    
       ! in lower resolution models or increased to cater for higher       ORH1F405.546    
       ! resolutions                                                       ORH1F405.547    
       PARAMETER (MAX_UVT_COLS = 1082)  ! Max no of grid pts E-W           ORH1F405.548    
       PARAMETER (MAX_LEVELS   = 20)    ! Max no of vertical levels        ORH1F405.549    
                                                                           ORH1F405.550    
       REAL FIELD_TEMP(MAX_UVT_COLS*2,MAX_LEVELS*2)                        ORH1F405.551    
     &,     FIELD_FILT(MAX_UVT_COLS*2)                                     ORH1F405.552    
                                                                           ORH1F405.553    
                                                                           OFLTCNTL.94     
       ! Variables in common for use with direct shmem calls.              OFLTCNTL.95     
       COMMON /SHMEM_FL/ FIELD_TEMP,FIELD_FILT,CS_TEMP, PHI_TEMP           ORH1F405.554    
     &,CST_TEMP,KMT1_TEMP                                                  ORH1F405.555    
                                                                           OFLTCNTL.99     
                                                                           OFLTCNTL.100    
*ENDIF                                                                     OFLTCNTL.106    
                                                                           OFLTCNTL.107    
      ! If we're filtering the U/V fields:                                 ORH1F405.556    
                                                                           OFLTCNTL.110    
         TS = 1                                                            ORH1F405.557    
         TE = 2                                                            ORH1F405.558    
         TLAST = 0                                                         ORH1F405.559    
         IF (SLAV_CNT_U(J).GT.0) THEN                                      ORH1F405.560    
            ! IF I have slaves to help my filtering, then                  ORH1F405.561    
            ! I must set up my UA and VA fields in a common block          ORH1F405.562    
            ! ready to be "got" by the slaves.                             ORH1F405.563    
            DO K = 1, KM                                                   ORH1F405.564    
               DO I = 1, IMT                                               ORH1F405.565    
                  FIELD_TEMP(I,K) = UA(I,K)                                ORH1F405.566    
                  FIELD_TEMP(I+IMT,K) = VA(I,K)                            ORH1F405.567    
               ENDDO                                                       ORH1F405.568    
            ENDDO                                                          ORH1F405.569    
                                                                           OFLTCNTL.114    
            CS_TEMP  = CS(J)                                               ORH1F405.570    
            PHI_TEMP = PHI(J)                                              ORH1F405.571    
                                                                           OFLTCNTL.118    
         ENDIF                                                             ORH1F405.572    
                                                                           OFLTCNTL.190    
                                                                           OFLTCNTL.191    
 0200    CONTINUE                                                          ORH1F405.573    
         IF (SLAV_CNT_T(J).GT.0) THEN                                      ORH1F405.574    
            ! If I have slaves to help my filtering, then                  ORH1F405.575    
            ! I must set up my TA fields (T and S) in a                    ORH1F405.576    
            ! common block ready to be "got" by the slaves.                ORH1F405.577    
            ! The filtering can only cope with two TRACERS                 ORH1F405.578    
            ! at a time - TS and TE control this.                          ORH1F405.579    
            DO MM = TS, TE                                                 ORH1F405.580    
               DO K = 1, KM                                                ORH1F405.581    
                  DO I = 1, IMT                                            ORH1F405.582    
                     FIELD_TEMP((IMT*(MM-1-TLAST))+I,K+KM) = TA(I,K,MM)    ORH1F405.583    
                  ENDDO                                                    ORH1F405.584    
               ENDDO                                                       ORH1F405.585    
            ENDDO                                                          ORH1F405.586    
                                                                           OFLTCNTL.199    
            CST_TEMP  = CST(J)                                             ORH1F405.587    
            KMT1_TEMP = KMT(1)                                             ORH1F405.588    
                                                                           OFLTCNTL.203    
         ENDIF                                                             ORH1F405.589    
                                                                           OFLTCNTL.209    
         CALL BARRIER()                                                    ORH1F405.590    
         ! If we're filtering extra tracers, make sure we dont repeat      ORH1F405.591    
         ! the UV filtering.                                               ORH1F405.592    
         IF (TLAST.GT.0) GOTO 0400                                         ORH1F405.593    
                                                                           ORH1F405.594    
                                                                           OFLTCNTL.211    
         ! For each MAST PE I help (on this J) get the data.               ORH1F405.595    
         DO IWK = 1, MAST_CNT_U(J)                                         ORH1F405.596    
                                                                           OFLTCNTL.258    
           ! Which master PE, level and segment?                           ORH1F405.597    
           IPROC = MAST_PE_U(IWK,J)                                        ORH1F405.598    
           K = MAST_K_U(IWK,J)                                             ORH1F405.599    
           L = MAST_SEG_U(IWK,J)                                           ORH1F405.600    
                                                                           OFLTCNTL.276    
           ! Which row are we filtering (in global terms)                  ORH1F405.601    
           J_TO_FILTER = g_datastart(2,IPROC) + J - O_NS_HALO - 1          ORH1F405.602    
                                                                           ORH1F405.603    
           ! How does this row map into our list of sea segment            ORH1F405.604    
           ! indices                                                       ORH1F405.605    
           JJ=J_TO_FILTER-JFRST+1                                          ORH1F405.606    
           IF (J_TO_FILTER.GE.JFU2) JJ=JJ-JSKPU+1                          ORH1F405.607    
                                                                           ORH1F405.608    
           ! Get a cosine and phi values for this row from                 ORH1F405.609    
           ! the PE which ows it.                                          ORH1F405.610    
           CALL SHMEM_GET(CS_FILT,CS_TEMP,1,IPROC)                         ORH1F405.611    
           CALL SHMEM_GET(PHI_FILT,PHI_TEMP,1,IPROC)                       ORH1F405.612    
                                                                           ORH1F405.613    
           FX=-1.0                                                         ORH1F405.614    
           IF (PHI_FILT.GT.0.) FX=1.0                                      ORH1F405.615    
                                                                           ORH1F405.616    
           ! Where, in the master array is the segment we need?            ORH1F405.617    
           IS=ISUF(JJ,L,K)                                                 ORH1F405.618    
           IE=IEUF(JJ,L,K)                                                 ORH1F405.619    
           IM=IE-IS+1                                                      ORH1F405.620    
                                                                           ORH1F405.621    
           IREDO=0                                                         ORH1F405.622    
           IF (.NOT.(L_OCYCLIC)) THEN                                      ORH1F405.623    
               M=2                                                         ORH1F405.624    
               N=NINT((IM*CS_FILT)*CSR_JFU0)                               ORH1F405.625    
           ELSE                                                            ORH1F405.626    
               IF (IM.NE.IMTM2) THEN                                       ORH1F405.627    
                  M=2                                                      ORH1F405.628    
                  N=NINT((IM*CS_FILT)*CSR_JFU0)                            ORH1F405.629    
               ELSE                                                        ORH1F405.630    
                  M=3                                                      ORH1F405.631    
                  N=NINT(((IM*CS_FILT)*CSR_JFU0)*.5)                       ORH1F405.632    
               ENDIF                                                       ORH1F405.633    
           ENDIF                                                           ORH1F405.634    
                                                                           ORH1F405.635    
                                                                           ORH1F405.636    
           ISM1=IS-1                                                       ORH1F405.637    
           IEA=IE                                                          ORH1F405.638    
                                                                           ORH1F405.639    
           ! Does this segment end after the last column? ie does          ORH1F405.640    
           ! this segment go over the wrap around points?                  ORH1F405.641    
           IF (IE.GE.IMU) THEN                                             ORH1F405.642    
                                                                           ORH1F405.643    
              ! We get such segments in two parts, 2nd part first.         ORH1F405.644    
              IEA=IMUM1                                                    ORH1F405.645    
              IEB=IE-IMUM2                                                 ORH1F405.646    
              II=IMUM1-IS                                                  ORH1F405.647    
                                                                           ORH1F405.648    
              SIZEB = IEB -2 + 1                                           ORH1F405.649    
              DO MM = 1, 2                                                 ORH1F405.650    
                 CALL SHMEM_GET(FIELD_FILT(((MM-1)*IMT)+2)                 ORH1F405.651    
     &             ,FIELD_TEMP(((MM-1)*IMT)+2,K),SIZEB,IPROC)              ORH1F405.652    
              ENDDO                                                        ORH1F405.653    
           ENDIF                                                           ORH1F405.654    
                                                                           ORH1F405.655    
           SIZEA = IEA - IS + 1                                            ORH1F405.656    
           DO MM = 1, 2                                                    ORH1F405.657    
              CALL SHMEM_GET(FIELD_FILT(((MM-1)*IMT)+IS)                   ORH1F405.658    
     &             ,FIELD_TEMP(((MM-1)*IMT)+IS,K),SIZEA,IPROC)             ORH1F405.659    
           ENDDO                                                           ORH1F405.660    
                                                                           ORH1F405.661    
           DO I=IS,IEA                                                     ORH1F405.662    
               UDIF(I-ISM1 ,K)=-((FX*FIELD_FILT(I))*SPSIN(I))-             ORH1F405.663    
     &                        FIELD_FILT(I+IMT)*SPCOS(I)                   ORH1F405.664    
               VDIF(I-ISM1 ,K)= ((FX*FIELD_FILT(I))*SPCOS(I))-             ORH1F405.665    
     &                        FIELD_FILT(I+IMT)*SPSIN(I)                   ORH1F405.666    
           ENDDO                                                           ORH1F405.667    
                                                                           ORH1F405.668    
           IF (IE.GE.IMU)THEN                                              ORH1F405.669    
               DO I=2,IEB                                                  ORH1F405.670    
                 UDIF(I+II,K)=((-FX*FIELD_FILT(I))*SPSIN(I))-              ORH1F405.671    
     &                           FIELD_FILT(I+IMT)*SPCOS(I)                ORH1F405.672    
                 VDIF(I+II,K)= ((FX*FIELD_FILT(I))*SPCOS(I))-              ORH1F405.673    
     &                           FIELD_FILT(I+IMT)*SPSIN(I)                ORH1F405.674    
               ENDDO                                                       ORH1F405.675    
           ENDIF                                                           ORH1F405.676    
                                                                           ORH1F405.677    
                                                                           ORH1F405.678    
           CALL FILTR(                                                     ORH1F405.679    
*CALL ARGSIZE                                                              OFLTCNTL.278    
*CALL ARGOCFIL                                                             OFLTCNTL.279    
     &                FTARR,UDIF(1,K),IM,M,N,IREDO)                        OFLTCNTL.280    
C                                                                          OFLTCNTL.281    
           CALL FILTR(                                                     ORH1F405.680    
*CALL ARGSIZE                                                              OFLTCNTL.283    
*CALL ARGOCFIL                                                             OFLTCNTL.284    
     &                FTARR,VDIF(1,K),IM,M,N,1)                            OFLTCNTL.285    
                                                                           OFLTCNTL.286    
           DO 720 I=IS,IEA                                                 ORH1F405.681    
                    FIELD_FILT(I)=FX*(-UDIF(I-ISM1 ,K)*SPSIN(I)            ORH1F405.682    
     &                  +VDIF(I-ISM1 ,K)*SPCOS(I))                         OFLTCNTL.290    
                    FIELD_FILT(I+IMT)=-UDIF(I-ISM1 ,K)*SPCOS(I)-           ORH1F405.683    
     &                   VDIF(I-ISM1 ,K)*SPSIN(I)                          OFLTCNTL.292    
  720      CONTINUE                                                        ORH1F405.684    
                                                                           OFLTCNTL.300    
           IF(IE.GE.IMU) THEN                                              ORH1F405.685    
                    DO 722 I=2,IEB                                         OFLTCNTL.302    
                       FIELD_FILT(I)=FX*(-UDIF(I+II,K)*SPSIN(I)            ORH1F405.686    
     &                    +VDIF(I+II,K)*SPCOS(I))                          OFLTCNTL.305    
                       FIELD_FILT(I+IMT)=-UDIF(I+II,K)*SPCOS(I)-           ORH1F405.687    
     &                     VDIF(I+II,K)*SPSIN(I)                           OFLTCNTL.307    
  722               CONTINUE                                               OFLTCNTL.314    
           ENDIF                                                           ORH1F405.688    
                                                                           OFLTCNTL.323    
                                                                           OFLTCNTL.324    
                                                                           OFLTCNTL.328    
                                                                           OFLTCNTL.340    
           ! Send filtered baroclinic velocities back to the owner         ORH1F405.689    
           DO MM = 1, 2                                                    ORH1F405.690    
              CALL SHMEM_PUT(FIELD_TEMP(((MM-1)*IMT)+IS,K)                 ORH1F405.691    
     &                   ,FIELD_FILT(((MM-1)*IMT)+IS),SIZEA,IPROC)         ORH1F405.692    
              IF(IE.GE.IMU) THEN                                           ORH1F405.693    
                 CALL SHMEM_PUT(FIELD_TEMP(((MM-1)*IMT)+2,K)               ORH1F405.694    
     &               ,FIELD_FILT(((MM-1)*IMT)+2),SIZEB,IPROC)              ORH1F405.695    
              ENDIF                                                        ORH1F405.696    
           ENDDO                                                           ORH1F405.697    
                                                                           OFLTCNTL.342    
        ENDDO ! Over IWK                                                   ORH1F405.698    
                                                                           ORH1F405.699    
 0400   CONTINUE                                                           ORH1F405.700    
                                                                           ORH1F405.701    
        ! For each MASTER PE I help (on this J) get the data.              ORH1F405.702    
        DO IWK = 1, MAST_CNT_T(J)                                          ORH1F405.703    
                                                                           ORH1F405.704    
           ! Which PE, level and segment?                                  ORH1F405.705    
           IPROC = MAST_PE_T(IWK,J)                                        ORH1F405.706    
           K = MAST_K_T(IWK,J)                                             ORH1F405.707    
           L = MAST_SEG_T(IWK,J)                                           ORH1F405.708    
                                                                           ORH1F405.709    
           ! Which row?                                                    ORH1F405.710    
           J_TO_FILTER = g_datastart(2,IPROC) + J - O_NS_HALO - 1          ORH1F405.711    
                                                                           ORH1F405.712    
           JJ=J_TO_FILTER-JFRST+1                                          ORH1F405.713    
           IF (J_TO_FILTER.GE.JFT2) JJ=JJ-JSKPT+1                          ORH1F405.714    
                                                                           ORH1F405.715    
           CALL SHMEM_GET(CST_FILT,CST_TEMP,1,IPROC)                       ORH1F405.716    
           CALL SHMEM_GET(KMT1_FILT,KMT1_TEMP,1,IPROC)                     ORH1F405.717    
                                                                           OFLTCNTL.344    
                                                                           OFLTCNTL.345    
                                                                           OFLTCNTL.377    
                                                                           OFLTCNTL.379    
           IS=ISTF(JJ,L,K)                                                 ORH1F405.718    
           IE=IETF(JJ,L,K)                                                 ORH1F405.719    
                                                                           OFLTCNTL.383    
           IREDO=-1                                                        ORH1F405.720    
           IM=IE-IS+1                                                      ORH1F405.721    
           IF (.NOT.(L_OCYCLIC)) THEN                                      ORH1F405.722    
              M=1                                                          ORH1F405.723    
              N=NINT((IM*CST_FILT)*CSTR_JFT0)                              ORH1F405.724    
           ELSE                                                            ORH1F405.725    
              IF(IM.NE.IMTM2.OR.KMT1_FILT.LT.K) THEN                       ORH1F405.726    
                 M=1                                                       ORH1F405.727    
                 N=NINT((IM*CST_FILT)*CSTR_JFT0)                           ORH1F405.728    
              ELSE                                                         ORH1F405.729    
                 M=3                                                       ORH1F405.730    
                 N=NINT(((IM*CST_FILT)*CSTR_JFT0)*.5)                      ORH1F405.731    
              ENDIF                                                        ORH1F405.732    
           ENDIF                                                           ORH1F405.733    
                                                                           ORH1F405.734    
           IEA=IE                                                          ORH1F405.735    
           IF (IE.GE.IMT) THEN                                             ORH1F405.736    
              ! If the segment covers the wrap around points               ORH1F405.737    
              ! get it in two parts, 2nd part first.                       ORH1F405.738    
              IEA=IMTM1                                                    ORH1F405.739    
              IEB=IE-IMTM2                                                 ORH1F405.740    
              II=IMTM1-IS                                                  ORH1F405.741    
              SIZEB = IEB - 2 + 1                                          ORH1F405.742    
              SIZEA = IEA - IS + 1                                         ORH1F405.743    
              DO MM = TS, TE                                               ORH1F405.744    
                 CALL SHMEM_GET(FIELD_FILT(((MM-1-TLAST)*IMT)+SIZEA+1)     ORH1F405.745    
     &           ,FIELD_TEMP(((MM-1-TLAST)*IMT)+2,K+KM),SIZEB,IPROC)       ORH1F405.746    
              ENDDO                                                        ORH1F405.747    
           ENDIF                                                           ORH1F405.748    
                                                                           ORH1F405.749    
           SIZEA = IEA - IS + 1                                            ORH1F405.750    
           DO MM = TS, TE                                                  ORH1F405.751    
              CALL SHMEM_GET(FIELD_FILT(((MM-1-TLAST)*IMT)+1)              ORH1F405.752    
     &              ,FIELD_TEMP(((MM-1-TLAST)*IMT)+IS,K+KM),SIZEA,IPROC)   ORH1F405.753    
                                                                           ORH1F405.754    
                                                                           OFLTCNTL.508    
!   FOURIER FILTERING performed for all tracers.                           OJP0F404.882    
              IDX=IREDO+MM-TLAST                                           ORH1F405.755    
                                                                           OFLTCNTL.533    
                                                                           ORH1F405.756    
              CALL FILTR(                                                  ORH1F405.757    
*CALL ARGSIZE                                                              OFLTCNTL.535    
*CALL ARGOCFIL                                                             OFLTCNTL.536    
     &           FTARR,FIELD_FILT(((MM-1-TLAST)*IMT)+1),IM,M,N,IDX)        ORH1F405.758    
                                                                           OFLTCNTL.538    
                                                                           ORH1F405.759    
              ! Send filtered tracers back to the master PE                ORH1F405.760    
              CALL SHMEM_PUT(FIELD_TEMP(((MM-1-TLAST)*IMT)+IS,K+KM),       ORH1F405.761    
     &                    FIELD_FILT(((MM-1-TLAST)*IMT)+1),                ORH1F405.762    
     &                    SIZEA,IPROC)                                     ORH1F405.763    
              IF (IE.GE.IMT) THEN                                          ORH1F405.764    
                 CALL SHMEM_PUT(FIELD_TEMP(((MM-1-TLAST)*IMT)+2,K+KM),     ORH1F405.765    
     &                    FIELD_FILT(((MM-1-TLAST)*IMT)+SIZEA+1),          ORH1F405.766    
     &                    SIZEB,IPROC)                                     ORH1F405.767    
              ENDIF                                                        ORH1F405.768    
           ENDDO  ! Over MM                                                ORH1F405.769    
        ENDDO  ! OVER IWK                                                  ORH1F405.770    
                                                                           OFLTCNTL.540    
*IF DEF,T3E,AND,DEF,MPP                                                    OFLTCNTL.541    
      ! Synchronize before further processing.                             ORH1F405.771    
      CALL BARRIER()                                                       ORH1F405.772    
*ENDIF                                                                     OFLTCNTL.545    
                                                                           OFLTCNTL.547    
                                                                           OFLTCNTL.557    
      IF (SLAV_CNT_T(J).GT.0) THEN                                         ORH1F405.773    
                                                                           OFLTCNTL.561    
                                                                           OFLTCNTL.564    
          DO MM = TS, TE                                                   ORH1F405.774    
             DO K = 1, KM                                                  ORH1F405.775    
                DO I = 1, IMT                                              ORH1F405.776    
                   TA(I,K,MM) = FIELD_TEMP(((MM-1-TLAST)*IMT)+I,K+KM)      ORH1F405.777    
                ENDDO                                                      ORH1F405.778    
             ENDDO                                                         ORH1F405.779    
          ENDDO                                                            ORH1F405.780    
      ENDIF                                                                ORH1F405.781    
                                                                           ORH1F405.782    
      IF (NT.GT.TE) THEN                                                   ORH1F405.783    
         ! If there are more TRACERS to be filtered, set up indexes        ORH1F405.784    
         ! for them and go back to the filtering code.                     ORH1F405.785    
         TLAST = TE                                                        ORH1F405.786    
         TS = TE + 1                                                       ORH1F405.787    
         TE = MIN(TS+1,NT)                                                 ORH1F405.788    
                                                                           ORH1F405.789    
         CALL BARRIER()                                                    ORH1F405.790    
                                                                           ORH1F405.791    
         GOTO 0200                                                         ORH1F405.792    
      ENDIF                                                                ORH1F405.793    
                                                                           OFLTCNTL.567    
          ! If I'm a filter pe and I have helpers, then I must             OFLTCNTL.568    
          ! get the info back                                              OFLTCNTL.569    
      IF (SLAV_CNT_U(J).GT.0) THEN                                         ORH1F405.794    
                                                                           ORH1F405.795    
          ! The following is only performed on filtered rows               ORH1F405.796    
          DO I=1,IMT                                                       ORH1F405.797    
             UOVER(I)=0.0                                                  ORH1F405.798    
             VOVER(I)=0.0                                                  ORH1F405.799    
          ENDDO                                                            ORH1F405.800    
                                                                           ORH1F405.801    
          ! We use FIELD_TEMP directly rather than moving                  ORH1F405.802    
          ! to UA and VA first. This saves a bit of extra time.            ORH1F405.803    
          DO K=1,KM                                                        ORH1F405.804    
             DO I=1,IMT                                                    ORH1F405.805    
                UOVER(I)=UOVER(I)+FIELD_TEMP(I,K)*DZ(K)                    ORH1F405.806    
                VOVER(I)=VOVER(I)+FIELD_TEMP(I+IMT,K)*DZ(K)                ORH1F405.807    
             ENDDO                                                         ORH1F405.808    
          ENDDO                                                            ORH1F405.809    
          DO I=1,IMT                                                       ORH1F405.810    
             UOVER(I)=UOVER(I)*HR(I,J)                                     ORH1F405.811    
             VOVER(I)=VOVER(I)*HR(I,J)                                     ORH1F405.812    
          ENDDO                                                            ORH1F405.813    
          DO K=1,KM                                                        ORH1F405.814    
             DO I=1,IMT                                                    ORH1F405.815    
                UA(I,K)=FIELD_TEMP(I,K)-UOVER(I)                           ORH1F405.816    
                VA(I,K)=FIELD_TEMP(I+IMT,K)-VOVER(I)                       ORH1F405.817    
             ENDDO                                                         ORH1F405.818    
          ENDDO                                                            ORH1F405.819    
          DO K=1,KM                                                        ORH1F405.820    
             DO I=1,IMT                                                    ORH1F405.821    
                UA(I,K)=UA(I,K)*GM(I,K)                                    ORH1F405.822    
                VA(I,K)=VA(I,K)*GM(I,K)                                    ORH1F405.823    
             ENDDO                                                         ORH1F405.824    
          ENDDO                                                            ORH1F405.825    
                                                                           ORH1F405.826    
                                                                           ORH1F405.827    
          ENDIF                                                            OFLTCNTL.580    
                                                                           OFLTCNTL.581    
                                                                           ORH1F405.828    
                                                                           OFLTCNTL.595    
      RETURN                                                               OFLTCNTL.596    
                                                                           OFLTCNTL.597    
      END                                                                  OFLTCNTL.598    
*ENDIF                                                                     ORH1F405.829    
*ENDIF                                                                     OFLTCNTL.599