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