*IF DEF,A15_1A                                                             VORTI11A.2      
C ******************************COPYRIGHT******************************    GTS2F400.11773  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.11774  
C                                                                          GTS2F400.11775  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.11776  
C restrictions as set forth in the contract.                               GTS2F400.11777  
C                                                                          GTS2F400.11778  
C                Meteorological Office                                     GTS2F400.11779  
C                London Road                                               GTS2F400.11780  
C                BRACKNELL                                                 GTS2F400.11781  
C                Berkshire UK                                              GTS2F400.11782  
C                RG12 2SZ                                                  GTS2F400.11783  
C                                                                          GTS2F400.11784  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.11785  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.11786  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.11787  
C Modelling at the above address.                                          GTS2F400.11788  
C ******************************COPYRIGHT******************************    GTS2F400.11789  
C                                                                          GTS2F400.11790  
CLL   SUBROUTINE VORTIC1 -----------------------------------------------   VORTI11A.3      
CLL                                                                        VORTI11A.4      
CLL   Purpose: To compute 'vorticity1'.                                    VORTI11A.5      
CLL            This is a term that is calculated here to be used later     VORTI11A.6      
CLL            in the calculation of potential vorticity.                  VORTI11A.7      
CLL            Vorticity1 = -2*omega*cos(phi)/rs * D(rs)/D(phi)            VORTI11A.8      
CLL   Not suitable for single column use.                                  VORTI11A.9      
CLL                                                                        VORTI11A.10     
CLL   Version for cray y-mp                                                VORTI11A.11     
CLL                                                                        VORTI11A.12     
CLL   Written by Simon Anderson                                            VORTI11A.13     
CLL                                                                        VORTI11A.14     
CLL  Model            Modification history from model version 3.0:         VORTI11A.15     
CLL version  Date                                                          VORTI11A.16     
CLL   3.2    28/07/93 Change subroutine name to uppercase for              TS280793.24     
CLL                   portability.    Tracey Smith                         TS280793.25     
!LL   4.3    17/02/97 Added ARGFLDPT arguments and MPP code  P.Burton      GSM3F403.1220   
CLL                                                                        VORTI11A.17     
CLL   Programming standard: Unified model documentation paper no. 4,       VORTI11A.18     
CLL                         standard b. version 2, dated 18/01/90          VORTI11A.19     
CLL                                                                        VORTI11A.20     
CLL   Logical components covered: D415                                     VORTI11A.21     
CLL                                                                        VORTI11A.22     
CLL   System task: D4                                                      VORTI11A.23     
CLL                                                                        VORTI11A.24     
CLL   Documentation: U.M.D.P No 13. Derivation and Calculation of          VORTI11A.25     
CLL                  Unified Model Potential Vorticity.                    VORTI11A.26     
CLL                  by Simon Anderson and Ian Roulstone.                  VORTI11A.27     
CLL                                                                        VORTI11A.28     
CLLEND------------------------------------------------------------------   VORTI11A.29     
                                                                           VORTI11A.30     
C*L ARGUMENTS:----------------------------------------------------------   VORTI11A.31     

      SUBROUTINE VORTIC1                                                    1,1TS280793.26     
     1                  (rs_on_theta,                                      VORTI11A.33     
     2                   sec_p_latitude,vorticity1,                        VORTI11A.34     
     3                   p_field,row_length,                               VORTI11A.35     
*CALL ARGFLDPT                                                             GSM3F403.1221   
     4                   latitude_step_inverse,longitude_step_inverse)     VORTI11A.36     
                                                                           VORTI11A.37     
      implicit none                                                        VORTI11A.38     
                                                                           VORTI11A.39     
C Input variables ------------------------------------------------------   VORTI11A.40     
                                                                           VORTI11A.41     
      integer                                                              VORTI11A.42     
     & p_field                !IN  Number of points in pressure field.     VORTI11A.43     
     &,row_length             !IN  Number of points per row.               VORTI11A.44     
*CALL TYPFLDPT                                                             GSM3F403.1222   
                                                                           VORTI11A.45     
      real                                                                 VORTI11A.46     
     & rs_on_theta(p_field)   !IN  Pseudo radius of earth at p points.     VORTI11A.47     
     &,sec_p_latitude(p_field)!IN  1/cos(lat) at p points.                 VORTI11A.48     
     &,latitude_step_inverse  !IN  1/latitude increment.                   VORTI11A.49     
     &,longitude_step_inverse !IN  1/longitude increment.                  VORTI11A.50     
                                                                           VORTI11A.51     
C Output variables -----------------------------------------------------   VORTI11A.52     
                                                                           VORTI11A.53     
      real                                                                 VORTI11A.54     
     & vorticity1(p_field)    !OUT Term used in potential vorticity eqn.   VORTI11A.55     
                                                                           VORTI11A.56     
C*----------------------------------------------------------------------   VORTI11A.57     
C*L Workspace usage:- 1 local array required.                              VORTI11A.58     
                                                                           VORTI11A.59     
      real                                                                 VORTI11A.60     
     & drs_dlatitude(p_field)                                              VORTI11A.61     
                                                                           VORTI11A.62     
C*----------------------------------------------------------------------   VORTI11A.63     
C*L Call comdecks to get required variables:                               VORTI11A.64     
*CALL C_OMEGA                                                              VORTI11A.65     
                                                                           VORTI11A.66     
C*----------------------------------------------------------------------   VORTI11A.67     
C*L Define local variables:                                                VORTI11A.68     
      integer                                                              VORTI11A.69     
     & i,j                    ! Loop counts.                               VORTI11A.70     
*IF DEF,MPP,AND,DEF,GLOBAL                                                 GSM3F403.1223   
     &,  info   ! GCOM return code                                         GSM3F403.1224   
*ENDIF                                                                     GSM3F403.1225   
                                                                           VORTI11A.71     
      real                                                                 VORTI11A.72     
     & scalar                 ! Local scalar.                              VORTI11A.73     
                                                                           VORTI11A.74     
*IF DEF,GLOBAL                                                             VORTI11A.75     
      real sum_n,sum_s                                                     VORTI11A.76     
*ENDIF                                                                     VORTI11A.77     
                                                                           VORTI11A.78     
                                                                           VORTI11A.79     
C ----------------------------------------------------------------------   VORTI11A.80     
CL    Calculate 'vorticity1'.                                              VORTI11A.81     
C ----------------------------------------------------------------------   VORTI11A.82     
                                                                           VORTI11A.83     
C Calculate d(rs)/d(phi).                                                  VORTI11A.84     
        do 110 i=START_POINT_NO_HALO,END_P_POINT_NO_HALO                   GSM3F403.1226   
          drs_dlatitude(i) = latitude_step_inverse*.5*                     VORTI11A.86     
     &                       (rs_on_theta(i-row_length)-                   VORTI11A.87     
     &                        rs_on_theta(i+row_length))                   VORTI11A.88     
 110    continue                                                           VORTI11A.89     
                                                                           VORTI11A.90     
C Calculate vorticity1.                                                    VORTI11A.91     
        do 120 i=START_POINT_NO_HALO,END_P_POINT_NO_HALO                   GSM3F403.1227   
          vorticity1(i) = -2.*omega/(sec_p_latitude(i)*                    VORTI11A.93     
     &                               rs_on_theta(i))*drs_dlatitude(i)      VORTI11A.94     
 120    continue                                                           VORTI11A.95     
                                                                           VORTI11A.96     
*IF DEF,GLOBAL                                                             VORTI11A.97     
C Calculate vorticity1 at poles by summing d(rs)/d(lat) around polar       VORTI11A.98     
C circle and averaging.                                                    VORTI11A.99     
        scalar = .5*latitude_step_inverse/GLOBAL_ROW_LENGTH                GSM3F403.1228   
                                                                           GSM3F403.1229   
*IF DEF,MPP                                                                GSM3F403.1230   
        if (at_top_of_LPG) then                                            GSM3F403.1231   
*ENDIF                                                                     GSM3F403.1232   
          sum_n=0.0                                                        GSM3F403.1233   
                                                                           GSM3F403.1234   
*IF -DEF,MPP                                                               GSM3F403.1235   
          do i=TOP_ROW_START+FIRST_ROW_PT-1+ROW_LENGTH,                    GSM3F403.1236   
     &         TOP_ROW_START+LAST_ROW_PT-1+ROW_LENGTH                      GSM3F403.1237   
            sum_n=sum_n+rs_on_theta(i)                                     GSM3F403.1238   
          enddo                                                            GSM3F403.1239   
*ELSE                                                                      GSM3F403.1240   
*IF DEF,REPROD                                                             GSM3F403.1241   
          CALL GCG_RVECSUMR(                                               GSM3F403.1242   
*ELSE                                                                      GSM3F403.1243   
          CALL GCG_RVECSUMF(                                               GSM3F403.1244   
*ENDIF                                                                     GSM3F403.1245   
     &      ROW_LENGTH-2*EW_Halo,ROW_LENGTH-2*EW_Halo,1,1,                 GSM3F403.1246   
     &      rs_on_theta(TOP_ROW_START+FIRST_ROW_PT-1+ROW_LENGTH),          GSM3F403.1247   
     &      GC_ROW_GROUP,info,sum_n)                                       GSM3F403.1248   
*ENDIF                                                                     GSM3F403.1249   
          sum_n=-sum_n*scalar                                              GSM3F403.1250   
                                                                           GSM3F403.1251   
          do i=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                    GSM3F403.1252   
            vorticity1(i) = -sum_n*2.0*omega/(sec_p_latitude(i)*           GSM3F403.1253   
     &                      rs_on_theta(i))                                GSM3F403.1254   
          enddo                                                            GSM3F403.1255   
*IF DEF,MPP                                                                GSM3F403.1256   
        endif                                                              GSM3F403.1257   
                                                                           GSM3F403.1258   
        if (at_base_of_LPG) then                                           GSM3F403.1259   
*ENDIF                                                                     GSM3F403.1260   
          sum_s=0.0                                                        GSM3F403.1261   
                                                                           GSM3F403.1262   
*IF -DEF,MPP                                                               GSM3F403.1263   
          do i=P_BOT_ROW_START-row_length+FIRST_ROW_PT-1,                  GSM3F403.1264   
     &         P_BOT_ROW_START-row_length+LAST_ROW_PT-1                    GSM3F403.1265   
            sum_s=sum_s+rs_on_theta(i)                                     GSM3F403.1266   
          enddo                                                            GSM3F403.1267   
*ELSE                                                                      GSM3F403.1268   
*IF DEF,REPROD                                                             GSM3F403.1269   
          CALL GCG_RVECSUMR(                                               GSM3F403.1270   
*ELSE                                                                      GSM3F403.1271   
          CALL GCG_RVECSUMF(                                               GSM3F403.1272   
*ENDIF                                                                     GSM3F403.1273   
     &      ROW_LENGTH-2*EW_Halo,ROW_LENGTH-2*EW_Halo,1,1,                 GSM3F403.1274   
     &      rs_on_theta(P_BOT_ROW_START-row_length+LAST_ROW_PT-1),         GSM3F403.1275   
     &      GC_ROW_GROUP,info,sum_s)                                       GSM3F403.1276   
*ENDIF                                                                     GSM3F403.1277   
          sum_s=sum_s*scalar                                               GSM3F403.1278   
                                                                           GSM3F403.1279   
          do i=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                GSM3F403.1280   
            vorticity1(i) = -sum_s*2.0*omega/(sec_p_latitude(i)*           GSM3F403.1281   
     &                      rs_on_theta(i))                                GSM3F403.1282   
          enddo                                                            GSM3F403.1283   
*IF DEF,MPP                                                                GSM3F403.1284   
        endif                                                              GSM3F403.1285   
*ENDIF                                                                     GSM3F403.1286   
*ELSE                                                                      VORTI11A.118    
C Set vorticity1 at Northern and Southern boundaries to zero.              VORTI11A.119    
*IF DEF,MPP                                                                GSM3F403.1287   
        if (at_top_of_LPG) then                                            GSM3F403.1288   
*ENDIF                                                                     GSM3F403.1289   
          do i=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                    GSM3F403.1290   
            vorticity1(i)=0.0                                              GSM3F403.1291   
          enddo                                                            GSM3F403.1292   
*IF DEF,MPP                                                                GSM3F403.1293   
        endif                                                              GSM3F403.1294   
                                                                           GSM3F403.1295   
        if (at_base_of_LPG) then                                           GSM3F403.1296   
*ENDIF                                                                     GSM3F403.1297   
          do i=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                GSM3F403.1298   
            vorticity1(i)=0.0                                              GSM3F403.1299   
          enddo                                                            GSM3F403.1300   
*IF DEF,MPP                                                                GSM3F403.1301   
        endif                                                              GSM3F403.1302   
*ENDIF                                                                     GSM3F403.1303   
*ENDIF                                                                     VORTI11A.125    
                                                                           VORTI11A.126    
*IF DEF,MPP                                                                GSM3F403.1304   
! Set rest of array                                                        GSM3F403.1305   
      CALL SWAPBOUNDS(vorticity1,ROW_LENGTH,tot_P_ROWS,                    GSM3F403.1306   
     &              EW_Halo,NS_Halo,1)                                     GSM3F403.1307   
*ENDIF                                                                     GSM3F403.1308   
                                                                           VORTI11A.127    
CL    End of routine vortic1                                               VORTI11A.128    
                                                                           VORTI11A.129    
      return                                                               VORTI11A.130    
      end                                                                  VORTI11A.131    
                                                                           VORTI11A.132    
*ENDIF                                                                     VORTI11A.133