*IF DEF,A06_3A                                                             GWJUMP3A.2      
C ******************************COPYRIGHT******************************    GTS2F400.3583   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.3584   
C                                                                          GTS2F400.3585   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.3586   
C restrictions as set forth in the contract.                               GTS2F400.3587   
C                                                                          GTS2F400.3588   
C                Meteorological Office                                     GTS2F400.3589   
C                London Road                                               GTS2F400.3590   
C                BRACKNELL                                                 GTS2F400.3591   
C                Berkshire UK                                              GTS2F400.3592   
C                RG12 2SZ                                                  GTS2F400.3593   
C                                                                          GTS2F400.3594   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.3595   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.3596   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.3597   
C Modelling at the above address.                                          GTS2F400.3598   
C ******************************COPYRIGHT******************************    GTS2F400.3599   
C                                                                          GTS2F400.3600   
! SUBROUTINE GW_JUMP TO CALCULATE VERT DISTRIBUTION BELOW A JUMP HEIGHT    GWJUMP3A.3      
!                                                                          GWJUMP3A.4      

      SUBROUTINE GW_JUMP                                                    2GWJUMP3A.5      
     1  (PSTAR,PEXNER,S_X_STRESS,S_Y_STRESS,START_L,LEVELS                 GWJUMP3A.6      
     2   ,POINTS,AKH,BKH,DELTA_AK,DELTA_BK,H_O_LEV,H_JUMP                  GWJUMP3A.7      
     3   ,H_CRIT,DU_DT,DV_DT                                               GWJUMP3A.8      
! Diagnostics                                                              GWJUMP3A.9      
     4  ,STRESS_UD,POINTS_STRESS_UD,STRESS_UD_ON                           GWJUMP3A.10     
     5  ,STRESS_VD,POINTS_STRESS_VD,STRESS_VD_ON                           GWJUMP3A.11     
     6  ,DU_DT_JUMP,POINTS_DU_DT_JUMP,DU_DT_JUMP_ON                        GWJUMP3A.12     
     7  ,DV_DT_JUMP,POINTS_DV_DT_JUMP,DV_DT_JUMP_ON )                      GWJUMP3A.13     
                                                                           GWJUMP3A.14     
      IMPLICIT NONE                                                        GWJUMP3A.15     
! Description:                                                             GWJUMP3A.16     
!             TO CALCULATE STRESS PROFILE DUE TO SUBGRID-SCALE             GWJUMP3A.17     
!             OROGRAPHIC GRAVITY WAVES FOR HIGH DRAG HYDRAULIC JUMP        GWJUMP3A.18     
!             STATES OR IF CRITICAL LAYER FOUND WITHIN JUMP.               GWJUMP3A.19     
!             STRESS AND DRAG LINEARISED WITH PRESSURE UPTO JUMP/          GWJUMP3A.20     
!             CRITICAL HEIGHT FROM STARTING LEVEL.                         GWJUMP3A.21     
!                                                                          GWJUMP3A.22     
! Method: UNIFIED MODEL DOCUMENTATION PAPER NO. ?                          GWJUMP3A.23     
!         THE EQUATIONS USED ARE (???) TO (???)                            GWJUMP3A.24     
!                                                                          GWJUMP3A.25     
! Current code owner: S.Webster                                            ASW1F403.48     
!                                                                          GWJUMP3A.27     
! History:                                                                 GWJUMP3A.28     
! Version  Date      Comment                                               GWJUMP3A.29     
!  3.4   18/10/94   Original Code. J.R.Mitchell                            GWJUMP3A.30     
!  4.4   19/09/97   Remove *IF -DEF,CRAY compile options. S.Webster        ASW1F404.10     
!                                                                          GWJUMP3A.31     
! Code Description:                                                        GWJUMP3A.32     
! Language: Fortran 77 + common extensions                                 GWJUMP3A.33     
! This code is written to UMDP3 v6 programming standards.                  GWJUMP3A.34     
! System component covered: ORIGINAL VERSION FOR CRAY Y-MP                 GWJUMP3A.35     
! System task covered: PART OF P22                                         GWJUMP3A.36     
! SUITABLE FOR SINGLE COLUMN USE,ROTATED GRIDS                             GWJUMP3A.37     
! FURTHER ALTERATIONS MAY BE REQUIRED FOR AUTOTASKING EFFICIENCY           GWJUMP3A.38     
                                                                           GWJUMP3A.39     
! Global Variables                                                         GWJUMP3A.40     
*CALL C_G                                                                  GWJUMP3A.41     
*CALL C_R_CP                                                               GWJUMP3A.42     
! Local constants                                                          GWJUMP3A.43     
*CALL C_GWAVE                                                              GWJUMP3A.44     
! Subroutine arguements;                                                   GWJUMP3A.45     
      INTEGER                                                              GWJUMP3A.46     
     * LEVELS              !IN    NUMBER OF MODEL LEVELS                   GWJUMP3A.47     
     *,START_L             !IN    START LEVEL FOR WAVE-BREAKING TEST       GWJUMP3A.48     
     *,POINTS              !IN    NUMBER OF POINTS                         GWJUMP3A.49     
     *,POINTS_STRESS_UD    !IN    ) No of land points in diagnostic        GWJUMP3A.50     
     *,POINTS_STRESS_VD    !IN    ) arrays for GW stress - u and v         GWJUMP3A.51     
     *,POINTS_DU_DT_JUMP   !IN    ) No of land points in diagnostic        GWJUMP3A.52     
     *,POINTS_DV_DT_JUMP   !IN    ) arrays for GW satn - du and dv         GWJUMP3A.53     
     *,H_O_LEV(POINTS)     !IN    LEVEL OF CRITICAL/JUMP HEIGHT            GWJUMP3A.54     
                                                                           GWJUMP3A.55     
      LOGICAL                                                              GWJUMP3A.56     
     * H_JUMP(POINTS)      !IN    TRUE IF POINT IS TO BE LINEARIZED        GWJUMP3A.57     
     *,H_CRIT(POINTS)      !IN    TRUE IF CRITICAL HEIGHT BEFORE JUMP      GWJUMP3A.58     
     *,STRESS_UD_ON           !U stress diagnostic switch                  GWJUMP3A.59     
     *,STRESS_VD_ON           !V stress diagnostic switch                  GWJUMP3A.60     
     *,DU_DT_JUMP_ON          !U accel (hydr jump) diagnostic switch       GWJUMP3A.61     
     *,DV_DT_JUMP_ON          !V accel (hydr jump) diagnostic switch       GWJUMP3A.62     
                                                                           GWJUMP3A.63     
      REAL                                                                 GWJUMP3A.64     
     * PSTAR(POINTS)                    !IN    PSTAR FIELD                 GWJUMP3A.65     
     *,PEXNER(POINTS,LEVELS+1)          !IN    PEXNER                      GWJUMP3A.66     
     *,S_X_STRESS(POINTS)               !IN    'SURFACE' X_STRESS          GWJUMP3A.67     
     *,S_Y_STRESS(POINTS)               !IN    'SURFACE' Y_STRESS          GWJUMP3A.68     
!      AKH,BKH  DEFINE HYBRID VERTICAL COORDINATES P=A+BP*-LAYER EDGES,    GWJUMP3A.69     
!      DELTA_AK,DELTA_BK  DEFINE PRESSURE DIFFERENCES ACROSS LAYERS        GWJUMP3A.70     
     *,AKH(LEVELS+1)          !IN    VALUE AT LAYER BOUNDARY               GWJUMP3A.71     
     *,BKH(LEVELS+1)          !IN    VALUE AT LAYER BOUMDARY               GWJUMP3A.72     
     *,DELTA_AK(LEVELS)       !IN    DIFFERENCE ACROSS LAYER               GWJUMP3A.73     
     *,DELTA_BK(LEVELS)       !IN    DIFFERENCE ACROSS LAYER               GWJUMP3A.74     
     *,DU_DT(POINTS,LEVELS)   !OUT   U-ACCELERATION                        GWJUMP3A.75     
     *,DV_DT(POINTS,LEVELS)   !OUT   V-ACCELERATION                        GWJUMP3A.76     
! Diagnostics                                                              GWJUMP3A.77     
      REAL                                                                 GWJUMP3A.78     
     * DU_DT_JUMP(POINTS_DU_DT_JUMP,LEVELS) !U-ACCELN  DIAGNOSTIC          GWJUMP3A.79     
     *,DV_DT_JUMP(POINTS_DV_DT_JUMP,LEVELS) !V-ACCELN  DIAGNOSTIC          GWJUMP3A.80     
     *,STRESS_UD(POINTS_STRESS_UD,LEVELS+1) !U STRESS  DIAGNOSTIC          GWJUMP3A.81     
     *,STRESS_VD(POINTS_STRESS_VD,LEVELS+1) !V STRESS  DIAGNOSTIC          GWJUMP3A.82     
                                                                           GWJUMP3A.83     
! Local parameters                                                         GWJUMP3A.84     
      REAL CPBYG                                                           GWJUMP3A.85     
      PARAMETER(CPBYG=CP/G)                                                GWJUMP3A.86     
                                                                           GWJUMP3A.87     
! Local scalers                                                            GWJUMP3A.88     
      REAL                                                                 GWJUMP3A.89     
     * DELTA_P              ! DIFFERENCE IN PRESSURE ACROSS LAYER(S)       GWJUMP3A.90     
     *,DELTA_AK_SUM ! DELTA_AK SUMMED OVER LOWEST LAYERS UP TO START_L     GWJUMP3A.91     
     *,DELTA_BK_SUM ! DELTA_BK SUMMED OVER LOWEST LAYERS UP TO START_L     GWJUMP3A.92     
     *,PU,PL                                                               GWJUMP3A.93     
      INTEGER   I,K    ! LOOP COUNTER IN ROUTINE                           GWJUMP3A.94     
      INTEGER   KK,KL,KU,KT ! LEVEL COUNTERS IN ROUTINE                    GWJUMP3A.95     
                                                                           GWJUMP3A.96     
! Local dynamic arrays                                                     GWJUMP3A.97     
! LOCAL WORKSPACE ARRAYS: 6  ARRAYS OF FULL FIELD LENGTH                   GWJUMP3A.98     
!                                                                          GWJUMP3A.99     
                                                                           GWJUMP3A.103    
      REAL                                                                 GWJUMP3A.104    
     * X_STRESS(POINTS,2)   ! X_STRESSES (LAYER BOUNDARIES)                GWJUMP3A.105    
     *,Y_STRESS(POINTS,2)   ! Y_STRESSES (LAYER BOUNDARIES)                GWJUMP3A.106    
     *,DP_X_STRESS(POINTS)  ! STRESS GRADIENT                              GWJUMP3A.107    
     *                      ! SURFACE X_STRESS                             GWJUMP3A.108    
     *,DP_Y_STRESS(POINTS)  ! STRESS GRADIENT                              GWJUMP3A.109    
     *                      ! SURFACE Y_STRESS                             GWJUMP3A.110    
                                                                           GWJUMP3A.112    
! Function and subroutine calls                                            GWJUMP3A.113    
*CALL P_EXNERC                                                             GWJUMP3A.114    
                                                                           GWJUMP3A.115    
!-------------------------------------------------------------------       GWJUMP3A.116    
!   1. START LEVEL  PRELIMINARIES                                          GWJUMP3A.117    
!-------------------------------------------------------------------       GWJUMP3A.118    
                                                                           GWJUMP3A.119    
CFPP$ NOCONCUR L                                                           GWJUMP3A.120    
!      TREAT LAYERS BELOW AND INCLUDING START_L AS ONE LAYER               GWJUMP3A.121    
        DELTA_AK_SUM = 0.0                                                 GWJUMP3A.122    
        DELTA_BK_SUM = 0.0                                                 GWJUMP3A.123    
      DO K=2,START_L                                                       GWJUMP3A.124    
        DELTA_AK_SUM = DELTA_AK_SUM + DELTA_AK(K)                          GWJUMP3A.125    
        DELTA_BK_SUM = DELTA_BK_SUM + DELTA_BK(K)                          GWJUMP3A.126    
      END DO                                                               GWJUMP3A.127    
CFPP$ CONCUR                                                               GWJUMP3A.128    
                                                                           GWJUMP3A.129    
      KL=1                                                                 GWJUMP3A.130    
      KU=2                                                                 GWJUMP3A.131    
      KT=3                                                                 GWJUMP3A.132    
                                                                           GWJUMP3A.133    
      DO I=1,POINTS                                                        GWJUMP3A.134    
        IF( H_JUMP(I) ) THEN                                               GWJUMP3A.135    
                                                                           GWJUMP3A.136    
          PU=PSTAR(I)*BKH(H_O_LEV(I)) + AKH(H_O_LEV(I))                    GWJUMP3A.137    
          PL=PSTAR(I)*BKH(START_L) + AKH(START_L)                          GWJUMP3A.138    
          DELTA_P= PL - PU                                                 GWJUMP3A.139    
                                                                           GWJUMP3A.140    
          IF( H_CRIT(I) ) THEN                                             GWJUMP3A.141    
            DP_X_STRESS(I) = S_X_STRESS(I)/ ( DELTA_P )                    GWJUMP3A.142    
            DP_Y_STRESS(I) = S_Y_STRESS(I)/ ( DELTA_P )                    GWJUMP3A.143    
          ELSE                                                             GWJUMP3A.144    
            DP_X_STRESS(I) = 0.6666667*S_X_STRESS(I)/                      GWJUMP3A.145    
     &                                   ( DELTA_P )                       GWJUMP3A.146    
            DP_Y_STRESS(I) = 0.6666667*S_Y_STRESS(I)/                      GWJUMP3A.147    
     &                                   ( DELTA_P )                       GWJUMP3A.148    
          ENDIF                                                            GWJUMP3A.149    
                                                                           GWJUMP3A.150    
        ENDIF ! if H_JUMP                                                  GWJUMP3A.151    
                                                                           GWJUMP3A.152    
      END DO  ! Points                                                     GWJUMP3A.153    
                                                                           GWJUMP3A.154    
      IF( STRESS_UD_ON ) THEN                                              GWJUMP3A.155    
        DO I=1,POINTS                                                      GWJUMP3A.156    
          IF( H_JUMP(I) ) THEN                                             GWJUMP3A.157    
            X_STRESS(I,KL) = S_X_STRESS(I)                                 GWJUMP3A.158    
            STRESS_UD(I,START_L) = X_STRESS(I,KL)                          GWJUMP3A.159    
          ENDIF                                                            GWJUMP3A.160    
        END DO                                                             GWJUMP3A.161    
      ENDIF                                                                GWJUMP3A.162    
                                                                           GWJUMP3A.163    
      IF( STRESS_VD_ON ) THEN                                              GWJUMP3A.164    
        DO I=1,POINTS                                                      GWJUMP3A.165    
          IF( H_JUMP(I) ) THEN                                             GWJUMP3A.166    
            Y_STRESS(I,KL) = S_Y_STRESS(I)                                 GWJUMP3A.167    
            STRESS_VD(I,START_L) = Y_STRESS(I,KL)                          GWJUMP3A.168    
          ENDIF                                                            GWJUMP3A.169    
        END DO                                                             GWJUMP3A.170    
      ENDIF                                                                GWJUMP3A.171    
                                                                           GWJUMP3A.172    
!------------------------------------------------------------------        GWJUMP3A.173    
!    2 LOOP LEVELS                                                         GWJUMP3A.174    
!------------------------------------------------------------------        GWJUMP3A.175    
                                                                           GWJUMP3A.176    
      DO K=START_L+1,LEVELS                                                GWJUMP3A.177    
                                                                           GWJUMP3A.178    
                                                                           GWJUMP3A.179    
        DO I=1,POINTS                                                      GWJUMP3A.180    
          IF( H_JUMP(I) .AND. K.LE.H_O_LEV(I) ) THEN                       GWJUMP3A.181    
                                                                           GWJUMP3A.182    
            IF( K .EQ. START_L+1 ) THEN                                    GWJUMP3A.183    
              DELTA_P =(DELTA_AK(START_L)+DELTA_BK(START_L)*PSTAR(I))      GWJUMP3A.184    
     &               /( DELTA_AK_SUM     +DELTA_BK_SUM*PSTAR(I) )          GWJUMP3A.185    
              DU_DT(I,START_L) = - G*DP_X_STRESS(I)*DELTA_P                GWJUMP3A.186    
              DV_DT(I,START_L) = - G*DP_Y_STRESS(I)*DELTA_P                GWJUMP3A.187    
            ELSE                                                           GWJUMP3A.188    
              DU_DT(I,K-1) = - G*DP_X_STRESS(I)                            GWJUMP3A.189    
              DV_DT(I,K-1) = - G*DP_Y_STRESS(I)                            GWJUMP3A.190    
            ENDIF                                                          GWJUMP3A.191    
                                                                           GWJUMP3A.192    
          ENDIF   ! if H_JUMP(I) .and. K<=H_O_LEV(I)                       GWJUMP3A.193    
                                                                           GWJUMP3A.194    
        END DO ! points                                                    GWJUMP3A.195    
                                                                           GWJUMP3A.196    
! Diagnostics                                                              GWJUMP3A.197    
        IF( DU_DT_JUMP_ON ) THEN                                           GWJUMP3A.198    
          DO I=1,POINTS                                                    GWJUMP3A.199    
            IF( H_JUMP(I) .AND. K.LE.H_O_LEV(I) ) THEN                     GWJUMP3A.200    
              DU_DT_JUMP(I,K-1) = DU_DT(I,K-1)                             GWJUMP3A.201    
            ENDIF                                                          GWJUMP3A.202    
          END DO                                                           GWJUMP3A.203    
        ENDIF                                                              GWJUMP3A.204    
                                                                           GWJUMP3A.205    
        IF( DV_DT_JUMP_ON ) THEN                                           GWJUMP3A.206    
          DO I=1,POINTS                                                    GWJUMP3A.207    
            IF( H_JUMP(I) .AND. K.LE.H_O_LEV(I) ) THEN                     GWJUMP3A.208    
              DV_DT_JUMP(I,K-1) = DV_DT(I,K-1)                             GWJUMP3A.209    
            ENDIF                                                          GWJUMP3A.210    
          END DO                                                           GWJUMP3A.211    
        ENDIF                                                              GWJUMP3A.212    
                                                                           GWJUMP3A.213    
        IF( STRESS_UD_ON ) THEN                                            GWJUMP3A.214    
          DO I=1,POINTS                                                    GWJUMP3A.215    
            IF( H_JUMP(I) .AND. K.LE.H_O_LEV(I) ) THEN                     GWJUMP3A.216    
              DELTA_P = DELTA_AK(K-1)+DELTA_BK(K-1)*PSTAR(I)               GWJUMP3A.217    
              X_STRESS(I,KU) = X_STRESS(I,KL)                              GWJUMP3A.218    
! Stress at upper boundary  N.B. DELTA_P is -VE                            GWJUMP3A.219    
              X_STRESS(I,KU) = X_STRESS(I,KL)+DP_X_STRESS(I)*DELTA_P       GWJUMP3A.220    
              STRESS_UD(I,K) = X_STRESS(I,KU)                              GWJUMP3A.221    
! Top of model. Set acceln same as penultimate layer if stress >0          GWJUMP3A.222    
!     FOR COMPLETION- TOP LEVEL NEVER REACHED IN H_JUMP                    GWJUMP3A.223    
              IF( K .EQ. LEVELS ) THEN                                     GWJUMP3A.224    
                DELTA_P   = DELTA_AK(LEVELS) + DELTA_BK(LEVELS)*PSTAR(I)   GWJUMP3A.225    
                X_STRESS(I,KL) = X_STRESS(I,KU) - DU_DT(I,LEVELS-1)        GWJUMP3A.226    
     *                                                     *DELTA_P/G      GWJUMP3A.227    
                IF( X_STRESS(I,KL) .LT. 0.0) X_STRESS(I,KL) = 0.0          GWJUMP3A.228    
                DU_DT(I,LEVELS) = G*(X_STRESS(I,KU) - X_STRESS(I,KL))      GWJUMP3A.229    
     *                                                      /DELTA_P       GWJUMP3A.230    
                STRESS_UD(I,LEVELS+1) = X_STRESS(I,KL)                     GWJUMP3A.231    
              ENDIF ! top of model                                         GWJUMP3A.232    
            ENDIF   ! H_Jump & K < H_O_Lev                                 GWJUMP3A.233    
          END DO                                                           GWJUMP3A.234    
        ENDIF       ! Stress_ud on                                         GWJUMP3A.235    
                                                                           GWJUMP3A.236    
        IF( STRESS_VD_ON ) THEN                                            GWJUMP3A.237    
          DO I=1,POINTS                                                    GWJUMP3A.238    
            IF( H_JUMP(I) .AND. K.LE.H_O_LEV(I) ) THEN                     GWJUMP3A.239    
              DELTA_P = DELTA_AK(K-1)+DELTA_BK(K-1)*PSTAR(I)               GWJUMP3A.240    
              Y_STRESS(I,KU) = Y_STRESS(I,KL)                              GWJUMP3A.241    
! Stress at upper boundary  N.B. DELTA_P is -VE                            GWJUMP3A.242    
              Y_STRESS(I,KU) = Y_STRESS(I,KL)+DP_Y_STRESS(I)*DELTA_P       GWJUMP3A.243    
              STRESS_VD(I,K) = Y_STRESS(I,KU)                              GWJUMP3A.244    
! Top of model. Set acceln same as penultimate layer if stress >0          GWJUMP3A.245    
!     FOR COMPLETION- TOP LEVEL NEVER REACHED IN H_JUMP                    GWJUMP3A.246    
              IF( K .EQ. LEVELS ) THEN                                     GWJUMP3A.247    
                DELTA_P   = DELTA_AK(LEVELS) + DELTA_BK(LEVELS)*PSTAR(I)   GWJUMP3A.248    
                Y_STRESS(I,KL) = Y_STRESS(I,KU) - DV_DT(I,LEVELS-1)        GWJUMP3A.249    
     *                                                     *DELTA_P/G      GWJUMP3A.250    
                IF( Y_STRESS(I,KL) .LT. 0.0) Y_STRESS(I,KL) = 0.0          GWJUMP3A.251    
                DV_DT(I,LEVELS) = G*(Y_STRESS(I,KU) - Y_STRESS(I,KL))      GWJUMP3A.252    
     *                                                      /DELTA_P       GWJUMP3A.253    
                STRESS_VD(I,LEVELS+1) = Y_STRESS(I,KL)                     GWJUMP3A.254    
              ENDIF ! top of model                                         GWJUMP3A.255    
            ENDIF   ! H_Jump & K < H_O_Lev                                 GWJUMP3A.256    
          END DO                                                           GWJUMP3A.257    
        ENDIF       ! Stress_vd on                                         GWJUMP3A.258    
                                                                           GWJUMP3A.259    
! Swap storage for lower and upper layers                                  GWJUMP3A.260    
        KK=KL                                                              GWJUMP3A.261    
        KL=KU                                                              GWJUMP3A.262    
        KU=KK                                                              GWJUMP3A.263    
                                                                           GWJUMP3A.264    
      END DO                                                               GWJUMP3A.265    
!   END LOOP LEVELS                                                        GWJUMP3A.266    
                                                                           GWJUMP3A.267    
      RETURN                                                               GWJUMP3A.268    
      END                                                                  GWJUMP3A.269    
                                                                           GWJUMP3A.270    
*ENDIF                                                                     GWJUMP3A.271