*IF DEF,C84_1A MOSGRD1A.2
C ******************************COPYRIGHT****************************** GTS2F400.6067
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.6068
C GTS2F400.6069
C Use, duplication or disclosure of this code is subject to the GTS2F400.6070
C restrictions as set forth in the contract. GTS2F400.6071
C GTS2F400.6072
C Meteorological Office GTS2F400.6073
C London Road GTS2F400.6074
C BRACKNELL GTS2F400.6075
C Berkshire UK GTS2F400.6076
C RG12 2SZ GTS2F400.6077
C GTS2F400.6078
C If no contract has been raised with this copy of the code, the use, GTS2F400.6079
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.6080
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.6081
C Modelling at the above address. GTS2F400.6082
C ******************************COPYRIGHT****************************** GTS2F400.6083
C GTS2F400.6084
CLL SUBROUTINE MOSGRID ------------------------------------------------ MOSGRD1A.3
CLL MOSGRD1A.4
CLL PURPOSE: MOSGRD1A.5
CLL MOSGRD1A.6
CLL THIS ROUTINE CREATES AN ARRAY WITH 1'S TO MARK THE MOS GRID MOSGRD1A.7
CLL IN THE ARRAY DIMENSIONS OF THE INPUT GRID. THIS ARRAY IS USED MOSGRD1A.8
CLL AS A MASK IN STASH TO EXTRACT THE MOS SUBGRID FIELDSFILE. MOSGRD1A.9
CLL MOSGRD1A.10
CLL FOR THE MOS GLOBAL GRID: MOSGRD1A.11
CLL MOSGRD1A.12
CLL THE EUROPEAN 'BOX' FROM 69N TO 34.5N, 13.125W TO 26.25E IS MOSGRD1A.13
CLL MARKED THEN 372 INDIVIDUAL 2 BY 2 GRID POINT BOXES AROUND MOSGRD1A.14
CLL STATION POSITIONS. THE FIRST 40 STATIONS ARE PERIPHERAL TO THE MOSGRD1A.15
CLL EUROPEAN MOS ARCHIVE, AND THE NEXT 332 ARE FOR THE WORLDWIDE MOSGRD1A.16
CLL ARCHIVE. THE COMBINED GRID ARRAY IS EXTRACTED FROM THE NWP MODEL MOSGRD1A.17
CLL FIELDS, BEFORE BEING SPLIT BY SUBSEQUENT JOBS IN MOS ARCHIVING MOSGRD1A.18
CLL AND FORECASTING. MOSGRD1A.19
CLL MOSGRD1A.20
CLL FOR THE MOS ELF GRID: MOSGRD1A.21
CLL MOSGRD1A.22
CLL THE UK 'BOX' IS DEFINED AS A BOX BETWEEN THE ELF ROWS DEFINED BY MOSGRD1A.23
CLL THE TRANSFORM OF POINTS (63.0 N 0.0 E), AND (48.0 N 0.0 E) AND MOSGRD1A.24
CLL BETWEEN ELF COLUMNS DEFINED BY THE LATLON TO EQUATORIAL GRID MOSGRD1A.25
CLL TRANSFORM OF (54.0 N 11.25 W) AND (54.0 N 7.5 E) MOSGRD1A.26
CLL THIS, IN UNROTATED FIELDS WOULD BE THE BOX 64 TO 48 N, 11.25W TO MOSGRD1A.27
CLL 7.5 EAST. MOSGRD1A.28
CLL MOSGRD1A.29
CLL TESTED UNDER COMPILER: CFT77 MOSGRD1A.30
CLL TESTED UNDER OS VERSION: UNICOS 5.0 MOSGRD1A.31
CLL MOSGRD1A.32
CLL MODEL MODIFICATION HISTORY FROM MODEL VERSION 3.0: MOSGRD1A.33
CLL VERSION DATE MOSGRD1A.34
CLL MOSGRD1A.35
CLL AUTHOR: GIL ROSS DATE: 5 NOVEMBER 1990 MOSGRD1A.36
CLL MOSGRD1A.37
CLL CODE VERSION NO: 1.2 DATE 15/06/91 MOSGRD1A.38
CLL MOSGRD1A.39
CLL PROGRAMMING STANDARD: UM DOC PAPER 3 VERSION 2 (10/8/90) MOSGRD1A.40
CLL MOSGRD1A.41
CLL LOGICAL COMPONENTS COVERED: C4 MOSGRD1A.42
CLL MOSGRD1A.43
CLL PROJECT TASK: C4 (PART OF) MOSGRD1A.44
CLL MOSGRD1A.45
CLL EXTERNAL DOCUMENTATION: ?? T.B.A. MOSGRD1A.46
CLL MOSGRD1A.47
CLL -------------------------------------------------------------------- MOSGRD1A.48
C*L INTERFACE AND ARGUMENTS: ------------------------------------------- MOSGRD1A.49
C MOSGRD1A.50
SUBROUTINE MOSGRID(O_GLOBAL,O_ELF,POLE_LAT,POLE_LON, 1,4MOSGRD1A.51
* DELTALAT,DELTALON,TOP_LAT,WEST_LON,NLATS,NLONS, MOSGRD1A.52
* MOSMAP,MAPSIZ,ICODE,CMESSAGE) MOSGRD1A.53
C MOSGRD1A.54
C*---------------------------------------------------------------------- MOSGRD1A.55
IMPLICIT NONE MOSGRD1A.56
C MOSGRD1A.57
C*L SUBROUTINE CALLED: MOSGRD1A.58
MOSGRD1A.59
EXTERNAL LLTOEQ ! LATLON TO EQUATORIAL GRID TRANSFORM MOSGRD1A.60
C* MOSGRD1A.61
C*L ARGUMENT LIST: MOSGRD1A.62
C MOSGRD1A.63
LOGICAL MOSGRD1A.64
* O_GLOBAL ! LOGICAL TRUE FOR GLOBAL MODEL INPUT MOSGRD1A.65
*,O_ELF ! LOGICAL TRUE ELF MODEL INPUT MOSGRD1A.66
REAL MOSGRD1A.67
* POLE_LAT ! ACTUAL LATITUDE OF THE GRID POLE INPUT MOSGRD1A.68
*,POLE_LON ! ACTUAL LONGITUDE OF THE GRID POLE INPUT MOSGRD1A.69
*,DELTALAT ! LATITUDE STEP BETWEEN LATITUDE ROWS INPUT MOSGRD1A.70
*,DELTALON ! LONGITUDE STEP BETWEEN LONGITUDE COLS INPUT MOSGRD1A.71
*,TOP_LAT ! MOST N'LY LAT, NEW GRID IF APPROPRIATE INPUT MOSGRD1A.72
*,WEST_LON ! MOST W'LY LONG, IN DEG E NEW GRID INPUT MOSGRD1A.73
C ALL IN +VE NORTH AND +VE EAST DEGREES. MOSGRD1A.74
INTEGER MOSGRD1A.75
* NLATS ! NUMBER OF LATITUDE ROWS INPUT MOSGRD1A.76
*,NLONS ! NUMBER OF LONGITUDE COLUMNS INPUT MOSGRD1A.77
INTEGER MOSGRD1A.78
* MOSMAP(NLONS,NLATS) ! MAP OF 1/0'S FOR MOS BIT MAPMASK OUTPUT MOSGRD1A.79
*,MAPSIZ ! NUMBER OF 1'S IN OUTPUT ARRAY OUTPUT MOSGRD1A.80
*,ICODE ! ERROR RETURN CODE OUTPUT MOSGRD1A.81
CHARACTER*80 MOSGRD1A.82
* CMESSAGE ! ERROR RETURN MESSAGE OUTPUT MOSGRD1A.83
C* MOSGRD1A.84
CL LOCAL VARIABLES AND PARAMETERS: MOSGRD1A.85
CL MOSGRD1A.86
INTEGER NSTATN,IONE MOSGRD1A.87
REAL BOX_EU_N,BOX_EU_S,BOX_EU_W,BOX_EU_E MOSGRD1A.88
REAL BOX_UK_N,BOX_UK_S,BOX_UK_W,BOX_UK_E MOSGRD1A.89
REAL UK_LAM_LT,UK_LAM_LN MOSGRD1A.90
PARAMETER (NSTATN = 372) ! NO. OF GLOBAL STATIONS MOSGRD1A.91
CL MOSGRD1A.92
PARAMETER (BOX_EU_N = 69.0) ! NORTHERN LATITUDE \ MOSGRD1A.93
PARAMETER (BOX_EU_S = 34.5) ! SOUTHERN " | OF MOS MOSGRD1A.94
PARAMETER (BOX_EU_W = 360.0-13.125) ! WESTERN LONGITUDE | EU BOX MOSGRD1A.95
PARAMETER (BOX_EU_E = 26.25) ! EASTERN " / MOSGRD1A.96
CL MOSGRD1A.97
PARAMETER (BOX_UK_N = 63.0) ! NORTHERN LATITUDE \ MOSGRD1A.98
PARAMETER (BOX_UK_S = 48.0) ! SOUTHERN " | OF MOS MOSGRD1A.99
PARAMETER (BOX_UK_W = 360.0-11.25) ! WESTERN LONGITUDE | UK BOX MOSGRD1A.100
PARAMETER (BOX_UK_E = 7.5) ! EASTERN " / MOSGRD1A.101
CL MOSGRD1A.102
PARAMETER (UK_LAM_LT = 54.0) ! LAT OF UK MOS GRID CENTRE MOSGRD1A.103
PARAMETER (UK_LAM_LN = 0.0) ! LONG OF UK MOS GRID CENTRE MOSGRD1A.104
PARAMETER (IONE = 1) MOSGRD1A.105
CL THE ABOVE PARAMETERS ARE INITIALISING VALUES MOSGRD1A.106
CL HERE ARE THE WORKING VARIABLES: MOSGRD1A.107
REAL BOX_NORTH,BOX_SOUTH,BOX_WEST,BOX_EAST ! ACTUAL BOX NAMES. MOSGRD1A.108
CL MOSGRD1A.109
REAL OFF_RANGE ! OFFSET RANGE CHANGE MOSGRD1A.110
REAL ZERO_LAT ! LOCAL PP ZERO LAT MOSGRD1A.111
REAL ZERO_LON ! LOCAL PP ZERO LON MOSGRD1A.112
REAL ELF_LAT,ELF_LON ! BOX CONVERSION STORES MOSGRD1A.113
REAL PTLAT,PTLON ! POINT LAT LONS STORES MOSGRD1A.114
REAL ALTLNG(2,372) ! ARRAY OF STATION PTS MOSGRD1A.115
INTEGER IA,IB,IC,ID,IE,IF,IG,I,J ! DO LOOP VARIABLES MOSGRD1A.116
INTEGER LTPLUS,LTMNUS,LNPLUS,LNMNUS ! 2X2 BOX INDICES MOSGRD1A.117
CL MOSGRD1A.118
CL INDIVIDUAL STATION LAT/LONGS. THE FIRST 40 ARE FOR THE EXTRA MOSGRD1A.119
CL STATIONS AROUND THE EUROPEAN BOX. THE OTHER 332 ARE THE MOSGRD1A.120
CL WORLDWIDE STATION SET. MOSGRD1A.121
CL MOSGRD1A.122
DATA ((ALTLNG(I,J),I=1,2),J=1,188)/ MOSGRD1A.123
* 52.750,324.500, 57.000,340.000, 47.000,343.000, 65.167,336.433, MOSGRD1A.124
* 63.967,337.400, 64.133,338.067, 65.683,341.917, 63.783,341.933, MOSGRD1A.125
* 65.750,344.817, 65.267,346.417, 76.767,341.233, 70.417,338.033, MOSGRD1A.126
* 65.600,322.366, 70.933,351.333, 74.500,019.017, 71.100,024.000, MOSGRD1A.127
* 71.083,028.233, 69.717,029.883, 70.367,031.100, 67.367,026.650, MOSGRD1A.128
* 62.667,029.633, 62.400,025.667, 68.967,033.050, 67.133,032.433, MOSGRD1A.129
* 67.883,044.133, 64.983,034.783, 64.583,040.500, 61.717,030.717, MOSGRD1A.130
* 61.817,034.267, 61.500,038.933, 59.967,030.300, 34.750,032.400, MOSGRD1A.131
* 34.583,032.983, 33.817,035.483, 32.683,343.233, 39.450,328.866, MOSGRD1A.132
* 38.517,331.283, 38.750,332.917, 37.750,334.283, 36.967,334.833, MOSGRD1A.133
* 78.250,015.467, 67.000,309.200, 64.167,308.250, 61.183,314.583, MOSGRD1A.134
* 16.733,337.050, 40.967,028.817, 40.117,032.983, 38.500,027.017, MOSGRD1A.135
* 37.000,035.417, 56.217,043.817, 55.750,037.567, 56.800,060.633, MOSGRD1A.136
* 53.250,050.450, 55.033,082.900, 52.267,104.350, 48.517,135.167, MOSGRD1A.137
* 43.117,131.900, 50.400,030.450, 46.483,030.633, 44.500,034.167, MOSGRD1A.138
* 49.933,036.283, 48.683,044.350, 47.250,039.817, 43.233,076.933, MOSGRD1A.139
* 41.683,044.950, 40.133,044.467, 41.267,069.267, 33.417,036.517, MOSGRD1A.140
* 32.000,034.900, 31.783,035.217, 29.550,034.950, 31.983,035.983, MOSGRD1A.141
* 25.283,049.483, 24.717,046.717, 29.217,047.983, 34.550,069.217, MOSGRD1A.142
* 21.667,039.150, 21.483,039.833, 25.250,051.567, 25.250,055.333, MOSGRD1A.143
* 24.433,054.467, 23.583,058.283, 20.667,058.900, 12.833,045.033, MOSGRD1A.144
* 34.017,071.583, 32.933,073.717, 31.550,074.333, 24.900,067.133, MOSGRD1A.145
* 23.767,090.383, 34.083,074.833, 27.150,077.967, 26.750,080.883, MOSGRD1A.146
* 23.067,072.633, 19.117,072.850, 18.533,073.850, 17.450,078.467, MOSGRD1A.147
* 13.000,080.183, 12.967,077.583, 06.817,079.883, 47.933,106.983, MOSGRD1A.148
* 27.700,085.367, 39.033,125.783, 37.567,126.967, 35.100,129.033, MOSGRD1A.149
* 43.050,141.333, 39.717,140.100, 38.267,140.900, 33.583,130.383, MOSGRD1A.150
* 31.567,130.550, 21.983,096.100, 16.900,096.183, 18.783,098.983, MOSGRD1A.151
* 13.917,100.600, 03.117,101.550, 21.017,105.800, 10.817,106.667, MOSGRD1A.152
* 45.750,126.767, 39.467,075.983, 36.050,103.883, 37.783,112.550, MOSGRD1A.153
* 41.767,123.433, 39.100,117.167, 36.067,120.333, 29.667,091.133, MOSGRD1A.154
* 30.667,104.017, 25.017,102.683, 34.300,108.933, 30.617,114.133, MOSGRD1A.155
* 32.000,118.800, 31.167,121.433, 25.033,121.517, 23.133,113.317, MOSGRD1A.156
* 28.617,342.250, 28.467,343.750, 28.050,343.433, 27.933,344.616, MOSGRD1A.157
* 28.450,346.133, 28.950,346.400, 34.050,353.233, 33.567,352.333, MOSGRD1A.158
* 31.617,351.967, 27.200,002.467, 13.483,002.167, 16.717,357.000, MOSGRD1A.159
* 18.100,344.050, 14.733,342.500, 13.350,343.200,-15.933,354.333, MOSGRD1A.160
*-20.883,055.517, 32.667,013.150, 32.083,020.267, 31.200,029.950, MOSGRD1A.161
* 31.283,032.233, 27.050,031.017, 23.967,032.783, 19.583,037.217, MOSGRD1A.162
* 15.600,032.550, 15.283,038.917, 11.550,043.150, 08.983,038.800, MOSGRD1A.163
* -0.267,036.100, -3.417,037.067, -3.233,040.100, -4.033,039.617, MOSGRD1A.164
* -6.217,039.217, -6.867,039.200, -4.667,055.517, -1.967,030.117, MOSGRD1A.165
* -3.317,029.317, -4.817,011.900, -4.250,015.250, 00.450,009.417, MOSGRD1A.166
* 04.400,018.517, 04.000,009.733, 06.350,002.383, 06.167,001.250, MOSGRD1A.167
* 12.350,358.483, 07.733,354.933, 05.250,356.067, 06.250,349.650, MOSGRD1A.168
* -8.850,013.233,-15.667,046.350,-18.800,047.483,-18.117,049.400, MOSGRD1A.169
*-19.800,034.900,-25.917,032.567,-13.000,028.650,-13.783,033.767/ MOSGRD1A.170
DATA ((ALTLNG(I,J),I=1,2),J=189,372)/ MOSGRD1A.171
*-15.317,028.450,-15.683,034.967,-17.917,031.133,-18.100,025.850, MOSGRD1A.172
*-20.017,028.617,-22.567,017.100,-24.667,025.917,-26.133,028.233, MOSGRD1A.173
*-28.800,024.767,-29.100,026.300,-29.967,030.950,-33.983,018.600, MOSGRD1A.174
*-33.983,025.600,-33.033,027.833,-40.350,350.116, 71.300,203.217, MOSGRD1A.175
* 64.817,212.133, 58.367,225.417, 82.500,297.667, 44.633,296.500, MOSGRD1A.176
* 43.667,280.366, 45.467,286.250, 46.167,299.950, 46.800,288.616, MOSGRD1A.177
* 46.617,279.200, 47.617,307.267, 53.317,299.583, 49.900,262.767, MOSGRD1A.178
* 50.433,255.333, 53.967,258.900, 50.017,249.283, 51.100,245.983, MOSGRD1A.179
* 49.183,236.833, 63.750,291.467, 58.750,265.933, 60.833,244.217, MOSGRD1A.180
* 60.717,224.933, 25.817,279.717, 30.500,278.300, 32.900,279.967, MOSGRD1A.181
* 27.967,277.467, 33.650,275.583, 32.300,273.600, 29.983,269.750, MOSGRD1A.182
* 32.317,269.917, 29.300,265.200, 27.767,262.500, 29.533,261.533, MOSGRD1A.183
* 32.900,262.967, 31.800,253.600, 32.117,249.067, 33.433,247.983, MOSGRD1A.184
* 32.733,242.833, 36.900,283.800, 36.117,273.317, 34.833,267.750, MOSGRD1A.185
* 35.400,262.400, 36.083,244.833, 39.183,283.333, 39.883,284.750, MOSGRD1A.186
* 38.183,274.267, 39.900,275.800, 38.750,269.633, 39.733,273.733, MOSGRD1A.187
* 39.317,265.283, 39.750,255.133, 37.617,237.617, 42.367,288.967, MOSGRD1A.188
* 40.500,279.783, 41.417,278.133, 42.933,281.267, 41.983,272.100, MOSGRD1A.189
* 42.233,276.667, 41.367,263.983, 40.783,248.033, 43.650,289.683, MOSGRD1A.190
* 47.633,242.467, 47.450,237.700, 40.650,286.217, 22.217,262.150, MOSGRD1A.191
* 20.667,256.616, 20.983,270.350, 19.150,263.883, 32.367,295.317, MOSGRD1A.192
* 25.050,282.533, 23.167,277.650, 19.900,284.850, 18.500,282.083, MOSGRD1A.193
* 18.567,287.700, 18.433,290.116, 18.433,294.000, 17.533,271.700, MOSGRD1A.194
* 14.583,269.483, 13.700,270.883, 10.000,275.783, 08.917,280.400, MOSGRD1A.195
* 16.267,298.483, 13.067,300.517, 10.617,298.650, 12.200,291.033, MOSGRD1A.196
* 04.700,285.866, 03.550,283.616, 10.600,293.017, -3.133,299.983, MOSGRD1A.197
* -8.067,325.150,-13.017,321.483,-19.833,316.067,-19.800,317.850, MOSGRD1A.198
*-20.550,312.567,-23.000,312.866,-22.317,310.933,-22.917,316.833, MOSGRD1A.199
*-23.383,308.817,-23.500,313.383,-30.000,308.817, -0.150,281.517, MOSGRD1A.200
*-16.517,291.817,-33.383,289.217,-36.767,286.933,-25.267,302.366, MOSGRD1A.201
*-34.833,304.000,-27.450,300.950,-75.500,333.350,-60.717,314.400, MOSGRD1A.202
*-65.250,295.733,-17.550,210.383,-37.017,174.800,-41.283,174.767, MOSGRD1A.203
*-43.483,172.550,-45.767,170.733, -9.433,147.217,-23.800,133.900, MOSGRD1A.204
*-34.933,138.517,-33.950,151.183,-37.850,144.733,-35.300,149.183, MOSGRD1A.205
*-42.833,147.500, 03.567,098.683, 05.933,116.050, -6.250,106.900, MOSGRD1A.206
* -8.750,115.167, 14.517,121.000, 07.117,125.650, 06.900,122.067, MOSGRD1A.207
* 62.083,129.750, 54.933,073.400, 22.300,114.167, 35.683,139.767, MOSGRD1A.208
* 28.583,077.200, 22.650,088.450, 01.367,103.983, 43.783,087.617, MOSGRD1A.209
* 39.933,116.283, 26.267,050.617, 16.900,042.583, 22.783,005.517, MOSGRD1A.210
* -7.967,345.600, 12.533,352.050,-20.433,057.667, 30.133,031.400, MOSGRD1A.211
* -1.317,036.917, -4.383,015.433,-49.350,070.250, 38.850,282.967, MOSGRD1A.212
* 33.933,241.600, 44.883,266.783, 53.317,246.417, 61.167,209.983, MOSGRD1A.213
* 19.433,260.917, 17.933,283.217, 21.350,202.067, 04.833,307.633, MOSGRD1A.214
*-15.783,312.067,-34.833,301.467,-39.683,286.933,-12.000,282.883, MOSGRD1A.215
*-51.817,301.550,-62.200,301.067,-77.850,166.667,-12.400,130.867, MOSGRD1A.216
*-27.433,153.083,-31.933,115.950,-17.750,177.450,-27.167,250.567/ MOSGRD1A.217
CL --------------------------------------------------------------------- MOSGRD1A.218
CL MOSGRD1A.219
CL MOSGRD1A.220
CL SETTING LOCAL VARIABLES TO GIVE PP ZERO LATS AND LONS. MOSGRD1A.221
CL ENSURING +VE DEGREES EAST. MOSGRD1A.222
CL MOSGRD1A.223
ZERO_LAT = TOP_LAT - DELTALAT MOSGRD1A.224
ZERO_LON = WEST_LON - DELTALON MOSGRD1A.225
IF(ZERO_LON .LT. 0.0) THEN MOSGRD1A.226
ZERO_LON = ZERO_LON + 360.0 ! ENSURING +VE DEG EAST MOSGRD1A.227
ENDIF MOSGRD1A.228
CL COMMENTED OUT DEBUGGING STATEMENTS ARE PREFACED BY CZ MOSGRD1A.229
CZ WRITE(6,'(''1 SUBROUTINE MOSGRID'')') MOSGRD1A.230
CZ WRITE(6,'(''0 GLOBAL MODEL ? ..........'',L5)') O_GLOBAL MOSGRD1A.231
CZ WRITE(6,'('' ELF MODEL ? .............'',L5)') O_ELF MOSGRD1A.232
CZ WRITE(6,'(''0 LATITUDE OF GRID POLE....'',F10.4)') POLE_LAT MOSGRD1A.233
CZ WRITE(6,'('' LONGITUDE OF GRID POLE...'',F10.4)') POLE_LON MOSGRD1A.234
CZ WRITE(6,'(''0 NORTHMOST LATITUDE.......'',F10.4)') TOP_LAT MOSGRD1A.235
CZ WRITE(6,'('' ZEROETH LATITUDE (PP)..'',F10.4)') ZERO_LAT MOSGRD1A.236
CZ WRITE(6,'('' LATITUDE STEPS...........'',F10.4)') DELTALAT MOSGRD1A.237
CZ WRITE(6,'('' NUMBER OF LATITUDES......'',I6)') NLATS MOSGRD1A.238
CZ WRITE(6,'(''0 WESTMOST LONGITUDE.......'',F10.4)') WEST_LON MOSGRD1A.239
CZ WRITE(6,'('' ZEROETH LONGITUDE (PP)..'',F10.4)') ZERO_LON MOSGRD1A.240
CZ WRITE(6,'('' LONGITUDE STEPS..........'',F10.4)') DELTALON MOSGRD1A.241
CZ WRITE(6,'('' NUMBER OF LONGITUDES.....'',I6)') NLONS MOSGRD1A.242
CL --------------------------------------------------------------------- MOSGRD1A.243
CL MOSGRD1A.244
CL CHOOSE BOX SIZES FOR ELF OR GLOBAL. IF NEITHER,SET ERROR FLAG MOSGRD1A.245
CL ZERO SIZES AND RETURN MOSGRD1A.246
CL MOSGRD1A.247
CL --------------------------------------------------------------------- MOSGRD1A.248
ICODE = 0 MOSGRD1A.249
CMESSAGE = ' ' MOSGRD1A.250
MAPSIZ=0 MOSGRD1A.251
CL MOSGRD1A.252
IF(O_GLOBAL .AND. O_ELF) THEN MOSGRD1A.253
WRITE(6,'(''1 ------- BOTH GLOBAL AND ELF PICKED -----'')') MOSGRD1A.254
WRITE(6,'(''0 SUBROUTINE MOSGRID ERROR'')') MOSGRD1A.255
MAPSIZ = 1 MOSGRD1A.256
ICODE = 1 MOSGRD1A.257
CMESSAGE = 'MOSGRID: BOTH GLOBAL AND ELF LOGICALS WERE SET ' MOSGRD1A.258
GOTO 99 MOSGRD1A.259
ELSE IF(O_GLOBAL) THEN MOSGRD1A.260
IF(POLE_LAT .EQ. 90.0) THEN MOSGRD1A.261
CZ WRITE(6,'(''0 GLOBAL MODEL HAS BEEN CHOSEN'')') MOSGRD1A.262
BOX_NORTH = BOX_EU_N MOSGRD1A.263
BOX_SOUTH = BOX_EU_S MOSGRD1A.264
BOX_EAST = BOX_EU_E MOSGRD1A.265
BOX_WEST = BOX_EU_W MOSGRD1A.266
ELSE MOSGRD1A.267
WRITE(6,'(''1 ----- GLOBAL MODEL POLE NOT 90.0 -----'')') MOSGRD1A.268
WRITE(6,'(''0 SUBROUTINE MOSGRID ERROR'')') MOSGRD1A.269
MAPSIZ = 0 MOSGRD1A.270
ICODE = 1 MOSGRD1A.271
CMESSAGE ='MOSGRID: GLOBAL MODEL WITH ROTATED GRID:- NO MOS' MOSGRD1A.272
GOTO 99 MOSGRD1A.273
ENDIF MOSGRD1A.274
ELSE IF (O_ELF) THEN MOSGRD1A.275
CZ WRITE(6,'(''0 ELF MODEL HAS BEEN CHOSEN'')') MOSGRD1A.276
CL --------------------------------------------------------------------- MOSGRD1A.277
CL MOSGRD1A.278
CL THE BOX IS DEFINED AS THE (ROTATED) ELF GRID BOX AROUND THE MOSGRD1A.279
CL CENTRAL UK POINT. WE FIND THE THE BOX GRID_LATS AND GRID_LONS WITH MOSGRD1A.280
CL MOSGRD1A.281
CL A) (BOX_UK_N,UK_LAM_LN) AND TAKE THE ELF GRID_LAT AS BOX_NORTH MOSGRD1A.282
CL B) (BOX_UK_S,UK_LAM_LN) AND TAKE THE ELF GRID_LAT AS BOX_SOUTH MOSGRD1A.283
CL C) (UK_LAM_LT,BOX_UK_W) AND TAKE THE ELF GRID_LONG AS BOX_WEST MOSGRD1A.284
CL D) (UK_LAM_LT,BOX_UK_E) AND TAKE THE ELF GRID_LONG AS BOX_EAST MOSGRD1A.285
CL MOSGRD1A.286
CL MOSGRD1A.287
CL --------------------------------------------------------------------- MOSGRD1A.288
CALL LLTOEQ
(BOX_UK_N,UK_LAM_LN, MOSGRD1A.289
* ELF_LAT,ELF_LON,POLE_LAT,POLE_LON,IONE) MOSGRD1A.290
CZ WRITE(6,'('' BOX N '',6F9.3)') MOSGRD1A.291
CZ * BOX_UK_N,UK_LAM_LN, MOSGRD1A.292
CZ * ELF_LAT,ELF_LON,POLE_LAT,POLE_LON MOSGRD1A.293
BOX_NORTH = ELF_LAT MOSGRD1A.294
CALL LLTOEQ
(BOX_UK_S,UK_LAM_LN, MOSGRD1A.295
* ELF_LAT,ELF_LON,POLE_LAT,POLE_LON,IONE) MOSGRD1A.296
CZ WRITE(6,'('' BOX S '',6F9.3)') MOSGRD1A.297
CZ * BOX_UK_S,UK_LAM_LN, MOSGRD1A.298
CZ * ELF_LAT,ELF_LON,POLE_LAT,POLE_LON MOSGRD1A.299
BOX_SOUTH = ELF_LAT MOSGRD1A.300
CALL LLTOEQ
(UK_LAM_LT,BOX_UK_W, MOSGRD1A.301
* ELF_LAT,ELF_LON,POLE_LAT,POLE_LON,IONE) MOSGRD1A.302
CZ WRITE(6,'('' BOX W '',6F9.3)') MOSGRD1A.303
CZ * UK_LAM_LT,BOX_UK_W, MOSGRD1A.304
CZ * ELF_LAT,ELF_LON,POLE_LAT,POLE_LON MOSGRD1A.305
BOX_WEST = ELF_LON MOSGRD1A.306
CALL LLTOEQ
(UK_LAM_LT,BOX_UK_E, MOSGRD1A.307
* ELF_LAT,ELF_LON,POLE_LAT,POLE_LON,IONE) MOSGRD1A.308
CZ WRITE(6,'('' BOX E '',6F9.3)') MOSGRD1A.309
CZ * UK_LAM_LT,BOX_UK_E, MOSGRD1A.310
CZ * ELF_LAT,ELF_LON,POLE_LAT,POLE_LON MOSGRD1A.311
BOX_EAST = ELF_LON MOSGRD1A.312
ELSE MOSGRD1A.313
WRITE(6,'(''1 ----- NEITHER GLOBAL NOR ELF PICKED -----'')') MOSGRD1A.314
WRITE(6,'(''0 SUBROUTINE MOSGRID ERROR'')') MOSGRD1A.315
MAPSIZ = 0 MOSGRD1A.316
ICODE = 1 MOSGRD1A.317
CMESSAGE = 'MOSGRID: NEITHER GLOBAL NOR ELF LOGICALS WERE SET' MOSGRD1A.318
GOTO 99 MOSGRD1A.319
ENDIF MOSGRD1A.320
CL --------------------------------------------------------------------- MOSGRD1A.321
CL MOSGRD1A.322
CL SINCE THE BOX IS AROUND THE UK, THE PROBLEM OF ZERO LONGITUDE MOSGRD1A.323
CL WILL ARISE. IF HOWEVER THE GRID IS ELF, THEN THE ACTUAL VALUE OF MOSGRD1A.324
CL THE ROTATED GRID MAY WELL MAKE BOX_WEST LESS THAN BOX_EAST. MOSGRD1A.325
CL TO RESOLVE THE INCLUSION PROBLEM, THEN IF BOX_WEST > BOX_EAST, THEN MOSGRD1A.326
CL THE PRIME RANGE OF THE VALUES WILL BE 180 TO 540, RATHER THAN MOSGRD1A.327
CL 0 TO 360. ALL LONGITUDES LESS THAN 180 WILL HAVE AN ADDITION OF MOSGRD1A.328
CL 360 DEGREES AS A RANGE OFFSET. MOSGRD1A.329
CL MOSGRD1A.330
CL --------------------------------------------------------------------- MOSGRD1A.331
IF(BOX_WEST .GT. BOX_EAST) THEN MOSGRD1A.332
BOX_EAST = BOX_EAST+360.0 MOSGRD1A.333
OFF_RANGE = 360.0 MOSGRD1A.334
ELSE MOSGRD1A.335
OFF_RANGE = 0.0 MOSGRD1A.336
ENDIF MOSGRD1A.337
CL MOSGRD1A.338
CZ WRITE(6,'(''0 GLOBAL MODEL ? ..........'',L5)') O_GLOBAL MOSGRD1A.339
CZ WRITE(6,'('' ELF MODEL ? .............'',L5)') O_ELF MOSGRD1A.340
CZ WRITE(6,'(''0 ZEROETH LATITUDE.......'',F10.4)') ZERO_LAT MOSGRD1A.341
CZ WRITE(6,'('' LATITUDE STEPS...........'',F10.4)') DELTALAT MOSGRD1A.342
CZ WRITE(6,'('' NUMBER OF LATITUDES......'',I6)') NLATS MOSGRD1A.343
CZ WRITE(6,'(''0 ZEROETH LONGITUDE.......'',F10.4)') ZERO_LON MOSGRD1A.344
CZ WRITE(6,'('' LONGITUDE STEPS..........'',F10.4)') DELTALON MOSGRD1A.345
CZ WRITE(6,'('' NUMBER OF LONGITUDES.....'',I6)') NLONS MOSGRD1A.346
CZ WRITE(6,'(''0 NORTHMOST BOX LAT........'',F10.4)') BOX_NORTH MOSGRD1A.347
CZ WRITE(6,'('' SOUTHMOST BOX LAT........'',F10.4)') BOX_SOUTH MOSGRD1A.348
CZ WRITE(6,'('' WESTMOST BOX LON........'',F10.4)') BOX_WEST MOSGRD1A.349
CZ WRITE(6,'('' EASTMOST BOX LON........'',F10.4)') BOX_EAST MOSGRD1A.350
CZ WRITE(6,'('' OFFSET FOR RANGE CHANGE..'',F10.4)') OFF_RANGE MOSGRD1A.351
CL --------------------------------------------------------------------- MOSGRD1A.352
CL MOSGRD1A.353
CL INITIALISING MOSMAP TO ZERO. MOSGRD1A.354
CL MOSGRD1A.355
CL --------------------------------------------------------------------- MOSGRD1A.356
DO IA = 1, NLATS MOSGRD1A.357
DO IB = 1, NLONS MOSGRD1A.358
MOSMAP(IB,IA) = 0 MOSGRD1A.359
ENDDO MOSGRD1A.360
ENDDO MOSGRD1A.361
CL --------------------------------------------------------------------- MOSGRD1A.362
CL MOSGRD1A.363
CL THIS LOOPS THE LATS. IF THE BOX CONTAINS THIS LAT, THE INNER DOES MOSGRD1A.364
CL THE LONS.IF THE DEFINITION OF THE LONS GIVES THE POINT OUTSIDE MOSGRD1A.365
CL THE RANGE 0 TO 360, IT IS RESET INTO THE RANGE, BEFORE ANY CHANGE MOSGRD1A.366
CL OF RANGE FROM 180 TO 540 MOSGRD1A.367
CL CORRECTION 06/03/91 TO COPE WITH START OF FULL GRID OFFSET MOSGRD1A.368
CL CHANGES (IC-1) TO IC AND (ID-1) TO ID MOSGRD1A.369
CL MOSGRD1A.370
CL --------------------------------------------------------------------- MOSGRD1A.371
DO IC = 1, NLATS ! TOP LATITUDE IS 0TH ROW MOSGRD1A.372
PTLAT = ZERO_LAT +IC*DELTALAT ! LAT START + NUMBER OF STEPS MOSGRD1A.373
CZ WRITE(6,'('' IC,LAT,BOXN,BOXS'',I8,3F8.3)') MOSGRD1A.374
CZ * IC,PTLAT,BOX_NORTH,BOX_SOUTH MOSGRD1A.375
CL MOSGRD1A.376
CL PRECISION PROBLEMS. ALLOW *JUST* OUTSIDE BOX. WITH DELTALAT -VE MOSGRD1A.377
CL MOSGRD1A.378
IF(((PTLAT - 0.01*DELTALAT) .GE. BOX_SOUTH) .AND. MOSGRD1A.379
* ((PTLAT + 0.01*DELTALAT) .LE. BOX_NORTH)) THEN MOSGRD1A.380
DO ID = 1, NLONS ! WESTMOST LON- 0TH COL MOSGRD1A.381
PTLON = ZERO_LON + ID*DELTALON ! START + NUMBER OF STEP S MOSGRD1A.382
IF(PTLON .GT. 360.0) THEN MOSGRD1A.383
PTLON = PTLON - 360.0 ! WRAP AROUND MOSGRD1A.384
ELSE IF(PTLON .LT. 0.0) THEN MOSGRD1A.385
PTLON = PTLON + 360.0 MOSGRD1A.386
ENDIF MOSGRD1A.387
IF(PTLON .LE. 180.0) THEN MOSGRD1A.388
PTLON = PTLON + OFF_RANGE ! IF BOX CROSSES 0 E MOSGRD1A.389
ENDIF MOSGRD1A.390
CZ WRITE(6,'('' ID,LON,BOXW,BOXE'',I8,3F8.3)') MOSGRD1A.391
CZ * ID,PTLON,BOX_WEST,BOX_EAST MOSGRD1A.392
CL MOSGRD1A.393
CL PRECISION PROBLEMS AGAIN. MOSGRD1A.394
CL MOSGRD1A.395
IF(((PTLON + 0.01*DELTALON) .GE. BOX_WEST) .AND. MOSGRD1A.396
* ((PTLON - 0.01*DELTALON) .LE. BOX_EAST)) THEN MOSGRD1A.397
CZ WRITE(6,'('' POINT SET IC,ID,LAT,LON'',2I5,2F10.4)') MOSGRD1A.398
CZ * IC,ID,PTLAT,PTLON MOSGRD1A.399
MOSMAP(ID,IC) = 1 ! SET VALUES MOSGRD1A.400
ENDIF MOSGRD1A.401
ENDDO MOSGRD1A.402
ENDIF MOSGRD1A.403
ENDDO MOSGRD1A.404
CZ WRITE(6,'('' BOX FINISHED '')') MOSGRD1A.405
CL --------------------------------------------------------------------- MOSGRD1A.406
CL MOSGRD1A.407
CL THERE ARE STATIONS IN THE BITMAP WITH 2*2 GRID POINT BOXES MOSGRD1A.408
CL *ONLY* FOR THE GLOBAL GRID. MOSGRD1A.409
CL MOSGRD1A.410
CL --------------------------------------------------------------------- MOSGRD1A.411
IF(O_GLOBAL) THEN MOSGRD1A.412
CL --------------------------------------------------------------------- MOSGRD1A.413
CL MOSGRD1A.414
CL SO, FOR A FILLED GLOBAL BITMAP..... MOSGRD1A.415
CL MOSGRD1A.416
CL LOOP THE INDIVIDUAL STATIONS. THE 2 BY 2 GRID POINT BOXES MOSGRD1A.417
CL AROUND THE STATION POSITION ARE SET IN MOSMAP. MOSGRD1A.418
CL MOSGRD1A.419
CL --------------------------------------------------------------------- MOSGRD1A.420
DO IE = 1, NSTATN MOSGRD1A.421
LTMNUS = (ZERO_LAT- ALTLNG(1,IE))/DELTALAT ! TRUNC NORTHWARDSS MOSGRD1A.422
* -0.001 ! ROUNDING PROTECT MOSGRD1A.423
LTMNUS = -LTMNUS ! DELTALT NEGATIVES MOSGRD1A.424
LTPLUS = LTMNUS + 1 ! GIVES S_WARD ROW MOSGRD1A.425
LNMNUS = (ALTLNG(2,IE) - ZERO_LON ! TRUNC WESTWARDS MOSGRD1A.426
* +720.0)/DELTALON ! ENSURING +VE MOSGRD1A.427
* +0.001 ! ROUNDING PROTECT MOSGRD1A.428
LNPLUS = LNMNUS + 1 ! GIVES E_WARD COL MOSGRD1A.429
CL MOSGRD1A.430
CL MODULO 360 (INDEXES IN THE RANGE 1 TO NLONS) MOSGRD1A.431
CL MOSGRD1A.432
LNMNUS = MOD(LNMNUS,NLONS) MOSGRD1A.433
IF(LNMNUS .EQ. 0) LNMNUS = NLONS MOSGRD1A.434
LNPLUS = MOD(LNPLUS,NLONS) MOSGRD1A.435
IF(LNPLUS .EQ. 0) LNPLUS = NLONS MOSGRD1A.436
CL MOSGRD1A.437
MOSMAP(LNMNUS,LTMNUS) = 1 ! NORTHWEST CORNER MOSGRD1A.438
MOSMAP(LNPLUS,LTMNUS) = 1 ! NORTHEAST CORNER MOSGRD1A.439
MOSMAP(LNMNUS,LTPLUS) = 1 ! SOUTHWEST CORNER MOSGRD1A.440
MOSMAP(LNPLUS,LTPLUS) = 1 ! SOUTHEAST CORNER MOSGRD1A.441
CZ WRITE(6,'('' POINT '',I5,'' BOX GRID '',4I5)') MOSGRD1A.442
CZ * IE,LTMNUS,LTPLUS,LNMNUS,LNPLUS MOSGRD1A.443
ENDDO MOSGRD1A.444
ENDIF MOSGRD1A.445
CL --------------------------------------------------------------------- MOSGRD1A.446
CL MOSGRD1A.447
CL COUNTING THE NUMBER OF POINTS SET. MOSGRD1A.448
CL MOSGRD1A.449
CL --------------------------------------------------------------------- MOSGRD1A.450
MAPSIZ=0 MOSGRD1A.451
DO IF = 1, NLATS MOSGRD1A.452
DO IG = 1, NLONS MOSGRD1A.453
IF(MOSMAP(IG,IF) .NE. 0) MAPSIZ=MAPSIZ+1 MOSGRD1A.454
ENDDO MOSGRD1A.455
ENDDO MOSGRD1A.456
CZ WRITE(6,'('' NUMBER OF POINTS SET '',I8)') MAPSIZ MOSGRD1A.457
99 RETURN MOSGRD1A.458
CL --------------------------------------------------------------------- MOSGRD1A.459
END MOSGRD1A.460
*ENDIF MOSGRD1A.461