*IF DEF,C90_1A,OR,DEF,C90_2A,OR,DEF,C90_2B                                 AAD2F404.286    
C ******************************COPYRIGHT******************************    GTS2F400.7309   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.7310   
C                                                                          GTS2F400.7311   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.7312   
C restrictions as set forth in the contract.                               GTS2F400.7313   
C                                                                          GTS2F400.7314   
C                Meteorological Office                                     GTS2F400.7315   
C                London Road                                               GTS2F400.7316   
C                BRACKNELL                                                 GTS2F400.7317   
C                Berkshire UK                                              GTS2F400.7318   
C                RG12 2SZ                                                  GTS2F400.7319   
C                                                                          GTS2F400.7320   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.7321   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.7322   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.7323   
C Modelling at the above address.                                          GTS2F400.7324   
C ******************************COPYRIGHT******************************    GTS2F400.7325   
C                                                                          GTS2F400.7326   
CLL  SUBROUTINE POLAR-------------------------------------------------     POLAR1A.3      
CLL                                                                        POLAR1A.4      
CLL  Purpose:  This routine updates the polar values along one level for   POLAR1A.5      
CLL            a primary model variable stored at p-points (ie pstar,      POLAR1A.6      
CLL            thetaL or qT).  This is done by adding in the               POLAR1A.7      
CLL            average meridional flux from the adjacent                   POLAR1A.8      
CLL            equatorward row.                                            POLAR1A.9      
CLL                                                                        POLAR1A.10     
CLL M.Mawson    <- programmer of some or all of previous code or changes   POLAR1A.11     
CLL                                                                        POLAR1A.12     
CLL  Model            Modification history from model version 3.0:         POLAR1A.13     
CLL version  Date                                                          POLAR1A.14     
!  4.1    28/06/95   Changed interface to allow multiple levels to         APB2F401.97     
!                    be processed in single call + added MPP code.         APB2F401.98     
!                                                     P.Burton             APB2F401.99     
!  4.4    11/08/97   Added fast non-reproducible sums    P.Burton          GPB3F404.1      
!LL  4.5  27/04/98  Add Fujitsu vectorization directive.                   GRB0F405.45     
!LL                                           RBarnes@ecmwf.int            GRB0F405.46     
CLL                                                                        POLAR1A.15     
CLL  Documentation:                                                        POLAR1A.16     
CLL            Section 3.6 of Unified Model Documention Paper No 10.       POLAR1A.17     
CLL  -----------------------------------------------------------------     POLAR1A.18     
C                                                                          POLAR1A.19     
C*L  ARGUMENTS:-------------------------------------------------------     POLAR1A.20     

      SUBROUTINE POLAR(FIELD,NP_FLUX_FIELD,SP_FLUX_FIELD,                   28APB2F401.100    
*CALL ARGFLDPT                                                             APB2F401.101    
     &                 FIELD_SIZE,NP_FLUX_FIELD_SIZE,SP_FLUX_FIELD_SIZE,   APB2F401.102    
     &                 NP_FLUX_START,SP_FLUX_START,ROW_LENGTH,             APB2F401.103    
     &                 N_LEVELS)                                           APB2F401.104    
                                                                           APB2F401.105    
      IMPLICIT NONE                                                        APB2F401.106    
                                                                           APB2F401.107    
      INTEGER                                                              APB2F401.108    
     &  FIELD_SIZE           ! IN size of single level of FIELD            APB2F401.109    
     &, NP_FLUX_FIELD_SIZE   ! IN size of single level of NP_FLUX_FIELD    APB2F401.110    
     &, SP_FLUX_FIELD_SIZE   ! IN size of single level of SP_FLUX_FIELD    APB2F401.111    
     &, NP_FLUX_START        ! IN offset in NP_FLUX_FIELD of NP flux       APB2F401.112    
     &, SP_FLUX_START        ! IN offset in SP_FLUX_FIELD of SP flux       APB2F401.113    
     &, ROW_LENGTH           ! IN points per row                           APB2F401.114    
     &, N_LEVELS             ! IN number of levels to process              APB2F401.115    
                                                                           APB2F401.116    
! All TYPFLDPT arguments are intent IN                                     APB2F401.117    
*CALL TYPFLDPT                                                             APB2F401.118    
                                                                           APB2F401.119    
      REAL                                                                 APB2F401.120    
     &  FIELD(FIELD_SIZE,N_LEVELS)                                         APB2F401.121    
     &                    ! INOUT primary field to be updated              APB2F401.122    
     &, NP_FLUX_FIELD(NP_FLUX_FIELD_SIZE,N_LEVELS)                         APB2F401.123    
     &                    ! IN field containing fluxes for north pole      APB2F401.124    
     &, SP_FLUX_FIELD(SP_FLUX_FIELD_SIZE,N_LEVELS)                         APB2F401.125    
     &                    ! IN field containing fluxes for south pole      APB2F401.126    
                                                                           APB2F401.127    
*IF DEF,MPP                                                                APB2F401.128    
      INTEGER info                                                         APB2F401.129    
*ENDIF                                                                     APB2F401.130    
                                                                           APB2F401.131    
! Local variables:                                                         APB2F401.132    
      INTEGER I,K                                                          APB2F401.133    
                                                                           APB2F401.134    
      REAL MEAN_NP(N_LEVELS),MEAN_SP(N_LEVELS)                             APB2F401.135    
                                                                           APB2F401.136    
      DO K=1,N_LEVELS                                                      APB2F401.137    
        MEAN_NP(K)=0.0                                                     APB2F401.138    
        MEAN_SP(K)=0.0                                                     APB2F401.139    
      ENDDO                                                                APB2F401.140    
                                                                           APB2F401.141    
*IF -DEF,MPP                                                               APB2F401.142    
      DO K=1,N_LEVELS                                                      APB2F401.143    
        DO I=1,ROW_LENGTH                                                  APB2F401.144    
          MEAN_NP(K)=MEAN_NP(K)+NP_FLUX_FIELD(NP_FLUX_START+I-1,K)         APB2F401.145    
          MEAN_SP(K)=MEAN_SP(K)+SP_FLUX_FIELD(SP_FLUX_START+I-1,K)         APB2F401.146    
        ENDDO                                                              APB2F401.147    
                                                                           APB2F401.148    
        MEAN_NP(K)=MEAN_NP(K)/ROW_LENGTH                                   APB2F401.149    
        MEAN_SP(K)=MEAN_SP(K)/ROW_LENGTH                                   APB2F401.150    
                                                                           APB2F401.151    
! Fujitsu vectorization directive                                          GRB0F405.47     
!OCL NOVREC                                                                GRB0F405.48     
        DO I=1,ROW_LENGTH                                                  APB2F401.152    
          FIELD(I,K)=FIELD(I,K)+MEAN_NP(K)                                 APB2F401.153    
          FIELD(I+FIELD_SIZE-ROW_LENGTH,K)=                                APB2F401.154    
     &      FIELD(I+FIELD_SIZE-ROW_LENGTH,K)+MEAN_SP(K)                    APB2F401.155    
        ENDDO                                                              APB2F401.156    
                                                                           APB2F401.157    
      ENDDO                                                                APB2F401.158    
                                                                           APB2F401.159    
*ELSE                                                                      APB2F401.160    
      IF (at_top_of_LPG) THEN                                              APB2F401.161    
*IF DEF,REPROD                                                             GPB3F404.2      
        CALL GCG_RVECSUMR(NP_FLUX_FIELD_SIZE,ROW_LENGTH-2*EW_Halo,         APB2F401.162    
*ELSE                                                                      GPB3F404.3      
        CALL GCG_RVECSUMF(NP_FLUX_FIELD_SIZE,ROW_LENGTH-2*EW_Halo,         GPB3F404.4      
*ENDIF                                                                     GPB3F404.5      
     &                    NP_FLUX_START+EW_Halo,N_LEVELS,                  APB2F401.163    
     &                    NP_FLUX_FIELD,GC_ROW_GROUP,info,MEAN_NP)         APB2F401.164    
        DO K=1,N_LEVELS                                                    APB2F401.165    
          MEAN_NP(K)=MEAN_NP(K)/GLOBAL_ROW_LENGTH                          APB2F401.166    
          DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                    APB2F401.167    
            FIELD(I,K)=FIELD(I,K)+MEAN_NP(K)                               APB2F401.168    
          ENDDO                                                            APB2F401.169    
        ENDDO                                                              APB2F401.170    
      ENDIF                                                                APB2F401.171    
                                                                           APB2F401.172    
      IF (at_base_of_LPG) THEN                                             APB2F401.173    
*IF DEF,REPROD                                                             GPB3F404.6      
        CALL GCG_RVECSUMR(SP_FLUX_FIELD_SIZE,ROW_LENGTH-2*EW_Halo,         APB2F401.174    
*ELSE                                                                      GPB3F404.7      
        CALL GCG_RVECSUMF(SP_FLUX_FIELD_SIZE,ROW_LENGTH-2*EW_Halo,         GPB3F404.8      
*ENDIF                                                                     GPB3F404.9      
     &                    SP_FLUX_START+EW_Halo,N_LEVELS,                  APB2F401.175    
     &                    SP_FLUX_FIELD,GC_ROW_GROUP,info,MEAN_SP)         APB2F401.176    
        DO K=1,N_LEVELS                                                    APB2F401.177    
          MEAN_SP(K)=MEAN_SP(K)/GLOBAL_ROW_LENGTH                          APB2F401.178    
          DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                APB2F401.179    
            FIELD(I,K)=FIELD(I,K)+MEAN_SP(K)                               APB2F401.180    
          ENDDO                                                            APB2F401.181    
        ENDDO                                                              APB2F401.182    
      ENDIF                                                                APB2F401.183    
*ENDIF                                                                     APB2F401.184    
                                                                           APB2F401.185    
      RETURN                                                               POLAR1A.64     
      END                                                                  POLAR1A.65     
*ENDIF                                                                     POLAR1A.66