58 CHARACTER(Len=NF90_MAX_NAME+1) :: dimname
71 CHARACTER(Len=NF90_MAX_NAME+1) attname
75 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: int
76 REAL(spa),
ALLOCATABLE,
DIMENSION(:) :: flt
77 REAL(dp),
ALLOCATABLE,
DIMENSION(:) :: dbl
78 CHARACTER(LEN=char_max_attlen),
ALLOCATABLE,
DIMENSION(:) :: chr
90 INTEGER,
POINTER :: ncid
92 CHARACTER(Len=NF90_MAX_NAME+1) varname
101 INTEGER :: curr_stkcnt
105 INTEGER,
POINTER :: scl_int
106 INTEGER,
POINTER,
DIMENSION(:) :: vec_int
107 INTEGER,
POINTER,
DIMENSION(:,:) :: arr_int
108 INTEGER,
POINTER,
DIMENSION(:,:,:) :: cub_int
109 INTEGER,
POINTER,
DIMENSION(:,:,:,:) :: fda_int
111 REAL(spa),
POINTER :: scl_flt
112 REAL(spa),
POINTER,
DIMENSION(:) :: vec_flt
113 REAL(spa),
POINTER,
DIMENSION(:,:) :: arr_flt
114 REAL(spa),
POINTER,
DIMENSION(:,:,:) :: cub_flt
115 REAL(spa),
POINTER,
DIMENSION(:,:,:,:) :: fda_flt
117 REAL(dp),
POINTER :: scl_dbl
118 REAL(dp),
POINTER,
DIMENSION(:) :: vec_dbl
119 REAL(dp),
POINTER,
DIMENSION(:,:) :: arr_dbl
120 REAL(dp),
POINTER,
DIMENSION(:,:,:) :: cub_dbl
121 REAL(dp),
POINTER,
DIMENSION(:,:,:,:) :: fda_dbl
123 CHARACTER(LEN=80),
POINTER :: scl_chr
124 CHARACTER(LEN=80),
POINTER,
DIMENSION(:) :: vec_chr
139 INTEGER :: prev_stkcnt=0
140 INTEGER :: next_stkcnt=0
141 INTEGER :: max_stkcnt=0
144 REAL(sp) :: prev_wght=0.0_sp
145 REAL(sp) :: next_wght=0.0_sp
147 CHARACTER(len=80) :: timezone =
"none" 154 INTEGER,
POINTER :: ncid
155 CHARACTER(LEN=160) fname
160 INTEGER :: unlimdimid
351 INTERFACE ASSIGNMENT(=)
363 FUNCTION new_file(fname)
RESULT(NCF)
366 TYPE(
ncfile),
POINTER :: ncf
367 CHARACTER(len=*),
OPTIONAL,
INTENT(IN) :: fname
371 ALLOCATE(ncf,stat=status)
372 if(status/=0)
CALL fatal_error(
"NEW_FILE: COULD NOT ALLOCATE!")
378 IF (
PRESENT(fname)) ncf%FNAME=fname
379 ncf%WRITABLE = .false.
381 ncf%CONNECTED = .false.
385 NULLIFY(ncf%INTERP_N)
386 NULLIFY(ncf%INTERP_C)
400 TYPE(
ncfile),
POINTER,
INTENT(IN) :: ncfin
401 TYPE(
ncfile),
POINTER :: ncfout
402 TYPE(
ncvar),
POINTER :: ncfout1
403 TYPE(
ncvarp),
POINTER :: current
407 (
"COPY_NCF: INPUT FILE IS NOT ASSOCIATED!")
412 ncfout%FNAME = ncfin%FNAME
413 ncfout%WRITABLE = .false.
414 ncfout%OPEN = .false.
415 ncfout%CONNECTED = .false.
416 ncfout%UNLIMDIMID = ncfin%UNLIMDIMID
427 IF(.not.
Associated(ncfin%DIMS))
Call fatal_error &
428 (
"COPY_NCF: INPUT FILE DIMS LIST IS NOT ASSOCIATED!")
430 IF(.not.
Associated(ncfin%ATTS))
Call fatal_error &
431 (
"COPY_NCF: INPUT FILE ATTS LIST IS NOT ASSOCIATED!")
433 IF(.not.
Associated(ncfin%VARS))
Call fatal_error &
434 (
"COPY_NCF: INPUT FILE VARS LIST IS NOT ASSOCIATED!")
437 ncfout%DIMS = ncfin%DIMS
438 ncfout%ATTS = ncfin%ATTS
440 current => ncfin%VARS%NEXT
442 IF(.NOT.
ASSOCIATED(current))
THEN 446 IF(.NOT.
ASSOCIATED(current%VAR))
THEN 447 CALL fatal_error(
"COPY_FILE: FOUND NULL VAR POINTER IN THE LIST")
451 ncfout =>
add(ncfout,ncfout1)
454 current => current%NEXT
461 IF(
Associated(ncfin%FTIME))
THEN 463 ncfout%FTIME = ncfin%FTIME
475 ALLOCATE(ftm,stat=status)
476 if(status/=0)
CALL fatal_error(
"NEW_FTM: COULD NOT ALLOCATE FTM!")
488 TYPE(
ncftime),
INTENT(OUT):: FTIME_OUT
489 TYPE(
ncftime),
INTENT(IN) :: FTIME_IN
491 ftime_out%TMTYPE = ftime_in%TMTYPE
492 ftime_out%STK_LEN = ftime_in%STK_LEN
493 ftime_out%PREV_STKCNT = ftime_in%PREV_STKCNT
494 ftime_out%NEXT_STKCNT = ftime_in%NEXT_STKCNT
495 ftime_out%MAX_STKCNT = ftime_in%MAX_STKCNT
496 ftime_out%PREV_IO = ftime_in%PREV_IO
497 ftime_out%NEXT_IO = ftime_in%NEXT_IO
498 ftime_out%PREV_WGHT = ftime_in%PREV_WGHT
499 ftime_out%NEXT_WGHT = ftime_in%NEXT_WGHT
500 ftime_out%INTERVAL = ftime_in%INTERVAL
501 ftime_out%TIMEZONE = ftime_in%TIMEZONE
511 ALLOCATE(ncfp,stat=status)
512 if(status/=0)
CALL fatal_error(
"ALLOC_FILEP: COULD NOT ALLOCATE!")
525 ALLOCATE(filehead,stat=status)
526 if(status/=0)
CALL fatal_error(
"ALLOC_FILEHEAD: COULD NOT ALLOCATE!")
546 CHARACTER(LEN=*),
INTENT(IN) :: NAME
547 LOGICAL,
INTENT(OUT) :: FOUND
548 TYPE(
ncfilep),
pointer :: CURRENT, PREVIOUS
550 previous => list%FIRST
551 current => previous%NEXT
555 IF(.NOT.
ASSOCIATED(current))
RETURN 557 IF( name == current%NCF%FNAME )
THEN 561 previous => previous%NEXT
562 current => current%NEXT
567 previous%NEXT => current%NEXT
577 INTEGER,
INTENT(IN) :: NCID
578 LOGICAL,
INTENT(OUT) :: FOUND
579 TYPE(
ncfilep),
pointer :: CURRENT, PREVIOUS
581 previous => list%FIRST
582 current => previous%NEXT
586 IF(.NOT.
ASSOCIATED(current))
RETURN 588 IF( ncid == current%NCF%NCID )
THEN 592 previous => previous%NEXT
593 current => current%NEXT
598 previous%NEXT => current%NEXT
608 TYPE(
ncfilep),
pointer :: CURRENT, PREVIOUS
610 previous => list%FIRST
611 current => previous%NEXT
614 IF(.NOT.
ASSOCIATED(current))
RETURN 616 previous%NEXT => current%NEXT
620 current => previous%NEXT
631 IF(.not.
ASSOCIATED(ncf))
THEN 634 & (
"CALLED KILL FILL BUT FILE OBJECT IS NOT ASSOCIATED?")
639 status = nf90_close(ncf%ncid)
651 IF(
ASSOCIATED(ncf%FTIME))
THEN 652 NULLIFY(ncf%FTIME%TM1)
653 NULLIFY(ncf%FTIME%TM2)
654 DEALLOCATE(ncf%FTIME)
659 IF(
ASSOCIATED(ncf%INTERP_N))
Nullify(ncf%INTERP_N)
660 IF(
ASSOCIATED(ncf%INTERP_C))
Nullify(ncf%INTERP_C)
665 DEALLOCATE(ncf,stat=status)
666 IF(status /= 0)
CALL fatal_error(
"KILL_FILE: COULD NOT DEALLOCATE")
706 TYPE(
ncfile),
POINTER :: NCF
707 LOGICAL,
INTENT(OUT) :: FOUND
709 TYPE(
ncfilep),
pointer :: CURRENT, PREVIOUS
711 IF(.NOT.
ASSOCIATED(ncf))&
712 &
CALL fatal_error(
"INSERT_FILEP_BYNCF: NCF NOT ASSOCIATED!")
714 previous => list%FIRST
715 current => previous%NEXT
719 IF(.NOT.
ASSOCIATED(current))
EXIT 720 IF( ncf%FNAME == current%NCF%FNAME )
THEN 724 previous => previous%NEXT
725 current => current%NEXT
731 previous%NEXT%NCF => ncf
738 TYPE(
ncfile),
POINTER :: ncf
740 CHARACTER(LEN=*),
INTENT(IN) :: name
741 LOGICAL,
INTENT(OUT) :: found
742 TYPE(
ncfilep),
pointer :: current, previous
745 previous => list%FIRST
746 current => previous%NEXT
751 IF(.NOT.
ASSOCIATED(current))
RETURN 753 if(.not.
associated(current%ncf))
Call fatal_error&
754 & (
"FIND_FILE: Link in file list has file pointer that is & 757 idx = index(current%NCF%FNAME,name)
764 previous => previous%NEXT
765 current => current%NEXT
774 TYPE(
ncfile),
POINTER :: ncf
776 INTEGER,
INTENT(IN) :: ncid
777 LOGICAL,
INTENT(OUT) :: found
778 TYPE(
ncfilep),
pointer :: current, previous
781 previous => list%FIRST
782 current => previous%NEXT
786 IF(.NOT.
ASSOCIATED(current))
RETURN 788 IF( ncid == current%NCF%NCID )
THEN 793 previous => previous%NEXT
794 current => current%NEXT
805 TYPE(
ncfilep),
pointer :: current, previous
807 previous => list%FIRST
808 current => previous%NEXT
811 IF(.NOT.
ASSOCIATED(current))
RETURN 812 previous => previous%NEXT
813 current => current%NEXT
823 TYPE(
ncfilep),
pointer :: CURRENT, PREVIOUS
825 Character(len=4) :: chr
827 previous => list%FIRST
828 current => previous%NEXT
830 IF(.NOT.
ASSOCIATED(current))
THEN 832 &
write(ipt,*)
"%%%%%%%%%%% FILE LIST IS EMPTY %%%%%%%%%%%%%" 836 &
write(ipt,*)
"%%%%%%%%%%% PRINTING FILE LIST %%%%%%%%%%%%%" 841 IF(.NOT.
ASSOCIATED(current))
EXIT 843 write(chr,
'(I4.4)')cnt
845 &
write(ipt,*)
"! PRINTING FILE LIST ENTRY #"//chr
848 previous => previous%NEXT
849 current => current%NEXT
852 &
write(ipt,*)
"%%%%%%%%%%% END OF FILE LIST %%%%%%%%%%%%%" 858 type(
ncfile),
pointer :: NCF
862 WRITE(ipt,*)
"======== PRINT NCFILE TYPE =======" 863 if(.not.
associated(ncf))
then 864 WRITE(ipt,*)
"THIS NCFILE HAS NOT BEEN ASSOCIATED" 865 WRITE(ipt,*)
"======= PRINTED NCFILE TYPE ======" 868 WRITE(ipt,*)
"=FILENAME ::"//trim(ncf%FNAME)
869 WRITE(ipt,*)
"=NCID ::",ncf%NCID
870 WRITE(ipt,*)
"=WRITABLE ::",ncf%WRITABLE
871 WRITE(ipt,*)
"=OPEN ::",ncf%OPEN
872 WRITE(ipt,*)
"=CONNECTED ::",ncf%CONNECTED
873 WRITE(ipt,*)
"=INDEFMODE ::",ncf%INDEFMODE
874 WRITE(ipt,*)
"=UNLIMDIMID ::",ncf%UNLIMDIMID
879 WRITE(ipt,*)
"= FILE OBJECT COUNTS" 883 IF(
ASSOCIATED(ncf%INTERP_N))
WRITE(ipt,*)
"= HAS INTERP COEF'S TO NODES" 884 IF(
ASSOCIATED(ncf%INTERP_C))
WRITE(ipt,*)
"= HAS INTERP COEF'S TO CELLS" 885 WRITE(ipt,*)
"====== PRINTED NCFILE TYPE ======" 894 TYPE(
ncftime),
POINTER :: FTIME
897 WRITE(ipt,*)
"===== FILE IO TIME INFO ====" 899 IF (
ASSOCIATED(ftime))
THEN 900 select case(ftime%TMtype)
902 WRITE(ipt,*)
"= TMTYPE :: UNKNOWN" 904 WRITE(ipt,*)
"= TMTYPE :: CHARACTER STRING DATE" 906 WRITE(ipt,*)
"= TMTYPE :: TWO INTEGER MJD" 908 WRITE(ipt,*)
"= TMTYPE :: FLOATING POINT SECONDS" 910 WRITE(ipt,*)
"= TMTYPE :: FLOATING POINT DAYS" 922 CALL print_time(ftime%INTERVAL,ipt,
"IO INTERVAL")
924 WRITE(ipt,*)
"=STK_LEN ::",ftime%STK_LEN
926 WRITE(ipt,*)
"=PREV_STKCNT ::",ftime%PREV_STKCNT
927 WRITE(ipt,*)
"=NEXT_STKCNT ::",ftime%NEXT_STKCNT
928 WRITE(ipt,*)
"=MAX_STKCNT ::",ftime%MAX_STKCNT
929 WRITE(ipt,*)
"=PREV_WGHT ::",ftime%PREV_WGHT
930 WRITE(ipt,*)
"=NEXT_WGHT ::",ftime%NEXT_WGHT
931 WRITE(ipt,*)
"=TIMEZONE ::"//trim(ftime%TIMEZONE)
934 WRITE(ipt,*)
"= FTIME NOT ALLOCATED: THE FILE HAS NO RECOGNIZED TIME VARIABLE" 936 WRITE(ipt,*)
"=END FILE IO TIME TYPE ====" 947 TYPE(
ncvar),
POINTER :: var
950 ALLOCATE(var,stat=status)
951 if(status/=0)
CALL fatal_error(
"NEW_VAR: COULD NOT ALLOCATE!")
954 var%CONNECTED = .false.
991 TYPE(
ncvarp),
POINTER :: varp
994 ALLOCATE(varp,stat=status)
995 if(status/=0)
CALL fatal_error(
"NEW_VARP: COULD NOT ALLOCATE!")
1002 FUNCTION copy_var(VARIN)
RESULT(VAROUT)
1004 TYPE(
ncvar),
POINTER :: varin, varout
1013 varout%VARNAME = varin%VARNAME
1014 varout%XTYPE = varin%XTYPE
1016 IF(
Associated(varin%SCL_INT)) varout%SCL_INT=>varin%SCL_INT
1017 IF(
Associated(varin%VEC_INT)) varout%VEC_INT=>varin%VEC_INT
1018 IF(
Associated(varin%ARR_INT)) varout%ARR_INT=>varin%ARR_INT
1019 IF(
Associated(varin%CUB_INT)) varout%CUB_INT=>varin%CUB_INT
1020 IF(
Associated(varin%FDA_INT)) varout%FDA_INT=>varin%FDA_INT
1022 IF(
Associated(varin%SCL_FLT)) varout%SCL_FLT=>varin%SCL_FLT
1023 IF(
Associated(varin%VEC_FLT)) varout%VEC_FLT=>varin%VEC_FLT
1024 IF(
Associated(varin%ARR_FLT)) varout%ARR_FLT=>varin%ARR_FLT
1025 IF(
Associated(varin%CUB_FLT)) varout%CUB_FLT=>varin%CUB_FLT
1026 IF(
Associated(varin%FDA_FLT)) varout%FDA_FLT=>varin%FDA_FLT
1028 IF(
Associated(varin%SCL_DBL)) varout%SCL_DBL=>varin%SCL_DBL
1029 IF(
Associated(varin%VEC_DBL)) varout%VEC_DBL=>varin%VEC_DBL
1030 IF(
Associated(varin%ARR_DBL)) varout%ARR_DBL=>varin%ARR_DBL
1031 IF(
Associated(varin%CUB_DBL)) varout%CUB_DBL=>varin%CUB_DBL
1032 IF(
Associated(varin%FDA_DBL)) varout%FDA_DBL=>varin%FDA_DBL
1034 IF(
Associated(varin%SCL_CHR)) varout%SCL_CHR=>varin%SCL_CHR
1035 IF(
Associated(varin%VEC_CHR)) varout%VEC_CHR=>varin%VEC_CHR
1039 IF(.not.
Associated(varin%DIMS))
Call fatal_error &
1040 (
"COPY_VAR: INPUT VARIABLE DIMS LIST IS NOT ASSOCIATED!")
1042 IF(.not.
Associated(varin%ATTS))
Call fatal_error &
1043 (
"COPY_VAR: INPUT VARIABLE ATTS LIST IS NOT ASSOCIATED!")
1049 varout%DIMS = varin%DIMS
1050 varout%ATTS = varin%ATTS
1057 TYPE(
ncvar),
POINTER :: varin, varout
1062 varout%NCID => varin%NCID
1063 varout%CONNECTED = varin%CONNECTED
1064 varout%VARID = varin%VARID
1065 varout%VARNAME = varin%VARNAME
1066 varout%XTYPE = varin%XTYPE
1067 varout%DIMS%NEXT => varin%DIMS%NEXT
1068 varout%ATTS%NEXT => varin%ATTS%NEXT
1076 TYPE(
ncfile),
INTENT(INOUT):: LIST
1077 CHARACTER(LEN=*),
INTENT(IN) :: NAME
1078 LOGICAL,
INTENT(OUT) :: FOUND
1079 TYPE(
ncvarp),
pointer :: CURRENT, PREVIOUS
1081 previous => list%VARS
1082 current => previous%NEXT
1086 IF(.NOT.
ASSOCIATED(current))
RETURN 1088 IF( name == current%VAR%VARNAME )
THEN 1092 previous => previous%NEXT
1093 current => current%NEXT
1098 previous%NEXT => current%NEXT
1108 TYPE(
ncfile),
INTENT(INOUT):: LIST
1109 INTEGER,
INTENT(IN) :: VARID
1110 LOGICAL,
INTENT(OUT) :: FOUND
1111 TYPE(
ncvarp),
pointer :: CURRENT, PREVIOUS
1113 previous => list%VARS
1114 current => previous%NEXT
1118 IF(.NOT.
ASSOCIATED(current))
RETURN 1120 IF( varid == current%VAR%VARID )
THEN 1124 previous => previous%NEXT
1125 current => current%NEXT
1130 previous%NEXT => current%NEXT
1140 TYPE(
ncfile),
POINTER :: LIST
1141 TYPE(
ncvarp),
pointer :: CURRENT, PREVIOUS
1143 IF(.not.
ASSOCIATED(list))
RETURN 1145 previous => list%VARS
1146 current => previous%NEXT
1149 IF(.NOT.
ASSOCIATED(current))
RETURN 1151 previous%NEXT => current%NEXT
1154 current => previous%NEXT
1166 IF(.not.
ASSOCIATED(var))
RETURN 1169 DEALLOCATE(var%DIMS)
1172 DEALLOCATE(var%ATTS)
1174 DEALLOCATE(var,stat=status)
1175 IF(status /= 0)
CALL fatal_error(
"KILL_VAR: COULD NOT DEALLOCATE")
1215 TYPE(
ncvar),
POINTER :: VAR
1216 LOGICAL,
INTENT(OUT) :: FOUND
1217 TYPE(
ncfile),
INTENT(INOUT):: LIST
1218 TYPE(
ncvarp),
POINTER :: CURRENT, PREVIOUS
1221 IF(.NOT.
ASSOCIATED(var))&
1222 &
CALL fatal_error(
"INSERT_VARP_BYVAR: VAR NOT ASSOCIATED!")
1224 previous => list%VARS
1225 current => previous%NEXT
1230 IF(.NOT.
ASSOCIATED(current))
EXIT 1231 IF( var%VARNAME == current%VAR%VARNAME )
THEN 1235 previous => previous%NEXT
1236 current => current%NEXT
1242 previous%NEXT%VAR => var
1250 TYPE(
ncvar),
POINTER :: var
1251 TYPE(
ncfile),
INTENT(IN) :: list
1252 CHARACTER(LEN=*),
INTENT(IN) :: name
1253 LOGICAL,
INTENT(OUT) :: found
1254 TYPE(
ncvarp) ,
POINTER :: current, previous
1257 previous => list%VARS
1258 current => previous%NEXT
1262 IF(.NOT.
ASSOCIATED(current))
RETURN 1264 IF( name == current%VAR%VARNAME )
THEN 1269 previous => previous%NEXT
1270 current => current%NEXT
1279 TYPE(
ncvar),
POINTER :: var
1280 TYPE(
ncfile),
INTENT(IN) :: list
1281 INTEGER,
INTENT(IN) :: varid
1282 LOGICAL,
INTENT(OUT) :: found
1283 TYPE(
ncvarp) ,
POINTER :: current, previous
1286 previous => list%VARS
1287 current => previous%NEXT
1291 IF(.NOT.
ASSOCIATED(current))
RETURN 1293 IF( varid == current%VAR%VARID )
THEN 1298 previous => previous%NEXT
1299 current => current%NEXT
1309 TYPE(
ncfile),
INTENT(IN) :: list
1310 TYPE(
ncvarp) ,
POINTER :: current, previous
1312 previous => list%VARS
1313 current => previous%NEXT
1316 IF(.NOT.
ASSOCIATED(current))
RETURN 1317 previous => previous%NEXT
1318 current => current%NEXT
1328 TYPE(
ncfile),
INTENT(IN) :: list
1329 TYPE(
ncvarp) ,
POINTER :: current, previous
1331 previous => list%VARS
1332 current => previous%NEXT
1335 IF(.NOT.
ASSOCIATED(current))
RETURN 1339 previous => previous%NEXT
1340 current => current%NEXT
1348 type(
ncfile),
intent(IN) :: LIST
1349 TYPE(
ncvarp) ,
POINTER :: CURRENT, PREVIOUS
1351 Character(len=4) :: chr
1353 previous => list%VARS
1354 current => previous%NEXT
1356 IF(.NOT.
ASSOCIATED(current))
THEN 1358 &
write(ipt,*)
"%%%%%%%%%%% VARIABLE LIST IS EMPTY %%%%%%%%%%%%%" 1362 &
write(ipt,*)
"%%%%%%%%%%% PRINTING VARIABLE LIST %%%%%%%%%%%%%" 1367 IF(.NOT.
ASSOCIATED(current))
EXIT 1369 write(chr,
'(I4.4)')cnt
1371 &
write(ipt,*)
"! PRINTING VARIABLE LIST ENTRY #"//chr
1374 previous => previous%NEXT
1375 current => current%NEXT
1378 &
write(ipt,*)
"%%%%%%%%%%% END OF VARIABLE LIST %%%%%%%%%%%%%" 1384 type(
ncvar),
POINTER,
intent(IN) :: VAR
1387 WRITE(ipt,*)
"======== PRINT NCVAR TYPE =======" 1389 if(.not.
associated(var))
then 1390 WRITE(ipt,*)
"THIS NCVAR HAS NOT BEEN ASSOCIATED" 1391 WRITE(ipt,*)
"======= PRINTED NCVAR TYPE ======" 1395 WRITE(ipt,*)
"VARNAME ::"//trim(var%VARNAME)
1396 WRITE(ipt,*)
"VARID ::",var%VARID
1397 if(.not.
associated(var%NCID))
then 1398 WRITE(ipt,*)
"NCID :: NOT ASSOCIATED" 1400 WRITE(ipt,*)
"NCID ::",var%NCID
1402 WRITE(ipt,*)
"CONNECTED ::",var%CONNECTED
1403 WRITE(ipt,*)
"CURR_STKCNT ::",var%CURR_STKCNT
1405 select case(var%XTYPE)
1407 WRITE(ipt,*)
"XYTPE :: CHAR" 1409 WRITE(ipt,*)
"XYTPE :: BYTE" 1411 WRITE(ipt,*)
"XYTPE :: SHORT" 1413 WRITE(ipt,*)
"XYTPE :: INT" 1415 WRITE(ipt,*)
"XYTPE :: FLOAT" 1417 WRITE(ipt,*)
"XYTPE :: DOUBLE" 1420 IF(
ASSOCIATED(var%SCL_INT))
WRITE(ipt,*)
"ASSOCIATED :: SCL_INT" 1421 IF(
ASSOCIATED(var%VEC_INT))
WRITE(ipt,*)
"ASSOCIATED :: VEC_INT" 1422 IF(
ASSOCIATED(var%ARR_INT))
WRITE(ipt,*)
"ASSOCIATED :: ARR_INT" 1423 IF(
ASSOCIATED(var%CUB_INT))
WRITE(ipt,*)
"ASSOCIATED :: CUB_INT" 1424 IF(
ASSOCIATED(var%FDA_INT))
WRITE(ipt,*)
"ASSOCIATED :: FDA_INT" 1426 IF(
ASSOCIATED(var%SCL_FLT))
WRITE(ipt,*)
"ASSOCIATED :: SCL_FLT" 1427 IF(
ASSOCIATED(var%VEC_FLT))
WRITE(ipt,*)
"ASSOCIATED :: VEC_FLT" 1428 IF(
ASSOCIATED(var%ARR_FLT))
WRITE(ipt,*)
"ASSOCIATED :: ARR_FLT" 1429 IF(
ASSOCIATED(var%CUB_FLT))
WRITE(ipt,*)
"ASSOCIATED :: CUB_FLT" 1430 IF(
ASSOCIATED(var%FDA_FLT))
WRITE(ipt,*)
"ASSOCIATED :: FDA_FLT" 1432 IF(
ASSOCIATED(var%SCL_DBL))
WRITE(ipt,*)
"ASSOCIATED :: SCL_DBL" 1433 IF(
ASSOCIATED(var%VEC_DBL))
WRITE(ipt,*)
"ASSOCIATED :: VEC_DBL" 1434 IF(
ASSOCIATED(var%ARR_DBL))
WRITE(ipt,*)
"ASSOCIATED :: ARR_DBL" 1435 IF(
ASSOCIATED(var%CUB_DBL))
WRITE(ipt,*)
"ASSOCIATED :: CUB_DBL" 1436 IF(
ASSOCIATED(var%FDA_DBL))
WRITE(ipt,*)
"ASSOCIATED :: FDA_DBL" 1438 IF(
ASSOCIATED(var%SCL_CHR))
WRITE(ipt,*)
"ASSOCIATED :: SCL_CHR" 1439 IF(
ASSOCIATED(var%VEC_CHR))
WRITE(ipt,*)
"ASSOCIATED :: VEC_CHR" 1445 WRITE(ipt,*)
"======= PRINTED NCVAR TYPE ======" 1454 FUNCTION new_att()
RESULT(ATT)
1457 TYPE(
ncatt),
POINTER :: att
1460 ALLOCATE(att,stat=status)
1461 if(status/=0)
CALL fatal_error(
"NEW_ATT: COULD NOT ALLOCATE!")
1473 TYPE(
ncattp),
POINTER :: attp
1476 ALLOCATE(attp,stat=status)
1477 if(status/=0)
CALL fatal_error(
"NEW_ATTP COULD NOT ALLOCATE!")
1484 FUNCTION copy_att(ATTIN)
RESULT(ATTOUT)
1486 TYPE(
ncatt),
POINTER,
INTENT(IN) :: attin
1487 TYPE(
ncatt),
POINTER :: attout
1490 IF(.not.
Associated(attin))
CALL fatal_error(
"THE ARGUMENT MUST BE& 1491 & ASSOCIAED FOR COPY_ATT")
1496 attout%ATTNAME = attin%ATTNAME
1497 attout%LEN = attin%LEN
1498 attout%ATTID = attin%ATTID
1499 attout%XTYPE = attin%XTYPE
1501 IF (
Allocated(attin%int))
THEN 1502 ALLOCATE(attout%int(attin%LEN),stat=status)
1503 if(status/=0)
CALL fatal_error(
"COPY_ATT COULD NOT ALLOCATE INT!")
1504 attout%int = attin%int
1507 IF (
Allocated(attin%flt))
THEN 1508 ALLOCATE(attout%flt(attin%LEN),stat=status)
1509 if(status/=0)
CALL fatal_error(
"COPY_ATT COULD NOT ALLOCATE FLT!")
1510 attout%flt = attin%flt
1513 IF (
Allocated(attin%dbl))
THEN 1514 ALLOCATE(attout%dbl(attin%LEN),stat=status)
1515 if(status/=0)
CALL fatal_error(
"COPY_ATT COULD NOT ALLOCATE DBL!")
1516 attout%dbl = attin%dbl
1519 IF (
Allocated(attin%chr))
THEN 1520 ALLOCATE(attout%chr(
size(attin%chr)),stat=status)
1521 if(status/=0)
CALL fatal_error(
"COPY_ATT COULD NOT ALLOCATE CHR!")
1522 attout%chr = attin%chr
1532 TYPE(
ncattp),
TARGET,
INTENT(IN) :: ATTPIN
1533 TYPE(
ncattp),
TARGET,
INTENT(OUT) :: ATTPOUT
1534 TYPE(
ncatt),
POINTER :: ATT
1535 TYPE(
ncattp),
POINTER :: CURRENT_IN, PREVIOUS_IN
1536 TYPE(
ncattp),
POINTER :: CURRENT_OUT, PREVIOUS_OUT
1546 previous_in => attpin
1547 current_in => previous_in%NEXT
1549 previous_out => attpout
1550 current_out => previous_out%NEXT
1557 IF(.NOT.
ASSOCIATED(current_in))
THEN 1561 IF(.NOT.
ASSOCIATED(current_in%ATT))
THEN 1562 CALL fatal_error(
"COPY_ATT_LIST: FOUND NULL DIM POINTER IN THE LIST")
1566 previous_out%NEXT%ATT =>
copy_att(current_in%ATT)
1567 previous_out%NEXT%NEXT => current_out
1570 previous_out => previous_out%NEXT
1573 previous_in => previous_in%NEXT
1574 current_in => current_in%NEXT
1585 TYPE(
ncfile),
INTENT(INOUT):: LIST
1586 CHARACTER(LEN=*),
INTENT(IN) :: NAME
1587 LOGICAL,
INTENT(OUT) :: FOUND
1588 TYPE(
ncattp) ,
POINTER :: CURRENT, PREVIOUS
1590 previous => list%ATTS
1591 current => previous%NEXT
1595 IF(.NOT.
ASSOCIATED(current))
RETURN 1597 IF( name == current%ATT%ATTNAME )
THEN 1601 previous => previous%NEXT
1602 current => current%NEXT
1607 previous%NEXT => current%NEXT
1616 TYPE(
ncfile),
INTENT(INOUT):: LIST
1617 INTEGER,
INTENT(IN) :: ATTID
1618 LOGICAL,
INTENT(OUT) :: FOUND
1619 TYPE(
ncattp) ,
POINTER :: CURRENT, PREVIOUS
1621 previous => list%ATTS
1622 current => previous%NEXT
1626 IF(.NOT.
ASSOCIATED(current))
RETURN 1628 IF( attid == current%ATT%ATTID )
THEN 1632 previous => previous%NEXT
1633 current => current%NEXT
1638 previous%NEXT => current%NEXT
1647 TYPE(
ncfile),
INTENT(INOUT):: LIST
1648 TYPE(
ncattp) ,
POINTER :: CURRENT, PREVIOUS
1650 previous => list%ATTS
1651 current => previous%NEXT
1653 IF(.NOT.
ASSOCIATED(current))
RETURN 1656 previous%NEXT => current%NEXT
1659 current => previous%NEXT
1668 TYPE(
ncvar),
INTENT(INOUT):: LIST
1670 CHARACTER(LEN=*),
INTENT(IN) :: NAME
1671 LOGICAL,
INTENT(OUT) :: FOUND
1672 TYPE(
ncattp) ,
POINTER :: CURRENT, PREVIOUS
1674 previous => list%ATTS
1675 current => previous%NEXT
1679 IF(.NOT.
ASSOCIATED(current))
RETURN 1681 IF( name == current%ATT%ATTNAME )
THEN 1685 previous => previous%NEXT
1686 current => current%NEXT
1691 previous%NEXT => current%NEXT
1700 TYPE(
ncvar),
INTENT(INOUT):: LIST
1701 INTEGER,
INTENT(IN) :: ATTID
1702 LOGICAL,
INTENT(OUT) :: FOUND
1703 TYPE(
ncattp),
POINTER :: CURRENT, PREVIOUS
1705 previous => list%ATTS
1706 current => previous%NEXT
1710 IF(.NOT.
ASSOCIATED(current))
RETURN 1712 IF( attid == current%ATT%ATTID )
THEN 1716 previous => previous%NEXT
1717 current => current%NEXT
1722 previous%NEXT => current%NEXT
1731 TYPE(
ncvar),
INTENT(INOUT):: LIST
1732 TYPE(
ncattp),
POINTER :: CURRENT, PREVIOUS
1734 previous => list%ATTS
1735 current => previous%NEXT
1738 IF(.NOT.
ASSOCIATED(current))
RETURN 1740 previous%NEXT => current%NEXT
1743 current => previous%NEXT
1753 IF(
ASSOCIATED(att))
THEN 1754 IF(
ALLOCATED(att%INT))
DEALLOCATE(att%INT)
1755 IF(
ALLOCATED(att%FLT))
DEALLOCATE(att%FLT)
1756 IF(
ALLOCATED(att%DBL))
DEALLOCATE(att%DBL)
1757 IF(
ALLOCATED(att%CHR))
DEALLOCATE(att%CHR)
1759 DEALLOCATE(att,stat=status)
1760 IF(status /= 0)
CALL fatal_error(
"KILL_ATT: COULD NOT DEALLOCATE")
1805 TYPE(
ncatt),
POINTER :: ATT
1806 LOGICAL,
INTENT(OUT) :: FOUND
1807 TYPE(
ncfile),
INTENT(INOUT):: LIST
1808 TYPE(
ncattp),
POINTER :: CURRENT, PREVIOUS
1810 IF(.NOT.
ASSOCIATED(att))&
1811 &
CALL fatal_error(
"INSERT_NCF_ATTP_BYATT: ATT NOT ASSOCIATED!")
1813 previous => list%ATTS
1814 current => previous%NEXT
1820 IF(.NOT.
ASSOCIATED(current))
EXIT 1821 IF( att%ATTNAME == current%ATT%ATTNAME )
THEN 1825 previous => previous%NEXT
1826 current => current%NEXT
1833 previous%NEXT%ATT => att
1836 previous%NEXT%NEXT => current
1878 TYPE(
ncatt),
POINTER :: ATT
1879 LOGICAL,
INTENT(OUT) :: FOUND
1880 TYPE(
ncvar),
INTENT(INOUT):: LIST
1881 TYPE(
ncattp),
POINTER :: CURRENT, PREVIOUS
1883 IF(.NOT.
ASSOCIATED(att))&
1884 &
CALL fatal_error(
"INSERT_VAR_ATTP_BYATT: ATT NOT ASSOCIATED!")
1886 previous => list%ATTS
1887 current => previous%NEXT
1892 IF(.NOT.
ASSOCIATED(current))
EXIT 1893 IF( att%ATTNAME == current%ATT%ATTNAME )
THEN 1897 previous => previous%NEXT
1898 current => current%NEXT
1904 previous%NEXT%ATT => att
1913 TYPE(
ncatt),
POINTER :: att
1914 TYPE(
ncfile),
INTENT(IN):: list
1915 CHARACTER(LEN=*),
INTENT(IN) :: name
1916 LOGICAL,
INTENT(OUT) :: found
1917 TYPE(
ncattp) ,
POINTER :: current, previous
1920 previous => list%ATTS
1921 current => previous%NEXT
1925 IF(.NOT.
ASSOCIATED(current))
RETURN 1927 IF( trim(name) == trim(current%ATT%ATTNAME) )
THEN 1932 previous => previous%NEXT
1933 current => current%NEXT
1942 TYPE(
ncatt),
POINTER :: att
1943 INTEGER,
INTENT(IN) :: attid
1944 TYPE(
ncfile),
INTENT(IN):: list
1945 LOGICAL,
INTENT(OUT) :: found
1946 TYPE(
ncattp) ,
POINTER :: current, previous
1949 previous => list%ATTS
1950 current => previous%NEXT
1954 IF(.NOT.
ASSOCIATED(current))
RETURN 1956 IF( attid == current%ATT%ATTID )
THEN 1961 previous => previous%NEXT
1962 current => current%NEXT
1971 TYPE(
ncatt),
POINTER :: att
1972 TYPE(
ncvar),
INTENT(IN) :: list
1973 CHARACTER(LEN=*),
INTENT(IN) :: name
1974 LOGICAL,
INTENT(OUT) :: found
1975 TYPE(
ncattp) ,
POINTER :: current, previous
1978 previous => list%ATTS
1979 current => previous%NEXT
1983 IF(.NOT.
ASSOCIATED(current))
RETURN 1985 IF( trim(name) == trim(current%ATT%ATTNAME) )
THEN 1990 previous => previous%NEXT
1991 current => current%NEXT
2000 TYPE(
ncatt),
POINTER :: att
2001 INTEGER,
INTENT(IN) :: attid
2002 TYPE(
ncvar),
INTENT(IN):: list
2003 LOGICAL,
INTENT(OUT) :: found
2004 TYPE(
ncattp) ,
POINTER :: current, previous
2007 previous => list%ATTS
2008 current => previous%NEXT
2012 IF(.NOT.
ASSOCIATED(current))
RETURN 2014 IF( attid == current%ATT%ATTID )
THEN 2019 previous => previous%NEXT
2020 current => current%NEXT
2030 TYPE(
ncfile),
INTENT(IN) :: list
2031 TYPE(
ncattp) ,
POINTER :: current, previous
2033 previous => list%ATTS
2034 current => previous%NEXT
2037 IF(.NOT.
ASSOCIATED(current))
RETURN 2038 previous => previous%NEXT
2039 current => current%NEXT
2049 TYPE(
ncvar),
INTENT(IN) :: list
2050 TYPE(
ncattp) ,
POINTER :: current, previous
2052 previous => list%ATTS
2053 current => previous%NEXT
2056 IF(.NOT.
ASSOCIATED(current))
RETURN 2057 previous => previous%NEXT
2058 current => current%NEXT
2067 type(
ncfile),
intent(IN) :: LIST
2068 TYPE(
ncattp) ,
POINTER :: CURRENT, PREVIOUS
2070 Character(len=4) :: chr
2072 previous => list%ATTS
2073 current => previous%NEXT
2075 IF(.NOT.
ASSOCIATED(current))
THEN 2077 &
write(ipt,*)
"%%%%%%%%%%% FILE ATTRIBUTE LIST IS EMPTY %%%%%%%%%%%%%" 2081 &
write(ipt,*)
"%%%%%%% PRINTING GLOBAL ATTRIBUTE LIST %%%%%%%%%" 2086 IF(.NOT.
ASSOCIATED(current))
EXIT 2088 write(chr,
'(I4.4)')cnt
2090 &
write(ipt,*)
"! PRINTING ATTRIBUTE LIST ENTRY #"//chr
2093 previous => previous%NEXT
2094 current => current%NEXT
2097 &
write(ipt,*)
"%%%%%%%%%%% END OF ATTRIBUTE LIST %%%%%%%%%%%%%" 2103 type(
ncvar),
intent(IN) :: LIST
2104 TYPE(
ncattp) ,
POINTER :: CURRENT, PREVIOUS
2106 Character(len=4) :: chr
2108 previous => list%ATTS
2109 current => previous%NEXT
2111 IF(.NOT.
ASSOCIATED(current))
THEN 2113 &
write(ipt,*)
"%%%%%%%% VAIABLE ATTRIBUTE LIST IS EMPTY %%%%%%%%%%" 2117 &
write(ipt,*)
"%%%%%%% PRINTING VARIALBE: "//trim(list%VARNAME)//
"& 2118 &; ATTRIBUTE LIST %%%%%%%%" 2123 IF(.NOT.
ASSOCIATED(current))
EXIT 2125 write(chr,
'(I4.4)')cnt
2127 &
write(ipt,*)
"! PRINTING ATTRIBUTE LIST ENTRY #"//chr
2130 previous => previous%NEXT
2131 current => current%NEXT
2134 &
write(ipt,*)
"%%%%%%%%%%% END OF ATTRIBUTE LIST %%%%%%%%%%%%%" 2140 type(
ncatt),
pointer,
intent(IN) :: ATT
2144 WRITE(ipt,*)
"======== PRINT NCATT TYPE =======" 2145 if(.not.
associated(att))
then 2146 WRITE(ipt,*)
"THIS NCATT HAS NOT BEEN ASSOCIATED" 2147 WRITE(ipt,*)
"======= PRINTED NCATT TYPE ======" 2150 WRITE(ipt,*)
"ATTNAME::"//trim(att%ATTNAME)
2151 WRITE(ipt,*)
"LEN ::",att%LEN
2152 WRITE(ipt,*)
"ATTID ::",att%ATTID
2153 select case(att%XTYPE)
2155 WRITE(ipt,*)
"XYTPE ::CHAR" 2156 IF (.not.
Allocated(att%chr))
then 2157 WRITE(ipt,*)
"CHAR :: Not allocated!" 2159 DO i = 1,
size(att%chr)
2160 WRITE(ipt,*)
"CHAR ::"//trim(att%chr(i))
2164 WRITE(ipt,*)
"XYTPE ::BYTE - TYPE NOT DEFINED" 2166 WRITE(ipt,*)
"XYTPE ::SHORT - TYPE NOT DEFINED" 2168 WRITE(ipt,*)
"XYTPE ::INT" 2169 IF (.not.
Allocated(att%int))
then 2170 WRITE(ipt,*)
"INT :: Not allocated!" 2172 write(ipt,
'(I8)') att%int
2175 WRITE(ipt,*)
"XYTPE ::FLOAT" 2176 IF (.not.
Allocated(att%flt))
then 2177 WRITE(ipt,*)
"FLOAT :: Not allocated!" 2179 write(ipt,
'(ES14.3)') att%flt
2182 WRITE(ipt,*)
"XYTPE ::DOUBLE" 2183 IF (.not.
Allocated(att%DBL))
then 2184 WRITE(ipt,*)
"DOUBLE :: Not allocated!" 2186 write(ipt,
'(ES14.3)') att%dbl
2189 WRITE(ipt,*)
"======= PRINTED NCATT TYPE ======" 2197 FUNCTION new_dim()
RESULT(DIM)
2199 TYPE(
ncdim),
POINTER :: dim
2202 ALLOCATE(dim,stat=status)
2203 if(status/=0)
CALL fatal_error(
"ALLOC_DIM: COULD NOT ALLOCATE!")
2208 dim%UNLIMITED = .false.
2216 TYPE(
ncdimp),
TARGET,
INTENT(OUT):: DIMPOUT
2217 TYPE(
ncdimp),
TARGET,
INTENT(IN) :: DIMPIN
2218 TYPE(
ncdim),
POINTER :: DIM
2219 TYPE(
ncdimp),
POINTER :: CURRENT_IN, PREVIOUS_IN
2220 TYPE(
ncdimp),
POINTER :: CURRENT_OUT, PREVIOUS_OUT
2230 previous_in => dimpin
2231 current_in => previous_in%NEXT
2234 previous_out => dimpout
2235 current_out => previous_out%NEXT
2242 IF(.NOT.
ASSOCIATED(current_in))
THEN 2246 IF(.NOT.
ASSOCIATED(current_in%DIM))
THEN 2247 CALL fatal_error(
"COPY_DIM_LIST: FOUND NULL DIM POINTER IN THE LIST")
2251 previous_out%NEXT%DIM =>
copy_dim(current_in%DIM)
2252 previous_out%NEXT%NEXT => current_out
2255 previous_out => previous_out%NEXT
2258 previous_in => previous_in%NEXT
2259 current_in => current_in%NEXT
2268 FUNCTION copy_dim(DIMIN)
RESULT(DIMOUT)
2270 TYPE(
ncdim),
POINTER,
INTENT(IN) :: dimin
2271 TYPE(
ncdim),
POINTER :: dimout
2274 IF(.not.
Associated(dimin))
CALL fatal_error(
"THE ARGUMENT MUST BE& 2275 & ASSOCIAED FOR COPY_DIM?")
2279 dimout%DIMID = dimin%DIMID
2280 dimout%DIMNAME = dimin%DIMNAME
2281 dimout%DIM = dimin%DIM
2282 dimout%UNLIMITED = dimin%UNLIMITED
2288 TYPE(
ncdimp),
POINTER :: dimp
2292 ALLOCATE(dimp,stat=status)
2293 if(status/=0)
CALL fatal_error(
"ALLOC_NCDIMP COULD NOT ALLOCATE!")
2302 TYPE(
ncfile),
INTENT(INOUT):: LIST
2303 CHARACTER(LEN=*),
INTENT(IN) :: NAME
2304 LOGICAL,
INTENT(OUT) :: FOUND
2306 TYPE(
ncdimp) ,
POINTER :: CURRENT, PREVIOUS
2307 TYPE(
ncvarp) ,
POINTER :: CURRENT_VAR
2309 current_var => list%VARS%NEXT
2311 IF(.NOT.
ASSOCIATED(current_var))
RETURN 2313 IF(.NOT.
ASSOCIATED(current_var%VAR))
THEN 2314 CALL fatal_error(
"DELETE_NCF_DIMP_BYNAME: NULL VAR POINTER IN FILE LIST?")
2319 current_var => current_var%NEXT
2323 previous => list%DIMS
2324 current => previous%NEXT
2328 IF(.NOT.
ASSOCIATED(current))
RETURN 2330 IF( name == current%DIM%DIMNAME )
THEN 2334 previous => previous%NEXT
2335 current => current%NEXT
2340 previous%NEXT => current%NEXT
2349 TYPE(
ncfile),
INTENT(INOUT):: LIST
2350 INTEGER,
INTENT(IN) :: DIMID
2351 LOGICAL,
INTENT(OUT) :: FOUND
2353 TYPE(
ncdimp) ,
POINTER :: CURRENT, PREVIOUS
2354 TYPE(
ncvarp) ,
POINTER :: CURRENT_VAR
2356 current_var => list%VARS%NEXT
2358 IF(.NOT.
ASSOCIATED(current_var))
RETURN 2360 IF(.NOT.
ASSOCIATED(current_var%VAR))
THEN 2361 CALL fatal_error(
"DELETE_NCF_DIMP_BYDIMID: NULL VAR POINTER IN FILE LIST?")
2366 current_var => current_var%NEXT
2371 previous => list%DIMS
2372 current => previous%NEXT
2376 IF(.NOT.
ASSOCIATED(current))
RETURN 2378 IF( dimid == current%DIM%DIMID )
THEN 2382 previous => previous%NEXT
2383 current => current%NEXT
2388 previous%NEXT => current%NEXT
2397 TYPE(
ncfile),
INTENT(INOUT):: LIST
2398 TYPE(
ncdimp) ,
POINTER :: CURRENT, PREVIOUS
2400 previous => list%DIMS
2401 current => previous%NEXT
2403 IF(.NOT.
ASSOCIATED(current))
RETURN 2406 previous%NEXT => current%NEXT
2409 current => previous%NEXT
2418 TYPE(
ncvar),
INTENT(INOUT):: LIST
2419 CHARACTER(LEN=*),
INTENT(IN) :: NAME
2420 LOGICAL,
INTENT(OUT) :: FOUND
2421 TYPE(
ncdimp) ,
POINTER :: CURRENT, PREVIOUS
2423 previous => list%DIMS
2424 current => previous%NEXT
2428 IF(.NOT.
ASSOCIATED(current))
RETURN 2430 IF(.NOT.
ASSOCIATED(current%DIM))
THEN 2432 CALL fatal_error(
"DELETE_VAR_DIMP_BYNAME: VARIABLE HAS UNASSOCIATED DIMENSION IN LIST?")
2435 IF( name == current%DIM%DIMNAME )
THEN 2439 previous => previous%NEXT
2440 current => current%NEXT
2445 previous%NEXT => current%NEXT
2447 IF(current%DIM%DIMID==-1)
THEN 2451 NULLIFY(current%DIM)
2465 TYPE(
ncvar),
INTENT(INOUT):: LIST
2466 INTEGER,
INTENT(IN) :: DIMID
2467 LOGICAL,
INTENT(OUT) :: FOUND
2468 TYPE(
ncdimp) ,
POINTER :: CURRENT, PREVIOUS
2470 previous => list%DIMS
2471 current => previous%NEXT
2475 IF(.NOT.
ASSOCIATED(current))
RETURN 2477 IF(.NOT.
ASSOCIATED(current%DIM))
THEN 2479 CALL fatal_error(
"DELETE_VAR_DIMP_BYDIMID: VARIABLE HAS UNASSOCIATED DIMENSION IN LIST?")
2482 IF( dimid == current%DIM%DIMID )
THEN 2486 previous => previous%NEXT
2487 current => current%NEXT
2492 previous%NEXT => current%NEXT
2494 IF(current%DIM%DIMID==-1)
THEN 2498 NULLIFY(current%DIM)
2507 TYPE(
ncvar),
INTENT(INOUT):: LIST
2508 TYPE(
ncdimp) ,
POINTER :: CURRENT, PREVIOUS
2510 previous => list%DIMS
2511 current => previous%NEXT
2514 IF(.NOT.
ASSOCIATED(current))
RETURN 2516 previous%NEXT => current%NEXT
2517 IF(.NOT.
ASSOCIATED(current%DIM))
THEN 2519 CALL fatal_error(
"VARIABLE HAS UNASSOCIATED DIMENSION IN LIST?")
2522 IF(current%DIM%DIMID==-1)
THEN 2526 NULLIFY(current%DIM)
2531 current => previous%NEXT
2541 DEALLOCATE(dim,stat=status)
2542 IF(status /= 0)
CALL fatal_error(
"KILL_DIM: COULD NOT DEALLOCATE")
2558 TYPE(
ncdim),
POINTER :: DIM
2559 LOGICAL,
INTENT(OUT) :: FOUND
2560 TYPE(
ncfile),
INTENT(INOUT):: LIST
2561 TYPE(
ncdimp),
POINTER :: CURRENT, PREVIOUS
2563 IF(.NOT.
ASSOCIATED(dim))&
2564 &
CALL fatal_error(
"INSERT_NCF_DIMP_BYDIM: DIM NOT ASSOCIATED!")
2566 previous => list%DIMS
2567 current => previous%NEXT
2574 IF(.NOT.
ASSOCIATED(current))
EXIT 2576 IF( dim%DIMNAME == current%DIM%DIMNAME)
THEN 2578 IF(dim%DIM .NE. current%DIM%DIM) &
2579 &
CALL fatal_error(
"ATEMPTED TO ADD DIMENSION NAMED:"//trim(dim%DIMNAME),&
2580 &
"BUT THAT DIMENSION NAME ALREADY EXISTS WITH A DIFFERENT SIZE")
2583 IF(dim%UNLIMITED .AND. .NOT. current%DIM%UNLIMITED)&
2584 &
CALL fatal_error(
"ATEMPTED TO ADD DIMENSION NAMED:& 2585 &"//trim(dim%DIMNAME)//
"; AS UNLIMITED",&
2586 &
"BUT THAT DIMENSION NAME ALREADY EXISTS AS NOT UNLIMITED")
2588 IF(.NOT. dim%UNLIMITED .AND. current%DIM%UNLIMITED)&
2589 &
CALL fatal_error(
"ATEMPTED TO ADD DIMENSION NAMED:& 2590 &"//trim(dim%DIMNAME)//
"; AS NOT UNLIMITED",&
2591 &
"BUT THAT DIMENSION NAME ALREADY EXISTS AS UNLIMITED")
2595 ELSE IF(dim%UNLIMITED .AND. current%DIM%UNLIMITED)
THEN 2596 CALL fatal_error(
"ATTEMPT TO PUT A SECOND UNLIMITED DIMENSIO& 2597 &N IN THE FILE OBJECT",
"DIMENSION NAME: "//trim(dim%DIMNAME))
2599 previous => previous%NEXT
2600 current => current%NEXT
2607 previous%NEXT%DIM => dim
2608 previous%NEXT%NEXT => current
2612 IF(dim%UNLIMITED) list%UNLIMDIMID = dim%DIMID
2673 TYPE(
ncdim),
POINTER :: DIM
2674 LOGICAL,
INTENT(OUT) :: FOUND
2675 TYPE(
ncvar),
INTENT(INOUT):: LIST
2676 TYPE(
ncdimp),
POINTER :: CURRENT, PREVIOUS
2678 IF(.NOT.
ASSOCIATED(dim))&
2679 &
CALL fatal_error(
"INSERT_NCF_DIMP_BYDIM: DIM NOT ASSOCIATED!")
2681 previous => list%DIMS
2682 current => previous%NEXT
2686 IF(.NOT.
ASSOCIATED(current))
THEN 2690 IF( dim%DIMNAME == current%DIM%DIMNAME) found = .true.
2692 IF(dim%UNLIMITED .AND. current%DIM%UNLIMITED) &
2693 &
CALL fatal_error(
"ATTEMPT TO PUT A SECOND UNLIMITED DIMENSIO& 2694 &N IN THE VARIALBE NAME:"//trim(list%VARNAME),&
2695 &
"DIMENSION NAME: "//trim(dim%DIMNAME))
2698 IF(current%DIM%UNLIMITED .AND. list%XTYPE .NE. nf90_char) &
2699 &
CALL fatal_error(
"ATTEMPT TO PUT A DIMENSION AFTER THE UNLIMITED DIMENSIO& 2700 &N IN THE VARIALBE NAME:"//trim(list%VARNAME),&
2701 &
"DIMENSION NAME: "//trim(dim%DIMNAME),
"THE USER MUST & 2702 &ADD DIMENSION IN THE CORRECT ORDER! (UNLIMITEDS GO LAS& 2703 &T IN FORTRAN ORDER)")
2706 previous => previous%NEXT
2707 current => current%NEXT
2713 previous%NEXT%DIM => dim
2714 previous%NEXT%NEXT => current
2721 TYPE(
ncdim),
POINTER :: dim
2722 TYPE(
ncfile),
INTENT(IN) :: list
2723 CHARACTER(LEN=*),
INTENT(IN) :: name
2724 LOGICAL,
INTENT(OUT) :: found
2725 TYPE(
ncdimp) ,
POINTER :: current, previous
2728 previous => list%DIMS
2729 current => previous%NEXT
2733 IF(.NOT.
ASSOCIATED(current))
RETURN 2735 IF( trim(name) == trim(current%DIM%DIMNAME) )
THEN 2740 previous => previous%NEXT
2741 current => current%NEXT
2750 TYPE(
ncdim),
POINTER :: dim
2751 INTEGER,
INTENT(IN) :: dimid
2752 TYPE(
ncfile),
INTENT(IN):: list
2753 LOGICAL,
INTENT(OUT) :: found
2754 TYPE(
ncdimp) ,
POINTER :: current, previous
2757 previous => list%DIMS
2758 current => previous%NEXT
2762 IF(.NOT.
ASSOCIATED(current))
RETURN 2764 IF( dimid == current%DIM%DIMID )
THEN 2769 previous => previous%NEXT
2770 current => current%NEXT
2779 TYPE(
ncdim),
POINTER :: dim
2780 TYPE(
ncfile),
INTENT(IN):: list
2781 LOGICAL,
INTENT(OUT) :: found
2782 TYPE(
ncdimp) ,
POINTER :: current, previous
2785 previous => list%DIMS
2786 current => previous%NEXT
2790 IF(.NOT.
ASSOCIATED(current))
RETURN 2792 IF(current%DIM%UNLIMITED )
THEN 2797 previous => previous%NEXT
2798 current => current%NEXT
2807 TYPE(
ncfile),
INTENT(IN):: list
2809 TYPE(
ncdimp) ,
POINTER :: current, previous
2811 previous => list%DIMS
2812 current => previous%NEXT
2816 IF(.NOT.
ASSOCIATED(current))
RETURN 2818 IF(current%DIM%UNLIMITED )
THEN 2822 previous => previous%NEXT
2823 current => current%NEXT
2832 TYPE(
ncdim),
POINTER :: dim
2833 TYPE(
ncvar),
INTENT(IN) :: list
2834 CHARACTER(LEN=*),
INTENT(IN) :: name
2835 LOGICAL,
INTENT(OUT) :: found
2836 TYPE(
ncdimp) ,
POINTER :: current, previous
2839 previous => list%DIMS
2840 current => previous%NEXT
2844 IF(.NOT.
ASSOCIATED(current))
RETURN 2846 IF( trim(name) == trim(current%DIM%DIMNAME) )
THEN 2851 previous => previous%NEXT
2852 current => current%NEXT
2861 TYPE(
ncdim),
POINTER :: dim
2862 INTEGER,
INTENT(IN) :: dimid
2863 TYPE(
ncvar),
INTENT(IN) :: list
2864 LOGICAL,
INTENT(OUT) :: found
2865 TYPE(
ncdimp) ,
POINTER :: current, previous
2868 previous => list%DIMS
2869 current => previous%NEXT
2873 IF(.NOT.
ASSOCIATED(current))
RETURN 2875 IF( dimid == current%DIM%DIMID )
THEN 2880 previous => previous%NEXT
2881 current => current%NEXT
2890 TYPE(
ncdim),
POINTER :: dim
2891 TYPE(
ncvar),
INTENT(IN) :: list
2892 LOGICAL,
INTENT(OUT) :: found
2893 TYPE(
ncdimp) ,
POINTER :: current, previous
2896 previous => list%DIMS
2897 current => previous%NEXT
2901 IF(.NOT.
ASSOCIATED(current))
RETURN 2903 IF(current%DIM%UNLIMITED )
THEN 2908 previous => previous%NEXT
2909 current => current%NEXT
2918 TYPE(
ncvar),
INTENT(IN) :: list
2920 TYPE(
ncdimp) ,
POINTER :: current, previous
2922 previous => list%DIMS
2923 current => previous%NEXT
2927 IF(.NOT.
ASSOCIATED(current))
RETURN 2929 IF(current%DIM%UNLIMITED )
THEN 2933 previous => previous%NEXT
2934 current => current%NEXT
2943 INTEGER,
POINTER :: dimids(:)
2944 TYPE(
ncdimp),
POINTER :: current, previous
2945 INTEGER :: cnt, status, sz
2947 previous => list%DIMS
2948 current => previous%NEXT
2951 if(status /= 0)
CALL fatal_error(
"VAR_DIMIDS: Can not allocate DIMIDS")
2953 IF(
SIZE(dimids)==0)
RETURN 2958 IF(.NOT.
ASSOCIATED(current))
EXIT 2961 dimids(cnt) = current%DIM%DIMID
2963 previous => previous%NEXT
2964 current => current%NEXT
2969 &(
"VAR_DIMIDS: THE NUMBER OF DIMENSION OBJECTS IN THE VARIABL& 2970 &ES LIST EXCEEDS THE VARIABLES NDIMS PROPERTY")
2976 FUNCTION var_dims(LIST)
RESULT(DIMS)
2978 INTEGER,
POINTER :: dims(:)
2979 TYPE(
ncdimp),
POINTER :: current, previous
2980 INTEGER :: cnt, status
2982 previous => list%DIMS
2983 current => previous%NEXT
2986 if(status /= 0)
CALL fatal_error(
"VAR_DIMS: Can not allocate DIMS")
2988 IF(
SIZE(dims)==0)
RETURN 2993 IF(.NOT.
ASSOCIATED(current))
EXIT 2996 dims(cnt) = current%DIM%DIM
2998 previous => previous%NEXT
2999 current => current%NEXT
3004 &(
"VAR_DIMS: THE NUMBER OF DIMENSION OBJECTS IN THE VARIABL& 3005 &ES LIST EXCEEDS THE VARIABLES NDIMS PROPERTY")
3011 FUNCTION mem_dims(LIST)
RESULT(DIMS)
3013 INTEGER,
POINTER :: dims(:)
3014 TYPE(
ncdimp),
POINTER :: current, previous
3015 INTEGER :: cnt, status
3017 previous => list%DIMS
3018 current => previous%NEXT
3023 if(status /= 0)
CALL fatal_error(
"VAR_DIMS: Can not allocate DIMS")
3025 IF(
SIZE(dims)==0)
RETURN 3030 IF(.NOT.
ASSOCIATED(current))
EXIT 3033 dims(cnt) = current%DIM%DIM
3035 previous => previous%NEXT
3036 current => current%NEXT
3041 &(
"VAR_DIMS: THE NUMBER OF DIMENSION OBJECTS IN THE VARIABL& 3042 &ES LIST EXCEEDS THE VARIABLES NDIMS PROPERTY")
3051 TYPE(
ncfile),
INTENT(IN) :: list
3052 TYPE(
ncdimp) ,
POINTER :: current, previous
3054 previous => list%DIMS
3055 current => previous%NEXT
3058 IF(.NOT.
ASSOCIATED(current))
RETURN 3061 IF(current%DIM%DIM .GT. 1) cnt = cnt + 1
3063 previous => previous%NEXT
3064 current => current%NEXT
3074 TYPE(
ncvar),
INTENT(IN) :: list
3075 TYPE(
ncdimp) ,
POINTER :: current, previous
3077 previous => list%DIMS
3078 current => previous%NEXT
3081 IF(.NOT.
ASSOCIATED(current))
RETURN 3084 IF(current%DIM%DIM .GT. 1) cnt = cnt + 1
3086 previous => previous%NEXT
3087 current => current%NEXT
3096 TYPE(
ncvar),
INTENT(INOUT),
POINTER :: VAR
3097 INTEGER,
OPTIONAL,
INTENT(OUT) :: MYDIMS
3098 TYPE(
ncdim),
POINTER :: DIM
3099 TYPE(
ncvar),
POINTER :: VAR_TMP
3102 INTEGER,
POINTER :: DIMS(:)
3111 & (
"ALLOC_VAR: Unassociated Var!")
3123 IF(.not.
Associated(dims))
CALL fatal_error(
"ALLOC_VAR: Could not allocate Dims?")
3125 IF(
PRESENT(mydims)) mydims = ndims
3132 select case(var%XTYPE)
3135 WRITE(ipt,*)
"XYTPE :: CHAR" 3136 WRITE(ipt,*)
"DIMS ::",dims
3141 ALLOCATE(var%VEC_CHR(dims(2)),stat=status)
3142 if(status /= 0)
CALL fatal_error(
"VAR_DIMS: Can not allocate VEC_CHR")
3145 ALLOCATE(var%SCL_CHR,stat=status)
3146 if(status /= 0)
CALL fatal_error(
"VAR_DIMS: Can not allocate SCL_CHR")
3149 CALL fatal_error(
"Unsupported Character data dimension: 0")
3151 CALL fatal_error(
"Unsupported Character data dimension")
3155 WRITE(ipt,*)
"XYTPE :: BYTE" 3159 WRITE(ipt,*)
"XYTPE :: SHORT" 3164 WRITE(ipt,*)
"XYTPE :: INT" 3165 WRITE(ipt,*)
"dims ::",dims
3171 ALLOCATE(var%FDA_INT(0:dims(1),dims(2),dims(3),dims(4)),stat=status)
3172 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate INT_FDA")
3175 ALLOCATE(var%CUB_INT(0:dims(1),dims(2),dims(3)),stat=status)
3176 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate INT_CUB")
3179 ALLOCATE(var%ARR_INT(0:dims(1),dims(2)),stat=status)
3180 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate INT_ARR")
3183 ALLOCATE(var%VEC_INT(0:dims(1)),stat=status)
3184 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate INT_VEC")
3187 ALLOCATE(var%SCL_INT,stat=status)
3188 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate INT_SCL")
3191 CALL fatal_error(
"Unsupported Integer data dimension")
3197 WRITE(ipt,*)
"XYTPE :: FLOAT" 3198 WRITE(ipt,*)
"dims ::",dims
3203 ALLOCATE(var%FDA_FLT(0:dims(1),dims(2),dims(3),dims(4)),stat=status)
3204 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate FLT_FDA")
3207 ALLOCATE(var%CUB_FLT(0:dims(1),dims(2),dims(3)),stat=status)
3208 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate FLT_CUB")
3211 ALLOCATE(var%ARR_FLT(0:dims(1),dims(2)),stat=status)
3212 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate FLT_ARR")
3215 ALLOCATE(var%VEC_FLT(0:dims(1)),stat=status)
3216 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate FLT_VEC")
3219 ALLOCATE(var%SCL_FLT,stat=status)
3220 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate FLT_SCL")
3223 CALL fatal_error(
"Unsupported Integer data dimension")
3228 WRITE(ipt,*)
"XYTPE :: DOUBLE" 3229 WRITE(ipt,*)
"dims ::",dims
3234 ALLOCATE(var%FDA_DBL(0:dims(1),dims(2),dims(3),dims(4)),stat=status)
3235 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate DBL_FDA")
3238 ALLOCATE(var%CUB_DBL(0:dims(1),dims(2),dims(3)),stat=status)
3239 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate DBL_CUB")
3242 ALLOCATE(var%ARR_DBL(0:dims(1),dims(2)),stat=status)
3243 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate DBL_ARR")
3246 ALLOCATE(var%VEC_DBL(0:dims(1)),stat=status)
3247 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate DBL_VEC")
3250 ALLOCATE(var%SCL_DBL,stat=status)
3251 if(status /= 0)
CALL fatal_error(
"ALLOC_VAR: Can not allocate DBL_SCL")
3254 CALL fatal_error(
"Unsupported Integer data dimension")
3272 TYPE(
ncfile),
INTENT(IN) :: LIST
3273 TYPE(
ncvarp),
POINTER :: CURRENT
3274 TYPE(
ncvar),
POINTER :: VAR
3276 current => list%VARS%NEXT
3278 IF(.NOT.
ASSOCIATED(current))
THEN 3282 IF(.NOT.
ASSOCIATED(current%VAR))
THEN 3283 CALL fatal_error(
"ALLOCATE_ASSOCIATED_VARS: FOUND NULL VAR POINTER IN THE LIST")
3289 IF(
Associated(var%SCL_INT))
THEN 3290 ALLOCATE(var%SCL_INT)
3294 IF(
Associated(var%VEC_INT))
THEN 3295 ALLOCATE(var%VEC_INT(lbound(var%VEC_INT,1):ubound(var%VEC_INT,1)))
3299 IF(
Associated(var%ARR_INT))
THEN 3300 ALLOCATE(var%ARR_INT(lbound(var%ARR_INT,1):ubound(var%ARR_INT,1),&
3301 & lbound(var%ARR_INT,2):ubound(var%ARR_INT,2)) )
3305 IF(
Associated(var%CUB_INT))
THEN 3306 ALLOCATE(var%CUB_INT(lbound(var%CUB_INT,1):ubound(var%CUB_INT,1),&
3307 & lbound(var%CUB_INT,2):ubound(var%CUB_INT,2),&
3308 & lbound(var%CUB_INT,3):ubound(var%CUB_INT,3)))
3312 IF(
Associated(var%FDA_INT))
THEN 3313 ALLOCATE(var%FDA_INT(lbound(var%FDA_INT,1):ubound(var%FDA_INT,1),&
3314 & lbound(var%FDA_INT,2):ubound(var%FDA_INT,2),&
3315 & lbound(var%FDA_INT,3):ubound(var%FDA_INT,3),&
3316 & lbound(var%FDA_INT,4):ubound(var%FDA_INT,4)))
3322 IF(
Associated(var%SCL_FLT))
THEN 3323 ALLOCATE(var%SCL_FLT)
3326 IF(
Associated(var%VEC_FLT))
THEN 3327 ALLOCATE(var%VEC_FLT(lbound(var%VEC_FLT,1):ubound(var%VEC_FLT,1)))
3331 IF(
Associated(var%ARR_FLT))
THEN 3332 ALLOCATE(var%ARR_FLT(lbound(var%ARR_FLT,1):ubound(var%ARR_FLT,1),&
3333 & lbound(var%ARR_FLT,2):ubound(var%ARR_FLT,2)) )
3337 IF(
Associated(var%CUB_FLT))
THEN 3338 ALLOCATE(var%CUB_FLT(lbound(var%CUB_FLT,1):ubound(var%CUB_FLT,1),&
3339 & lbound(var%CUB_FLT,2):ubound(var%CUB_FLT,2),&
3340 & lbound(var%CUB_FLT,3):ubound(var%CUB_FLT,3)))
3344 IF(
Associated(var%FDA_FLT))
THEN 3345 ALLOCATE(var%FDA_FLT(lbound(var%FDA_FLT,1):ubound(var%FDA_FLT,1),&
3346 & lbound(var%FDA_FLT,2):ubound(var%FDA_FLT,2),&
3347 & lbound(var%FDA_FLT,3):ubound(var%FDA_FLT,3),&
3348 & lbound(var%FDA_FLT,4):ubound(var%FDA_FLT,4)))
3353 IF(
Associated(var%SCL_DBL))
THEN 3354 ALLOCATE(var%SCL_DBL)
3357 IF(
Associated(var%VEC_DBL))
THEN 3358 ALLOCATE(var%VEC_DBL(lbound(var%VEC_DBL,1):ubound(var%VEC_DBL,1)))
3361 IF(
Associated(var%ARR_DBL))
THEN 3362 ALLOCATE(var%ARR_DBL(lbound(var%ARR_DBL,1):ubound(var%ARR_DBL,1),&
3363 & lbound(var%ARR_DBL,2):ubound(var%ARR_DBL,2)) )
3367 IF(
Associated(var%CUB_DBL))
THEN 3368 ALLOCATE(var%CUB_DBL(lbound(var%CUB_DBL,1):ubound(var%CUB_DBL,1),&
3369 & lbound(var%CUB_DBL,2):ubound(var%CUB_DBL,2),&
3370 & lbound(var%CUB_DBL,3):ubound(var%CUB_DBL,3)))
3374 IF(
Associated(var%FDA_DBL))
THEN 3375 ALLOCATE(var%FDA_DBL(lbound(var%FDA_DBL,1):ubound(var%FDA_DBL,1),&
3376 & lbound(var%FDA_DBL,2):ubound(var%FDA_DBL,2),&
3377 & lbound(var%FDA_DBL,3):ubound(var%FDA_DBL,3),&
3378 & lbound(var%FDA_DBL,4):ubound(var%FDA_DBL,4)))
3383 IF(
Associated(var%SCL_CHR))
THEN 3384 ALLOCATE(var%SCL_CHR)
3387 IF(
Associated(var%VEC_CHR))
THEN 3388 ALLOCATE(var%VEC_CHR(lbound(var%VEC_CHR,1):ubound(var%VEC_CHR,1)))
3392 current => current%NEXT
3404 TYPE(
ncfile),
INTENT(IN) :: list
3405 TYPE(
ncdimp) ,
POINTER :: current, previous
3407 previous => list%DIMS
3408 current => previous%NEXT
3411 IF(.NOT.
ASSOCIATED(current))
RETURN 3412 previous => previous%NEXT
3413 current => current%NEXT
3423 TYPE(
ncvar),
INTENT(IN) :: list
3424 TYPE(
ncdimp) ,
POINTER :: current, previous
3426 previous => list%DIMS
3427 current => previous%NEXT
3430 IF(.NOT.
ASSOCIATED(current))
RETURN 3431 previous => previous%NEXT
3432 current => current%NEXT
3441 type(
ncfile),
intent(IN) :: LIST
3442 TYPE(
ncdimp),
POINTER :: CURRENT, PREVIOUS
3444 Character(len=4) :: chr
3446 previous => list%DIMS
3447 current => previous%NEXT
3449 IF(.NOT.
ASSOCIATED(current))
THEN 3451 &
write(ipt,*)
"%%%%%%%%%%% FILE DIMENSION LIST IS EMPTY %%%%%%%%%%%%%" 3455 write(ipt,*)
"%%%%%%% PRINTING FILE DIMENSION LIST %%%%%%%%%" 3456 write(ipt,*)
"%%%%%%% FILE NAME: "//trim(list%FNAME)//
" %%%%%%%%%" 3462 IF(.NOT.
ASSOCIATED(current))
EXIT 3464 write(chr,
'(I4.4)')cnt
3466 &
write(ipt,*)
"! PRINTING DIMENSION LIST ENTRY #"//chr
3469 previous => previous%NEXT
3470 current => current%NEXT
3473 &
write(ipt,*)
"%%%%%%%%%%% END OF DIMENSION LIST %%%%%%%%%%%%%" 3479 type(
ncvar),
intent(IN) :: LIST
3480 TYPE(
ncdimp) ,
POINTER :: CURRENT, PREVIOUS
3482 Character(len=4) :: chr
3484 previous => list%DIMS
3485 current => previous%NEXT
3487 IF(.NOT.
ASSOCIATED(current))
THEN 3489 &
write(ipt,*)
"%%%%%%%%%%% VARIABLE DIMENSION LIST IS EMPTY %%%%%%%%%%%%%" 3493 &
write(ipt,*)
"%%%%%%% PRINTING VARIABLE: "//trim(list&
3494 &%VARNAME)//
"; DIMENSION LIST %%%%%%%%%" 3499 IF(.NOT.
ASSOCIATED(current))
EXIT 3501 write(chr,
'(I4.4)')cnt
3503 &
write(ipt,*)
"! PRINTING DIMENSION LIST ENTRY #"//chr
3506 previous => previous%NEXT
3507 current => current%NEXT
3510 &
write(ipt,*)
"%%%%%%%%%%% END OF DIMENSION LIST %%%%%%%%%%%%%" 3516 type(
ncdim),
pointer,
intent(IN) :: DIM
3519 WRITE(ipt,*)
"======== PRINT NCDIM TYPE =======" 3520 if(.not.
associated(dim))
then 3521 WRITE(ipt,*)
"THIS NCDIM HAS NOT BEEN ASSOCIATED" 3522 WRITE(ipt,*)
"======= PRINTED NCDIM TYPE ======" 3525 WRITE(ipt,*)
"DIMNAME ::"//trim(dim%DIMNAME)
3526 WRITE(ipt,*)
"DIMID ::",dim%DIMID
3527 WRITE(ipt,*)
"DIMLEN ::",dim%DIM
3528 WRITE(ipt,*)
"UNLIMITED::",dim%UNLIMITED
3529 WRITE(ipt,*)
"======= PRINTED NCDIM TYPE ======" 3553 type(
ncvar),
POINTER :: var
3554 type(
ncvar),
POINTER :: ret
3555 type(
ncdim),
POINTER :: dim
3558 &
write(ipt,*)
"START VAR_PLUS_DIM" 3561 & (
"VAR_PLUS_DIM: THE VAR OBJECT ARGUMENT IS NOT ASSOC& 3562 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3565 & (
"VAR_PLUS_DIM: THE DIM OBJECT ARGUMENT IS NOT ASSOC& 3566 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3569 (
"CAN NOT ADD DIMENSIONS TO A VARIABLE OBJECT ALREADY IN A FILE")
3584 &
write(ipt,*)
"END VAR_PLUS_DIM" 3591 type(
ncvar),
POINTER :: var
3592 type(
ncatt),
POINTER :: att
3593 type(
ncvar),
POINTER :: ret
3596 &
write(ipt,*)
"START VAR_PLUS_ATT" 3599 & (
"VAR_PLUS_ATT: THE VAR OBJECT ARGUMENT IS NOT ASSOC& 3600 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3603 & (
"VAR_PLUS_ATT: THE ATT OBJECT ARGUMENT IS NOT ASSOC& 3604 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3607 (
"CAN NOT ADD ATTRIBUTES TO A VARIABLE OBJECT ALREADY IN A FILE")
3611 IF(found)
CALL fatal_error(
"ERROR ADDIND ATTRIBUTE TO VARIABLE",&
3612 &
"THE ATTRIBUTE: "//trim(att%ATTNAME)//
"; ALREADY EXISTS",&
3613 &
"IN THE VARIABLE: "//trim(var%VARNAME))
3621 &
write(ipt,*)
"END VAR_PLUS_ATT" 3634 type(
ncvar),
POINTER :: var
3635 type(
ncfile),
POINTER :: ret
3636 type(
ncfile),
POINTER :: ncf
3637 type(
ncdim),
POINTER :: vdim, gdim
3638 type(
ncdimp),
POINTER :: current
3641 CHARACTER(LEN=NF90_MAX_NAME+1):: name
3643 &
write(ipt,*)
"START NCF_PLUS_VAR" 3646 & (
"NCF_PLUS_VAR: THE FILE OBJECT ARGUMENT IS NOT ASSOC& 3647 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3650 & (
"NCF_PLUS_VAR: THE VAR OBJECT ARGUMENT IS NOT ASSOC& 3651 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3655 (
"CAN NOT ADD VARIABLE TO FILE OBJECTS ALREADY CONNECTED TO A NETCDF FILE")
3658 (
"CAN NOT ADD VARIABLE TO A FILE OBJECT WHEN IT IS ALREADY CONNECTED")
3662 current=>var%DIMS%NEXT
3664 IF(.NOT.
ASSOCIATED(current))
EXIT 3666 IF (.NOT.
ASSOCIATED(current%DIM)) &
3667 &
CALL fatal_error(
"NCF_PLUS_VAR: ATTEMPT TO ADD VARIABLE & 3668 &THAT HAS UNASSOCIATED DIM POINTERS IN ITS LINK LIST!")
3683 IF(.NOT. f)
CALL fatal_error(
"NCF_PLUS_VAR: CAN'T FIND D& 3684 &IMENSION BUT IT WAS THERE A MINUTE AGO?")
3686 IF (.not.
associated(vdim,
target = gdim))
THEN 3699 current => current%NEXT
3705 IF(found)
CALL fatal_error(
"NCF_PLUS_VAR: THIS VARIABLE ALREADY EX& 3706 &ISTS IN THE FILE. YOU CAN'T ADD IT AGAIN!", &
3707 &
"VARIABLE NAME: "//trim(var%VARNAME))
3718 var%NCID => ncf%NCID
3719 var%CONNECTED=.true.
3726 &
write(ipt,*)
"END NCF_PLUS_VAR" 3733 type(
ncatt),
POINTER :: att
3734 type(
ncfile),
POINTER :: ret
3735 type(
ncfile),
POINTER :: ncf
3738 &
write(ipt,*)
"START NCF_PLUS_ATT" 3741 & (
"NCF_PLUS_ATT: THE FILE OBJECT ARGUMENT IS NOT ASSOC& 3742 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3745 & (
"NCF_PLUS_ATT: THE ATT OBJECT ARGUMENT IS NOT ASSOC& 3746 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3749 (
"CAN NOT ADD ATTRIBUTE TO FILE OBJECTS ALREADY CONNECTED TO A NETCDF FILE")
3753 IF(found)
CALL fatal_error(
"ERROR ADDIND ATTRIBUTE TO FILE",&
3754 &
"THE ATTRIBUTE: "//trim(att%ATTNAME)//
"; ALREADY EXISTS",&
3755 &
"IN THE FILE: "//trim(ncf%FNAME))
3763 &
write(ipt,*)
"END NCF_PLUS_ATT" 3769 type(
ncdim),
POINTER :: dim
3770 type(
ncfile),
POINTER :: ret
3771 type(
ncfile),
POINTER :: ncf
3774 &
write(ipt,*)
"START NCF_PLUS_DIM" 3777 & (
"NCF_PLUS_DIM: THE FILE OBJECT ARGUMENT IS NOT ASSOC& 3778 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3781 & (
"NCF_PLUS_DIM: THE DIM OBJECT ARGUMENT IS NOT ASSOC& 3782 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3786 (
"CAN NOT ADD DIMENSION TO FILE OBJECTS ALREADY CONNECTED TO A NETCDF FILE")
3791 IF(found)
CALL fatal_error(
"ERROR ADDIND DIMENSION TO FILE",&
3792 &
"THE DIMENSION: "//trim(dim%DIMNAME)//
"; ALREADY EXISTS",&
3793 &
"IN THE FILE: "//trim(ncf%FNAME))
3802 &
write(ipt,*)
"END NCF_PLUS_DIM" 3813 type(
ncfile),
POINTER :: ncf1
3814 type(
ncfile),
POINTER :: ncf2
3815 type(
ncfile),
POINTER :: ret
3817 type(
ncvarp),
POINTER :: current_var
3818 type(
ncvar),
POINTER :: var
3820 type(
ncdimp),
POINTER :: current_dim
3821 type(
ncdim),
POINTER :: dim1
3822 type(
ncdim),
POINTER :: dim2
3824 TYPE(
ncattp),
POINTER :: current_att
3826 TYPE(
ncatt),
POINTER :: attt
3829 CHARACTER(LEN=NF90_MAX_NAME+1):: name
3830 LOGICAL found1, found2
3833 &
write(ipt,*)
"START NCF_PLUS_NCF" 3837 & (
"NCF_PLUS_NCF: THE FIRST FILE OBJECT ARGUMENT IS NOT ASSOC& 3838 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3841 & (
"NCF_PLUS_NCF: THE SECOND FILE OBJECT ARGUMENT IS NOT ASSOC& 3842 &IATED. THIS IS ILLEGAL.",
"THE DEPARTMENT OF FVCOM SECURITY HAS BEEN CONTACTED")
3844 IF(ncf1%CONNECTED .OR. ncf2%CONNECTED)
CALL fatal_error&
3845 (
"CAN NOT COMBINE FILE OBJECTS ALREADY CONNECTED TO A NETCDF FILE")
3847 current_var => ncf2%VARS%NEXT
3850 IF(.NOT.
ASSOCIATED(current_var))
EXIT 3852 IF (.NOT.
ASSOCIATED(current_var%VAR)) &
3853 &
CALL fatal_error(
"NCF_PLUS_NCF: ATTEMPT TO ADD A FILE & 3854 &THAT HAS UNASSOCIATED VAR POINTER IN ITS LINK LIST!")
3859 var%CONNECTED=.false.
3862 current_dim=>var%DIMS%NEXT
3864 IF(.NOT.
ASSOCIATED(current_dim))
EXIT 3866 IF (.NOT.
ASSOCIATED(current_dim%DIM)) &
3867 &
CALL fatal_error(
"NCF_PLUS_NCF: ATTEMPT TO ADD VARIABLE & 3868 &THAT HAS UNASSOCIATED DIM POINTERS IN ITS LINK LIST!")
3871 dim2 => current_dim%DIM
3883 current_dim%DIM =>
find_dim(ncf1,dim2%DIMNAME,found2)
3884 IF (.NOT. found2)
CALL fatal_error(
"NCF_PLUS_NCF: CAN'T FIN& 3885 &D DIMENSION IN FILE BUT IT WAS HERE A SECOND AGO?")
3890 current_dim => current_dim%NEXT
3896 IF(found1)
CALL fatal_error(
"NCF_PLUS_VAR: THIS VARIABLE ALREADY EX& 3897 &ISTS IN THE FILE. YOU CAN'T ADD IT AGAIN!", &
3898 &
"VARIABLE NAME: "//trim(var%VARNAME))
3901 var%NCID => ncf1%NCID
3902 var%CONNECTED=.true.
3904 current_var => current_var%NEXT
3935 current_att => ncf2%ATTS%NEXT
3937 IF(.NOT.
ASSOCIATED(current_att))
EXIT 3939 IF (.NOT.
ASSOCIATED(current_att%ATT)) &
3940 &
CALL fatal_error(
"NCF_PLUS_NCF: ATTEMPT TO ADD A FILE & 3941 &THAT HAS UNASSOCIATED ATT POINTER IN ITS LINK LIST!")
3948 current_att => current_att%NEXT
3959 &
write(ipt,*)
"END NCF_PLUS_NCF" 3968 type(
ncfile),
POINTER :: ncf
3971 IF (.NOT.
ASSOCIATED(ncflist))
THEN 3977 IF(found)
CALL fatal_error(
"NCFLIST_PLUS_NCF: THIS FILE ALREADY EX& 3978 &ISTS IN THE FILELIST. YOU CAN'T ADD IT AGAIN!", &
3979 &
"FILE NAME: "//trim(ncf%FNAME))
integer function, dimension(:), pointer var_dimids(LIST)
type(ncvar) function, pointer var_plus_dim(VAR, DIM)
subroutine insert_filep_byncf(LIST, NCF, FOUND)
subroutine insert_ncf_dimp_bydim(LIST, DIM, FOUND)
subroutine delete_file_list(LIST)
subroutine print_file_list(LIST)
subroutine print_ncf_att_list(LIST)
integer function count_var_dim_list(LIST)
type(ncfile) function, pointer ncf_plus_var(NCF, VAR)
integer, parameter tmtype_char_date
integer function, dimension(:), pointer var_dims(LIST)
subroutine kill_filehead(FILEHEAD)
type(ncdim) function, pointer find_ncf_dim_bydimid(LIST, DIMID, FOUND)
type(ncvar) function, pointer var_plus_att(VAR, ATT)
type(ncvar) function, pointer find_var_byvarid(LIST, VARID, FOUND)
subroutine delete_var_attp_list(LIST)
type(ncfile) function, pointer new_file(fname)
integer function count_ncf_att_list(LIST)
logical function dbg_set(vrb)
type(ncfile) function, pointer copy_file(NCFIN)
subroutine delete_ncf_dimp_byname(LIST, NAME, FOUND)
subroutine print_var_att_list(LIST)
subroutine delete_filep_byname(LIST, NAME, FOUND)
subroutine print_att(ATT)
subroutine insert_varp_byvar(LIST, VAR, FOUND)
integer function count_var_ns_dim_list(LIST)
subroutine allocate_associated_vars(LIST)
subroutine delete_var_dimp_byname(LIST, NAME, FOUND)
integer, parameter char_max_attlen
subroutine copy_att_list(ATTPOUT, ATTPIN)
subroutine print_real_time(mjd, IPT, char, TZONE)
type(ncfilelist) function, pointer ncflist_plus_ncf(NCFLIST, NCF)
subroutine delete_var_attp_byname(LIST, NAME, FOUND)
subroutine delete_var_dimp_list(LIST)
subroutine delete_filep_byncid(LIST, NCID, FOUND)
subroutine print_file(NCF)
type(ncvarp) function, pointer new_varp()
type(ncfilep) function, pointer new_filep()
logical function has_unlimited_var(LIST)
subroutine print_ftime(FTIME)
integer function count_var_list(LIST)
integer function count_unlimited_vars(LIST)
integer, parameter tmtype_int2_mjd
type(ncatt) function, pointer copy_att(ATTIN)
type(ncatt) function, pointer new_att()
type(ncftime) function, pointer new_ftime()
subroutine print_ncf_dim_list(LIST)
type(ncfile) function, pointer ncf_plus_dim(NCF, DIM)
subroutine delete_ncf_dimp_bydimid(LIST, DIMID, FOUND)
type(ncfile) function, pointer find_file_byname(LIST, NAME, FOUND)
integer, parameter tmtype_float_days
type(ncatt) function, pointer find_var_att_byattid(LIST, ATTID, FOUND)
subroutine delete_ncf_attp_byname(LIST, NAME, FOUND)
type(ncvar) function, pointer new_var()
subroutine copy_ftime(FTIME_OUT, FTIME_IN)
integer, parameter dbg_sbrio
integer function count_ncf_ns_dim_list(LIST)
subroutine warning(ER1, ER2, ER3, ER4)
subroutine delete_varp_byname(LIST, NAME, FOUND)
subroutine insert_var_attp_byatt(LIST, ATT, FOUND)
integer function, dimension(:), pointer mem_dims(LIST)
type(ncfilelist) function, pointer new_filehead()
logical function has_unlimited_ncf(LIST)
subroutine delete_var_list(LIST)
subroutine delete_var_attp_byattid(LIST, ATTID, FOUND)
type(ncdim) function, pointer copy_dim(DIMIN)
type(ncdimp) function, pointer new_dimp()
logical use_real_world_time
subroutine kill_file(NCF)
type(ncdim) function, pointer find_var_dim_unlimited(LIST, FOUND)
type(ncatt) function, pointer find_ncf_att_byname(LIST, NAME, FOUND)
subroutine alloc_var(VAR, MYDIMS)
subroutine print_var_list(LIST)
subroutine print_var(VAR)
subroutine delete_var_dimp_bydimid(LIST, DIMID, FOUND)
type(ncdim) function, pointer find_var_dim_byname(LIST, NAME, FOUND)
subroutine insert_var_dimp_bydim(LIST, DIM, FOUND)
subroutine fatal_error(ER1, ER2, ER3, ER4)
subroutine delete_varp_byvarid(LIST, VARID, FOUND)
type(ncatt) function, pointer find_var_att_byname(LIST, NAME, FOUND)
type(ncattp) function, pointer new_attp()
subroutine delete_ncf_attp_list(LIST)
type(ncfile) function, pointer ncf_plus_ncf(NCF1, NCF2)
subroutine delete_ncf_dimp_list(LIST)
integer, parameter tmtype_unknown
integer, parameter tmtype_float_seconds
integer function count_ncf_dim_list(LIST)
type(ncvar) function, pointer copy_var(VARIN)
type(ncfile) function, pointer ncf_plus_att(NCF, ATT)
type(ncdim) function, pointer find_var_dim_bydimid(LIST, DIMID, FOUND)
type(ncatt) function, pointer find_ncf_att_byattid(LIST, ATTID, FOUND)
type(ncvar) function, pointer reference_var(VARIN)
subroutine copy_dim_list(DIMPOUT, DIMPIN)
integer, parameter dbg_sbr
subroutine print_var_dim_list(LIST)
subroutine delete_ncf_attp_byattid(LIST, ATTID, FOUND)
type(ncdim) function, pointer find_ncf_dim_unlimited(LIST, FOUND)
subroutine print_dim(DIM)
integer function count_var_att_list(LIST)
type(ncdim) function, pointer find_ncf_dim_byname(LIST, NAME, FOUND)
subroutine print_time(mjd, IPT, char)
type(ncvar) function, pointer find_var_byname(LIST, NAME, FOUND)
integer, parameter dbg_log
integer function count_file_list(LIST)
subroutine insert_ncf_attp_byatt(LIST, ATT, FOUND)
type(ncfile) function, pointer find_file_byncid(LIST, NCID, FOUND)
type(ncdim) function, pointer new_dim()