*IF DEF,A15_1A                                                             VORTI41A.2      
C ******************************COPYRIGHT******************************    GTS2F400.11827  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.11828  
C                                                                          GTS2F400.11829  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.11830  
C restrictions as set forth in the contract.                               GTS2F400.11831  
C                                                                          GTS2F400.11832  
C                Meteorological Office                                     GTS2F400.11833  
C                London Road                                               GTS2F400.11834  
C                BRACKNELL                                                 GTS2F400.11835  
C                Berkshire UK                                              GTS2F400.11836  
C                RG12 2SZ                                                  GTS2F400.11837  
C                                                                          GTS2F400.11838  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.11839  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.11840  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.11841  
C Modelling at the above address.                                          GTS2F400.11842  
C ******************************COPYRIGHT******************************    GTS2F400.11843  
C                                                                          GTS2F400.11844  
CLL   SUBROUTINE VORTIC4 -----------------------------------------------   VORTI41A.3      
CLL                                                                        VORTI41A.4      
CLL   Purpose: To compute  1/rs 2.omega.cos(phi) D(theta)/D(phi).          VORTI41A.5      
CLL            This is a term that is calculated here to be used later     VORTI41A.6      
CLL            in the calculation of potential vorticity                   VORTI41A.7      
CLL            in subroutine CALC_PV_P.                                    VORTI41A.8      
CLL                                                                        VORTI41A.9      
CLL   Not suitable for single column use.                                  VORTI41A.10     
CLL                                                                        VORTI41A.11     
CLL   VERSION FOR CRAY Y-MP                                                VORTI41A.12     
CLL                                                                        VORTI41A.13     
CLL    Model            Modification history:                              VORTI41A.14     
CLL   Version   Date                                                       VORTI41A.15     
CLL     3.1   29/10/92  Written by Simon Anderson.                         VORTI41A.16     
CLL     3.1   18/01/93  New deck at the release of Version 3.1.            VORTI41A.17     
CLL     3.2   28/07/93  Change subroutine name to uppercase for            TS280793.33     
CLL                     portability.    Tracey Smith                       TS280793.34     
CLL     3.3   10/09/93  Correction to calculation at the poles.            SA100993.1      
!LL     4.3   18/02/97  Added ARGFLPT arguments and MPP code  P.Burton     GSM3F403.1443   
CLL                                                                        VORTI41A.18     
CLL   Programming standard: Unified model documentation paper no. 4,       VORTI41A.19     
CLL                         standard b. version 2, dated 18/01/90          VORTI41A.20     
CLL                                                                        VORTI41A.21     
CLL   Logical components covered: D415                                     VORTI41A.22     
CLL                                                                        VORTI41A.23     
CLL   Project task: D4                                                     VORTI41A.24     
CLL                                                                        VORTI41A.25     
CLL   Documentation: U.M.D.P No 13. Derivation and Calculation of          VORTI41A.26     
CLL                  Unified Model Potential Vorticity.                    VORTI41A.27     
CLL                  By Simon Anderson and Ian Roulstone.                  VORTI41A.28     
CLL                                                                        VORTI41A.29     
CLLEND------------------------------------------------------------------   VORTI41A.30     
                                                                           VORTI41A.31     
C*L ARGUMENTS:----------------------------------------------------------   VORTI41A.32     

      SUBROUTINE VORTIC4                                                    1,1TS280793.35     
     1                  (rs_on_press,theta_on_press,dtheta_dlatitude,      VORTI41A.34     
     2                   sec_p_latitude,                                   VORTI41A.35     
     3                   vorticity4,                                       VORTI41A.36     
     4                   p_field,row_length,                               VORTI41A.37     
*CALL ARGFLDPT                                                             GSM3F403.1444   
     5                   latitude_step_inverse,longitude_step_inverse)     VORTI41A.38     
                                                                           VORTI41A.39     
      implicit none                                                        VORTI41A.40     
                                                                           VORTI41A.41     
C Input variables ------------------------------------------------------   VORTI41A.42     
                                                                           VORTI41A.43     
      integer                                                              VORTI41A.44     
     & p_field                !IN  Number of points in pressure field.     VORTI41A.45     
     &,row_length             !IN  Number of points per row.               VORTI41A.46     
*CALL TYPFLDPT                                                             GSM3F403.1445   
                                                                           VORTI41A.47     
      real                                                                 VORTI41A.48     
     & rs_on_press(p_field)   !IN  Pseudo radius of earth at p-points.     VORTI41A.49     
     &,theta_on_press(p_field)!IN  Theta field at p-points.                VORTI41A.50     
     &,dtheta_dlatitude(p_field)!IN  D(Theta)/D(phi) field.                VORTI41A.51     
     &,sec_p_latitude(p_field)!IN  1/cos(lat) at p-points.                 VORTI41A.52     
     &,latitude_step_inverse  !IN  1/latitude increment.                   VORTI41A.53     
     &,longitude_step_inverse !IN  1/longitude increment.                  VORTI41A.54     
                                                                           VORTI41A.55     
C Output variables -----------------------------------------------------   VORTI41A.56     
                                                                           VORTI41A.57     
      real                                                                 VORTI41A.58     
     & vorticity4(p_field)    !OUT Term used in potential vorticity eqn.   VORTI41A.59     
                                                                           VORTI41A.60     
C*----------------------------------------------------------------------   VORTI41A.61     
C*L External subroutine calls:   None.                                     VORTI41A.62     
                                                                           VORTI41A.63     
C*----------------------------------------------------------------------   VORTI41A.64     
C*L Call comdecks to get required variables:                               VORTI41A.65     
*CALL C_OMEGA                                                              VORTI41A.66     
                                                                           VORTI41A.67     
C*----------------------------------------------------------------------   VORTI41A.68     
C*L Define local variables:                                                VORTI41A.69     
      integer                                                              VORTI41A.70     
     & i,j                    ! Loop counts.                               VORTI41A.71     
*IF DEF,MPP,AND,DEF,GLOBAL                                                 GSM3F403.1446   
     &, info    !GCOM return code                                          GSM3F403.1447   
*ENDIF                                                                     GSM3F403.1448   
                                                                           VORTI41A.72     
      real                                                                 VORTI41A.73     
     & scalar                 ! Local scalar.                              VORTI41A.74     
                                                                           VORTI41A.75     
*IF DEF,GLOBAL                                                             VORTI41A.76     
      real sum_n,sum_s                                                     VORTI41A.77     
*ENDIF                                                                     VORTI41A.78     
                                                                           VORTI41A.79     
                                                                           VORTI41A.80     
C ----------------------------------------------------------------------   VORTI41A.81     
CL    Calculate 'vorticity4'.                                              VORTI41A.82     
C ----------------------------------------------------------------------   VORTI41A.83     
                                                                           VORTI41A.84     
C Calculate vorticity4.                                                    VORTI41A.85     
        do 120 i=START_POINT_NO_HALO,END_P_POINT_NO_HALO                   GSM3F403.1449   
          vorticity4(i) = 1./(rs_on_press(i)*sec_p_latitude(i))*           VORTI41A.87     
     &                    2.*omega*dtheta_dlatitude(i)                     VORTI41A.88     
 120    continue                                                           VORTI41A.89     
                                                                           VORTI41A.90     
*IF DEF,GLOBAL                                                             VORTI41A.91     
C Calculate vorticity4 at poles by summing d(theta)/d(lat) around polar    VORTI41A.92     
C circle and averaging.                                                    VORTI41A.93     
        scalar = .5*latitude_step_inverse/GLOBAL_ROW_LENGTH                GSM3F403.1450   
                                                                           GSM3F403.1451   
*IF DEF,MPP                                                                GSM3F403.1452   
        if (at_top_of_LPG) then                                            GSM3F403.1453   
*ENDIF                                                                     GSM3F403.1454   
          sum_n=0.0                                                        GSM3F403.1455   
                                                                           GSM3F403.1456   
*IF -DEF,MPP                                                               GSM3F403.1457   
          do i=TOP_ROW_START+FIRST_ROW_PT-1+ROW_LENGTH,                    GSM3F403.1458   
     &         TOP_ROW_START+LAST_ROW_PT-1+ROW_LENGTH                      GSM3F403.1459   
            sum_n=sum_n+theta_on_press(i)                                  GSM3F403.1460   
          enddo                                                            GSM3F403.1461   
*ELSE                                                                      GSM3F403.1462   
*IF DEF,REPROD                                                             GSM3F403.1463   
          CALL GCG_RVECSUMR(                                               GSM3F403.1464   
*ELSE                                                                      GSM3F403.1465   
          CALL GCG_RVECSUMF(                                               GSM3F403.1466   
*ENDIF                                                                     GSM3F403.1467   
     &      ROW_LENGTH-2*EW_Halo,ROW_LENGTH-2*EW_Halo,1,1,                 GSM3F403.1468   
     &      theta_on_press(TOP_ROW_START+FIRST_ROW_PT-1+ROW_LENGTH),       GSM3F403.1469   
     &      GC_ROW_GROUP,info,sum_n)                                       GSM3F403.1470   
*ENDIF                                                                     GSM3F403.1471   
          sum_n=-sum_n*scalar                                              GSM3F403.1472   
                                                                           GSM3F403.1473   
          do i=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                    GSM3F403.1474   
            vorticity4(i) = 1./(rs_on_press(i)*sec_p_latitude(i))*         GSM3F403.1475   
     &                      2.*omega*sum_n                                 GSM3F403.1476   
          enddo                                                            GSM3F403.1477   
*IF DEF,MPP                                                                GSM3F403.1478   
        endif                                                              GSM3F403.1479   
                                                                           GSM3F403.1480   
        if (at_base_of_LPG) then                                           GSM3F403.1481   
*ENDIF                                                                     GSM3F403.1482   
          sum_s=0.0                                                        GSM3F403.1483   
                                                                           GSM3F403.1484   
*IF -DEF,MPP                                                               GSM3F403.1485   
          do i=P_BOT_ROW_START+FIRST_ROW_PT-1-row_length,                  GSM3F403.1486   
     &         P_BOT_ROW_START+LAST_ROW_PT-1-row_length                    GSM3F403.1487   
            sum_s=sum_s+theta_on_press(i)                                  GSM3F403.1488   
          enddo                                                            GSM3F403.1489   
*ELSE                                                                      GSM3F403.1490   
*IF DEF,REPROD                                                             GSM3F403.1491   
          CALL GCG_RVECSUMR(                                               GSM3F403.1492   
*ELSE                                                                      GSM3F403.1493   
          CALL GCG_RVECSUMF(                                               GSM3F403.1494   
*ENDIF                                                                     GSM3F403.1495   
     &      ROW_LENGTH-2*EW_Halo,ROW_LENGTH-2*EW_Halo,1,1,                 GSM3F403.1496   
     &      theta_on_press(P_BOT_ROW_START-row_length+LAST_ROW_PT-1),      GSM3F403.1497   
     &      GC_ROW_GROUP,info,sum_s)                                       GSM3F403.1498   
*ENDIF                                                                     GSM3F403.1499   
          sum_s=sum_s*scalar                                               GSM3F403.1500   
                                                                           GSM3F403.1501   
          do i=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                GSM3F403.1502   
            vorticity4(i) = 1./(rs_on_press(i)*sec_p_latitude(i))*         GSM3F403.1503   
     &                      2.*omega*sum_s                                 GSM3F403.1504   
          enddo                                                            GSM3F403.1505   
*IF DEF,MPP                                                                GSM3F403.1506   
        endif                                                              GSM3F403.1507   
*ENDIF                                                                     GSM3F403.1508   
*ELSE                                                                      VORTI41A.113    
                                                                           VORTI41A.114    
C Set vorticity4 at Northern and Southern boundaries to zero.              VORTI41A.115    
*IF DEF,MPP                                                                GSM3F403.1509   
        if (at_top_of_LPG) then                                            GSM3F403.1510   
*ENDIF                                                                     GSM3F403.1511   
          do i=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                    GSM3F403.1512   
            vorticity4(i)=0.0                                              GSM3F403.1513   
          enddo                                                            GSM3F403.1514   
*IF DEF,MPP                                                                GSM3F403.1515   
        endif                                                              GSM3F403.1516   
                                                                           GSM3F403.1517   
        if (at_base_of_LPG) then                                           GSM3F403.1518   
*ENDIF                                                                     GSM3F403.1519   
          do i=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                GSM3F403.1520   
            vorticity4(i)=0.0                                              GSM3F403.1521   
          enddo                                                            GSM3F403.1522   
*IF DEF,MPP                                                                GSM3F403.1523   
        endif                                                              GSM3F403.1524   
*ENDIF                                                                     GSM3F403.1525   
                                                                           VORTI41A.121    
*ENDIF                                                                     VORTI41A.122    
*IF DEF,MPP                                                                GSM3F403.1526   
! Set rest of array                                                        GSM3F403.1527   
      CALL SWAPBOUNDS(vorticity4,ROW_LENGTH,tot_P_ROWS,                    GSM3F403.1528   
     &              EW_Halo,NS_Halo,1)                                     GSM3F403.1529   
*ENDIF                                                                     GSM3F403.1530   
                                                                           VORTI41A.123    
CL    End of routine vortic4                                               VORTI41A.124    
                                                                           VORTI41A.125    
      return                                                               VORTI41A.126    
      end                                                                  VORTI41A.127    
                                                                           VORTI41A.128    
*ENDIF                                                                     VORTI41A.129