*IF DEF,A10_1A,OR,DEF,A10_1B,OR,DEF,A10_1C                                 AAD2F404.248    
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.14861  
C                                                                          GTS2F400.14862  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.14863  
C restrictions as set forth in the contract.                               GTS2F400.14864  
C                                                                          GTS2F400.14865  
C                Meteorological Office                                     GTS2F400.14866  
C                London Road                                               GTS2F400.14867  
C                BRACKNELL                                                 GTS2F400.14868  
C                Berkshire UK                                              GTS2F400.14869  
C                RG12 2SZ                                                  GTS2F400.14870  
C                                                                          GTS2F400.14871  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.14872  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.14873  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.14874  
C Modelling at the above address.                                          GTS2F400.14875  
C ******************************COPYRIGHT******************************    GTS2F400.14876  
C                                                                          GTS2F400.14877  
! Subroutine ATMOS_ANG_MOM----------------------------------------         ANGMOM1A.3      
! Description:                                                             ANGMOM1A.4      
!  Routine to calculate the 3 components of atmospheric angular            ANGMOM1A.5      
!  momentum for the wind term and the mass term separately.                ANGMOM1A.6      
!                                                                          ANGMOM1A.7      
! Method: The 3 components of angular momentum are defined below           ANGMOM1A.8      
!         as integrals over pressure of                                    ANGMOM1A.9      
!                                                                          ANGMOM1A.10     
! W1=  {u*sin(lat)cos(lon)-v*sin(lon)} r**3 cos(lat) dp/g                  ANGMOM1A.11     
! W2=  {u*sin(lat)sin(lon)+v*cos(lon)} r**3 cos(lat) dp/g                  ANGMOM1A.12     
! W3= -u*cos(lat) r**3 cos(lat) dp/g                                       ANGMOM1A.13     
!                                                                          ANGMOM1A.14     
! M1=  {r*omega*cos(lat)sin(lat)cos(lon)} r**3 cos(lat) dp/g               ANGMOM1A.15     
! M2=  {r*omega*cos(lat)sin(lat)sin(lon)} r**3 cos(lat) dp/g               ANGMOM1A.16     
! M3= -{r*omega*cos(lat)}cos(lat) r**3 cos(lat) dp/g                       ANGMOM1A.17     
!                                                                          ANGMOM1A.18     
!                                                                          ANGMOM1A.19     
! Current Code Owner: R A Stratton                                         ANGMOM1A.20     
!                                                                          ANGMOM1A.21     
! History:                                                                 ANGMOM1A.22     
! Version   Date     Comment                                               ANGMOM1A.23     
! -------   ----     -------                                               ANGMOM1A.24     
!  4.0     11/11/94  Original code. R A Stratton                           ANGMOM1A.25     
!  4.4     02/07/97  Added ARGFLDPT args and MPP code    P.Burton          GPB1F404.155    
!                                                                          ANGMOM1A.26     
! Code Description:                                                        ANGMOM1A.27     
!   Language: FORTRAN 77 + common extensions.                              ANGMOM1A.28     
!   This code is written to UMDP3 v6 programming standards.                ANGMOM1A.29     
!                                                                          ANGMOM1A.30     
! System component covered: ?                                              ANGMOM1A.31     
! System Task:              ?                                              ANGMOM1A.32     
! --------------------------------------------------------------------     ANGMOM1A.33     

      SUBROUTINE ATMOS_ANG_MOM(                                             1,2GPB1F404.156    
     &         P_FIELD,U_FIELD,P_ROWS,ROW_LENGTH,P_LEVS,                   GPB1F404.157    
*CALL ARGFLDPT                                                             GPB1F404.158    
     &         EW_SPACE,NS_SPACE,FIRST_LAT,FIRST_LONG,                     GPB1F404.159    
     &         PSTAR,U,V,RS,COS_U_LATITUDE,DELTA_AK,DELTA_BK,              ANGMOM1A.36     
     &         L_AMM1,L_AMM2,L_AMM3,L_AMW1,L_AMW2,L_AMW3,                  ANGMOM1A.37     
     &         AMM1,AMM2,AMM3,AMW1,AMW2,AMW3)                              ANGMOM1A.38     
      IMPLICIT NONE                                                        ANGMOM1A.39     
! Declarations:                                                            ANGMOM1A.40     
!                                                                          ANGMOM1A.41     
! Global variables                                                         ANGMOM1A.42     
                                                                           ANGMOM1A.43     
*CALL C_A                                                                  ANGMOM1A.44     
*CALL C_G                                                                  ANGMOM1A.45     
*CALL C_OMEGA                                                              ANGMOM1A.46     
*CALL C_PI                                                                 ANGMOM1A.47     
                                                                           ANGMOM1A.48     
! Subroutine arguments                                                     ANGMOM1A.49     
      INTEGER                                                              ANGMOM1A.50     
     &   P_FIELD      ! IN : length of p grid                              ANGMOM1A.51     
     &  ,U_FIELD      ! IN : length of u grid                              ANGMOM1A.52     
     &  ,P_ROWS       ! IN : number of rows p grid                         ANGMOM1A.53     
     &  ,ROW_LENGTH   ! IN : length of row                                 ANGMOM1A.54     
     &  ,P_LEVS       ! IN : number of model levels                        ANGMOM1A.55     
                                                                           ANGMOM1A.56     
*CALL TYPFLDPT                                                             GPB1F404.160    
      REAL                                                                 ANGMOM1A.57     
     &   EW_SPACE     ! IN : East west grid spacing in degrees             ANGMOM1A.58     
     &  ,NS_SPACE     ! IN : North South grid spacing in degrees           ANGMOM1A.59     
     &  ,FIRST_LAT    ! IN : first latitude                                ANGMOM1A.60     
     &  ,FIRST_LONG   ! IN : first longitude                               ANGMOM1A.61     
      REAL                                                                 ANGMOM1A.62     
     &  PSTAR(P_FIELD)     ! IN : pstar                                    ANGMOM1A.63     
     & ,U(U_field,P_LEVS)  ! IN : u                                        ANGMOM1A.64     
     & ,V(U_field,P_LEVS)  ! IN : V                                        ANGMOM1A.65     
     & ,RS(P_field,P_LEVS) ! IN : effect radius of atmosphere              ANGMOM1A.66     
     & ,COS_U_LATITUDE(U_FIELD) ! IN : cos (lat) u-grid                    ANGMOM1A.67     
     & ,DELTA_AK(P_LEVS)   ! IN : layer akh(k+1)-akh(k)                    ANGMOM1A.68     
     & ,DELTA_BK(P_LEVS)   ! IN : layer bkh(k+1)-bkh(k)                    ANGMOM1A.69     
                                                                           ANGMOM1A.70     
      LOGICAL                                                              ANGMOM1A.71     
     &  L_AMM1        ! IN : true if field required                        ANGMOM1A.72     
     & ,L_AMM2        ! IN : true if field required                        ANGMOM1A.73     
     & ,L_AMM3        ! IN : true if field required                        ANGMOM1A.74     
     & ,L_AMW1        ! IN : true if field required                        ANGMOM1A.75     
     & ,L_AMW2        ! IN : true if field required                        ANGMOM1A.76     
     & ,L_AMW3        ! IN : true if field required                        ANGMOM1A.77     
                                                                           ANGMOM1A.78     
      REAL                                                                 ANGMOM1A.79     
     &  AMM1(U_FIELD)      ! OUT: 1st com of angular momemtum mass term    ANGMOM1A.80     
     & ,AMM2(U_FIELD)      ! OUT: 2nd com of angular momemtum mass term    ANGMOM1A.81     
     & ,AMM3(U_FIELD)      ! OUT: 3rd com of angular momemtum mass term    ANGMOM1A.82     
     & ,AMW1(U_FIELD)      ! OUT: 1st com of angular momemtum wind term    ANGMOM1A.83     
     & ,AMW2(U_FIELD)      ! OUT: 2nd com of angular momemtum wind term    ANGMOM1A.84     
     & ,AMW3(U_FIELD)      ! OUT: 3rd com of angular momemtum wind term    ANGMOM1A.85     
                                                                           ANGMOM1A.86     
! -------------------------------------------------------------------      ANGMOM1A.87     
! Local variables:                                                         ANGMOM1A.88     
                                                                           ANGMOM1A.89     
      REAL                                                                 ANGMOM1A.90     
     &   R3DP                  ! r**3 dp/g                                 ANGMOM1A.91     
     &  ,DP                    !  dp                                       ANGMOM1A.92     
     &  ,ROCOS                 ! r omega cos(lat)                          ANGMOM1A.93     
     &  ,FACTOR                ! scaling factor /g                         ANGMOM1A.94     
     &  ,COS_LONG                                                          ANGMOM1A.95     
     &  ,SIN_LONG                                                          ANGMOM1A.96     
     &  ,SIN_LAT                                                           ANGMOM1A.97     
      REAL                                                                 ANGMOM1A.98     
     &   RS_U(U_FIELD)         ! effective radius on u grid                ANGMOM1A.99     
     &  ,PSTAR_U(U_FIELD)      ! pstar on u grid                           ANGMOM1A.100    
     &  ,COSSQ(U_FIELD)        ! cos**2                                    ANGMOM1A.101    
     &  ,LONGITUDE(U_FIELD)    ! longitude                                 ANGMOM1A.102    
     &  ,LATITUDE(U_FIELD)     ! latitude                                  ANGMOM1A.103    
     &  ,SLCP(U_FIELD)         ! sin(lon)cos(lat)                          ANGMOM1A.104    
     &  ,CLCP(U_FIELD)         ! cos(lon)cos(lat)                          ANGMOM1A.105    
     &  ,SPSLCP(U_FIELD)       ! sin(lat)sin(lon)cos(lat)                  ANGMOM1A.106    
     &  ,SPCLCP(U_FIELD)       ! sin(lat)cos(lon)cos(lat)                  ANGMOM1A.107    
                                                                           ANGMOM1A.108    
      INTEGER                                                              ANGMOM1A.109    
     &   I,J,K,II         ! loop counters                                  ANGMOM1A.110    
                                                                           ANGMOM1A.111    
! Function & Subroutine calls:                                             ANGMOM1A.112    
      External    p_to_uv                                                  ANGMOM1A.113    
                                                                           ANGMOM1A.114    
*IF DEF,MPP                                                                GPB1F404.161    
*CALL PARVARS                                                              GPB1F404.162    
*ENDIF                                                                     GPB1F404.163    
! ------------------------------------------------------------------       ANGMOM1A.115    
! constants                                                                ANGMOM1A.116    
      FACTOR=1.e-24/g                                                      ANGMOM1A.117    
                                                                           ANGMOM1A.118    
! Calculate longitude  & latitude                                          ANGMOM1A.119    
      DO I=1,P_ROWS-1                                                      ANGMOM1A.120    
        DO J=1,ROW_LENGTH                                                  ANGMOM1A.121    
          II=J+(I-1)*ROW_LENGTH                                            ANGMOM1A.122    
*IF -DEF,MPP                                                               GPB1F404.164    
          LONGITUDE(II)=(FIRST_LONG+EW_SPACE*(J-0.5))*PI_OVER_180          ANGMOM1A.123    
          LATITUDE(II)=(FIRST_LAT-NS_SPACE*(I-0.5))*PI_OVER_180            ANGMOM1A.124    
*ELSE                                                                      GPB1F404.165    
          LONGITUDE(II)=(FIRST_LONG+EW_SPACE*                              GPB1F404.166    
     &                  ((J+datastart(1)-Offx-1)-0.5))*PI_OVER_180         GPB1F404.167    
          LATITUDE(II)=(FIRST_LAT-NS_SPACE*                                GPB1F404.168    
     &                  ((I+datastart(2)-Offy-1)-0.5))*PI_OVER_180         GPB1F404.169    
*ENDIF                                                                     GPB1F404.170    
        ENDDO                                                              ANGMOM1A.125    
      ENDDO                                                                ANGMOM1A.126    
                                                                           ANGMOM1A.127    
! calculate pstar on u grid                                                ANGMOM1A.128    
                                                                           ANGMOM1A.129    
      CALL P_TO_UV(PSTAR,PSTAR_U,P_FIELD,U_FIELD,ROW_LENGTH,P_ROWS)        ANGMOM1A.130    
                                                                           ANGMOM1A.131    
      DO I=1,U_FIELD                                                       ANGMOM1A.132    
!   Intialise output arrays                                                ANGMOM1A.133    
        IF (L_AMW1)  AMW1(I)=0.0                                           ANGMOM1A.134    
        IF (L_AMW2)  AMW2(I)=0.0                                           ANGMOM1A.135    
        IF (L_AMW3)  AMW3(I)=0.0                                           ANGMOM1A.136    
        IF (L_AMM1)  AMM1(I)=0.0                                           ANGMOM1A.137    
        IF (L_AMM2)  AMM2(I)=0.0                                           ANGMOM1A.138    
        IF (L_AMM3)  AMM3(I)=0.0                                           ANGMOM1A.139    
      ENDDO                                                                ANGMOM1A.140    
      DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                      GPB1F404.171    
        COSSQ(I)=COS_U_LATITUDE(I)*COS_U_LATITUDE(I)                       ANGMOM1A.142    
      ENDDO                                                                ANGMOM1A.143    
! calculate cos , sin etc                                                  ANGMOM1A.144    
      IF (L_AMM1.OR.L_AMM2.OR.L_AMW1.OR.L_AMW2) THEN                       ANGMOM1A.145    
       DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                     GPB1F404.172    
        COS_LONG=COS(LONGITUDE(I))                                         ANGMOM1A.147    
        SIN_LONG=SIN(LONGITUDE(I))                                         ANGMOM1A.148    
        SIN_LAT=SIN(LATITUDE(I))                                           ANGMOM1A.149    
        spclcp(i)=SIN_LAT*COS_LONG*COS_U_LATITUDE(I)                       ANGMOM1A.150    
        spslcp(i)=SIN_LAT*SIN_LONG*COS_U_LATITUDE(I)                       ANGMOM1A.151    
        clcp(i)=COS_LONG*COS_U_LATITUDE(I)                                 ANGMOM1A.152    
        slcp(i)=SIN_LONG*COS_U_LATITUDE(I)                                 ANGMOM1A.153    
       ENDDO                                                               ANGMOM1A.154    
      ENDIF                                                                ANGMOM1A.155    
                                                                           ANGMOM1A.156    
! integrate momemtum over p                                                ANGMOM1A.157    
                                                                           ANGMOM1A.158    
      DO K=1,P_LEVS     ! loop over model levels                           ANGMOM1A.159    
        CALL P_TO_UV(RS(1,K),RS_U,P_FIELD,U_FIELD,ROW_LENGTH,P_ROWS)       ANGMOM1A.160    
                                                                           ANGMOM1A.161    
        DO I=FIRST_FLD_PT,LAST_U_FLD_PT                                    GPB1F404.173    
                                                                           ANGMOM1A.163    
          DP=DELTA_AK(K) + DELTA_BK(K)*PSTAR_U(I)                          ANGMOM1A.164    
          R3DP=(RS_U(I)**3)*DP*FACTOR                                      ANGMOM1A.165    
          ROCOS=OMEGA*RS_U(I)*COS_U_LATITUDE(I)                            ANGMOM1A.166    
                                                                           ANGMOM1A.167    
          IF (L_AMW1) AMW1(I)=AMW1(I)                                      ANGMOM1A.168    
     &       +(U(I,K)*SPCLCP(I)-V(I,K)*SLCP(I))*R3DP                       ANGMOM1A.169    
                                                                           ANGMOM1A.170    
          IF (L_AMW2) AMW2(I)=AMW2(I)                                      ANGMOM1A.171    
     &       +(U(I,K)*SPSLCP(I)+V(I,K)*CLCP(I))*R3DP                       ANGMOM1A.172    
                                                                           ANGMOM1A.173    
          IF (L_AMW3) AMW3(I)=AMW3(I) - U(I,K)*COSSQ(I)*R3DP               ANGMOM1A.174    
                                                                           ANGMOM1A.175    
          IF (L_AMM1) AMM1(I)=AMM1(I) + ROCOS*SPCLCP(I)*R3DP               ANGMOM1A.176    
          IF (L_AMM2) AMM2(I)=AMM2(I) + ROCOS*SPSLCP(I)*R3DP               ANGMOM1A.177    
          IF (L_AMM3) AMM3(I)=AMM3(I) - ROCOS*COSSQ(I)*R3DP                ANGMOM1A.178    
        ENDDO           ! end loop over gridpoints                         ANGMOM1A.179    
      ENDDO             ! end loop over model levels                       ANGMOM1A.180    
                                                                           ANGMOM1A.181    
      RETURN                                                               ANGMOM1A.182    
      END                                                                  ANGMOM1A.183    
*ENDIF                                                                     ANGMOM1A.184