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