*IF DEF,A10_1C                                                             UVADJ1C.2      
C ******************************COPYRIGHT******************************    UVADJ1C.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    UVADJ1C.4      
C                                                                          UVADJ1C.5      
C Use, duplication or disclosure of this code is subject to the            UVADJ1C.6      
C restrictions as set forth in the contract.                               UVADJ1C.7      
C                                                                          UVADJ1C.8      
C                Meteorological Office                                     UVADJ1C.9      
C                London Road                                               UVADJ1C.10     
C                BRACKNELL                                                 UVADJ1C.11     
C                Berkshire UK                                              UVADJ1C.12     
C                RG12 2SZ                                                  UVADJ1C.13     
C                                                                          UVADJ1C.14     
C If no contract has been raised with this copy of the code, the use,      UVADJ1C.15     
C duplication or disclosure of it is strictly prohibited.  Permission      UVADJ1C.16     
C to do so must first be obtained in writing from the Head of Numerical    UVADJ1C.17     
C Modelling at the above address.                                          UVADJ1C.18     
C ******************************COPYRIGHT******************************    UVADJ1C.19     
C                                                                          UVADJ1C.20     
CLL   SUBROUTINE UV_ADJ ---------------------------------------------      UVADJ1C.21     
CLL                                                                        UVADJ1C.22     
CLL   PURPOSE:  CALCULATES AND ADDS INCREMENTS TO U AND V USING            UVADJ1C.23     
CLL             EQUATIONS 23 TO 26.                                        UVADJ1C.24     
CLL   NOT SUITABLE FOR SINGLE COLUMN USE.                                  UVADJ1C.25     
CLL                                                                        UVADJ1C.26     
CLL   WAS VERSION FOR CRAY Y-MP                                            UVADJ1C.27     
CLL                                                                        UVADJ1C.28     
CLL MM, DR      <- PROGRAMMER OF SOME OR ALL OF PREVIOUS CODE OR CHANGES   UVADJ1C.29     
CLL                                                                        UVADJ1C.30     
CLL  MODEL            MODIFICATION HISTORY:                                UVADJ1C.31     
CLL VERSION  DATE                                                          UVADJ1C.32     
!LL   4.4    01/08/97 New version optimised for T3E                        UVADJ1C.33     
!LL                   Not bit reproducible with UVADJ1A.                   UVADJ1C.34     
CLL   4.4    01/08/97 Optimisation for T3E removing unnecessary            UVADJ1C.35     
CLL                   array initialisations and reworking loops            UVADJ1C.36     
CLL                   for streams.                                         UVADJ1C.37     
CLL                   Author: D.Salmond                                    UVADJ1C.38     
CLL                   Reviewer: A. Dickinson                               UVADJ1C.39     
!LL   4.5    21/08/98  Comment out cdir$ cache_bypass directives due       GSM4F405.1      
!LL                    to t3e hardware error with new compiler.            GSM4F405.2      
!LL                    S.D.Mullerworth                                     GSM4F405.3      
CLL                                                                        UVADJ1C.40     
CLL                                                                        UVADJ1C.41     
CLL   PROGRAMMING STANDARD:                                                UVADJ1C.42     
CLL                                                                        UVADJ1C.43     
CLL   SYSTEM COMPONENTS COVERED: P111                                      UVADJ1C.44     
CLL                                                                        UVADJ1C.45     
CLL   SYSTEM TASK: P1                                                      UVADJ1C.46     
CLL                                                                        UVADJ1C.47     
CLL   DOCUMENTATION:       THE EQUATIONS USED ARE (23) TO (26)             UVADJ1C.48     
CLL                        IN UNIFIED MODEL DOCUMENTATION PAPER NO. 10     UVADJ1C.49     
CLL                        M.J.P. CULLEN,T.DAVIES, AND M.H.MAWSON          UVADJ1C.50     
CLLEND-------------------------------------------------------------        UVADJ1C.51     
                                                                           UVADJ1C.52     
C                                                                          UVADJ1C.53     
C*L   ARGUMENTS:---------------------------------------------------        UVADJ1C.54     

      SUBROUTINE UV_ADJ                                                     2,14UVADJ1C.55     
     1              (U,V,THETA,Q,OROG_HEIGHT,PSTAR,F1,                     UVADJ1C.56     
     2              F2,F3,SEC_U_LATITUDE,TAN_U_LATITUDE,AK,BK,DELTA_AK,    UVADJ1C.57     
     3              DELTA_BK,LATITUDE_STEP_INVERSE,ADJUSTMENT_TIMESTEP,    UVADJ1C.58     
     4              LONGITUDE_STEP_INVERSE,RS,                             UVADJ1C.59     
*CALL ARGFLDPT                                                             UVADJ1C.60     
     5              U_FIELD,P_FIELD,ROW_LENGTH,P_LEVELS,                   UVADJ1C.61     
     6              Q_LEVELS,CALL_NUMBER,AKH,BKH,P_EXNER,                  UVADJ1C.62     
     8              ADJUSTMENT_STEPS,L_PHI_OUT,PHI_OUT,LLINTS,             UVADJ1C.63     
     9              LWHITBROM)                                             UVADJ1C.64     
                                                                           UVADJ1C.65     
      IMPLICIT NONE                                                        UVADJ1C.66     
                                                                           UVADJ1C.67     
      LOGICAL                                                              UVADJ1C.68     
     * L_PHI_OUT              !IN. TRUE IF PHI OUTPUT REQUIRED AS          UVADJ1C.69     
     *                        !    DIAGNOSTIC.                             UVADJ1C.70     
     *,LLINTS                 !Switch for linear TS calc in CALC_TS        UVADJ1C.71     
     *,LWHITBROM              !Switch for White & Bromley terms            UVADJ1C.72     
                                                                           UVADJ1C.73     
      INTEGER                                                              UVADJ1C.74     
     *  P_FIELD               !IN DIMENSION OF FIELDS ON PRESSSURE GRID    UVADJ1C.75     
     *, U_FIELD               !IN DIMENSION OF FIELDS ON VELOCITY GRID     UVADJ1C.76     
     *, P_LEVELS              !IN    NUMBER OF PRESSURE LEVELS.            UVADJ1C.77     
     *, Q_LEVELS              !IN    NUMBER OF MOIST LEVELS.               UVADJ1C.78     
     *, ROW_LENGTH            !IN    NUMBER OF POINTS PER ROW              UVADJ1C.79     
     *, CALL_NUMBER           !IN ADJUSTMENT STEP NUMBER                   UVADJ1C.80     
     *, ADJUSTMENT_STEPS      !IN NUMBER OF ADJUSTMENT STEPS               UVADJ1C.81     
! All TYPFLDPT arguments are intent IN                                     UVADJ1C.82     
*CALL TYPFLDPT                                                             UVADJ1C.83     
                                                                           UVADJ1C.84     
      REAL                                                                 UVADJ1C.85     
     * THETA(P_FIELD,P_LEVELS)!INOUT THETA FIELD                           UVADJ1C.86     
     *,Q(P_FIELD,Q_LEVELS)    !INOUT Q FIELD                               UVADJ1C.87     
     *,PSTAR(P_FIELD)         !INOUT PSTAR FIELD                           UVADJ1C.88     
     *,RS(P_FIELD,P_LEVELS)   !INOUT PRIMARY MODEL ARRAY FOR RS FIELD      UVADJ1C.89     
     *,U(U_FIELD,P_LEVELS)    !INOUT U FIELD                               UVADJ1C.90     
     *,V(U_FIELD,P_LEVELS)    !INOUT V FIELD                               UVADJ1C.91     
                                                                           UVADJ1C.92     
      REAL                                                                 UVADJ1C.93     
     * P_EXNER(P_FIELD,P_LEVELS+1) !IN HOLDS EXNER PRESSURE AT HALF        UVADJ1C.94     
     *                             ! LEVELS                                UVADJ1C.95     
     *,OROG_HEIGHT(P_FIELD)        !IN OROGRAPHIC HEIGHT FIELD             UVADJ1C.96     
                                                                           UVADJ1C.97     
      REAL                                                                 UVADJ1C.98     
     * DELTA_AK(P_LEVELS)        !IN  LAYER THICKNESS                      UVADJ1C.99     
     *,DELTA_BK(P_LEVELS)        !IN  LAYER THICKNESS                      UVADJ1C.100    
     *,AK(P_LEVELS)              !IN  VALUE OF A AT P POINTS               UVADJ1C.101    
     *,BK(P_LEVELS)              !IN  VALUE OF B AT P POINTS               UVADJ1C.102    
     *,AKH(P_LEVELS+1)           !IN  VALUE OF A AT HALF LEVELS.           UVADJ1C.103    
     *,BKH(P_LEVELS+1)           !IN  VALUE OF B AT HALF LEVELS.           UVADJ1C.104    
     *,SEC_U_LATITUDE(U_FIELD)   !IN 1/COS(LAT) AT U POINTS (2-D ARRAY)    UVADJ1C.105    
     *,TAN_U_LATITUDE(U_FIELD)   !IN TAN(LAT) AT U POINTS (2-D ARRAY)      UVADJ1C.106    
                                                                           UVADJ1C.107    
      REAL                                                                 UVADJ1C.108    
     * F1(U_FIELD)            !IN A CORIOLIS TERM SEE DOCUMENTATION        UVADJ1C.109    
     *,F2(U_FIELD)            !IN A CORIOLIS TERM SEE DOCUMENTATION        UVADJ1C.110    
     *,F3(U_FIELD)            !IN A CORIOLIS TERM SEE DOCUMENTATION        UVADJ1C.111    
     *,LONGITUDE_STEP_INVERSE !IN 1/LONGITUDE INCREMENT                    UVADJ1C.112    
     *,LATITUDE_STEP_INVERSE  !IN 1/LATITUDE INCREMENT                     UVADJ1C.113    
     *,ADJUSTMENT_TIMESTEP    !IN                                          UVADJ1C.114    
                                                                           UVADJ1C.115    
      REAL                                                                 UVADJ1C.116    
     * PHI_OUT(P_FIELD,P_LEVELS) !OUT. PHI DIAGNOSTIC                      UVADJ1C.117    
       REAL RECIP                                                          UVADJ1C.118    
                                                                           UVADJ1C.119    
C*---------------------------------------------------------------------    UVADJ1C.120    
                                                                           UVADJ1C.121    
C*L   DEFINE ARRAYS AND VARIABLES USED IN THIS ROUTINE-----------------    UVADJ1C.122    
C DEFINE LOCAL ARRAYS:                                                     UVADJ1C.123    
                                                                           UVADJ1C.124    
      REAL                                                                 UVADJ1C.125    
     * DPHI_BY_DLATITUDE(P_FIELD) !HOLDS HORIZONTAL PRESSURE GRADIENT      UVADJ1C.126    
     *                            !IN X-DIRECTION AT U POINTS              UVADJ1C.127    
     *,DPHI_BY_DLONGITUDE(P_FIELD)!HOLDS HORIZONTAL PRESSURE GRADIENT      UVADJ1C.128    
     *                            !IN Y-DIRECTION AT U POINTS              UVADJ1C.129    
     *,P(P_FIELD)                 !HOLDS PRESSURE AT A MODEL LEVEL         UVADJ1C.130    
     *,RECIP_RS_UV(U_FIELD,P_LEVELS)     !HOLDS 1/RS AT U POINTS           UVADJ1C.131    
     *,PHI_FULL_LEVEL(P_FIELD)    !HOLDS GEOPOTENTIAL AT A FULL LEVEL      UVADJ1C.132    
     *,PHI_HALF_LEVEL(P_FIELD)  !HOLDS GEOPOT AT A HALF LEVEL              UVADJ1C.133    
     *,DELTA_P_P_EXNER_BY_DELTAP(P_FIELD) !                                UVADJ1C.134    
                                                                           UVADJ1C.135    
      REAL                                                                 UVADJ1C.136    
     * THETAS(P_FIELD,P_LEVELS)   !HOLDS THETAV + MU*THETAS                UVADJ1C.137    
     *,TS(P_FIELD)                !HOLDS STANDARD TEMPERATURE              UVADJ1C.138    
     *,WORK_U(U_FIELD)            !GENERAL WORKSPACE FOR VARIABLES         UVADJ1C.139    
     *                            !AT U POINTS                             UVADJ1C.140    
     *,WORK_P(P_FIELD)            !GENERAL WORKSPACE FOR VARIABLES         UVADJ1C.141    
     *                            !AT P POINTS                             UVADJ1C.142    
*IF -DEF,GLOBAL                                                            UVADJ1C.143    
     *,U_TEMP_R(U_FIELD),V_TEMP_R(U_FIELD)                                 UVADJ1C.144    
     *,U_TEMP_L(U_FIELD),V_TEMP_L(U_FIELD)                                 UVADJ1C.145    
*ENDIF                                                                     UVADJ1C.146    
      INTEGER IP,IJP,J                                                     UVADJ1C.147    
                                                                           UVADJ1C.148    
C*---------------------------------------------------------------------    UVADJ1C.149    
C DEFINE LOCAL VARIABLES                                                   UVADJ1C.150    
      INTEGER POINTS  ! Number of points with valid part of field          UVADJ1C.151    
                                                                           UVADJ1C.152    
*IF DEF,MPP                                                                UVADJ1C.153    
*IF DEF,GLOBAL                                                             UVADJ1C.154    
      INTEGER info                                                         UVADJ1C.155    
*ELSE                                                                      UVADJ1C.156    
      INTEGER row_start_offset,row_end_offset                              UVADJ1C.157    
! offsets required to mark out the updatable area for LAM MPP code         UVADJ1C.158    
*ENDIF                                                                     UVADJ1C.159    
*ENDIF                                                                     UVADJ1C.160    
       REAL                                                                UVADJ1C.161    
     *  HALF_ADJUSTMENT_TIMESTEP                                           UVADJ1C.162    
     *, RECIP_G                                                            UVADJ1C.163    
*IF DEF,GLOBAL                                                             UVADJ1C.164    
      INTEGER np,sp  ! points in field refering to poles                   UVADJ1C.165    
      REAL                                                                 UVADJ1C.166    
     &  MU_NORTH_POLE(P_LEVELS)   ! MU at North Pole                       UVADJ1C.167    
     &, MU_SOUTH_POLE(P_LEVELS)   ! MU at South Pole                       UVADJ1C.168    
*ENDIF                                                                     UVADJ1C.169    
                                                                           UVADJ1C.170    
C COUNT VARIABLES FOR DO LOOPS ETC.                                        UVADJ1C.171    
      INTEGER                                                              UVADJ1C.172    
     *  I,IJ,IK,K,II,IX1                                                   UVADJ1C.173    
C WORK-SPACE SCALARS                                                       UVADJ1C.174    
      REAL                                                                 UVADJ1C.175    
     *  TEMP1,TEMP2                                                        UVADJ1C.176    
     * ,PKP1,PK               ! Pressures at half levels k+1 and k         UVADJ1C.177    
     * ,c1,c2,WORK_V                                                       UVADJ1C.178    
C LOGICAL VARIABLE                                                         UVADJ1C.179    
      LOGICAL                                                              UVADJ1C.180    
     *  CONSTANT_PRESSURE     ! TRUE IF ON A CONSTANT PRESSURE SURFACE     UVADJ1C.181    
                                                                           UVADJ1C.182    
C*L   EXTERNAL SUBROUTINE CALLS:---------------------------------------    UVADJ1C.183    
                                                                           UVADJ1C.184    
      EXTERNAL P_TO_UV,POLAR_UV,UV_TO_P                                    UVADJ1C.185    
     *         ,CALC_TS,CALC_RS                                            UVADJ1C.186    
C*---------------------------------------------------------------------    UVADJ1C.187    
CL CALL COMDECK TO OBTAIN CONSTANTS USED.                                  UVADJ1C.188    
                                                                           UVADJ1C.189    
*CALL C_UVADJ                                                              UVADJ1C.190    
                                                                           UVADJ1C.191    
CL    MAXIMUM VECTOR LENGTH ASSUMED IS P_FIELD                             UVADJ1C.192    
CL---------------------------------------------------------------------    UVADJ1C.193    
CL    INTERNAL STRUCTURE INCLUDING SUBROUTINE CALLS:                       UVADJ1C.194    
CL---------------------------------------------------------------------    UVADJ1C.195    
CL                                                                         UVADJ1C.196    
*CALL P_EXNERC                                                             UVADJ1C.197    
                                                                           UVADJ1C.198    
CL---------------------------------------------------------------------    UVADJ1C.199    
CL    SECTION 1.    INITIALISATION                                         UVADJ1C.200    
CL---------------------------------------------------------------------    UVADJ1C.201    
C INCLUDE LOCAL CONSTANTS FROM GENERAL CONSTANTS BLOCK                     UVADJ1C.202    
                                                                           UVADJ1C.203    
      POINTS=LAST_P_VALID_PT-FIRST_VALID_PT+1                              UVADJ1C.204    
! Number of points to be processed by CALC_RS/TS. For non-MPP runs         UVADJ1C.205    
! this is simply P_FIELD, for MPP, it is all the points, minus any         UVADJ1C.206    
! unused halo areas (ie. the halo above North pole row, and beneath        UVADJ1C.207    
! South pole row)                                                          UVADJ1C.208    
                                                                           UVADJ1C.209    
      HALF_ADJUSTMENT_TIMESTEP = ADJUSTMENT_TIMESTEP*.5                    UVADJ1C.210    
      RECIP_G = 1./G                                                       UVADJ1C.211    
                                                                           UVADJ1C.212    
! Initialise work arrays                                                   UVADJ1C.213    
! cdir$ cache_bypass WORK_U                                                GSM4F405.4      
        DO I=1,U_FIELD                                                     UVADJ1C.215    
          WORK_U(I)=0.0                                                    UVADJ1C.216    
        ENDDO                                                              UVADJ1C.217    
! cdir$ cache_bypass WORK_P                                                GSM4F405.5      
        DO I=1,P_FIELD                                                     UVADJ1C.219    
          WORK_P(I)=0.0                                                    UVADJ1C.220    
        ENDDO                                                              UVADJ1C.221    
                                                                           UVADJ1C.222    
CL LOOP OVER ALL PRESSURE LEVELS.                                          UVADJ1C.223    
                                                                           UVADJ1C.224    
      DO K=1,P_LEVELS                                                      UVADJ1C.225    
                                                                           UVADJ1C.226    
CL---------------------------------------------------------------------    UVADJ1C.227    
CL   IF (.NOT.LWHITBROM) THEN                                              UVADJ1C.228    
CL    SECTION 2.    STORE RADIUS OF EARTH IN HORIZONTAL FIELD.             UVADJ1C.229    
CL   ELSE                                                                  UVADJ1C.230    
CL    SECTION 2.    CALCULATE RS AT LEVEL K.                               UVADJ1C.231    
CL   END IF                                                                UVADJ1C.232    
CL---------------------------------------------------------------------    UVADJ1C.233    
                                                                           UVADJ1C.234    
C----------------------------------------------------------------------    UVADJ1C.235    
CL   IF (.NOT.LWHITBROM) THEN                                              UVADJ1C.236    
CL    SECTION 2.1.  STORE RADIUS OF EARTH IN HORIZONTAL FIELD.             UVADJ1C.237    
CL   ELSE                                                                  UVADJ1C.238    
CL    SECTION 2.1.  CALL CALC_RS TO GET RS ON FIRST CALL ONLY.             UVADJ1C.239    
CL                  ALSO RETURNS TS SAVING CALL TO CALC_TS IN 3.4          UVADJ1C.240    
CL   END IF                                                                UVADJ1C.241    
C----------------------------------------------------------------------    UVADJ1C.242    
                                                                           UVADJ1C.243    
      IF (.NOT.LWHITBROM) THEN                                             UVADJ1C.244    
! loop over all points, including valid halos                              UVADJ1C.245    
        DO 210 I=1,P_FIELD                                                 UVADJ1C.246    
          RS(I,K) = A                                                      UVADJ1C.247    
          RECIP_RS_UV(I,K) = 1.0                                           UVADJ1C.248    
 210    CONTINUE                                                           UVADJ1C.249    
      ELSE                                                                 UVADJ1C.250    
        IF(CALL_NUMBER.EQ.1) THEN                                          UVADJ1C.251    
                                                                           UVADJ1C.252    
! Initialise RS so that P_TO_UV works in MPP mode                          UVADJ1C.253    
          DO I=1,FIRST_VALID_PT-1                                          UVADJ1C.254    
            RS(I,K)=1.0                                                    UVADJ1C.255    
          ENDDO                                                            UVADJ1C.256    
          DO I=FIRST_VALID_PT+POINTS-1,P_FIELD                             UVADJ1C.257    
            RS(I,K)=1.0                                                    UVADJ1C.258    
          ENDDO                                                            UVADJ1C.259    
                                                                           UVADJ1C.260    
          IF(K.NE.1) THEN                                                  UVADJ1C.261    
            CALL CALC_RS(PSTAR(FIRST_VALID_PT),AK,BK,TS(FIRST_VALID_PT),   UVADJ1C.262    
     &                   RS(FIRST_VALID_PT,K-1),                           UVADJ1C.263    
     &                   RS(FIRST_VALID_PT,K),                             UVADJ1C.264    
     &                   POINTS,K,P_LEVELS,LLINTS)                         UVADJ1C.265    
          ELSE                                                             UVADJ1C.266    
C IF LEVEL 1 CALC_RS NEEDS A DUMMY ARRAY IN PLACE OF RS( ,K-1)             UVADJ1C.267    
            CALL CALC_RS(PSTAR(FIRST_VALID_PT),AK,BK,TS(FIRST_VALID_PT),   UVADJ1C.268    
     &                   RS(FIRST_VALID_PT,K+1),                           UVADJ1C.269    
     &                   RS(FIRST_VALID_PT,K),                             UVADJ1C.270    
     &                   POINTS,K,P_LEVELS,LLINTS)                         UVADJ1C.271    
          END IF                                                           UVADJ1C.272    
        END IF                                                             UVADJ1C.273    
      ENDIF ! LWHITBROM                                                    UVADJ1C.274    
                                                                           UVADJ1C.275    
C----------------------------------------------------------------------    UVADJ1C.276    
CL   IF (.NOT.LWHITBROM) THEN                                              UVADJ1C.277    
CL    SECTION 2.2.  STORE 1./RADIUS OF EARTH IN HORIZONTAL FIELD.          UVADJ1C.278    
CL   ELSE                                                                  UVADJ1C.279    
CL    SECTION 2.2.  CALL P_TO_UV TO GET RS AT U POINTS.                    UVADJ1C.280    
CL   END IF                                                                UVADJ1C.281    
C----------------------------------------------------------------------    UVADJ1C.282    
                                                                           UVADJ1C.283    
      IF (.NOT.LWHITBROM) THEN                                             UVADJ1C.284    
! loop over all points, including valid halos                              UVADJ1C.285    
         DO 220 I=FIRST_VALID_PT,LAST_U_VALID_PT                           UVADJ1C.286    
            RECIP_RS_UV(I,K) = 1./A                                        UVADJ1C.287    
 220     CONTINUE                                                          UVADJ1C.288    
      ELSE                                                                 UVADJ1C.289    
C STORE RS AT U POINTS IN RECIP_RS_UV                                      UVADJ1C.290    
                                                                           UVADJ1C.291    
         CALL P_TO_UV(RS(1,K),RECIP_RS_UV(1,K),P_FIELD,                    UVADJ1C.292    
     &                U_FIELD,ROW_LENGTH,tot_P_ROWS)                       UVADJ1C.293    
                                                                           UVADJ1C.294    
      ENDIF                                                                UVADJ1C.295    
      ENDDO                                                                UVADJ1C.296    
*IF DEF,MPP                                                                UVADJ1C.297    
      IF (LWHITBROM) THEN                                                  UVADJ1C.298    
        CALL SWAPBOUNDS(RECIP_RS_UV,ROW_LENGTH,tot_P_ROWS,                 UVADJ1C.299    
     &                  EW_Halo,NS_Halo,P_LEVELS)                          UVADJ1C.300    
      ENDIF                                                                UVADJ1C.301    
*ENDIF                                                                     UVADJ1C.302    
CL---------------------------------------------------------------------    UVADJ1C.303    
CL    SECTION 3.    CALCULATE PHI AT LEVEL K-1/2, EXNER AT LEVEL K,        UVADJ1C.304    
CL   IF (.NOT.LWHITBROM) THEN                                              UVADJ1C.305    
CL                  AND THETAV.                                            UVADJ1C.306    
CL   ELSE                                                                  UVADJ1C.307    
CL                  AND THETAV + MU * THETAS AT LEVEL K.                   UVADJ1C.308    
CL   END IF                                                                UVADJ1C.309    
CL---------------------------------------------------------------------    UVADJ1C.310    
*IF DEF,GLOBAL                                                             UVADJ1C.311    
! Set up array of MU values at poles for use in section 3.5                UVADJ1C.312    
! put into north_pole_mu(level) and south_pole_mu(level)                   UVADJ1C.313    
      IF (LWHITBROM) THEN                                                  UVADJ1C.314    
! North Pole first                                                         UVADJ1C.315    
*IF DEF,MPP                                                                UVADJ1C.316    
        IF (MY_PROC_ID .EQ. NP_PROC_ID) THEN                               UVADJ1C.317    
*ENDIF                                                                     UVADJ1C.318    
        np=TOP_ROW_START+FIRST_ROW_PT-1                                    UVADJ1C.319    
        DO K=1,P_LEVELS                                                    UVADJ1C.320    
          MU_NORTH_POLE(K)=(U(np,K)*U(np,K)+V(np,K)*V(np,K))/              UVADJ1C.321    
     &                      RS(np,K)*RECIP_G                               UVADJ1C.322    
        ENDDO                                                              UVADJ1C.323    
*IF DEF,MPP                                                                UVADJ1C.324    
        ENDIF                                                              UVADJ1C.325    
        IF (at_top_of_LPG) THEN                                            UVADJ1C.326    
! Send this array to everyone on top processor row                         UVADJ1C.327    
          CALL GCG_RBCAST(123,P_LEVELS,NP_PROC_ID,                         UVADJ1C.328    
     &                    GC_ROW_GROUP,info,MU_NORTH_POLE)                 UVADJ1C.329    
        ENDIF                                                              UVADJ1C.330    
*ENDIF                                                                     UVADJ1C.331    
                                                                           UVADJ1C.332    
! And now the South Pole                                                   UVADJ1C.333    
*IF DEF,MPP                                                                UVADJ1C.334    
        IF (MY_PROC_ID .EQ. SP_PROC_ID) THEN                               UVADJ1C.335    
*ENDIF                                                                     UVADJ1C.336    
        sp=U_BOT_ROW_START+LAST_ROW_PT-1                                   UVADJ1C.337    
        DO K=1,P_LEVELS                                                    UVADJ1C.338    
          MU_SOUTH_POLE(K)=(U(sp,K)*U(sp,K)+V(sp,K)*V(sp,K))/              UVADJ1C.339    
     &                      RS(sp+ROW_LENGTH,K)*RECIP_G                    UVADJ1C.340    
        ENDDO                                                              UVADJ1C.341    
*IF DEF,MPP                                                                UVADJ1C.342    
        ENDIF                                                              UVADJ1C.343    
        IF (at_base_of_LPG) THEN                                           UVADJ1C.344    
! Send this array to everyone on bottom processor row                      UVADJ1C.345    
          CALL GCG_RBCAST(321,P_LEVELS,SP_PROC_ID,                         UVADJ1C.346    
     &                    GC_ROW_GROUP,info,MU_SOUTH_POLE)                 UVADJ1C.347    
        ENDIF                                                              UVADJ1C.348    
*ENDIF                                                                     UVADJ1C.349    
      ENDIF ! IF (LWHITBROM)                                               UVADJ1C.350    
*ENDIF                                                                     UVADJ1C.351    
                                                                           UVADJ1C.352    
      DO K=1,P_LEVELS                                                      UVADJ1C.353    
                                                                           UVADJ1C.354    
      IF (LWHITBROM) THEN                                                  UVADJ1C.355    
C----------------------------------------------------------------------    UVADJ1C.356    
CL    SECTION 3.3.  CALCULATES PRESSURE AT LEVEL K NEEDED FOR CALL         UVADJ1C.357    
CL                  TO CALC_TS. PERFORMED ONLY IF CALL_NUMBER > 1.         UVADJ1C.358    
C----------------------------------------------------------------------    UVADJ1C.359    
                                                                           UVADJ1C.360    
          IF(BK(K).EQ.0.) THEN                                             UVADJ1C.361    
C SET CONSTANT_PRESSURE BEFORE CALL TO TS AND P AT START ADDRESS AS        UVADJ1C.362    
C THIS IS ALL TS NEEDS IN THIS CASE.                                       UVADJ1C.363    
            CONSTANT_PRESSURE = .TRUE.                                     UVADJ1C.364    
            P(FIRST_VALID_PT) = AK(K)                                      UVADJ1C.365    
          ELSE                                                             UVADJ1C.366    
C SET CONSTANT_PRESSURE BEFORE CALL TO TS AND P.                           UVADJ1C.367    
! loop over all points, including valid halos                              UVADJ1C.368    
            DO 330 I=FIRST_VALID_PT,LAST_P_VALID_PT                        UVADJ1C.369    
              P(I) = AK(K) + BK(K)*PSTAR(I)                                UVADJ1C.370    
 330        CONTINUE                                                       UVADJ1C.371    
            CONSTANT_PRESSURE = .FALSE.                                    UVADJ1C.372    
          END IF                                                           UVADJ1C.373    
                                                                           UVADJ1C.374    
C----------------------------------------------------------------------    UVADJ1C.375    
CL    SECTION 3.4.  CALL CALC_TS TO GET STANDARD TEMPERATURE.              UVADJ1C.376    
CL                  ONLY CALLED IF CALL_NUMBER GREATER THAN 1              UVADJ1C.377    
CL                  AS TS CALCULATED IN SECTION 2.1 ON CALL_NUMBER 1.      UVADJ1C.378    
CL                  THEN CALCULATE THETAS BY DIVIDING BY EXNER.            UVADJ1C.379    
C----------------------------------------------------------------------    UVADJ1C.380    
C EXNER AT LEVEL K IS IN WORK_P                                            UVADJ1C.381    
                                                                           UVADJ1C.382    
          CALL CALC_TS(P(FIRST_VALID_PT),TS(FIRST_VALID_PT),POINTS,        UVADJ1C.383    
     &                 CONSTANT_PRESSURE,LLINTS)                           UVADJ1C.384    
                                                                           UVADJ1C.385    
C       Convert TS to THETAS                                               UVADJ1C.386    
! loop over all valid points - including top and bottom halos              UVADJ1C.387    
        DO 340 I=FIRST_VALID_PT,LAST_P_VALID_PT                            UVADJ1C.388    
            PKP1 = AKH(K+1) + BKH(K+1)*PSTAR(I)                            UVADJ1C.389    
            PK   = AKH(K)   + BKH(K)  *PSTAR(I)                            UVADJ1C.390    
            WORK_P(I) = R_P_EXNER_C                                        UVADJ1C.391    
     +      (P_EXNER(I,K+1),P_EXNER(I,K),PKP1,PK,KAPPA)                    UVADJ1C.392    
          THETAS(I,K) = TS(I)*WORK_P(I)                                    UVADJ1C.393    
 340    CONTINUE                                                           UVADJ1C.394    
                                                                           UVADJ1C.395    
C----------------------------------------------------------------------    UVADJ1C.396    
CL    SECTION 3.5.  CALCULATE MU                                           UVADJ1C.397    
CL                  CALCULATE 1/RS AT U POINTS.                            UVADJ1C.398    
C----------------------------------------------------------------------    UVADJ1C.399    
                                                                           UVADJ1C.400    
C MU IS CALCULATED AT U POINTS AND HELD IN WORK_U                          UVADJ1C.401    
! loop over all points, including valid halos                              UVADJ1C.402    
        DO 350 I=FIRST_VALID_PT,LAST_U_VALID_PT                            UVADJ1C.403    
            RECIP_RS_UV(I,K)=1.0/RECIP_RS_UV(I,K)                          UVADJ1C.404    
            WORK_U(I) = (F2(I)*U(I,K) - F1(I)*V(I,K) +                     UVADJ1C.405    
     *              (U(I,K)*U(I,K)+V(I,K)*V(I,K))*RECIP_RS_UV(I,K))*       UVADJ1C.406    
     *              RECIP_G                                                UVADJ1C.407    
 350    CONTINUE                                                           UVADJ1C.408    
C CALL UV_TO_P TO INTERPOLATE MU ONTO P-GRID HELD IN WORK_P                UVADJ1C.409    
                                                                           UVADJ1C.410    
        CALL UV_TO_P(WORK_U(START_POINT_NO_HALO-ROW_LENGTH),               UVADJ1C.411    
     &               WORK_P(START_POINT_NO_HALO),                          UVADJ1C.412    
     &               U_FIELD-(START_POINT_NO_HALO-ROW_LENGTH)+1,           UVADJ1C.413    
     &               P_FIELD-START_POINT_NO_HALO+1,                        UVADJ1C.414    
     &               ROW_LENGTH,upd_P_ROWS+1)                              UVADJ1C.415    
                                                                           UVADJ1C.416    
*IF DEF,GLOBAL                                                             UVADJ1C.417    
! Set WORK at poles to MU                                                  UVADJ1C.418    
*ELSE                                                                      UVADJ1C.419    
! Set WORK at North and South edges to one row in                          UVADJ1C.420    
*ENDIF                                                                     UVADJ1C.421    
*IF DEF,MPP                                                                UVADJ1C.422    
        IF (at_top_of_LPG) THEN                                            UVADJ1C.423    
*ENDIF                                                                     UVADJ1C.424    
          DO I=TOP_ROW_START,TOP_ROW_START+ROW_LENGTH-1                    UVADJ1C.425    
*IF DEF,GLOBAL                                                             UVADJ1C.426    
            WORK_P(I) = MU_NORTH_POLE(K)                                   UVADJ1C.427    
*ELSE                                                                      UVADJ1C.428    
            WORK_P(I) = WORK_P(I+ROW_LENGTH)                               UVADJ1C.429    
*ENDIF                                                                     UVADJ1C.430    
          ENDDO                                                            UVADJ1C.431    
*IF DEF,MPP                                                                UVADJ1C.432    
        ENDIF                                                              UVADJ1C.433    
        IF (at_base_of_LPG) THEN                                           UVADJ1C.434    
*ENDIF                                                                     UVADJ1C.435    
          DO I=P_BOT_ROW_START,P_BOT_ROW_START+ROW_LENGTH-1                UVADJ1C.436    
*IF DEF,GLOBAL                                                             UVADJ1C.437    
            WORK_P(I) = MU_SOUTH_POLE(K)                                   UVADJ1C.438    
*ELSE                                                                      UVADJ1C.439    
            WORK_P(I) = WORK_P(I-ROW_LENGTH)                               UVADJ1C.440    
*ENDIF                                                                     UVADJ1C.441    
          ENDDO                                                            UVADJ1C.442    
*IF DEF,MPP                                                                UVADJ1C.443    
        ENDIF                                                              UVADJ1C.444    
*ENDIF                                                                     UVADJ1C.445    
                                                                           UVADJ1C.446    
C----------------------------------------------------------------------    UVADJ1C.447    
CL    SECTION 3.6.  CALCULATE THETAV + MU * THETAS                         UVADJ1C.448    
C----------------------------------------------------------------------    UVADJ1C.449    
                                                                           UVADJ1C.450    
        IF(K.LE.Q_LEVELS) THEN                                             UVADJ1C.451    
! loop over all points - including top and bottom halos                    UVADJ1C.452    
        DO 360 I=FIRST_VALID_PT,LAST_P_VALID_PT                            UVADJ1C.453    
            THETAS(I,K) = THETA(I,K)*(1.+ C_VIRTUAL                        UVADJ1C.454    
     *                     *Q(I,K))+ WORK_P(I)*THETAS(I,K)                 UVADJ1C.455    
 360      CONTINUE                                                         UVADJ1C.456    
        ELSE                                                               UVADJ1C.457    
! loop over all points - including top and bottom halos                    UVADJ1C.458    
        DO 362 I=FIRST_VALID_PT,LAST_P_VALID_PT                            UVADJ1C.459    
            THETAS(I,K) = THETA(I,K) + WORK_P(I)*THETAS(I,K)               UVADJ1C.460    
 362      CONTINUE                                                         UVADJ1C.461    
        END IF                                                             UVADJ1C.462    
                                                                           UVADJ1C.463    
      ELSE      !   LWHITBROM                                              UVADJ1C.464    
                                                                           UVADJ1C.465    
C----------------------------------------------------------------------    UVADJ1C.466    
CL    SECTION 3.3.  CALCULATE THETAV                                       UVADJ1C.467    
C----------------------------------------------------------------------    UVADJ1C.468    
                                                                           UVADJ1C.469    
        IF(K.LE.Q_LEVELS) THEN                                             UVADJ1C.470    
! loop over all points, including valid halos                              UVADJ1C.471    
        DO 460 I=FIRST_VALID_PT,LAST_P_VALID_PT                            UVADJ1C.472    
            THETAS(I,K) = THETA(I,K)*(1.+ C_VIRTUAL                        UVADJ1C.473    
     *                     *Q(I,K))                                        UVADJ1C.474    
 460      CONTINUE                                                         UVADJ1C.475    
        ELSE                                                               UVADJ1C.476    
! loop over all points, including valid halos                              UVADJ1C.477    
        DO 462 I=FIRST_VALID_PT,LAST_P_VALID_PT                            UVADJ1C.478    
            THETAS(I,K) = THETA(I,K)                                       UVADJ1C.479    
 462      CONTINUE                                                         UVADJ1C.480    
        END IF                                                             UVADJ1C.481    
                                                                           UVADJ1C.482    
      END IF    !   LWHITBROM                                              UVADJ1C.483    
                                                                           UVADJ1C.484    
                                                                           UVADJ1C.485    
      ENDDO                                                                UVADJ1C.486    
                                                                           UVADJ1C.487    
*IF DEF,MPP                                                                UVADJ1C.488    
      IF (LWHITBROM) THEN                                                  UVADJ1C.489    
        CALL SWAPBOUNDS(THETAS,ROW_LENGTH,tot_P_ROWS,                      UVADJ1C.490    
     &                  EW_Halo,NS_Halo,P_LEVELS)                          UVADJ1C.491    
      ENDIF                                                                UVADJ1C.492    
*ENDIF                                                                     UVADJ1C.493    
                                                                           UVADJ1C.494    
        c1=.5*LONGITUDE_STEP_INVERSE*ADJUSTMENT_TIMESTEP                   UVADJ1C.495    
        c2=.5*LATITUDE_STEP_INVERSE*ADJUSTMENT_TIMESTEP                    UVADJ1C.496    
                                                                           UVADJ1C.497    
      DO 110 K=1,P_LEVELS                                                  UVADJ1C.498    
                                                                           UVADJ1C.499    
CL---------------------------------------------------------------------    UVADJ1C.500    
CL    SECTION 4.    CALCULATE PHI AT LEVEL K, EQUATION (26).               UVADJ1C.501    
CL---------------------------------------------------------------------    UVADJ1C.502    
C----------------------------------------------------------------------    UVADJ1C.503    
CL    SECTION 4.1.  CALCULATE PHI AT LEVEL K                               UVADJ1C.504    
C----------------------------------------------------------------------    UVADJ1C.505    
        TEMP2 = 1./(KAPPA+1.)                                              UVADJ1C.506    
                                                                           UVADJ1C.507    
      if(k.ne.1)then                                                       UVADJ1C.508    
                                                                           UVADJ1C.509    
cdir$ nosplit                                                              UVADJ1C.510    
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                UVADJ1C.511    
         PHI_HALF_LEVEL(I) = PHI_HALF_LEVEL(I)                             UVADJ1C.512    
     &                           -CP*THETAS(I,K-1)*                        UVADJ1C.513    
     &                            (P_EXNER(I,K) - P_EXNER(I,K-1) )         UVADJ1C.514    
      ENDDO                                                                UVADJ1C.515    
cdir$ nosplit                                                              UVADJ1C.516    
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                UVADJ1C.517    
         TEMP1= 1.0/(DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))                     UVADJ1C.518    
          DELTA_P_P_EXNER_BY_DELTAP(I) = (P_EXNER(I,K+1)*                  UVADJ1C.519    
     *        (AKH(K+1)+BKH(K+1)*PSTAR(I)) -                               UVADJ1C.520    
     *        P_EXNER(I,K)*(AKH(K)+BKH(K)*PSTAR(I)))                       UVADJ1C.521    
     *        *TEMP1*TEMP2                                                 UVADJ1C.522    
      ENDDO                                                                UVADJ1C.523    
                                                                           UVADJ1C.524    
cdir$ nosplit                                                              UVADJ1C.525    
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                UVADJ1C.526    
         PHI_FULL_LEVEL(I) = PHI_HALF_LEVEL(I) + CP*THETAS(I,K)*           UVADJ1C.527    
     *              (P_EXNER(I,K) - DELTA_P_P_EXNER_BY_DELTAP(I))          UVADJ1C.528    
      ENDDO                                                                UVADJ1C.529    
                                                                           UVADJ1C.530    
      else if(k.eq.1)then                                                  UVADJ1C.531    
                                                                           UVADJ1C.532    
cdir$ nosplit                                                              UVADJ1C.533    
! loop over all points, including valid halos                              UVADJ1C.534    
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                UVADJ1C.535    
                                                                           UVADJ1C.536    
        PHI_HALF_LEVEL(I) = OROG_HEIGHT(I) * G                             UVADJ1C.537    
      ENDDO                                                                UVADJ1C.538    
cdir$ nosplit                                                              UVADJ1C.539    
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                UVADJ1C.540    
         TEMP1= 1.0/(DELTA_AK(K)+DELTA_BK(K)*PSTAR(I))                     UVADJ1C.541    
         DELTA_P_P_EXNER_BY_DELTAP(I) = (P_EXNER(I,K+1)*                   UVADJ1C.542    
     *        (AKH(K+1)+BKH(K+1)*PSTAR(I)) -                               UVADJ1C.543    
     *        P_EXNER(I,K)*(AKH(K)+BKH(K)*PSTAR(I)))                       UVADJ1C.544    
     *        *TEMP1*TEMP2                                                 UVADJ1C.545    
      ENDDO                                                                UVADJ1C.546    
cdir$ nosplit                                                              UVADJ1C.547    
        DO I=FIRST_VALID_PT,LAST_P_VALID_PT                                UVADJ1C.548    
         PHI_FULL_LEVEL(I) = PHI_HALF_LEVEL(I) + CP*THETAS(I,K)*           UVADJ1C.549    
     *              (P_EXNER(I,K) - DELTA_P_P_EXNER_BY_DELTAP(I))          UVADJ1C.550    
        ENDDO                                                              UVADJ1C.551    
                                                                           UVADJ1C.552    
       endif                                                               UVADJ1C.553    
                                                                           UVADJ1C.554    
CL    COPY PHI_FULL_LEVEL INTO OUTPUT ARRAY IF DIAGNOSTIC REQUIRED.        UVADJ1C.555    
                                                                           UVADJ1C.556    
        IF(L_PHI_OUT) THEN                                                 UVADJ1C.557    
! loop over all points, including valid halos                              UVADJ1C.558    
          DO I=FIRST_VALID_PT,LAST_P_VALID_PT                              UVADJ1C.559    
            PHI_OUT(I,K) = PHI_FULL_LEVEL(I)                               UVADJ1C.560    
          END DO                                                           UVADJ1C.561    
*IF DEF,MPP                                                                UVADJ1C.562    
! Initialise whole array so there are no NaNs for STASH to fall            UVADJ1C.563    
! over on                                                                  UVADJ1C.564    
          DO I=1,FIRST_VALID_PT-1                                          UVADJ1C.565    
            PHI_OUT(I,K)=PHI_OUT(FIRST_VALID_PT,K)                         UVADJ1C.566    
          ENDDO                                                            UVADJ1C.567    
          DO I=LAST_P_VALID_PT+1,P_FIELD                                   UVADJ1C.568    
            PHI_OUT(I,K)=PHI_OUT(LAST_P_VALID_PT,K)                        UVADJ1C.569    
          ENDDO                                                            UVADJ1C.570    
*ENDIF                                                                     UVADJ1C.571    
        END IF                                                             UVADJ1C.572    
CL---------------------------------------------------------------------    UVADJ1C.573    
CL    SECTION 5.    CALCULATE HORIZONTAL PRESSURE GRADIENTS.               UVADJ1C.574    
CL                  THEN CALCULATE CORIOLIS TERM AND IMPLICITLY UPDATE     UVADJ1C.575    
CL                  U AND V. EQUATIONS (23) TO (25).                       UVADJ1C.576    
CL---------------------------------------------------------------------    UVADJ1C.577    
                                                                           UVADJ1C.578    
*IF -DEF,GLOBAL                                                            UVADJ1C.579    
                                                                           UVADJ1C.580    
CL Save East and West edges so that they are held constant in LAM mode     UVADJ1C.581    
                                                                           UVADJ1C.582    
*IF DEF,MPP                                                                UVADJ1C.583    
        IF (at_left_of_LPG) THEN                                           UVADJ1C.584    
*ENDIF                                                                     UVADJ1C.585    
        DO I=START_POINT_NO_HALO + FIRST_ROW_PT-1,                         UVADJ1C.586    
     &       END_U_POINT_NO_HALO,ROW_LENGTH                                UVADJ1C.587    
        U_TEMP_L(I)=U(I,K)                                                 UVADJ1C.588    
        V_TEMP_L(I)=V(I,K)                                                 UVADJ1C.589    
        ENDDO                                                              UVADJ1C.590    
*IF DEF,MPP                                                                UVADJ1C.591    
        ENDIF                                                              UVADJ1C.592    
        IF (at_right_of_LPG) THEN                                          UVADJ1C.593    
*ENDIF                                                                     UVADJ1C.594    
        DO I=START_POINT_NO_HALO + LAST_ROW_PT-1,                          UVADJ1C.595    
     &       END_U_POINT_NO_HALO,ROW_LENGTH                                UVADJ1C.596    
        U_TEMP_R(I)=U(I,K)                                                 UVADJ1C.597    
        V_TEMP_R(I)=V(I,K)                                                 UVADJ1C.598    
        U_TEMP_R(I-1)=U(I-1,K)                                             UVADJ1C.599    
        V_TEMP_R(I-1)=V(I-1,K)                                             UVADJ1C.600    
          ENDDO                                                            UVADJ1C.601    
*IF DEF,MPP                                                                UVADJ1C.602    
        ENDIF                                                              UVADJ1C.603    
*ENDIF                                                                     UVADJ1C.604    
*ENDIF                                                                     UVADJ1C.605    
                                                                           UVADJ1C.606    
                                                                           UVADJ1C.607    
C----------------------------------------------------------------------    UVADJ1C.608    
CL    SECTION 5.1.  CALCULATE HORIZONTAL PRESSURE GRADIENT,                UVADJ1C.609    
CL                  D(PHI)/D(LONGITUDE).                                   UVADJ1C.610    
C----------------------------------------------------------------------    UVADJ1C.611    
C----------------------------------------------------------------------    UVADJ1C.612    
CL    SECTION 5.2.  CALCULATE HORIZONTAL PRESSURE GRADIENT,                UVADJ1C.613    
CL                  D(PHI)/D(LATITUDE).                                    UVADJ1C.614    
C----------------------------------------------------------------------    UVADJ1C.615    
C                                                                          UVADJ1C.616    
C                                                                          UVADJ1C.617    
                                                                           UVADJ1C.618    
C The following loop is unrolled to level 2 by hand since the compiler     UVADJ1C.619    
C is not able to do this at present.                                       UVADJ1C.620    
C                                                                          UVADJ1C.621    
cdir$ nosplit                                                              UVADJ1C.622    
      IX1=IAND(MAX(END_U_POINT_NO_HALO-START_POINT_NO_HALO,0),1)           UVADJ1C.623    
      IF (IX1 .EQ. 1)THEN                                                  UVADJ1C.624    
          I=START_POINT_NO_HALO                                            UVADJ1C.625    
          IJ = I + ROW_LENGTH                                              UVADJ1C.626    
          DPHI_BY_DLONGITUDE(i) = c1*SEC_U_LATITUDE(I)*(                   UVADJ1C.627    
     *                ((PHI_FULL_LEVEL(I+1)- PHI_FULL_LEVEL(I))+           UVADJ1C.628    
     *                 (PHI_FULL_LEVEL(IJ+1)-PHI_FULL_LEVEL(IJ)))+         UVADJ1C.629    
     *     .5*CP*(((THETAS(I+1,K)+THETAS(I,K))                             UVADJ1C.630    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(I+1) -                 UVADJ1C.631    
     *                    DELTA_P_P_EXNER_BY_DELTAP(I)))+                  UVADJ1C.632    
     *           ((THETAS(IJ+1,K)+THETAS(IJ,K))                            UVADJ1C.633    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(IJ+1) -                UVADJ1C.634    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ)))))                UVADJ1C.635    
          DPHI_BY_DLATITUDE(i) = c2*(                                      UVADJ1C.636    
     *                ((PHI_FULL_LEVEL(I)-PHI_FULL_LEVEL(IJ))+             UVADJ1C.637    
     *                 (PHI_FULL_LEVEL(I+1)-PHI_FULL_LEVEL(IJ+1)))+        UVADJ1C.638    
     *     .5*CP*(((THETAS(I,K)+THETAS(IJ,K))                              UVADJ1C.639    
     *                 *(DELTA_P_P_EXNER_BY_DELTAP(I) -                    UVADJ1C.640    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ)))+                 UVADJ1C.641    
     *           ((THETAS(I+1,K)+THETAS(IJ+1,K))                           UVADJ1C.642    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(I+1) -                 UVADJ1C.643    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ+1)))))              UVADJ1C.644    
      ENDIF                                                                UVADJ1C.645    
        DO II=IX1 + START_POINT_NO_HALO,END_U_POINT_NO_HALO-1,2            UVADJ1C.646    
          I = II                                                           UVADJ1C.647    
          IJ = I + ROW_LENGTH                                              UVADJ1C.648    
          DPHI_BY_DLONGITUDE(i) = c1*SEC_U_LATITUDE(I)*(                   UVADJ1C.649    
     *                ((PHI_FULL_LEVEL(I+1)- PHI_FULL_LEVEL(I))+           UVADJ1C.650    
     *                 (PHI_FULL_LEVEL(IJ+1)-PHI_FULL_LEVEL(IJ)))+         UVADJ1C.651    
     *     .5*CP*(((THETAS(I+1,K)+THETAS(I,K))                             UVADJ1C.652    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(I+1) -                 UVADJ1C.653    
     *                    DELTA_P_P_EXNER_BY_DELTAP(I)))+                  UVADJ1C.654    
     *           ((THETAS(IJ+1,K)+THETAS(IJ,K))                            UVADJ1C.655    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(IJ+1) -                UVADJ1C.656    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ)))))                UVADJ1C.657    
          DPHI_BY_DLATITUDE(i) = c2*(                                      UVADJ1C.658    
     *                ((PHI_FULL_LEVEL(I)-PHI_FULL_LEVEL(IJ))+             UVADJ1C.659    
     *                 (PHI_FULL_LEVEL(I+1)-PHI_FULL_LEVEL(IJ+1)))+        UVADJ1C.660    
     *     .5*CP*(((THETAS(I,K)+THETAS(IJ,K))                              UVADJ1C.661    
     *                 *(DELTA_P_P_EXNER_BY_DELTAP(I) -                    UVADJ1C.662    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ)))+                 UVADJ1C.663    
     *           ((THETAS(I+1,K)+THETAS(IJ+1,K))                           UVADJ1C.664    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(I+1) -                 UVADJ1C.665    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ+1)))))              UVADJ1C.666    
          I = II + 1                                                       UVADJ1C.667    
          IJ = I + ROW_LENGTH                                              UVADJ1C.668    
          DPHI_BY_DLONGITUDE(i) = c1*SEC_U_LATITUDE(I)*(                   UVADJ1C.669    
     *                ((PHI_FULL_LEVEL(I+1)- PHI_FULL_LEVEL(I))+           UVADJ1C.670    
     *                 (PHI_FULL_LEVEL(IJ+1)-PHI_FULL_LEVEL(IJ)))+         UVADJ1C.671    
     *     .5*CP*(((THETAS(I+1,K)+THETAS(I,K))                             UVADJ1C.672    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(I+1) -                 UVADJ1C.673    
     *                    DELTA_P_P_EXNER_BY_DELTAP(I)))+                  UVADJ1C.674    
     *           ((THETAS(IJ+1,K)+THETAS(IJ,K))                            UVADJ1C.675    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(IJ+1) -                UVADJ1C.676    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ)))))                UVADJ1C.677    
          DPHI_BY_DLATITUDE(i) = c2*(                                      UVADJ1C.678    
     *                ((PHI_FULL_LEVEL(I)-PHI_FULL_LEVEL(IJ))+             UVADJ1C.679    
     *                 (PHI_FULL_LEVEL(I+1)-PHI_FULL_LEVEL(IJ+1)))+        UVADJ1C.680    
     *     .5*CP*(((THETAS(I,K)+THETAS(IJ,K))                              UVADJ1C.681    
     *                 *(DELTA_P_P_EXNER_BY_DELTAP(I) -                    UVADJ1C.682    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ)))+                 UVADJ1C.683    
     *           ((THETAS(I+1,K)+THETAS(IJ+1,K))                           UVADJ1C.684    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(I+1) -                 UVADJ1C.685    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ+1)))))              UVADJ1C.686    
      ENDDO                                                                UVADJ1C.687    
                                                                           UVADJ1C.688    
*IF DEF,GLOBAL                                                             UVADJ1C.689    
*IF -DEF,MPP                                                               UVADJ1C.690    
C Correct  DPHI_BY_DLONGITUDE &  DPHI_BY_DLATITUDE                         UVADJ1C.691    
C                    for global wrap around                                UVADJ1C.692    
cdir$ nosplit                                                              UVADJ1C.693    
cdir$ nounroll                                                             UVADJ1C.694    
                                                                           UVADJ1C.695    
        DO I=START_POINT_NO_HALO + LAST_ROW_PT-1,                          UVADJ1C.696    
     &       END_U_POINT_NO_HALO,ROW_LENGTH                                UVADJ1C.697    
                                                                           UVADJ1C.698    
          IP = I + 1 - ROW_LENGTH                                          UVADJ1C.699    
          IJ = I + ROW_LENGTH                                              UVADJ1C.700    
          IJP = IJ + 1 - ROW_LENGTH                                        UVADJ1C.701    
                                                                           UVADJ1C.702    
          DPHI_BY_DLONGITUDE(i) = c1*(                                     UVADJ1C.703    
     *                  (PHI_FULL_LEVEL(IP )-PHI_FULL_LEVEL(I))+           UVADJ1C.704    
     *                  (PHI_FULL_LEVEL(IJP )-PHI_FULL_LEVEL(IJ))+         UVADJ1C.705    
     *     .5*CP*(THETAS(IP ,K)+THETAS(I,K))                               UVADJ1C.706    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(IP ) -                 UVADJ1C.707    
     *                    DELTA_P_P_EXNER_BY_DELTAP(I))+                   UVADJ1C.708    
     *     .5*CP*(THETAS(IJP ,K)+THETAS(IJ,K))                             UVADJ1C.709    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(IJP ) -                UVADJ1C.710    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ)))*                 UVADJ1C.711    
     *     SEC_U_LATITUDE(I)                                               UVADJ1C.712    
          DPHI_BY_DLATITUDE(i) = c2*(                                      UVADJ1C.713    
     *                  (PHI_FULL_LEVEL(I)-PHI_FULL_LEVEL(IJ))+            UVADJ1C.714    
     *                  (PHI_FULL_LEVEL(IP )-PHI_FULL_LEVEL(IJP ))+        UVADJ1C.715    
     *     .5*CP*(THETAS(I,K)+THETAS(IJ,K))                                UVADJ1C.716    
     *                 *(DELTA_P_P_EXNER_BY_DELTAP(I) -                    UVADJ1C.717    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJ))+                  UVADJ1C.718    
     *     .5*CP*(THETAS(IP ,K)+THETAS(IJP ,K))                            UVADJ1C.719    
     *                  *(DELTA_P_P_EXNER_BY_DELTAP(IP ) -                 UVADJ1C.720    
     *                    DELTA_P_P_EXNER_BY_DELTAP(IJP )))                UVADJ1C.721    
      ENDDO                                                                UVADJ1C.722    
                                                                           UVADJ1C.723    
*ENDIF                                                                     UVADJ1C.724    
*ENDIF                                                                     UVADJ1C.725    
                                                                           UVADJ1C.726    
                                                                           UVADJ1C.727    
C----------------------------------------------------------------------    UVADJ1C.728    
CL    SECTION 5.3.  UPDATE U AND V USING IMPLICIT                          UVADJ1C.729    
CL                  TREATMENT OF CORIOLIS TERMS.                           UVADJ1C.730    
C----------------------------------------------------------------------    UVADJ1C.731    
C This loop calculates the reciprocal on the previous pass                 UVADJ1C.732    
C in order to mask the cost of the divide.                                 UVADJ1C.733    
                                                                           UVADJ1C.734    
cdir$ nosplit                                                              UVADJ1C.735    
! cdir$ cache_bypass f3                                                    GSM4F405.6      
        DO I=START_POINT_NO_HALO,END_U_POINT_NO_HALO-1                     UVADJ1C.737    
          TEMP1 = HALF_ADJUSTMENT_TIMESTEP*                                UVADJ1C.738    
     *            (F3(I)+U(I,K)*TAN_U_LATITUDE(I)*RECIP_RS_UV(I,K))        UVADJ1C.739    
          TEMP2 = TEMP1 * TEMP1                                            UVADJ1C.740    
          RECIP=1.0/(1.+TEMP2)                                             UVADJ1C.741    
                                                                           UVADJ1C.742    
          WORK_V= (V(I,K)*(1.-TEMP2)                                       UVADJ1C.743    
     *                - TEMP1*(2.*U(I,K)-DPHI_BY_DLONGITUDE(I)             UVADJ1C.744    
     *                                             *RECIP_RS_UV(I,K))      UVADJ1C.745    
     *                - DPHI_BY_DLATITUDE(i)*RECIP_RS_UV(I,K))*RECIP       UVADJ1C.746    
          U(I,K) = U(I,K) + TEMP1*(V(I,K)+WORK_V) -                        UVADJ1C.747    
     *                 DPHI_BY_DLONGITUDE(i)*RECIP_RS_UV(I,K)              UVADJ1C.748    
          V(I,K) = WORK_V                                                  UVADJ1C.749    
                                                                           UVADJ1C.750    
      ENDDO                                                                UVADJ1C.751    
                                                                           UVADJ1C.752    
                                                                           UVADJ1C.753    
*IF -DEF,GLOBAL                                                            UVADJ1C.754    
C Reset East West values of U and V with input values                      UVADJ1C.755    
*IF DEF,MPP                                                                UVADJ1C.756    
        IF (at_left_of_LPG) THEN                                           UVADJ1C.757    
*ENDIF                                                                     UVADJ1C.758    
        DO I=START_POINT_NO_HALO + FIRST_ROW_PT-1,                         UVADJ1C.759    
     &       END_U_POINT_NO_HALO,ROW_LENGTH                                UVADJ1C.760    
        U(I,K)=U_TEMP_L(I)                                                 UVADJ1C.761    
        V(I,K)=V_TEMP_L(I)                                                 UVADJ1C.762    
        ENDDO                                                              UVADJ1C.763    
*IF DEF,MPP                                                                UVADJ1C.764    
        ENDIF                                                              UVADJ1C.765    
        IF (at_right_of_LPG) THEN                                          UVADJ1C.766    
*ENDIF                                                                     UVADJ1C.767    
        DO I=START_POINT_NO_HALO + LAST_ROW_PT-1,                          UVADJ1C.768    
     &       END_U_POINT_NO_HALO,ROW_LENGTH                                UVADJ1C.769    
        U(I,K)=U_TEMP_R(I)                                                 UVADJ1C.770    
        V(I,K)=V_TEMP_R(I)                                                 UVADJ1C.771    
        U(I-1,K)=U_TEMP_R(I-1)                                             UVADJ1C.772    
        V(I-1,K)=V_TEMP_R(I-1)                                             UVADJ1C.773    
        ENDDO                                                              UVADJ1C.774    
*IF DEF,MPP                                                                UVADJ1C.775    
        ENDIF                                                              UVADJ1C.776    
*ENDIF                                                                     UVADJ1C.777    
*ENDIF                                                                     UVADJ1C.778    
                                                                           UVADJ1C.779    
CL END LOOP OVER P_LEVELS                                                  UVADJ1C.780    
 110  CONTINUE                                                             UVADJ1C.781    
                                                                           UVADJ1C.782    
CL END OF ROUTINE UV_ADJ                                                   UVADJ1C.783    
                                                                           UVADJ1C.784    
      RETURN                                                               UVADJ1C.785    
      END                                                                  UVADJ1C.786    
*ENDIF                                                                     UVADJ1C.787