*IF DEF,A10_1A,OR,DEF,A10_1B,OR,DEF,A10_1C                                 AAD2F404.244    
*IF -DEF,SCMA                                                              AJC0F405.265    
C ******************************COPYRIGHT******************************    GTS2F400.2845   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.2846   
C                                                                          GTS2F400.2847   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.2848   
C restrictions as set forth in the contract.                               GTS2F400.2849   
C                                                                          GTS2F400.2850   
C                Meteorological Office                                     GTS2F400.2851   
C                London Road                                               GTS2F400.2852   
C                BRACKNELL                                                 GTS2F400.2853   
C                Berkshire UK                                              GTS2F400.2854   
C                RG12 2SZ                                                  GTS2F400.2855   
C                                                                          GTS2F400.2856   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.2857   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.2858   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.2859   
C Modelling at the above address.                                          GTS2F400.2860   
C ******************************COPYRIGHT******************************    GTS2F400.2861   
C                                                                          GTS2F400.2862   
CLL  SUBROUTINE FILT_FLD   -----------------------------------------       FILTFL1A.3      
CLL                                                                        FILTFL1A.4      
CLL  PURPOSE: FOURIER DAMPS POTENTIAL TEMPERATURE FIELD.                   FILTFL1A.5      
CLL           SETS SURFACE PRESSURE,POTENTIAL TEMPERATURE AND              FILTFL1A.6      
CLL           MOISTURE VARIABLES AT POLES TO THE MEAN VALUE OF THE         FILTFL1A.7      
CLL           SURROUNDING ROWS.                                            FILTFL1A.8      
CLL  NOT SUITABLE FOR I.B.M USE.                                           FILTFL1A.9      
CLL                                                                        FILTFL1A.10     
CLL  WRITTEN BY M.H MAWSON.                                                FILTFL1A.11     
CLL                                                                        FILTFL1A.12     
CLL  MODEL            MODIFICATION HISTORY FROM MODEL VERSION 3.0:         FILTFL1A.13     
CLL VERSION  DATE                                                          FILTFL1A.14     
CLL   3.1     24/02/93  Tidy code to remove QA Fortran messages.           MM240293.48     
CLL   3.4     26/05/94  Argument LLINTS added and passed to CALC_RS        GSS1F304.195    
CLL                                                      S.J.Swarbrick     GSS1F304.196    
!LL   4.2     16/08/96  Added TYPFLDPT arguments and made                  APB0F402.69     
!LL                     FILTER_WAVE_NUMBER_P_ROWS globally sized.          APB0F402.70     
!LL                     Add TYPFLDPT  args to FILTER.                      APB0F402.71     
!LL                                                        P.Burton        APB0F402.72     
!LL   4.3     11/03/97  Added MPP code to for zonal sums.                  ADR1F403.22     
!LL                     (MPP Non bit-reproducible for different            ADR1F403.23     
!LL                      numbers of processors)    P.Burton                ADR1F403.24     
!LL   4.5     28/10/98  Introduce Single Column Model. JC Thil             AJC0F405.264    
!LL                                                                        ADR1F403.25     
CLL                                                                        FILTFL1A.15     
CLL  PROGRAMMING STANDARD: UNIFIED MODEL DOCUMENTATION PAPER NO. 4,        FILTFL1A.16     
CLL  SYSTEM COMPONENTS COVERED:  P142, P196.                               FILTFL1A.17     
CLL  SYSTEM TASK: P1                                                       FILTFL1A.18     
CLL  DOCUMENTATION:        SEE UNIFIED MODEL DOCUMENTATION PAPER           FILTFL1A.19     
CLL                        NO. 10 M.J.P. CULLEN,T.DAVIES AND M.H.MAWSON    FILTFL1A.20     
CLL                        FOR DETAILS OF FOURIER DAMPING.                 FILTFL1A.21     
CLLEND-------------------------------------------------------------        FILTFL1A.22     
                                                                           FILTFL1A.23     
C                                                                          FILTFL1A.24     
C*L  ARGUMENTS:---------------------------------------------------         FILTFL1A.25     
                                                                           FILTFL1A.26     

      SUBROUTINE FILT_FLD                                                   1,3FILTFL1A.27     
     1                   (P_FIELD,P_LEVELS,Q_LEVELS,ROW_LENGTH,            FILTFL1A.28     
*CALL ARGFLDPT                                                             APB0F402.73     
     2                    PSTAR,THETA,Q,QCL,QCF,                           FILTFL1A.29     
     3                    IFAX,TRIGS,FILTER_WAVE_NUMBER_P_ROWS,            FILTFL1A.30     
     5                    NORTHERN_FILTERED_P_ROW,                         FILTFL1A.31     
     6                    SOUTHERN_FILTERED_P_ROW,                         FILTFL1A.32     
     7                    AK,BK,DELTA_AK,DELTA_BK,COS_P_LATITUDE,          FILTFL1A.33     
     8                    RS_SQUARED_DELTAP,LATITUDE_STEP_INVERSE,         GSS1F304.197    
     9                    LLINTS)                                          GSS1F304.198    
                                                                           FILTFL1A.35     
      IMPLICIT NONE                                                        FILTFL1A.36     
                                                                           APB0F402.74     
! All FLDPTR arguments are intent IN                                       APB0F402.75     
*CALL TYPFLDPT                                                             APB0F402.76     
                                                                           APB0F402.77     
      LOGICAL  LLINTS  ! Arg passed to CALC_RS                             GSS1F304.199    
                                                                           FILTFL1A.37     
      INTEGER                                                              FILTFL1A.38     
     1 P_FIELD,      !IN. NUMBER OF PRESSURE POINTS.                       FILTFL1A.39     
     2 ROW_LENGTH,   !IN. NUMBER OF POINTS ON A ROW.                       FILTFL1A.40     
     3 P_LEVELS,     !IN. NUMBER OF MODEL LEVELS.                          FILTFL1A.41     
     4 Q_LEVELS      !IN. NUMBER OF MOIST MODEL LEVELS.                    FILTFL1A.42     
                                                                           FILTFL1A.43     
      REAL                                                                 FILTFL1A.44     
     1 PSTAR(P_FIELD),  !INOUT. PRIMARY ARRAY FOR SURFACE PRESSURE         FILTFL1A.45     
     2 THETA(P_FIELD,P_LEVELS),!INOUT.PRIMARY ARRAY FOR POT. TEMP.         FILTFL1A.46     
     3 Q(P_FIELD,Q_LEVELS), !INOUT. PRIMARY ARRAY FOR MOISTURE.            FILTFL1A.47     
     4 QCL(P_FIELD,Q_LEVELS), !INOUT. PRIMARY ARRAY FOR CLOUD LIQUID       FILTFL1A.48     
     4                        !       WATER.                               FILTFL1A.49     
     5 QCF(P_FIELD,Q_LEVELS)  !INOUT. PRIMARY ARRAY FOR CLOUD FROZEN       FILTFL1A.50     
     5                        !       WATER.                               FILTFL1A.51     
                                                                           FILTFL1A.52     
      INTEGER                                                              FILTFL1A.53     
     *  NORTHERN_FILTERED_P_ROW !IN P ROW ON WHICH FILTERING STOPS         FILTFL1A.54     
     *                          ! MOVING TOWARDS EQUATOR                   FILTFL1A.55     
     *, SOUTHERN_FILTERED_P_ROW !IN P ROW ON WHICH FILTERING STARTS        FILTFL1A.56     
     *                          ! AGAIN MOVING TOWARDS SOUTH POLE          FILTFL1A.57     
     &, FILTER_WAVE_NUMBER_P_ROWS(GLOBAL_P_FIELD/GLOBAL_ROW_LENGTH)        APB0F402.78     
     &               ! LAST WAVE NUMBER NOT TO BE DAMPED ON A P ROW        APB0F402.79     
     *, IFAX(10)           !IN HOLDS FACTORS OF ROW_LENGTH USED BY         FILTFL1A.60     
     *                     ! FILTERING.                                    FILTFL1A.61     
                                                                           FILTFL1A.62     
      REAL                                                                 FILTFL1A.63     
     * TRIGS(ROW_LENGTH)      !IN HOLDS TRIGONOMETRIC FUNCTIONS USED       FILTFL1A.64     
     *                        ! IN FILTERING.                              FILTFL1A.65     
     *,COS_P_LATITUDE(P_FIELD)!IN HOLDS COSINES OF LATITUDE AT P POINTS    FILTFL1A.66     
     *,LATITUDE_STEP_INVERSE  !IN 1./(LATITUDE STEP IN RADIANS)            FILTFL1A.67     
     *,AK(P_LEVELS)           !IN A PART OF ETA CO-ORDINATE                FILTFL1A.68     
     *,BK(P_LEVELS)           !IN B PART OF ETA CO-ORDINATE                FILTFL1A.69     
     *,DELTA_AK(P_LEVELS)     !IN LAYER THICKNESS OF A PART OF ETA         FILTFL1A.70     
     *,DELTA_BK(P_LEVELS)     !IN LAYER THICKNESS OF B PART OF ETA         FILTFL1A.71     
     *,RS_SQUARED_DELTAP(P_FIELD,P_LEVELS) !IN SPACE USED TO PUT           FILTFL1A.72     
     *                                     ! MASS FIELD IN.                FILTFL1A.73     
                                                                           FILTFL1A.74     
C*---------------------------------------------------------------------    FILTFL1A.75     
                                                                           FILTFL1A.76     
C*L  DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------     FILTFL1A.77     
C   10 LOCAL ARRAYS REQUIRED                                               FILTFL1A.78     
                                                                           FILTFL1A.79     
      REAL                                                                 FILTFL1A.80     
     & MEAN_MW_THETA(tot_P_ROWS,P_LEVELS)                                  ADR1F403.26     
     &,MEAN_MW_THETA_NEW(tot_P_ROWS,P_LEVELS)                              ADR1F403.27     
     &,MEAN_MASS(tot_P_ROWS,P_LEVELS)                                      ADR1F403.28     
     &,MEAN_MW_NP_THETA_NEW(P_LEVELS)                                      ADR1F403.29     
     &,MEAN_MW_SP_THETA_NEW(P_LEVELS)                                      ADR1F403.30     
     &,MEAN_MW_NP_Q_NEW(Q_LEVELS)                                          ADR1F403.31     
     &,MEAN_MW_SP_Q_NEW(Q_LEVELS)                                          ADR1F403.32     
     &,MEAN_MW_NP_QCL_NEW(Q_LEVELS)                                        ADR1F403.33     
     &,MEAN_MW_SP_QCL_NEW(Q_LEVELS)                                        ADR1F403.34     
     &,MEAN_MW_NP_QCF_NEW(Q_LEVELS)                                        ADR1F403.35     
     &,MEAN_MW_SP_QCF_NEW(Q_LEVELS)                                        ADR1F403.36     
     &,MEAN_MASS_NP(P_LEVELS)                                              ADR1F403.37     
     &,MEAN_MASS_SP(P_LEVELS)                                              ADR1F403.38     
     &,NP_THETA(P_LEVELS)                                                  ADR1F403.39     
     &,SP_THETA(P_LEVELS)                                                  ADR1F403.40     
     &,NP_Q(Q_LEVELS)                                                      ADR1F403.41     
     &,SP_Q(Q_LEVELS)                                                      ADR1F403.42     
     &,NP_QCL(Q_LEVELS)                                                    ADR1F403.43     
     &,SP_QCL(Q_LEVELS)                                                    ADR1F403.44     
     &,NP_QCF(Q_LEVELS)                                                    ADR1F403.45     
     &,SP_QCF(Q_LEVELS)                                                    ADR1F403.46     
     &,MEAN_MW_NP_THETA(P_LEVELS)                                          FILTFL1A.82     
     &,MEAN_MW_SP_THETA(P_LEVELS)                                          FILTFL1A.83     
     &,MEAN_MW_NP_Q(Q_LEVELS)                                              FILTFL1A.84     
     &,MEAN_MW_SP_Q(Q_LEVELS)                                              FILTFL1A.85     
     &,MEAN_MW_NP_QCL(Q_LEVELS)                                            FILTFL1A.86     
     &,MEAN_MW_SP_QCL(Q_LEVELS)                                            FILTFL1A.87     
     &,MEAN_MW_NP_QCF(Q_LEVELS)                                            FILTFL1A.88     
     &,MEAN_MW_SP_QCF(Q_LEVELS)                                            FILTFL1A.89     
     &,WORK1(P_FIELD)                                                      FILTFL1A.90     
C*---------------------------------------------------------------------    FILTFL1A.91     
                                                                           FILTFL1A.92     
C DEFINE LOCAL VARIABLES                                                   FILTFL1A.93     
                                                                           FILTFL1A.94     
      INTEGER                                                              FILTFL1A.95     
     *  FILTER_SPACE_P     ! HORIZONTAL DIMENSION OF SPACE NEEDED IN       FILTFL1A.96     
     *                     ! FILTERING ROUTINE FOR P ROWS.                 FILTFL1A.97     
     &,  POINTS  ! number of updatable points                              ADR1F403.47     
     &,  NORTH_FIRST_ROW,NORTH_LAST_ROW  ! limits for loop over            ADR1F403.48     
     &,  SOUTH_FIRST_ROW,SOUTH_LAST_ROW  ! filterable rows                 ADR1F403.49     
                                                                           FILTFL1A.98     
      INTEGER                                                              FILTFL1A.99     
     1 I,K,J                                                               FILTFL1A.100    
*IF DEF,MPP                                                                ADR1F403.50     
     &, info  ! return code for communcations                              ADR1F403.51     
*ENDIF                                                                     ADR1F403.52     
                                                                           FILTFL1A.101    
      REAL                                                                 FILTFL1A.102    
     & INCREMENT                                                           ADR1F403.53     
     &,MEAN_RADIUS_NP                                                      FILTFL1A.109    
     &,MEAN_RADIUS_SP                                                      FILTFL1A.110    
                                                                           FILTFL1A.119    
      REAL                                                                 FILTFL1A.120    
     & POLAR_COSINE                                                        FILTFL1A.121    
                                                                           FILTFL1A.122    
      REAL                                                                 FILTFL1A.123    
     * NP_PSTAR,                                                           FILTFL1A.124    
     * SP_PSTAR                                                            ADR1F403.54     
C ---------------------------------------------------------------------    FILTFL1A.134    
                                                                           FILTFL1A.135    
C*L   EXTERNAL SUBROUTINE CALLS:---------------------------------------    FILTFL1A.136    
      EXTERNAL FILTER,CALC_RS                                              FILTFL1A.137    
                                                                           FILTFL1A.138    
C*---------------------------------------------------------------------    FILTFL1A.139    
                                                                           FILTFL1A.140    
CL  MAXIMUM VECTOR LENGTH ASSUMED IS ROW_LENGTH                            FILTFL1A.141    
CL---------------------------------------------------------------------    FILTFL1A.142    
CL    INTERNAL STRUCTURE.                                                  FILTFL1A.143    
CL---------------------------------------------------------------------    FILTFL1A.144    
CL                                                                         FILTFL1A.145    
CL---------------------------------------------------------------------    FILTFL1A.146    
CL    SECTION 1.    INITIALISE CONSTANTS.                                  FILTFL1A.147    
CL---------------------------------------------------------------------    FILTFL1A.148    
                                                                           FILTFL1A.149    
C SET FILTER_SPACE WHICH IS ROW_LENGTH+2 TIMES THE NUMBER OF ROWS TO       FILTFL1A.150    
C BE FILTERED.                                                             FILTFL1A.151    
                                                                           FILTFL1A.152    
      FILTER_SPACE_P = (ROW_LENGTH+2)*(NORTHERN_FILTERED_P_ROW-1+          FILTFL1A.153    
     *                P_FIELD/ROW_LENGTH-SOUTHERN_FILTERED_P_ROW)          FILTFL1A.154    
                                                                           ADR1F403.55     
      POINTS=LAST_P_VALID_PT-FIRST_VALID_PT+1                              ADR1F403.56     
                                                                           ADR1F403.57     
! Set FIRST_ROW and LAST_ROW variables to point to the sections            ADR1F403.58     
! of the field being updated by FILTER                                     ADR1F403.59     
*IF -DEF,MPP                                                               ADR1F403.60     
      NORTH_FIRST_ROW=FIRST_ROW  ! first non-polar row                     ADR1F403.61     
      NORTH_LAST_ROW=NORTHERN_FILTERED_P_ROW                               ADR1F403.62     
                                                                           ADR1F403.63     
      SOUTH_FIRST_ROW=SOUTHERN_FILTERED_P_ROW                              ADR1F403.64     
      SOUTH_LAST_ROW=P_LAST_ROW  ! last non-polar row                      ADR1F403.65     
*ELSE                                                                      ADR1F403.66     
! For the MPP code we must convert from global row numbers to local        ADR1F403.67     
! row numbers.                                                             ADR1F403.68     
      NORTH_FIRST_ROW=FIRST_ROW                                            ADR1F403.69     
      NORTH_LAST_ROW=NORTHERN_FILTERED_P_ROW-FIRST_GLOBAL_ROW_NUMBER+      ADR1F403.70     
     &               NS_Halo+1  ! gives local row number                   ADR1F403.71     
      IF (NORTH_LAST_ROW .GT. (tot_P_ROWS-NS_Halo))                        ADR1F403.72     
     &  NORTH_LAST_ROW=tot_P_ROWS-NS_Halo                                  ADR1F403.73     
                                                                           ADR1F403.74     
      SOUTH_FIRST_ROW=SOUTHERN_FILTERED_P_ROW-FIRST_GLOBAL_ROW_NUMBER+     ADR1F403.75     
     &                NS_Halo+1  ! gives local row number                  ADR1F403.76     
      IF (SOUTH_FIRST_ROW .LT. (NS_Halo+1))                                ADR1F403.77     
     &  SOUTH_FIRST_ROW=NS_Halo+1                                          ADR1F403.78     
      SOUTH_LAST_ROW=P_LAST_ROW                                            ADR1F403.79     
*ENDIF                                                                     ADR1F403.80     
                                                                           ADR1F403.81     
                                                                           ADR1F403.82     
                                                                           FILTFL1A.155    
      POLAR_COSINE = 0.125/LATITUDE_STEP_INVERSE                           FILTFL1A.156    
                                                                           FILTFL1A.157    
CL                                                                         FILTFL1A.158    
CL---------------------------------------------------------------------    FILTFL1A.159    
CL    SECTION 2.    CALCULATE RS SQUARED AND MASS-WEIGHTED THETA ON        FILTFL1A.160    
CL                  EACH ROW AT EACH LEVEL.                                FILTFL1A.161    
CL---------------------------------------------------------------------    FILTFL1A.162    
                                                                           FILTFL1A.163    
CL    CALL CALC_RS TO GET RS FOR LEVEL 1.                                  FILTFL1A.164    
C RS IS RETURNED IN RS_SQUARED_DELTAP( ,1)                                 FILTFL1A.165    
C TS IS RETURNED IN WORK1, RS AT LEVEL K-1 IS INPUT IN                     FILTFL1A.166    
C RS_SQUARED_DELTAP( ,2) AS AT K-1= 0 THE INPUT IS NOT USED BY CALC_RS.    FILTFL1A.167    
                                                                           FILTFL1A.168    
      CALL CALC_RS(PSTAR(FIRST_VALID_PT),AK,BK,                            ADR1F403.83     
     &             WORK1(FIRST_VALID_PT),                                  ADR1F403.84     
     &             RS_SQUARED_DELTAP(FIRST_VALID_PT,2),                    ADR1F403.85     
     &             RS_SQUARED_DELTAP(FIRST_VALID_PT,1),                    ADR1F403.86     
     &             POINTS,1,P_LEVELS,LLINTS)                               ADR1F403.87     
                                                                           FILTFL1A.171    
CL LOOP FROM 2 TO P_LEVELS                                                 FILTFL1A.172    
      DO K= 2,P_LEVELS                                                     FILTFL1A.173    
                                                                           FILTFL1A.174    
CL    CALL CALC_RS TO GET RS FOR LEVEL K.                                  FILTFL1A.175    
C RS IS RETURNED IN RS_SQUARED_DELTAP(1,K)                                 FILTFL1A.176    
C TS IS RETURNED IN WORK1, RS AT LEVEL K-1 IS INPUT AS                     FILTFL1A.177    
C RS_SQUARED_DELTAP(K-1).                                                  FILTFL1A.178    
                                                                           FILTFL1A.179    
        I=K                                                                MM240293.49     
      CALL CALC_RS(PSTAR(FIRST_VALID_PT),AK,BK,                            ADR1F403.88     
     &             WORK1(FIRST_VALID_PT),                                  ADR1F403.89     
     &             RS_SQUARED_DELTAP(FIRST_VALID_PT,K-1),                  ADR1F403.90     
     &             RS_SQUARED_DELTAP(FIRST_VALID_PT,K),                    ADR1F403.91     
     &             POINTS,I,P_LEVELS,LLINTS)                               ADR1F403.92     
                                                                           FILTFL1A.182    
      END DO                                                               FILTFL1A.183    
                                                                           FILTFL1A.184    
CL END LOOP FROM 2 TO P_LEVELS.                                            FILTFL1A.185    
                                                                           FILTFL1A.186    
CL FORM RS SQUARED * DELTA P * COSINE OF LATITUDE                          FILTFL1A.187    
CL AND ZONAL MEAN MASS-WEIGHTED THETA                                      FILTFL1A.188    
                                                                           FILTFL1A.189    
      DO K=1,P_LEVELS                                                      FILTFL1A.190    
        DO I=START_POINT_NO_HALO,END_P_POINT_NO_HALO                       ADR1F403.93     
          RS_SQUARED_DELTAP(I,K) = RS_SQUARED_DELTAP(I,K)*                 FILTFL1A.192    
     &                             RS_SQUARED_DELTAP(I,K)*                 FILTFL1A.193    
     &                             (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))      FILTFL1A.194    
     &                             *COS_P_LATITUDE(I)                      FILTFL1A.195    
        END DO                                                             FILTFL1A.196    
C SET POLAR VALUES.                                                        FILTFL1A.197    
C THE CORRECT COSINE VALUE IS DELTA_PHI/8                                  FILTFL1A.198    
*IF DEF,MPP                                                                ADR1F403.94     
        IF (at_top_of_LPG) THEN                                            ADR1F403.95     
*ENDIF                                                                     ADR1F403.96     
          DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                    ADR1F403.97     
            RS_SQUARED_DELTAP(I,K)=RS_SQUARED_DELTAP(I,K)*                 ADR1F403.98     
     &        RS_SQUARED_DELTAP(I,K)*                                      ADR1F403.99     
     &        (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))*                          ADR1F403.100    
     &        POLAR_COSINE                                                 ADR1F403.101    
          ENDDO                                                            ADR1F403.102    
*IF DEF,MPP                                                                ADR1F403.103    
        ENDIF                                                              ADR1F403.104    
                                                                           ADR1F403.105    
        IF (at_base_of_LPG) THEN                                           ADR1F403.106    
*ENDIF                                                                     ADR1F403.107    
          DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                ADR1F403.108    
             RS_SQUARED_DELTAP(I,K)=RS_SQUARED_DELTAP(I,K)*                ADR1F403.109    
     &                             RS_SQUARED_DELTAP(I,K)*                 ADR1F403.110    
     &                             (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))*     ADR1F403.111    
     &                             POLAR_COSINE                            ADR1F403.112    
!         DONE                                                             ADR1F403.113    
          ENDDO                                                            ADR1F403.114    
*IF DEF,MPP                                                                ADR1F403.115    
        ENDIF                                                              ADR1F403.116    
*ENDIF                                                                     ADR1F403.117    
        DO J=1,tot_P_ROWS                                                  ADR1F403.118    
          MEAN_MW_THETA(J,K)=0.0                                           ADR1F403.119    
          MEAN_MW_THETA_NEW(J,K)=0.0                                       ADR1F403.120    
          MEAN_MASS(J,K)=0.0                                               ADR1F403.121    
        ENDDO                                                              ADR1F403.122    
                                                                           ADR1F403.123    
        DO J=NORTH_FIRST_ROW,NORTH_LAST_ROW                                ADR1F403.124    
!       loop over rows to be filtered                                      ADR1F403.125    
                                                                           ADR1F403.126    
          DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                              ADR1F403.127    
     &         (J-1)*ROW_LENGTH+LAST_ROW_PT                                ADR1F403.128    
            MEAN_MW_THETA(J,K) = MEAN_MW_THETA(J,K) + THETA(I,K)*          FILTFL1A.213    
     &                           RS_SQUARED_DELTAP(I,K)                    FILTFL1A.214    
          END DO                                                           FILTFL1A.215    
        END DO                                                             FILTFL1A.216    
        DO J=SOUTH_FIRST_ROW,SOUTH_LAST_ROW                                ADR1F403.129    
!       loop over rows to be filtered                                      ADR1F403.130    
                                                                           ADR1F403.131    
          DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                              ADR1F403.132    
     &         (J-1)*ROW_LENGTH+LAST_ROW_PT                                ADR1F403.133    
            MEAN_MW_THETA(J,K) = MEAN_MW_THETA(J,K) + THETA(I,K)*          FILTFL1A.220    
     &                           RS_SQUARED_DELTAP(I,K)                    FILTFL1A.221    
          END DO                                                           FILTFL1A.222    
        END DO                                                             FILTFL1A.223    
      END DO                                                               FILTFL1A.224    
                                                                           ADR1F403.134    
*IF DEF,MPP                                                                ADR1F403.135    
! So far MEAN_MW_THETA contains only the sum along my local part           ADR1F403.136    
! of the row. We must now do a sum, so that it contains the full           ADR1F403.137    
! sum for the entire global row                                            ADR1F403.138    
! NB : Since the partial sums on each processor will be different          ADR1F403.139    
! depending on the number of processors in the EW direction, the           ADR1F403.140    
! total sum will also be non-reproducible if the number of EW              ADR1F403.141    
! processors change.                                                       ADR1F403.142    
                                                                           ADR1F403.143    
      CALL GCG_RSUM(tot_P_ROWS*P_LEVELS,GC_ROW_GROUP,info,                 ADR1F403.144    
     &              MEAN_MW_THETA)                                         ADR1F403.145    
                                                                           ADR1F403.146    
*ENDIF                                                                     ADR1F403.147    
                                                                           ADR1F403.148    
                                                                           FILTFL1A.225    
CL                                                                         FILTFL1A.226    
CL---------------------------------------------------------------------    FILTFL1A.227    
CL    SECTION 3.    FILTER THETA FIELD.                                    FILTFL1A.228    
CL---------------------------------------------------------------------    FILTFL1A.229    
                                                                           FILTFL1A.230    
CL    CALL FILTER FOR THETA                                                FILTFL1A.231    
                                                                           FILTFL1A.232    
        CALL FILTER(THETA,P_FIELD,P_LEVELS,FILTER_SPACE_P,ROW_LENGTH,      FILTFL1A.233    
*CALL ARGFLDPT                                                             APB0F402.80     
     *              FILTER_WAVE_NUMBER_P_ROWS,TRIGS,IFAX,                  FILTFL1A.234    
     *              NORTHERN_FILTERED_P_ROW,SOUTHERN_FILTERED_P_ROW)       FILTFL1A.235    
                                                                           FILTFL1A.236    
CL                                                                         FILTFL1A.237    
CL---------------------------------------------------------------------    FILTFL1A.238    
CL    SECTION 4.    CALCULATE MASS-WEIGHTED THETA AFTER FILTERING.         FILTFL1A.239    
CL                  CALCULATE CHANGE DUE TO FILTERING AND ADD AN           FILTFL1A.240    
CL                  INCREMENT TO EACH POINT TO RETAIN CONSERVATION.        FILTFL1A.241    
CL---------------------------------------------------------------------    FILTFL1A.242    
                                                                           FILTFL1A.243    
CL CALCULATE ZONAL MEAN MASS-WEIGHTED THETA                                FILTFL1A.244    
CL CALCULATE INCREMENT NEEDED TO EACH THETA VALUE TO ENSURE                FILTFL1A.245    
CL CONSERVATION.                                                           FILTFL1A.246    
                                                                           FILTFL1A.247    
      DO K=1,P_LEVELS                                                      ADR1F403.149    
        DO J=NORTH_FIRST_ROW,NORTH_LAST_ROW                                ADR1F403.150    
          DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                              ADR1F403.151    
     &         (J-1)*ROW_LENGTH+LAST_ROW_PT                                ADR1F403.152    
            MEAN_MW_THETA_NEW(J,K) = MEAN_MW_THETA_NEW(J,K) +              ADR1F403.153    
     &                               THETA(I,K)*RS_SQUARED_DELTAP(I,K)     ADR1F403.154    
            MEAN_MASS(J,K)=MEAN_MASS(J,K) + RS_SQUARED_DELTAP(I,K)         ADR1F403.155    
          ENDDO                                                            ADR1F403.156    
        ENDDO                                                              ADR1F403.157    
                                                                           ADR1F403.158    
        DO J=SOUTH_FIRST_ROW,SOUTH_LAST_ROW                                ADR1F403.159    
          DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                              ADR1F403.160    
     &         (J-1)*ROW_LENGTH+LAST_ROW_PT                                ADR1F403.161    
            MEAN_MW_THETA_NEW(J,K) = MEAN_MW_THETA_NEW(J,K) +              ADR1F403.162    
     &                               THETA(I,K)*RS_SQUARED_DELTAP(I,K)     ADR1F403.163    
            MEAN_MASS(J,K)=MEAN_MASS(J,K) + RS_SQUARED_DELTAP(I,K)         ADR1F403.164    
          ENDDO                                                            ADR1F403.165    
        ENDDO                                                              ADR1F403.166    
      ENDDO                                                                ADR1F403.167    
                                                                           ADR1F403.168    
*IF DEF,MPP                                                                ADR1F403.169    
! Do sum along rows for MEAN_MW_THETA_NEW and MEAN_MASS as before          ADR1F403.170    
                                                                           ADR1F403.171    
      CALL GCG_RSUM(tot_P_ROWS*P_LEVELS,GC_ROW_GROUP,info,                 ADR1F403.172    
     &              MEAN_MW_THETA_NEW)                                     ADR1F403.173    
      CALL GCG_RSUM(tot_P_ROWS*P_LEVELS,GC_ROW_GROUP,info,                 ADR1F403.174    
     &              MEAN_MASS)                                             ADR1F403.175    
*ENDIF                                                                     ADR1F403.176    
                                                                           ADR1F403.177    
      DO K=1,P_LEVELS                                                      ADR1F403.178    
        DO J=NORTH_FIRST_ROW,NORTH_LAST_ROW                                ADR1F403.179    
          INCREMENT=(MEAN_MW_THETA_NEW(J,K)-MEAN_MW_THETA(J,K))/           ADR1F403.180    
     &              MEAN_MASS(J,K)                                         ADR1F403.181    
          DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                              ADR1F403.182    
     &         (J-1)*ROW_LENGTH+LAST_ROW_PT                                ADR1F403.183    
            THETA(I,K) = THETA(I,K) - INCREMENT                            ADR1F403.184    
          ENDDO                                                            ADR1F403.185    
        ENDDO                                                              ADR1F403.186    
                                                                           ADR1F403.187    
        DO J=SOUTH_FIRST_ROW,SOUTH_LAST_ROW                                ADR1F403.188    
          INCREMENT=(MEAN_MW_THETA_NEW(J,K)-MEAN_MW_THETA(J,K))/           ADR1F403.189    
     &              MEAN_MASS(J,K)                                         ADR1F403.190    
          DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                              ADR1F403.191    
     &         (J-1)*ROW_LENGTH+LAST_ROW_PT                                ADR1F403.192    
            THETA(I,K) = THETA(I,K) - INCREMENT                            ADR1F403.193    
          ENDDO                                                            ADR1F403.194    
        ENDDO                                                              ADR1F403.195    
                                                                           ADR1F403.196    
      ENDDO                                                                ADR1F403.197    
                                                                           ADR1F403.198    
                                                                           FILTFL1A.276    
CL                                                                         FILTFL1A.277    
CL---------------------------------------------------------------------    FILTFL1A.278    
CL    SECTION 5.    SET THETA,Q,QCL,QCF AND PSTAR AT POLES TO MEAN OF      FILTFL1A.279    
CL                  SURROUNDING ROW IN A CONSERVATIVE WAY.                 FILTFL1A.280    
CL---------------------------------------------------------------------    FILTFL1A.281    
                                                                           FILTFL1A.282    
C ---------------------------------------------------------------------    FILTFL1A.283    
CL    SECTION 5.1   CALCULATE MEAN MASS-WEIGHTED VALUES OF FIELDS          FILTFL1A.284    
CL                  AROUND POLES.                                          FILTFL1A.285    
C ---------------------------------------------------------------------    FILTFL1A.286    
                                                                           FILTFL1A.287    
C CALCULATE MEAN MASS-WEIGHTED VALUES OF ALL FIELDS AROUND POLAR CAPS      FILTFL1A.288    
C REMOVE DELTA P FROM RS_SQUARED FIELD.                                    FILTFL1A.289    
! and calculate mean of pstar in row adjacent to pole                      ADR1F403.199    
      DO K=1,P_LEVELS                                                      ADR1F403.200    
        MEAN_MW_NP_THETA(K) = 0.0                                          ADR1F403.201    
        MEAN_MW_SP_THETA(K) = 0.0                                          ADR1F403.202    
        IF (K .LE. Q_LEVELS) THEN                                          ADR1F403.203    
          MEAN_MW_NP_Q(K) = 0.0                                            ADR1F403.204    
          MEAN_MW_SP_Q(K) = 0.0                                            ADR1F403.205    
          MEAN_MW_NP_QCL(K) = 0.0                                          ADR1F403.206    
          MEAN_MW_SP_QCL(K) = 0.0                                          ADR1F403.207    
          MEAN_MW_NP_QCF(K) = 0.0                                          ADR1F403.208    
          MEAN_MW_SP_QCF(K) = 0.0                                          ADR1F403.209    
        ENDIF                                                              ADR1F403.210    
                                                                           ADR1F403.211    
*IF DEF,MPP                                                                ADR1F403.212    
        IF (at_top_of_LPG) THEN                                            ADR1F403.213    
*ENDIF                                                                     ADR1F403.214    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.215    
            DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row              ADR1F403.216    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.217    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.218    
                MEAN_MW_NP_Q(K) = MEAN_MW_NP_Q(K) + Q(I,K)*                ADR1F403.219    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.220    
                MEAN_MW_NP_QCL(K) = MEAN_MW_NP_QCL(K) + QCL(I,K)*          ADR1F403.221    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.222    
                MEAN_MW_NP_QCF(K) = MEAN_MW_NP_QCF(K) + QCF(I,K)*          ADR1F403.223    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.224    
              ENDDO                                                        ADR1F403.225    
            ENDDO                                                          ADR1F403.226    
          ENDIF                                                            ADR1F403.227    
          DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row                ADR1F403.228    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.229    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.230    
              MEAN_MW_NP_THETA(K) = MEAN_MW_NP_THETA(K) + THETA(I,K)*      ADR1F403.231    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.232    
              RS_SQUARED_DELTAP(I,K) = RS_SQUARED_DELTAP(I,K)/             ADR1F403.233    
     &                             (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))      ADR1F403.234    
            ENDDO                                                          ADR1F403.235    
          ENDDO                                                            ADR1F403.236    
          IF (K .EQ. 1) THEN                                               ADR1F403.237    
            MEAN_RADIUS_NP = 0.0                                           ADR1F403.238    
            DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row              ADR1F403.239    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.240    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.241    
                MEAN_RADIUS_NP = MEAN_RADIUS_NP+RS_SQUARED_DELTAP(I,1)     ADR1F403.242    
              ENDDO                                                        ADR1F403.243    
            ENDDO                                                          ADR1F403.244    
            NP_PSTAR=0.0                                                   ADR1F403.245    
            DO I=TOP_ROW_START+FIRST_ROW_PT-1,                             ADR1F403.246    
     &           TOP_ROW_START+LAST_ROW_PT-1                               ADR1F403.247    
              NP_PSTAR=NP_PSTAR+PSTAR(I+ROW_LENGTH)                        ADR1F403.248    
            ENDDO                                                          ADR1F403.249    
          ENDIF                                                            ADR1F403.250    
                                                                           ADR1F403.251    
                                                                           ADR1F403.252    
                                                                           ADR1F403.253    
*IF DEF,MPP                                                                ADR1F403.254    
        ENDIF                                                              ADR1F403.255    
                                                                           ADR1F403.256    
        IF (at_base_of_LPG) THEN                                           ADR1F403.257    
*ENDIF                                                                     ADR1F403.258    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.259    
            DO J=P_LAST_ROW,P_LAST_ROW+1  ! SP and adjacent row            ADR1F403.260    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.261    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.262    
                MEAN_MW_SP_Q(K) = MEAN_MW_SP_Q(K) + Q(I,K)*                ADR1F403.263    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.264    
                MEAN_MW_SP_QCL(K) = MEAN_MW_SP_QCL(K) + QCL(I,K)*          ADR1F403.265    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.266    
                MEAN_MW_SP_QCF(K) = MEAN_MW_SP_QCF(K) + QCF(I,K)*          ADR1F403.267    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.268    
              ENDDO                                                        ADR1F403.269    
            ENDDO                                                          ADR1F403.270    
          ENDIF                                                            ADR1F403.271    
          DO J=P_LAST_ROW,P_LAST_ROW+1  ! SP and adjacent row              ADR1F403.272    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.273    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.274    
              MEAN_MW_SP_THETA(K) = MEAN_MW_SP_THETA(K) + THETA(I,K)*      ADR1F403.275    
     &                              RS_SQUARED_DELTAP(I,K)                 ADR1F403.276    
              RS_SQUARED_DELTAP(I,K) = RS_SQUARED_DELTAP(I,K)/             ADR1F403.277    
     &                              (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))     ADR1F403.278    
            ENDDO                                                          ADR1F403.279    
          ENDDO                                                            ADR1F403.280    
          IF (K .EQ. 1) THEN                                               ADR1F403.281    
            MEAN_RADIUS_SP = 0.0                                           ADR1F403.282    
            DO J=P_LAST_ROW,P_LAST_ROW+1  ! NP and adjacent row            ADR1F403.283    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.284    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.285    
                MEAN_RADIUS_SP = MEAN_RADIUS_SP+RS_SQUARED_DELTAP(I,1)     ADR1F403.286    
              ENDDO                                                        ADR1F403.287    
            ENDDO                                                          ADR1F403.288    
            SP_PSTAR=0.0                                                   ADR1F403.289    
            DO I=P_BOT_ROW_START+FIRST_ROW_PT-1,                           ADR1F403.290    
     &           P_BOT_ROW_START+LAST_ROW_PT-1                             ADR1F403.291    
              SP_PSTAR=SP_PSTAR+PSTAR(I-ROW_LENGTH)                        ADR1F403.292    
            ENDDO                                                          ADR1F403.293    
          ENDIF                                                            ADR1F403.294    
                                                                           ADR1F403.295    
*IF DEF,MPP                                                                ADR1F403.296    
        ENDIF                                                              ADR1F403.297    
*ENDIF                                                                     ADR1F403.298    
      ENDDO ! K : loop over levels                                         ADR1F403.299    
                                                                           ADR1F403.300    
*IF DEF,MPP                                                                ADR1F403.301    
! Need to sum the partial sums for the polar rows                          ADR1F403.302    
! Once again, these sums will give different answers if the number of      ADR1F403.303    
! processors in the EW direction changes                                   ADR1F403.304    
                                                                           ADR1F403.305    
      IF (at_top_of_LPG) THEN                                              ADR1F403.306    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_Q)             ADR1F403.307    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_QCL)           ADR1F403.308    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_QCF)           ADR1F403.309    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_THETA)         ADR1F403.310    
        CALL GCG_RSUM(1,GC_ROW_GROUP,info,MEAN_RADIUS_NP)                  ADR1F403.311    
        CALL GCG_RSUM(1,GC_ROW_GROUP,info,NP_PSTAR)                        ADR1F403.312    
      ENDIF                                                                ADR1F403.313    
      IF (at_base_of_LPG) THEN                                             ADR1F403.314    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_Q)             ADR1F403.315    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_QCL)           ADR1F403.316    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_QCF)           ADR1F403.317    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_THETA)         ADR1F403.318    
        CALL GCG_RSUM(1,GC_ROW_GROUP,info,MEAN_RADIUS_SP)                  ADR1F403.319    
        CALL GCG_RSUM(1,GC_ROW_GROUP,info,SP_PSTAR)                        ADR1F403.320    
      ENDIF                                                                ADR1F403.321    
                                                                           ADR1F403.322    
*ENDIF                                                                     ADR1F403.323    
                                                                           FILTFL1A.338    
C ---------------------------------------------------------------------    FILTFL1A.339    
CL    SECTION 5.2   CORRECT PSTAR VALUES.                                  FILTFL1A.340    
C ---------------------------------------------------------------------    FILTFL1A.341    
                                                                           FILTFL1A.342    
                                                                           ADR1F403.324    
*IF DEF,MPP                                                                ADR1F403.325    
      IF (at_top_of_LPG) THEN                                              ADR1F403.326    
*ENDIF                                                                     ADR1F403.327    
        NP_PSTAR = NP_PSTAR / GLOBAL_ROW_LENGTH                            ADR1F403.328    
*IF DEF,MPP                                                                ADR1F403.329    
        IF (MY_PROC_ID .EQ. 0) THEN                                        ADR1F403.330    
*ENDIF                                                                     ADR1F403.331    
          INCREMENT=GLOBAL_ROW_LENGTH*                                     ADR1F403.332    
     &      RS_SQUARED_DELTAP(TOP_ROW_START+FIRST_ROW_PT-1,1)*             ADR1F403.333    
     &      (NP_PSTAR-PSTAR(TOP_ROW_START+FIRST_ROW_PT-1))/                ADR1F403.334    
     &      MEAN_RADIUS_NP                                                 ADR1F403.335    
                                                                           ADR1F403.336    
*IF DEF,MPP                                                                ADR1F403.337    
        ENDIF                                                              ADR1F403.338    
                                                                           ADR1F403.339    
! We want all processors in polar row to have same value of                ADR1F403.340    
! INCREMENT as has been calculated by PE 0                                 ADR1F403.341    
        CALL GCG_RBCAST(101,1,0,GC_ROW_GROUP,info,INCREMENT)               ADR1F403.342    
                                                                           ADR1F403.343    
*ENDIF                                                                     ADR1F403.344    
        DO I=TOP_ROW_START+FIRST_ROW_PT-1,                                 ADR1F403.345    
     &       TOP_ROW_START+LAST_ROW_PT-1                                   ADR1F403.346    
          PSTAR(I)=NP_PSTAR - INCREMENT                                    ADR1F403.347    
          PSTAR(I+ROW_LENGTH)=PSTAR(I+ROW_LENGTH) - INCREMENT              ADR1F403.348    
        ENDDO                                                              ADR1F403.349    
*IF DEF,MPP                                                                ADR1F403.350    
                                                                           ADR1F403.351    
      ENDIF                                                                ADR1F403.352    
                                                                           ADR1F403.353    
      IF (at_base_of_LPG) THEN                                             ADR1F403.354    
*ENDIF                                                                     ADR1F403.355    
        SP_PSTAR = SP_PSTAR / GLOBAL_ROW_LENGTH                            ADR1F403.356    
*IF DEF,MPP                                                                ADR1F403.357    
        IF (MY_PROC_ID .EQ. N_PROCS-1) THEN                                ADR1F403.358    
*ENDIF                                                                     ADR1F403.359    
          INCREMENT=GLOBAL_ROW_LENGTH*                                     ADR1F403.360    
     &      RS_SQUARED_DELTAP(P_BOT_ROW_START+LAST_ROW_PT-1,1)*            ADR1F403.361    
     &      (SP_PSTAR-PSTAR(P_BOT_ROW_START+LAST_ROW_PT-1))/               ADR1F403.362    
     &      MEAN_RADIUS_SP                                                 ADR1F403.363    
                                                                           ADR1F403.364    
*IF DEF,MPP                                                                ADR1F403.365    
        ENDIF                                                              ADR1F403.366    
                                                                           ADR1F403.367    
! We want all processors in polar row to have same value of                ADR1F403.368    
! INCREMENT as has been calculated by PE 0                                 ADR1F403.369    
        CALL GCG_RBCAST(101,1,N_PROCS-1,GC_ROW_GROUP,info,INCREMENT)       ADR1F403.370    
                                                                           ADR1F403.371    
*ENDIF                                                                     ADR1F403.372    
        DO I=P_BOT_ROW_START+FIRST_ROW_PT-1,                               ADR1F403.373    
     &       P_BOT_ROW_START+LAST_ROW_PT-1                                 ADR1F403.374    
          PSTAR(I)=SP_PSTAR - INCREMENT                                    ADR1F403.375    
          PSTAR(I-ROW_LENGTH)=PSTAR(I-ROW_LENGTH) - INCREMENT              ADR1F403.376    
        ENDDO                                                              ADR1F403.377    
*IF DEF,MPP                                                                ADR1F403.378    
                                                                           ADR1F403.379    
      ENDIF                                                                ADR1F403.380    
*ENDIF                                                                     ADR1F403.381    
                                                                           ADR1F403.382    
                                                                           FILTFL1A.373    
C ---------------------------------------------------------------------    FILTFL1A.374    
CL    SECTION 5.3   CORRECT VALUES OF OTHER FIELDS.                        FILTFL1A.375    
C ---------------------------------------------------------------------    FILTFL1A.376    
                                                                           FILTFL1A.377    
                                                                           ADR1F403.383    
      DO K=1,P_LEVELS                                                      ADR1F403.384    
                                                                           ADR1F403.385    
*IF DEF,MPP                                                                ADR1F403.386    
        IF (at_top_of_LPG) THEN                                            ADR1F403.387    
*ENDIF                                                                     ADR1F403.388    
          DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row                ADR1F403.389    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.390    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.391    
              RS_SQUARED_DELTAP(I,K) = RS_SQUARED_DELTAP(I,K)*             ADR1F403.392    
     &                             (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))      ADR1F403.393    
            ENDDO                                                          ADR1F403.394    
          ENDDO                                                            ADR1F403.395    
                                                                           ADR1F403.396    
          NP_THETA(K)=0.0                                                  ADR1F403.397    
                                                                           ADR1F403.398    
          DO I=TOP_ROW_START+FIRST_ROW_PT-1,                               ADR1F403.399    
     &         TOP_ROW_START+LAST_ROW_PT-1                                 ADR1F403.400    
            NP_THETA(K)=NP_THETA(K) + THETA(I+ROW_LENGTH,K)                ADR1F403.401    
          ENDDO                                                            ADR1F403.402    
                                                                           ADR1F403.403    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.404    
                                                                           ADR1F403.405    
            NP_Q(K)=0.0                                                    ADR1F403.406    
            NP_QCL(K)=0.0                                                  ADR1F403.407    
            NP_QCF(K)=0.0                                                  ADR1F403.408    
                                                                           ADR1F403.409    
            DO I=TOP_ROW_START+FIRST_ROW_PT-1,                             ADR1F403.410    
     &           TOP_ROW_START+LAST_ROW_PT-1                               ADR1F403.411    
              NP_Q(K)=NP_Q(K)+Q(I+ROW_LENGTH,K)                            ADR1F403.412    
              NP_QCL(K)=NP_QCL(K)+QCL(I+ROW_LENGTH,K)                      ADR1F403.413    
              NP_QCF(K)=NP_QCF(K)+QCF(I+ROW_LENGTH,K)                      ADR1F403.414    
            ENDDO                                                          ADR1F403.415    
          ENDIF                                                            ADR1F403.416    
*IF DEF,MPP                                                                ADR1F403.417    
        ENDIF                                                              ADR1F403.418    
                                                                           ADR1F403.419    
        IF (at_base_of_LPG) THEN                                           ADR1F403.420    
*ENDIF                                                                     ADR1F403.421    
          DO J=P_LAST_ROW,P_LAST_ROW+1  ! SP and adjacent row              ADR1F403.422    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.423    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.424    
              RS_SQUARED_DELTAP(I,K) = RS_SQUARED_DELTAP(I,K)*             ADR1F403.425    
     &                             (DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))      ADR1F403.426    
            ENDDO                                                          ADR1F403.427    
          ENDDO                                                            ADR1F403.428    
                                                                           ADR1F403.429    
          SP_THETA(K)=0.0                                                  ADR1F403.430    
                                                                           ADR1F403.431    
          DO I=P_BOT_ROW_START+FIRST_ROW_PT-1,                             ADR1F403.432    
     &         P_BOT_ROW_START+LAST_ROW_PT-1                               ADR1F403.433    
            SP_THETA(K)=SP_THETA(K) + THETA(I-ROW_LENGTH,K)                ADR1F403.434    
          ENDDO                                                            ADR1F403.435    
                                                                           ADR1F403.436    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.437    
                                                                           ADR1F403.438    
            SP_Q(K)=0.0                                                    ADR1F403.439    
            SP_QCL(K)=0.0                                                  ADR1F403.440    
            SP_QCF(K)=0.0                                                  ADR1F403.441    
                                                                           ADR1F403.442    
            DO I=P_BOT_ROW_START+FIRST_ROW_PT-1,                           ADR1F403.443    
     &           P_BOT_ROW_START+LAST_ROW_PT-1                             ADR1F403.444    
              SP_Q(K)=SP_Q(K)+Q(I-ROW_LENGTH,K)                            ADR1F403.445    
              SP_QCL(K)=SP_QCL(K)+QCL(I-ROW_LENGTH,K)                      ADR1F403.446    
              SP_QCF(K)=SP_QCF(K)+QCF(I-ROW_LENGTH,K)                      ADR1F403.447    
            ENDDO                                                          ADR1F403.448    
          ENDIF                                                            ADR1F403.449    
*IF DEF,MPP                                                                ADR1F403.450    
        ENDIF                                                              ADR1F403.451    
*ENDIF                                                                     ADR1F403.452    
      ENDDO                                                                ADR1F403.453    
*IF DEF,MPP                                                                ADR1F403.454    
                                                                           ADR1F403.455    
! Need to sum the partial sums for the polar rows                          ADR1F403.456    
! Once again, these sums will give different answers if the number of      ADR1F403.457    
! processors in the EW direction changes                                   ADR1F403.458    
      IF (at_top_of_LPG) THEN                                              ADR1F403.459    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,NP_THETA)                 ADR1F403.460    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,NP_Q)                     ADR1F403.461    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,NP_QCL)                   ADR1F403.462    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,NP_QCF)                   ADR1F403.463    
      ENDIF                                                                ADR1F403.464    
      IF (at_base_of_LPG) THEN                                             ADR1F403.465    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,SP_THETA)                 ADR1F403.466    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,SP_Q)                     ADR1F403.467    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,SP_QCL)                   ADR1F403.468    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,SP_QCF)                   ADR1F403.469    
      ENDIF                                                                ADR1F403.470    
*ENDIF                                                                     ADR1F403.471    
                                                                           ADR1F403.472    
      DO K=1,P_LEVELS                                                      ADR1F403.473    
                                                                           ADR1F403.474    
*IF DEF,MPP                                                                ADR1F403.475    
        IF (at_top_of_LPG) THEN                                            ADR1F403.476    
*ENDIF                                                                     ADR1F403.477    
          NP_THETA(K)=NP_THETA(K)/GLOBAL_ROW_LENGTH                        ADR1F403.478    
                                                                           ADR1F403.479    
          DO I=TOP_ROW_START+FIRST_ROW_PT-1,                               ADR1F403.480    
     &         TOP_ROW_START+LAST_ROW_PT-1                                 ADR1F403.481    
            THETA(I,K)=NP_THETA(K)                                         ADR1F403.482    
          ENDDO                                                            ADR1F403.483    
                                                                           ADR1F403.484    
          MEAN_MW_NP_THETA_NEW(K)=0.0                                      ADR1F403.485    
          MEAN_MASS_NP(K)=0.0                                              ADR1F403.486    
          DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row                ADR1F403.487    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.488    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.489    
              MEAN_MW_NP_THETA_NEW(K)=MEAN_MW_NP_THETA_NEW(K)+             ADR1F403.490    
     &                                THETA(I,K)*                          ADR1F403.491    
     &                                RS_SQUARED_DELTAP(I,K)               ADR1F403.492    
              MEAN_MASS_NP(K)=MEAN_MASS_NP(K)+RS_SQUARED_DELTAP(I,K)       ADR1F403.493    
            ENDDO                                                          ADR1F403.494    
          ENDDO                                                            ADR1F403.495    
                                                                           ADR1F403.496    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.497    
                                                                           ADR1F403.498    
            NP_Q(K)=NP_Q(K)/GLOBAL_ROW_LENGTH                              ADR1F403.499    
            NP_QCL(K)=NP_QCL(K)/GLOBAL_ROW_LENGTH                          ADR1F403.500    
            NP_QCF(K)=NP_QCF(K)/GLOBAL_ROW_LENGTH                          ADR1F403.501    
                                                                           ADR1F403.502    
            DO I=TOP_ROW_START+FIRST_ROW_PT-1,                             ADR1F403.503    
     &           TOP_ROW_START+LAST_ROW_PT-1                               ADR1F403.504    
              Q(I,K)=NP_Q(K)                                               ADR1F403.505    
              QCL(I,K)=NP_QCL(K)                                           ADR1F403.506    
              QCF(I,K)=NP_QCF(K)                                           ADR1F403.507    
            ENDDO                                                          ADR1F403.508    
                                                                           ADR1F403.509    
            MEAN_MW_NP_Q_NEW(K)=0.0                                        ADR1F403.510    
            MEAN_MW_NP_QCL_NEW(K)=0.0                                      ADR1F403.511    
            MEAN_MW_NP_QCF_NEW(K)=0.0                                      ADR1F403.512    
            DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row              ADR1F403.513    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.514    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.515    
                MEAN_MW_NP_Q_NEW(K)=MEAN_MW_NP_Q_NEW(K)+                   ADR1F403.516    
     &                                  Q(I,K)*RS_SQUARED_DELTAP(I,K)      ADR1F403.517    
                MEAN_MW_NP_QCL_NEW(K)=MEAN_MW_NP_QCL_NEW(K)+               ADR1F403.518    
     &                                  QCL(I,K)*RS_SQUARED_DELTAP(I,K)    ADR1F403.519    
                MEAN_MW_NP_QCF_NEW(K)=MEAN_MW_NP_QCF_NEW(K)+               ADR1F403.520    
     &                                  QCF(I,K)*RS_SQUARED_DELTAP(I,K)    ADR1F403.521    
              ENDDO                                                        ADR1F403.522    
            ENDDO                                                          ADR1F403.523    
          ENDIF  ! is this a wet level                                     ADR1F403.524    
*IF DEF,MPP                                                                ADR1F403.525    
        ENDIF  ! at_top_of_LPG                                             ADR1F403.526    
                                                                           ADR1F403.527    
        IF (at_base_of_LPG) THEN                                           ADR1F403.528    
*ENDIF                                                                     ADR1F403.529    
          SP_THETA(K)=SP_THETA(K)/GLOBAL_ROW_LENGTH                        ADR1F403.530    
                                                                           ADR1F403.531    
          DO I=P_BOT_ROW_START+FIRST_ROW_PT-1,                             ADR1F403.532    
     &         P_BOT_ROW_START+LAST_ROW_PT-1                               ADR1F403.533    
            THETA(I,K)=SP_THETA(K)                                         ADR1F403.534    
          ENDDO                                                            ADR1F403.535    
                                                                           ADR1F403.536    
          MEAN_MW_SP_THETA_NEW(K)=0.0                                      ADR1F403.537    
          MEAN_MASS_SP(K)=0.0                                              ADR1F403.538    
          DO J=P_LAST_ROW,P_LAST_ROW+1  ! SP and adjacent row              ADR1F403.539    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.540    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.541    
              MEAN_MW_SP_THETA_NEW(K)=MEAN_MW_SP_THETA_NEW(K)+             ADR1F403.542    
     &                                THETA(I,K)*                          ADR1F403.543    
     &                                RS_SQUARED_DELTAP(I,K)               ADR1F403.544    
              MEAN_MASS_SP(K)=MEAN_MASS_SP(K)+RS_SQUARED_DELTAP(I,K)       ADR1F403.545    
            ENDDO                                                          ADR1F403.546    
          ENDDO                                                            ADR1F403.547    
                                                                           ADR1F403.548    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.549    
                                                                           ADR1F403.550    
            SP_Q(K)=SP_Q(K)/GLOBAL_ROW_LENGTH                              ADR1F403.551    
            SP_QCL(K)=SP_QCL(K)/GLOBAL_ROW_LENGTH                          ADR1F403.552    
            SP_QCF(K)=SP_QCF(K)/GLOBAL_ROW_LENGTH                          ADR1F403.553    
                                                                           ADR1F403.554    
            DO I=P_BOT_ROW_START+FIRST_ROW_PT-1,                           ADR1F403.555    
     &         P_BOT_ROW_START+LAST_ROW_PT-1                               ADR1F403.556    
              Q(I,K)=SP_Q(K)                                               ADR1F403.557    
              QCL(I,K)=SP_QCL(K)                                           ADR1F403.558    
              QCF(I,K)=SP_QCF(K)                                           ADR1F403.559    
            ENDDO                                                          ADR1F403.560    
                                                                           ADR1F403.561    
            MEAN_MW_SP_Q_NEW(K)=0.0                                        ADR1F403.562    
            MEAN_MW_SP_QCL_NEW(K)=0.0                                      ADR1F403.563    
            MEAN_MW_SP_QCF_NEW(K)=0.0                                      ADR1F403.564    
            DO J=P_LAST_ROW,P_LAST_ROW+1  ! SP and adjacent row            ADR1F403.565    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.566    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.567    
                MEAN_MW_SP_Q_NEW(K)=MEAN_MW_SP_Q_NEW(K)+                   ADR1F403.568    
     &                                  Q(I,K)*RS_SQUARED_DELTAP(I,K)      ADR1F403.569    
                MEAN_MW_SP_QCL_NEW(K)=MEAN_MW_SP_QCL_NEW(K)+               ADR1F403.570    
     &                                  QCL(I,K)*RS_SQUARED_DELTAP(I,K)    ADR1F403.571    
                MEAN_MW_SP_QCF_NEW(K)=MEAN_MW_SP_QCF_NEW(K)+               ADR1F403.572    
     &                                  QCF(I,K)*RS_SQUARED_DELTAP(I,K)    ADR1F403.573    
              ENDDO                                                        ADR1F403.574    
            ENDDO                                                          ADR1F403.575    
          ENDIF  ! is this a wet level                                     ADR1F403.576    
*IF DEF,MPP                                                                ADR1F403.577    
        ENDIF  ! at_base_of_LPG                                            ADR1F403.578    
*ENDIF                                                                     ADR1F403.579    
      ENDDO ! K: loop over levels                                          ADR1F403.580    
*IF DEF,MPP                                                                ADR1F403.581    
                                                                           ADR1F403.582    
! Need to sum the partial sums for the polar rows                          ADR1F403.583    
! Once again, these sums will give different answers if the number of      ADR1F403.584    
! processors in the EW direction changes                                   ADR1F403.585    
      IF (at_top_of_LPG) THEN                                              ADR1F403.586    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_THETA_NEW)     ADR1F403.587    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,MEAN_MASS_NP)             ADR1F403.588    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_Q_NEW)         ADR1F403.589    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_QCL_NEW)       ADR1F403.590    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_NP_QCF_NEW)       ADR1F403.591    
      ENDIF                                                                ADR1F403.592    
      IF (at_base_of_LPG) THEN                                             ADR1F403.593    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_THETA_NEW)     ADR1F403.594    
        CALL GCG_RSUM(P_LEVELS,GC_ROW_GROUP,info,MEAN_MASS_SP)             ADR1F403.595    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_Q_NEW)         ADR1F403.596    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_QCL_NEW)       ADR1F403.597    
        CALL GCG_RSUM(Q_LEVELS,GC_ROW_GROUP,info,MEAN_MW_SP_QCF_NEW)       ADR1F403.598    
      ENDIF                                                                ADR1F403.599    
*ENDIF                                                                     ADR1F403.600    
                                                                           ADR1F403.601    
      DO K=1,P_LEVELS                                                      ADR1F403.602    
                                                                           ADR1F403.603    
*IF DEF,MPP                                                                ADR1F403.604    
        IF (at_top_of_LPG) THEN                                            ADR1F403.605    
*ENDIF                                                                     ADR1F403.606    
          MEAN_MW_NP_THETA_NEW(K) = (MEAN_MW_NP_THETA_NEW(K) -             ADR1F403.607    
     &      MEAN_MW_NP_THETA(K)) /MEAN_MASS_NP(K)                          ADR1F403.608    
                                                                           ADR1F403.609    
          DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row                ADR1F403.610    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.611    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.612    
              THETA(I,K) = THETA(I,K) - MEAN_MW_NP_THETA_NEW(K)            ADR1F403.613    
            ENDDO                                                          ADR1F403.614    
          ENDDO                                                            ADR1F403.615    
                                                                           ADR1F403.616    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.617    
            MEAN_MW_NP_Q_NEW(K) = (MEAN_MW_NP_Q_NEW(K) -                   ADR1F403.618    
     &        MEAN_MW_NP_Q(K)) /MEAN_MASS_NP(K)                            ADR1F403.619    
            MEAN_MW_NP_QCL_NEW(K) = (MEAN_MW_NP_QCL_NEW(K) -               ADR1F403.620    
     &        MEAN_MW_NP_QCL(K)) /MEAN_MASS_NP(K)                          ADR1F403.621    
            MEAN_MW_NP_QCF_NEW(K) = (MEAN_MW_NP_QCF_NEW(K) -               ADR1F403.622    
     &        MEAN_MW_NP_QCF(K)) /MEAN_MASS_NP(K)                          ADR1F403.623    
                                                                           ADR1F403.624    
            DO J=FIRST_ROW-1,FIRST_ROW  ! NP and adjacent row              ADR1F403.625    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.626    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.627    
                Q(I,K) = Q(I,K) - MEAN_MW_NP_Q_NEW(K)                      ADR1F403.628    
                QCL(I,K) = QCL(I,K) - MEAN_MW_NP_QCL_NEW(K)                ADR1F403.629    
                QCF(I,K) = QCF(I,K) - MEAN_MW_NP_QCF_NEW(K)                ADR1F403.630    
              ENDDO                                                        ADR1F403.631    
            ENDDO                                                          ADR1F403.632    
          ENDIF                                                            ADR1F403.633    
*IF DEF,MPP                                                                ADR1F403.634    
        ENDIF                                                              ADR1F403.635    
                                                                           ADR1F403.636    
        IF (at_base_of_LPG) THEN                                           ADR1F403.637    
*ENDIF                                                                     ADR1F403.638    
          MEAN_MW_SP_THETA_NEW(K) = (MEAN_MW_SP_THETA_NEW(K) -             ADR1F403.639    
     &      MEAN_MW_SP_THETA(K)) /MEAN_MASS_SP(K)                          ADR1F403.640    
          DO J=P_LAST_ROW,P_LAST_ROW+1  ! SP and adjacent row              ADR1F403.641    
            DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                            ADR1F403.642    
     &           (J-1)*ROW_LENGTH+LAST_ROW_PT                              ADR1F403.643    
              THETA(I,K) = THETA(I,K) - MEAN_MW_SP_THETA_NEW(K)            ADR1F403.644    
            ENDDO                                                          ADR1F403.645    
          ENDDO                                                            ADR1F403.646    
                                                                           ADR1F403.647    
          IF (K .LE. Q_LEVELS) THEN                                        ADR1F403.648    
            MEAN_MW_SP_Q_NEW(K) = (MEAN_MW_SP_Q_NEW(K) -                   ADR1F403.649    
     &        MEAN_MW_SP_Q(K)) /MEAN_MASS_SP(K)                            ADR1F403.650    
            MEAN_MW_SP_QCL_NEW(K) = (MEAN_MW_SP_QCL_NEW(K) -               ADR1F403.651    
     &        MEAN_MW_SP_QCL(K)) /MEAN_MASS_SP(K)                          ADR1F403.652    
            MEAN_MW_SP_QCF_NEW(K) = (MEAN_MW_SP_QCF_NEW(K) -               ADR1F403.653    
     &        MEAN_MW_SP_QCF(K)) /MEAN_MASS_SP(K)                          ADR1F403.654    
                                                                           ADR1F403.655    
            DO J=P_LAST_ROW,P_LAST_ROW+1  ! SP and adjacent row            ADR1F403.656    
              DO I=(J-1)*ROW_LENGTH+FIRST_ROW_PT,                          ADR1F403.657    
     &             (J-1)*ROW_LENGTH+LAST_ROW_PT                            ADR1F403.658    
                Q(I,K) = Q(I,K) - MEAN_MW_SP_Q_NEW(K)                      ADR1F403.659    
                QCL(I,K) = QCL(I,K) - MEAN_MW_SP_QCL_NEW(K)                ADR1F403.660    
                QCF(I,K) = QCF(I,K) - MEAN_MW_SP_QCF_NEW(K)                ADR1F403.661    
              ENDDO                                                        ADR1F403.662    
            ENDDO                                                          ADR1F403.663    
          ENDIF  !  is this a wet level                                    ADR1F403.664    
*IF DEF,MPP                                                                ADR1F403.665    
        ENDIF  !  at_base_of_LPG                                           ADR1F403.666    
*ENDIF                                                                     ADR1F403.667    
      ENDDO  !  K : loop over levels                                       ADR1F403.668    
                                                                           FILTFL1A.545    
CL    END OF ROUTINE FILT_FLD                                              FILTFL1A.546    
                                                                           FILTFL1A.547    
      RETURN                                                               FILTFL1A.548    
      END                                                                  FILTFL1A.549    
*ENDIF                                                                     FILTFL1A.550    
*ENDIF                                                                     AJC0F405.266