*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