*IF DEF,C96_1A,OR,DEF,C96_1B                                               GPB0F403.3546   
*IF DEF,MPP                                                                STGLSZ1A.2      
C *****************************COPYRIGHT******************************     STGLSZ1A.3      
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved.    STGLSZ1A.4      
C                                                                          STGLSZ1A.5      
C Use, duplication or disclosure of this code is subject to the            STGLSZ1A.6      
C restrictions as set forth in the contract.                               STGLSZ1A.7      
C                                                                          STGLSZ1A.8      
C                Meteorological Office                                     STGLSZ1A.9      
C                London Road                                               STGLSZ1A.10     
C                BRACKNELL                                                 STGLSZ1A.11     
C                Berkshire UK                                              STGLSZ1A.12     
C                RG12 2SZ                                                  STGLSZ1A.13     
C                                                                          STGLSZ1A.14     
C If no contract has been raised with this copy of the code, the use,      STGLSZ1A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      STGLSZ1A.16     
C to do so must first be obtained in writing from the Head of Numerical    STGLSZ1A.17     
C Modelling at the above address.                                          STGLSZ1A.18     
C ******************************COPYRIGHT******************************    STGLSZ1A.19     
!                                                                          STGLSZ1A.20     
!+ Calculates the "global" size of STASHed data.                           STGLSZ1A.21     
!                                                                          STGLSZ1A.22     
! Subroutine Interface:                                                    STGLSZ1A.23     

      SUBROUTINE STASH_GET_GLOBAL_SIZE(                                     1STGLSZ1A.24     
     &  GLOBAL_NORTH_IN , GLOBAL_EAST_IN ,                                 STGLSZ1A.25     
     &  GLOBAL_SOUTH_IN , GLOBAL_WEST_IN ,                                 STGLSZ1A.26     
     &  LEVELS_IN ,                                                        STGLSZ1A.27     
     &  GRIDPOINT_CODE , PROCESSING_CODE ,                                 STGLSZ1A.28     
     &  GLOBAL_FIELD_SIZE ,                                                STGLSZ1A.29     
     &  ICODE , CMESSAGE)                                                  STGLSZ1A.30     
                                                                           STGLSZ1A.31     
      IMPLICIT NONE                                                        STGLSZ1A.32     
                                                                           STGLSZ1A.33     
! Description:                                                             STGLSZ1A.34     
! Calculates the global (ie. total size on disk) size of a                 STGLSZ1A.35     
! STASH request.                                                           STGLSZ1A.36     
!                                                                          STGLSZ1A.37     
! Method:                                                                  STGLSZ1A.38     
! Using the PROCESSING_CODE to indicate the type of STASH request,         STGLSZ1A.39     
! the GRIDPOINT_CODE to indicate the grid type of the data,                STGLSZ1A.40     
! and the subdomain limits, the total size of the data is calculated.      STGLSZ1A.41     
! Current code owner : P.Burton                                            STGLSZ1A.42     
!                                                                          STGLSZ1A.43     
! History:                                                                 STGLSZ1A.44     
!  Model    Date      Modification history from model version 4.2          STGLSZ1A.45     
!  version                                                                 STGLSZ1A.46     
!   4.2     28/10/96  New DECK created for MPP version of STASH            STGLSZ1A.47     
!                     P.Burton                                             STGLSZ1A.48     
!   4.3     14/3/97   Various fixes                       P.Burton         GPB0F403.3547   
!                                                                          STGLSZ1A.49     
! Subroutine arguments:                                                    STGLSZ1A.50     
                                                                           STGLSZ1A.51     
      INTEGER                                                              STGLSZ1A.52     
     &  GLOBAL_NORTH_IN   ! IN: specification of subdomain boundaries      STGLSZ1A.53     
     &, GLOBAL_EAST_IN    ! IN: ""                                         STGLSZ1A.54     
     &, GLOBAL_SOUTH_IN   ! IN: ""                                         STGLSZ1A.55     
     &, GLOBAL_WEST_IN    ! IN: ""                                         STGLSZ1A.56     
     &, LEVELS_IN         ! IN: number of levels                           STGLSZ1A.57     
     &, GRIDPOINT_CODE    ! IN: indicates the output grid type             STGLSZ1A.58     
     &, PROCESSING_CODE   ! IN: indicates the type of STASH processing     STGLSZ1A.59     
                                                                           STGLSZ1A.60     
      INTEGER                                                              STGLSZ1A.61     
     &  GLOBAL_FIELD_SIZE ! OUT: size of STASH data on disk                STGLSZ1A.62     
                                                                           STGLSZ1A.63     
      INTEGER                                                              STGLSZ1A.64     
     &  ICODE             ! OUT: Return code (0=OK)                        STGLSZ1A.65     
                                                                           STGLSZ1A.66     
      CHARACTER*80                                                         STGLSZ1A.67     
     &  CMESSAGE          ! OUT: Error message                             STGLSZ1A.68     
                                                                           STGLSZ1A.69     
! Parameters and common blocks                                             STGLSZ1A.70     
*CALL STPARAM                                                              STGLSZ1A.71     
*CALL PARVARS                                                              STGLSZ1A.72     
                                                                           STGLSZ1A.73     
                                                                           STGLSZ1A.74     
! Local variables                                                          STGLSZ1A.75     
                                                                           STGLSZ1A.76     
      INTEGER                                                              STGLSZ1A.77     
! copies of input arguments, which get modified according the              STGLSZ1A.78     
! type of output grid                                                      STGLSZ1A.79     
     &  global_north,global_east,global_south,global_west                  STGLSZ1A.80     
     &, levels                                                             STGLSZ1A.81     
                                                                           STGLSZ1A.82     
! ------------------------------------------------------------------       STGLSZ1A.83     
                                                                           STGLSZ1A.84     
      global_north = GLOBAL_NORTH_IN                                       STGLSZ1A.85     
      global_east  = GLOBAL_EAST_IN                                        STGLSZ1A.86     
      global_south = GLOBAL_SOUTH_IN                                       STGLSZ1A.87     
      global_west  = GLOBAL_WEST_IN                                        STGLSZ1A.88     
      levels       = LEVELS_IN                                             STGLSZ1A.89     
                                                                           STGLSZ1A.90     
! Fix wrap-arounds s.t. east > west                                        STGLSZ1A.91     
                                                                           STGLSZ1A.92     
      IF (global_west .GT. global_east)                                    STGLSZ1A.93     
     &  global_east=global_east+glsize(1)                                  GPB0F403.3548   
                                                                           STGLSZ1A.95     
! Full field or subdomain output:                                          STGLSZ1A.96     
                                                                           STGLSZ1A.97     
      IF ((PROCESSING_CODE .EQ. st_replace_code) .OR.                      STGLSZ1A.98     
     &    (PROCESSING_CODE .EQ. st_accum_code) .OR.                        STGLSZ1A.99     
     &    (PROCESSING_CODE .EQ. st_time_mean_code) .OR.                    STGLSZ1A.100    
     &    (PROCESSING_CODE .EQ. st_max_code) .OR.                          STGLSZ1A.101    
     &    (PROCESSING_CODE .EQ. st_min_code)) THEN                         STGLSZ1A.102    
                                                                           STGLSZ1A.103    
        IF ((GRIDPOINT_CODE .GE. vert_mean_base) .AND.   ! vertical        GPB0F403.3549   
     &      (GRIDPOINT_CODE .LT. zonal_mean_base)) THEN ! mean             GPB0F403.3550   
          levels=1                                                         GPB0F403.3551   
                                                                           GPB0F403.3552   
        ELSEIF ((GRIDPOINT_CODE .GE. zonal_mean_base) .AND.  ! zonal       GPB0F403.3553   
     &          (GRIDPOINT_CODE .LT. merid_mean_base)) THEN  ! mean        GPB0F403.3554   
          global_east=global_west                                          STGLSZ1A.106    
                                                                           GPB0F403.3555   
        ELSEIF ((GRIDPOINT_CODE .GE. merid_mean_base) .AND. ! merid.       STGLSZ1A.107    
     &          (GRIDPOINT_CODE .LT. field_mean_base)) THEN ! mean         STGLSZ1A.108    
          global_south=global_north                                        STGLSZ1A.109    
                                                                           GPB0F403.3556   
        ELSEIF ((GRIDPOINT_CODE .GE. field_mean_base)  .AND. ! field       STGLSZ1A.110    
     &          (GRIDPOINT_CODE .LT. global_mean_base)) THEN ! fmean       STGLSZ1A.111    
          global_east=global_west                                          STGLSZ1A.112    
          global_south=global_north                                        STGLSZ1A.113    
                                                                           GPB0F403.3557   
        ELSEIF (GRIDPOINT_CODE .GE. global_mean_base) THEN                 STGLSZ1A.114    
          global_east=global_west                                          STGLSZ1A.115    
          global_south=global_north                                        STGLSZ1A.116    
          levels=1                                                         STGLSZ1A.117    
                                                                           GPB0F403.3558   
        ELSEIF (GRIDPOINT_CODE .GT. global_mean_top) THEN                  GPB0F403.3559   
          ICODE=1                                                          STGLSZ1A.119    
          WRITE(6,*) 'Grid type ',GRIDPOINT_CODE,                          STGLSZ1A.120    
     &               ' not yet supported by MPP STASH'                     STGLSZ1A.121    
          CMESSAGE='Unsupported grid type'                                 STGLSZ1A.122    
          GOTO 9999                                                        STGLSZ1A.123    
        ENDIF                                                              STGLSZ1A.124    
                                                                           STGLSZ1A.125    
        GLOBAL_FIELD_SIZE=(global_east-global_west+1)*                     STGLSZ1A.126    
     &                    (global_south-global_north+1)*                   STGLSZ1A.127    
     &                    levels                                           STGLSZ1A.128    
                                                                           STGLSZ1A.129    
      ELSE                                                                 STGLSZ1A.130    
        ICODE=2                                                            STGLSZ1A.131    
        WRITE(6,*) 'Processing code ',PROCESSING_CODE,                     STGLSZ1A.132    
     &             ' not yet supported by MPP STASH'                       STGLSZ1A.133    
        CMESSAGE='Unsupported processing code'                             STGLSZ1A.134    
        GOTO 9999                                                          STGLSZ1A.135    
      ENDIF                                                                STGLSZ1A.136    
                                                                           STGLSZ1A.137    
 9999 CONTINUE                                                             STGLSZ1A.138    
                                                                           STGLSZ1A.139    
      RETURN                                                               STGLSZ1A.140    
                                                                           STGLSZ1A.141    
      END                                                                  STGLSZ1A.142    
                                                                           STGLSZ1A.143    
*ENDIF                                                                     GPB0F403.3560   
*ENDIF                                                                     STGLSZ1A.144