868
869
871
872
873
874 integer, intent(in) :: ng
875
876
877
878 logical :: Ldefine = .false.
879# ifdef ADJUST_BOUNDARY
880 logical :: got_IorJ, got_boundary, got_obc_adjust
881# endif
882# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
883 logical :: got_frc_adjust
884# endif
885 logical :: got_var(NV)
886
887 integer, parameter :: Natt = 25
888
889 integer :: i, j, ifield, itrc, status
890 integer :: Fcount
891# ifdef ADJUST_BOUNDARY
892 integer :: IorJdim, brecdim
893# endif
894# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
895 integer :: frecdim
896# endif
897 integer :: DimIDs(nDimID)
898# ifdef ADJUST_BOUNDARY
899 integer :: t2dobc(4)
900# ifdef SOLVE3D
901 integer :: t3dobc(5)
902# endif
903# endif
904# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
905 integer :: t4dfrc(4), u4dfrc(4), v4dfrc(4)
906# endif
907
908 real(r8) :: Aval(6)
909
910 character (len=256) :: ncname
911 character (len=MaxLen) :: Vinfo(Natt)
912
913 character (len=*), parameter :: MyFile = &
914 & __FILE__//", rp_def_ini_pio"
915
916 sourcefile=myfile
917
918# if defined ADJUST_BOUNDARY || \
919 defined adjust_stflux || defined adjust_wstress
920
921
922
923
924
925
926 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
927 ncname=irp(ng)%name
928
929
930
932 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
933 IF (master) WRITE (stdout,10) trim(ncname)
934 RETURN
935 END IF
936
937
938
940 & piofile = irp(ng)%pioFile)
941 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
942
943
944
946 & piofile = irp(ng)%pioFile)
947 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
948
949
950
951 DO i=1,nv
952 got_var(i)=.false.
953 END DO
954
955 DO i=1,n_var
956# ifdef ADJUST_BOUNDARY
957 IF (trim(var_name(i)).eq. &
958 & trim(vname(1,idsbry(isfsur)))) THEN
959 got_var(idsbry(isfsur))=.true.
960 irp(ng)%Vid(idsbry(isfsur))=var_id(i)
961 ELSE IF (trim(var_name(i)).eq. &
962 & trim(vname(1,idsbry(isubar)))) THEN
963 got_var(idsbry(isubar))=.true.
964 irp(ng)%Vid(idsbry(isubar))=var_id(i)
965 ELSE IF (trim(var_name(i)).eq. &
966 & trim(vname(1,idsbry(isvbar)))) THEN
967 got_var(idsbry(isvbar))=.true.
968 irp(ng)%Vid(idsbry(isvbar))=var_id(i)
969# ifdef SOLVE3D
970 ELSE IF (trim(var_name(i)).eq. &
971 & trim(vname(1,idsbry(isuvel)))) THEN
972 got_var(idsbry(isuvel))=.true.
973 irp(ng)%Vid(idsbry(isuvel))=var_id(i)
974 ELSE IF (trim(var_name(i)).eq. &
975 & trim(vname(1,idsbry(isvvel)))) THEN
976 got_var(idsbry(isvvel))=.true.
977 irp(ng)%Vid(idsbry(isvvel))=var_id(i)
978# endif
979 END IF
980# ifdef SOLVE3D
981 DO itrc=1,nt(ng)
982 IF (trim(var_name(i)).eq. &
983 & trim(vname(1,idsbry(istvar(itrc))))) THEN
984 got_var(idsbry(istvar(itrc)))=.true.
985 irp(ng)%Vid(idsbry(istvar(itrc)))=var_id(i)
986 END IF
987 END DO
988# endif
989# endif
990# ifdef ADJUST_WSTRESS
991 IF (trim(var_name(i)).eq.trim(vname(1,idusms))) THEN
992 got_var(idusms)=.true.
993 irp(ng)%Vid(idusms)=var_id(i)
994 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvsms))) THEN
995 got_var(idvsms)=.true.
996 irp(ng)%Vid(idvsms)=var_id(i)
997 END IF
998# endif
999# if defined ADJUST_STFLUX && defined SOLVE3D
1000 DO itrc=1,nt(ng)
1001 IF (lstflux(itrc,ng)) THEN
1002 IF (trim(var_name(i)).eq.trim(vname(1,idtsur(itrc)))) THEN
1003 got_var(idtsur(itrc))=.true.
1004 irp(ng)%Vid(idtsur(itrc))=var_id(i)
1005 END IF
1006 END IF
1007 END DO
1008# endif
1009 END DO
1010
1011# ifdef ADJUST_BOUNDARY
1012 IF (.not.got_var(idsbry(isfsur))) ldefine=.true.
1013 IF (.not.got_var(idsbry(isubar))) ldefine=.true.
1014 IF (.not.got_var(idsbry(isvbar))) ldefine=.true.
1015# ifdef SOLVE3D
1016 IF (.not.got_var(idsbry(isuvel))) ldefine=.true.
1017 IF (.not.got_var(idsbry(isvvel))) ldefine=.true.
1018 DO itrc=1,nt(ng)
1019 IF (.not.got_var(idsbry(istvar(itrc)))) ldefine=.true.
1020 END DO
1021# endif
1022# endif
1023# ifdef ADJUST_WSTRESS
1024 IF (.not.got_var(idusms)) ldefine=.true.
1025 IF (.not.got_var(idvsms)) ldefine=.true.
1026# endif
1027# if defined ADJUST_STFLUX && defined SOLVE3D
1028 DO itrc=1,nt(ng)
1029 IF (lstflux(itrc,ng)) THEN
1030 IF (.not.got_var(idtsur(itrc))) ldefine=.true.
1031 END IF
1032 END DO
1033# endif
1034
1035
1036
1037 IF (ldefine) THEN
1039 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
1040 IF (master) WRITE (stdout,20) trim(ncname)
1041 RETURN
1042 END IF
1043 END IF
1044
1045
1046
1047
1048
1049 define: IF (ldefine) THEN
1050
1051# ifdef ADJUST_BOUNDARY
1052 got_iorj=.false.
1053 got_boundary=.false.
1054 got_obc_adjust=.false.
1055# endif
1056# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1057 got_frc_adjust=.false.
1058# endif
1059 DO i=1,n_dim
1060 SELECT CASE (trim(adjustl(dim_name(i))))
1061 CASE ('xi_rho')
1062 dimids( 1)=dim_id(i)
1063 CASE ('xi_u')
1064 dimids( 2)=dim_id(i)
1065 CASE ('xi_v')
1066 dimids( 3)=dim_id(i)
1067 CASE ('eta_rho')
1068 dimids( 5)=dim_id(i)
1069 CASE ('eta_u')
1070 dimids( 6)=dim_id(i)
1071 CASE ('eta_v')
1072 dimids( 7)=dim_id(i)
1073# ifdef SOLVE3D
1074 CASE ('s_rho')
1075 dimids( 9)=dim_id(i)
1076 CASE ('s_w')
1077 dimids(10)=dim_id(i)
1078# endif
1079# ifdef ADJUST_BOUNDARY
1080 CASE ('boundary')
1081 dimids(14)=dim_id(i)
1082 got_boundary=.true.
1083 CASE ('IorJ')
1084 iorjdim=dim_id(i)
1085 got_iorj=.true.
1086# endif
1087# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1088 CASE ('frc_adjust')
1089 frecdim=dim_id(i)
1090 got_frc_adjust=.true.
1091# endif
1092# ifdef ADJUST_BOUNDARY
1093 CASE ('obc_adjust')
1094 brecdim=dim_id(i)
1095 got_obc_adjust=.true.
1096# endif
1097 END SELECT
1098 END DO
1099
1100 dimids(12)=rec_id
1101# ifdef ADJUST_BOUNDARY
1102 IF (.not.got_boundary) THEN
1103 status=def_dim(ng, irpm, irp(ng)%pioFile, ncname, &
1104 & 'boundary', 4, dimids(14))
1105 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1106 END IF
1107 IF (.not.got_iorj) THEN
1108 status=def_dim(ng, irpm, irp(ng)%pioFile, ncname, &
1109 & 'IorJ', iobounds(ng)%IorJ, iorjdim)
1110 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1111 END IF
1112# endif
1113# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1114 IF (.not.got_frc_adjust) THEN
1115 status=def_dim(ng, irpm, irp(ng)%pioFile, ncname, &
1116 & 'frc_adjust', nfrec(ng), frecdim)
1117 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1118 END IF
1119# endif
1120# ifdef ADJUST_BOUNDARY
1121 IF (.not.got_obc_adjust) THEN
1122 status=def_dim(ng, irpm, irp(ng)%pioFile, ncname, &
1123 & 'obc_adjust', nbrec(ng), brecdim)
1124 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1125 END IF
1126# endif
1127
1128
1129
1130# ifdef ADJUST_BOUNDARY
1131 t2dobc(1)=iorjdim
1132 t2dobc(2)=dimids(14)
1133 t2dobc(3)=brecdim
1134 t2dobc(4)=dimids(12)
1135# ifdef SOLVE3D
1136 t3dobc(1)=iorjdim
1137 t3dobc(2)=dimids( 9)
1138 t3dobc(3)=dimids(14)
1139 t3dobc(4)=brecdim
1140 t3dobc(5)=dimids(12)
1141# endif
1142# endif
1143# ifdef ADJUST_STFLUX
1144 t4dfrc(1)=dimids( 1)
1145 t4dfrc(2)=dimids( 5)
1146 t4dfrc(3)=frecdim
1147 t4dfrc(4)=dimids(12)
1148# endif
1149# ifdef ADJUST_WSTRESS
1150
1151
1152
1153 u4dfrc(1)=dimids( 2)
1154 u4dfrc(2)=dimids( 6)
1155 u4dfrc(3)=frecdim
1156 u4dfrc(4)=dimids(12)
1157# endif
1158# ifdef ADJUST_WSTRESS
1159
1160
1161
1162 v4dfrc(1)=dimids( 3)
1163 v4dfrc(2)=dimids( 7)
1164 v4dfrc(3)=frecdim
1165 v4dfrc(4)=dimids(12)
1166# endif
1167
1168
1169
1170 DO i=1,natt
1171 DO j=1,len(vinfo(1))
1172 vinfo(i)(j:j)=' '
1173 END DO
1174 END DO
1175 DO i=1,6
1176 aval(i)=0.0_r8
1177 END DO
1178
1179
1180
1181
1182
1183
1184
1185# ifdef ADJUST_BOUNDARY
1186
1187
1188
1189 IF (any(lobc(:,isfsur,ng))) THEN
1190 ifield=idsbry(isfsur)
1191 vinfo( 1)=vname(1,ifield)
1192 vinfo( 2)=vname(2,ifield)
1193 vinfo( 3)=vname(3,ifield)
1194 vinfo(14)=vname(4,ifield)
1195 vinfo(16)=vname(1,idtime)
1196 vinfo(21)=vname(6,ifield)
1197 aval(5)=real(iinfo(1,ifield,ng),r8)
1198 irp(ng)%pioVar(ifield)%dkind=
pio_fout
1199 irp(ng)%pioVar(ifield)%gtype=r2dobc
1200
1201 status=def_var(ng, irpm, irp(ng)%pioFile, &
1202 & irp(ng)%pioVar(ifield)%vd,
pio_fout, &
1203 & 4, t2dobc, aval, vinfo, ncname, &
1204 & setfillval = .false.)
1205 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1206 END IF
1207
1208
1209
1210 IF (any(lobc(:,isubar,ng))) THEN
1211 ifield=idsbry(isubar)
1212 vinfo( 1)=vname(1,ifield)
1213 vinfo( 2)=vname(2,ifield)
1214 vinfo( 3)=vname(3,ifield)
1215 vinfo(14)=vname(4,ifield)
1216 vinfo(16)=vname(1,idtime)
1217 vinfo(21)=vname(6,ifield)
1218 aval(5)=real(iinfo(1,ifield,ng),r8)
1219 irp(ng)%pioVar(ifield)%dkind=
pio_fout
1220 irp(ng)%pioVar(ifield)%gtype=u2dobc
1221
1222 status=def_var(ng, irpm, irp(ng)%pioFile, &
1223 & irp(ng)%pioVar(ifield)%vd,
pio_fout, &
1224 & 4, t2dobc, aval, vinfo, ncname, &
1225 & setfillval = .false.)
1226 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1227 END IF
1228
1229
1230
1231 IF (any(lobc(:,isvbar,ng))) THEN
1232 ifield=idsbry(isvbar)
1233 vinfo( 1)=vname(1,ifield)
1234 vinfo( 2)=vname(2,ifield)
1235 vinfo( 3)=vname(3,ifield)
1236 vinfo(14)=vname(4,ifield)
1237 vinfo(16)=vname(1,idtime)
1238 vinfo(21)=vname(6,ifield)
1239 aval(5)=real(iinfo(1,ifield,ng),r8)
1240 irp(ng)%pioVar(ifield)%dkind=
pio_fout
1241 irp(ng)%pioVar(ifield)%gtype=v2dobc
1242
1243 status=def_var(ng, irpm, irp(ng)%pioFile, &
1244 & irp(ng)%pioVar(ifield)%vd,
pio_fout, &
1245 & 4, t2dobc, aval, vinfo, ncname, &
1246 & setfillval = .false.)
1247 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1248 END IF
1249
1250# ifdef SOLVE3D
1251
1252
1253
1254 IF (any(lobc(:,isuvel,ng))) THEN
1255 ifield=idsbry(isuvel)
1256 vinfo( 1)=vname(1,ifield)
1257 vinfo( 2)=vname(2,ifield)
1258 vinfo( 3)=vname(3,ifield)
1259 vinfo(14)=vname(4,ifield)
1260 vinfo(16)=vname(1,idtime)
1261 vinfo(21)=vname(6,ifield)
1262 aval(5)=real(iinfo(1,ifield,ng),r8)
1263 irp(ng)%pioVar(ifield)%dkind=
pio_fout
1264 irp(ng)%pioVar(ifield)%gtype=u3dobc
1265
1266 status=def_var(ng, irpm, irp(ng)%pioFile, &
1267 & irp(ng)%pioVar(ifield)%vd,
pio_fout, &
1268 & 5, t3dobc, aval, vinfo, ncname, &
1269 & setfillval = .false.)
1270 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1271 END IF
1272
1273
1274
1275 IF (any(lobc(:,isvvel,ng))) THEN
1276 ifield=idsbry(isvvel)
1277 vinfo( 1)=vname(1,ifield)
1278 vinfo( 2)=vname(2,ifield)
1279 vinfo( 3)=vname(3,ifield)
1280 vinfo(14)=vname(4,ifield)
1281 vinfo(16)=vname(1,idtime)
1282 vinfo(21)=vname(6,ifield)
1283 aval(5)=real(iinfo(1,ifield,ng),r8)
1284 irp(ng)%pioVar(ifield)%dkind=
pio_fout
1285 irp(ng)%pioVar(ifield)%gtype=v3dobc
1286
1287 status=def_var(ng, irpm, irp(ng)%pioFile, &
1288 & irp(ng)%pioVar(ifield)%vd,
pio_fout, &
1289 & 5, t3dobc, aval, vinfo, ncname, &
1290 & setfillval = .false.)
1291 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1292 END IF
1293
1294
1295
1296 DO itrc=1,nt(ng)
1297 IF (any(lobc(:,istvar(itrc),ng))) THEN
1298 ifield=idsbry(istvar(itrc))
1299 vinfo( 1)=vname(1,ifield)
1300 vinfo( 2)=vname(2,ifield)
1301 vinfo( 3)=vname(3,ifield)
1302 vinfo(14)=vname(4,ifield)
1303 vinfo(16)=vname(1,idtime)
1304 vinfo(21)=vname(6,ifield)
1305 aval(5)=real(iinfo(1,ifield,ng),r8)
1306 irp(ng)%pioVar(ifield)%dkind=
pio_fout
1307 irp(ng)%pioVar(ifield)%gtype=r3dobc
1308
1309 status=def_var(ng, irpm, irp(ng)%pioFile, &
1310 & irp(ng)%pioVar(ifield)%vd,
pio_fout, &
1311 & 5, t3dobc, aval, vinfo, ncname, &
1312 & setfillval = .false.)
1313 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1314 END IF
1315 END DO
1316# endif
1317# endif
1318# ifdef ADJUST_WSTRESS
1319
1320
1321
1322 IF (.not.got_var(idusms)) THEN
1323 vinfo( 1)=vname(1,idusms)
1324 vinfo( 2)=vname(2,idusms)
1325 vinfo( 3)=vname(3,idusms)
1326# if defined WRITE_WATER && defined MASKING
1327 vinfo(20)='mask_u'
1328# endif
1329 vinfo(21)=vname(6,idusms)
1330 vinfo(22)='coordinates'
1331 aval(5)=real(u2dvar,r8)
1332 irp(ng)%pioVar(idusms)%dkind=
pio_fout
1333 irp(ng)%pioVar(idusms)%gtype=u2dvar
1334
1335 status=def_var(ng, irpm, irp(ng)%pioFile, &
1336 & irp(ng)%pioVar(idusms)%vd,
pio_fout, &
1337 & 4, u4dfrc, aval, vinfo, ncname)
1338 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1339 END IF
1340
1341
1342
1343 IF (.not.got_var(idvsms)) THEN
1344 vinfo( 1)=vname(1,idvsms)
1345 vinfo( 2)=vname(2,idvsms)
1346 vinfo( 3)=vname(3,idvsms)
1347# if defined WRITE_WATER && defined MASKING
1348 vinfo(20)='mask_v'
1349# endif
1350 vinfo(21)=vname(6,idvsms)
1351 vinfo(22)='coordinates'
1352 aval(5)=real(v2dvar,r8)
1353 irp(ng)%pioVar(idvsms)%dkind=
pio_fout
1354 irp(ng)%pioVar(idvsms)%gtype=v2dvar
1355
1356 status=def_var(ng, irpm, irp(ng)%pioFile, &
1357 & irp(ng)%pioVar(idvsms)%vd,
pio_fout, &
1358 & 4, v4dfrc, aval, vinfo, ncname)
1359 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1360 END IF
1361# endif
1362# if defined ADJUST_STFLUX && defined SOLVE3D
1363
1364
1365
1366 DO itrc=1,nt(ng)
1367 IF (.not.got_var(idtsur(itrc)).and.lstflux(itrc,ng)) THEN
1368 vinfo( 1)=vname(1,idtsur(itrc))
1369 vinfo( 2)=trim(vname(2,idtsur(itrc)))
1370 vinfo( 3)=vname(3,idtsur(itrc))
1371 IF (itrc.eq.itemp) THEN
1372 vinfo(11)='upward flux, cooling'
1373 vinfo(12)='downward flux, heating'
1374 ELSE IF (itrc.eq.isalt) THEN
1375 vinfo(11)='upward flux, freshening (net precipitation)'
1376 vinfo(12)='downward flux, salting (net evaporation)'
1377 END IF
1378# if defined WRITE_WATER && defined MASKING
1379 vinfo(20)='mask_rho'
1380# endif
1381 vinfo(21)=vname(6,idtsur(itrc))
1382 vinfo(22)='coordinates'
1383 aval(5)=real(r2dvar,r8)
1384 irp(ng)%pioVar(idtsur(itrc))%dkind=
pio_fout
1385 irp(ng)%pioVar(idtsur(itrc))%gtype=r2dvar
1386
1387 status=def_var(ng, irpm, irp(ng)%pioFile, &
1388 & irp(ng)%pioVar(idtsur(itrc))%vd,
pio_fout, &
1389 & 4, t4dfrc, aval, vinfo, ncname)
1390 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1391 END IF
1392 END DO
1393# endif
1394
1395
1396
1397
1398
1400 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1401
1402 END IF define
1403# endif
1404
1405
1406
1407
1408
1409
1410 IF (.not.ldefirp(ng)) THEN
1411 ncname=irp(ng)%name
1412
1413# if !(defined ADJUST_STFLUX || defined ADJUST_WSTRESS)
1414
1415
1416
1418 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
1419 WRITE (stdout,10) trim(ncname)
1420 RETURN
1421 END IF
1422
1423
1424
1426 & piofile = irp(ng)%pioFile)
1427 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1428
1429
1430
1432 & piofile = irp(ng)%pioFile)
1433 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1434
1435
1436
1437 DO i=1,nv
1438 got_var(i)=.false.
1439 END DO
1440# endif
1441
1442
1443
1444
1445 DO i=1,n_var
1446 IF (trim(var_name(i)).eq.trim(vname(1,idtime))) THEN
1447 got_var(idtime)=.true.
1448 irp(ng)%pioVar(idtime)%vd=
var_desc(i)
1449 irp(ng)%pioVar(idtime)%dkind=
pio_tout
1450 irp(ng)%pioVar(idtime)%gtype=0
1451 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsur))) THEN
1452 got_var(idfsur)=.true.
1453 irp(ng)%pioVar(idfsur)%vd=
var_desc(i)
1454 irp(ng)%pioVar(idfsur)%dkind=
pio_fout
1455 irp(ng)%pioVar(idfsur)%gtype=r2dvar
1456 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubar))) THEN
1457 got_var(idubar)=.true.
1458 irp(ng)%pioVar(idubar)%vd=
var_desc(i)
1459 irp(ng)%pioVar(idubar)%dkind=
pio_fout
1460 irp(ng)%pioVar(idubar)%gtype=u2dvar
1461 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbar))) THEN
1462 got_var(idvbar)=.true.
1463 irp(ng)%pioVar(idvbar)%vd=
var_desc(i)
1464 irp(ng)%pioVar(idvbar)%dkind=
pio_fout
1465 irp(ng)%pioVar(idvbar)%gtype=v2dvar
1466# ifdef ADJUST_BOUNDARY
1467 ELSE IF (trim(var_name(i)).eq. &
1468 & trim(vname(1,idsbry(isfsur)))) THEN
1469 got_var(idsbry(isfsur))=.true.
1470 irp(ng)%pioVar(idsbry(isfsur))%vd=
var_desc(i)
1471 irp(ng)%pioVar(idsbry(isfsur))%dkind=
pio_fout
1472 irp(ng)%pioVar(idsbry(isfsur))%gtype=r2dobc
1473 ELSE IF (trim(var_name(i)).eq. &
1474 & trim(vname(1,idsbry(isubar)))) THEN
1475 got_var(idsbry(isubar))=.true.
1476 irp(ng)%pioVar(idsbry(isubar))%vd=
var_desc(i)
1477 irp(ng)%pioVar(idsbry(isubar))%dkind=
pio_fout
1478 irp(ng)%pioVar(idsbry(isubar))%gtype=u2dobc
1479 ELSE IF (trim(var_name(i)).eq. &
1480 & trim(vname(1,idsbry(isvbar)))) THEN
1481 got_var(idsbry(isvbar))=.true.
1482 irp(ng)%pioVar(idsbry(isvbar))%vd=
var_desc(i)
1483 irp(ng)%pioVar(idsbry(isvbar))%dkind=
pio_fout
1484 irp(ng)%pioVar(idsbry(isvbar))%gtype=v2dobc
1485# endif
1486# ifdef ADJUST_WSTRESS
1487 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idusms))) THEN
1488 got_var(idusms)=.true.
1489 irp(ng)%pioVar(idusms)%vd=
var_desc(i)
1490 irp(ng)%pioVar(idusms)%dkind=
pio_fout
1491 irp(ng)%pioVar(idusms)%gtype=u2dvar
1492 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvsms))) THEN
1493 got_var(idvsms)=.true.
1494 irp(ng)%pioVar(idvsms)%vd=
var_desc(i)
1495 irp(ng)%pioVar(idvsms)%dkind=
pio_fout
1496 irp(ng)%pioVar(idvsms)%gtype=v2dvar
1497# endif
1498# ifdef SOLVE3D
1499 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvel))) THEN
1500 got_var(iduvel)=.true.
1501 irp(ng)%pioVar(iduvel)%vd=
var_desc(i)
1502 irp(ng)%pioVar(iduvel)%dkind=
pio_fout
1503 irp(ng)%pioVar(iduvel)%gtype=u3dvar
1504 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvel))) THEN
1505 got_var(idvvel)=.true.
1506 irp(ng)%pioVar(idvvel)%vd=
var_desc(i)
1507 irp(ng)%pioVar(idvvel)%dkind=
pio_fout
1508 irp(ng)%pioVar(idvvel)%gtype=v3dvar
1509# ifdef ADJUST_BOUNDARY
1510 ELSE IF (trim(var_name(i)).eq. &
1511 & trim(vname(1,idsbry(isuvel)))) THEN
1512 got_var(idsbry(isuvel))=.true.
1513 irp(ng)%pioVar(idsbry(isuvel))%vd=
var_desc(i)
1514 irp(ng)%pioVar(idsbry(isuvel))%dkind=
pio_fout
1515 irp(ng)%pioVar(idsbry(isuvel))%gtype=u3dobc
1516 ELSE IF (trim(var_name(i)).eq. &
1517 & trim(vname(1,idsbry(isvvel)))) THEN
1518 got_var(idsbry(isvvel))=.true.
1519 irp(ng)%pioVar(idsbry(isvvel))%vd=
var_desc(i)
1520 irp(ng)%pioVar(idsbry(isvvel))%dkind=
pio_fout
1521 irp(ng)%pioVar(idsbry(isvvel))%gtype=v3dobc
1522# endif
1523# if defined BVF_MIXING || defined LMD_MIXING || \
1524 defined gls_mixing || defined my25_mixing
1525 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvis))) THEN
1526 got_var(idvvis)=.true.
1527 irp(ng)%pioVar(idvvis)%vd=
var_desc(i)
1528 irp(ng)%pioVar(idvvis)%dkind=
pio_fout
1529 irp(ng)%pioVar(idvvis)%gtype=w3dvar
1530 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtdif))) THEN
1531 got_var(idtdif)=.true.
1532 irp(ng)%pioVar(idtdif)%vd=
var_desc(i)
1533 irp(ng)%pioVar(idtdif)%dkind=
pio_fout
1534 irp(ng)%pioVar(idtdif)%gtype=w3dvar
1535 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsdif))) THEN
1536 got_var(idsdif)=.true.
1537 irp(ng)%pioVar(idsdif)%vd=
var_desc(i)
1538 irp(ng)%pioVar(idsdif)%dkind=
pio_fout
1539 irp(ng)%pioVar(idsdif)%gtype=w3dvar
1540# endif
1541# endif
1542 END IF
1543# ifdef SOLVE3D
1544 DO itrc=1,nt(ng)
1545 IF (trim(var_name(i)).eq.trim(vname(1,idtvar(itrc)))) THEN
1546 got_var(idtvar(itrc))=.true.
1547 irp(ng)%pioTrc(itrc)%vd=
var_desc(i)
1548 irp(ng)%pioTrc(itrc)%dkind=
pio_fout
1549 irp(ng)%pioTrc(itrc)%gtype=r3dvar
1550# ifdef ADJUST_BOUNDARY
1551 ELSE IF (trim(var_name(i)).eq. &
1552 & trim(vname(1,idsbry(istvar(itrc))))) THEN
1553 got_var(idsbry(istvar(itrc)))=.true.
1554 irp(ng)%pioVar(idsbry(istvar(itrc)))%vd=
var_desc(i)
1555 irp(ng)%pioVar(idsbry(istvar(itrc)))%dkind=
pio_fout
1556 irp(ng)%pioVar(idsbry(istvar(itrc)))%gtype=r3dobc
1557# endif
1558# ifdef ADJUST_STFLUX
1559 ELSE IF (trim(var_name(i)).eq. &
1560 & trim(vname(1,idtsur(itrc)))) THEN
1561 got_var(idtsur(itrc))=.true.
1562 irp(ng)%pioVar(idtsur(itrc))%vd=
var_desc(i)
1563 irp(ng)%pioVar(idtsur(itrc))%dkind=
pio_fout
1564 irp(ng)%pioVar(idtsur(itrc))%gtype=r2dvar
1565# endif
1566 END IF
1567 END DO
1568# endif
1569 END DO
1570
1571
1572
1573
1574 IF (.not.got_var(idtime)) THEN
1575 IF (master) WRITE (stdout,30) trim(vname(1,idtime)), &
1576 & trim(ncname)
1577 exit_flag=3
1578 RETURN
1579 END IF
1580 IF (.not.got_var(idfsur)) THEN
1581 IF (master) WRITE (stdout,30) trim(vname(1,idfsur)), &
1582 & trim(ncname)
1583 exit_flag=3
1584 RETURN
1585 END IF
1586 IF (.not.got_var(idubar)) THEN
1587 IF (master) WRITE (stdout,30) trim(vname(1,idubar)), &
1588 & trim(ncname)
1589 exit_flag=3
1590 RETURN
1591 END IF
1592 IF (.not.got_var(idvbar)) THEN
1593 IF (master) WRITE (stdout,30) trim(vname(1,idvbar)), &
1594 & trim(ncname)
1595 exit_flag=3
1596 RETURN
1597 END IF
1598# ifdef ADJUST_BOUNDARY
1599 IF (.not.got_var(idsbry(isfsur)).and. &
1600 & any(lobc(:,isfsur,ng))) THEN
1601 IF (master) WRITE (stdout,30) trim(vname(1,idsbry(isfsur))), &
1602 & trim(ncname)
1603 exit_flag=3
1604 RETURN
1605 END IF
1606 IF (.not.got_var(idsbry(isubar)).and. &
1607 & any(lobc(:,isubar,ng))) THEN
1608 IF (master) WRITE (stdout,30) trim(vname(1,idsbry(isubar))), &
1609 & trim(ncname)
1610 exit_flag=3
1611 RETURN
1612 END IF
1613 IF (.not.got_var(idsbry(isvbar)).and. &
1614 & any(lobc(:,isvbar,ng))) THEN
1615 IF (master) WRITE (stdout,30) trim(vname(1,idsbry(isvbar))), &
1616 & trim(ncname)
1617 exit_flag=3
1618 RETURN
1619 END IF
1620# endif
1621# ifdef ADJUST_WSTRESS
1622 IF (.not.got_var(idusms)) THEN
1623 IF (master) WRITE (stdout,30) trim(vname(1,idusms)), &
1624 & trim(ncname)
1625 exit_flag=3
1626 RETURN
1627 END IF
1628 IF (.not.got_var(idvsms)) THEN
1629 IF (master) WRITE (stdout,30) trim(vname(1,idvsms)), &
1630 & trim(ncname)
1631 exit_flag=3
1632 RETURN
1633 END IF
1634# endif
1635# ifdef SOLVE3D
1636 IF (.not.got_var(iduvel)) THEN
1637 IF (master) WRITE (stdout,30) trim(vname(1,iduvel)), &
1638 & trim(ncname)
1639 exit_flag=3
1640 RETURN
1641 END IF
1642 IF (.not.got_var(idvvel)) THEN
1643 IF (master) WRITE (stdout,30) trim(vname(1,idvvel)), &
1644 & trim(ncname)
1645 exit_flag=3
1646 RETURN
1647 END IF
1648# ifdef ADJUST_BOUNDARY
1649 IF (.not.got_var(idsbry(isuvel)).and. &
1650 & any(lobc(:,isuvel,ng))) THEN
1651 IF (master) WRITE (stdout,30) trim(vname(1,idsbry(isuvel))), &
1652 & trim(ncname)
1653 exit_flag=3
1654 RETURN
1655 END IF
1656 IF (.not.got_var(idsbry(isvvel)).and. &
1657 & any(lobc(:,isvvel,ng))) THEN
1658 IF (master) WRITE (stdout,30) trim(vname(1,idsbry(isvvel))), &
1659 & trim(ncname)
1660 exit_flag=3
1661 RETURN
1662 END IF
1663# endif
1664# ifdef ADJUST_BOUNDARY
1665 IF (.not.got_var(idsbry(isuvel)).and. &
1666 & any(lobc(:,isuvel,ng))) THEN
1667 IF (master) WRITE (stdout,30) trim(vname(1,idsbry(isuvel))), &
1668 & trim(ncname)
1669 exit_flag=3
1670 RETURN
1671 END IF
1672 IF (.not.got_var(idsbry(isvvel)).and. &
1673 & any(lobc(:,isvvel,ng))) THEN
1674 IF (master) WRITE (stdout,30) trim(vname(1,idsbry(isvvel))), &
1675 & trim(ncname)
1676 exit_flag=3
1677 RETURN
1678 END IF
1679# endif
1680# endif
1681# ifdef SOLVE3D
1682 DO itrc=1,nt(ng)
1683 IF (.not.got_var(idtvar(itrc))) THEN
1684 IF (master) WRITE (stdout,30) trim(vname(1,idtvar(itrc))), &
1685 & trim(ncname)
1686 exit_flag=3
1687 RETURN
1688 END IF
1689# ifdef ADJUST_BOUNDARY
1690 IF (.not.got_var(idsbry(istvar(itrc))).and. &
1691 & any(lobc(:,istvar(itrc),ng))) THEN
1692 IF (master) WRITE (stdout,30) &
1693 & trim(vname(1,idsbry(istvar(itrc)))), &
1694 & trim(ncname)
1695 exit_flag=3
1696 RETURN
1697 END IF
1698# endif
1699# ifdef ADJUST_STFLUX
1700 IF (.not.got_var(idtsur(itrc)).and.lstflux(itrc,ng)) THEN
1701 IF (master) WRITE (stdout,30) trim(vname(1,idtsur(itrc))), &
1702 & trim(ncname)
1703 exit_flag=3
1704 RETURN
1705 END IF
1706# endif
1707 END DO
1708# endif
1709
1710
1711
1712 irp(ng)%Rindex=rec_size
1713 fcount=irp(ng)%Fcount
1714 irp(ng)%Nrec(fcount)=rec_size
1715 END IF
1716
1717 10 FORMAT (/,' RP_DEF_INI_PIO - unable to open initial NetCDF', &
1718 & ' file: ',a)
1719 20 FORMAT (/,' RP_DEF_INI_PIO - unable to put in define mode', &
1720 & ' initial NetCDF file: ',a)
1721 30 FORMAT (/,' RP_DEF_INI_PIO - unable to find variable: ',a,2x, &
1722 & ' in file: ',a)
1723
1724 RETURN
subroutine, public pio_netcdf_redef(ng, model, ncname, piofile)
integer, parameter pio_fout
type(var_desc_t), dimension(:), pointer var_desc
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)