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

      SUBROUTINE TFILT_CTL(                                                 1,5TROPFCTL.20     
*CALL ARGSIZE                                                              TROPFCTL.21     
*CALL ARGOCALL                                                             TROPFCTL.22     
*CALL ARGOINDX                                                             TROPFCTL.23     
     & UBTA,VBTA,ETAA,                                                     TROPFCTL.24     
*CALL COCAWRKA                                                             TROPFCTL.25     
     & )                                                                   TROPFCTL.26     
                                                                           TROPFCTL.27     
      IMPLICIT NONE                                                        TROPFCTL.28     
                                                                           TROPFCTL.29     
*CALL OARRYSIZ                                                             TROPFCTL.30     
*CALL TYPSIZE                                                              TROPFCTL.31     
*CALL TYPOINDX                                                             PXORDER.54     
*CALL TYPOCALL                                                             TROPFCTL.32     
*CALL COCTWRKA                                                             TROPFCTL.34     
*CALL CNTLOCN                                                              TROPFCTL.35     
*CALL UMSCALAR                                                             TROPFCTL.36     
*CALL OTIMER                                                               TROPFCTL.37     
*CALL PARVARS                                                              ORH1F405.831    
                                                                           TROPFCTL.39     
      INTEGER  I,J,L                                                       TROPFCTL.40     
     &        ,SEG_CNT              ! local segment counter                TROPFCTL.41     
     &        ,FWORK_CNT            ! global segment counter               TROPFCTL.42     
     &        ,HELP_CNT             ! couter for helper PEs                TROPFCTL.43     
     &        ,IPROC                ! processor counter                    TROPFCTL.44     
     &        ,HELP_PE(O_NPROC)     ! label for a helper PE                TROPFCTL.45     
     &        ,IHELP                ! counter for helper PEs               TROPFCTL.46     
     &        ,SEG_START            ! starting point for this seg          TROPFCTL.47     
     &        ,SEG_LENGTH           ! length of this segment               TROPFCTL.48     
     &        ,ROW_NO(JMT_GLOBAL)   ! global row number                    TROPFCTL.49     
     &        ,IS,IE,ISAVE          ! \                                    TROPFCTL.50     
     &        ,IEAVE,IREDO          !   local scalars used in              TROPFCTL.51     
     &        ,IEA,IEB,ISM1         !   fourier filtering                  TROPFCTL.52     
     &        ,JJ,IM,M,N,II         ! /                                    TROPFCTL.53     
                                                                           TROPFCTL.54     
      REAL     ETAA(IMT,JMT)        ! eta for next timestep                TROPFCTL.55     
     &        ,UBTA(IMT,JMTM1)      ! x-comp of barot vely next t step     TROPFCTL.56     
     &        ,VBTA(IMT,JMTM1)      ! y-comp of barot vely next t step     TROPFCTL.57     
     &        ,UBTDIF(IMT)          ! temp array used in filtering         TROPFCTL.58     
     &        ,VBTDIF(IMT)          ! temp array used in filtering         TROPFCTL.59     
     &        ,ETADIF(IMT)          ! temp array used in filtering         TROPFCTL.60     
     &        ,FTARR(IMTIMT_FLT)    ! coef used in filtering routine       TROPFCTL.61     
     &        ,FX                   ! local constant                       TROPFCTL.62     
                                                                           TROPFCTL.63     
                                                                           ORH1F405.832    
!---------------------------------------------------------------           ORH1F405.833    
! Note: The 25 in the following dimensions is the theoretical              ORH1F405.834    
!       maximum number of rows which can be filtered by this               ORH1F405.835    
!       routine.                                                           ORH1F405.836    
!---------------------------------------------------------------           ORH1F405.837    
                                                                           ORH1F405.838    
      INTEGER MAX_FS_COLS   ! Max no of E-W points which can be            ORH1F405.839    
!                             handled                                      ORH1F405.840    
     &,       MAX_FILT_ROWS ! Max no of rows which can be filtered         ORH1F405.841    
                                                                           ORH1F405.842    
                                                                           ORH1F405.843    
      ! The following parameters may be adjusted to cater for              ORH1F405.844    
      ! higher resolution models or to save space in lower                 ORH1F405.845    
      ! resolution models.                                                 ORH1F405.846    
      PARAMETER (MAX_FS_COLS = 1082)                                       ORH1F405.847    
      PARAMETER (MAX_FILT_ROWS = 25)                                       ORH1F405.848    
                                                                           ORH1F405.849    
      REAL CS_TEMP(MAX_FILT_ROWS), CST_TEMP(MAX_FILT_ROWS), COS_FILT       ORH1F405.850    
                                                                           ORH1F405.851    
      REAL U_TEMP(MAX_FS_COLS,MAX_FILT_ROWS)                               ORH1F405.852    
     &,    V_TEMP(MAX_FS_COLS,MAX_FILT_ROWS)                               ORH1F405.853    
     &,    U_PART(MAX_FS_COLS,MAX_FILT_ROWS)                               ORH1F405.854    
     &,    V_PART(MAX_FS_COLS,MAX_FILT_ROWS)                               ORH1F405.855    
     &,    UV_FILT(MAX_FS_COLS)                                            ORH1F405.856    
     &,    ETAA_TEMP(MAX_FS_COLS,MAX_FILT_ROWS)                            ORH1F405.857    
     &,    U_FILT(MAX_FS_COLS)                                             ORH1F405.858    
     &,    V_FILT(MAX_FS_COLS)                                             ORH1F405.859    
     &,    ETAA_FILT(MAX_FS_COLS)                                          ORH1F405.860    
                                                                           TROPFCTL.154    
      INTEGER U_OR_V                                                       ORH1F405.861    
     &,       SIZEA                                                        ORH1F405.862    
     &,       SIZEB                                                        ORH1F405.863    
     &,       J_GET                                                        ORH1F405.864    
     &,       IWK                                                          ORH1F405.865    
     &,       J_TO_FILTER                                                  ORH1F405.866    
                                                                           ORH1F405.867    
      COMMON /SHMEM_FC/ U_TEMP, V_TEMP, ETAA_TEMP                          ORH1F405.868    
     &,                 UV_FILT, ETAA_FILT                                 ORH1F405.869    
     &,                 U_PART, V_PART                                     ORH1F405.870    
     &,                 CS_TEMP, CST_TEMP                                  ORH1F405.871    
                                                                           ORH1F405.872    
      ! Master PEs must set up values to be filtered in common blocks      ORH1F405.873    
                                                                           ORH1F405.874    
      IF (SLAV_CNT_F.GT.0) THEN                                            ORH1F405.875    
                                                                           ORH1F405.876    
!----------------------------------------------------------------------    ORH1F405.877    
!         The *_TEMP arrays have to be in common for SHMEM calls           ORH1F405.878    
!         We therefore use JJ as the row index for these variables         ORH1F405.879    
!         to minimise on the amount of space we need to reserve for        ORH1F405.880    
!         them. This means that provided the 2nd dimension of the          ORH1F405.881    
!         *_TEMP arrays is at least the same number as the number          ORH1F405.882    
!         of rows to filter in the model, then things will be ok.          ORH1F405.883    
!----------------------------------------------------------------------    ORH1F405.884    
                                                                           ORH1F405.885    
          DO J = J_1, J_JMT                                                ORH1F405.886    
                                                                           ORH1F405.887    
             CS_TEMP(J) = CS(J)                                            ORH1F405.888    
             JJ=J+J_OFFSET - JFRST+1                                       ORH1F405.889    
             IF (J+J_OFFSET.GE.JFU2) JJ=JJ-JSKPU+1                         ORH1F405.890    
                                                                           ORH1F405.891    
             ! If there's at least one segment in this row                 ORH1F405.892    
             ! move it to a common block area.                             ORH1F405.893    
             IF (ISUF(JJ,1,1).GT.0) THEN                                   ORH1F405.894    
                CS_TEMP(JJ) = CS(J)                                        ORH1F405.895    
                DO I = 1, IMT                                              ORH1F405.896    
                   U_TEMP(I,JJ) = UBTA(I,J)                                ORH1F405.897    
                   V_TEMP(I,JJ) = VBTA(I,J)                                ORH1F405.898    
                ENDDO                                                      ORH1F405.899    
             ENDIF                                                         ORH1F405.900    
                                                                           ORH1F405.901    
             JJ=J+J_OFFSET - JFRST+1                                       ORH1F405.902    
             IF (J+J_OFFSET.GE.JFT2) JJ=JJ-JSKPT+1                         ORH1F405.903    
             ! If there's at least one segment in this row                 ORH1F405.904    
             ! move it to a common block area.                             ORH1F405.905    
             IF (ISTF(JJ,1,1).GT.0) THEN                                   ORH1F405.906    
                CST_TEMP(JJ) = CST(J)                                      ORH1F405.907    
                DO I = 1, IMT                                              ORH1F405.908    
                   ETAA_TEMP(I,JJ) = ETAA(I,J)                             ORH1F405.909    
                ENDDO                                                      ORH1F405.910    
             ENDIF                                                         ORH1F405.911    
                                                                           ORH1F405.912    
          ENDDO                                                            ORH1F405.913    
                                                                           ORH1F405.914    
      ENDIF                                                                ORH1F405.915    
                                                                           ORH1F405.916    
                                                                           ORH1F405.917    
      ! Make sure all PES are ready to get involved in the filtering       ORH1F405.918    
      CALL BARRIER()                                                       ORH1F405.919    
                                                                           ORH1F405.920    
      ! For each bit of Free surface filtering work.                       ORH1F405.921    
      DO IWK = 1, MAST_CNT_F                                               ORH1F405.922    
                                                                           ORH1F405.923    
          ! What's the master PE, row and segment                          ORH1F405.924    
          IPROC = MAST_PE_F(IWK)                                           ORH1F405.925    
                                                                           ORH1F405.926    
          ! Row (J) will be a value LOCAL to the master array              ORH1F405.927    
          ! ie it is an index which tells us where to get data             ORH1F405.928    
          ! from on the remote PE.                                         ORH1F405.929    
          J = MAST_ROW_F(IWK)                                              ORH1F405.930    
                                                                           ORH1F405.931    
          L = MOD(MAST_SEG_F(IWK),LSEGF)                                   ORH1F405.932    
                                                                           ORH1F405.933    
          ! Which row is this in global terms                              ORH1F405.934    
          J_TO_FILTER = g_datastart(2,IPROC) + J - O_NS_HALO - 1           ORH1F405.935    
                                                                           ORH1F405.936    
                                                                           ORH1F405.937    
          ! Is this a velocity segment we're filtering?                    ORH1F405.938    
          IF (MAST_SEG_F(IWK).LE.(LSEGF*2)) THEN                           ORH1F405.939    
                                                                           ORH1F405.940    
             IF (MAST_SEG_F(IWK).LE.LSEGF) THEN                            ORH1F405.941    
                U_OR_V = 1   ! We filter U                                 ORH1F405.942    
             ELSE                                                          ORH1F405.943    
                U_OR_V = 2   ! We filter V                                 ORH1F405.944    
             ENDIF                                                         ORH1F405.945    
                                                                           ORH1F405.946    
             JJ=J_TO_FILTER-JFRST+1                                        ORH1F405.947    
             IF (J_TO_FILTER.GE.JFU2) JJ=JJ-JSKPU+1                        ORH1F405.948    
                                                                           ORH1F405.949    
             CALL SHMEM_GET(COS_FILT,CS_TEMP(JJ),1,IPROC)                  ORH1F405.950    
                                                                           ORH1F405.951    
C                                                                          TROPFCTL.157    
C CALCULATE FX TO DETERMINE THE HEMISPHERE IN WHICH THE FILTERING IS       TROPFCTL.158    
C BEING CONDUCTED. NOTE THIS TEST ONLY APPLIES TO FILTERING AREAS AWAY     TROPFCTL.159    
C FROM THE EQUATOR.                                                        TROPFCTL.160    
C                                                                          TROPFCTL.161    
             FX=-1.0                                                       ORH1F405.952    
             IF (J_TO_FILTER.GT.(0.5*JMT_GLOBAL)) THEN                     ORH1F405.953    
                FX=1.0                                                     ORH1F405.954    
             ENDIF                                                         ORH1F405.955    
C                                                                          TROPFCTL.172    
C  THE BAROTROPIC VELOCITIES ARE CALCULATED ON THE SAME GRID AS THE        TROPFCTL.173    
C  BAROCLINIC VELOCITES AND THEREFORE IT IS POSSIBLE TO USE THE SAME       TROPFCTL.174    
C  INDICIES. FOR THE BT VELYS ONLY THE TOP LEVEL INDICIES ARE REQUIRED.    TROPFCTL.175    
C                                                                          TROPFCTL.176    
                                                                           TROPFCTL.177    
             IS=ISUF(JJ,L,1)                                               ORH1F405.956    
             IE=IEUF(JJ,L,1)                                               ORH1F405.957    
             IREDO=0                                                       ORH1F405.958    
             IM=IE-IS+1                                                    ORH1F405.959    
C                                                                          TROPFCTL.187    
C  THE FOLLOWING TEST IS STILL REQUIRED TO CHECK FOR TYPE OF FILTER        TROPFCTL.188    
C  REQUIRED.                                                               TROPFCTL.189    
C                                                                          TROPFCTL.190    
                                                                           TROPFCTL.325    
                                                                           TROPFCTL.326    
             IF (.NOT.(L_OCYCLIC)) THEN                                    ORH1F405.960    
                M=2                                                        ORH1F405.961    
                N=NINT(IM*COS_FILT*CSR_JFU0)                               ORH1F405.962    
             ELSE                                                          ORH1F405.963    
                IF(IM.NE.IMTM2) THEN                                       ORH1F405.964    
                   M=2                                                     ORH1F405.965    
                   N=NINT(IM*COS_FILT*CSR_JFU0)                            ORH1F405.966    
                ELSE                                                       ORH1F405.967    
                   M=3                                                     ORH1F405.968    
                   N=NINT(IM*COS_FILT*CSR_JFU0*.5)                         ORH1F405.969    
                ENDIF                                                      ORH1F405.970    
             ENDIF                                                         ORH1F405.971    
                                                                           TROPFCTL.331    
             ISM1=IS-1                                                     ORH1F405.972    
             IEA=IE                                                        ORH1F405.973    
                                                                           ORH1F405.974    
             ! Annoyingly, even though we only want to filter U or V       ORH1F405.975    
             ! we need to get hold of both U and V from the master.        ORH1F405.976    
             ! This adds to the comms. However, the alternative would      ORH1F405.977    
             ! be to perform the following processing on the master PE     ORH1F405.978    
             ! before getting the value we end up with in UV_FILT.         ORH1F405.979    
             ! Since the name of the game is load balancing, we try        ORH1F405.980    
             ! to do as much work on the slave PEs as possible.            ORH1F405.981    
             IF (IE.GE.IMU) THEN                                           ORH1F405.982    
                IEA=IMUM1                                                  ORH1F405.983    
                IEB=IE-IMUM2                                               ORH1F405.984    
                II=IMUM1-IS                                                ORH1F405.985    
                                                                           TROPFCTL.333    
                SIZEB = IEB -2 + 1                                         ORH1F405.986    
                CALL SHMEM_GET(U_FILT(2),U_TEMP(2,JJ),SIZEB,IPROC)         ORH1F405.987    
                CALL SHMEM_GET(V_FILT(2),V_TEMP(2,JJ),SIZEB,IPROC)         ORH1F405.988    
                                                                           TROPFCTL.339    
             ENDIF                                                         ORH1F405.989    
                                                                           TROPFCTL.344    
             SIZEA = IEA - IS + 1                                          ORH1F405.990    
             CALL SHMEM_GET(U_FILT(IS),U_TEMP(IS,JJ),SIZEA,IPROC)          ORH1F405.991    
             CALL SHMEM_GET(V_FILT(IS),V_TEMP(IS,JJ),SIZEA,IPROC)          ORH1F405.992    
                                                                           TROPFCTL.399    
                                                                           TROPFCTL.400    
             ! If U or V is 1 then we are dealing with the U               ORH1F405.993    
             ! component. Set up values prior to filtering                 ORH1F405.994    
             ! accordingly.                                                ORH1F405.995    
             IF (U_OR_V.EQ.1) THEN                                         ORH1F405.996    
                                                                           TROPFCTL.405    
                DO I=IS,IEA                                                ORH1F405.997    
                   UV_FILT(I-ISM1)=-FX*U_FILT(I)*SPSIN(I)                  ORH1F405.998    
     &                     -V_FILT(I)*SPCOS(I)                             ORH1F405.999    
                ENDDO                                                      ORH1F405.1000   
                                                                           TROPFCTL.410    
                IF (IE.GE.IMU)THEN                                         ORH1F405.1001   
                   DO I=2,IEB                                              ORH1F405.1002   
                      UV_FILT(I+II)=-FX*U_FILT(I)*SPSIN(I)                 ORH1F405.1003   
     &                     -V_FILT(I)*SPCOS(I)                             ORH1F405.1004   
                   ENDDO                                                   ORH1F405.1005   
                ENDIF                                                      ORH1F405.1006   
                                                                           TROPFCTL.413    
             ELSE ! Set up the V component values to filter                ORH1F405.1007   
                                                                           TROPFCTL.417    
                DO I=IS,IEA                                                ORH1F405.1008   
                   UV_FILT(I-ISM1)= FX*U_FILT(I)*SPCOS(I)                  ORH1F405.1009   
     &                     -V_FILT(I)*SPSIN(I)                             ORH1F405.1010   
                ENDDO                                                      ORH1F405.1011   
                                                                           TROPFCTL.420    
                IF (IE.GE.IMU)THEN                                         ORH1F405.1012   
                   DO I=2,IEB                                              ORH1F405.1013   
                      UV_FILT(I+II)= FX*U_FILT(I)*SPCOS(I)                 ORH1F405.1014   
     &                     -V_FILT(I)*SPSIN(I)                             ORH1F405.1015   
                   ENDDO                                                   ORH1F405.1016   
                ENDIF                                                      ORH1F405.1017   
             ENDIF                                                         ORH1F405.1018   
C                                                                          ORH1F405.1019   
          CALL FILTR(                                                      ORH1F405.1020   
*CALL ARGSIZE                                                              ORH1F405.1021   
*CALL ARGOCFIL                                                             ORH1F405.1022   
     &    FTARR,UV_FILT,IM,M,N,IREDO)                                      ORH1F405.1023   
                                                                           TROPFCTL.422    
                                                                           TROPFCTL.424    
             ! Having filtered, we must pass this segment back to          ORH1F405.1024   
             ! the master PE ready for some further processing.            ORH1F405.1025   
             IF (U_OR_V.EQ.1) THEN                                         ORH1F405.1026   
                                                                           TROPFCTL.426    
                CALL SHMEM_PUT(U_PART(IS,JJ)                               ORH1F405.1027   
     &                                  ,UV_FILT(1),SIZEA,IPROC)           ORH1F405.1028   
                                                                           TROPFCTL.428    
                IF (IE.GE.IMU) THEN                                        ORH1F405.1029   
                                                                           TROPFCTL.430    
                                                                           TROPFCTL.435    
                   CALL SHMEM_PUT(U_PART(2,JJ)                             ORH1F405.1030   
     &                        ,UV_FILT(SIZEA+1),SIZEB,IPROC)               ORH1F405.1031   
                ENDIF                                                      ORH1F405.1032   
             ELSE                                                          ORH1F405.1033   
                                                                           TROPFCTL.441    
                CALL SHMEM_PUT(V_PART(IS,JJ)                               ORH1F405.1034   
     &                                  ,UV_FILT(1),SIZEA,IPROC)           ORH1F405.1035   
                                                                           TROPFCTL.450    
                                                                           ORH1F405.1036   
                IF (IE.GE.IMU) THEN                                        ORH1F405.1037   
                                                                           ORH1F405.1038   
                   CALL SHMEM_PUT(V_PART(2,JJ)                             ORH1F405.1039   
     &                            ,UV_FILT(SIZEA+1),SIZEB,IPROC)           ORH1F405.1040   
                ENDIF                                                      ORH1F405.1041   
             ENDIF                                                         ORH1F405.1042   
                                                                           ORH1F405.1043   
          ELSE  ! Filter the ETA values                                    ORH1F405.1044   
                                                                           ORH1F405.1045   
!-----------------------------------------------------------------------   ORH1F405.1046   
! FOURIER FILTER ETA AT HIGH LATITUDES                                     ORH1F405.1047   
! FOURIER FILTERING INDEXES TAKE ACCOUNT OF LAND WHEN L_OSKIPLND = t.      ORH1F405.1048   
!-----------------------------------------------------------------------   ORH1F405.1049   
                                                                           ORH1F405.1050   
C                                                                          TROPFCTL.458    
C  SINCE ETA IS CALCULATED ON THE TOP TRACER GRID IT IS THEREFORE          TROPFCTL.459    
C  POSSIBLE TO USE THE START AND END INDICIES ALREADY CREATED FOR THE      TROPFCTL.460    
C  TRACERS IN FINDEX. NOTE ONLY THE TOP LEVEL VALUES ARE REQUIRED.         TROPFCTL.461    
C                                                                          TROPFCTL.462    
             JJ=J_TO_FILTER-JFRST+1                                        ORH1F405.1051   
             IF (J_TO_FILTER.GE.JFT2) JJ=JJ-JSKPT+1                        ORH1F405.1052   
                                                                           ORH1F405.1053   
             CALL SHMEM_GET(COS_FILT,CST_TEMP(JJ),1,IPROC)                 ORH1F405.1054   
            IS=ISTF(JJ,L,1)                                                TROPFCTL.464    
            IE=IETF(JJ,L,1)                                                TROPFCTL.465    
            IREDO=0                                                        ORH1F405.1055   
               IM=IE-IS+1                                                  TROPFCTL.471    
C                                                                          TROPFCTL.473    
C  IT IS REQUIRED THAT ETA IS ALWAYS FILTERED USING THE COS SOLUTION       TROPFCTL.474    
C  AND THEREFORE THIS REQUIRES THE VALUE FOR M TO BE SET TO 1.             TROPFCTL.475    
C                                                                          TROPFCTL.476    
                                                                           TROPFCTL.477    
            M=1                                                            TROPFCTL.478    
           N=NINT(IM*COS_FILT*CSTR_JFT0)                                   ORH1F405.1056   
                                                                           TROPFCTL.480    
C                                                                          TROPFCTL.481    
C   SET UP INDICES AND ARRAYS                                              TROPFCTL.482    
           IEA=IE                                                          ORH1F405.1057   
           IF (IE.GE.IMT) THEN                                             ORH1F405.1058   
              IEA=IMTM1                                                    TROPFCTL.487    
              IEB=IE-IMTM2                                                 ORH1F405.1059   
              II=IMTM1-IS                                                  ORH1F405.1060   
              SIZEB = IEB - 2 + 1                                          ORH1F405.1061   
              SIZEA = IEA - IS + 1                                         ORH1F405.1062   
              CALL SHMEM_GET(ETAA_FILT(SIZEA+1)                            ORH1F405.1063   
     &           ,ETAA_TEMP(2,JJ),SIZEB,IPROC)                             ORH1F405.1064   
           ENDIF                                                           ORH1F405.1065   
                                                                           TROPFCTL.489    
           SIZEA = IEA - IS + 1                                            ORH1F405.1066   
           CALL SHMEM_GET(ETAA_FILT(1)                                     ORH1F405.1067   
     &              ,ETAA_TEMP(IS,JJ),SIZEA,IPROC)                         ORH1F405.1068   
                                                                           TROPFCTL.497    
                                                                           TROPFCTL.510    
            CALL FILTR(                                                    TROPFCTL.511    
*CALL ARGSIZE                                                              ORH1F405.1069   
*CALL ARGOCFIL                                                             ORH1F405.1070   
     &           FTARR,ETAA_FILT,IM,M,N,IREDO)                             ORH1F405.1071   
C                                                                          TROPFCTL.515    
                                                                           TROPFCTL.516    
                                                                           TROPFCTL.521    
                                                                           TROPFCTL.529    
             CALL SHMEM_PUT(ETAA_TEMP(IS,JJ)                               ORH1F405.1072   
     &           ,ETAA_FILT(1),SIZEA,IPROC)                                ORH1F405.1073   
                                                                           TROPFCTL.531    
             IF (IE.GE.IMU) THEN                                           ORH1F405.1074   
                 CALL SHMEM_PUT(ETAA_TEMP(2,JJ)                            ORH1F405.1075   
     &           ,ETAA_FILT(SIZEA+1),SIZEB,IPROC)                          ORH1F405.1076   
             ENDIF                                                         ORH1F405.1077   
                                                                           TROPFCTL.534    
          ENDIF                                                            ORH1F405.1078   
      ENDDO ! Over IWK                                                     ORH1F405.1079   
                                                                           TROPFCTL.546    
      CALL BARRIER()                                                       ORH1F405.1080   
                                                                           TROPFCTL.548    
      ! Now all results will have been returned to masters.                ORH1F405.1081   
      ! The masters still have some further velocity processing            ORH1F405.1082   
      ! to do before continuing.                                           ORH1F405.1083   
      IF (SLAV_CNT_F.GT.0) THEN                                            ORH1F405.1084   
                                                                           TROPFCTL.554    
          DO J = J_1, J_JMT                                                ORH1F405.1085   
             JJ=J+J_OFFSET - JFRST+1                                       ORH1F405.1086   
             IF (J+J_OFFSET.GE.JFU2) JJ=JJ-JSKPU+1                         ORH1F405.1087   
                                                                           TROPFCTL.557    
             FX = -1.0                                                     ORH1F405.1088   
             IF (J+J_OFFSET.GT.(0.5*JMT_GLOBAL)) FX=1.0                    ORH1F405.1089   
             DO L = 1, LSEGF                                               ORH1F405.1090   
                IF ((ISUF(JJ,1,1).GT.0).AND.                               ORH1F405.1091   
                                                                           TROPFCTL.561    
     &              (ISUF(JJ,L,1).GT.0)) THEN                              ORH1F405.1092   
                   IS=ISUF(JJ,L,1)                                         ORH1F405.1093   
                   IE=IEUF(JJ,L,1)                                         ORH1F405.1094   
                                                                           TROPFCTL.565    
                   ISM1=IS-1                                               ORH1F405.1095   
                   IEA=IE                                                  ORH1F405.1096   
                   IF (IE.GE.IMU) THEN                                     ORH1F405.1097   
                      IEA=IMUM1                                            ORH1F405.1098   
                   ENDIF                                                   ORH1F405.1099   
                                                                           TROPFCTL.570    
                                                                           TROPFCTL.575    
                                                                           TROPFCTL.577    
                   DO I = IS, IEA                                          ORH1F405.1100   
                      UBTA(I,J)=FX*(-U_PART(I,JJ)*SPSIN(I)                 ORH1F405.1101   
     *                       +V_PART(I,JJ)*SPCOS(I))                       ORH1F405.1102   
                      VBTA(I,J)=-U_PART(I,JJ)*SPCOS(I)                     ORH1F405.1103   
     *                   -V_PART(I,JJ)*SPSIN(I)                            ORH1F405.1104   
                   ENDDO                                                   ORH1F405.1105   
                                                                           TROPFCTL.583    
                   IF (IE.GE.IMU) THEN                                     ORH1F405.1106   
                       IEB=IE-IMUM2                                        ORH1F405.1107   
                       DO I = 2, IEB                                       ORH1F405.1108   
                          UBTA(I,J)=FX*(-U_PART(I,JJ)*SPSIN(I)             ORH1F405.1109   
     *                         +V_PART(I,JJ)*SPCOS(I))                     ORH1F405.1110   
                          VBTA(I,J)=-U_PART(I,JJ)*SPCOS(I)                 ORH1F405.1111   
     *                     -V_PART(I,JJ)*SPSIN(I)                          ORH1F405.1112   
                      ENDDO                                                ORH1F405.1113   
                   ENDIF                                                   ORH1F405.1114   
                                                                           TROPFCTL.588    
                                                                           TROPFCTL.592    
                                                                           ORH1F405.1115   
                ENDIF                                                      ORH1F405.1116   
             ENDDO   ! Over L                                              ORH1F405.1117   
                                                                           TROPFCTL.594    
                                                                           ORH1F405.1118   
             JJ=J+J_OFFSET - JFRST+1                                       ORH1F405.1119   
             IF (J+J_OFFSET.GE.JFT2) JJ=JJ-JSKPT+1                         ORH1F405.1120   
             ! If there's at least one segment in this row                 ORH1F405.1121   
             ! move it to a common block area.                             ORH1F405.1122   
             IF (ISTF(JJ,1,1).GT.0) THEN                                   ORH1F405.1123   
                DO I = 1, IMT                                              ORH1F405.1124   
                   ETAA(I,J) = ETAA_TEMP(I,JJ)                             ORH1F405.1125   
                ENDDO                                                      ORH1F405.1126   
             ENDIF                                                         ORH1F405.1127   
                                                                           ORH1F405.1128   
          ENDDO  ! Over J                                                  ORH1F405.1129   
      ENDIF                                                                ORH1F405.1130   
                                                                           ORH1F405.1131   
      RETURN                                                               TROPFCTL.602    
      END                                                                  TROPFCTL.603    
*ENDIF                                                                     TROPFCTL.604