981     &                          lbij, ubij,                             &
  982     &                          lbi, ubi, lbj, ubj,                     &
  983#  endif
  984     &                          s)
  985
  986
  988
  989
  990
  991      integer, intent(in) :: ng, tile, model, OutRec, i2d, i3d
  992#  ifdef ADJUST_BOUNDARY
  993      integer, intent(in) :: LBij, UBij
  994#  endif
  995      integer :: LBi, UBi, LBj, UBj
  996
  997      real(dp), intent(in) :: stime
  998
  999      character (len=*), intent(in) :: label
 1000
 1001      TYPE(T_IO), intent(inout) :: S(Ngrids)
 1002
 1003
 1004
 1005      integer :: Sstr, Send
 1006      integer :: Fcount, ifield, omode, status
 1007#  ifdef SOLVE3D
 1008      integer :: i, itrc, j, k
 1009#  endif
 1010
 1011      real(r8) :: Fmin, Fmax
 1012      real(dp) :: scale
 1013      real(dp) :: Tval(1)
 1014
 1015      character (len=15) :: Tstring
 1016      character (len=22) :: t_code
 1017      character (len=50) :: string
 1018 
 1019      character (len=*), parameter :: MyFile =                          &
 1020     &  __FILE__//", wrt_state_pio"
 1021
 1022      TYPE (IO_desc_t), pointer :: ioDesc
 1023      TYPE (file_desc_t) :: pioFile
 1024
 1025      sourcefile=myfile
 1026
 1027
 1028
 1029
 1030#  ifdef PROFILE
 1031
 1032
 1033
 1034      CALL wclock_on (ng, model, 81, __line__, myfile)
 
 1035#  endif
 1036
 1037
 1038
 1039      omode=1                                    
 1041      IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
 1042
 1043
 1044
 1045      s(ng)%Rindex=s(ng)%Rindex+1
 1046      fcount=s(ng)%Fcount
 1047      s(ng)%Nrec(fcount)=s(ng)%Nrec(fcount)+1
 1048
 1049
 1050
 1051      IF (master) THEN
 1052        CALL time_string (stime, t_code)
 1053        IF (model.eq.inlm) THEN
 1054          string='writing NLM state fields,'
 1055        ELSE IF (model.eq.itlm) THEN
 1056          string='writing TLM state fields,'
 1057        ELSE IF (model.eq.iadm) THEN
 1058          string='writing ADM state fields,'
 1059        ELSE IF (model.eq.irpm) THEN
 1060          string='writing RPM state fields,'
 1061        END IF
 1062        sstr=scan(calledfrom,'/',back=.true.)+1
 1063        send=len_trim(calledfrom)
 1064        WRITE (tstring,'(f15.4)') stime*sec2day
 1065        WRITE (stdout,10) trim(label), trim(string), t_code,            &
 1066     &                    ng, trim(adjustl(tstring)), trim(s(ng)%name), &
 1067     &                    i3d, outrec, calledfrom(sstr:send)
 1068      END IF
 1069
 1070
 1071
 1072      IF (lwrtper(ng)) THEN
 1073        tval(1)=real(outrec,dp)*day2sec
 1074      ELSE
 1075        tval(1)=stime
 1076      END IF
 1078     &                          trim(vname(1,idtime)), tval,            &
 1079     &                          (/outrec/), (/1/),                      &
 1080     &                          piofile = piofile,                      &
 1081     &                          piovar = s(ng)%pioVar(idtime)%vd)
 1082      IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
 1083
 1084
 1085
 1086      scale=1.0_dp
 1087      IF (s(ng)%pioVar(idfsur)%dkind.eq.pio_double) THEN
 1089      ELSE
 1091      END IF
 1092
 1093      IF (model.eq.itlm) THEN
 1094        status=nf_fwrite2d(ng, model, piofile, idfsur,                  &
 1095     &                     s(ng)%pioVar(idfsur), outrec,                &
 1096     &                     iodesc,                                      &
 1097     &                     lbi, ubi, lbj, ubj, scale,                   &
 1098#  ifdef MASKING
 1099     &                     grid(ng) % rmask,                            &
 1100#  endif
 1101#  ifdef WET_DRY
 1102     &                     ocean(ng) % tl_zeta(:,:,i2d),                &
 1103     &                     setfillval = .false.,                        &
 1104     &                     minvalue = fmin,                             &
 1105     &                     maxvalue = fmax)
 1106#  else
 1107     &                     ocean(ng) % tl_zeta(:,:,i2d),                &
 1108     &                     minvalue = fmin,                             &
 1109     &                     maxvalue = fmax)
 1110#  endif
 1111      ELSE IF (model.eq.iadm) THEN
 1112        status=nf_fwrite2d(ng, model, piofile, idfsur,                  &
 1113     &                     s(ng)%pioVar(idfsur), outrec,                &
 1114     &                     iodesc,                                      &
 1115     &                     lbi, ubi, lbj, ubj, scale,                   &
 1116#  ifdef MASKING
 1117     &                     grid(ng) % rmask,                            &
 1118#  endif
 1119#  ifdef WET_DRY
 1120     &                     ocean(ng) % ad_zeta(:,:,i2d),                &
 1121     &                     setfillval = .false.,                        &
 1122     &                     minvalue = fmin,                             &
 1123     &                     maxvalue = fmax)
 1124#  else
 1125     &                     ocean(ng) % ad_zeta(:,:,i2d),                &
 1126     &                     minvalue = fmin,                             &
 1127     &                     maxvalue = fmax)
 1128#  endif
 1129      END IF
 1130      IF (status.ne.pio_noerr) THEN
 1131        IF (master) THEN
 1132          WRITE (stdout,20) trim(vname(1,idfsur)), trim(label),         &
 1133     &                      trim(s(ng)%name), outrec
 1134        END IF
 1135        exit_flag=3
 1136        ioerror=status
 1137        RETURN
 1138      ELSE
 1139        IF (master) THEN
 1140          WRITE (stdout,30) trim(vname(2,idfsur)), fmin, fmax
 1141        END IF
 1142      END IF
 1143 
 1144#  ifdef ADJUST_BOUNDARY
 1145
 1146
 1147
 1148      IF (any(lobc(:,isfsur,ng))) THEN
 1149        scale=1.0_dp
 1150        ifield=idsbry(isfsur)
 1151        IF (s(ng)%pioVar(ifield)%dkind.eq.pio_double) THEN
 1153        ELSE
 1155        END IF
 1156
 1157        IF (model.eq.itlm) THEN
 1158          status=nf_fwrite2d_bry(ng, model, s(ng)%name, piofile,        &
 1159     &                           vname(1,ifield),                       &
 1160     &                           s(ng)%pioVar(ifield), outrec,          &
 1161     &                           iodesc,                                &
 1162     &                           lbij, ubij, nbrec(ng), scale,          &
 1163     &                           boundary(ng) % tl_zeta_obc(lbij:,:,:,  &
 1164     &                                                      lbout(ng)), &
 1165     &                           minvalue = fmin,                       &
 1166     &                           maxvalue = fmax)
 1167        ELSE IF (model.eq.iadm) THEN
 1168          status=nf_fwrite2d_bry(ng, model, s(ng)%name, piofile,        &
 1169     &                           vname(1,ifield),                       &
 1170     &                           s(ng)%pioVar(ifield), outrec,          &
 1171     &                           iodesc,                                &
 1172     &                           lbij, ubij, nbrec(ng), scale,          &
 1173     &                           boundary(ng) % ad_zeta_obc(lbij:,:,:,  &
 1174     &                                                      lbout(ng)), &
 1175     &                           minvalue = fmin,                       &
 1176     &                           maxvalue = fmax)
 1177        END IF
 1178        IF (status.ne.pio_noerr) THEN
 1179          IF (master) THEN
 1180            WRITE (stdout,20) trim(vname(1,ifield)),                    &
 1181     &                        trim(label), trim(s(ng)%name), outrec
 1182          END IF
 1183          exit_flag=3
 1184          ioerror=status
 1185          RETURN
 1186        ELSE
 1187          IF (master) THEN
 1188            WRITE (stdout,30) trim(vname(2,ifield)), fmin, fmax
 1189          END IF
 1190        END IF
 1191      END IF
 1192#  endif
 1193
 1194
 1195
 1196      scale=1.0_dp
 1197      IF (s(ng)%pioVar(idfsur)%dkind.eq.pio_double) THEN
 1199      ELSE
 1201      END IF
 1202
 1203      IF (model.eq.itlm) THEN
 1204        status=nf_fwrite2d(ng, model, piofile, idubar,                  &
 1205     &                     s(ng)%pioVar(idubar), outrec,                &
 1206     &                     iodesc,                                      &
 1207     &                     lbi, ubi, lbj, ubj, scale,                   &
 1208#  ifdef MASKING
 1209     &                     grid(ng) % umask,                            &
 1210#  endif
 1211     &                     ocean(ng) % tl_ubar(:,:,i2d),                &
 1212     &                     minvalue = fmin,                             &
 1213     &                     maxvalue = fmax)
 1214 
 1215      ELSE IF (model.eq.iadm) THEN
 1216        status=nf_fwrite2d(ng, model, piofile, idubar,                  &
 1217     &                     s(ng)%pioVar(idubar), outrec,                &
 1218     &                     iodesc,                                      &
 1219     &                     lbi, ubi, lbj, ubj, scale,                   &
 1220#  ifdef MASKING
 1221     &                     grid(ng) % umask,                            &
 1222#  endif
 1223     &                     ocean(ng) % ad_ubar(:,:,i2d),                &
 1224     &                     minvalue = fmin,                             &
 1225     &                     maxvalue = fmax)
 1226      END IF
 1227      IF (status.ne.pio_noerr) THEN
 1228        IF (master) THEN
 1229          WRITE (stdout,20) trim(vname(1,idubar)), trim(label),         &
 1230     &                      trim(s(ng)%name), outrec
 1231        END IF
 1232        exit_flag=3
 1233        ioerror=status
 1234        RETURN
 1235      ELSE
 1236        IF (master) THEN
 1237          WRITE (stdout,30) trim(vname(2,idubar)), fmin, fmax
 1238        END IF
 1239      END IF
 1240 
 1241#   ifdef ADJUST_BOUNDARY
 1242
 1243
 1244
 1245      IF (any(lobc(:,isubar,ng))) THEN
 1246        scale=1.0_dp
 1247        ifield=idsbry(isubar)
 1248        IF (s(ng)%pioVar(ifield)%dkind.eq.pio_double) THEN
 1250        ELSE
 1252        END IF
 1253
 1254        IF (model.eq.itlm) THEN
 1255          status=nf_fwrite2d_bry(ng, model, s(ng)%name, piofile,        &
 1256     &                           vname(1,ifield),                       &
 1257     &                           s(ng)%pioVar(ifield), outrec,          &
 1258     &                           iodesc,                                &
 1259     &                           lbij, ubij, nbrec(ng), scale,          &
 1260     &                           boundary(ng) % tl_ubar_obc(lbij:,:,:,  &
 1261     &                                                      lbout(ng)), &
 1262     &                           minvalue = fmin,                       &
 1263     &                           maxvalue = fmax)
 1264        ELSE IF (model.eq.iadm) THEN
 1265          status=nf_fwrite2d_bry(ng, model, s(ng)%name, piofile,        &
 1266     &                           vname(1,ifield),                       &
 1267     &                           s(ng)%pioVar(ifield), outrec,          &
 1268     &                           iodesc,                                &
 1269     &                           lbij, ubij, nbrec(ng), scale,          &
 1270     &                           boundary(ng) % ad_ubar_obc(lbij:,:,:,  &
 1271     &                                                      lbout(ng)), &
 1272     &                           minvalue = fmin,                       &
 1273     &                           maxvalue = fmax)
 1274        END IF
 1275        IF (status.ne.pio_noerr) THEN
 1276          IF (master) THEN
 1277            WRITE (stdout,20) trim(vname(1,ifield)),                    &
 1278     &                        trim(label), trim(s(ng)%name), outrec
 1279          END IF
 1280          exit_flag=3
 1281          ioerror=status
 1282          RETURN
 1283        ELSE
 1284          IF (master) THEN
 1285            WRITE (stdout,30) trim(vname(2,ifield)), fmin, fmax
 1286          END IF
 1287        END IF
 1288      END IF
 1289#  endif
 1290
 1291
 1292
 1293      scale=1.0_dp
 1294      IF (s(ng)%pioVar(idvbar)%dkind.eq.pio_double) THEN
 1296      ELSE
 1298      END IF
 1299
 1300      IF (model.eq.itlm) THEN
 1301        status=nf_fwrite2d(ng, model, piofile, idvbar,                  &
 1302     &                     s(ng)%pioVar(idvbar), outrec,                &
 1303     &                     iodesc,                                      &
 1304     &                     lbi, ubi, lbj, ubj, scale,                   &
 1305#  ifdef MASKING
 1306     &                     grid(ng) % vmask,                            &
 1307#  endif
 1308     &                     ocean(ng) % tl_vbar(:,:,i2d),                &
 1309     &                     minvalue = fmin,                             &
 1310     &                     maxvalue = fmax)
 1311      ELSE IF (model.eq.iadm) THEN
 1312        status=nf_fwrite2d(ng, model, piofile, idvbar,                  &
 1313     &                     s(ng)%pioVar(idvbar), outrec,                &
 1314     &                     iodesc,                                      &
 1315     &                     lbi, ubi, lbj, ubj, scale,                   &
 1316#  ifdef MASKING
 1317     &                     grid(ng) % vmask,                            &
 1318#  endif
 1319     &                     ocean(ng) % ad_vbar(:,:,i2d),                &
 1320     &                     minvalue = fmin,                             &
 1321     &                     maxvalue = fmax)
 1322      END IF
 1323      IF (status.ne.pio_noerr) THEN
 1324        IF (master) THEN
 1325          WRITE (stdout,20) trim(vname(1,idvbar)), trim(label),         &
 1326     &                      trim(s(ng)%name), outrec
 1327        END IF
 1328        exit_flag=3
 1329        ioerror=status
 1330        RETURN
 1331      ELSE
 1332        IF (master) THEN
 1333          WRITE (stdout,30) trim(vname(2,idvbar)), fmin, fmax
 1334        END IF
 1335      END IF
 1336 
 1337#  ifdef ADJUST_BOUNDARY
 1338
 1339
 1340
 1341      IF (any(lobc(:,isvbar,ng))) THEN
 1342        scale=1.0_dp
 1343        ifield=idsbry(isvbar)
 1344        IF (s(ng)%pioVar(ifield)%dkind.eq.pio_double) THEN
 1346        ELSE
 1348        END IF
 1349
 1350        IF (model.eq.itlm) THEN
 1351          status=nf_fwrite2d_bry(ng, model, s(ng)%name, piofile,        &
 1352     &                           vname(1,ifield),                       &
 1353     &                           s(ng)%pioVar(ifield), outrec,          &
 1354     &                           iodesc,                                &
 1355     &                           lbij, ubij, nbrec(ng), scale,          &
 1356     &                           boundary(ng) % tl_vbar_obc(lbij:,:,:,  &
 1357     &                                                      lbout(ng)), &
 1358     &                           minvalue = fmin,                       &
 1359     &                           maxvalue = fmax)
 1360        ELSE IF (model.eq.iadm) THEN
 1361          status=nf_fwrite2d_bry(ng, model, s(ng)%name, piofile,        &
 1362     &                           vname(1,ifield),                       &
 1363     &                           s(ng)%pioVar(ifield), outrec,          &
 1364     &                           iodesc,                                &
 1365     &                           lbij, ubij, nbrec(ng), scale,          &
 1366     &                           boundary(ng) % ad_vbar_obc(lbij:,:,:,  &
 1367     &                                                      lbout(ng)), &
 1368     &                           minvalue = fmin,                       &
 1369     &                           maxvalue = fmax)
 1370        END IF
 1371        IF (status.ne.pio_noerr) THEN
 1372          IF (master) THEN
 1373            WRITE (stdout,20) trim(vname(1,ifield)),                    &
 1374     &                        trim(label), trim(s(ng)%name), outrec
 1375          END IF
 1376          exit_flag=3
 1377          ioerror=status
 1378          RETURN
 1379        ELSE
 1380          IF (master) THEN
 1381            WRITE (stdout,30) trim(vname(2,ifield)), fmin, fmax
 1382          END IF
 1383        END IF
 1384      END IF
 1385#  endif
 1386 
 1387#  ifdef ADJUST_WSTRESS
 1388
 1389
 1390
 1391
 1392
 1393      scale=1.0_dp
 1394      IF (s(ng)%pioVar(idusms)%dkind.eq.pio_double) THEN
 1396      ELSE
 1398      END IF
 1399
 1400      IF (model.eq.itlm) THEN
 1401        status=nf_fwrite3d(ng, model, piofile, idusms,                  &
 1402     &                     s(ng)%pioVar(idusms), outrec,                &
 1403     &                     iodesc,                                      &
 1404     &                     lbi, ubi, lbj, ubj, 1, nfrec(ng), scale,     &
 1405#   ifdef MASKING
 1406     &                     grid(ng) % umask,                            &
 1407#   endif
 1408     &                     forces(ng) % tl_ustr(:,:,:,lfout(ng)),       &
 1409     &                     minvalue = fmin,                             &
 1410     &                     maxvalue = fmax)
 1411      ELSE IF (model.eq.iadm) THEN
 1412        status=nf_fwrite3d(ng, model, piofile, idusms,                  &
 1413     &                     s(ng)%pioVar(idusms), outrec,                &
 1414     &                     iodesc,                                      &
 1415     &                     lbi, ubi, lbj, ubj, 1, nfrec(ng), scale,     &
 1416#   ifdef MASKING
 1417     &                     grid(ng) % umask,                            &
 1418#   endif
 1419     &                     forces(ng) % ad_ustr(:,:,:,lfout(ng)),       &
 1420     &                     minvalue = fmin,                             &
 1421     &                     maxvalue = fmax)
 1422      END IF
 1423      IF (status.ne.pio_noerr) THEN
 1424        IF (master) THEN
 1425          WRITE (stdout,20) trim(vname(1,idusms)), trim(label),         &
 1426     &                      trim(s(ng)%name), lfout(ng)
 1427        END IF
 1428        exit_flag=3
 1429        ioerror=status
 1430        RETURN
 1431      ELSE
 1432        IF (master) THEN
 1433          WRITE (stdout,30) trim(vname(2,idusms)), fmin, fmax
 1434        END IF
 1435      END IF
 1436
 1437
 1438
 1439      scale=1.0_dp
 1440      IF (s(ng)%pioVar(idvsms)%dkind.eq.pio_double) THEN
 1442      ELSE
 1444      END IF
 1445
 1446      IF (model.eq.itlm) THEN
 1447        status=nf_fwrite3d(ng, model, piofile, idvsms,                  &
 1448     &                     s(ng)%pioVar(idvsms), outrec,                &
 1449     &                     iodesc,                                      &
 1450     &                     lbi, ubi, lbj, ubj, 1, nfrec(ng), scale,     &
 1451#   ifdef MASKING
 1452     &                     grid(ng) % vmask,                            &
 1453#   endif
 1454     &                     forces(ng) % tl_vstr(:,:,:,lfout(ng)),       &
 1455     &                     minvalue = fmin,                             &
 1456     &                     maxvalue = fmax)
 1457 
 1458      ELSE IF (model.eq.iadm) THEN
 1459        status=nf_fwrite3d(ng, model, piofile, idvsms,                  &
 1460     &                     s(ng)%pioVar(idvsms), outrec,                &
 1461     &                     iodesc,                                      &
 1462     &                     lbi, ubi, lbj, ubj, 1, nfrec(ng), scale,     &
 1463#   ifdef MASKING
 1464     &                     grid(ng) % vmask,                            &
 1465#   endif
 1466     &                     forces(ng) % ad_vstr(:,:,:,lfout(ng)),       &
 1467     &                     minvalue = fmin,                             &
 1468     &                     maxvalue = fmax)
 1469      END IF
 1470      IF (status.ne.pio_noerr) THEN
 1471        IF (master) THEN
 1472          WRITE (stdout,20) trim(vname(1,idvsms)), trim(label),         &
 1473     &                      trim(s(ng)%name), lfout(ng)
 1474        END IF
 1475        exit_flag=3
 1476        ioerror=status
 1477        RETURN
 1478      ELSE
 1479        IF (master) THEN
 1480          WRITE (stdout,30) trim(vname(2,idvsms)), fmin, fmax
 1481        END IF
 1482      END IF
 1483#  endif
 1484 
 1485#  ifdef SOLVE3D
 1486
 1487
 1488
 1489      scale=1.0_dp
 1490      IF (s(ng)%pioVar(idfsur)%dkind.eq.pio_double) THEN
 1492      ELSE
 1494      END IF
 1495
 1496      IF (model.eq.itlm) THEN
 1497        status=nf_fwrite3d(ng, model, piofile, iduvel,                  &
 1498     &                     s(ng)%pioVar(iduvel), outrec,                &
 1499     &                     iodesc,                                      &
 1500     &                     lbi, ubi, lbj, ubj, 1, n(ng), scale,         &
 1501#   ifdef MASKING
 1502     &                     grid(ng) % umask,                            &
 1503#   endif
 1504     &                     ocean(ng) % tl_u(:,:,:,i3d),                 &
 1505     &                     minvalue = fmin,                             &
 1506     &                     maxvalue = fmax)
 1507 
 1508      ELSE IF (model.eq.iadm) THEN
 1509        status=nf_fwrite3d(ng, model, piofile, iduvel,                  &
 1510     &                     s(ng)%pioVar(iduvel), outrec,                &
 1511     &                     iodesc,                                      &
 1512     &                     lbi, ubi, lbj, ubj, 1, n(ng), scale,         &
 1513#   ifdef MASKING
 1514     &                     grid(ng) % umask,                            &
 1515#   endif
 1516     &                     ocean(ng) % ad_u(:,:,:,i3d),                 &
 1517     &                     minvalue = fmin,                             &
 1518     &                     maxvalue = fmax)
 1519      END IF
 1520      IF (status.ne.pio_noerr) THEN
 1521        IF (master) THEN
 1522          WRITE (stdout,20) trim(vname(1,iduvel)), trim(label),         &
 1523     &                      trim(s(ng)%name), outrec
 1524        END IF
 1525        exit_flag=3
 1526        ioerror=status
 1527        RETURN
 1528      ELSE
 1529        IF (master) THEN
 1530          WRITE (stdout,30) trim(vname(2,iduvel)), fmin, fmax
 1531        END IF
 1532      END IF
 1533 
 1534#   ifdef ADJUST_BOUNDARY
 1535
 1536
 1537
 1538      IF (any(lobc(:,isuvel,ng))) THEN
 1539        scale=1.0_dp
 1540        ifield=idsbry(isuvel)
 1541        IF (s(ng)%pioVar(ifield)%dkind.eq.pio_double) THEN
 1543        ELSE
 1545        END IF
 1546
 1547        IF (model.eq.itlm) THEN
 1548          status=nf_fwrite3d_bry(ng, model, s(ng)%name, piofile,        &
 1549     &                           vname(1,ifield),                       &
 1550     &                           s(ng)%pioVar(ifield), outrec,          &
 1551     &                           iodesc,                                &
 1552     &                           lbij, ubij, 1, n(ng), nbrec(ng), scale,&
 1553     &                           boundary(ng) % tl_u_obc(lbij:,:,:,:,   &
 1554     &                                                   lbout(ng)),    &
 1555     &                           minvalue = fmin,                       &
 1556     &                           maxvalue = fmax)
 1557        ELSE IF (model.eq.iadm) THEN
 1558          status=nf_fwrite3d_bry(ng, model, s(ng)%name, piofile,        &
 1559     &                           vname(1,ifield),                       &
 1560     &                           s(ng)%pioVar(ifield), outrec,          &
 1561     &                           iodesc,                                &
 1562     &                           lbij, ubij, 1, n(ng), nbrec(ng), scale,&
 1563     &                           boundary(ng) % ad_u_obc(lbij:,:,:,:,   &
 1564     &                                                   lbout(ng)),    &
 1565     &                           minvalue = fmin,                       &
 1566     &                           maxvalue = fmax)
 1567        END IF
 1568        IF (status.ne.pio_noerr) THEN
 1569          IF (master) THEN
 1570            WRITE (stdout,20) trim(vname(1,ifield)),                    &
 1571     &                        trim(label), trim(s(ng)%name), outrec
 1572          END IF
 1573          exit_flag=3
 1574          ioerror=status
 1575          RETURN
 1576        ELSE
 1577          IF (master) THEN
 1578            WRITE (stdout,30) trim(vname(2,ifield)), fmin, fmax
 1579          END IF
 1580        END IF
 1581      END IF
 1582#   endif
 1583
 1584
 1585
 1586      scale=1.0_dp
 1587      IF (s(ng)%pioVar(idvvel)%dkind.eq.pio_double) THEN
 1589      ELSE
 1591      END IF
 1592
 1593      IF (model.eq.itlm) THEN
 1594        status=nf_fwrite3d(ng, model, piofile, idvvel,                  &
 1595     &                     s(ng)%pioVar(idvvel), outrec,                &
 1596     &                     iodesc,                                      &
 1597     &                     lbi, ubi, lbj, ubj, 1, n(ng), scale,         &
 1598#   ifdef MASKING
 1599     &                     grid(ng) % vmask,                            &
 1600#   endif
 1601     &                     ocean(ng) % tl_v(:,:,:,i3d),                 &
 1602     &                     minvalue = fmin,                             &
 1603     &                     maxvalue = fmax)
 1604      ELSE IF (model.eq.iadm) THEN
 1605        status=nf_fwrite3d(ng, model, piofile, idvvel,                  &
 1606     &                     s(ng)%pioVar(idvvel), outrec,                &
 1607     &                     iodesc,                                      &
 1608     &                     lbi, ubi, lbj, ubj, 1, n(ng), scale,         &
 1609#   ifdef MASKING
 1610     &                     grid(ng) % vmask,                            &
 1611#   endif
 1612     &                     ocean(ng) % ad_v(:,:,:,i3d),                 &
 1613     &                     minvalue = fmin,                             &
 1614     &                     maxvalue = fmax)
 1615      END IF
 1616      IF (status.ne.pio_noerr) THEN
 1617        IF (master) THEN
 1618          WRITE (stdout,20) trim(vname(1,idvvel)), trim(label),         &
 1619     &                      trim(s(ng)%name), outrec
 1620        END IF
 1621        exit_flag=3
 1622        ioerror=status
 1623        RETURN
 1624      ELSE
 1625        IF (master) THEN
 1626          WRITE (stdout,30) trim(vname(2,idvvel)), fmin, fmax
 1627        END IF
 1628      END IF
 1629 
 1630#   ifdef ADJUST_BOUNDARY
 1631
 1632
 1633
 1634      IF (any(lobc(:,isvvel,ng))) THEN
 1635        scale=1.0_dp
 1636        ifield=idsbry(isvvel)
 1637        IF (s(ng)%pioVar(ifield)%dkind.eq.pio_double) THEN
 1639        ELSE
 1641        END IF
 1642
 1643        IF (model.eq.itlm) THEN
 1644          status=nf_fwrite3d_bry(ng, model, s(ng)%name, piofile,        &
 1645     &                           vname(1,ifield),                       &
 1646     &                           s(ng)%pioVar(ifield), outrec,          &
 1647     &                           iodesc,                                &
 1648     &                           lbij, ubij, 1, n(ng), nbrec(ng), scale,&
 1649     &                           boundary(ng) % ad_v_obc(lbij:,:,:,:,   &
 1650     &                                                   lbout(ng)),    &
 1651     &                           minvalue = fmin,                       &
 1652     &                           maxvalue = fmax)
 1653        ELSE IF (model.eq.iadm) THEN
 1654          status=nf_fwrite3d_bry(ng, model, s(ng)%name, piofile,        &
 1655     &                           vname(1,ifield),                       &
 1656     &                           s(ng)%pioVar(ifield), outrec,          &
 1657     &                           iodesc,                                &
 1658     &                           lbij, ubij, 1, n(ng), nbrec(ng), scale,&
 1659     &                           boundary(ng) % ad_v_obc(lbij:,:,:,:,   &
 1660     &                                                   lbout(ng)),    &
 1661     &                           minvalue = fmin,                       &
 1662     &                           maxvalue = fmax)
 1663        END IF
 1664        IF (status.ne.pio_noerr) THEN
 1665          IF (master) THEN
 1666            WRITE (stdout,20) trim(vname(1,ifield)),                    &
 1667     &                        trim(label), trim(s(ng)%name), outrec
 1668          END IF
 1669          exit_flag=3
 1670          ioerror=status
 1671          RETURN
 1672        ELSE
 1673          IF (master) THEN
 1674            WRITE (stdout,30) trim(vname(2,ifield)), fmin, fmax
 1675          END IF
 1676        END IF
 1677      END IF
 1678#   endif
 1679
 1680
 1681
 1682      DO itrc=1,nt(ng)
 1683        scale=1.0_dp
 1684        IF (s(ng)%pioTrc(itrc)%dkind.eq.pio_double) THEN
 1686        ELSE
 1688        END IF
 1689
 1690        IF (model.eq.itlm) THEN
 1691          status=nf_fwrite3d(ng, model, piofile, idtvar(itrc),          &
 1692     &                       s(ng)%pioTrc(itrc), outrec,                &
 1693     &                       iodesc,                                    &
 1694     &                       lbi, ubi, lbj, ubj, 1, n(ng), scale,       &
 1695#   ifdef MASKING
 1696     &                       grid(ng) % rmask,                          &
 1697#   endif
 1698     &                       ocean(ng) % tl_t(:,:,:,i3d,itrc),          &
 1699     &                       minvalue = fmin,                           &
 1700     &                       maxvalue = fmax)
 1701        ELSE IF (model.eq.iadm) THEN
 1702          status=nf_fwrite3d(ng, model, piofile, idtvar(itrc),          &
 1703     &                       s(ng)%pioTrc(itrc), outrec,                &
 1704     &                       iodesc,                                    &
 1705     &                       lbi, ubi, lbj, ubj, 1, n(ng), scale,       &
 1706#   ifdef MASKING
 1707     &                       grid(ng) % rmask,                          &
 1708#   endif
 1709     &                       ocean(ng) % ad_t(:,:,:,i3d,itrc),          &
 1710     &                       minvalue = fmin,                           &
 1711     &                       maxvalue = fmax)
 1712        END IF
 1713        IF (status.ne.pio_noerr) THEN
 1714          IF (master) THEN
 1715            WRITE (stdout,20) trim(vname(1,idtvar(itrc))),              &
 1716     &                        trim(label), trim(s(ng)%name), outrec
 1717          END IF
 1718          exit_flag=3
 1719          ioerror=status
 1720          RETURN
 1721        ELSE
 1722          IF (master) THEN
 1723            WRITE (stdout,30) trim(vname(2,idtvar(itrc))),              &
 1724     &                        fmin, fmax
 1725          END IF
 1726        END IF
 1727      END DO
 1728 
 1729#   ifdef ADJUST_BOUNDARY
 1730
 1731
 1732
 1733      DO itrc=1,nt(ng)
 1734        IF (any(lobc(:,istvar(itrc),ng))) THEN
 1735          scale=1.0_dp
 1736          ifield=idsbry(istvar(itrc))
 1737          IF (s(ng)%pioVar(ifield)%dkind.eq.pio_double) THEN
 1739          ELSE
 1741          END IF
 1742
 1743          IF (model.eq.itlm) THEN
 1744            status=nf_fwrite3d_bry(ng, model, s(ng)%name, piofile,     &
 1745     &                              vname(1,ifield),                    &
 1746     &                              s(ng)%pioVar(ifield),               &
 1747     &                              outrec, iodesc,                     &
 1748     &                              lbij, ubij, 1, n(ng), nbrec(ng),    &
 1749     &                              scale,                              &
 1750     &                              boundary(ng) % tl_t_obc(lbij:,:,:,:,&
 1751     &                                                lbout(ng),itrc),  &
 1752     &                              minvalue = fmin,                    &
 1753     &                              maxvalue = fmax)
 1754          ELSE IF (model.eq.iadm) THEN
 1755            status=nf_fwrite3d_bry(ng, model, s(ng)%name, piofile,     &
 1756     &                              vname(1,ifield),                    &
 1757     &                              s(ng)%pioVar(ifield),               &
 1758     &                              outrec, iodesc,                     &
 1759     &                              lbij, ubij, 1, n(ng), nbrec(ng),    &
 1760     &                              scale,                              &
 1761     &                              boundary(ng) % ad_t_obc(lbij:,:,:,:,&
 1762     &                                                lbout(ng),itrc),  &
 1763     &                              minvalue = fmin,                    &
 1764     &                              maxvalue = fmax)
 1765          END IF
 1766          IF (status.ne.pio_noerr) THEN
 1767            IF (master) THEN
 1768              WRITE (stdout,20) trim(vname(1,ifield)),                  &
 1769     &                          trim(label), trim(s(ng)%name), outrec
 1770            END IF
 1771            exit_flag=3
 1772            ioerror=status
 1773            RETURN
 1774          ELSE
 1775            IF (master) THEN
 1776              WRITE (stdout,30) trim(vname(2,ifield)), fmin, fmax
 1777            END IF
 1778          END IF
 1779        END IF
 1780      END DO
 1781#   endif
 1782 
 1783#   ifdef ADJUST_STFLUX
 1784
 1785
 1786
 1787
 1788
 1789      DO itrc=1,nt(ng)
 1790        IF (lstflux(itrc,ng)) THEN
 1791          scale=1.0_dp                      
 1792          ifield=idtsur(itrc)
 1793          IF (s(ng)%pioVar(ifield)%dkind.eq.pio_double) THEN
 1795          ELSE
 1797          END IF
 1798
 1799          IF (model.eq.itlm) THEN
 1800            status=nf_fwrite3d(ng, itlm, piofile, ifield,               &
 1801     &                         s(ng)%pioVar(ifield),                    &
 1802     &                         outrec, iodesc,                          &
 1803     &                         lbi, ubi, lbj, ubj, 1, nfrec(ng), scale, &
 1804#    ifdef MASKING
 1805     &                         grid(ng) % rmask,                        &
 1806#    endif
 1807     &                         forces(ng)% tl_tflux(:,:,:,              &
 1808     &                                              lfout(ng),itrc),    &
 1809     &                         minvalue = fmin,                         &
 1810     &                         maxvalue = fmax)
 1811          ELSE IF (model.eq.iadm) THEN
 1812            status=nf_fwrite3d(ng, itlm, piofile, ifield,               &
 1813     &                         s(ng)%pioVar(ifield),                    &
 1814     &                         outrec, iodesc,                          &
 1815     &                         lbi, ubi, lbj, ubj, 1, nfrec(ng), scale, &
 1816#    ifdef MASKING
 1817     &                         grid(ng) % rmask,                        &
 1818#    endif
 1819     &                         forces(ng)% ad_tflux(:,:,:,              &
 1820     &                                              lfout(ng),itrc),    &
 1821     &                         minvalue = fmin,                         &
 1822     &                         maxvalue = fmax)
 1823          END IF
 1824          IF (status.ne.pio_noerr) THEN
 1825            IF (master) THEN
 1826              WRITE (stdout,20) trim(vname(1,ifield)),                  &
 1827     &                          trim(label), trim(s(ng)%name), lfout(ng)
 1828            END IF
 1829            exit_flag=3
 1830            ioerror=status
 1831            RETURN
 1832          ELSE
 1833            IF (master) THEN
 1834              WRITE (stdout,30) trim(vname(2,ifield)), fmin, fmax
 1835            END IF
 1836          END IF
 1837        END IF
 1838      END DO
 1839#   endif
 1840#  endif
 1841
 1842
 1843
 1844
 1845
 1846
 1847
 1849      IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
 1850
 1852 
 1853#  ifdef PROFILE
 1854
 1855
 1856
 1857      CALL wclock_off (ng, model, 81, __line__, myfile)
 
 1858#  endif
 1859
 1860  10  FORMAT (1x,a,': WRT_STATE_PIO - ',a,t75,a,                        &
 1861     &        /,23x,'(Grid ',i2.2,', t = ',a,', File: ',a,              &
 1862     &        ', Index=',i1,', Rec=',i0,')',                            &
 1863     &        /,23x,'Called from ''',a,'''')
 1864  20  FORMAT (/,' WRT_STATE_PIO - error while writing variable: ',a,    &
 1865     &        /,17x,'into ',a,' NetCDF file: ',a,                       &
 1866     &        /,17x,'for time record: ',i0)
 1867  30  FORMAT (20x,'- ',a,/,23x,'(Min = ',1p,e15.8,                      &
 1868     &        ' Max = ',1p,e15.8,')')
 1869
 1870      RETURN
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dobc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dvar
 
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dvar
 
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dobc
 
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dfrc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dobc
 
subroutine, public pio_netcdf_sync(ng, model, ncname, piofile)
 
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dvar
 
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dobc
 
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dobc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dvar
 
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dobc
 
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dobc
 
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dvar
 
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dobc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dfrc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dobc
 
subroutine, public pio_netcdf_close(ng, model, piofile, ncname, lupdate)
 
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dobc
 
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
 
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dvar
 
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dfrc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dvar
 
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dfrc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dfrc
 
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dvar
 
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dvar
 
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dvar
 
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dvar
 
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dobc
 
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dobc
 
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dvar
 
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dfrc