1049
1050
1052
1053
1054
1055 integer, intent(in) :: ng
1056
1057
1058
1059 logical :: got_var(NV)
1060
1061 integer, parameter :: Natt = 25
1062
1063 integer :: i, j, ifield, itrc, nvd3, nvd4
1064 integer :: recdim, status
1065 integer :: Fcount
1066# ifdef ADJUST_BOUNDARY
1067 integer :: IorJdim, brecdim
1068# endif
1069# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1070 integer :: frecdim
1071# endif
1072 integer :: DimIDs(nDimID)
1073 integer :: t2dgrd(3), u2dgrd(3), v2dgrd(3)
1074# ifdef ADJUST_BOUNDARY
1075 integer :: t2dobc(4)
1076# endif
1077
1078# ifdef SOLVE3D
1079 integer :: t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
1080# ifdef ADJUST_BOUNDARY
1081 integer :: t3dobc(5)
1082# endif
1083# ifdef ADJUST_STFLUX
1084 integer :: t3dfrc(4)
1085# endif
1086# endif
1087# ifdef ADJUST_WSTRESS
1088 integer :: u3dfrc(4), v3dfrc(4)
1089# endif
1090
1091 real(r8) :: Aval(6)
1092
1093 character (len=256) :: ncname
1094 character (len=MaxLen) :: Vinfo(Natt)
1095
1096 character (len=*), parameter :: MyFile = &
1097 & __FILE__//", tl_def_ini_pio"
1098
1099 sourcefile=myfile
1100
1101
1102
1103
1104
1105 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1106 ncname=itl(ng)%name
1107
1108 IF (master) THEN
1109 IF (ldefitl(ng)) THEN
1110 WRITE (stdout,10) ng, trim(ncname)
1111 ELSE
1112 WRITE (stdout,20) ng, trim(ncname)
1113 END IF
1114 END IF
1115
1116
1117
1118
1119
1120 define : IF (ldefitl(ng)) THEN
1122 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
1123 IF (master) WRITE (stdout,30) trim(ncname)
1124 RETURN
1125 END IF
1126
1127
1128
1129
1130
1131 dimids=0
1132
1133 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xi_rho', &
1134 & iobounds(ng)%xi_rho, dimids( 1))
1135 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1136
1137 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xi_u', &
1138 & iobounds(ng)%xi_u, dimids( 2))
1139 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1140
1141 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xi_v', &
1142 & iobounds(ng)%xi_v, dimids( 3))
1143 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1144
1145 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xi_psi', &
1146 & iobounds(ng)%xi_psi, dimids( 4))
1147 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1148
1149 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'eta_rho', &
1150 & iobounds(ng)%eta_rho, dimids( 5))
1151 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1152
1153 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'eta_u', &
1154 & iobounds(ng)%eta_u, dimids( 6))
1155 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1156
1157 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'eta_v', &
1158 & iobounds(ng)%eta_v, dimids( 7))
1159 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1160
1161 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'eta_psi', &
1162 & iobounds(ng)%eta_psi, dimids( 8))
1163 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1164
1165# ifdef ADJUST_BOUNDARY
1166 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'IorJ', &
1167 & iobounds(ng)%IorJ, iorjdim)
1168 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1169# endif
1170
1171# if defined WRITE_WATER && defined MASKING
1172 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xy_rho', &
1173 & iobounds(ng)%xy_rho, dimids(17))
1174 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1175
1176 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xy_u', &
1177 & iobounds(ng)%xy_u, dimids(18))
1178 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1179
1180 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xy_v', &
1181 & iobounds(ng)%xy_v, dimids(19))
1182 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1183# endif
1184
1185# ifdef SOLVE3D
1186# if defined WRITE_WATER && defined MASKING
1187 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xyz_rho', &
1188 & iobounds(ng)%xy_rho*n(ng), dimids(20))
1189 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1190
1191 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xyz_u', &
1192 & iobounds(ng)%xy_u*n(ng), dimids(21))
1193 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1194
1195 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xyz_v', &
1196 & iobounds(ng)%xy_v*n(ng), dimids(22))
1197 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1198
1199 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xyz_w', &
1200 & iobounds(ng)%xy_rho*(n(ng)+1), dimids(23))
1201 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1202# endif
1203
1204 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'N', &
1205 & n(ng), dimids( 9))
1206 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1207
1208 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 's_rho', &
1209 & n(ng), dimids( 9))
1210 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1211
1212 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 's_w', &
1213 & n(ng)+1, dimids(10))
1214 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1215
1216 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'tracer', &
1217 & nt(ng), dimids(11))
1218 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1219
1220# ifdef SEDIMENT
1221 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'NST', &
1222 & nst, dimids(32))
1223 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1224
1225 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'Nbed', &
1226 & nbed, dimids(16))
1227 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1228
1229# if defined WRITE_WATER && defined MASKING
1230 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'xybed', &
1231 & iobounds(ng)%xy_rho*nbed, dimids(24))
1232 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1233# endif
1234# endif
1235# endif
1236
1237 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'boundary', &
1238 & 4, dimids(14))
1239 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1240
1241# ifdef FOUR_DVAR
1242 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'Nstate', &
1243 & nstatevar(ng), dimids(29))
1244 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1245# endif
1246
1247# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1248 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'frc_adjust', &
1249 & nfrec(ng), dimids(30))
1250 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1251# endif
1252
1253# ifdef ADJUST_BOUNDARY
1254 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, 'obc_adjust', &
1255 & nbrec(ng), dimids(31))
1256 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1257# endif
1258
1259 status=def_dim(ng, itlm, itl(ng)%pioFile, ncname, &
1260 & trim(adjustl(vname(5,idtime))), &
1261 & pio_unlimited, dimids(12))
1262 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1263
1264 recdim=dimids(12)
1265# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1266 frecdim=dimids(30)
1267# endif
1268# ifdef ADJUST_BOUNDARY
1269 brecdim=dimids(31)
1270# endif
1271
1272
1273
1274# if defined WRITE_WATER && defined MASKING
1275 nvd3=2
1276 nvd4=2
1277# else
1278 nvd3=3
1279 nvd4=4
1280# endif
1281
1282
1283
1284# if defined WRITE_WATER && defined MASKING
1285 t2dgrd(1)=dimids(17)
1286 t2dgrd(2)=dimids(12)
1287# ifdef SOLVE3D
1288 t3dgrd(1)=dimids(20)
1289 t3dgrd(2)=dimids(12)
1290# endif
1291# else
1292 t2dgrd(1)=dimids( 1)
1293 t2dgrd(2)=dimids( 5)
1294 t2dgrd(3)=dimids(12)
1295# ifdef SOLVE3D
1296 t3dgrd(1)=dimids( 1)
1297 t3dgrd(2)=dimids( 5)
1298 t3dgrd(3)=dimids( 9)
1299 t3dgrd(4)=dimids(12)
1300# endif
1301# ifdef ADJUST_STFLUX
1302 t3dfrc(1)=dimids( 1)
1303 t3dfrc(2)=dimids( 5)
1304 t3dfrc(3)=frecdim
1305 t3dfrc(4)=dimids(12)
1306# endif
1307# endif
1308# ifdef ADJUST_BOUNDARY
1309 t2dobc(1)=iorjdim
1310 t2dobc(2)=dimids(14)
1311 t2dobc(3)=brecdim
1312 t2dobc(4)=dimids(12)
1313# ifdef SOLVE3D
1314 t3dobc(1)=iorjdim
1315 t3dobc(2)=dimids( 9)
1316 t3dobc(3)=dimids(14)
1317 t3dobc(4)=brecdim
1318 t3dobc(5)=dimids(12)
1319# endif
1320# endif
1321
1322
1323
1324# if defined WRITE_WATER && defined MASKING
1325 u2dgrd(1)=dimids(18)
1326 u2dgrd(2)=dimids(12)
1327# ifdef SOLVE3D
1328 u3dgrd(1)=dimids(21)
1329 u3dgrd(2)=dimids(12)
1330# endif
1331# else
1332 u2dgrd(1)=dimids( 2)
1333 u2dgrd(2)=dimids( 6)
1334 u2dgrd(3)=dimids(12)
1335# ifdef SOLVE3D
1336 u3dgrd(1)=dimids( 2)
1337 u3dgrd(2)=dimids( 6)
1338 u3dgrd(3)=dimids( 9)
1339 u3dgrd(4)=dimids(12)
1340# endif
1341# ifdef ADJUST_WSTRESS
1342 u3dfrc(1)=dimids( 2)
1343 u3dfrc(2)=dimids( 6)
1344 u3dfrc(3)=frecdim
1345 u3dfrc(4)=dimids(12)
1346# endif
1347# endif
1348
1349
1350
1351# if defined WRITE_WATER && defined MASKING
1352 v2dgrd(1)=dimids(19)
1353 v2dgrd(2)=dimids(12)
1354# ifdef SOLVE3D
1355 v3dgrd(1)=dimids(22)
1356 v3dgrd(2)=dimids(12)
1357# endif
1358# else
1359 v2dgrd(1)=dimids( 3)
1360 v2dgrd(2)=dimids( 7)
1361 v2dgrd(3)=dimids(12)
1362# ifdef SOLVE3D
1363 v3dgrd(1)=dimids( 3)
1364 v3dgrd(2)=dimids( 7)
1365 v3dgrd(3)=dimids( 9)
1366 v3dgrd(4)=dimids(12)
1367# endif
1368# ifdef ADJUST_WSTRESS
1369 v3dfrc(1)=dimids( 3)
1370 v3dfrc(2)=dimids( 7)
1371 v3dfrc(3)=frecdim
1372 v3dfrc(4)=dimids(12)
1373# endif
1374# endif
1375# ifdef SOLVE3D
1376
1377
1378
1379# if defined WRITE_WATER && defined MASKING
1380 w3dgrd(1)=dimids(23)
1381 w3dgrd(2)=dimids(12)
1382# else
1383 w3dgrd(1)=dimids( 1)
1384 w3dgrd(2)=dimids( 5)
1385 w3dgrd(3)=dimids(10)
1386 w3dgrd(4)=dimids(12)
1387# endif
1388# endif
1389
1390
1391
1392 DO i=1,natt
1393 DO j=1,len(vinfo(1))
1394 vinfo(i)(j:j)=' '
1395 END DO
1396 END DO
1397 DO i=1,6
1398 aval(i)=0.0_r8
1399 END DO
1400
1401
1402
1403
1404
1405 CALL def_info (ng, itlm, itl(ng)%pioFile, ncname, dimids)
1406 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1407
1408
1409
1410
1411
1412
1413
1414 vinfo( 1)=vname(1,idtime)
1415 vinfo( 2)=vname(2,idtime)
1416 WRITE (vinfo( 3),'(a,a)') 'seconds since ', trim(rclock%string)
1417 vinfo( 4)=trim(rclock%calendar)
1418 vinfo(14)=vname(4,idtime)
1419 vinfo(21)=vname(6,idtime)
1420 itl(ng)%pioVar(idtime)%dkind=
pio_tout
1421 itl(ng)%pioVar(idtime)%gtype=0
1422
1423 status=def_var(ng, itlm, itl(ng)%pioFile, &
1424 & itl(ng)%pioVar(idtime)%vd,
pio_tout, &
1425 & 1, (/recdim/), aval, vinfo, ncname, &
1426 & setparaccess = .false.)
1427 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1428
1429
1430
1431 vinfo( 1)=vname(1,idfsur)
1432 WRITE (vinfo( 2),40) trim(vname(2,idfsur))
1433 vinfo( 3)=vname(3,idfsur)
1434 vinfo(14)=vname(4,idfsur)
1435 vinfo(16)=vname(1,idtime)
1436# if defined WRITE_WATER && defined MASKING
1437 vinfo(20)='mask_rho'
1438# endif
1439 vinfo(21)=vname(6,idfsur)
1440 vinfo(22)='coordinates'
1441 aval(5)=real(iinfo(1,idfsur,ng),r8)
1442 itl(ng)%pioVar(idfsur)%dkind=
pio_fout
1443 itl(ng)%pioVar(idfsur)%gtype=r2dvar
1444
1445 status=def_var(ng, itlm, itl(ng)%pioFile, &
1446 & itl(ng)%pioVar(idfsur)%vd,
pio_fout, &
1447# ifdef WET_DRY
1448 & nvd3, t2dgrd, aval, vinfo, ncname, &
1449 & setfillval = .false.)
1450# else
1451 & nvd3, t2dgrd, aval, vinfo, ncname)
1452# endif
1453 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1454
1455# ifdef ADJUST_BOUNDARY
1456
1457
1458
1459 IF (any(lobc(:,isfsur,ng))) THEN
1460 ifield=idsbry(isfsur)
1461 vinfo( 1)=vname(1,ifield)
1462 WRITE (vinfo( 2),40) trim(vname(2,ifield))
1463 vinfo( 3)=vname(3,ifield)
1464 vinfo(14)=vname(4,ifield)
1465 vinfo(16)=vname(1,idtime)
1466 vinfo(21)=vname(6,ifield)
1467 aval(5)=real(iinfo(1,ifield,ng),r8)
1468 itl(ng)%pioVar(ifield)%dkind=
pio_fout
1469 itl(ng)%pioVar(ifield)%gtype=r2dobc
1470
1471 status=def_var(ng, itlm, itl(ng)%pioFile, &
1472 & itl(ng)%pioVar(ifield)%vd,
pio_fout, &
1473 & 4, t2dobc, aval, vinfo, ncname, &
1474 & setfillval = .false.)
1475 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1476 END IF
1477# endif
1478
1479
1480
1481 vinfo( 1)=vname(1,idubar)
1482 WRITE (vinfo( 2),40) trim(vname(2,idubar))
1483 vinfo( 3)=vname(3,idubar)
1484 vinfo(14)=vname(4,idubar)
1485 vinfo(16)=vname(1,idtime)
1486# if defined WRITE_WATER && defined MASKING
1487 vinfo(20)='mask_u'
1488# endif
1489 vinfo(21)=vname(6,idubar)
1490 vinfo(22)='coordinates'
1491 aval(5)=real(iinfo(1,idubar,ng),r8)
1492 itl(ng)%pioVar(idubar)%dkind=
pio_fout
1493 itl(ng)%pioVar(idubar)%gtype=u2dvar
1494
1495 status=def_var(ng, itlm, itl(ng)%pioFile, &
1496 & itl(ng)%pioVar(idubar)%vd,
pio_fout, &
1497 & nvd3, u2dgrd, aval, vinfo, ncname)
1498 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1499
1500# ifdef ADJUST_BOUNDARY
1501
1502
1503
1504 IF (any(lobc(:,isubar,ng))) THEN
1505 ifield=idsbry(isubar)
1506 vinfo( 1)=vname(1,ifield)
1507 WRITE (vinfo( 2),40) trim(vname(2,ifield))
1508 vinfo( 3)=vname(3,ifield)
1509 vinfo(14)=vname(4,ifield)
1510 vinfo(16)=vname(1,idtime)
1511 vinfo(21)=vname(6,ifield)
1512 aval(5)=real(iinfo(1,ifield,ng),r8)
1513 itl(ng)%pioVar(ifield)%dkind=
pio_fout
1514 itl(ng)%pioVar(ifield)%gtype=u2dobc
1515
1516 status=def_var(ng, itlm, itl(ng)%pioFile, &
1517 & itl(ng)%pioVar(ifield)%vd,
pio_fout, &
1518 & 4, t2dobc, aval, vinfo, ncname, &
1519 & setfillval = .false.)
1520 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1521 END IF
1522# endif
1523
1524
1525
1526 vinfo( 1)=vname(1,idvbar)
1527 WRITE (vinfo( 2),40) trim(vname(2,idvbar))
1528 vinfo( 3)=vname(3,idvbar)
1529 vinfo(14)=vname(4,idvbar)
1530 vinfo(16)=vname(1,idtime)
1531# if defined WRITE_WATER && defined MASKING
1532 vinfo(20)='mask_v'
1533# endif
1534 vinfo(21)=vname(6,idvbar)
1535 vinfo(22)='coordinates'
1536 aval(5)=real(iinfo(1,idvbar,ng),r8)
1537 itl(ng)%pioVar(idvbar)%dkind=
pio_fout
1538 itl(ng)%pioVar(idvbar)%gtype=v2dvar
1539
1540 status=def_var(ng, itlm, itl(ng)%pioFile, &
1541 & itl(ng)%pioVar(idvbar)%vd,
pio_fout, &
1542 & nvd3, v2dgrd, aval, vinfo, ncname)
1543 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1544
1545# ifdef ADJUST_BOUNDARY
1546
1547
1548
1549 IF (any(lobc(:,isvbar,ng))) THEN
1550 ifield=idsbry(isvbar)
1551 vinfo( 1)=vname(1,ifield)
1552 WRITE (vinfo( 2),40) trim(vname(2,ifield))
1553 vinfo( 3)=vname(3,ifield)
1554 vinfo(14)=vname(4,ifield)
1555 vinfo(16)=vname(1,idtime)
1556 vinfo(21)=vname(6,ifield)
1557 aval(5)=real(iinfo(1,ifield,ng),r8)
1558 itl(ng)%pioVar(ifield)%dkind=
pio_fout
1559 itl(ng)%pioVar(ifield)%gtype=v2dobc
1560
1561 status=def_var(ng, itlm, itl(ng)%pioFile, &
1562 & itl(ng)%pioVar(ifield)%vd,
pio_fout, &
1563 & 4, t2dobc, aval, vinfo, ncname, &
1564 & setfillval = .false.)
1565 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1566 END IF
1567# endif
1568# ifdef ADJUST_WSTRESS
1569
1570
1571
1572 vinfo( 1)=vname(1,idusms)
1573 WRITE (vinfo( 2),40) trim(vname(2,idusms))
1574 vinfo( 3)=vname(3,idusms)
1575 vinfo(14)=vname(4,idusms)
1576 vinfo(16)=vname(1,idtime)
1577# if defined WRITE_WATER && defined MASKING
1578 vinfo(20)='mask_u'
1579# endif
1580 vinfo(21)=vname(6,idusms)
1581 vinfo(22)='coordinates'
1582 aval(5)=real(u2dvar,r8)
1583 itl(ng)%pioVar(idusms)%dkind=
pio_fout
1584 itl(ng)%pioVar(idusms)%gtype=u2dvar
1585
1586 status=def_var(ng, itlm, itl(ng)%pioFile, &
1587 & itl(ng)%pioVar(idusms)%vd,
pio_fout, &
1588 & nvd4, u3dfrc, aval, vinfo, ncname)
1589 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1590
1591
1592
1593 vinfo( 1)=vname(1,idvsms)
1594 WRITE (vinfo( 2),40) trim(vname(2,idvsms))
1595 vinfo( 2)=vname(2,idvsms)
1596 vinfo( 3)=vname(3,idvsms)
1597 vinfo(14)=vname(4,idvsms)
1598 vinfo(16)=vname(1,idtime)
1599# if defined WRITE_WATER && defined MASKING
1600 vinfo(20)='mask_v'
1601# endif
1602 vinfo(21)=vname(6,idvsms)
1603 vinfo(22)='coordinates'
1604 aval(5)=real(v2dvar,r8)
1605 itl(ng)%pioVar(idvsms)%dkind=
pio_fout
1606 itl(ng)%pioVar(idvsms)%gtype=v2dvar
1607
1608 status=def_var(ng, itlm, itl(ng)%pioFile, &
1609 & itl(ng)%pioVar(idvsms)%vd,
pio_fout, &
1610 & nvd4, v3dfrc, aval, vinfo, ncname)
1611 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1612# endif
1613# ifdef SOLVE3D
1614
1615
1616
1617 vinfo( 1)=vname(1,iduvel)
1618 WRITE (vinfo( 2),40) trim(vname(2,iduvel))
1619 vinfo( 3)=vname(3,iduvel)
1620 vinfo(14)=vname(4,iduvel)
1621 vinfo(16)=vname(1,idtime)
1622# if defined WRITE_WATER && defined MASKING
1623 vinfo(20)='mask_u'
1624# endif
1625 vinfo(21)=vname(6,iduvel)
1626 vinfo(22)='coordinates'
1627 aval(5)=real(iinfo(1,iduvel,ng),r8)
1628 itl(ng)%pioVar(iduvel)%dkind=
pio_fout
1629 itl(ng)%pioVar(iduvel)%gtype=u3dvar
1630
1631 status=def_var(ng, itlm, itl(ng)%pioFile, &
1632 & itl(ng)%pioVar(iduvel)%vd,
pio_fout, &
1633 & nvd4, u3dgrd, aval, vinfo, ncname)
1634 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1635
1636# ifdef ADJUST_BOUNDARY
1637
1638
1639
1640 IF (any(lobc(:,isuvel,ng))) THEN
1641 ifield=idsbry(isuvel)
1642 vinfo( 1)=vname(1,ifield)
1643 WRITE (vinfo( 2),40) trim(vname(2,ifield))
1644 vinfo( 3)=vname(3,ifield)
1645 vinfo(14)=vname(4,ifield)
1646 vinfo(16)=vname(1,idtime)
1647 vinfo(21)=vname(6,ifield)
1648 aval(5)=real(iinfo(1,ifield,ng),r8)
1649 itl(ng)%pioVar(ifield)%dkind=
pio_fout
1650 itl(ng)%pioVar(ifield)%gtype=u3dobc
1651
1652 status=def_var(ng, itlm, itl(ng)%pioFile, &
1653 & itl(ng)%pioVar(ifield)%vd,
pio_fout, &
1654 & 5, t3dobc, aval, vinfo, ncname, &
1655 & setfillval = .false.)
1656 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1657 END IF
1658# endif
1659
1660
1661
1662 vinfo( 1)=vname(1,idvvel)
1663 WRITE (vinfo( 2),40) trim(vname(2,idvvel))
1664 vinfo( 3)=vname(3,idvvel)
1665 vinfo(14)=vname(4,idvvel)
1666 vinfo(16)=vname(1,idtime)
1667# if defined WRITE_WATER && defined MASKING
1668 vinfo(20)='mask_v'
1669# endif
1670 vinfo(21)=vname(6,idvvel)
1671 vinfo(22)='coordinates'
1672 aval(5)=real(iinfo(1,idvvel,ng),r8)
1673 itl(ng)%pioVar(idvvel)%dkind=
pio_fout
1674 itl(ng)%pioVar(idvvel)%gtype=v3dvar
1675
1676 status=def_var(ng, itlm, itl(ng)%pioFile, &
1677 & itl(ng)%pioVar(idvvel)%vd,
pio_fout, &
1678 & nvd4, v3dgrd, aval, vinfo, ncname)
1679 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1680
1681# ifdef ADJUST_BOUNDARY
1682
1683
1684
1685 IF (any(lobc(:,isvvel,ng))) THEN
1686 ifield=idsbry(isvvel)
1687 vinfo( 1)=vname(1,ifield)
1688 WRITE (vinfo( 2),40) trim(vname(2,ifield))
1689 vinfo( 3)=vname(3,ifield)
1690 vinfo(14)=vname(4,ifield)
1691 vinfo(16)=vname(1,idtime)
1692 vinfo(21)=vname(6,ifield)
1693 aval(5)=real(iinfo(1,ifield,ng),r8)
1694 itl(ng)%pioVar(ifield)%dkind=
pio_fout
1695 itl(ng)%pioVar(ifield)%gtype=v3dobc
1696
1697 status=def_var(ng, itlm, itl(ng)%pioFile, &
1698 & itl(ng)%pioVar(ifield)%vd,
pio_fout, &
1699 & 5, t3dobc, aval, vinfo, ncname, &
1700 & setfillval = .false.)
1701 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1702 END IF
1703# endif
1704
1705
1706
1707 DO itrc=1,nt(ng)
1708 vinfo( 1)=vname(1,idtvar(itrc))
1709 WRITE (vinfo( 2),40) trim(vname(2,idtvar(itrc)))
1710 vinfo( 3)=vname(3,idtvar(itrc))
1711 vinfo(14)=vname(4,idtvar(itrc))
1712 vinfo(16)=vname(1,idtime)
1713# ifdef SEDIMENT
1714 DO i=1,nst
1715 IF (itrc.eq.idsed(i)) THEN
1716 WRITE (vinfo(19),50) 1000.0_r8*sd50(i,ng)
1717 END IF
1718 END DO
1719# endif
1720# if defined WRITE_WATER && defined MASKING
1721 vinfo(20)='mask_rho'
1722# endif
1723 vinfo(21)=vname(6,idtvar(itrc))
1724 vinfo(22)='coordinates'
1725 aval(5)=real(r3dvar,r8)
1726 itl(ng)%pioTrc(itrc)%dkind=
pio_fout
1727 itl(ng)%pioTrc(itrc)%gtype=r3dvar
1728
1729 status=def_var(ng, itlm, itl(ng)%pioFile, &
1730 & itl(ng)%pioTrc(itrc)%vd,
pio_fout, &
1731 & nvd4, t3dgrd, aval, vinfo, ncname)
1732 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1733 END DO
1734
1735# ifdef ADJUST_BOUNDARY
1736
1737
1738
1739 DO itrc=1,nt(ng)
1740 IF (any(lobc(:,istvar(itrc),ng))) THEN
1741 ifield=idsbry(istvar(itrc))
1742 vinfo( 1)=vname(1,ifield)
1743 WRITE (vinfo( 2),40) trim(vname(2,ifield))
1744 vinfo( 3)=vname(3,ifield)
1745 vinfo(14)=vname(4,ifield)
1746 vinfo(16)=vname(1,idtime)
1747# ifdef SEDIMENT
1748 DO i=1,nst
1749 IF (itrc.eq.idsed(i)) THEN
1750 WRITE (vinfo(19),50) 1000.0_r8*sd50(i,ng)
1751 END IF
1752 END DO
1753# endif
1754 vinfo(21)=vname(6,ifield)
1755 aval(5)=real(iinfo(1,ifield,ng),r8)
1756 itl(ng)%pioVar(ifield)%dkind=
pio_fout
1757 itl(ng)%pioVar(ifield)%gtype=r3dobc
1758
1759 status=def_var(ng, itlm, itl(ng)%pioFile, &
1760 & itl(ng)%pioVar(ifield)%vd,
pio_fout, &
1761 & 5, t3dobc, aval, vinfo, ncname, &
1762 setfillval = .false.)
1763 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1764 END IF
1765 END DO
1766# endif
1767# ifdef ADJUST_STFLUX
1768
1769
1770
1771 DO itrc=1,nt(ng)
1772 IF (lstflux(itrc,ng)) THEN
1773 vinfo( 1)=vname(1,idtsur(itrc))
1774 WRITE (vinfo( 2),40) trim(vname(2,idtsur(itrc)))
1775 vinfo( 3)=vname(3,idtsur(itrc))
1776 IF (itrc.eq.itemp) THEN
1777 vinfo(11)='upward flux, cooling'
1778 vinfo(12)='downward flux, heating'
1779 ELSE IF (itrc.eq.isalt) THEN
1780 vinfo(11)='upward flux, freshening (net precipitation)'
1781 vinfo(12)='downward flux, salting (net evaporation)'
1782 END IF
1783 vinfo(14)=vname(4,idtsur(itrc))
1784 vinfo(16)=vname(1,idtime)
1785# if defined WRITE_WATER && defined MASKING
1786 vinfo(20)='mask_rho'
1787# endif
1788 vinfo(21)=vname(6,idtsur(itrc))
1789 vinfo(22)='coordinates'
1790 aval(5)=real(r2dvar,r8)
1791 itl(ng)%pioVar(idtsur(itrc))%dkind=
pio_fout
1792 itl(ng)%pioVar(idtsur(itrc))%gtype=r2dvar
1793
1794 status=def_var(ng, itlm, itl(ng)%pioFile, &
1795 & itl(ng)%pioVar(idtsur(itrc))%vd,
pio_fout, &
1796 & nvd4, t3dfrc, aval, vinfo, ncname)
1797 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1798 END IF
1799 END DO
1800# endif
1801# endif
1802
1803
1804
1805
1806
1808 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1809
1810
1811
1812
1813
1814 CALL wrt_info (ng, itlm, itl(ng)%pioFile, ncname)
1815 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1816 END IF define
1817
1818
1819
1820
1821
1822
1823 query : IF (.not.ldefitl(ng)) THEN
1824 ncname=itl(ng)%name
1825
1826
1827
1829 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
1830 WRITE (stdout,60) trim(ncname)
1831 RETURN
1832 END IF
1833
1834
1835
1837 & piofile = itl(ng)%pioFile)
1838 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1839
1840
1841
1843 & piofile = itl(ng)%pioFile)
1844 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1845
1846
1847
1848 DO i=1,nv
1849 got_var(i)=.false.
1850 END DO
1851
1852
1853
1854
1855 DO i=1,n_var
1856 IF (trim(var_name(i)).eq.trim(vname(1,idtime))) THEN
1857 got_var(idtime)=.true.
1858 itl(ng)%pioVar(idtime)%vd=
var_desc(i)
1859 itl(ng)%pioVar(idtime)%dkind=
pio_tout
1860 itl(ng)%pioVar(idtime)%gtype=0
1861 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsur))) THEN
1862 got_var(idfsur)=.true.
1863 itl(ng)%pioVar(idfsur)%vd=
var_desc(i)
1864 itl(ng)%pioVar(idfsur)%dkind=
pio_fout
1865 itl(ng)%pioVar(idfsur)%gtype=r2dvar
1866 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubar))) THEN
1867 got_var(idubar)=.true.
1868 itl(ng)%pioVar(idubar)%vd=
var_desc(i)
1869 itl(ng)%pioVar(idubar)%dkind=
pio_fout
1870 itl(ng)%pioVar(idubar)%gtype=u2dvar
1871 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbar))) THEN
1872 got_var(idvbar)=.true.
1873 itl(ng)%pioVar(idvbar)%vd=
var_desc(i)
1874 itl(ng)%pioVar(idvbar)%dkind=
pio_fout
1875 itl(ng)%pioVar(idvbar)%gtype=v2dvar
1876# ifdef ADJUST_BOUNDARY
1877 ELSE IF (trim(var_name(i)).eq. &
1878 & trim(vname(1,idsbry(isfsur)))) THEN
1879 got_var(idsbry(isfsur))=.true.
1880 itl(ng)%pioVar(idsbry(isfsur))%vd=
var_desc(i)
1881 itl(ng)%pioVar(idsbry(isfsur))%dkind=
pio_fout
1882 itl(ng)%pioVar(idsbry(isfsur))%gtype=r2dobc
1883 ELSE IF (trim(var_name(i)).eq. &
1884 & trim(vname(1,idsbry(isubar)))) THEN
1885 got_var(idsbry(isubar))=.true.
1886 itl(ng)%pioVar(idsbry(isubar))%vd=
var_desc(i)
1887 itl(ng)%pioVar(idsbry(isubar))%dkind=
pio_fout
1888 itl(ng)%pioVar(idsbry(isubar))%gtype=u2dobc
1889 ELSE IF (trim(var_name(i)).eq. &
1890 & trim(vname(1,idsbry(isvbar)))) THEN
1891 got_var(idsbry(isvbar))=.true.
1892 itl(ng)%pioVar(idsbry(isvbar))%vd=
var_desc(i)
1893 itl(ng)%pioVar(idsbry(isvbar))%dkind=
pio_fout
1894 itl(ng)%pioVar(idsbry(isvbar))%gtype=v2dobc
1895# endif
1896# ifdef ADJUST_WSTRESS
1897 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idusms))) THEN
1898 got_var(idusms)=.true.
1899 itl(ng)%pioVar(idusms)%vd=
var_desc(i)
1900 itl(ng)%pioVar(idusms)%dkind=
pio_fout
1901 itl(ng)%pioVar(idusms)%gtype=u2dvar
1902 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvsms))) THEN
1903 got_var(idvsms)=.true.
1904 itl(ng)%pioVar(idvsms)%vd=
var_desc(i)
1905 itl(ng)%pioVar(idvsms)%dkind=
pio_fout
1906 itl(ng)%pioVar(idvsms)%gtype=v2dvar
1907# endif
1908# ifdef SOLVE3D
1909 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvel))) THEN
1910 got_var(iduvel)=.true.
1911 itl(ng)%pioVar(iduvel)%vd=
var_desc(i)
1912 itl(ng)%pioVar(iduvel)%dkind=
pio_fout
1913 itl(ng)%pioVar(iduvel)%gtype=u3dvar
1914 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvel))) THEN
1915 got_var(idvvel)=.true.
1916 itl(ng)%pioVar(idvvel)%vd=
var_desc(i)
1917 itl(ng)%pioVar(idvvel)%dkind=
pio_fout
1918 itl(ng)%pioVar(idvvel)%gtype=v3dvar
1919# ifdef ADJUST_BOUNDARY
1920 ELSE IF (trim(var_name(i)).eq. &
1921 & trim(vname(1,idsbry(isuvel)))) THEN
1922 got_var(idsbry(isuvel))=.true.
1923 itl(ng)%pioVar(idsbry(isuvel))%vd=
var_desc(i)
1924 itl(ng)%pioVar(idsbry(isuvel))%dkind=
pio_fout
1925 itl(ng)%pioVar(idsbry(isuvel))%gtype=u3dobc
1926 ELSE IF (trim(var_name(i)).eq. &
1927 & trim(vname(1,idsbry(isvvel)))) THEN
1928 got_var(idsbry(isvvel))=.true.
1929 itl(ng)%pioVar(idsbry(isvvel))%vd=
var_desc(i)
1930 itl(ng)%pioVar(idsbry(isvvel))%dkind=
pio_fout
1931 itl(ng)%pioVar(idsbry(isvvel))%gtype=v3dobc
1932# endif
1933# endif
1934 END IF
1935# ifdef SOLVE3D
1936 DO itrc=1,nt(ng)
1937 IF (trim(var_name(i)).eq.trim(vname(1,idtvar(itrc)))) THEN
1938 got_var(idtvar(itrc))=.true.
1939 itl(ng)%pioTrc(itrc)%vd=
var_desc(i)
1940 itl(ng)%pioTrc(itrc)%dkind=
pio_fout
1941 itl(ng)%pioTrc(itrc)%gtype=r3dvar
1942# ifdef ADJUST_BOUNDARY
1943 ELSE IF (trim(var_name(i)).eq. &
1944 & trim(vname(1,idsbry(istvar(itrc))))) THEN
1945 got_var(idsbry(istvar(itrc)))=.true.
1946 itl(ng)%pioVar(idsbry(istvar(itrc)))%vd=
var_desc(i)
1947 itl(ng)%pioVar(idsbry(istvar(itrc)))%dkind=
pio_fout
1948 itl(ng)%pioVar(idsbry(istvar(itrc)))%gtype=r3dobc
1949# endif
1950# ifdef ADJUST_STFLUX
1951 ELSE IF (trim(var_name(i)).eq. &
1952 & trim(vname(1,idtsur(itrc)))) THEN
1953 got_var(idtsur(itrc))=.true.
1954 itl(ng)%pioVar(idtsur(itrc))%vd=
var_desc(i)
1955 itl(ng)%pioVar(idtsur(itrc))%dkind=
pio_fout
1956 itl(ng)%pioVar(idtsur(itrc))%gtype=r2dvar
1957# endif
1958 END IF
1959 END DO
1960# endif
1961 END DO
1962
1963
1964
1965
1966 IF (.not.got_var(idtime)) THEN
1967 IF (master) WRITE (stdout,70) trim(vname(1,idtime)), &
1968 & trim(ncname)
1969 exit_flag=3
1970 RETURN
1971 END IF
1972 IF (.not.got_var(idfsur)) THEN
1973 IF (master) WRITE (stdout,70) trim(vname(1,idfsur)), &
1974 & trim(ncname)
1975 exit_flag=3
1976 RETURN
1977 END IF
1978 IF (.not.got_var(idubar)) THEN
1979 IF (master) WRITE (stdout,70) trim(vname(1,idubar)), &
1980 & trim(ncname)
1981 exit_flag=3
1982 RETURN
1983 END IF
1984 IF (.not.got_var(idvbar)) THEN
1985 IF (master) WRITE (stdout,70) trim(vname(1,idvbar)), &
1986 & trim(ncname)
1987 exit_flag=3
1988 RETURN
1989 END IF
1990# ifdef ADJUST_BOUNDARY
1991 IF (.not.got_var(idsbry(isfsur)).and. &
1992 & any(lobc(:,isfsur,ng))) THEN
1993 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isfsur))), &
1994 & trim(ncname)
1995 exit_flag=3
1996 RETURN
1997 END IF
1998 IF (.not.got_var(idsbry(isubar)).and. &
1999 & any(lobc(:,isubar,ng))) THEN
2000 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isubar))), &
2001 & trim(ncname)
2002 exit_flag=3
2003 RETURN
2004 END IF
2005 IF (.not.got_var(idsbry(isvbar)).and. &
2006 & any(lobc(:,isvbar,ng))) THEN
2007 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isvbar))), &
2008 & trim(ncname)
2009 exit_flag=3
2010 RETURN
2011 END IF
2012# endif
2013# ifdef ADJUST_WSTRESS
2014 IF (.not.got_var(idusms)) THEN
2015 IF (master) WRITE (stdout,70) trim(vname(1,idusms)), &
2016 & trim(ncname)
2017 exit_flag=3
2018 RETURN
2019 END IF
2020 IF (.not.got_var(idvsms)) THEN
2021 IF (master) WRITE (stdout,70) trim(vname(1,idvsms)), &
2022 & trim(ncname)
2023 exit_flag=3
2024 RETURN
2025 END IF
2026# endif
2027# ifdef SOLVE3D
2028 IF (.not.got_var(iduvel)) THEN
2029 IF (master) WRITE (stdout,70) trim(vname(1,iduvel)), &
2030 & trim(ncname)
2031 exit_flag=3
2032 RETURN
2033 END IF
2034 IF (.not.got_var(idvvel)) THEN
2035 IF (master) WRITE (stdout,70) trim(vname(1,idvvel)), &
2036 & trim(ncname)
2037 exit_flag=3
2038 RETURN
2039 END IF
2040# ifdef ADJUST_BOUNDARY
2041 IF (.not.got_var(idsbry(isuvel)).and. &
2042 & any(lobc(:,isuvel,ng))) THEN
2043 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isuvel))), &
2044 & trim(ncname)
2045 exit_flag=3
2046 RETURN
2047 END IF
2048 IF (.not.got_var(idsbry(isvvel)).and. &
2049 & any(lobc(:,isvvel,ng))) THEN
2050 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isvvel))), &
2051 & trim(ncname)
2052 exit_flag=3
2053 RETURN
2054 END IF
2055# endif
2056# endif
2057# ifdef SOLVE3D
2058 DO itrc=1,nt(ng)
2059 IF (.not.got_var(idtvar(itrc))) THEN
2060 IF (master) WRITE (stdout,70) trim(vname(1,idtvar(itrc))), &
2061 & trim(ncname)
2062 exit_flag=3
2063 RETURN
2064 END IF
2065# ifdef ADJUST_BOUNDARY
2066 IF (.not.got_var(idsbry(istvar(itrc))).and. &
2067 & any(lobc(:,istvar(itrc),ng))) THEN
2068 IF (master) WRITE (stdout,70) &
2069 & trim(vname(1,idsbry(istvar(itrc)))), &
2070 & trim(ncname)
2071 exit_flag=3
2072 RETURN
2073 END IF
2074# endif
2075# ifdef ADJUST_STFLUX
2076 IF (.not.got_var(idtsur(itrc)).and.lstflux(itrc,ng)) THEN
2077 IF (master) WRITE (stdout,70) trim(vname(1,idtsur(itrc))), &
2078 & trim(ncname)
2079 exit_flag=3
2080 RETURN
2081 END IF
2082# endif
2083 END DO
2084# endif
2085
2086
2087
2088 itl(ng)%Rindex=rec_size
2089 fcount=itl(ng)%Fcount
2090 itl(ng)%Nrec(fcount)=rec_size
2091 END IF query
2092
2093 10 FORMAT (2x,'TL_DEF_INI_PIO - creating initial file,',t56, &
2094 & 'Grid ',i2.2,': ',a)
2095 20 FORMAT (2x,'TL_DEF_INI_PIO - inquiring initial file,',t56, &
2096 & 'Grid ',i2.2,': ',a)
2097 30 FORMAT (/,' TL_DEF_INI_PIO - unable to create initial NetCDF', &
2098 & ' file:',1x,a)
2099 40 FORMAT ('tangent linear',1x,a)
2100 50 FORMAT (1pe11.4,1x,'millimeter')
2101 60 FORMAT (/,' TL_DEF_INI_PIO - unable to open initial NetCDF', &
2102 & ' file: ',a)
2103 70 FORMAT (/,' TL_DEF_INI_PIO - unable to find variable: ',a,2x, &
2104 & ' in file: ',a)
2105
2106 RETURN
integer, parameter pio_fout
type(var_desc_t), dimension(:), pointer var_desc
subroutine, public pio_netcdf_create(ng, model, ncname, piofile)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
integer, parameter pio_tout
subroutine, public pio_netcdf_enddef(ng, model, ncname, piofile)