*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.23SUBROUTINE 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