*IF DEF,A06_3B                                                             GWJUMP3B.2      
C ******************************COPYRIGHT******************************    GWJUMP3B.3      
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved.    GWJUMP3B.4      
C                                                                          GWJUMP3B.5      
C Use, duplication or disclosure of this code is subject to the            GWJUMP3B.6      
C restrictions as set forth in the contract.                               GWJUMP3B.7      
C                                                                          GWJUMP3B.8      
C                Meteorological Office                                     GWJUMP3B.9      
C                London Road                                               GWJUMP3B.10     
C                BRACKNELL                                                 GWJUMP3B.11     
C                Berkshire UK                                              GWJUMP3B.12     
C                RG12 2SZ                                                  GWJUMP3B.13     
C                                                                          GWJUMP3B.14     
C If no contract has been raised with this copy of the code, the use,      GWJUMP3B.15     
C duplication or disclosure of it is strictly prohibited.  Permission      GWJUMP3B.16     
C to do so must first be obtained in writing from the Head of Numerical    GWJUMP3B.17     
C Modelling at the above address.                                          GWJUMP3B.18     
C ******************************COPYRIGHT******************************    GWJUMP3B.19     
C                                                                          GWJUMP3B.20     
! SUBROUTINE GW_JUMP TO CALCULATE VERT DISTRIBUTION BELOW A JUMP HEIGHT    GWJUMP3B.21     
!                                                                          GWJUMP3B.22     

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