*IF DEF,CONTROL,OR,DEF,RECON,OR,DEF,FLDOP                                  GAV0F405.100    
C ******************************COPYRIGHT******************************    GTS2F400.12939  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.12940  
C                                                                          GTS2F400.12941  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.12942  
C restrictions as set forth in the contract.                               GTS2F400.12943  
C                                                                          GTS2F400.12944  
C                Meteorological Office                                     GTS2F400.12945  
C                London Road                                               GTS2F400.12946  
C                BRACKNELL                                                 GTS2F400.12947  
C                Berkshire UK                                              GTS2F400.12948  
C                RG12 2SZ                                                  GTS2F400.12949  
C                                                                          GTS2F400.12950  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.12951  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.12952  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.12953  
C Modelling at the above address.                                          GTS2F400.12954  
C                                                                          GTS2F400.12955  
!+Checks version mask and option code in a ppx record                      TSTMSK1.3      
!                                                                          TSTMSK1.4      
! Subroutine Interface:                                                    TSTMSK1.5      
                                                                           TSTMSK1.6      

      SUBROUTINE TSTMSK(MODL,ISEC,LMASK,LADRES,ErrorStatus,CMESSAGE)        3GSS3F401.1205   
      IMPLICIT NONE                                                        GSS3F401.1206   
                                                                           GSS3F401.1207   
! Description:                                                             GSS3F401.1208   
!   Determines whether a diagnostic is available to a particular           GSS3F401.1209   
!   (internal model,section) version. Also checks the option code IOPN     GSS3F401.1210   
!   Called by INACTR, PRELIM.                                              GSS3F401.1211   
!                                                                          GSS3F401.1212   
! Method:                                                                  GSS3F401.1213   
!                                                                          GSS3F401.1214   
! The decimal value of the version mask, VMSK, was read from the           GSS3F401.1215   
! ppxref file by GETPPX, each (model, section, item). The version          GSS3F401.1216   
! number of the (model, section) - NMASK - is obtained from the            GSS3F401.1217   
! H_VERS array.                                                            GSS3F401.1218   
!                                                                          GSS3F401.1219   
! The procedure for checking diagnostic availability is as follows:        GSS3F401.1220   
! (1) Check whether the relevant internal model is included in the         GSS3F401.1221   
!     submodel configuration, by examining the INTERNAL_MODEL_LIST         GSS3F401.1222   
!     array; if not, return.                                               GSS3F401.1223   
! (2) Check whether NMASK=0 - this implies that the diag is                GSS3F401.1224   
!      unavailable to any version. If so, return.                          GSS3F401.1225   
! (3) Check whether the diag is available to the specified version.        GSS3F401.1226   
!     The 'version mask' binary code in the STASHmaster specifies          GSS3F401.1227   
!     which versions the diag is available to. Eg., if it is available     GSS3F401.1228   
!     to vns. 1 and 3, but not vn.2, the version mask is 101. VMSK         GSS3F401.1229   
!     is the decimal equivalent of the version mask (5 in this example).   GSS3F401.1230   
!     TSTMSK therefore calculates the quantity                             GSS3F401.1231   
!                                                                          GSS3F401.1232   
!             IMOD = MOD(VMSK,2**NMASK)/2**(NMASK-1)                       GSS3F401.1233   
!                                                                          GSS3F401.1234   
!       If IMOD=1, the diag is available; if IMOD=0, it isn't.             GSS3F401.1235   
!                                                                          GSS3F401.1236   
!   The option code is checked in accordance with the ppxref option        GSS3F401.1237   
!   code definitions.                                                      GSS3F401.1238   
!                                                                          GSS3F401.1239   
! Current code owner:  S.J.Swarbrick                                       GSS3F401.1240   
!                                                                          GSS3F401.1241   
! History:                                                                 GSS3F401.1242   
! Version   Date       Comment                                             GSS3F401.1243   
! =======   ====       =======                                             GSS3F401.1244   
!   3.5     Mar. 95    Original code.  S.J.Swarbrick                       GSS3F401.1245   
!   4.1     May. 96    Alter for wave model and other STASH items          GSS3F401.1246   
!                       introduced at 4.1. Also restructure routine        GSS3F401.1247   
!                       in accordance with internal model-specific         GSS3F401.1248   
!                       STASHmaster files.             S.J.Swarbrick       GSS3F401.1249   
!   4.3     Mar. 97    Introduce option codes for ocean VISBECK,           ARB1F404.441    
!                        'Richardson No.' & 'Quadratic Large' schemes      GSS2F403.316    
!                                                      S.J.Swarbrick       GSS2F403.317    
!   4.3     18/3/97    Allow for quantities which depend on the HadCM2     AWI1F403.68     
!                      approximate treatment of sulphate aerosol.  WJI     AWI1F403.69     
!   4.4     09/10/97   Option code for energy correction prognostic        GSM3F404.52     
!                      S.D. Mullerworth                                    GSM3F404.53     
!  4.4  01/08/97  Add option code 12 for implementing QCF as prognostic    ARB1F404.442    
!                 for mixed phase precipitation scheme.  RTHBarnes.        ARB1F404.443    
!  4.4  10/10/97  Add option code N11 to control vegetation fields         ABX2F404.96     
!                 required. Use of Option Code N8=6 redefined.             ABX2F404.97     
!                 D. Robinson.                                             ABX2F404.98     
!  4.4  02/10/97  Add option code 13 for section 0 to control which        AJX5F405.1      
!                 prognostic used if CCA is 2D or 3D. J. Gregory.          AJX5F405.2      
!  4.5  14/08/98  Add option code 3 in section 5 to control whether        AJX5F405.3      
!                 item is allowed with 3D or 2D CCA. J.Gregory             AJX5F405.4      
!  4.5  15/07/98  Add new option code for use with the carbon cycle.       ACN2F405.4      
!                 Code 16 for section 0, and code 3 for section 3.         ACN2F405.5      
!                 C.D.Jones                                                ACN2F405.6      
!  4.5  13/05/98  Add option code 15 for section 0, option codes           ASK1F405.27     
!                 2 and 3 for section 9 STASH items.      S. Cusack        ASK1F405.28     
!  4.5  30/04/98  Extend options for N10 to include NH3 in S Cycle         AWO0F405.14     
!                 Add option code 14 to control soot modelling             AWO0F405.15     
!                 Add code to test section 17 diagnostics. M. Woodage      AWO0F405.16     
!  4.5  18/08/98  Added DEF,FLDOP   (A Van der Wal)                        GAV0F405.101    
!  4.5  22/10/98  Remove redundant switch LMULTIL_HYDROL                   GDG2F405.86     
!                 Author D.M. Goddard                                      GDG2F405.87     
!  4.5  10/11/98  Enable GM output if either (L_OISOPYCGM.OR.L_OISOGM)     OOM1F405.11     
!                 true.                  M. Roberts                        OOM1F405.12     
!                                                                          GSS3F401.1250   
!  Code description:                                                       GSS3F401.1251   
!    FORTRAN 77 + common Fortran 90 extensions.                            GSS3F401.1252   
!    Written to UM programming standards version 7.                        GSS3F401.1253   
!                                                                          GSS3F401.1254   
!  System component covered:                                               GSS3F401.1255   
!  System task:               Sub-Models Project                           GSS3F401.1256   
!                                                                          GSS3F401.1257   
! Global variables:                                                        GSS3F401.1258   
*CALL CSUBMODL                                                             GSS3F401.1259   
*CALL VERSION                                                              GSS3F401.1260   
*CALL CSTASH                                                               GSS3F401.1261   
*CALL TYPSIZE                                                              GSS3F401.1262   
*CALL MODEL                                                                GSS3F401.1263   
*CALL CNTLATM                                                              GSS3F401.1264   
*CALL CNTLOCN                                                              GSS3F401.1265   
*CALL CNTLSLB                                                              GSS3F401.1266   
                                                                           GSS3F401.1267   
! Subroutine arguments:                                                    GSS3F401.1268   
!   Scalar arguments with intent(in):                                      GSS3F401.1269   
      INTEGER MODL    ! Internal model number                              GSS3F401.1270   
      INTEGER ISEC    ! Section number                                     GSS3F401.1271   
                                                                           GSS3F401.1272   
!   Scalar arguments with intent(out):                                     GSS3F401.1273   
      LOGICAL LMASK   ! T if diag is available to specified version        GSS3F401.1274   
      LOGICAL LADRES  ! T if diag is available for addressing primary      GSS3F401.1275   
      CHARACTER*80 CMESSAGE                                                GSS3F401.1276   
                                                                           GSS3F401.1277   
! Local scalars                                                            GSS3F401.1278   
      INTEGER NMASK   ! Version number for (model,section)                 GSS3F401.1279   
      INTEGER IMOD    ! Determines whether diag is available               GSS3F401.1280   
      INTEGER TWONM   ! Used in calculation of IMOD                        GSS3F401.1281   
      INTEGER TWONM1  ! Used in calculation of IMOD                        GSS3F401.1282   
      INTEGER COUNT                                                        GSS3F401.1283   
      INTEGER I                                                            GSS3F401.1284   
      INTEGER N0,N1,N2,N2N1,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13           ARB1F404.444    
      INTEGER N14,N15,N16                                                  AWO0F405.17     
      INTEGER SUM_IOPN                                                     GSS3F401.1286   
                                                                           GSS3F401.1287   
! ErrorStatus                                                              GSS3F401.1288   
      INTEGER ErrorStatus                                                  GSS3F401.1289   
                                                                           GSS3F401.1290   
!- End of Header ---------------------------------------------------       GSS3F401.1291   
                                                                           GSS3F401.1292   
      SUM_IOPN=IOPN(1)+IOPN(2)+IOPN(3)+IOPN(4)                             GSS3F401.1293   
!--------------------------------------------------------------------      GSS3F401.1294   
!Check whether internal model is included in submodel configuration        GSS3F401.1295   
!--------------------------------------------------------------------      GSS3F401.1296   
      COUNT = 0                                                            GSS3F401.1297   
      DO I = 1,N_INTERNAL_MODEL_MAX                                        GSS3F401.1298   
      IF (INTERNAL_MODEL_LIST(I).EQ.MODL) THEN                             GSS3F401.1299   
        LMASK =.TRUE.                                                      GSS3F401.1300   
        LADRES=.TRUE.                                                      GSS3F401.1301   
        COUNT = COUNT + 1                                                  GSS3F401.1302   
      END IF                                                               GSS3F401.1303   
      END DO                                                               GSS3F401.1304   
      IF (COUNT.EQ.0) THEN                                                 GSS3F401.1305   
        LMASK =.FALSE.                                                     GSS3F401.1306   
        LADRES=.FALSE.                                                     GSS3F401.1307   
        GO TO 9999                                                         GSS3F401.1308   
      END IF                                                               GSS3F401.1309   
                                                                           GSS3F401.1310   
!--------------------------------------------------------------------      GSS3F401.1311   
!Check whether diagnostic is unavailable to any version                    GSS3F401.1312   
!--------------------------------------------------------------------      GSS3F401.1313   
      NMASK=H_VERS(MODL,ISEC)                                              GSS3F401.1314   
      IF (NMASK.EQ.0) THEN                                                 GSS3F401.1315   
        LMASK =.FALSE.                                                     GSS3F401.1316   
        LADRES=.FALSE.                                                     GSS3F401.1317   
        GOTO 9999                                                          GSS3F401.1318   
      END IF                                                               GSS3F401.1319   
                                                                           GSS3F401.1320   
! Determine whether the diag is available to the specified version         GSS3F401.1321   
      TWONM  = 2**NMASK                                                    GSS3F401.1322   
      TWONM1 = 2**(NMASK-1)                                                GSS3F401.1323   
      IMOD   = MOD(VMSK,TWONM)/TWONM1                                      GSS3F401.1324   
      IF(IMOD.EQ.1) THEN                                                   GSS3F401.1325   
        LMASK =.TRUE.                                                      GSS3F401.1326   
      ELSE IF(IMOD.EQ.0) THEN                                              GSS3F401.1327   
        LMASK =.FALSE.                                                     GSS3F401.1328   
        LADRES=.FALSE.                                                     GSS3F401.1329   
        GOTO 9999                                                          GSS3F401.1330   
      ELSE                                                                 GSS3F401.1331   
        WRITE(6,*)'S: TSTMSK INVALID DECODING OF VMSK',VMSK                GSS3F401.1332   
        WRITE(6,*)'S: ... IMOD=',IMOD,'     NMASK=',NMASK                  GSS3F401.1333   
      END IF                                                               GSS3F401.1334   
                                                                           GSS3F401.1335   
!-------------------------------------------------------------------       GSS3F401.1336   
!Check option codes                                                        GSS3F401.1337   
!-------------------------------------------------------------------       GSS3F401.1338   
      LMASK=.TRUE.                                                         GSS3F401.1339   
      IF (MODL.EQ.A_IM.OR.MODL.EQ.S_IM) THEN                               GSS3F401.1340   
        IF(ISEC.EQ.0) THEN                                                 GSS3F401.1341   
!Atmos or slab primary field                                               GSS3F401.1342   
            IF(SUM_IOPN.NE.0) THEN                                         GSS3F401.1343   
              N2N1=MOD (IOPN(1),100)                                       GSS3F401.1344   
              N3  =MOD((IOPN(1)/100),10)                                   GSS3F401.1345   
              N4  =MOD((IOPN(1)/1000),10)                                  GSS3F401.1346   
              N5  =MOD((IOPN(1)/10000),10)                                 GSS3F401.1347   
              N6  =MOD( IOPN(2),10)                                        GSS3F401.1348   
              N7  =MOD((IOPN(2)/10),10)                                    GSS3F401.1349   
              N8  =MOD((IOPN(2)/100),10)                                   GSS3F401.1350   
              N9  =MOD((IOPN(2)/1000),10)                                  GSS3F401.1351   
              N10 =MOD((IOPN(2)/10000),10)                                 GSS3F401.1352   
              N11 =MOD( IOPN(3),10)                                        ARB1F404.445    
              N12 =MOD((IOPN(3)/10),10)                                    ARB1F404.446    
              N13 =MOD((IOPN(3)/100),10)                                   AJX0F404.308    
              N14 =MOD((IOPN(3)/1000),10)                                  AWO0F405.18     
              N15 =MOD((IOPN(3)/10000),10)                                 AWO0F405.19     
              N16 =MOD( IOPN(4),10)                                        ACN2F405.7      
              IF((N2N1.NE.0).AND.(.NOT.TRACER_A(N2N1))) THEN               GSS3F401.1353   
                LMASK=.FALSE.                                              GSS3F401.1354   
              ELSE IF((N3.EQ.1).AND.(.NOT.LSINGLE_HYDROL)) THEN            GSS3F401.1355   
                LMASK=.FALSE.                                              GSS3F401.1356   
              ELSE IF((N3.EQ.3).AND.(.NOT.LMOSES)) THEN                    GSS3F401.1359   
                LMASK=.FALSE.                                              GSS3F401.1360   
              ELSE IF((N3.EQ.4).AND.(LSINGLE_HYDROL)) THEN                 GSS3F401.1361   
                LMASK=.FALSE.                                              GSS3F401.1362   
              ELSE IF((N3.EQ.4).AND.(.NOT.LSINGLE_HYDROL)                  GSS3F401.1363   
     &                         .AND.(.NOT.LMOSES)   ) THEN                 GSS3F401.1365   
                LMASK=.FALSE.                                              GSS3F401.1366   
              ELSE IF((N4.EQ.1).AND.(H_STRAT.EQ.'Y')) THEN                 GSS3F401.1367   
                LMASK=.FALSE.                                              GSS3F401.1368   
              ELSE IF((N5.EQ.1).AND.(OROGR.EQ.'N')) THEN                   GSS3F401.1369   
                LMASK=.FALSE.                                              GSS3F401.1370   
              ELSE IF((N6.EQ.1).AND.(H_GLOBAL(A_IM).EQ.'Y')) THEN          GSS3F401.1371   
                LMASK=.FALSE.                                              GSS3F401.1372   
              ELSE IF((N6.EQ.2).AND.(H_FLOOR.EQ.'N')) THEN                 GSS3F401.1373   
                LMASK=.FALSE.                                              GSS3F401.1374   
              ELSE IF((N7.EQ.1).AND.(H_SLAB.EQ.'N')) THEN                  GSS3F401.1375   
                LMASK=.FALSE.                                              GSS3F401.1376   
              ELSE IF((N7.EQ.2).AND.(H_OCEAN.EQ.'N')) THEN                 GSS3F401.1377   
                LMASK=.FALSE.                                              GSS3F401.1378   
              ELSE IF((N7.EQ.3).AND.                                       GSS3F401.1379   
     &         (H_SLAB_CAL.EQ.'N'.OR.H_SLAB.EQ.'N')) THEN                  GSS3F401.1380   
                LMASK=.FALSE.                                              GSS3F401.1381   
              ELSE IF((N7.EQ.4).AND.                                       GSS3F401.1382   
     &         (H_SLAB_CAL.EQ.'Y'.OR.H_SLAB.EQ.'N')) THEN                  GSS3F401.1383   
                LMASK=.FALSE.                                              GSS3F401.1384   
              ELSE IF((N7.EQ.5).AND.                                       GSS3F401.1385   
     &         (.NOT.L_IDYN.OR.H_SLAB.EQ.'N')) THEN                        GSS3F401.1386   
                LMASK=.FALSE.                                              GSS3F401.1387   
              ELSE IF((N8.EQ.1).AND.(SSTAnom.EQ.'N')) THEN                 GSS3F401.1388   
                LMASK=.FALSE.                                              GSS3F401.1389   
              ELSE IF((N8.EQ.4).AND.(TOTAE.NE.'Y')) THEN                   GSS3F401.1390   
                LMASK=.FALSE.                                              GSS3F401.1391   
              ELSE IF((N8.EQ.5).AND.(H_TOTEM.NE.'Y')) THEN                 GSS3F401.1392   
                LMASK=.FALSE.                                              GSS3F401.1393   
              ELSE IF((N8.EQ.6).AND.(.NOT.L_SNOW_ALBEDO)) THEN             ABX2F404.99     
                LMASK=.FALSE.                                              GSS3F401.1395   
              ELSEIF ( ( N8 .EQ. 7) .AND. ( .NOT. L_H2_SULPH ) ) THEN      AWI1F403.70     
                LMASK=.FALSE.                                              GSM3F404.54     
              ELSEIF ( ( N8 .EQ. 8) .AND. (ATMOS_SR(14).EQ.'0A') ) THEN    GSM3F404.55     
                LMASK=.FALSE.                                              AWI1F403.71     
              ELSE IF((N9.EQ.1).AND.(.NOT.H_OROG_GRAD)) THEN               GSS3F401.1396   
                LMASK=.FALSE.                                              GSS3F401.1397   
              ELSE IF((N10.EQ.1).AND.(.NOT.L_SULPC_SO2)) THEN              GSS3F401.1398   
                LMASK=.FALSE.                                              GSS3F401.1399   
              ELSE IF((N10.EQ.2).AND.((.NOT.L_SULPC_SO2)                   GSS3F401.1400   
     &                          .OR.  (.NOT.L_SO2_SURFEM )) ) THEN         GSS3F401.1401   
                LMASK=.FALSE.                                              GSS3F401.1402   
              ELSE IF((N10.EQ.3).AND.((.NOT.L_SULPC_SO2)                   GSS3F401.1403   
     &                          .OR.  (.NOT.L_SO2_HILEM )) ) THEN          GSS3F401.1404   
                LMASK=.FALSE.                                              GSS3F401.1405   
              ELSE IF((N10.EQ.4).AND.((.NOT.L_SULPC_SO2)                   GSS3F401.1406   
     &                          .OR.  (.NOT.L_SO2_NATEM )) ) THEN          GSS3F401.1407   
                LMASK=.FALSE.                                              GSS3F401.1408   
              ELSE IF((N10.EQ.5).AND.((.NOT.L_SULPC_SO2)                   GSS3F401.1409   
     &                          .OR.  (.NOT.L_SULPC_DMS)) ) THEN           GSS3F401.1410   
                LMASK=.FALSE.                                              GSS3F401.1411   
              ELSE IF((N10.EQ.6).AND.((.NOT.L_SULPC_SO2)                   GSS3F401.1412   
     &                          .OR.  (.NOT.L_SULPC_DMS)                   GSS3F401.1413   
     &                          .OR.  (.NOT.L_DMS_EM    )) ) THEN          GSS3F401.1414   
                LMASK=.FALSE.                                              GSS3F401.1415   
              ELSE IF((N10.EQ.7).AND.((.NOT.L_SULPC_SO2)                   GSS3F401.1416   
     &                          .OR.  (.NOT.L_SULPC_OZONE )) ) THEN        GSS3F401.1417   
                LMASK=.FALSE.                                              GSS3F401.1418   
             ELSE IF((N10.EQ.8).AND.((.NOT.L_SULPC_SO2)                    AWO0F405.20     
     &                         .OR.  (.NOT.L_SULPC_OZONE)                  AWO0F405.21     
     &                         .OR.  (.NOT.L_SULPC_NH3))  )  THEN          AWO0F405.22     
               LMASK=.FALSE.                                               AWO0F405.23     
             ELSE IF((N10.EQ.9).AND.((.NOT.L_SULPC_SO2)                    AWO0F405.24     
     &                         .OR.  (.NOT.L_SULPC_OZONE)                  AWO0F405.25     
     &                         .OR.  (.NOT.L_SULPC_NH3)                    AWO0F405.26     
     &                         .OR.  (.NOT.L_NH3_EM))  )  THEN             AWO0F405.27     
               LMASK=.FALSE.                                               AWO0F405.28     
              ELSE IF((N11.EQ.1).AND.(L_VEG_FRACS.OR.L_TRIFFID) )THEN      ARB1F404.447    
                LMASK=.FALSE.                                              ARB1F404.448    
              ELSE IF((N11.EQ.2).AND.(.NOT.L_VEG_FRACS))THEN               ARB1F404.449    
                LMASK=.FALSE.                                              ARB1F404.450    
              ELSE IF((N11.EQ.3).AND.                                      ARB1F404.451    
     &                (.NOT.L_VEG_FRACS.OR..NOT.L_TRIFFID) )THEN           ARB1F404.452    
                LMASK=.FALSE.                                              ARB1F404.453    
              ELSE IF((N12.EQ.1) .AND. (L_LSPICE)) THEN                    ARB1F404.454    
                LMASK=.FALSE.   ! QCF is secondary 403 (not prognostic)    ARB1F404.455    
              ELSE IF((N12.EQ.2) .AND. (.NOT.L_LSPICE)) THEN               ARB1F404.456    
                LMASK=.FALSE.   ! QCF is primary 12 (prognostic)           ARB1F404.457    
              ELSE IF ((N13.EQ.1).AND.(L_3D_CCA)) THEN                     AJX0F404.309    
                LMASK=.FALSE.    !  CCA is 2D                              AJX0F404.310    
              ELSE IF ((N13.EQ.2).AND.(.NOT.L_3D_CCA)) THEN                AJX0F404.311    
                LMASK=.FALSE.    !  CCA is 3D                              AJX0F404.312    
              ELSE IF((N14.EQ.1).AND.(.NOT.L_SOOT))  THEN                  AWO0F405.29     
                LMASK=.FALSE.                                              AWO0F405.30     
              ELSE IF((N14.EQ.2).AND.((.NOT.L_SOOT)                        AWO0F405.31     
     &                          .OR.  (.NOT.L_SOOT_SUREM)) )  THEN         AWO0F405.32     
                LMASK=.FALSE.                                              AWO0F405.33     
              ELSE IF((N14.EQ.3).AND.((.NOT.L_SOOT)                        AWO0F405.34     
     &                         .OR.  (.NOT.L_SOOT_HILEM)) )  THEN          AWO0F405.35     
                LMASK=.FALSE.                                              AWO0F405.36     
              ELSE IF ((N15.EQ.1).AND.(.NOT.L_RHCPT)) THEN                 AWO0F405.37     
                LMASK=.FALSE.    !  RHCRIT switched off                    AWO0F405.38     
              ELSE IF ((N16.EQ.1).AND.(.NOT.L_CO2_INTERACTIVE)) THEN       ACN2F405.8      
                LMASK=.FALSE.    !  Carbon cycle switched off              ACN2F405.9      
              ELSE                                                         GSS3F401.1419   
                LMASK=.TRUE.                                               GSS3F401.1420   
              END IF                                                       GSS3F401.1421   
            ELSE                                                           GSS3F401.1422   
!IOPN.EQ.0                                                                 GSS3F401.1423   
              LMASK=.TRUE.                                                 GSS3F401.1424   
            END IF                                                         GSS3F401.1425   
        END IF                                                             GSS3F401.1426   
!End of atmos/slab primary block                                           GSS3F401.1427   
      END IF                                                               GSS3F401.1428   
                                                                           GSS3F401.1429   
      IF (MODL.EQ.A_IM) THEN                                               GSS3F401.1430   
!Atmos diagnostics                                                         GSS3F401.1431   
      IF(ISEC.EQ.1) THEN                                                   GSS3F401.1432   
!Shortwave radiation                                                       GSS3F401.1433   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1434   
          LMASK=.TRUE.                                                     GSS3F401.1435   
        ELSE                                                               GSS3F401.1436   
          N1=MOD (IOPN(1)    ,10)                                          GSS3F401.1437   
          N2=MOD((IOPN(1)/10),10)                                          GSS3F401.1438   
          N3 = MOD((IOPN(1)/100),10)                                       AWI1F403.72     
          N4 = MOD((IOPN(1)/1000),10)                                      AAJ3F404.1      
          IF((N1.EQ.1).AND.(H_GLOBAL(A_IM).NE.'Y')) THEN                   GSS3F401.1439   
            LMASK=.FALSE.                                                  GSS3F401.1440   
          ELSE IF((N2.EQ.1).AND.(.NOT.LMICROPHY)) THEN                     GSS3F401.1441   
            LMASK=.FALSE.                                                  GSS3F401.1442   
          ELSEIF ( ( N3 .EQ. 1 ) .AND. ( .NOT. L_H2_SULPH ) ) THEN         AWI1F403.73     
            LMASK = .FALSE.                                                AWI1F403.74     
          ELSEIF ((N4 .EQ. 1).AND.(.NOT. L_USE_SULPC_INDIRECT_SW)) THEN    AAJ3F404.2      
            LMASK = .FALSE.                                                AAJ3F404.3      
          ELSE                                                             GSS3F401.1443   
            LMASK=.TRUE.                                                   GSS3F401.1444   
          END IF                                                           GSS3F401.1445   
        END IF                                                             GSS3F401.1446   
      ELSE IF(ISEC.EQ.3) THEN                                              GSS3F401.1447   
!Boundary layer                                                            GSS3F401.1448   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1449   
          LMASK=.TRUE.                                                     GSS3F401.1450   
        ELSE                                                               GSS3F401.1451   
          N1=MOD (IOPN(1)    ,10)                                          GSS3F401.1452   
          N2=MOD((IOPN(1)/10),10)                                          GSS3F401.1453   
          N3=MOD((IOPN(1)/100),10)                                         ACN2F405.10     
          IF((N1.EQ.1).AND.(OROGR.EQ.'N')) THEN                            GSS3F401.1454   
            LMASK=.FALSE.                                                  GSS3F401.1455   
          ELSE                                                             GSS3F401.1456   
            LMASK=.TRUE.                                                   GSS3F401.1457   
          END IF                                                           GSS3F401.1458   
          IF((N2.EQ.1).AND.(.NOT.L_SULPC_SO2)) THEN                        GSS3F401.1459   
            LMASK=.FALSE.                                                  GSS3F401.1460   
          ELSE IF ((N2.EQ.2).AND.(.NOT.L_SULPC_NH3)) THEN                  AWO0F405.39     
            LMASK=.FALSE.                                                  AWO0F405.40     
          ELSE IF ((N2.EQ.3).AND.(.NOT.L_SOOT)) THEN                       AWO0F405.41     
            LMASK=.FALSE.                                                  AWO0F405.42     
          ELSE                                                             GSS3F401.1461   
            LMASK=.TRUE.                                                   GSS3F401.1462   
          END IF                                                           GSS3F401.1463   
          IF((N3.EQ.1).AND.(.NOT.L_CO2_INTERACTIVE)) THEN                  ACN2F405.11     
            LMASK=.FALSE.                                                  ACN2F405.12     
          ELSE                                                             ACN2F405.13     
            LMASK=.TRUE.                                                   ACN2F405.14     
          END IF                                                           ACN2F405.15     
        END IF                                                             GSS3F401.1464   
      ELSE IF(ISEC.EQ.4) THEN                                              GSS3F401.1465   
          N2=MOD((IOPN(1)/10),10)                                          GSS3F401.1466   
          IF((N2.EQ.1).AND.(.NOT.L_SULPC_SO2)) THEN                        GSS3F401.1467   
            LMASK=.FALSE.                                                  GSS3F401.1468   
          ELSE IF ((N2.EQ.2).AND.(.NOT.L_SULPC_NH3)) THEN                  AWO0F405.43     
            LMASK=.FALSE.                                                  AWO0F405.44     
          ELSE IF ((N2.EQ.3).AND.(.NOT.L_SOOT)) THEN                       AWO0F405.45     
            LMASK=.FALSE.                                                  AWO0F405.46     
          ELSE                                                             GSS3F401.1469   
            LMASK=.TRUE.                                                   GSS3F401.1470   
          END IF                                                           GSS3F401.1471   
      ELSE IF(ISEC.EQ.5) THEN                                              GSS3F401.1472   
          N2=MOD((IOPN(1)/10),10)                                          GSS3F401.1473   
          N3=MOD((IOPN(1)/100),10)                                         AJX5F405.5      
          IF((N2.EQ.1).AND.(.NOT.L_SULPC_SO2)) THEN                        GSS3F401.1474   
            LMASK=.FALSE.                                                  AJX5F405.6      
          ELSE IF ( (N3.EQ.1).AND.(L_3D_CCA) ) THEN                        AJX5F405.7      
            LMASK=.FALSE.                                                  AJX5F405.8      
          ELSE IF ( (N3.EQ.2).AND.(.NOT.L_3D_CCA) ) THEN                   AJX5F405.9      
            LMASK=.FALSE.                                                  GSS3F401.1475   
          ELSE IF ((N2.EQ.2).AND.(.NOT.L_SULPC_NH3)) THEN                  AWO0F405.47     
            LMASK=.FALSE.                                                  AWO0F405.48     
          ELSE IF ((N2.EQ.3).AND.(.NOT.L_SOOT)) THEN                       AWO0F405.49     
            LMASK=.FALSE.                                                  AWO0F405.50     
          ELSE                                                             GSS3F401.1476   
            LMASK=.TRUE.                                                   GSS3F401.1477   
          END IF                                                           GSS3F401.1478   
      ELSE IF(ISEC.EQ.9) THEN                                              ASK1F405.29     
          N2=MOD((IOPN(1)/10),10)                                          ASK1F405.30     
          N3=MOD((IOPN(1)/100),10)                                         ASK1F405.31     
          IF((N2.EQ.1).AND.(.NOT.L_CLD_AREA)) THEN                         ASK1F405.32     
            LMASK=.FALSE.                                                  ASK1F405.33     
          ELSE IF((N3.EQ.1).AND.(.NOT.L_RHCPT)) THEN                       ASK1F405.34     
            LMASK=.FALSE.                                                  ASK1F405.35     
          ELSE                                                             ASK1F405.36     
            LMASK=.TRUE.                                                   ASK1F405.37     
          END IF                                                           ASK1F405.38     
      ELSE IF(ISEC.EQ.16) THEN                                             GSS3F401.1479   
!Extra physics                                                             GSS3F401.1480   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1481   
          LMASK=.TRUE.                                                     GSS3F401.1482   
        ELSE                                                               GSS3F401.1483   
          N2N1=MOD(IOPN(1),100)                                            GSS3F401.1484   
          IF((N2N1.NE.0).AND.(.NOT.TRACER_A(N2N1))) THEN                   GSS3F401.1485   
            LMASK=.FALSE.                                                  GSS3F401.1486   
          ELSE                                                             GSS3F401.1487   
            LMASK=.TRUE.                                                   GSS3F401.1488   
          END IF                                                           GSS3F401.1489   
        END IF                                                             GSS3F401.1490   
      ELSE IF (ISEC.EQ.17) THEN                                            AWO0F405.51     
! Chemistry section                                                        AWO0F405.52     
        N1=MOD(IOPN(1),     10)                                            AWO0F405.53     
        N2=MOD((IOPN(1)/10),10)                                            AWO0F405.54     
        IF ((N1.EQ.1).AND.(.NOT.L_SULPC_SO2)) THEN                         AWO0F405.55     
            LMASK=.FALSE.                                                  AWO0F405.56     
        ELSE IF ((N1.EQ.2).AND.(.NOT.L_SOOT)) THEN                         AWO0F405.57     
            LMASK=.FALSE.                                                  AWO0F405.58     
        ELSE                                                               AWO0F405.59     
            LMASK=.TRUE.                                                   AWO0F405.60     
        END IF                                                             AWO0F405.61     
        IF ((N2.EQ.1).AND.(.NOT.L_SULPC_DMS)) THEN                         AWO0F405.62     
            LMASK=.FALSE.                                                  AWO0F405.63     
        ELSE IF ((N2.EQ.2).AND.(.NOT.L_SULPC_OZONE)) THEN                  AWO0F405.64     
            LMASK=.FALSE.                                                  AWO0F405.65     
        ELSE                                                               AWO0F405.66     
            LMASK=.TRUE.                                                   AWO0F405.67     
        END IF                                                             AWO0F405.68     
      ELSE IF(ISEC.EQ.18) THEN                                             GSS3F401.1491   
!Data assimilation                                                         GSS3F401.1492   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1493   
          LMASK=.TRUE.                                                     GSS3F401.1494   
        ELSE                                                               GSS3F401.1495   
          N1=MOD (IOPN(1)    ,10)                                          GSS3F401.1496   
          N2=MOD((IOPN(1)/10),10)                                          GSS3F401.1497   
          IF(.NOT.AASSET(N1)) THEN                                         GSS3F401.1498   
            LMASK=.FALSE.                                                  GSS3F401.1499   
          ELSE IF((N2.EQ.1).AND.(TOTAE.EQ.'N')) THEN                       GSS3F401.1500   
            LMASK=.FALSE.                                                  GSS3F401.1501   
          ELSE                                                             GSS3F401.1502   
            LMASK=.TRUE.                                                   GSS3F401.1503   
          END IF                                                           GSS3F401.1504   
        END IF                                                             GSS3F401.1505   
      ELSE IF((ISEC.GE.1).AND.(ISEC.LE.20)) THEN  ! BUT NOT 1,3,18         GSS3F401.1506   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1507   
          LMASK=.TRUE.                                                     GSS3F401.1508   
        ELSE                                                               GSS3F401.1509   
          WRITE(6,*)                                                       GSS3F401.1510   
     &   'MESSAGE FROM ROUTINE TSTMSK: UNEXPECTED OPTION CODE',            GSS3F401.1511   
     &    IOPN(1)                                                          GSS3F401.1512   
          WRITE(6,*)'IN ATMOSPHERE SECTION ',ISEC                          GSS3F401.1513   
        END IF                                                             GSS3F401.1514   
      ELSE IF((ISEC.GE.21).AND.(ISEC.LE.24)) THEN                          GSS3F401.1515   
!Atmos climate mean diagnostics                                            GSS3F401.1516   
        N0=ISEC-20                                                         GSS3F401.1517   
        IF(N0.GT.MEAN_NUMBER(A_IM)) THEN                                   GSS3F401.1518   
          LMASK=.FALSE.                                                    GSS3F401.1519   
        ELSE                                                               GSS3F401.1520   
          IF(SUM_IOPN.NE.0) THEN                                           GSS3F401.1521   
          N2N1=MOD( IOPN(1),100)                                           GSS3F401.1522   
            N3=MOD((IOPN(1)/100),10)                                       GSS3F401.1523   
            N4=MOD((IOPN(1)/1000),10)                                      GSS3F401.1524   
            N5=MOD((IOPN(1)/10000),10)                                     GSS3F401.1525   
            N6=MOD( IOPN(2),10)                                            GSS3F401.1526   
            N7=MOD((IOPN(2)/10),10)                                        GSS3F401.1527   
            N8=MOD((IOPN(2)/100),10)                                       GSS3F401.1528   
            N9=MOD((IOPN(2)/1000),10)                                      GSS3F401.1529   
           N10=MOD((IOPN(2)/10000),10)                                     GSS3F401.1530   
           N11=MOD( IOPN(3),10)                                            ARB1F404.458    
           N12=MOD((IOPN(3)/10),10)                                        ARB1F404.459    
           N13 =MOD((IOPN(3)/100),10)                                      AJX0F404.313    
           N14 =MOD((IOPN(3)/1000),10)                                     AWO0F405.69     
           N15 =MOD((IOPN(3)/10000),10)                                    AWO0F405.70     
           N16 =MOD( IOPN(4),10)                                           ACN2F405.16     
            IF((N2N1.NE.0).AND.(.NOT.TRACER_A(N2N1))) THEN                 GSS3F401.1531   
              LMASK=.FALSE.                                                GSS3F401.1532   
            ELSE IF((N3.EQ.1).AND.(.NOT.LSINGLE_HYDROL)) THEN              GSS3F401.1533   
              LMASK=.FALSE.                                                GSS3F401.1534   
            ELSE IF((N3.EQ.3).AND.(.NOT.LMOSES)) THEN                      GSS3F401.1537   
              LMASK=.FALSE.                                                GSS3F401.1538   
            ELSE IF((N3.EQ.4).AND.(LSINGLE_HYDROL)) THEN                   GSS3F401.1539   
              LMASK=.FALSE.                                                GSS3F401.1540   
            ELSE IF((N3.EQ.4).AND.(.NOT.LSINGLE_HYDROL)                    GSS3F401.1541   
     &                       .AND.(.NOT.LMOSES)   ) THEN                   GSS3F401.1543   
                LMASK=.FALSE.                                              GSS3F401.1544   
            ELSE IF((N4.EQ.1).AND.(H_STRAT.EQ.'Y')) THEN                   GSS3F401.1545   
              LMASK=.FALSE.                                                GSS3F401.1546   
            ELSE IF((N5.EQ.1).AND.(OROGR.EQ.'N')) THEN                     GSS3F401.1547   
              LMASK=.FALSE.                                                GSS3F401.1548   
            ELSE IF((N6.EQ.1).AND.(H_GLOBAL(A_IM).EQ.'Y')) THEN            GSS3F401.1549   
              LMASK=.FALSE.                                                GSS3F401.1550   
            ELSE IF((N6.EQ.2).AND.(H_FLOOR.EQ.'N')) THEN                   GSS3F401.1551   
              LMASK=.FALSE.                                                GSS3F401.1552   
            ELSE IF((N7.EQ.1).AND.(H_SLAB.EQ.'N')) THEN                    GSS3F401.1553   
              LMASK=.FALSE.                                                GSS3F401.1554   
            ELSE IF((N7.EQ.2).AND.(H_OCEAN.EQ.'N')) THEN                   GSS3F401.1555   
              LMASK=.FALSE.                                                GSS3F401.1556   
            ELSE IF((N7.EQ.3).AND.                                         GSS3F401.1557   
     &       (H_SLAB_CAL.EQ.'N'.OR.H_SLAB.EQ.'N')) THEN                    GSS3F401.1558   
              LMASK=.FALSE.                                                GSS3F401.1559   
            ELSE IF((N7.EQ.4).AND.                                         GSS3F401.1560   
     &       (H_SLAB_CAL.EQ.'Y'.OR.H_SLAB.EQ.'N')) THEN                    GSS3F401.1561   
              LMASK=.FALSE.                                                GSS3F401.1562   
            ELSE IF((N7.EQ.5).AND.                                         GSS3F401.1563   
     &       (.NOT.L_IDYN.OR.H_SLAB.EQ.'N')) THEN                          GSS3F401.1564   
              LMASK=.FALSE.                                                GSS3F401.1565   
            ELSE IF((N8.EQ.1).AND.(SSTAnom.EQ.'N')) THEN                   GSS3F401.1566   
              LMASK=.FALSE.                                                GSS3F401.1567   
            ELSE IF((N8.EQ.4).AND.(TOTAE.NE.'Y')) THEN                     GSS3F401.1568   
              LMASK=.FALSE.                                                GSS3F401.1569   
            ELSE IF((N8.EQ.5).AND.(H_TOTEM.NE.'Y')) THEN                   GSS3F401.1570   
              LMASK=.FALSE.                                                GSS3F401.1571   
            ELSE IF((N8.EQ.6).AND.(.NOT.L_SNOW_ALBEDO)) THEN               ABX2F404.100    
              LMASK=.FALSE.                                                GSS3F401.1573   
            ELSE IF((N9.EQ.1).AND.(.NOT.H_OROG_GRAD)) THEN                 GSS3F401.1574   
              LMASK=.FALSE.                                                GSS3F401.1575   
            ELSE IF((N10.EQ.1).AND.(.NOT.L_SULPC_SO2)) THEN                GSS3F401.1576   
              LMASK=.FALSE.                                                GSS3F401.1577   
            ELSE IF((N10.EQ.2).AND.((.NOT.L_SULPC_SO2)                     GSS3F401.1578   
     &                        .OR.  (.NOT.L_SO2_SURFEM )) ) THEN           GSS3F401.1579   
              LMASK=.FALSE.                                                GSS3F401.1580   
            ELSE IF((N10.EQ.3).AND.((.NOT.L_SULPC_SO2)                     GSS3F401.1581   
     &                        .OR.  (.NOT.L_SO2_HILEM )) ) THEN            GSS3F401.1582   
              LMASK=.FALSE.                                                GSS3F401.1583   
            ELSE IF((N10.EQ.4).AND.((.NOT.L_SULPC_SO2)                     GSS3F401.1584   
     &                        .OR.  (.NOT.L_SO2_NATEM )) ) THEN            GSS3F401.1585   
              LMASK=.FALSE.                                                GSS3F401.1586   
            ELSE IF((N10.EQ.5).AND.((.NOT.L_SULPC_SO2)                     GSS3F401.1587   
     &                        .OR.  (.NOT.L_SULPC_DMS)) ) THEN             GSS3F401.1588   
              LMASK=.FALSE.                                                GSS3F401.1589   
            ELSE IF((N10.EQ.6).AND.((.NOT.L_SULPC_SO2)                     GSS3F401.1590   
     &                        .OR.  (.NOT.L_SULPC_DMS)                     GSS3F401.1591   
     &                        .OR.  (.NOT.L_DMS_EM    )) ) THEN            GSS3F401.1592   
              LMASK=.FALSE.                                                GSS3F401.1593   
            ELSE IF((N10.EQ.7).AND.((.NOT.L_SULPC_SO2)                     GSS3F401.1594   
     &                        .OR.  (.NOT.L_SULPC_OZONE )) ) THEN          GSS3F401.1595   
              LMASK=.FALSE.                                                GSS3F401.1596   
            ELSE IF((N10.EQ.8).AND.((.NOT.L_SULPC_SO2)                     AWO0F405.71     
     &                        .OR.  (.NOT.L_SULPC_OZONE)                   AWO0F405.72     
     &                        .OR.  (.NOT.L_SULPC_NH3))  )  THEN           AWO0F405.73     
              LMASK=.FALSE.                                                AWO0F405.74     
            ELSE IF((N10.EQ.9).AND.((.NOT.L_SULPC_SO2)                     AWO0F405.75     
     &                        .OR.  (.NOT.L_SULPC_OZONE)                   AWO0F405.76     
     &                        .OR.  (.NOT.L_SULPC_NH3)                     AWO0F405.77     
     &                        .OR.  (.NOT.L_NH3_EM))  )  THEN              AWO0F405.78     
              LMASK=.FALSE.                                                AWO0F405.79     
            ELSE IF((N11.EQ.1).AND.(L_VEG_FRACS.OR.L_TRIFFID) )THEN        ARB1F404.460    
              LMASK=.FALSE.                                                ARB1F404.461    
            ELSE IF((N11.EQ.2).AND.(.NOT.L_VEG_FRACS))THEN                 ARB1F404.462    
              LMASK=.FALSE.                                                ARB1F404.463    
            ELSE IF((N11.EQ.3).AND.                                        ARB1F404.464    
     &              (.NOT.L_VEG_FRACS.OR..NOT.L_TRIFFID) )THEN             ARB1F404.465    
              LMASK=.FALSE.                                                ARB1F404.466    
            ELSE IF((N12.EQ.2) .AND. (.NOT.L_LSPICE)) THEN                 ARB1F404.467    
              LMASK=.FALSE.   ! QCF is primary 12 (prognostic)             ARB1F404.468    
            ELSE IF ((N13.EQ.1).AND.(L_3D_CCA)) THEN                       AJX0F404.314    
              LMASK=.FALSE.    !  CCA is 2D                                AJX0F404.315    
            ELSE IF ((N13.EQ.2).AND.(.NOT.L_3D_CCA)) THEN                  AJX0F404.316    
              LMASK=.FALSE.    !  CCA is 3D                                AJX0F404.317    
            ELSE IF((N14.EQ.1).AND.(.NOT.L_SOOT))  THEN                    AWO0F405.80     
              LMASK=.FALSE.                                                AWO0F405.81     
            ELSE IF((N14.EQ.2).AND.((.NOT.L_SOOT)                          AWO0F405.82     
     &                        .OR.  (.NOT.L_SOOT_SUREM)) )  THEN           AWO0F405.83     
              LMASK=.FALSE.                                                AWO0F405.84     
            ELSE IF((N14.EQ.3).AND.((.NOT.L_SOOT)                          AWO0F405.85     
     &                        .OR.  (.NOT.L_SOOT_HILEM)) )  THEN           AWO0F405.86     
              LMASK=.FALSE.                                                AWO0F405.87     
            ELSE IF ((N15.EQ.1).AND.(.NOT.L_RHCPT)) THEN                   AWO0F405.88     
              LMASK=.FALSE.    !  RHCRIT switched off                      AWO0F405.89     
                                                                           AWO0F405.90     
            ELSE IF ((N16.EQ.1).AND.(.NOT.L_CO2_INTERACTIVE)) THEN         ACN2F405.17     
              LMASK=.FALSE.    !  Carbon cycle switched off                ACN2F405.18     
            ELSE                                                           GSS3F401.1597   
              LMASK=.TRUE.                                                 GSS3F401.1598   
            END IF                                                         GSS3F401.1599   
          ELSE ! IOPN.EQ.0                                                 GSS3F401.1600   
            LMASK=.TRUE.                                                   GSS3F401.1601   
          END IF                                                           GSS3F401.1602   
        END IF                                                             GSS3F401.1603   
      END IF                                                               GSS3F401.1604   
!End of atmos diagnostic block                                             GSS3F401.1605   
      END IF                                                               GSS3F401.1606   
                                                                           GSS3F401.1607   
      IF (MODL.EQ.O_IM) THEN                                               GSS3F401.1608   
!Ocean                                                                     GSS3F401.1609   
      IF (ISEC.EQ.0) THEN                                                  GSS3F401.1610   
!Ocean primary fields                                                      GSS3F401.1611   
            IF(SUM_IOPN.NE.0) THEN                                         GSS3F401.1612   
            N2N1=MOD( IOPN(1),100)                                         GSS3F401.1613   
              N3=MOD((IOPN(1)/100),10)                                     GSS3F401.1614   
              N4=MOD((IOPN(1)/1000),10)                                    GSS3F401.1615   
              N5=MOD((IOPN(1)/10000),10)                                   GSS3F401.1616   
              N6=MOD( IOPN(2),10)                                          GSS3F401.1617   
              N7=MOD((IOPN(2)/10),10)                                      GSS3F401.1618   
              N8=MOD((IOPN(2)/100),10)                                     GSS3F401.1619   
              N9=MOD((IOPN(2)/1000),10)                                    GSS3F401.1620   
             N10=MOD((IOPN(2)/10000),10)                                   GSS3F401.1621   
              IF((N2N1.NE.0).AND.(.NOT.TRACER_O(N2N1))) THEN               GSS3F401.1622   
                LMASK=.FALSE.                                              GSS3F401.1623   
              ELSE IF((N3.EQ.1).AND.(COX_Z.OR.COX_Y)) THEN                 GSS3F401.1624   
                LMASK=.FALSE.                                              GSS3F401.1625   
              ELSE IF((N3.EQ.2).AND.(.NOT.COX_Z)) THEN                     GSS3F401.1626   
                LMASK=.FALSE.                                              GSS3F401.1627   
              ELSE IF((N3.EQ.3).AND.                                       GSS3F401.1628   
     &        ((.NOT.COX_Z).OR.(.NOT.COX_PMSL))) THEN                      GSS3F401.1629   
                LMASK=.FALSE.                                              GSS3F401.1630   
              ELSE IF((N3.EQ.4).AND.(.NOT.L_OCONJ)) THEN                   GSS3F401.1631   
                LMASK=.FALSE.                                              GSS3F401.1632   
              ELSE IF((N4.EQ.1).AND.(.NOT.COX_P)) THEN                     GSS3F401.1633   
                LMASK=.FALSE.                                              GSS3F401.1634   
              ELSE IF(N4.EQ.2.AND..NOT.                                    GSS3F401.1635   
     &        (COX_P.AND.(.NOT.COX_LCASE_C)))THEN                          GSS3F401.1636   
                LMASK=.FALSE.                                              GSS3F401.1637   
              ELSE IF(N4.EQ.3.AND..NOT.(COX_P.AND.COX_LCASE_C))THEN        GSS3F401.1638   
                LMASK=.FALSE.                                              GSS3F401.1639   
              ELSE IF(N4.EQ.4.AND.(SEAICE_TYPE.NE.1))THEN                  GSS3F401.1640   
                LMASK=.FALSE.                                              GSS3F401.1641   
              ELSE IF(N4.EQ.5.AND.(SEAICE_TYPE.NE.2))THEN                  GSS3F401.1642   
                LMASK=.FALSE.                                              GSS3F401.1643   
              ELSE IF(N4.EQ.6.AND.(SEAICE_TYPE.LT.1))THEN                  GSS3F401.1644   
                LMASK=.FALSE.                                              GSS3F401.1645   
              ELSE IF((N5.EQ.1).AND.(.NOT.COX_X)) THEN                     GSS3F401.1646   
                LMASK=.FALSE.                                              GSS3F401.1647   
              ELSE IF((N5.EQ.2).AND.((.NOT.COX_X).OR.(.NOT.COX_L))) THEN   GSS3F401.1648   
                LMASK=.FALSE.                                              GSS3F401.1649   
              ELSE IF((N5.EQ.3).AND.(.NOT.(COX_X.AND..NOT.COX_L))) THEN    GSS3F401.1650   
                LMASK=.FALSE.                                              GSS3F401.1651   
          ELSE IF((N5.EQ.4).AND.(.NOT.(L_OISOPYCGM.OR.L_OISOGM))) THEN     OOM1F405.13     
                LMASK=.FALSE.                                              GSS3F401.1653   
              ELSE IF((N5.EQ.5).AND.(.NOT.L_OVISBECK)) THEN                GSS2F403.318    
                LMASK=.FALSE.                                              GSS2F403.319    
              ELSE IF((N6.EQ.1).AND.                                       GSS3F401.1654   
     &        (.NOT.((OCBOHaney.GT.0).OR.COX_LCASE_I))) THEN               GSS3F401.1655   
                LMASK=.FALSE.                                              GSS3F401.1656   
              ELSE IF((N6.EQ.2).AND.(.NOT.L_FLUXCORR)) THEN                GSS3F401.1657   
                LMASK=.FALSE.                                              GSS3F401.1658   
              ELSE IF((N6.EQ.3).AND.(OCBOHaney.NE.2)) THEN                 GSS3F401.1659   
                LMASK=.FALSE.                                              GSS3F401.1660   
            ELSE IF((N6.EQ.4).AND.(L_SALFLUXFIX.OR..NOT.L_FLUXCORR))       OJL1F405.102    
     &      THEN                                                           OJL1F405.103    
              LMASK=.FALSE.                                                OJL1F405.104    
              ELSE IF((N7.EQ.1).AND.(H_GLOBAL(O_IM).EQ.'Y')) THEN          GSS3F401.1661   
                LMASK=.FALSE.                                              GSS3F401.1662   
              ELSE IF((N7.EQ.1).AND.(.NOT.COX_1234)) THEN                  GSS3F401.1663   
                LMASK=.FALSE.                                              GSS3F401.1664   
              ELSE IF((N8.EQ.1).AND.(.NOT.L_RIVERS)) THEN                  GSS3F401.1665   
                LMASK=.FALSE.                                              GSS3F401.1666   
              ELSE IF((N9.EQ.1).AND.(.NOT.L_OHMEAD)) THEN                  GSS3F401.1667   
                LMASK=.FALSE.                                              GSS3F401.1668   
              ELSE IF((N10.EQ.1).AND.(.NOT.COX_OCARB)) THEN                GSS3F401.1669   
                LMASK=.FALSE.                                              GSS3F401.1670   
              ELSE                                                         GSS3F401.1671   
                LMASK=.TRUE.                                               GSS3F401.1672   
              END IF                                                       GSS3F401.1673   
            ELSE ! IOPN.EQ.0                                               GSS3F401.1674   
              LMASK=.TRUE.                                                 GSS3F401.1675   
            END IF                                                         GSS3F401.1676   
      ELSE IF((ISEC.GE.30).AND.(ISEC.LE.32)) THEN                          GSS3F401.1677   
!Ocean diagnostics                                                         GSS3F401.1678   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1679   
          LMASK=.TRUE.                                                     GSS3F401.1680   
        ELSE                                                               GSS3F401.1681   
        N2N1=MOD( IOPN(1),100)                                             GSS3F401.1682   
          N3=MOD((IOPN(1)/100),10)                                         GSS3F401.1683   
          N4=MOD((IOPN(1)/1000),10)                                        GSS3F401.1684   
          N5=MOD((IOPN(1)/10000),10)                                       GSS3F401.1685   
          N6=MOD( IOPN(2),10)                                              GSS3F401.1686   
          N7=MOD((IOPN(2)/10),10)                                          GSS3F401.1687   
          N8=MOD((IOPN(2)/100),10)                                         GSS3F401.1688   
          N9=MOD((IOPN(2)/1000),10)                                        GSS3F401.1689   
         N10=MOD((IOPN(2)/10000),10)                                       GSS3F401.1690   
          IF((N2N1.NE.0).AND.(.NOT.TRACER_O(N2N1))) THEN                   GSS3F401.1691   
            LMASK=.FALSE.                                                  GSS3F401.1692   
          ELSE IF((N3.EQ.1).AND.(COX_Z.OR.COX_Y)) THEN                     GSS3F401.1693   
            LMASK=.FALSE.                                                  GSS3F401.1694   
          ELSE IF((N3.EQ.2).AND.(.NOT.COX_Z)) THEN                         GSS3F401.1695   
            LMASK=.FALSE.                                                  GSS3F401.1696   
          ELSE IF((N3.EQ.3).AND.                                           GSS3F401.1697   
     &    ((.NOT.COX_Z).OR.(.NOT.COX_PMSL))) THEN                          GSS3F401.1698   
             LMASK=.FALSE.                                                 GSS3F401.1699   
          ELSE IF((N4.EQ.1).AND.(.NOT.COX_P)) THEN                         GSS3F401.1700   
            LMASK=.FALSE.                                                  GSS3F401.1701   
          ELSE IF(N4.EQ.2.AND..NOT.                                        GSS3F401.1702   
     &    (COX_P.AND.(.NOT.COX_LCASE_C)))THEN                              GSS3F401.1703   
            LMASK=.FALSE.                                                  GSS3F401.1704   
          ELSE IF(N4.EQ.3.AND..NOT.(COX_P.AND.COX_LCASE_C))THEN            GSS3F401.1705   
            LMASK=.FALSE.                                                  GSS3F401.1706   
          ELSE IF(N4.EQ.4.AND.(SEAICE_TYPE.NE.1))THEN                      GSS3F401.1707   
            LMASK=.FALSE.                                                  GSS3F401.1708   
          ELSE IF(N4.EQ.5.AND.(SEAICE_TYPE.NE.2))THEN                      GSS3F401.1709   
            LMASK=.FALSE.                                                  GSS3F401.1710   
          ELSE IF(N4.EQ.6.AND.(SEAICE_TYPE.LT.1))THEN                      GSS3F401.1711   
            LMASK=.FALSE.                                                  GSS3F401.1712   
          ELSE IF((N5.EQ.1).AND.(.NOT.COX_X)) THEN                         GSS3F401.1713   
            LMASK=.FALSE.                                                  GSS3F401.1714   
          ELSE IF((N5.EQ.2).AND.((.NOT.COX_X).OR.(.NOT.COX_L))) THEN       GSS3F401.1715   
            LMASK=.FALSE.                                                  GSS3F401.1716   
          ELSE IF((N5.EQ.3).AND.(.NOT.(COX_X.AND..NOT.COX_L))) THEN        GSS3F401.1717   
            LMASK=.FALSE.                                                  GSS3F401.1718   
          ELSE IF((N5.EQ.4).AND.(.NOT.(L_OISOPYCGM.OR.L_OISOGM))) THEN     OOM1F405.14     
            LMASK=.FALSE.                                                  GSS3F401.1720   
          ELSE IF((N5.EQ.6).AND.(.NOT.L_ORICHARD)) THEN                    GSS2F403.320    
            LMASK=.FALSE.                                                  GSS2F403.321    
          ELSE IF((N5.EQ.7).AND.(.NOT.L_OQLARGE)) THEN                     GSS2F403.322    
            LMASK=.FALSE.                                                  GSS2F403.323    
          ELSE IF((N6.EQ.1).AND.                                           GSS3F401.1721   
     &    (.NOT.((OCBOHaney.GT.0).OR.COX_LCASE_I))) THEN                   GSS3F401.1722   
            LMASK=.FALSE.                                                  GSS3F401.1723   
          ELSE IF((N6.EQ.2).AND.(.NOT.L_FLUXCORR)) THEN                    GSS3F401.1724   
            LMASK=.FALSE.                                                  GSS3F401.1725   
          ELSE IF((N6.EQ.3).AND.(OCBOHaney.NE.2)) THEN                     GSS3F401.1726   
            LMASK=.FALSE.                                                  GSS3F401.1727   
            ELSE IF((N6.EQ.4).AND.(L_SALFLUXFIX.OR..NOT.L_FLUXCORR))       OJL1F405.105    
     &      THEN                                                           OJL1F405.106    
              LMASK=.FALSE.                                                OJL1F405.107    
          ELSE IF((N7.EQ.1).AND.(H_GLOBAL(O_IM).EQ.'Y')) THEN              GSS3F401.1728   
            LMASK=.FALSE.                                                  GSS3F401.1729   
          ELSE IF((N7.EQ.1).AND.(.NOT.COX_1234)) THEN                      GSS3F401.1730   
            LMASK=.FALSE.                                                  GSS3F401.1731   
          ELSE IF((N8.EQ.1).AND.(.NOT.L_RIVERS)) THEN                      GSS3F401.1732   
            LMASK=.FALSE.                                                  GSS3F401.1733   
          ELSE IF((N9.EQ.1).AND.(.NOT.L_OHMEAD)) THEN                      GSS3F401.1734   
            LMASK=.FALSE.                                                  GSS3F401.1735   
          ELSE IF((N10.EQ.1).AND.(.NOT.COX_OCARB)) THEN                    GSS3F401.1736   
            LMASK=.FALSE.                                                  GSS3F401.1737   
          ELSE                                                             GSS3F401.1738   
            LMASK=.TRUE.                                                   GSS3F401.1739   
          END IF                                                           GSS3F401.1740   
        END IF                                                             GSS3F401.1741   
      ELSE IF(ISEC.EQ.35) THEN                                             GSS3F401.1742   
!Ocean assimilation                                                        GSS3F401.1743   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1744   
          LMASK=.TRUE.                                                     GSS3F401.1745   
        ELSE                                                               GSS3F401.1746   
          N1=MOD( IOPN(1),10)                                              GSS3F401.1747   
          N2=MOD((IOPN(1)/10),10)                                          GSS3F401.1748   
          N3=MOD((IOPN(1)/100),10)                                         GSS3F401.1749   
          IF(O_ASSM_FIELDS(N1).NE.'Y') THEN                                GSS3F401.1750   
            LMASK=.FALSE.                                                  GSS3F401.1751   
          ELSE IF((N2.EQ.1).AND.(COX_Z.OR.COX_Y)) THEN                     GSS3F401.1752   
            LMASK=.FALSE.                                                  GSS3F401.1753   
          ELSE IF((N2.EQ.2).AND.(.NOT.COX_Z)) THEN                         GSS3F401.1754   
            LMASK=.FALSE.                                                  GSS3F401.1755   
          ELSE IF((N3.EQ.3).AND.                                           GSS3F401.1756   
     &        ((.NOT.COX_Z).OR.(.NOT.COX_PMSL))) THEN                      GSS3F401.1757   
            LMASK=.FALSE.                                                  GSS3F401.1758   
          ELSE IF((N3.EQ.1).AND.(.NOT.COX_X)) THEN                         GSS3F401.1759   
            LMASK=.FALSE.                                                  GSS3F401.1760   
          ELSE IF((N3.EQ.2).AND.((.NOT.COX_X).OR.(.NOT.COX_L))) THEN       GSS3F401.1761   
            LMASK=.FALSE.                                                  GSS3F401.1762   
          ELSE                                                             GSS3F401.1763   
            LMASK=.TRUE.                                                   GSS3F401.1764   
          END IF                                                           GSS3F401.1765   
        END IF                                                             GSS3F401.1766   
      ELSE IF((ISEC.GE.41).AND.(ISEC.LE.44)) THEN                          GSS3F401.1767   
!Ocean climate mean diagnostics                                            GSS3F401.1768   
        N0=ISEC-40                                                         GSS3F401.1769   
        IF(N0.GT.MEAN_NUMBER(O_IM)) THEN                                   GSS3F401.1770   
          LMASK=.FALSE.                                                    GSS3F401.1771   
        ELSE                                                               GSS3F401.1772   
          IF (SUM_IOPN.EQ.0) THEN                                          GSS3F401.1773   
            LMASK=.TRUE.                                                   GSS3F401.1774   
          ELSE                                                             GSS3F401.1775   
          N2N1=MOD( IOPN(1),100)                                           GSS3F401.1776   
            N3=MOD((IOPN(1)/100),10)                                       GSS3F401.1777   
            N4=MOD((IOPN(1)/1000),10)                                      GSS3F401.1778   
            N5=MOD((IOPN(1)/10000),10)                                     GSS3F401.1779   
            N6=MOD( IOPN(2),10)                                            GSS3F401.1780   
            N7=MOD((IOPN(2)/10),10)                                        GSS3F401.1781   
            N8=MOD((IOPN(2)/100),10)                                       GSS3F401.1782   
            N9=MOD((IOPN(2)/1000),10)                                      GSS3F401.1783   
           N10=MOD((IOPN(2)/10000),10)                                     GSS3F401.1784   
            IF((N2N1.NE.0).AND.(.NOT.TRACER_O(N2N1))) THEN                 GSS3F401.1785   
              LMASK=.FALSE.                                                GSS3F401.1786   
            ELSE IF((N3.EQ.1).AND.(COX_Z.OR.COX_Y)) THEN                   GSS3F401.1787   
              LMASK=.FALSE.                                                GSS3F401.1788   
            ELSE IF((N3.EQ.2).AND.(.NOT.COX_Z)) THEN                       GSS3F401.1789   
              LMASK=.FALSE.                                                GSS3F401.1790   
            ELSE IF((N3.EQ.3).AND.                                         GSS3F401.1791   
     &      ((.NOT.COX_Z).OR.(.NOT.COX_PMSL))) THEN                        GSS3F401.1792   
               LMASK=.FALSE.                                               GSS3F401.1793   
            ELSE IF((N3.EQ.4).AND.(.NOT.L_OCONJ)) THEN                     GSS3F401.1794   
               LMASK=.FALSE.                                               GSS3F401.1795   
            ELSE IF((N4.EQ.1).AND.(.NOT.COX_P)) THEN                       GSS3F401.1796   
              LMASK=.FALSE.                                                GSS3F401.1797   
            ELSE IF(N4.EQ.2.AND..NOT.                                      GSS3F401.1798   
     &      (COX_P.AND.(.NOT.COX_LCASE_C)))THEN                            GSS3F401.1799   
              LMASK=.FALSE.                                                GSS3F401.1800   
            ELSE IF(N4.EQ.3.AND..NOT.(COX_P.AND.COX_LCASE_C))THEN          GSS3F401.1801   
              LMASK=.FALSE.                                                GSS3F401.1802   
            ELSE IF(N4.EQ.4.AND.(SEAICE_TYPE.NE.1))THEN                    GSS3F401.1803   
              LMASK=.FALSE.                                                GSS3F401.1804   
            ELSE IF(N4.EQ.5.AND.(SEAICE_TYPE.NE.2))THEN                    GSS3F401.1805   
              LMASK=.FALSE.                                                GSS3F401.1806   
            ELSE IF(N4.EQ.6.AND.(SEAICE_TYPE.LT.1))THEN                    GSS3F401.1807   
              LMASK=.FALSE.                                                GSS3F401.1808   
            ELSE IF((N5.EQ.1).AND.(.NOT.COX_X)) THEN                       GSS3F401.1809   
              LMASK=.FALSE.                                                GSS3F401.1810   
            ELSE IF((N5.EQ.2).AND.((.NOT.COX_X).OR.(.NOT.COX_L))) THEN     GSS3F401.1811   
              LMASK=.FALSE.                                                GSS3F401.1812   
            ELSE IF((N5.EQ.3).AND.(.NOT.(COX_X.AND..NOT.COX_L))) THEN      GSS3F401.1813   
              LMASK=.FALSE.                                                GSS3F401.1814   
          ELSE IF((N5.EQ.4).AND.(.NOT.(L_OISOPYCGM.OR.L_OISOGM))) THEN     OOM1F405.15     
              LMASK=.FALSE.                                                GSS3F401.1816   
            ELSE IF((N5.EQ.6).AND.(.NOT.L_ORICHARD)) THEN                  GSS2F403.324    
              LMASK=.FALSE.                                                GSS2F403.325    
            ELSE IF((N5.EQ.7).AND.(.NOT.L_OQLARGE)) THEN                   GSS2F403.326    
              LMASK=.FALSE.                                                GSS2F403.327    
            ELSE IF((N6.EQ.1).AND.                                         GSS3F401.1817   
     &      (.NOT.((OCBOHaney.GT.0).OR.COX_LCASE_I))) THEN                 GSS3F401.1818   
              LMASK=.FALSE.                                                GSS3F401.1819   
            ELSE IF((N6.EQ.2).AND.(.NOT.L_FLUXCORR)) THEN                  GSS3F401.1820   
              LMASK=.FALSE.                                                GSS3F401.1821   
            ELSE IF((N6.EQ.3).AND.(OCBOHaney.NE.2)) THEN                   GSS3F401.1822   
              LMASK=.FALSE.                                                GSS3F401.1823   
            ELSE IF((N6.EQ.4).AND.(L_SALFLUXFIX.OR..NOT.L_FLUXCORR))       OJL1F405.108    
     &      THEN                                                           OJL1F405.109    
              LMASK=.FALSE.                                                OJL1F405.110    
            ELSE IF((N7.EQ.1).AND.(H_GLOBAL(O_IM).EQ.'Y')) THEN            GSS3F401.1824   
              LMASK=.FALSE.                                                GSS3F401.1825   
            ELSE IF((N7.EQ.1).AND.(.NOT.COX_1234)) THEN                    GSS3F401.1826   
              LMASK=.FALSE.                                                GSS3F401.1827   
            ELSE IF((N8.EQ.1).AND.(.NOT.L_RIVERS)) THEN                    GSS3F401.1828   
              LMASK=.FALSE.                                                GSS3F401.1829   
            ELSE IF((N9.EQ.1).AND.(.NOT.L_OHMEAD)) THEN                    GSS3F401.1830   
              LMASK=.FALSE.                                                GSS3F401.1831   
            ELSE IF((N10.EQ.1).AND.(.NOT.COX_OCARB)) THEN                  GSS3F401.1832   
              LMASK=.FALSE.                                                GSS3F401.1833   
            ELSE                                                           GSS3F401.1834   
              LMASK=.TRUE.                                                 GSS3F401.1835   
            END IF                                                         GSS3F401.1836   
          END IF                                                           GSS3F401.1837   
        END IF                                                             GSS3F401.1838   
      END IF                                                               GSS3F401.1839   
!End of ocean block                                                        GSS3F401.1840   
      END IF                                                               GSS3F401.1841   
                                                                           GSS3F401.1842   
      IF (MODL.EQ.S_IM) THEN                                               GSS3F401.1843   
      IF(ISEC.EQ.40) THEN                                                  GSS3F401.1844   
!Slab diagnostics                                                          GSS3F401.1845   
        IF (SUM_IOPN.EQ.0) THEN                                            GSS3F401.1846   
          LMASK=.TRUE.                                                     GSS3F401.1847   
        ELSE                                                               GSS3F401.1848   
          N1=MOD( IOPN(1),10)                                              GSS3F401.1849   
          N2=MOD((IOPN(1)/10),10)                                          GSS3F401.1850   
          N3=MOD((IOPN(1)/100),10)                                         GSS3F401.1851   
          IF((N1.EQ.1).AND.(H_SLAB_CAL.EQ.'N')) THEN                       GSS3F401.1852   
            LMASK=.FALSE.                                                  GSS3F401.1853   
          ELSE IF((N1.EQ.2).AND.(H_SLAB_CAL.EQ.'Y')) THEN                  GSS3F401.1854   
            LMASK=.FALSE.                                                  GSS3F401.1855   
          ELSE IF((N2.EQ.1).AND..NOT.(L_IDRIF.OR.L_IDYN)) THEN             GSS3F401.1856   
            LMASK=.FALSE.                                                  GSS3F401.1857   
          ELSE IF((N2.EQ.2).AND..NOT.(L_IDRIF)) THEN                       GSS3F401.1858   
            LMASK=.FALSE.                                                  GSS3F401.1859   
          ELSE IF((N2.EQ.3).AND..NOT.(L_IDYN)) THEN                        GSS3F401.1860   
            LMASK=.FALSE.                                                  GSS3F401.1861   
          ELSE IF((N3.EQ.1).AND..NOT.(L_THERM)) THEN                       GSS3F401.1862   
            LMASK=.FALSE.                                                  GSS3F401.1863   
          ELSE                                                             GSS3F401.1864   
            LMASK=.TRUE.                                                   GSS3F401.1865   
          END IF                                                           GSS3F401.1866   
        END IF                                                             GSS3F401.1867   
      END IF                                                               GSS3F401.1868   
!End of slab diagnostic block                                              GSS3F401.1869   
      END IF                                                               GSS3F401.1870   
C                                                                          GSS3F401.1871   
      IF(LMASK) THEN                                                       GSS3F401.1872   
        LADRES=.TRUE.                                                      GSS3F401.1873   
        IF((ISPACE.EQ.3).OR.(ISPACE.EQ.5))                                 GSS3F401.1874   
     &    LMASK=.FALSE.                                                    GSS3F401.1875   
      ELSE                                                                 GSS3F401.1876   
        LADRES=.FALSE.                                                     GSS3F401.1877   
      END IF                                                               GSS3F401.1878   
C                                                                          GSS3F401.1879   
 9999 RETURN                                                               TSTMSK1.571    
      END                                                                  TSTMSK1.572    
*ENDIF                                                                     TSTMSK1.573