52 character(len=80),
parameter ::
days_units =
'days since 0.0' 53 character(len=80),
parameter ::
mjd_units =
'days since 1858-11-17 00:00:00' 54 character(len=80),
parameter ::
msec_units =
'msec since 00:00:00' 55 character(len=80),
parameter ::
fmat =
'modified julian day (MJD)' 56 character(len=80),
parameter ::
rfmat =
'defined reference date' 211 INTEGER,
intent(in) :: status
212 CHARACTER(len=*),
intent(in) :: programer_msg
213 CHARACTER(len=150) :: msg
214 LOGICAL :: ERROR=.false.
215 if(status /=nf90_noerr)&
216 &
CALL fatal_error(trim(programer_msg),
"NF90ERROR::"//trim(nf90_strerror(status)))
222 TYPE(
ncfile),
POINTER :: NCF
223 CHARACTER(LEN=*),
INTENT(IN):: NAME
241 TYPE(
ncfile),
intent(inout) :: NCF
242 CHARACTER(LEN=120) :: errmsg
244 if(dbg_set(dbg_sbr)) &
245 &
write(
ipt,*)
"STARTING NC_OPEN" 247 if (ncf%WRITABLE)
then 248 errmsg=
"File named: "//ncf%fname//
"; Can not be opend by nf90_open" 249 status = nf90_open(trim(ncf%fname), nf90_write, ncf%ncid)
253 errmsg=
"File: "//trim(ncf%fname)//
"; Can not be opend by nf90_open" 254 status = nf90_open(trim(ncf%fname), nf90_nowrite, ncf%ncid)
260 if(dbg_set(dbg_io)) &
261 &
write(
ipt,*)
"Opened File: ",trim(ncf%FNAME)
263 if(dbg_set(dbg_sbr)) &
264 &
write(
ipt,*)
"END NC_OPEN" 270 TYPE(
ncfile),
intent(inout) :: NCF
271 CHARACTER(LEN=120) :: errmsg
273 if(dbg_set(dbg_sbr)) &
274 &
write(
ipt,*)
"STARTING NC_CREATE" 276 errmsg=
"File named: "//ncf%fname//
"; Can not be created by nf90_create" 277 status = nf90_create(trim(ncf%fname),nf90_64bit_offset,ncf%ncid)
278 if(status/= nf90_eexist)
then 281 CALL fatal_error(
"The file: "//trim(ncf%fname)//
"; already exists",&
282 &
"FVCOM will not overwrite old output files. You must move& 283 & or delete them first")
285 ncf%writable = .true.
287 ncf%INDEFMODE = .true.
288 ncf%CONNECTED=.false.
290 IF (
ASSOCIATED(ncf%FTIME) )
THEN 291 ncf%FTIME%NEXT_STKCNT = 0
296 if(dbg_set(dbg_io)) &
297 &
write(
ipt,*)
"Created File: ",trim(ncf%FNAME)
298 if(dbg_set(dbg_sbr)) &
299 &
write(
ipt,*)
"END NC_CREATE" 305 TYPE(
ncfile),
intent(INOUT) :: NCF
306 CHARACTER(LEN=120) :: errmsg
308 if(dbg_set(dbg_sbr)) &
309 &
write(
ipt,*)
"STARTING NC_CLOSE" 310 errmsg=
"File:"//trim(ncf%fname)//
"; Not open or Already closed file" 311 status = nf90_close(ncf%ncid)
315 ncf%INDEFMODE = .false.
316 if(dbg_set(dbg_io)) &
317 &
write(
ipt,*)
"Closed File: ",trim(ncf%FNAME)
318 if(dbg_set(dbg_sbr)) &
319 &
write(
ipt,*)
"END NC_CLOSE" 326 TYPE(
ncfile),
POINTER :: NCF
327 TYPE(
ncdim),
pointer :: DIM
330 CHARACTER(LEN=120) :: errmsg
332 if(dbg_set(dbg_sbr)) &
333 &
write(
ipt,*)
"STARTING NC_REFRESH" 335 IF(.NOT.
ASSOCIATED(ncf))
CALL fatal_error&
336 (
"NC_REFRESH: NCF NOT ASSICATED!")
338 IF(dbg_set(dbg_io))
write(
ipt,*)
"====== REFRESHING FILE NAME: "//trim(ncf%FNAME)
344 IF(.not. found)
RETURN 346 status = nf90_inquire_dimension(ncf%NCID,dim%DIMID,dim%DIMNAME, dim%DIM)
347 errmsg=
"Can not get dimensions: "//trim(ncf%FNAME)
350 IF(
ASSOCIATED(ncf%FTIME))
THEN 351 ncf%FTIME%STK_LEN = dim%DIM
353 CALL fatal_error(
"NC_REFRESH: FTIME NOT ASSOCIATED FOR FILE:"//&
358 if(dbg_set(dbg_sbr)) &
359 &
write(
ipt,*)
"END NC_REFRESH" 367 TYPE(
ncfile),
POINTER :: NCF
368 TYPE(
ncvar),
pointer :: VAR
369 TYPE(
ncatt),
pointer :: ATT
370 TYPE(
ncdim),
pointer :: DIM
371 CHARACTER(LEN=120) :: errmsg
372 integer :: status,i,j, len, nvars, ndims, natts, unlimDimid
373 integer,
dimension(NF90_MAX_VAR_DIMS):: dimids
374 if(dbg_set(dbg_sbr)) &
375 &
write(
ipt,*)
"STARTING NC_LOAD" 377 IF(dbg_set(dbg_io))
write(
ipt,*)
"====== LOADING FILE NAME: "//trim(ncf%FNAME)
379 IF(ncf%CONNECTED)
CALL fatal_error(
"CAN NOT LOAD A FILE WHEN ALREADY& 380 & CONNECTED!",
"FILE NAME: "//trim(ncf%FNAME))
383 status = nf90_inquire(ncf%NCID, ndims, nvars, natts, unlimdimid)
384 errmsg=
"Can not get file contents: "//trim(ncf%FNAME)
389 if(dbg_set(dbg_io))
write(
ipt,*)
"====== READING FILE DIMENSIONS:" 392 IF(dim%DIMID .EQ. unlimdimid) dim%UNLIMITED = .true.
393 if(dbg_set(dbg_io))
write(
ipt,*)
" "//trim(dim%DIMNAME)
397 if(unlimdimid .NE. ncf%UNLIMDIMID)
then 401 &(
"NC_LOAD: UNLIMITED DIMENSION ID FROM nf90_inquire does not m& 402 &atch the file objects UNLIMDIMID?")
407 call fatal_error(
"The number of dimensions in the file does not m& 408 &atch the number loaded in the file object.")
414 if(dbg_set(dbg_io))
write(
ipt,*)
"====== READING FILE ATTRIBUTES:" 417 if(dbg_set(dbg_io))
write(
ipt,*)
" "//trim(att%ATTNAME)
423 call fatal_error(
"The number of attributes in the file does not m& 424 &atch the number loaded in the file object.")
431 if(dbg_set(dbg_io))
write(
ipt,*)
"====== READING FILE VARIABLES:" 441 call fatal_error(
"The number of variables in the file does not m& 442 &atch the number loaded in the file object.")
452 ncf%CONNECTED = .true.
454 if(dbg_set(dbg_io))
write(
ipt,*)
"====== FINISHED LOADING FILE NAME: "//trim(ncf%FNAME)
456 if(dbg_set(dbg_sbr)) &
457 &
write(
ipt,*)
"END NC_LOAD" 464 TYPE(
ncvar),
pointer :: VAR
465 TYPE(
ncatt),
pointer :: ATT
466 TYPE(
ncdim),
pointer :: DIM
467 integer :: attid, dimid, varid
468 CHARACTER(LEN=120) :: errmsg
469 integer :: status,i,j, len
472 if(dbg_set(dbg_sbr)) &
473 &
write(
ipt,*)
"STARTING NC_SAVE" 475 IF(ncf%CONNECTED)
CALL fatal_error(
"CAN NOT SAVE A FILE WHEN ALREADY& 476 & CONNECTED!",
"FILE NAME: "//trim(ncf%FNAME))
478 IF(.not. ncf%WRITABLE)
CALL fatal_error(
"CAN NOT SAVE A FILE WHEN ALREADY& 479 & CONNECTED!",
"FILE NAME: "//trim(ncf%FNAME))
481 IF (.NOT. ncf%INDEFMODE)
THEN 482 status = nf90_redef(ncf%ncid)
483 if(status /= nf90_noerr) &
484 &
CALL fatal_error(
"EXPECTED FILE: "//trim(ncf%FNAME)//
"; to be available & 485 &for REDEF from an open statement.")
486 ncf%INDEFMODE = .true.
491 if(dbg_set(dbg_io))
write(
ipt,*)
"====== WRITING FILE DIMENSIONS:" 497 if(dbg_set(dbg_io))
write(
ipt,*)
"====== WRITING FILE GLOBAL ATTRIBUTES:" 500 IF (.NOT. found)
THEN 503 &(
"NC_SAVE: COULD NOT FIND THE GLOBAL ATTRIBUTE WITH CORRECT ATTID W& 504 &HILE PUTTING THE ATTRIBUTE IN THE FILE")
511 if(dbg_set(dbg_io))
write(
ipt,*)
"====== DEFINE FILE VARIABLES:" 516 status = nf90_enddef(ncf%NCID)
517 errmsg=
"Can not ENDDEF MODE for file: "//trim(ncf%FNAME)
520 ncf%INDEFMODE = .false.
521 ncf%CONNECTED = .true.
523 if(dbg_set(dbg_sbr)) &
524 &
write(
ipt,*)
"END NC_SAVE" 530 TYPE(
ncfile),
INTENT(IN) :: ncf
531 TYPE(
ncdim),
POINTER :: dim
532 INTEGER,
intent(in) :: dimid
534 CHARACTER(LEN=120) :: errmsg
536 if(dbg_set(dbg_sbr)) &
537 &
write(
ipt,*)
"START NC_GET_DIM" 542 status = nf90_inquire_dimension(ncf%NCID,dimid,dim%DIMNAME, dim%DIM)
543 errmsg=
"Can not get dimensions: "//trim(ncf%FNAME)
548 if(dbg_set(dbg_sbr)) &
549 &
write(
ipt,*)
"END NC_GET_DIM" 556 TYPE(
ncdim),
POINTER :: dim
557 INTEGER,
INTENT(IN) :: len
559 character(len=*),
intent(in) :: name
564 IF(len == nf90_unlimited) dim%UNLIMITED=.true.
571 TYPE(
ncdim),
POINTER :: dim
572 INTEGER,
INTENT(IN) :: len
574 INTEGER,
PARAMETER :: tag = 40003
575 INTEGER :: source, dest, ierr
577 character(len=*),
intent(in) :: name
584 IF(len == nf90_unlimited) dim%UNLIMITED=.true.
595 INTEGER,
INTENT(IN) :: DIMID
596 TYPE(
ncfile),
INTENT(INOUT):: NCF
597 TYPE(
ncdim),
POINTER :: DIM
598 INTEGER :: status, tmp
603 IF (.NOT. found)
THEN 606 &(
"NC_DEF_DIM: COULD NOT FIND THE FILE DIMENSION WITH CORRECT DIMID W& 607 &HILE DEFINING THE DIMENSION IN THE FILE")
610 IF(dim%UNLIMITED)
THEN 611 status = nf90_def_dim(ncf%ncid,dim%dimname, nf90_unlimited,tmp)
613 status = nf90_def_dim(ncf%ncid,dim%dimname, dim%dim, tmp)
616 CALL handle_ncerr(status,
"ERROR DURING DEF_DIM, DIMNAME:"//trim(dim%DIMNAME))
618 if (tmp .NE. dim%dimid)
CALL fatal_error &
619 &(
"NC_DEF_DIM: NF90_DEF_DIM returned a dimension id which",&
620 &
"is different from that set in the dimension object!",&
621 & trim(ncf%FNAME)//
" : "//trim(dim%DIMNAME))
628 TYPE(
ncatt),
POINTER :: att
629 character(len=*),
intent(in) :: name
630 character(len=*),
intent(in) :: values
635 att%ATTname = trim(name)
636 att%xtype = nf90_char
637 att%LEN = len_trim(values)
646 TYPE(
ncatt),
POINTER :: att
647 character(len=*),
intent(in) :: name
648 character(len=*),
ALLOCATABLE,
intent(in) :: values(:)
653 att%ATTname = trim(name)
654 att%xtype = nf90_char
656 ALLOCATE(att%CHR(
size(values)))
665 TYPE(
ncatt),
POINTER :: att
666 character(len=*),
intent(in) :: name
667 character(len=*),
intent(in) :: values
668 integer :: ierr, len, dest,source
669 integer,
parameter :: tag = 40004
674 att%ATTname = trim(name)
675 att%xtype = nf90_char
679 att%CHR = trim(values)
680 att%LEN = len_trim(values)
696 TYPE(
ncatt),
POINTER :: att
697 character(len=*),
intent(in) :: name
698 character(len=*),
ALLOCATABLE,
intent(in) :: values(:)
699 integer :: ierr, len, dest,source,i,csize
700 integer,
parameter :: tag = 40004
708 att%ATTname = trim(name)
709 att%xtype = nf90_char
711 IF (.NOT.
ioproc .and.
allocated(values))
THEN 712 ALLOCATE(att%CHR(
SIZE(values)))
720 IF(.not.
allocated(att%chr))
call kill_att(att)
728 TYPE(
ncatt),
POINTER :: att
729 character(len=*),
intent(in) :: name
730 INTEGER,
allocatable,
intent(in) :: values(:)
732 if(.not.
allocated(values)) &
733 &
Call fatal_error(
"Can not make attribute: "//trim(name),&
734 &
"argument 'values' passed must be allocated and contain data")
739 att%ATTname = trim(name)
741 att%LEN =
size(values)
742 allocate(att%int(att%len))
750 TYPE(
ncatt),
POINTER :: att
751 character(len=*),
intent(in) :: name
752 INTEGER,
intent(in) :: values
757 att%ATTname = trim(name)
760 allocate(att%int(att%len))
768 TYPE(
ncatt),
POINTER :: att
769 character(len=*),
intent(in) :: name
770 REAL(spa),
intent(in) :: values
775 att%ATTname = trim(name)
776 att%xtype = nf90_float
778 allocate(att%flt(att%len))
786 TYPE(
ncatt),
POINTER :: att
787 character(len=*),
intent(in) :: name
788 REAL(spa),
allocatable,
intent(in) :: values(:)
790 if(.not.
allocated(values)) &
791 &
Call fatal_error(
"Can not make attribute: "//trim(name),&
792 &
"argument 'values' passed must be allocated and contain data")
797 att%ATTname = trim(name)
798 att%xtype = nf90_float
799 att%LEN =
size(values)
800 allocate(att%flt(att%len))
808 TYPE(
ncatt),
POINTER :: att
809 character(len=*),
intent(in) :: name
810 REAL(dp),
intent(in) :: values
815 att%ATTname = trim(name)
816 att%xtype = nf90_double
818 allocate(att%dbl(att%len))
826 TYPE(
ncatt),
POINTER :: att
827 character(len=*),
intent(in) :: name
828 REAL(dp),
allocatable,
intent(in) :: values(:)
830 if(.not.
allocated(values)) &
831 &
Call fatal_error(
"Can not make attribute: "//trim(name),&
832 &
"argument 'values' passed must be allocated and contain data")
837 att%ATTname = trim(name)
838 att%xtype = nf90_double
839 att%LEN =
size(values)
840 allocate(att%dbl(att%len))
848 TYPE(
ncfile),
INTENT(IN) :: ncf
849 TYPE(
ncatt),
pointer :: att
850 integer,
intent(in) :: attid
852 CHARACTER(LEN=120) :: errmsg
853 CHARACTER(LEN=NF90_MAX_NAME+1) :: name
855 if(dbg_set(dbg_sbr)) &
856 &
write(
ipt,*)
"START NC_GET_GATT" 858 status=nf90_inq_attname(ncf%NCID,nf90_global,attid,name)
859 errmsg=
"Can not get a file's global attribute name: "//trim(ncf%FNAME)
863 att%attname=trim(name)
866 status = nf90_inquire_attribute &
867 & (ncf%NCID,nf90_global,trim(att%ATTNAME),att%XTYPE,att%LEN)
871 if(dbg_set(dbg_sbr)) &
872 &
write(
ipt,*)
"END NC_GET_GATT" 878 TYPE(
ncvar),
INTENT(IN) :: var
879 TYPE(
ncatt),
pointer :: att
880 integer,
intent(in) :: attid
882 CHARACTER(LEN=120) :: errmsg
883 CHARACTER(LEN=NF90_MAX_NAME+1) :: name
885 if(dbg_set(dbg_sbr)) &
886 &
write(
ipt,*)
"START NC_GET_VATT" 888 status=nf90_inq_attname(var%NCID,var%VARID,attid,name)
889 errmsg=
"Can not get variable attribute name: "//trim(var%VARNAME)
893 att%attname=trim(name)
896 status = nf90_inquire_attribute &
897 & (var%NCID,var%VARID,trim(att%ATTNAME),att%XTYPE,att%LEN)
901 if(dbg_set(dbg_sbr)) &
902 &
write(
ipt,*)
"END NC_GET_VATT" 908 integer,
intent(in) :: ncid
909 integer,
intent(in) :: varid
910 type(
ncatt),
pointer :: ATT
912 CHARACTER(LEN=120) :: errmsg
913 CHARACTER(LEN=4) :: clen
915 if(dbg_set(dbg_sbr)) &
916 &
write(
ipt,*)
"START READ_ATT_TYPE" 919 write(clen,
'(I4.4)') len
921 select case(att%XTYPE)
923 allocate(att%int(len),stat=status)
924 if(status/=0)
CALL fatal_error(
"READ_ATT_TYPE could not allocate integer("//clen//
")")
925 status = nf90_get_att(ncid,varid,&
928 errmsg=
"Can not get variable attribute (byte):"&
929 & //trim(att%ATTNAME)
933 allocate(att%int(len),stat=status)
934 if(status/=0)
CALL fatal_error(
"READ_ATT_TYPE could not allocate integer("//clen//
")")
935 status = nf90_get_att(ncid,varid,&
938 errmsg=
"Can not get variable attribute& 939 & (short):"//trim(att%ATTNAME)
943 allocate(att%int(len),stat=status)
944 if(status/=0)
CALL fatal_error(
"READ_ATT_TYPE could not allocate integer("//clen//
")")
945 status = nf90_get_att(ncid,varid,&
948 errmsg=
"Can not get variable attribute (int):"&
949 & //trim(att%ATTNAME)
953 allocate(att%flt(len),stat=status)
954 if(status/=0)
CALL fatal_error(
"READ_ATT_TYPE could not allocate float("//clen//
")")
955 status = nf90_get_att(ncid,varid,&
958 errmsg=
"Can not get variable attribute& 959 & (float):"//trim(att%ATTNAME)
963 allocate(att%DBL(len),stat=status)
964 if(status/=0)
CALL fatal_error(
"READ_ATT_TYPE could not allocate double("//clen//
")")
965 status = nf90_get_att(ncid,varid,&
968 errmsg=
"Can not get variable attribute (double):"&
969 & //trim(att%ATTNAME)
977 if(status/=0)
CALL fatal_error(
"READ_ATT_TYPE hit default case: b& 981 if(dbg_set(dbg_sbr)) &
982 &
write(
ipt,*)
"END READ_ATT_TYPE" 989 INTEGER,
INTENT(IN):: NCID, VARID, LEN
990 CHARACTER(LEN=*),
INTENT(IN) :: ATTNAME
992 CHARACTER(LEN=LEN) :: TEMP
993 CHARACTER(LEN=*),
ALLOCATABLE :: CHR(:)
994 CHARACTER(LEN=120) :: errmsg
997 if(dbg_set(dbg_sbr)) &
998 &
write(
ipt,*)
"START CHAR_ATT_READ_HELPER" 1000 status = nf90_get_att(ncid,varid,attname, temp )
1001 errmsg=
"Can not get variable attribute (char):" &
1006 CALL split_string(temp,achar(10), chr)
1008 if(dbg_set(dbg_sbr)) &
1009 &
write(
ipt,*)
"END CHAR_ATT_READ_HELPER" 1016 integer,
intent(in) :: ncid
1017 integer,
intent(in) :: varid
1018 TYPE(
ncatt),
intent(in) :: ATT
1019 integer len, status, I,slen
1020 CHARACTER(LEN=120) :: errmsg
1022 if(dbg_set(dbg_sbr)) &
1023 &
write(
ipt,*)
"START WRITE_ATT_TYPE" 1027 select case(att%XTYPE)
1029 status = nf90_put_att(ncid,varid,&
1032 errmsg=
"Can not set variable attribute (byte):"&
1033 & //trim(att%ATTNAME)
1037 status = nf90_put_att(ncid,varid,&
1040 errmsg=
"Can not set variable attribute& 1041 & (short):"//trim(att%ATTNAME)
1045 status = nf90_put_att(ncid,varid,&
1048 errmsg=
"Can not set variable attribute (int):"&
1049 & //trim(att%ATTNAME)
1053 status = nf90_put_att(ncid,varid,&
1056 errmsg=
"Can not set variable attribute& 1057 & (float):"//trim(att%ATTNAME)
1061 status = nf90_put_att(ncid,varid,&
1064 errmsg=
"Can not set variable attribute (double):"&
1065 & //trim(att%ATTNAME)
1071 DO i = 1,
size(att%chr)
1072 slen = slen + len_trim(adjustl(att%chr(i))) + 1
1078 if(status/=0)
CALL fatal_error(
"WRITE_ATT_TYPE hit default case: b& 1082 if(dbg_set(dbg_sbr)) &
1083 &
write(
ipt,*)
"END WRITE_ATT_TYPE" 1090 INTEGER,
INTENT(IN):: NCID, VARID, LEN
1091 CHARACTER(LEN=*),
INTENT(IN) :: ATTNAME
1092 CHARACTER(LEN=LEN) :: TEMP
1093 CHARACTER(LEN=*),
ALLOCATABLE :: CHR(:)
1094 CHARACTER(LEN=120) :: errmsg
1095 INTEGER :: STATUS, I, csize
1097 if(dbg_set(dbg_sbr)) &
1098 &
write(
ipt,*)
"START CHAR_ATT_WRITE_HELPER" 1103 temp = trim(temp)//trim(adjustl(chr(i)))
1106 IF(i<csize) temp = trim(temp)//achar(10)
1109 status = nf90_put_att(ncid,varid,attname, trim(temp) )
1110 errmsg=
"Can not put variable attribute (char):" &
1114 if(dbg_set(dbg_sbr)) &
1115 &
write(
ipt,*)
"END CHAR_ATT_WRITE_HELPER" 1122 TYPE(
ncvar),
POINTER :: var
1123 TYPE(
ncdim),
POINTER :: dim1
1124 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
1125 character(len=*),
intent(in) :: name
1126 character(len=80),
target,
intent(in) :: values
1127 if(dbg_set(dbg_sbr)) &
1128 &
write(
ipt,*)
"START NC_MAKE_AVAR_SCL_CHR" 1130 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1131 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1132 &
"ERROR MAKING VARIABLE: "//trim(name))
1135 if(dim1%UNLIMITED)
CALL fatal_error &
1136 & (
"NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
1137 &
"MUST BE THE STING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
1138 &
"VARIABLE NAME: "//trim(name))
1143 var%VARNAME = trim(name)
1144 var%xtype = nf90_char
1145 var%scl_chr => values
1147 IF(
present(dim2))
THEN 1148 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1149 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1150 &
"ERROR MAKING VARIABLE: "//trim(name))
1152 IF(.NOT. dim2%UNLIMITED)
CALL fatal_error &
1153 & (
"NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
1154 &
"MUST BE THE UNLIMITED DIMENSION",&
1155 &
"VARIABLE NAME: "//trim(name))
1160 if(dbg_set(dbg_sbr)) &
1161 &
write(
ipt,*)
"END NC_MAKE_AVAR_SCL_CHR" 1167 TYPE(
ncvar),
POINTER :: var
1168 TYPE(
ncdim),
POINTER :: dim1
1169 TYPE(
ncdim),
POINTER :: dim2
1170 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
1171 character(len=*),
intent(in) :: name
1172 character(len=80),
target,
allocatable,
intent(in) :: values(:)
1173 if(dbg_set(dbg_sbr)) &
1174 &
write(
ipt,*)
"START NC_MAKE_AVAR_VEC_CHR" 1176 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1177 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1178 &
"ERROR MAKING VARIABLE: "//trim(name))
1180 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1181 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1182 &
"ERROR MAKING VARIABLE: "//trim(name))
1184 if(dim1%UNLIMITED)
CALL fatal_error &
1185 & (
"NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
1186 &
"MUST BE THE STRING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
1187 &
"VARIABLE NAME: "//trim(name))
1190 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1191 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1192 &
"ERROR MAKING VARIABLE: "//trim(name))
1202 var%VARNAME = trim(name)
1203 var%xtype = nf90_char
1204 var%vec_chr => values
1207 IF(
present(dim3))
THEN 1208 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1209 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1210 &
"ERROR MAKING VARIABLE: "//trim(name))
1212 IF(.NOT. dim3%UNLIMITED)
CALL fatal_error &
1213 & (
"NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
1214 &
"MUST BE THE UNLIMITED DIMENSION",&
1215 &
"VARIABLE NAME: "//trim(name))
1220 if(dbg_set(dbg_sbr)) &
1221 &
write(
ipt,*)
"END NC_MAKE_AVAR_VEC_CHR" 1227 TYPE(
ncvar),
POINTER :: var
1228 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim1
1229 character(len=*),
intent(in) :: name
1230 REAL(dp),
target,
intent(in) :: values
1231 if(dbg_set(dbg_sbr)) &
1232 &
write(
ipt,*)
"START NC_MAKE_AVAR_SCL_DBL" 1237 var%VARNAME = trim(name)
1238 var%xtype = nf90_double
1239 var%scl_dbl => values
1240 IF(
present(dim1))
THEN 1241 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1242 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1243 &
"ERROR MAKING VARIABLE: "//trim(name))
1244 if(.NOT. dim1%UNLIMITED)
CALL fatal_error &
1245 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1246 &
"ERROR MAKING VARIABLE: "//trim(name))
1250 if(dbg_set(dbg_sbr)) &
1251 &
write(
ipt,*)
"END NC_MAKE_AVAR_SCL_DBL" 1257 TYPE(
ncvar),
POINTER :: var
1258 TYPE(
ncdim),
POINTER :: dim1
1259 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
1260 character(len=*),
intent(in) :: name
1261 REAL(dp),
allocatable,
target,
intent(in) :: values(:)
1262 if(dbg_set(dbg_sbr)) &
1263 &
write(
ipt,*)
"START NC_MAKE_AVAR_VEC_DBL" 1265 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1266 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1267 &
"ERROR MAKING VARIABLE: "//trim(name))
1268 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1269 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1270 &
"ERROR MAKING VARIABLE: "//trim(name))
1277 var%VARNAME = trim(name)
1278 var%xtype = nf90_double
1279 var%vec_dbl => values
1281 if(
present(dim2))
then 1282 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1283 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1284 &
"ERROR MAKING VARIABLE: "//trim(name))
1285 if(.NOT. dim2%UNLIMITED)
CALL fatal_error &
1286 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1287 &
"ERROR MAKING VARIABLE: "//trim(name))
1291 if(dbg_set(dbg_sbr)) &
1292 &
write(
ipt,*)
"END NC_MAKE_AVAR_VEC_DBL" 1298 TYPE(
ncvar),
POINTER :: var
1299 TYPE(
ncdim),
POINTER :: dim1
1300 TYPE(
ncdim),
POINTER :: dim2
1301 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
1302 character(len=*),
intent(in) :: name
1303 REAL(dp),
allocatable,
target,
intent(in) :: values(:,:)
1304 if(dbg_set(dbg_sbr)) &
1305 &
write(
ipt,*)
"START NC_MAKE_AVAR_ARR_DBL" 1307 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1308 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1309 &
"ERROR MAKING VARIABLE: "//trim(name))
1310 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1311 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1312 &
"ERROR MAKING VARIABLE: "//trim(name))
1313 if(dim1%UNLIMITED)
CALL fatal_error &
1314 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1315 &
"ERROR MAKING VARIABLE: "//trim(name))
1316 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1317 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1318 &
"ERROR MAKING VARIABLE: "//trim(name))
1325 var%VARNAME = trim(name)
1326 var%xtype = nf90_double
1327 var%arr_dbl => values
1330 if(
present(dim3))
then 1331 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1332 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1333 &
"ERROR MAKING VARIABLE: "//trim(name))
1334 if(.NOT. dim3%UNLIMITED)
CALL fatal_error &
1335 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1336 &
"ERROR MAKING VARIABLE: "//trim(name))
1340 if(dbg_set(dbg_sbr)) &
1341 &
write(
ipt,*)
"END NC_MAKE_AVAR_ARR_DBL" 1347 TYPE(
ncvar),
POINTER :: var
1348 TYPE(
ncdim),
POINTER :: dim1
1349 TYPE(
ncdim),
POINTER :: dim2
1350 TYPE(
ncdim),
POINTER :: dim3
1351 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim4
1352 character(len=*),
intent(in) :: name
1353 REAL(dp),
allocatable,
target,
intent(in) :: values(:,:,:)
1354 if(dbg_set(dbg_sbr)) &
1355 &
write(
ipt,*)
"START NC_MAKE_AVAR_CUB_DBL" 1357 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1358 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1359 &
"ERROR MAKING VARIABLE: "//trim(name))
1360 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1361 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1362 &
"ERROR MAKING VARIABLE: "//trim(name))
1363 if(dim1%UNLIMITED)
CALL fatal_error &
1364 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1365 &
"ERROR MAKING VARIABLE: "//trim(name))
1366 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1367 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1368 &
"ERROR MAKING VARIABLE: "//trim(name))
1369 if(dim2%UNLIMITED)
CALL fatal_error &
1370 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1371 &
"ERROR MAKING VARIABLE: "//trim(name))
1372 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1373 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1374 &
"ERROR MAKING VARIABLE: "//trim(name))
1381 var%VARNAME = trim(name)
1382 var%xtype = nf90_double
1383 var%cub_dbl => values
1387 if(
present(dim4))
then 1388 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
1389 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1390 &
"ERROR MAKING VARIABLE: "//trim(name))
1391 if(.NOT. dim4%UNLIMITED)
CALL fatal_error &
1392 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1393 &
"ERROR MAKING VARIABLE: "//trim(name))
1397 if(dbg_set(dbg_sbr)) &
1398 &
write(
ipt,*)
"END NC_MAKE_AVAR_CUB_DBL" 1404 TYPE(
ncvar),
POINTER :: var
1405 TYPE(
ncdim),
POINTER :: dim1
1406 TYPE(
ncdim),
POINTER :: dim2
1407 TYPE(
ncdim),
POINTER :: dim3
1408 TYPE(
ncdim),
POINTER :: dim4
1409 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim5
1410 character(len=*),
intent(in) :: name
1411 REAL(dp),
allocatable,
target,
intent(in) :: values(:,:,:,:)
1412 if(dbg_set(dbg_sbr)) &
1413 &
write(
ipt,*)
"START NC_MAKE_AVAR_FDA_DBL" 1415 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1416 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1417 &
"ERROR MAKING VARIABLE: "//trim(name))
1418 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1419 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1420 &
"ERROR MAKING VARIABLE: "//trim(name))
1421 if(dim1%UNLIMITED)
CALL fatal_error &
1422 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1423 &
"ERROR MAKING VARIABLE: "//trim(name))
1424 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1425 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1426 &
"ERROR MAKING VARIABLE: "//trim(name))
1427 if(dim2%UNLIMITED)
CALL fatal_error &
1428 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1429 &
"ERROR MAKING VARIABLE: "//trim(name))
1430 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1431 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1432 &
"ERROR MAKING VARIABLE: "//trim(name))
1433 if(dim3%UNLIMITED)
CALL fatal_error &
1434 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1435 &
"ERROR MAKING VARIABLE: "//trim(name))
1436 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
1437 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1438 &
"ERROR MAKING VARIABLE: "//trim(name))
1445 var%VARNAME = trim(name)
1446 var%xtype = nf90_double
1447 var%fda_dbl => values
1452 if(
present(dim5))
then 1453 if(.NOT.
ASSOCIATED(dim5))
CALL fatal_error &
1454 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1455 &
"ERROR MAKING VARIABLE: "//trim(name))
1456 if(.NOT. dim5%UNLIMITED)
CALL fatal_error &
1457 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1458 &
"ERROR MAKING VARIABLE: "//trim(name))
1462 if(dbg_set(dbg_sbr)) &
1463 &
write(
ipt,*)
"END NC_MAKE_AVAR_FDA_DBL" 1469 TYPE(
ncvar),
POINTER :: var
1470 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim1
1471 character(len=*),
intent(in) :: name
1472 REAL(spa),
target,
intent(in) :: values
1473 if(dbg_set(dbg_sbr)) &
1474 &
write(
ipt,*)
"START NC_MAKE_AVAR_SCL_FLT" 1479 var%VARNAME = trim(name)
1480 var%xtype = nf90_float
1481 var%scl_flt => values
1482 IF(
present(dim1))
THEN 1483 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1484 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1485 &
"ERROR MAKING VARIABLE: "//trim(name))
1486 if(.NOT. dim1%UNLIMITED)
CALL fatal_error &
1487 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1488 &
"ERROR MAKING VARIABLE: "//trim(name))
1492 if(dbg_set(dbg_sbr)) &
1493 &
write(
ipt,*)
"END NC_MAKE_AVAR_SCL_FLT" 1499 TYPE(
ncvar),
POINTER :: var
1500 TYPE(
ncdim),
POINTER :: dim1
1501 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
1502 character(len=*),
intent(in) :: name
1503 REAL(spa),
allocatable,
target,
intent(in) :: values(:)
1504 if(dbg_set(dbg_sbr)) &
1505 &
write(
ipt,*)
"START NC_MAKE_AVAR_VEC_FLT" 1507 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1508 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1509 &
"ERROR MAKING VARIABLE: "//trim(name))
1510 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1511 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1512 &
"ERROR MAKING VARIABLE: "//trim(name))
1519 var%VARNAME = trim(name)
1520 var%xtype = nf90_float
1521 var%vec_flt => values(1:)
1523 if(
present(dim2))
then 1524 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1525 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1526 &
"ERROR MAKING VARIABLE: "//trim(name))
1527 if(.NOT. dim2%UNLIMITED)
CALL fatal_error &
1528 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1529 &
"ERROR MAKING VARIABLE: "//trim(name))
1533 if(dbg_set(dbg_sbr)) &
1534 &
write(
ipt,*)
"END NC_MAKE_AVAR_VEC_FLT" 1540 TYPE(
ncvar),
POINTER :: var
1541 TYPE(
ncdim),
POINTER :: dim1
1542 TYPE(
ncdim),
POINTER :: dim2
1543 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
1544 character(len=*),
intent(in) :: name
1545 REAL(spa),
allocatable,
target,
intent(in) :: values(:,:)
1546 if(dbg_set(dbg_sbr)) &
1547 &
write(
ipt,*)
"START NC_MAKE_AVAR_ARR_FLT" 1549 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1550 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1551 &
"ERROR MAKING VARIABLE: "//trim(name))
1552 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1553 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1554 &
"ERROR MAKING VARIABLE: "//trim(name))
1555 if(dim1%UNLIMITED)
CALL fatal_error &
1556 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1557 &
"ERROR MAKING VARIABLE: "//trim(name))
1558 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1559 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1560 &
"ERROR MAKING VARIABLE: "//trim(name))
1567 var%VARNAME = trim(name)
1568 var%xtype = nf90_float
1569 var%arr_flt => values
1572 if(
present(dim3))
then 1573 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1574 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1575 &
"ERROR MAKING VARIABLE: "//trim(name))
1576 if(.NOT. dim3%UNLIMITED)
CALL fatal_error &
1577 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1578 &
"ERROR MAKING VARIABLE: "//trim(name))
1582 if(dbg_set(dbg_sbr)) &
1583 &
write(
ipt,*)
"END NC_MAKE_AVAR_ARR_FLT" 1589 TYPE(
ncvar),
POINTER :: var
1590 TYPE(
ncdim),
POINTER :: dim1
1591 TYPE(
ncdim),
POINTER :: dim2
1592 TYPE(
ncdim),
POINTER :: dim3
1593 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim4
1594 character(len=*),
intent(in) :: name
1595 REAL(spa),
allocatable,
target,
intent(in) :: values(:,:,:)
1596 if(dbg_set(dbg_sbr)) &
1597 &
write(
ipt,*)
"START NC_MAKE_AVAR_CUB_FLT" 1599 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1600 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1601 &
"ERROR MAKING VARIABLE: "//trim(name))
1602 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1603 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1604 &
"ERROR MAKING VARIABLE: "//trim(name))
1605 if(dim1%UNLIMITED)
CALL fatal_error &
1606 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1607 &
"ERROR MAKING VARIABLE: "//trim(name))
1608 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1609 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1610 &
"ERROR MAKING VARIABLE: "//trim(name))
1611 if(dim2%UNLIMITED)
CALL fatal_error &
1612 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1613 &
"ERROR MAKING VARIABLE: "//trim(name))
1614 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1615 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1616 &
"ERROR MAKING VARIABLE: "//trim(name))
1623 var%VARNAME = trim(name)
1624 var%xtype = nf90_float
1625 var%cub_flt => values
1629 if(
present(dim4))
then 1630 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
1631 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1632 &
"ERROR MAKING VARIABLE: "//trim(name))
1633 if(.NOT. dim4%UNLIMITED)
CALL fatal_error &
1634 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1635 &
"ERROR MAKING VARIABLE: "//trim(name))
1639 if(dbg_set(dbg_sbr)) &
1640 &
write(
ipt,*)
"END NC_MAKE_AVAR_CUB_FLT" 1646 TYPE(
ncvar),
POINTER :: var
1647 TYPE(
ncdim),
POINTER :: dim1
1648 TYPE(
ncdim),
POINTER :: dim2
1649 TYPE(
ncdim),
POINTER :: dim3
1650 TYPE(
ncdim),
POINTER :: dim4
1651 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim5
1652 character(len=*),
intent(in) :: name
1653 REAL(spa),
allocatable,
target,
intent(in) :: values(:,:,:,:)
1654 if(dbg_set(dbg_sbr)) &
1655 &
write(
ipt,*)
"START NC_MAKE_AVAR_FDA_FLT" 1657 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1658 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1659 &
"ERROR MAKING VARIABLE: "//trim(name))
1660 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1661 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1662 &
"ERROR MAKING VARIABLE: "//trim(name))
1663 if(dim1%UNLIMITED)
CALL fatal_error &
1664 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1665 &
"ERROR MAKING VARIABLE: "//trim(name))
1666 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1667 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1668 &
"ERROR MAKING VARIABLE: "//trim(name))
1669 if(dim2%UNLIMITED)
CALL fatal_error &
1670 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1671 &
"ERROR MAKING VARIABLE: "//trim(name))
1672 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1673 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1674 &
"ERROR MAKING VARIABLE: "//trim(name))
1675 if(dim3%UNLIMITED)
CALL fatal_error &
1676 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1677 &
"ERROR MAKING VARIABLE: "//trim(name))
1678 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
1679 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1680 &
"ERROR MAKING VARIABLE: "//trim(name))
1687 var%VARNAME = trim(name)
1688 var%xtype = nf90_float
1689 var%fda_flt => values
1694 if(
present(dim5))
then 1695 if(.NOT.
ASSOCIATED(dim5))
CALL fatal_error &
1696 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1697 &
"ERROR MAKING VARIABLE: "//trim(name))
1698 if(.NOT. dim5%UNLIMITED)
CALL fatal_error &
1699 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1700 &
"ERROR MAKING VARIABLE: "//trim(name))
1704 if(dbg_set(dbg_sbr)) &
1705 &
write(
ipt,*)
"END NC_MAKE_AVAR_FDA_FLT" 1711 TYPE(
ncvar),
POINTER :: var
1712 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim1
1713 character(len=*),
intent(in) :: name
1714 INTEGER,
target,
intent(in) :: values
1715 if(dbg_set(dbg_sbr)) &
1716 &
write(
ipt,*)
"START NC_MAKE_AVAR_SCL_INT" 1721 var%VARNAME = trim(name)
1722 var%xtype = nf90_int
1723 var%scl_int => values
1724 IF(
present(dim1))
THEN 1725 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1726 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1727 &
"ERROR MAKING VARIABLE: "//trim(name))
1728 if(.NOT. dim1%UNLIMITED)
CALL fatal_error &
1729 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1730 &
"ERROR MAKING VARIABLE: "//trim(name))
1734 if(dbg_set(dbg_sbr)) &
1735 &
write(
ipt,*)
"END NC_MAKE_AVAR_SCL_INT" 1741 TYPE(
ncvar),
POINTER :: var
1742 TYPE(
ncdim),
POINTER :: dim1
1743 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
1744 character(len=*),
intent(in) :: name
1745 INTEGER,
allocatable,
target,
intent(in) :: values(:)
1746 if(dbg_set(dbg_sbr)) &
1747 &
write(
ipt,*)
"START NC_MAKE_AVAR_VEC_INT" 1749 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1750 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1751 &
"ERROR MAKING VARIABLE: "//trim(name))
1752 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1753 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1754 &
"ERROR MAKING VARIABLE: "//trim(name))
1761 var%VARNAME = trim(name)
1762 var%xtype = nf90_int
1763 var%vec_int => values
1765 if(
present(dim2))
then 1766 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1767 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1768 &
"ERROR MAKING VARIABLE: "//trim(name))
1769 if(.NOT. dim2%UNLIMITED)
CALL fatal_error &
1770 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1771 &
"ERROR MAKING VARIABLE: "//trim(name))
1775 if(dbg_set(dbg_sbr)) &
1776 &
write(
ipt,*)
"END NC_MAKE_AVAR_VEC_INT" 1782 TYPE(
ncvar),
POINTER :: var
1783 TYPE(
ncdim),
POINTER :: dim1
1784 TYPE(
ncdim),
POINTER :: dim2
1785 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
1786 character(len=*),
intent(in) :: name
1787 INTEGER,
allocatable,
target,
intent(in) :: values(:,:)
1788 if(dbg_set(dbg_sbr)) &
1789 &
write(
ipt,*)
"START NC_MAKE_AVAR_ARR_INT" 1791 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1792 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1793 &
"ERROR MAKING VARIABLE: "//trim(name))
1794 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1795 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1796 &
"ERROR MAKING VARIABLE: "//trim(name))
1797 if(dim1%UNLIMITED)
CALL fatal_error &
1798 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1799 &
"ERROR MAKING VARIABLE: "//trim(name))
1800 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1801 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1802 &
"ERROR MAKING VARIABLE: "//trim(name))
1809 var%VARNAME = trim(name)
1810 var%xtype = nf90_int
1811 var%arr_int => values
1814 if(
present(dim3))
then 1815 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1816 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1817 &
"ERROR MAKING VARIABLE: "//trim(name))
1818 if(.NOT. dim3%UNLIMITED)
CALL fatal_error &
1819 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1820 &
"ERROR MAKING VARIABLE: "//trim(name))
1824 if(dbg_set(dbg_sbr)) &
1825 &
write(
ipt,*)
"END NC_MAKE_AVAR_ARR_INT" 1831 TYPE(
ncvar),
POINTER :: var
1832 TYPE(
ncdim),
POINTER :: dim1
1833 TYPE(
ncdim),
POINTER :: dim2
1834 TYPE(
ncdim),
POINTER :: dim3
1835 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim4
1836 character(len=*),
intent(in) :: name
1837 INTEGER,
allocatable,
target,
intent(in) :: values(:,:,:)
1838 if(dbg_set(dbg_sbr)) &
1839 &
write(
ipt,*)
"START NC_MAKE_AVAR_CUB_INT" 1841 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1842 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1843 &
"ERROR MAKING VARIABLE: "//trim(name))
1844 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1845 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1846 &
"ERROR MAKING VARIABLE: "//trim(name))
1847 if(dim1%UNLIMITED)
CALL fatal_error &
1848 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1849 &
"ERROR MAKING VARIABLE: "//trim(name))
1850 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1851 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1852 &
"ERROR MAKING VARIABLE: "//trim(name))
1853 if(dim2%UNLIMITED)
CALL fatal_error &
1854 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1855 &
"ERROR MAKING VARIABLE: "//trim(name))
1856 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1857 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1858 &
"ERROR MAKING VARIABLE: "//trim(name))
1865 var%VARNAME = trim(name)
1866 var%xtype = nf90_int
1867 var%cub_int => values
1871 if(
present(dim4))
then 1872 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
1873 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1874 &
"ERROR MAKING VARIABLE: "//trim(name))
1875 if(.NOT. dim4%UNLIMITED)
CALL fatal_error &
1876 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1877 &
"ERROR MAKING VARIABLE: "//trim(name))
1881 if(dbg_set(dbg_sbr)) &
1882 &
write(
ipt,*)
"END NC_MAKE_AVAR_CUB_INT" 1888 TYPE(
ncvar),
POINTER :: var
1889 TYPE(
ncdim),
POINTER :: dim1
1890 TYPE(
ncdim),
POINTER :: dim2
1891 TYPE(
ncdim),
POINTER :: dim3
1892 TYPE(
ncdim),
POINTER :: dim4
1893 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim5
1894 character(len=*),
intent(in) :: name
1895 INTEGER,
allocatable,
target,
intent(in) :: values(:,:,:,:)
1896 if(dbg_set(dbg_sbr)) &
1897 &
write(
ipt,*)
"START NC_MAKE_AVAR_FDA_INT" 1899 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
1900 & (
"NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1901 &
"ERROR MAKING VARIABLE: "//trim(name))
1902 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1903 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1904 &
"ERROR MAKING VARIABLE: "//trim(name))
1905 if(dim1%UNLIMITED)
CALL fatal_error &
1906 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1907 &
"ERROR MAKING VARIABLE: "//trim(name))
1908 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1909 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1910 &
"ERROR MAKING VARIABLE: "//trim(name))
1911 if(dim2%UNLIMITED)
CALL fatal_error &
1912 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1913 &
"ERROR MAKING VARIABLE: "//trim(name))
1914 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
1915 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1916 &
"ERROR MAKING VARIABLE: "//trim(name))
1917 if(dim3%UNLIMITED)
CALL fatal_error &
1918 & (
"NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1919 &
"ERROR MAKING VARIABLE: "//trim(name))
1920 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
1921 & (
"NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1922 &
"ERROR MAKING VARIABLE: "//trim(name))
1929 var%VARNAME = trim(name)
1930 var%xtype = nf90_int
1931 var%fda_int => values
1936 if(
present(dim5))
then 1937 if(.NOT.
ASSOCIATED(dim5))
CALL fatal_error &
1938 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1939 &
"ERROR MAKING VARIABLE: "//trim(name))
1940 if(.NOT. dim5%UNLIMITED)
CALL fatal_error &
1941 & (
"NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1942 &
"ERROR MAKING VARIABLE: "//trim(name))
1946 if(dbg_set(dbg_sbr)) &
1947 &
write(
ipt,*)
"END NC_MAKE_AVAR_FDA_INT" 1953 TYPE(
ncvar),
POINTER :: var
1954 TYPE(
ncdim),
POINTER :: dim1
1955 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
1956 character(len=*),
intent(in) :: name
1957 character(len=80),
POINTER,
intent(in) :: values
1958 if(dbg_set(dbg_sbr)) &
1959 &
write(
ipt,*)
"START NC_MAKE_PVAR_SCL_CHR" 1961 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
1962 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
1963 &
"ERROR MAKING VARIABLE: "//trim(name))
1965 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
1966 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1967 &
"ERROR MAKING VARIABLE: "//trim(name))
1970 if(dim1%UNLIMITED)
CALL fatal_error &
1971 & (
"NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
1972 &
"MUST BE THE STING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
1973 &
"VARIABLE NAME: "//trim(name))
1978 var%VARNAME = trim(name)
1979 var%xtype = nf90_char
1980 var%scl_chr => values
1982 IF(
present(dim2))
THEN 1983 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
1984 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1985 &
"ERROR MAKING VARIABLE: "//trim(name))
1987 IF(.NOT. dim2%UNLIMITED)
CALL fatal_error &
1988 & (
"NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
1989 &
"MUST BE THE UNLIMITED DIMENSION",&
1990 &
"VARIABLE NAME: "//trim(name))
1995 if(dbg_set(dbg_sbr)) &
1996 &
write(
ipt,*)
"END NC_MAKE_PVAR_SCL_CHR" 2002 TYPE(
ncvar),
POINTER :: var
2003 TYPE(
ncdim),
POINTER :: dim1
2004 TYPE(
ncdim),
POINTER :: dim2
2005 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
2006 character(len=*),
intent(in) :: name
2007 character(len=80),
POINTER,
intent(in) :: values(:)
2008 if(dbg_set(dbg_sbr)) &
2009 &
write(
ipt,*)
"START NC_MAKE_PVAR_VEC_CHR" 2011 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2012 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2013 &
"ERROR MAKING VARIABLE: "//trim(name))
2015 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2016 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2017 &
"ERROR MAKING VARIABLE: "//trim(name))
2019 if(dim1%UNLIMITED)
CALL fatal_error &
2020 & (
"NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
2021 &
"MUST BE THE STRING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
2022 &
"VARIABLE NAME: "//trim(name))
2024 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2025 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2026 &
"ERROR MAKING VARIABLE: "//trim(name))
2036 var%VARNAME = trim(name)
2037 var%xtype = nf90_char
2038 var%vec_chr => values
2041 IF(
present(dim3))
THEN 2042 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2043 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2044 &
"ERROR MAKING VARIABLE: "//trim(name))
2046 IF(.NOT. dim3%UNLIMITED)
CALL fatal_error &
2047 & (
"NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
2048 &
"MUST BE THE UNLIMITED DIMENSION",&
2049 &
"VARIABLE NAME: "//trim(name))
2054 if(dbg_set(dbg_sbr)) &
2055 &
write(
ipt,*)
"END NC_MAKE_PVAR_VEC_CHR" 2061 TYPE(
ncvar),
POINTER :: var
2062 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim1
2063 character(len=*),
intent(in) :: name
2064 REAL(dp),
POINTER,
intent(in) :: values
2065 if(dbg_set(dbg_sbr)) &
2066 &
write(
ipt,*)
"START NC_MAKE_PVAR_SCL_DBL" 2068 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2069 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2070 &
"ERROR MAKING VARIABLE: "//trim(name))
2075 var%VARNAME = trim(name)
2076 var%xtype = nf90_double
2077 var%scl_dbl => values
2078 IF(
present(dim1))
THEN 2079 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2080 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2081 &
"ERROR MAKING VARIABLE: "//trim(name))
2082 if(.NOT. dim1%UNLIMITED)
CALL fatal_error &
2083 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2084 &
"ERROR MAKING VARIABLE: "//trim(name))
2088 if(dbg_set(dbg_sbr)) &
2089 &
write(
ipt,*)
"END NC_MAKE_PVAR_SCL_DBL" 2095 TYPE(
ncvar),
POINTER :: var
2096 TYPE(
ncdim),
POINTER :: dim1
2097 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
2098 character(len=*),
intent(in) :: name
2099 REAL(dp),
POINTER,
intent(in) :: values(:)
2100 if(dbg_set(dbg_sbr)) &
2101 &
write(
ipt,*)
"START NC_MAKE_PVAR_VEC_DBL" 2103 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2104 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2105 &
"ERROR MAKING VARIABLE: "//trim(name))
2106 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2107 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2108 &
"ERROR MAKING VARIABLE: "//trim(name))
2117 var%VARNAME = trim(name)
2118 var%xtype = nf90_double
2119 var%vec_dbl => values
2121 if(
present(dim2))
then 2122 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2123 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2124 &
"ERROR MAKING VARIABLE: "//trim(name))
2125 if(.NOT. dim2%UNLIMITED)
CALL fatal_error &
2126 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2127 &
"ERROR MAKING VARIABLE: "//trim(name))
2131 if(dbg_set(dbg_sbr)) &
2132 &
write(
ipt,*)
"END NC_MAKE_PVAR_VEC_DBL" 2138 TYPE(
ncvar),
POINTER :: var
2139 TYPE(
ncdim),
POINTER :: dim1
2140 TYPE(
ncdim),
POINTER :: dim2
2141 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
2142 character(len=*),
intent(in) :: name
2143 REAL(dp),
POINTER,
intent(in) :: values(:,:)
2144 if(dbg_set(dbg_sbr)) &
2145 &
write(
ipt,*)
"START NC_MAKE_PVAR_ARR_DBL" 2147 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2148 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2149 &
"ERROR MAKING VARIABLE: "//trim(name))
2150 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2151 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2152 &
"ERROR MAKING VARIABLE: "//trim(name))
2153 if(dim1%UNLIMITED)
CALL fatal_error &
2154 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2155 &
"ERROR MAKING VARIABLE: "//trim(name))
2156 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2157 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2158 &
"ERROR MAKING VARIABLE: "//trim(name))
2165 var%VARNAME = trim(name)
2166 var%xtype = nf90_double
2167 var%arr_dbl => values
2170 if(
present(dim3))
then 2171 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2172 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2173 &
"ERROR MAKING VARIABLE: "//trim(name))
2174 if(.NOT. dim3%UNLIMITED)
CALL fatal_error &
2175 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2176 &
"ERROR MAKING VARIABLE: "//trim(name))
2180 if(dbg_set(dbg_sbr)) &
2181 &
write(
ipt,*)
"END NC_MAKE_PVAR_ARR_DBL" 2187 TYPE(
ncvar),
POINTER :: var
2188 TYPE(
ncdim),
POINTER :: dim1
2189 TYPE(
ncdim),
POINTER :: dim2
2190 TYPE(
ncdim),
POINTER :: dim3
2191 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim4
2192 character(len=*),
intent(in) :: name
2193 REAL(dp),
POINTER,
intent(in) :: values(:,:,:)
2194 if(dbg_set(dbg_sbr)) &
2195 &
write(
ipt,*)
"START NC_MAKE_PVAR_CUB_DBL" 2197 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2198 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2199 &
"ERROR MAKING VARIABLE: "//trim(name))
2200 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2201 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2202 &
"ERROR MAKING VARIABLE: "//trim(name))
2203 if(dim1%UNLIMITED)
CALL fatal_error &
2204 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2205 &
"ERROR MAKING VARIABLE: "//trim(name))
2206 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2207 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2208 &
"ERROR MAKING VARIABLE: "//trim(name))
2209 if(dim2%UNLIMITED)
CALL fatal_error &
2210 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2211 &
"ERROR MAKING VARIABLE: "//trim(name))
2212 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2213 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2214 &
"ERROR MAKING VARIABLE: "//trim(name))
2221 var%VARNAME = trim(name)
2222 var%xtype = nf90_double
2223 var%cub_dbl => values
2227 if(
present(dim4))
then 2228 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
2229 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2230 &
"ERROR MAKING VARIABLE: "//trim(name))
2231 if(.NOT. dim4%UNLIMITED)
CALL fatal_error &
2232 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2233 &
"ERROR MAKING VARIABLE: "//trim(name))
2237 if(dbg_set(dbg_sbr)) &
2238 &
write(
ipt,*)
"END NC_MAKE_PVAR_CUB_DBL" 2244 TYPE(
ncvar),
POINTER :: var
2245 TYPE(
ncdim),
POINTER :: dim1
2246 TYPE(
ncdim),
POINTER :: dim2
2247 TYPE(
ncdim),
POINTER :: dim3
2248 TYPE(
ncdim),
POINTER :: dim4
2249 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim5
2250 character(len=*),
intent(in) :: name
2251 REAL(dp),
POINTER,
intent(in) :: values(:,:,:,:)
2252 if(dbg_set(dbg_sbr)) &
2253 &
write(
ipt,*)
"START NC_MAKE_PVAR_FDA_DBL" 2255 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2256 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2257 &
"ERROR MAKING VARIABLE: "//trim(name))
2258 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2259 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2260 &
"ERROR MAKING VARIABLE: "//trim(name))
2261 if(dim1%UNLIMITED)
CALL fatal_error &
2262 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2263 &
"ERROR MAKING VARIABLE: "//trim(name))
2264 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2265 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2266 &
"ERROR MAKING VARIABLE: "//trim(name))
2267 if(dim2%UNLIMITED)
CALL fatal_error &
2268 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2269 &
"ERROR MAKING VARIABLE: "//trim(name))
2270 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2271 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2272 &
"ERROR MAKING VARIABLE: "//trim(name))
2273 if(dim3%UNLIMITED)
CALL fatal_error &
2274 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2275 &
"ERROR MAKING VARIABLE: "//trim(name))
2276 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
2277 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2278 &
"ERROR MAKING VARIABLE: "//trim(name))
2285 var%VARNAME = trim(name)
2286 var%xtype = nf90_double
2287 var%fda_dbl => values
2292 if(
present(dim5))
then 2293 if(.NOT.
ASSOCIATED(dim5))
CALL fatal_error &
2294 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2295 &
"ERROR MAKING VARIABLE: "//trim(name))
2296 if(.NOT. dim5%UNLIMITED)
CALL fatal_error &
2297 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2298 &
"ERROR MAKING VARIABLE: "//trim(name))
2302 if(dbg_set(dbg_sbr)) &
2303 &
write(
ipt,*)
"END NC_MAKE_PVAR_FDA_DBL" 2309 TYPE(
ncvar),
POINTER :: var
2310 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim1
2311 character(len=*),
intent(in) :: name
2312 REAL(spa),
POINTER,
intent(in) :: values
2313 if(dbg_set(dbg_sbr)) &
2314 &
write(
ipt,*)
"START NC_MAKE_PVAR_SCL_FLT" 2316 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2317 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2318 &
"ERROR MAKING VARIABLE: "//trim(name))
2323 var%VARNAME = trim(name)
2324 var%xtype = nf90_float
2325 var%scl_flt => values
2326 IF(
present(dim1))
THEN 2327 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2328 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2329 &
"ERROR MAKING VARIABLE: "//trim(name))
2330 if(.NOT. dim1%UNLIMITED)
CALL fatal_error &
2331 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2332 &
"ERROR MAKING VARIABLE: "//trim(name))
2336 if(dbg_set(dbg_sbr)) &
2337 &
write(
ipt,*)
"END NC_MAKE_PVAR_SCL_FLT" 2343 TYPE(
ncvar),
POINTER :: var
2344 TYPE(
ncdim),
POINTER :: dim1
2345 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
2346 character(len=*),
intent(in) :: name
2347 REAL(spa),
POINTER,
intent(in) :: values(:)
2348 if(dbg_set(dbg_sbr)) &
2349 &
write(
ipt,*)
"START NC_MAKE_PVAR_VEC_FLT" 2351 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2352 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2353 &
"ERROR MAKING VARIABLE: "//trim(name))
2354 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2355 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2356 &
"ERROR MAKING VARIABLE: "//trim(name))
2363 var%VARNAME = trim(name)
2364 var%xtype = nf90_float
2365 var%vec_flt => values(1:)
2367 if(
present(dim2))
then 2368 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2369 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2370 &
"ERROR MAKING VARIABLE: "//trim(name))
2371 if(.NOT. dim2%UNLIMITED)
CALL fatal_error &
2372 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2373 &
"ERROR MAKING VARIABLE: "//trim(name))
2377 if(dbg_set(dbg_sbr)) &
2378 &
write(
ipt,*)
"END NC_MAKE_PVAR_VEC_FLT" 2384 TYPE(
ncvar),
POINTER :: var
2385 TYPE(
ncdim),
POINTER :: dim1
2386 TYPE(
ncdim),
POINTER :: dim2
2387 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
2388 character(len=*),
intent(in) :: name
2389 REAL(spa),
POINTER,
intent(in) :: values(:,:)
2390 if(dbg_set(dbg_sbr)) &
2391 &
write(
ipt,*)
"START NC_MAKE_PVAR_ARR_FLT" 2393 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2394 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2395 &
"ERROR MAKING VARIABLE: "//trim(name))
2396 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2397 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2398 &
"ERROR MAKING VARIABLE: "//trim(name))
2399 if(dim1%UNLIMITED)
CALL fatal_error &
2400 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2401 &
"ERROR MAKING VARIABLE: "//trim(name))
2402 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2403 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2404 &
"ERROR MAKING VARIABLE: "//trim(name))
2411 var%VARNAME = trim(name)
2412 var%xtype = nf90_float
2413 var%arr_flt => values
2416 if(
present(dim3))
then 2417 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2418 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2419 &
"ERROR MAKING VARIABLE: "//trim(name))
2420 if(.NOT. dim3%UNLIMITED)
CALL fatal_error &
2421 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2422 &
"ERROR MAKING VARIABLE: "//trim(name))
2426 if(dbg_set(dbg_sbr)) &
2427 &
write(
ipt,*)
"END NC_MAKE_PVAR_ARR_FLT" 2433 TYPE(
ncvar),
POINTER :: var
2434 TYPE(
ncdim),
POINTER :: dim1
2435 TYPE(
ncdim),
POINTER :: dim2
2436 TYPE(
ncdim),
POINTER :: dim3
2437 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim4
2438 character(len=*),
intent(in) :: name
2439 REAL(spa),
POINTER,
intent(in) :: values(:,:,:)
2440 if(dbg_set(dbg_sbr)) &
2441 &
write(
ipt,*)
"START NC_MAKE_PVAR_CUB_FLT" 2443 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2444 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2445 &
"ERROR MAKING VARIABLE: "//trim(name))
2446 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2447 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2448 &
"ERROR MAKING VARIABLE: "//trim(name))
2449 if(dim1%UNLIMITED)
CALL fatal_error &
2450 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2451 &
"ERROR MAKING VARIABLE: "//trim(name))
2452 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2453 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2454 &
"ERROR MAKING VARIABLE: "//trim(name))
2455 if(dim2%UNLIMITED)
CALL fatal_error &
2456 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2457 &
"ERROR MAKING VARIABLE: "//trim(name))
2458 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2459 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2460 &
"ERROR MAKING VARIABLE: "//trim(name))
2467 var%VARNAME = trim(name)
2468 var%xtype = nf90_float
2469 var%cub_flt => values
2473 if(
present(dim4))
then 2474 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
2475 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2476 &
"ERROR MAKING VARIABLE: "//trim(name))
2477 if(.NOT. dim4%UNLIMITED)
CALL fatal_error &
2478 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2479 &
"ERROR MAKING VARIABLE: "//trim(name))
2483 if(dbg_set(dbg_sbr)) &
2484 &
write(
ipt,*)
"END NC_MAKE_PVAR_CUB_FLT" 2490 TYPE(
ncvar),
POINTER :: var
2491 TYPE(
ncdim),
POINTER :: dim1
2492 TYPE(
ncdim),
POINTER :: dim2
2493 TYPE(
ncdim),
POINTER :: dim3
2494 TYPE(
ncdim),
POINTER :: dim4
2495 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim5
2496 character(len=*),
intent(in) :: name
2497 REAL(spa),
POINTER,
intent(in) :: values(:,:,:,:)
2498 if(dbg_set(dbg_sbr)) &
2499 &
write(
ipt,*)
"START NC_MAKE_PVAR_FDA_FLT" 2501 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2502 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2503 &
"ERROR MAKING VARIABLE: "//trim(name))
2504 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2505 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2506 &
"ERROR MAKING VARIABLE: "//trim(name))
2507 if(dim1%UNLIMITED)
CALL fatal_error &
2508 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2509 &
"ERROR MAKING VARIABLE: "//trim(name))
2510 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2511 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2512 &
"ERROR MAKING VARIABLE: "//trim(name))
2513 if(dim2%UNLIMITED)
CALL fatal_error &
2514 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2515 &
"ERROR MAKING VARIABLE: "//trim(name))
2516 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2517 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2518 &
"ERROR MAKING VARIABLE: "//trim(name))
2519 if(dim3%UNLIMITED)
CALL fatal_error &
2520 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2521 &
"ERROR MAKING VARIABLE: "//trim(name))
2522 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
2523 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2524 &
"ERROR MAKING VARIABLE: "//trim(name))
2531 var%VARNAME = trim(name)
2532 var%xtype = nf90_float
2533 var%fda_flt => values
2538 if(
present(dim5))
then 2539 if(.NOT.
ASSOCIATED(dim5))
CALL fatal_error &
2540 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2541 &
"ERROR MAKING VARIABLE: "//trim(name))
2542 if(.NOT. dim5%UNLIMITED)
CALL fatal_error &
2543 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2544 &
"ERROR MAKING VARIABLE: "//trim(name))
2548 if(dbg_set(dbg_sbr)) &
2549 &
write(
ipt,*)
"END NC_MAKE_PVAR_FDA_FLT" 2555 TYPE(
ncvar),
POINTER :: var
2556 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim1
2557 character(len=*),
intent(in) :: name
2558 INTEGER,
POINTER,
intent(in) :: values
2559 if(dbg_set(dbg_sbr)) &
2560 &
write(
ipt,*)
"START NC_MAKE_PVAR_SCL_INT" 2562 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2563 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2564 &
"ERROR MAKING VARIABLE: "//trim(name))
2569 var%VARNAME = trim(name)
2570 var%xtype = nf90_int
2571 var%scl_int => values
2572 IF(
present(dim1))
THEN 2573 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2574 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2575 &
"ERROR MAKING VARIABLE: "//trim(name))
2576 if(.NOT. dim1%UNLIMITED)
CALL fatal_error &
2577 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2578 &
"ERROR MAKING VARIABLE: "//trim(name))
2582 if(dbg_set(dbg_sbr)) &
2583 &
write(
ipt,*)
"END NC_MAKE_PVAR_SCL_INT" 2589 TYPE(
ncvar),
POINTER :: var
2590 TYPE(
ncdim),
POINTER :: dim1
2591 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim2
2592 character(len=*),
intent(in) :: name
2593 INTEGER,
POINTER,
intent(in) :: values(:)
2594 if(dbg_set(dbg_sbr)) &
2595 &
write(
ipt,*)
"START NC_MAKE_PVAR_VEC_INT" 2597 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2598 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2599 &
"ERROR MAKING VARIABLE: "//trim(name))
2600 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2601 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2602 &
"ERROR MAKING VARIABLE: "//trim(name))
2609 var%VARNAME = trim(name)
2610 var%xtype = nf90_int
2611 var%vec_int => values
2613 if(
present(dim2))
then 2614 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2615 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2616 &
"ERROR MAKING VARIABLE: "//trim(name))
2617 if(.NOT. dim2%UNLIMITED)
CALL fatal_error &
2618 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2619 &
"ERROR MAKING VARIABLE: "//trim(name))
2623 if(dbg_set(dbg_sbr)) &
2624 &
write(
ipt,*)
"END NC_MAKE_PVAR_VEC_INT" 2630 TYPE(
ncvar),
POINTER :: var
2631 TYPE(
ncdim),
POINTER :: dim1
2632 TYPE(
ncdim),
POINTER :: dim2
2633 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim3
2634 character(len=*),
intent(in) :: name
2635 INTEGER,
POINTER,
intent(in) :: values(:,:)
2636 if(dbg_set(dbg_sbr)) &
2637 &
write(
ipt,*)
"START NC_MAKE_PVAR_ARR_INT" 2639 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2640 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2641 &
"ERROR MAKING VARIABLE: "//trim(name))
2642 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2643 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2644 &
"ERROR MAKING VARIABLE: "//trim(name))
2645 if(dim1%UNLIMITED)
CALL fatal_error &
2646 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2647 &
"ERROR MAKING VARIABLE: "//trim(name))
2648 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2649 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2650 &
"ERROR MAKING VARIABLE: "//trim(name))
2657 var%VARNAME = trim(name)
2658 var%xtype = nf90_int
2659 var%arr_int => values
2662 if(
present(dim3))
then 2663 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2664 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2665 &
"ERROR MAKING VARIABLE: "//trim(name))
2666 if(.NOT. dim3%UNLIMITED)
CALL fatal_error &
2667 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2668 &
"ERROR MAKING VARIABLE: "//trim(name))
2672 if(dbg_set(dbg_sbr)) &
2673 &
write(
ipt,*)
"END NC_MAKE_PVAR_ARR_INT" 2679 TYPE(
ncvar),
POINTER :: var
2680 TYPE(
ncdim),
POINTER :: dim1
2681 TYPE(
ncdim),
POINTER :: dim2
2682 TYPE(
ncdim),
POINTER :: dim3
2683 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim4
2684 character(len=*),
intent(in) :: name
2685 INTEGER,
POINTER,
intent(in) :: values(:,:,:)
2686 if(dbg_set(dbg_sbr)) &
2687 &
write(
ipt,*)
"START NC_MAKE_PVAR_CUB_INT" 2689 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2690 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2691 &
"ERROR MAKING VARIABLE: "//trim(name))
2692 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2693 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2694 &
"ERROR MAKING VARIABLE: "//trim(name))
2695 if(dim1%UNLIMITED)
CALL fatal_error &
2696 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2697 &
"ERROR MAKING VARIABLE: "//trim(name))
2698 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2699 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2700 &
"ERROR MAKING VARIABLE: "//trim(name))
2701 if(dim2%UNLIMITED)
CALL fatal_error &
2702 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2703 &
"ERROR MAKING VARIABLE: "//trim(name))
2704 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2705 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2706 &
"ERROR MAKING VARIABLE: "//trim(name))
2713 var%VARNAME = trim(name)
2714 var%xtype = nf90_int
2715 var%cub_int => values
2719 if(
present(dim4))
then 2720 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
2721 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2722 &
"ERROR MAKING VARIABLE: "//trim(name))
2723 if(.NOT. dim4%UNLIMITED)
CALL fatal_error &
2724 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2725 &
"ERROR MAKING VARIABLE: "//trim(name))
2729 if(dbg_set(dbg_sbr)) &
2730 &
write(
ipt,*)
"END NC_MAKE_PVAR_CUB_INT" 2736 TYPE(
ncvar),
POINTER :: var
2737 TYPE(
ncdim),
POINTER :: dim1
2738 TYPE(
ncdim),
POINTER :: dim2
2739 TYPE(
ncdim),
POINTER :: dim3
2740 TYPE(
ncdim),
POINTER :: dim4
2741 TYPE(
ncdim),
OPTIONAL,
POINTER :: dim5
2742 character(len=*),
intent(in) :: name
2743 INTEGER,
POINTER,
intent(in) :: values(:,:,:,:)
2744 if(dbg_set(dbg_sbr)) &
2745 &
write(
ipt,*)
"START NC_MAKE_PVAR_FDA_INT" 2747 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
2748 & (
"NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2749 &
"ERROR MAKING VARIABLE: "//trim(name))
2750 if(.NOT.
ASSOCIATED(dim1))
CALL fatal_error &
2751 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2752 &
"ERROR MAKING VARIABLE: "//trim(name))
2753 if(dim1%UNLIMITED)
CALL fatal_error &
2754 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2755 &
"ERROR MAKING VARIABLE: "//trim(name))
2756 if(.NOT.
ASSOCIATED(dim2))
CALL fatal_error &
2757 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2758 &
"ERROR MAKING VARIABLE: "//trim(name))
2759 if(dim2%UNLIMITED)
CALL fatal_error &
2760 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2761 &
"ERROR MAKING VARIABLE: "//trim(name))
2762 if(.NOT.
ASSOCIATED(dim3))
CALL fatal_error &
2763 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2764 &
"ERROR MAKING VARIABLE: "//trim(name))
2765 if(dim3%UNLIMITED)
CALL fatal_error &
2766 & (
"NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2767 &
"ERROR MAKING VARIABLE: "//trim(name))
2768 if(.NOT.
ASSOCIATED(dim4))
CALL fatal_error &
2769 & (
"NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2770 &
"ERROR MAKING VARIABLE: "//trim(name))
2777 var%VARNAME = trim(name)
2778 var%xtype = nf90_int
2779 var%fda_int => values
2784 if(
present(dim5))
then 2785 if(.NOT.
ASSOCIATED(dim5))
CALL fatal_error &
2786 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2787 &
"ERROR MAKING VARIABLE: "//trim(name))
2788 if(.NOT. dim5%UNLIMITED)
CALL fatal_error &
2789 & (
"NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2790 &
"ERROR MAKING VARIABLE: "//trim(name))
2794 if(dbg_set(dbg_sbr)) &
2795 &
write(
ipt,*)
"END NC_MAKE_PVAR_FDA_INT" 2801 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2803 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2804 & (
"NC_DISCONNECT: THE VARIABLE ARGUMENT MUST BE ASSOCIATED")
2806 nullify(var%scl_int)
2807 nullify(var%vec_int)
2808 nullify(var%arr_int)
2809 nullify(var%cub_int)
2810 nullify(var%fda_int)
2812 nullify(var%scl_flt)
2813 nullify(var%vec_flt)
2814 nullify(var%arr_flt)
2815 nullify(var%cub_flt)
2816 nullify(var%fda_flt)
2818 nullify(var%scl_dbl)
2819 nullify(var%vec_dbl)
2820 nullify(var%arr_dbl)
2821 nullify(var%cub_dbl)
2822 nullify(var%fda_dbl)
2824 nullify(var%scl_chr)
2825 nullify(var%vec_chr)
2832 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2833 REAL(SPA),
target,
intent(in) :: values
2835 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2836 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
2838 var%SCL_FLT => values
2845 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2846 REAL(SPA),
allocatable,
target,
intent(in) :: values(:)
2848 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2849 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_FLT)")
2851 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2852 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2853 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2856 var%VEC_FLT => values
2863 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2864 REAL(SPA),
allocatable,
target,
intent(in) :: values(:,:)
2866 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2867 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_FLT)")
2869 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2870 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2871 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2873 var%ARR_FLT => values
2880 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2881 REAL(SPA),
allocatable,
target,
intent(in) :: values(:,:,:)
2883 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2884 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_FLT)")
2886 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2887 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2888 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2890 var%CUB_FLT => values
2897 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2898 REAL(SPA),
allocatable,
target,
intent(in) :: values(:,:,:,:)
2900 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2901 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_FLT)")
2903 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2904 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2905 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2907 var%FDA_FLT => values
2914 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2915 INTEGER,
target,
intent(in) :: values
2917 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2918 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_INT)")
2920 var%SCL_INT => values
2927 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2928 INTEGER,
allocatable,
target,
intent(in) :: values(:)
2930 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2931 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_INT)")
2933 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2934 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2935 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2937 var%VEC_INT => values
2944 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2945 INTEGER,
allocatable,
target,
intent(in) :: values(:,:)
2947 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2948 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_INT)")
2950 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2951 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2952 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2954 var%ARR_INT => values
2961 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2962 INTEGER,
allocatable,
target,
intent(in) :: values(:,:,:)
2964 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2965 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_INT)")
2967 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2968 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2969 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2971 var%CUB_INT => values
2978 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2979 INTEGER,
allocatable,
target,
intent(in) :: values(:,:,:,:)
2981 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2982 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_INT)")
2984 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
2985 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2986 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2988 var%FDA_INT => values
2995 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
2996 REAL(DP),
target,
intent(in) :: values
2998 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
2999 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_DBL)")
3001 var%SCL_DBL => values
3008 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3009 real(DP),
allocatable,
target,
intent(in) :: values(:)
3011 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3012 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_DBL)")
3014 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
3015 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3016 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3018 var%VEC_DBL => values
3025 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3026 real(DP),
allocatable,
target,
intent(in) :: values(:,:)
3028 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3029 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_DBL)")
3031 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
3032 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3033 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3035 var%ARR_DBL => values
3042 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3043 real(DP),
allocatable,
target,
intent(in) :: values(:,:,:)
3045 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3046 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_DBL)")
3048 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
3049 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3050 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3052 var%CUB_DBL => values
3059 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3060 real(DP),
allocatable,
target,
intent(in) :: values(:,:,:,:)
3062 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3063 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_DBL)")
3065 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
3066 & (
"NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3067 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3069 var%FDA_DBL => values
3076 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3077 REAL(SPA),
POINTER :: values
3079 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3080 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
3082 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3083 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
3085 var%SCL_FLT => values
3092 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3093 REAL(SPA),
POINTER :: values(:)
3095 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3096 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_FLT)")
3098 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3099 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3100 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3103 var%VEC_FLT => values
3110 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3111 REAL(SPA),
POINTER :: values(:,:)
3113 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3114 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_FLT)")
3116 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3117 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3118 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3120 var%ARR_FLT => values
3127 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3128 REAL(SPA),
POINTER :: values(:,:,:)
3130 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3131 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_FLT)")
3133 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3134 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3135 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3137 var%CUB_FLT => values
3144 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3145 REAL(SPA),
POINTER :: values(:,:,:,:)
3147 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3148 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_FLT)")
3150 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3151 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3152 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3154 var%FDA_FLT => values
3161 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3162 INTEGER,
POINTER :: values
3164 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3165 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_INT)")
3167 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3168 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3169 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3171 var%SCL_INT => values
3178 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3179 INTEGER,
POINTER :: values(:)
3181 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3182 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_INT)")
3184 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3185 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3186 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3188 var%VEC_INT => values
3195 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3196 INTEGER,
POINTER :: values(:,:)
3198 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3199 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_INT)")
3201 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3202 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3203 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3205 var%ARR_INT => values
3212 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3213 INTEGER,
POINTER :: values(:,:,:)
3215 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3216 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_INT)")
3218 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3219 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3220 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3222 var%CUB_INT => values
3229 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3230 INTEGER,
POINTER :: values(:,:,:,:)
3232 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3233 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_INT)")
3235 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3236 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3237 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3239 var%FDA_INT => values
3246 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3247 REAL(DP),
POINTER :: values
3249 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3250 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_DBL)")
3252 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3253 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3254 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3256 var%SCL_DBL => values
3263 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3264 real(DP),
POINTER :: values(:)
3266 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3267 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_DBL)")
3269 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3270 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3271 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3273 var%VEC_DBL => values
3280 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3281 real(DP),
POINTER :: values(:,:)
3283 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3284 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_DBL)")
3286 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3287 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3288 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3290 var%ARR_DBL => values
3297 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3298 real(DP),
POINTER :: values(:,:,:)
3300 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3301 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_DBL)")
3303 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3304 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3305 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3307 var%CUB_DBL => values
3314 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3315 real(DP),
POINTER :: values(:,:,:,:)
3317 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3318 & (
"NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_DBL)")
3320 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3321 & (
"NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3322 &
"ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3324 var%FDA_DBL => values
3331 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3332 CHARACTER(LEN=80),
target,
intent(in) :: values
3334 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3335 & (
"NC_CONNECT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_CHR)")
3339 var%SCL_CHR => values
3347 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3348 CHARACTER(LEN=80),
target,
ALLOCATABLE,
intent(in) :: values(:)
3350 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3351 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_CHR)")
3353 IF(.NOT.
ALLOCATED(values))
CALL fatal_error &
3354 & (
"THE CHARACTER ALLOCATABLE MUST BE ALLOCATED BEFORE BEING PASSE& 3355 &D TO NC_CONNECT_VAR:", var%VARNAME)
3359 var%VEC_CHR => values
3367 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3368 CHARACTER(LEN=80),
pointer,
intent(in) :: values
3370 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3371 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_CHR)")
3373 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3374 & (
"THE CHARACTER POINTER MUST BE ASSOCIATED BEFORE BEING PASSE& 3375 &D TO NC_CONNECT_VAR:", var%VARNAME)
3379 var%SCL_CHR => values
3387 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3388 CHARACTER(LEN=80),
pointer,
intent(in) :: values(:)
3390 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3391 & (
"NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_CHR)")
3393 IF(.NOT.
ASSOCIATED(values))
CALL fatal_error &
3394 & (
"THE CHARACTER POINTER MUST BE ASSOCIATED BEFORE BEING PASSE& 3395 &D TO NC_CONNECT_VAR:", var%VARNAME)
3399 var%VEC_CHR => values
3407 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3408 REAL(SPA),
POINTER :: values
3410 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3411 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
3413 IF(.NOT.
ASSOCIATED(var%SCL_FLT))
THEN 3416 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_FLT)")
3419 values => var%SCL_FLT
3426 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3427 REAL(SPA),
POINTER :: values(:)
3429 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3430 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_FLT)")
3432 IF(.NOT.
ASSOCIATED(var%VEC_FLT))
THEN 3435 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_FLT)")
3438 values => var%VEC_FLT
3445 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3446 REAL(SPA),
POINTER :: values(:,:)
3448 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3449 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_FLT)")
3451 IF(.NOT.
ASSOCIATED(var%ARR_FLT))
THEN 3454 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (ARR_FLT)")
3457 values => var%ARR_FLT
3464 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3465 REAL(SPA),
POINTER :: values(:,:,:)
3467 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3468 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_FLT)")
3470 IF(.NOT.
ASSOCIATED(var%CUB_FLT))
THEN 3473 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (CUB_FLT)")
3476 values => var%CUB_FLT
3483 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3484 REAL(SPA),
POINTER :: values(:,:,:,:)
3486 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3487 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_FLT)")
3489 IF(.NOT.
ASSOCIATED(var%FDA_FLT))
THEN 3492 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (FDA_FLT)")
3495 values => var%FDA_FLT
3502 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3503 REAL(DP),
POINTER :: values
3505 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3506 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_DBL)")
3508 IF(.NOT.
ASSOCIATED(var%SCL_DBL))
THEN 3511 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_DBL)")
3514 values => var%SCL_DBL
3521 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3522 REAL(DP),
POINTER :: values(:)
3524 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3525 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_DBL)")
3527 IF(.NOT.
ASSOCIATED(var%VEC_DBL))
THEN 3530 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_DBL)")
3533 values => var%VEC_DBL
3540 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3541 REAL(DP),
POINTER :: values(:,:)
3543 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3544 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_DBL)")
3546 IF(.NOT.
ASSOCIATED(var%ARR_DBL))
THEN 3549 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (ARR_DBL)")
3552 values => var%ARR_DBL
3559 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3560 REAL(DP),
POINTER :: values(:,:,:)
3562 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3563 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_DBL)")
3565 IF(.NOT.
ASSOCIATED(var%CUB_DBL))
THEN 3568 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (CUB_DBL)")
3571 values => var%CUB_DBL
3578 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3579 REAL(DP),
POINTER :: values(:,:,:,:)
3581 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3582 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_DBL)")
3584 IF(.NOT.
ASSOCIATED(var%FDA_DBL))
THEN 3587 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (FDA_DBL)")
3590 values => var%FDA_DBL
3597 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3598 INTEGER,
POINTER :: values
3600 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3601 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_INT)")
3603 IF(.NOT.
ASSOCIATED(var%SCL_INT))
THEN 3606 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_INT)")
3609 values => var%SCL_INT
3616 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3617 INTEGER,
POINTER :: values(:)
3619 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3620 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_INT)")
3622 IF(.NOT.
ASSOCIATED(var%VEC_INT))
THEN 3625 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_INT)")
3628 values => var%VEC_INT
3635 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3636 INTEGER,
POINTER :: values(:,:)
3638 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3639 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_INT)")
3641 IF(.NOT.
ASSOCIATED(var%ARR_INT))
THEN 3644 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (ARR_INT)")
3647 values => var%ARR_INT
3654 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3655 INTEGER,
POINTER :: values(:,:,:)
3657 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3658 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_INT)")
3660 IF(.NOT.
ASSOCIATED(var%CUB_INT))
THEN 3663 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (CUB_INT)")
3666 values => var%CUB_INT
3673 TYPE(
ncvar),
POINTER,
INTENT(IN) :: VAR
3674 INTEGER,
POINTER :: values(:,:,:,:)
3676 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3677 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_INT)")
3679 IF(.NOT.
ASSOCIATED(var%FDA_INT))
THEN 3682 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (FDA_INT)")
3685 values => var%FDA_INT
3692 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3693 CHARACTER(LEN=80),
POINTER :: values
3695 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3696 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_CHR)")
3698 IF(.NOT.
ASSOCIATED(var%SCL_CHR))
THEN 3701 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_CHR)")
3704 values => var%SCL_CHR
3711 TYPE(
ncvar),
POINTER,
INTENT(INOUT) :: VAR
3712 CHARACTER(LEN=80),
POINTER :: values(:)
3714 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
3715 & (
"NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_CHR)")
3717 IF(.NOT.
ASSOCIATED(var%VEC_CHR))
THEN 3720 & (
"NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_CHR)")
3723 values => var%VEC_CHR
3730 TYPE(
ncfile),
intent(in) :: ncf
3731 integer,
intent(in) :: varid
3732 TYPE(
ncvar),
pointer :: var
3733 TYPE(
ncatt),
pointer :: att
3734 TYPE(
ncdim),
pointer :: dim
3735 integer :: ndims, natts, xtype
3736 integer,
allocatable :: dimids(:)
3738 CHARACTER(LEN=120) :: errmsg
3740 CHARACTER(Len=NF90_MAX_NAME+1) :: name
3742 if(dbg_set(dbg_sbr)) &
3743 &
write(
ipt,*)
"START NC_GET_VAR" 3745 status=nf90_inquire_variable(ncf%NCID,varid,&
3750 errmsg=
"Can not get variable info: "//trim(ncf%FNAME)
3755 var%varname=trim(name)
3757 var%NCID => ncf%NCID
3761 if(dbg_set(dbg_io))
write(
ipt,*)
"====== ADDING VARIABLE ATTRIBUTES: "//trim(var%VARNAME)
3764 allocate(dimids(ndims),stat=status)
3765 if(status /= 0)
CALL fatal_error(
"NC_GET_VAR: Can not allocate DIMIDS")
3767 status=nf90_inquire_variable(ncf%NCID,var%VARID, dimids = dimids)
3768 errmsg=
"Can not get variable dimids: "//trim(ncf%FNAME)//
":"//trim(var%VARNAME)
3772 if(dbg_set(dbg_io))
write(
ipt,*)
"====== ADDING VARIABLE DIMENSIONS:" 3774 dim =>
find_dim(ncf,dimids(i),found)
3775 IF(.not. found)
THEN 3777 CALL fatal_error(
"NC_GET_VAR: COULD NOT FIND ONE & 3778 &OF THE FILE DIMENSION OBJECTS FOR THE VARIABLE: "//trim(var&
3779 &%VARNAME),
"IN THE FILE: "//trim(ncf%FNAME))
3782 if(dbg_set(dbg_io))
write(
ipt,*)
" "//trim(dim%DIMNAME)
3790 call fatal_error(
"The number of dimensions in the variable does not m& 3791 &atch the number loaded in the variable object list.")
3795 if(dbg_set(dbg_io))
write(
ipt,*)
"====== ADDING VARIABLE ATTRIBUTES:" 3798 if(dbg_set(dbg_io))
write(
ipt,*)
" "//trim(att%ATTNAME)
3804 call fatal_error(
"The number of attributes in the file does not m& 3805 &atch the number loaded in the file object.")
3808 if(dbg_set(dbg_sbr)) &
3809 &
write(
ipt,*)
"END NC_GET_VAR" 3816 TYPE(
ncfile),
target,
intent(in) :: NCF
3817 integer,
intent(in) :: varid
3818 TYPE(
ncvar),
pointer :: VAR
3819 TYPE(
ncatt),
pointer :: ATT
3820 TYPE(
ncfile),
pointer :: NCFP
3822 integer,
POINTER :: dimids(:)
3824 CHARACTER(LEN=120) :: errmsg
3827 if(dbg_set(dbg_sbr)) &
3828 &
write(
ipt,*)
"START NC_DEF_VAR" 3831 IF (.NOT. found)
THEN 3834 &(
"NC_DEF_VAR: COULD NOT FIND THE FILE VARIABLE WITH CORRECT VARID W& 3835 &HILE DEFINING THE VARIABLE IN THE FILE")
3841 status = nf90_def_var(ncf%ncid, trim(var%varname), var%xtype,&
3845 errmsg=
"NF90_DEF_VAR: ERROR" 3851 IF (varid .NE. i)
THEN 3854 &(
"NC_DEF_VAR: THE VARID RETURNED BY NF90_DEF_VAR DOES NOT MATC& 3855 &H THE VARID FOR THE VARIABLE OBJECT")
3861 IF (.NOT. found)
THEN 3864 &(
"NC_DEF_VAR: COULD NOT FIND THE VARIABLE ATTRIBUTE WITH CORRECT ATTID W& 3865 &HILE PUTTING THE ATTRIBUTE IN THE FILE")
3871 if(dbg_set(dbg_sbr)) &
3872 &
write(
ipt,*)
"END NC_DEF_VAR" 3881 LOGICAL,
OPTIONAL :: LOCAL_ONLY
3882 INTEGER,
OPTIONAL :: STKCNT
3883 INTEGER,
OPTIONAL :: STKRNG(2)
3886 TYPE(
ncfile),
pointer :: NCF
3888 CHARACTER(LEN=80) :: FNAME,PATH,EXTENSION
3891 TYPE(
ncvar),
pointer :: VAR
3892 TYPE(
ncdim),
pointer :: DIM
3893 type(
ncvarp),
POINTER :: CURRENT
3896 LOGICAL :: COLLECTDATA = .false.
3897 INTEGER :: COLLECTOR
3898 INTEGER :: NEXT_STKCNT
3899 LOGICAL :: DUMP = .false.
3900 LOGICAL :: FOUND = .false.
3902 if(dbg_set(dbg_sbr)) &
3903 &
write(
ipt,*)
"STARTING NC_WRITE_FILE" 3909 IF(
PRESENT(local_only)) my_local = local_only
3911 IF(
serial .or. my_local)
THEN 3912 collectdata = .false.
3918 collectdata = .true.
3934 IF(
PRESENT(stkcnt) .AND.
PRESENT(stkrng))
CALL fatal_error&
3935 &(
"NC_WRITE_FILE: CAN NOT CALL WITH BOTH IDX AND RNG!")
3938 if(dbg_set(dbg_sbrio))
then 3939 write(
ipt,*)
"===========================================" 3940 write(
ipt,*)
"= NC_WRITE_FILE: CONTROL STATE" 3941 write(
ipt,*)
"= NC_WRITE_FILE: COLLECT DATA:",collectdata
3942 write(
ipt,*)
"= NC_WRITE_FILE: DUMP:",dump
3943 write(
ipt,*)
"= NC_WRITE_FILE: COLLECTOR:",collector
3944 write(
ipt,*)
"= NC_WRITE_FILE: MYID:",
myid 3945 write(
ipt,*)
"= NC_WRITE_FILE: IOPROC:",
ioproc 3947 IF(
PRESENT(local_only))
THEN 3948 write(
ipt,*)
"= NC_WRITE_FILE: LOCAL_ONLY:",local_only
3950 IF(
PRESENT(stkcnt))
THEN 3951 write(
ipt,*)
"= NC_WRITE_FILE: STKCNT:",stkcnt
3953 IF(
PRESENT(stkrng))
THEN 3954 write(
ipt,*)
"= NC_WRITE_FILE: STKRNG:",stkrng
3957 write(
ipt,*)
"===========================================" 3960 IF(len_trim(ncf%FNAME) == 0)
THEN 3962 CALL fatal_error(
"NC_WRITE_FILE: CALLED WRITE WITH NO FILE NAME!")
3965 CALL path_split(ncf%FNAME,path,fname,extension)
3967 IF (collector .EQ.
myid)
THEN 3969 IF(ncf%CONNECTED)
THEN 3976 IF(dbg_set(dbg_log))
WRITE(
ipt,*)
"! CREATING FILE: "//trim(ncf%FNAME)
3983 ncf%CONNECTED = .true.
3987 IF(
ASSOCIATED(ncf%FTIME))
THEN 3990 IF(
PRESENT(stkcnt) )
THEN 3992 next_stkcnt = stkcnt
3993 ftm%NEXT_STKCNT = stkcnt+1
3994 ftm%PREV_STKCNT =stkcnt
3996 ELSEIF(
PRESENT(stkrng))
THEN 3997 next_stkcnt = stkrng(2)
3998 ftm%NEXT_STKCNT = stkrng(2)
3999 ftm%PREV_STKCNT = stkrng(1)
4003 next_stkcnt = ftm%NEXT_STKCNT
4007 IF(ftm%NEXT_STKCNT .LT. 0)
CALL fatal_error &
4008 &(
"NC_WRITE_FILE: FILE OBJECT STKCNT LESS THAN ZERO",&
4009 &
"FILE NAME: "//trim(ncf%FNAME))
4013 ftm%STK_LEN = max(ftm%NEXT_STKCNT,ftm%STK_LEN)
4016 IF(
PRESENT(stkcnt) .OR.
PRESENT(stkrng))
CALL fatal_error&
4017 &(
"IT IS NONSENSE TO PASS A STK OR RNG TO NC_WRITE_FILE",&
4018 &
"WITH A FILE THAT DOES NOT HAVE AN ASSOCIATED FILETIME!")
4030 IF (next_stkcnt == 0)
THEN 4031 IF(dbg_set(dbg_log))
WRITE(
ipt,*)
"! DUMPING STATIC DATA TO FILE: "&
4035 IF(
PRESENT(stkrng))
THEN 4037 IF(dbg_set(dbg_log))
WRITE(
ipt,*)
"! DUMPING DATA TO FILE: "&
4038 &//trim(fname)//
"; Records#",stkrng
4040 IF(dbg_set(dbg_log))
WRITE(
ipt,*)
"! DUMPING DATA TO FILE: "&
4041 &//trim(fname)//
"; Record#",next_stkcnt
4046 current => ncf%VARS%NEXT
4048 IF(.NOT.
ASSOCIATED(current)) &
4049 &
CALL fatal_error(
"NC_WRITE_FILE: FILE OBJECT HAS NO VARIABLES",&
4050 &
"FILE NAME: "//trim(ncf%FNAME))
4056 IF(.NOT.
ASSOCIATED(current))
THEN 4058 IF (
ioproc .AND. collectdata)
THEN 4060 collectdata = .false.
4063 current => ncf%VARS%NEXT
4071 if(dbg_set(dbg_sbr)) &
4072 &
write(
ipt,*)
"END NC_WRITE_FILE" 4079 IF(.NOT.
ASSOCIATED(current%VAR))
CALL fatal_error &
4080 &(
"NC_WRITE_FILE:",&
4081 &
"FILE OBJECT HAS UNASSOCIATED VARIBLE OBJECT IN LINK LIST",&
4082 &
"FILE NAME: "//trim(ncf%FNAME))
4090 IF (found .AND. (next_stkcnt .GT. 0) )
THEN 4092 IF(
PRESENT(stkrng))
THEN 4093 CALL nc_write_var(var,dump,collectdata,collector,stkrng=stkrng)
4095 CALL nc_write_var(var,dump,collectdata,collector,stkcnt=next_stkcnt)
4097 ELSEIF (.NOT. found .AND. (next_stkcnt .EQ. 0) )
THEN 4102 current => current%NEXT
4105 CALL fatal_error(
"NC_WRITE_FILE REACHED AN IMPOSSIBLE STATE",&
4106 &
"PLEASE SET YOUR COMPUTER ON FIRE AND EXIT THE BUILDING QUICKLY")
4112 SUBROUTINE nc_write_var(VAR,DUMP,COLLECTDATA,COLLECTOR,STKCNT,STKRNG,IOSTART,IOCOUNT,IOSTRIDE)
4119 TYPE(
ncvar),
POINTER :: VAR
4120 INTEGER,
OPTIONAL :: STKCNT
4121 INTEGER,
OPTIONAL :: STKRNG(2)
4122 INTEGER,
ALLOCATABLE,
TARGET,
OPTIONAL :: IOSTART(:), IOCOUNT(:), IOSTRIDE(:)
4123 LOGICAL,
INTENT(IN) ::DUMP
4124 LOGICAL,
INTENT(IN) :: COLLECTDATA
4125 INTEGER,
INTENT(IN) :: COLLECTOR
4129 INTEGER :: CNT,DIMCNT
4134 INTEGER,
POINTER :: NSTART(:), NCOUNT(:), NSTRIDE(:)
4136 INTEGER,
POINTER :: RDIMS(:)
4138 INTEGER,
POINTER :: NSTRT(:), NCNT(:), NSTRD(:)
4141 TYPE(
ncdim),
POINTER :: DIM
4142 TYPE(
ncdimp),
POINTER :: DIMLINK
4146 INTEGER,
PARAMETER :: case_scl_int = 1
4147 INTEGER,
PARAMETER :: case_vec_int = 2
4148 INTEGER,
PARAMETER :: case_arr_int = 3
4149 INTEGER,
PARAMETER :: case_cub_int = 4
4150 INTEGER,
PARAMETER :: case_fda_int = 5
4152 INTEGER,
PARAMETER :: case_scl_flt = 6
4153 INTEGER,
PARAMETER :: case_vec_flt = 7
4154 INTEGER,
PARAMETER :: case_arr_flt = 8
4155 INTEGER,
PARAMETER :: case_cub_flt = 9
4156 INTEGER,
PARAMETER :: case_fda_flt = 10
4158 INTEGER,
PARAMETER :: case_scl_dbl = 11
4159 INTEGER,
PARAMETER :: case_vec_dbl = 12
4160 INTEGER,
PARAMETER :: case_arr_dbl = 13
4161 INTEGER,
PARAMETER :: case_cub_dbl = 14
4162 INTEGER,
PARAMETER :: case_fda_dbl = 15
4164 INTEGER,
PARAMETER :: case_scl_chr = 16
4165 INTEGER,
PARAMETER :: case_vec_chr = 17
4168 INTEGER,
POINTER :: SCL_INT
4169 INTEGER,
POINTER,
DIMENSION(:) :: GVEC_INT
4170 INTEGER,
POINTER,
DIMENSION(:,:) :: GARR_INT
4171 INTEGER,
POINTER,
DIMENSION(:,:,:) :: GCUB_INT
4172 INTEGER,
POINTER,
DIMENSION(:,:,:,:) :: GFDA_INT
4174 INTEGER,
POINTER,
DIMENSION(:) :: LVEC_INT
4175 INTEGER,
POINTER,
DIMENSION(:,:) :: LARR_INT
4176 INTEGER,
POINTER,
DIMENSION(:,:,:) :: LCUB_INT
4177 INTEGER,
POINTER,
DIMENSION(:,:,:,:) :: LFDA_INT
4179 REAL(SPA),
POINTER :: SCL_FLT
4180 REAL(SPA),
POINTER,
DIMENSION(:) :: LVEC_FLT
4181 REAL(SPA),
POINTER,
DIMENSION(:,:) :: LARR_FLT
4182 REAL(SPA),
POINTER,
DIMENSION(:,:,:) :: LCUB_FLT
4183 REAL(SPA),
POINTER,
DIMENSION(:,:,:,:) :: LFDA_FLT
4185 REAL(SPA),
POINTER,
DIMENSION(:) :: GVEC_FLT
4186 REAL(SPA),
POINTER,
DIMENSION(:,:) :: GARR_FLT
4187 REAL(SPA),
POINTER,
DIMENSION(:,:,:) :: GCUB_FLT
4188 REAL(SPA),
POINTER,
DIMENSION(:,:,:,:) :: GFDA_FLT
4190 REAL(DP),
POINTER :: SCL_DBL
4191 REAL(DP),
POINTER,
DIMENSION(:) :: GVEC_DBL
4192 REAL(DP),
POINTER,
DIMENSION(:,:) :: GARR_DBL
4193 REAL(DP),
POINTER,
DIMENSION(:,:,:) :: GCUB_DBL
4194 REAL(DP),
POINTER,
DIMENSION(:,:,:,:) :: GFDA_DBL
4196 REAL(DP),
POINTER,
DIMENSION(:) :: LVEC_DBL
4197 REAL(DP),
POINTER,
DIMENSION(:,:) :: LARR_DBL
4198 REAL(DP),
POINTER,
DIMENSION(:,:,:) :: LCUB_DBL
4199 REAL(DP),
POINTER,
DIMENSION(:,:,:,:) :: LFDA_DBL
4201 CHARACTER(LEN=80),
POINTER :: SCL_CHR
4202 CHARACTER(LEN=80),
POINTER,
DIMENSION(:) :: VEC_CHR
4204 CHARACTER(len=3) :: char1,char2,char3
4206 INTEGER :: STATUS, I
4207 CHARACTER(LEN=120) :: errmsg
4209 IF(dbg_set(dbg_sbr))
WRITE(ipt,*)
"START NC_WRITE_VAR:" 4211 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
4212 & (
"NC_WRITE_VAR: Variable object argument is not assocaited!")
4226 NULLIFY(nstart,ncount,nstride)
4227 NULLIFY(rdims,nstrt,ncnt,nstrd)
4228 NULLIFY(dim,dimlink)
4229 NULLIFY(scl_int,gvec_int,garr_int,gcub_int,gfda_int,lvec_int,larr_int,lcub_int,lfda_int)
4231 NULLIFY(scl_flt,gvec_flt,garr_flt,gcub_flt,gfda_flt,lvec_flt,larr_flt,lcub_flt,lfda_flt)
4232 NULLIFY(scl_dbl,gvec_dbl,garr_dbl,gcub_dbl,gfda_dbl,lvec_dbl,larr_dbl,lcub_dbl,lfda_dbl)
4233 NULLIFY(scl_chr,vec_chr)
4240 IF (
serial .and. (collector .NE.
myid .OR. collectdata))
THEN 4242 CALL fatal_error(
"NC_WRITE_VAR: SERIAL JOB CALLED A PARALLEL WRITE?")
4245 IF (.NOT. dump .and. .NOT. collectdata)
THEN 4247 CALL fatal_error(
"NC_WRITE_VAR: CALLED WITH BAD ARGUMENTS;",&
4248 &
"DUMP or COLLECTDATA or both must be true?")
4251 IF(dbg_set(dbg_sbrio))
THEN 4253 write(char2,
'(I3.3)')collector
4254 write(char3,
'(I3.3)')
myid 4255 WRITE(ipt,*)
"NC_WRITE_VAR Arguments:" 4257 WRITE(ipt,*)
"DUMP=",dump,
"; COLLECTDATA=",collectdata,
"; COLLECTOR="//char2//
"; MYID="//char3
4258 IF(
PRESENT(stkcnt))
THEN 4259 WRITE(ipt,*)
"STKCNT=",stkcnt
4261 WRITE(ipt,*)
"STKCNT= NONE" 4264 IF(
PRESENT(stkrng))
THEN 4265 WRITE(ipt,*)
"STKRNG=",stkrng
4267 WRITE(ipt,*)
"STKRNG= NONE" 4270 IF(
PRESENT(iostart))
THEN 4271 WRITE(ipt,*)
"IOSTART=",iostart
4273 WRITE(ipt,*)
"IOSTART= NONE" 4276 IF(
PRESENT(iocount))
THEN 4277 WRITE(ipt,*)
"IOCOUNT=",iocount
4279 WRITE(ipt,*)
"IOCOUNT= NONE" 4282 IF(
PRESENT(iostride))
THEN 4283 WRITE(ipt,*)
"IOSTRIDE=",iostride
4285 WRITE(ipt,*)
"IOSTRIDE= NONE" 4291 IF(var%NCID == -1 .and. dump)
THEN 4293 CALL fatal_error(
"NC_WRITE_VAR: CAN NOT WRITE TO FILE, IT IS NOT OPEN!")
4297 IF (
PRESENT(stkcnt) )
THEN 4299 IF (
PRESENT(stkrng) .or.
PRESENT(iostart) .or.
PRESENT(iocount) .or.
PRESENT(iostride))
THEN 4301 CALL fatal_error(
"NC_WRITE_VAR: You can not pass both STKCNT and STKRNG/START/COUNT/STRIDE !",&
4302 &
"Set STKCNT to write a time slice filling all other dimensions. OR",&
4303 &
"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
4310 &(
"NC_WRITE_VAR: CALLED WITH STKCNT ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
4314 ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
4318 var%CURR_STKCNT = stkcnt
4322 nstart(dimcnt) = stkcnt
4325 dimlink => var%DIMS%NEXT
4329 dimlink => dimlink%NEXT
4342 ALLOCATE(rdims(dimcnt))
4343 rdims(1:dimcnt)=ncount(1:dimcnt)
4344 ELSE IF (dimcnt == 0)
THEN 4351 ELSEIF (
PRESENT(stkrng) )
THEN 4353 IF (
PRESENT(stkcnt) .or.
PRESENT(iostart) .or.
PRESENT(iocount) .or.
PRESENT(iostride))
THEN 4355 CALL fatal_error(
"NC_WRITE_VAR: You can not pass both STKRNG and STKCNT/START/COUNT/STRIDE !",&
4356 &
"Set STKRNG to write a time range filling all other dimensions. OR",&
4357 &
"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
4364 &(
"NC_WRITE_VAR: CALLED WITH STKRNG ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
4368 ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
4372 var%CURR_STKCNT = -1
4376 nstart(dimcnt) = stkrng(1)
4379 dimlink => var%DIMS%NEXT
4383 dimlink => dimlink%NEXT
4385 ncount(dimcnt)=stkrng(2) - stkrng(1)+1
4394 ELSE IF(
PRESENT(iostart) .and.
PRESENT(iocount))
THEN 4399 IF(.not.
PRESENT(iostride))
THEN 4400 ALLOCATE(nstride(dimcnt))
4406 IF(dimcnt /=
size(nstart) .or. &
4407 & dimcnt /=
size(ncount) .or. &
4408 & dimcnt /=
size(nstride) )
THEN 4411 & (
"NC_WRITE_VAR: Variable's # of file dimensions does not matach size(NSTART/NCOUNT/NSTRIDE) arugments?")
4416 var%CURR_STKCNT = -1
4421 IF(ncount(i)>1) cnt=cnt+1
4426 ALLOCATE(rdims(cnt))
4429 IF(ncount(i)>1)
THEN 4431 rdims(cnt)=ncount(i)
4444 ELSE IF( .not. (
PRESENT(iostart) .or.
PRESENT(iocount) .or.&
4445 &
PRESENT(stkcnt) .or.
PRESENT(stkrng) .or.
PRESENT(iostride)))
THEN 4447 ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
4455 dimlink => var%DIMS%NEXT
4459 dimlink => dimlink%NEXT
4467 IF(ncount(i)>1) cnt=cnt+1
4472 ALLOCATE(rdims(cnt))
4475 IF(ncount(i)>1)
THEN 4477 rdims(cnt)=ncount(i)
4492 IF(dbg_set(dbg_log))
THEN 4493 write(ipt,*)
"# IOSTART ::",
PRESENT(iostart)
4494 write(ipt,*)
"# IOCOUNT ::",
PRESENT(iocount)
4495 write(ipt,*)
"# IOSTRIDE ::",
PRESENT(iostride)
4496 write(ipt,*)
"# STKCNT ::",
PRESENT(stkcnt)
4497 write(ipt,*)
"# STKRNG ::",
PRESENT(stkrng)
4500 CALL fatal_error(
"NC_WRITE_VAR: YOU SPECIFIED AN ILLEGAL COMBINATION OF AGUMENTS?",&
4501 &
"Valid choices are STKCNT or STKRNG or NSTART,NCOUNT,(NSTRIDE) or none")
4504 IF(dbg_set(dbg_sbrio))
THEN 4506 write(ipt,*)
"MEMORY DIMENSION COUNT IS::",dimcnt
4512 select case(var%XTYPE)
4514 call fatal_error(
"NC_WRITE_VAR: NOT SET UP TO WRITE BYTE DATA")
4516 call fatal_error(
"NC_WRITE_VAR: NOT SET UP TO WRITE SHORT DATA")
4518 if (dimcnt == 0) code = case_scl_int
4519 if (dimcnt == 1) code = case_vec_int
4520 if (dimcnt == 2) code = case_arr_int
4521 if (dimcnt == 3) code = case_cub_int
4522 if (dimcnt == 4) code = case_fda_int
4524 if (dimcnt == 0) code = case_scl_flt
4525 if (dimcnt == 1) code = case_vec_flt
4526 if (dimcnt == 2) code = case_arr_flt
4527 if (dimcnt == 3) code = case_cub_flt
4528 if (dimcnt == 4) code = case_fda_flt
4530 if (dimcnt == 0) code = case_scl_dbl
4531 if (dimcnt == 1) code = case_vec_dbl
4532 if (dimcnt == 2) code = case_arr_dbl
4533 if (dimcnt == 3) code = case_cub_dbl
4534 if (dimcnt == 4) code = case_fda_dbl
4537 IF(ncount(1) == 1)
THEN 4538 WRITE(ipt,*)
"SINGLETON CHARACTER DATA!" 4539 IF(.not.
ASSOCIATED(rdims,ncount))
THEN 4547 ALLOCATE(rdims(dimcnt))
4549 rdims(1) = ncount(1)
4550 DO i = 2,
size(ncount)
4551 IF(ncount(i)>1)
THEN 4553 rdims(cnt)=ncount(i)
4558 if (dimcnt == 1) code = case_scl_chr
4559 if (dimcnt == 2) code = case_vec_chr
4563 call fatal_error(
"NC_WRITE_VAR: Unkown data type?")
4567 errmsg=
"NC_WRITE_VAR: VARIABLE: "//var%varname//
"; Can not be writen by nf90_put_var!" 4575 IF(.NOT.
ASSOCIATED(var%SCL_INT))
THEN 4577 IF(
ASSOCIATED(var%VEC_INT))
THEN 4578 IF(
size(var%VEC_INT)==1) var%SCL_INT=>var%VEC_INT(1)
4579 ELSE IF(
ASSOCIATED(var%ARR_INT))
THEN 4580 IF(
size(var%ARR_INT)==1) var%SCL_INT=>var%ARR_INT(1,1)
4581 ELSE IF(
ASSOCIATED(var%CUB_INT))
THEN 4582 IF(
size(var%CUB_INT)==1) var%SCL_INT=>var%CUB_INT(1,1,1)
4583 ELSE IF(
ASSOCIATED(var%FDA_INT))
THEN 4584 IF(
size(var%FDA_INT)==1) var%SCL_INT=>var%FDA_INT(1,1,1,1)
4588 CALL fatal_error(
"NC_WRITE_VAR: Variable objects SCL_INT data is NOT assocaited!")
4592 scl_int => var%SCL_INT
4596 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4597 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4602 IF (
SIZE(nstart) .GT. 0)
THEN 4604 if (product(ncount) .NE. 1)
CALL fatal_error&
4605 & (
"NC_WRITE_VAR: NCOUNT dimension invalid while reading scl_int?")
4608 allocate(gvec_int(1)); gvec_int(1) = scl_int
4610 status = nf90_put_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
4613 deallocate(gvec_int)
4615 status = nf90_put_var(var%NCID,var%VARID,scl_int)
4628 IF(.NOT.
ASSOCIATED(var%VEC_INT))
THEN 4630 IF(
ASSOCIATED(var%ARR_INT))
THEN 4631 IF(
size(var%ARR_INT,1)==1) var%VEC_INT=>var%ARR_INT(1,1:)
4632 IF(
size(var%ARR_INT,2)==1) var%VEC_INT=>var%ARR_INT(1:,1)
4633 ELSE IF(
ASSOCIATED(var%CUB_INT))
THEN 4634 IF(
size(var%CUB_INT,1)==1)
THEN 4635 IF(
size(var%CUB_INT,2)==1) var%VEC_INT=>var%CUB_INT(1,1,1:)
4636 IF(
size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1,1:,1)
4638 IF(
size(var%CUB_INT,1)==2)
THEN 4639 IF(
size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1:,1,1)
4653 CALL fatal_error(
"NC_WRITE_VAR: Variable objects VEC_FLT data is NOT assocaited!")
4657 nsize=ubound(var%VEC_INT,1)
4660 IF(collectdata)
THEN 4661 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4662 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4669 If(.NOT. collectdata) gvec_int => var%VEC_INT(1:rdims(1))
4671 status = nf90_put_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
4676 IF (collectdata)
deallocate(gvec_int)
4690 IF(.NOT.
ASSOCIATED(var%ARR_INT))
THEN 4692 IF(
ASSOCIATED(var%CUB_INT))
THEN 4693 IF(
size(var%CUB_INT,1)==1) var%ARR_INT=>var%CUB_INT(1,1:,1:)
4694 IF(
size(var%CUB_INT,2)==1) var%ARR_INT=>var%CUB_INT(1:,1,1:)
4695 IF(
size(var%CUB_INT,3)==1) var%ARR_INT=>var%CUB_INT(1:,1:,1)
4699 CALL fatal_error(
"NC_WRITE_VAR: Variable objects ARR_INT data is NOT assocaited!")
4702 nsize=ubound(var%ARR_INT,1)
4705 IF(collectdata)
THEN 4706 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4707 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4714 If(.NOT. collectdata) garr_int => var%ARR_INT(1:rdims(1),1:rdims(2))
4717 status = nf90_put_var(var%NCID,var%VARID,garr_int,nstart,ncount,nstride)
4722 IF (collectdata)
deallocate(garr_int)
4735 IF(.NOT.
ASSOCIATED(var%cub_INT))
THEN 4737 CALL fatal_error(
"NC_WRITE_VAR: Variable objects CUB_INT data is NOT assocaited!")
4740 nsize=ubound(var%CUB_INT,1)
4743 IF(collectdata)
THEN 4744 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4745 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4752 If(.NOT. collectdata) gcub_int => var%CUB_INT(1:rdims(1),1:rdims(2),1:rdims(3))
4754 status = nf90_put_var(var%NCID,var%VARID,gcub_int,nstart,ncount,nstride)
4759 IF (collectdata)
deallocate(gcub_int)
4773 IF(.NOT.
ASSOCIATED(var%fda_INT))
THEN 4775 CALL fatal_error(
"NC_WRITE_VAR: Variable objects FDA_INT data is NOT assocaited!")
4778 nsize=ubound(var%FDA_INT,1)
4781 IF(collectdata)
THEN 4782 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4783 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4790 If(.NOT. collectdata) gfda_int => var%FDA_INT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
4792 status = nf90_put_var(var%NCID,var%VARID,gfda_int,nstart,ncount,nstride)
4797 IF (collectdata)
deallocate(gfda_int)
4811 IF(.NOT.
ASSOCIATED(var%SCL_FLT))
THEN 4813 IF(
ASSOCIATED(var%VEC_FLT))
THEN 4814 IF(
size(var%VEC_FLT)==1) var%SCL_FLT=>var%VEC_FLT(1)
4815 ELSE IF(
ASSOCIATED(var%ARR_FLT))
THEN 4816 IF(
size(var%ARR_FLT)==1) var%SCL_FLT=>var%ARR_FLT(1,1)
4817 ELSE IF(
ASSOCIATED(var%CUB_FLT))
THEN 4818 IF(
size(var%CUB_FLT)==1) var%SCL_FLT=>var%CUB_FLT(1,1,1)
4822 CALL fatal_error(
"NC_WRITE_VAR: Variable objects SCL_FLT data is NOT assocaited!")
4826 scl_flt => var%SCL_FLT
4830 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4831 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4836 IF (
SIZE(nstart) .GT. 0)
THEN 4838 if (product(ncount) .NE. 1)
CALL fatal_error&
4839 & (
"NC_WRITE_VAR: NCOUNT dimension invalid while reading scl_flt?")
4842 allocate(gvec_flt(1)); gvec_flt(1) = scl_flt
4843 status = nf90_put_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
4846 deallocate(gvec_flt)
4848 status = nf90_put_var(var%NCID,var%VARID,scl_flt)
4860 IF(.NOT.
ASSOCIATED(var%VEC_FLT))
THEN 4862 IF(
ASSOCIATED(var%ARR_FLT))
THEN 4863 IF(
size(var%ARR_FLT,1)==1) var%VEC_FLT=>var%ARR_FLT(1,1:)
4864 IF(
size(var%ARR_FLT,2)==1) var%VEC_FLT=>var%ARR_FLT(1:,1)
4865 ELSE IF(
ASSOCIATED(var%CUB_FLT))
THEN 4866 IF(
size(var%CUB_FLT,1)==1)
THEN 4867 IF(
size(var%CUB_FLT,2)==1) var%VEC_FLT=>var%CUB_FLT(1,1,1:)
4868 IF(
size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1,1:,1)
4870 IF(
size(var%CUB_FLT,1)==2)
THEN 4871 IF(
size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1:,1,1)
4876 CALL fatal_error(
"NC_WRITE_VAR: Variable objects VEC_FLT data is NOT assocaited!")
4880 nsize=ubound(var%VEC_FLT,1)
4883 IF(collectdata)
THEN 4884 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4885 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4892 If(.NOT. collectdata) gvec_flt => var%VEC_FLT(1:rdims(1))
4895 status = nf90_put_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
4900 IF (collectdata)
deallocate(gvec_flt)
4913 IF(.NOT.
ASSOCIATED(var%ARR_FLT))
THEN 4915 IF(
ASSOCIATED(var%CUB_FLT))
THEN 4916 IF(
size(var%CUB_FLT,1)==1) var%ARR_FLT=>var%CUB_FLT(1,1:,1:)
4917 IF(
size(var%CUB_FLT,2)==1) var%ARR_FLT=>var%CUB_FLT(1:,1,1:)
4918 IF(
size(var%CUB_FLT,3)==1) var%ARR_FLT=>var%CUB_FLT(1:,1:,1)
4922 CALL fatal_error(
"NC_WRITE_VAR: Variable objects ARR_FLT data is NOT assocaited!")
4926 nsize=ubound(var%ARR_FLT,1)
4929 IF(collectdata)
THEN 4930 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4931 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4938 If(.NOT. collectdata) garr_flt => var%ARR_FLT(1:rdims(1),1:rdims(2))
4940 status = nf90_put_var(var%NCID,var%VARID,garr_flt,nstart,ncount,nstride)
4946 IF (collectdata)
deallocate(garr_flt)
4960 IF(.NOT.
ASSOCIATED(var%cub_FLT))
THEN 4962 CALL fatal_error(
"NC_WRITE_VAR: Variable objects CUB_FLT data is NOT assocaited!")
4965 nsize=ubound(var%CUB_FLT,1)
4968 IF(collectdata)
THEN 4969 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 4970 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4977 If(.NOT. collectdata) gcub_flt => var%CUB_FLT(1:rdims(1),1:rdims(2),1:rdims(3))
4979 status = nf90_put_var(var%NCID,var%VARID,gcub_flt,nstart,ncount,nstride)
4984 IF (collectdata)
deallocate(gcub_flt)
4997 IF(.NOT.
ASSOCIATED(var%fda_FLT))
THEN 4999 CALL fatal_error(
"NC_WRITE_VAR: Variable objects FDA_FLT data is NOT assocaited!")
5002 nsize=ubound(var%FDA_FLT,1)
5005 IF(collectdata)
THEN 5006 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5007 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5014 If(.NOT. collectdata) gfda_flt => var%FDA_FLT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
5016 status = nf90_put_var(var%NCID,var%VARID,gfda_flt,nstart,ncount,nstride)
5021 IF (collectdata)
deallocate(gfda_flt)
5034 IF(.NOT.
ASSOCIATED(var%SCL_DBL))
THEN 5036 IF(
ASSOCIATED(var%VEC_DBL))
THEN 5037 IF(
size(var%VEC_DBL)==1) var%SCL_DBL=>var%VEC_DBL(1)
5038 ELSE IF(
ASSOCIATED(var%ARR_DBL))
THEN 5039 IF(
size(var%ARR_DBL)==1) var%SCL_DBL=>var%ARR_DBL(1,1)
5040 ELSE IF(
ASSOCIATED(var%CUB_DBL))
THEN 5041 IF(
size(var%CUB_DBL)==1) var%SCL_DBL=>var%CUB_DBL(1,1,1)
5045 CALL fatal_error(
"NC_WRITE_VAR: Variable objects SCL_DBL data is NOT assocaited!")
5049 scl_dbl => var%SCL_DBL
5053 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5054 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5058 IF (
SIZE(nstart) .GT. 0)
THEN 5060 if (product(ncount) .NE. 1)
CALL fatal_error&
5061 & (
"NC_WRITE_VAR: NCOUNT dimension invalid while reading scl_dbl?")
5064 allocate(gvec_dbl(1)); gvec_dbl(1) = scl_dbl
5065 status = nf90_put_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
5068 deallocate(gvec_dbl)
5070 status = nf90_put_var(var%NCID,var%VARID,scl_dbl)
5083 IF(.NOT.
ASSOCIATED(var%VEC_DBL))
THEN 5085 IF(
ASSOCIATED(var%ARR_DBL))
THEN 5086 IF(
size(var%ARR_DBL,1)==1) var%VEC_DBL=>var%ARR_DBL(1,1:)
5087 IF(
size(var%ARR_DBL,2)==1) var%VEC_DBL=>var%ARR_DBL(1:,1)
5088 ELSE IF(
ASSOCIATED(var%CUB_DBL))
THEN 5089 IF(
size(var%CUB_DBL,1)==1)
THEN 5090 IF(
size(var%CUB_DBL,2)==1) var%VEC_DBL=>var%CUB_DBL(1,1,1:)
5091 IF(
size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1,1:,1)
5093 IF(
size(var%CUB_DBL,1)==2)
THEN 5094 IF(
size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1:,1,1)
5099 CALL fatal_error(
"NC_WRITE_VAR: Variable objects VEC_DBL data is NOT assocaited!")
5103 nsize=ubound(var%VEC_DBL,1)
5105 IF(collectdata)
THEN 5106 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5107 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5115 If(.NOT. collectdata) gvec_dbl => var%VEC_DBL(1:rdims(1))
5117 status = nf90_put_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
5122 IF (collectdata)
deallocate(gvec_dbl)
5135 IF(.NOT.
ASSOCIATED(var%ARR_DBL))
THEN 5137 IF(
ASSOCIATED(var%CUB_DBL))
THEN 5138 IF(
size(var%CUB_DBL,1)==1) var%ARR_DBL=>var%CUB_DBL(1,1:,1:)
5139 IF(
size(var%CUB_DBL,2)==1) var%ARR_DBL=>var%CUB_DBL(1:,1,1:)
5140 IF(
size(var%CUB_DBL,3)==1) var%ARR_DBL=>var%CUB_DBL(1:,1:,1)
5144 CALL fatal_error(
"NC_WRITE_VAR: Variable objects ARR_DBL data is NOT assocaited!")
5148 nsize=ubound(var%ARR_DBL,1)
5151 IF(collectdata)
THEN 5152 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5153 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5160 If(.NOT. collectdata) garr_dbl => var%ARR_DBL(1:rdims(1),1:rdims(2))
5162 status = nf90_put_var(var%NCID,var%VARID,garr_dbl,nstart,ncount,nstride)
5167 IF (collectdata)
deallocate(garr_dbl)
5179 IF(.NOT.
ASSOCIATED(var%CUB_DBL))
THEN 5181 CALL fatal_error(
"NC_WRITE_VAR: Variable objects CUB_DBL data is NOT assocaited!")
5184 nsize=ubound(var%CUB_DBL,1)
5186 IF(collectdata)
THEN 5187 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5188 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5195 If(.NOT. collectdata) gcub_dbl => var%CUB_DBL(1:rdims(1),1:rdims(2),1:rdims(3))
5197 status = nf90_put_var(var%NCID,var%VARID,gcub_dbl,nstart,ncount,nstride)
5202 IF (collectdata)
deallocate(gcub_dbl)
5214 IF(.NOT.
ASSOCIATED(var%FDA_DBL))
THEN 5216 CALL fatal_error(
"NC_WRITE_VAR: Variable objects FDA_DBL data is NOT assocaited!")
5219 nsize=ubound(var%FDA_DBL,1)
5221 IF(collectdata)
THEN 5222 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5223 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5230 If(.NOT. collectdata) gfda_dbl => var%FDA_DBL(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
5232 status = nf90_put_var(var%NCID,var%VARID,gfda_dbl,nstart,ncount,nstride)
5237 IF (collectdata)
deallocate(gfda_dbl)
5249 IF(.NOT.
ASSOCIATED(var%SCL_CHR))
THEN 5251 IF (
ASSOCIATED(var%vec_chr))
THEN 5252 IF(
SIZE(var%vec_chr)==1) var%scl_chr => var%vec_chr(1)
5256 CALL fatal_error(
"NC_WRITE_VAR: Variable objects SCL_CHR data is NOT assocaited!")
5260 scl_chr => var%SCL_CHR
5264 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5265 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5271 nsize = len_trim(scl_chr)
5272 IF(nsize < rdims(1)) ncount(1)=nsize
5274 status = nf90_put_var(var%NCID,var%VARID,scl_chr,nstart,ncount,nstride)
5285 IF(.NOT.
ASSOCIATED(var%VEC_CHR))
THEN 5287 CALL fatal_error(
"NC_WRITE_VAR: Variable objects VEC_CH& 5288 &R data is NOT assocaited!")
5291 vec_chr => var%VEC_CHR
5295 CALL fatal_error(
"NC_WRITE_VAR: COLLECT DATA FLAG IS T& 5296 &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5305 allocate(nstrt(cnt),ncnt(cnt),nstrd(cnt))
5313 scl_chr => vec_chr(i)
5317 nsize = len_trim(scl_chr)
5318 IF(nsize < rdims(1))
THEN 5328 status = nf90_put_var(var%NCID,var%VARID,scl_chr,nstrt,ncnt,nstrd)
5334 deallocate(nstrt,ncnt,nstrd)
5342 call fatal_error(
"NC_WRITE_VAR: UNKNOWN CASE")
5346 status = nf90_sync(var%ncid)
5351 IF(.not.
ASSOCIATED(rdims,ncount))
THEN 5352 IF(
ASSOCIATED(rdims))
DEALLOCATE(rdims)
5358 IF(
PRESENT(iostart))
THEN 5364 IF(
PRESENT(iocount))
THEN 5370 IF(
PRESENT(iostride))
THEN 5378 IF(dbg_set(dbg_sbr))
WRITE(ipt,*)
"END NC_WRITE_VAR:" 5384 SUBROUTINE nc_read_var(VAR,STKCNT,STKRNG,IOSTART,IOCOUNT,IOSTRIDE,DEALERID,PARALLEL)
5387 TYPE(
ncvar),
POINTER :: VAR
5388 INTEGER,
INTENT(IN),
OPTIONAL :: STKCNT
5389 INTEGER,
INTENT(IN),
OPTIONAL :: STKRNG(2)
5390 INTEGER,
INTENT(IN),
OPTIONAL :: DEALERID
5391 LOGICAL,
INTENT(IN),
OPTIONAL :: PARALLEL
5392 INTEGER,
ALLOCATABLE,
TARGET,
OPTIONAL :: IOSTART(:), IOCOUNT(:), IOSTRIDE(:)
5400 INTEGER,
POINTER :: NSTART(:), NCOUNT(:), NSTRIDE(:)
5403 INTEGER,
POINTER :: RDIMS(:)
5405 INTEGER,
POINTER :: NSTRT(:), NCNT(:), NSTRD(:)
5409 INTEGER :: CNT,DIMCNT
5410 INTEGER :: NSIZE, MYSIZE
5414 TYPE(
ncdim),
POINTER :: DIM
5415 TYPE(
ncdimp),
POINTER :: DIMLINK
5416 TYPE(
ncfile),
POINTER :: NCF
5420 INTEGER,
PARAMETER :: case_scl_int = 1
5421 INTEGER,
PARAMETER :: case_vec_int = 2
5422 INTEGER,
PARAMETER :: case_arr_int = 3
5423 INTEGER,
PARAMETER :: case_cub_int = 4
5424 INTEGER,
PARAMETER :: case_fda_int = 5
5426 INTEGER,
PARAMETER :: case_scl_flt = 6
5427 INTEGER,
PARAMETER :: case_vec_flt = 7
5428 INTEGER,
PARAMETER :: case_arr_flt = 8
5429 INTEGER,
PARAMETER :: case_cub_flt = 9
5430 INTEGER,
PARAMETER :: case_fda_flt = 10
5432 INTEGER,
PARAMETER :: case_scl_dbl = 11
5433 INTEGER,
PARAMETER :: case_vec_dbl = 12
5434 INTEGER,
PARAMETER :: case_arr_dbl = 13
5435 INTEGER,
PARAMETER :: case_cub_dbl = 14
5436 INTEGER,
PARAMETER :: case_fda_dbl = 15
5438 INTEGER,
PARAMETER :: case_scl_chr = 16
5439 INTEGER,
PARAMETER :: case_vec_chr = 17
5442 INTEGER,
POINTER :: SCL_INT
5443 INTEGER,
POINTER,
DIMENSION(:) :: GVEC_INT
5444 INTEGER,
POINTER,
DIMENSION(:,:) :: GARR_INT
5445 INTEGER,
POINTER,
DIMENSION(:,:,:) :: GCUB_INT
5446 INTEGER,
POINTER,
DIMENSION(:,:,:,:) :: GFDA_INT
5448 INTEGER,
POINTER,
DIMENSION(:) :: LVEC_INT
5449 INTEGER,
POINTER,
DIMENSION(:,:) :: LARR_INT
5450 INTEGER,
POINTER,
DIMENSION(:,:,:) :: LCUB_INT
5451 INTEGER,
POINTER,
DIMENSION(:,:,:,:) :: LFDA_INT
5453 REAL(SPA),
POINTER :: SCL_FLT
5454 REAL(SPA),
POINTER,
DIMENSION(:) :: LVEC_FLT
5455 REAL(SPA),
POINTER,
DIMENSION(:,:) :: LARR_FLT
5456 REAL(SPA),
POINTER,
DIMENSION(:,:,:) :: LCUB_FLT
5457 REAL(SPA),
POINTER,
DIMENSION(:,:,:,:) :: LFDA_FLT
5459 REAL(SPA),
POINTER,
DIMENSION(:) :: GVEC_FLT
5460 REAL(SPA),
POINTER,
DIMENSION(:,:) :: GARR_FLT
5461 REAL(SPA),
POINTER,
DIMENSION(:,:,:) :: GCUB_FLT
5462 REAL(SPA),
POINTER,
DIMENSION(:,:,:,:) :: GFDA_FLT
5464 REAL(DP),
POINTER :: SCL_DBL
5465 REAL(DP),
POINTER,
DIMENSION(:) :: GVEC_DBL
5466 REAL(DP),
POINTER,
DIMENSION(:,:) :: GARR_DBL
5467 REAL(DP),
POINTER,
DIMENSION(:,:,:) :: GCUB_DBL
5468 REAL(DP),
POINTER,
DIMENSION(:,:,:,:) :: GFDA_DBL
5470 REAL(DP),
POINTER,
DIMENSION(:) :: LVEC_DBL
5471 REAL(DP),
POINTER,
DIMENSION(:,:) :: LARR_DBL
5472 REAL(DP),
POINTER,
DIMENSION(:,:,:) :: LCUB_DBL
5473 REAL(DP),
POINTER,
DIMENSION(:,:,:,:) :: LFDA_DBL
5475 CHARACTER(LEN=80),
POINTER :: SCL_CHR
5476 CHARACTER(LEN=80),
POINTER :: VEC_CHR(:)
5479 CHARACTER(len=3) :: char1,char2,char3
5481 INTEGER :: STATUS, I
5482 CHARACTER(LEN=120) :: errmsg
5484 IF(dbg_set(dbg_sbr))
WRITE(
ipt,*)
"START NC_READ_VAR:" 5486 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
5487 & (
"NC_READ_VAR: Variable object argument is not assocaited!")
5507 NULLIFY(nstart,ncount,nstride)
5508 NULLIFY(rdims,nstrt,ncnt,nstrd)
5509 NULLIFY(dim,dimlink,ncf)
5510 NULLIFY(scl_int,gvec_int,garr_int,gcub_int,gfda_int,lvec_int,larr_int,lcub_int,lfda_int)
5512 NULLIFY(scl_flt,gvec_flt,garr_flt,gcub_flt,gfda_flt,lvec_flt,larr_flt,lcub_flt,lfda_flt)
5513 NULLIFY(scl_dbl,gvec_dbl,garr_dbl,gcub_dbl,gfda_dbl,lvec_dbl,larr_dbl,lcub_dbl,lfda_dbl)
5514 NULLIFY(scl_chr,vec_chr)
5517 IF (
PRESENT(dealerid))
THEN 5554 IF (
PRESENT(parallel))
THEN 5555 IF(
serial .and. parallel)
THEN 5557 CALL fatal_error(
"NC_READ_VAR: PARALLEL ERROR!",&
5558 &
"The model is running on a single processor,",&
5559 &
"but asked to do a parallel NC_READ_VAR operation!")
5565 ser_read=.NOT. par_read
5570 IF(dbg_set(dbg_sbrio))
THEN 5572 write(char2,
'(I3.3)')dealer
5573 write(char3,
'(I3.3)')
myid 5574 WRITE(
ipt,*)
"NC_READ_VAR Arguments:" 5576 WRITE(
ipt,*)
"; DEALER="//char2//
"; MYID="//char3//
"; PAR_READ=",par_read
5579 IF(
PRESENT(stkcnt))
THEN 5580 WRITE(
ipt,*)
"STKCNT=",stkcnt
5582 WRITE(
ipt,*)
"STKCNT= NONE" 5585 IF(
PRESENT(stkrng))
THEN 5586 WRITE(
ipt,*)
"STKRNG=",stkrng
5588 WRITE(
ipt,*)
"STKRNG= NONE" 5591 IF(
PRESENT(iostart))
THEN 5592 WRITE(
ipt,*)
"IOSTART=",iostart
5594 WRITE(
ipt,*)
"IOSTART= NONE" 5597 IF(
PRESENT(iocount))
THEN 5598 WRITE(
ipt,*)
"IOCOUNT=",iocount
5600 WRITE(
ipt,*)
"IOCOUNT= NONE" 5603 IF(
PRESENT(iostride))
THEN 5604 WRITE(
ipt,*)
"IOSTRIDE=",iostride
5606 WRITE(
ipt,*)
"IOSTRIDE= NONE" 5611 IF(var%NCID == -1 .and. dealer ==
myid)
THEN 5613 CALL fatal_error(
"NC_READ_VAR: CAN NOT READ FILE, IT IS NOT OPEN!")
5618 IF (
PRESENT(stkcnt) )
THEN 5620 IF (
PRESENT(stkrng) .or.
PRESENT(iostart) .or.
PRESENT(iocount) .or.
PRESENT(iostride))
THEN 5622 CALL fatal_error(
"NC_READ_VAR: You can not pass both STKCNT and STKRNG/START/COUNT/STRIDE !",&
5623 &
"Set STKCNT to read a time slice filling all other dimensions. OR",&
5624 &
"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
5631 &(
"NC_READ_VAR: CALLED WITH STKCNT ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
5636 ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
5640 var%CURR_STKCNT = stkcnt
5644 nstart(dimcnt) = stkcnt
5647 dimlink => var%DIMS%NEXT
5651 dimlink => dimlink%NEXT
5664 ALLOCATE(rdims(dimcnt))
5665 rdims(1:dimcnt)=ncount(1:dimcnt)
5666 ELSE IF (dimcnt == 0)
THEN 5673 ELSEIF (
PRESENT(stkrng) )
THEN 5675 IF (
PRESENT(stkcnt) .or.
PRESENT(iostart) .or.
PRESENT(iocount) .or.
PRESENT(iostride))
THEN 5677 CALL fatal_error(
"NC_READ_VAR: You can not pass both STKRNG and STKCNT/START/COUNT/STRIDE !",&
5678 &
"Set STKRNG to read a time range filling all other dimensions. OR",&
5679 &
"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
5686 &(
"NC_READ_VAR: CALLED WITH STKRNG ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
5691 ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
5695 var%CURR_STKCNT = -1
5699 nstart(dimcnt) = stkrng(1)
5702 dimlink => var%DIMS%NEXT
5706 dimlink => dimlink%NEXT
5708 ncount(dimcnt)=stkrng(2)-stkrng(1)+1
5720 ELSE IF(
PRESENT(iostart) .and.
PRESENT(iocount))
THEN 5725 IF(.not.
PRESENT(iostride))
THEN 5726 ALLOCATE(nstride(dimcnt))
5732 IF(dimcnt /=
size(nstart) .or. &
5733 & dimcnt /=
size(ncount) .or. &
5734 & dimcnt /=
size(nstride) )
THEN 5737 & (
"NC_READ_VAR: Variable's # of file dimensions does not matach size(NSTART/NCOUNT/NSTRIDE) arugments?")
5742 var%CURR_STKCNT = -1
5747 IF(ncount(i)>1) cnt=cnt+1
5753 ALLOCATE(rdims(cnt))
5756 IF(ncount(i)>1)
THEN 5758 rdims(cnt)=ncount(i)
5771 ELSE IF( .not. (
PRESENT(iostart) .or.
PRESENT(iocount) .or.&
5772 &
PRESENT(stkcnt) .or.
PRESENT(iostride)))
THEN 5774 ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
5777 var%CURR_STKCNT = -1
5782 dimlink => var%DIMS%NEXT
5786 dimlink => dimlink%NEXT
5794 IF(ncount(i)>1) cnt=cnt+1
5800 ALLOCATE(rdims(cnt))
5803 IF(ncount(i)>1)
THEN 5805 rdims(cnt)=ncount(i)
5820 IF(dbg_set(dbg_log))
THEN 5821 write(
ipt,*)
"# IOSTART ::",
PRESENT(iostart)
5822 write(
ipt,*)
"# IOCOUNT ::",
PRESENT(iocount)
5823 write(
ipt,*)
"# IOSTRIDE ::",
PRESENT(iostride)
5824 write(
ipt,*)
"# STKCNT ::",
PRESENT(stkcnt)
5825 write(
ipt,*)
"# STKRNG ::",
PRESENT(stkrng)
5828 CALL fatal_error(
"NC_READ_VAR: YOU SPECIFIED AN ILLEGAL COMBINATION OF AGUMENTS?",&
5829 &
"Valid choices are STKCNT or STKRNG or NSTART,NCOUNT,(NSTRIDE) or none")
5832 IF(dbg_set(dbg_sbrio))
THEN 5834 write(
ipt,*)
"MEMORY DIMENSION COUNT IS ::",dimcnt
5842 select case(var%XTYPE)
5844 call fatal_error(
"NC_READ_VAR: NOT SET UP TO WRITE BYTE DATA")
5846 call fatal_error(
"NC_READ_VAR: NOT SET UP TO WRITE SHORT DATA")
5848 if (dimcnt == 0) code = case_scl_int
5849 if (dimcnt == 1) code = case_vec_int
5850 if (dimcnt == 2) code = case_arr_int
5851 if (dimcnt == 3) code = case_cub_int
5852 if (dimcnt == 4) code = case_fda_int
5856 if (dimcnt == 0) code = case_scl_flt
5857 if (dimcnt == 1) code = case_vec_flt
5858 if (dimcnt == 2) code = case_arr_flt
5859 if (dimcnt == 3) code = case_cub_flt
5860 if (dimcnt == 4) code = case_fda_flt
5864 if (dimcnt == 0) code = case_scl_dbl
5865 if (dimcnt == 1) code = case_vec_dbl
5866 if (dimcnt == 2) code = case_arr_dbl
5867 if (dimcnt == 3) code = case_cub_dbl
5868 if (dimcnt == 4) code = case_fda_dbl
5871 IF(ncount(1) == 1)
THEN 5872 WRITE(
ipt,*)
"SINGLETON CHARACTER DATA!" 5873 IF(.not.
ASSOCIATED(rdims,ncount))
THEN 5881 ALLOCATE(rdims(dimcnt))
5883 rdims(1) = ncount(1)
5884 DO i = 2,
size(ncount)
5885 IF(ncount(i)>1)
THEN 5887 rdims(cnt)=ncount(i)
5893 if (dimcnt == 1) code = case_scl_chr
5894 if (dimcnt == 2) code = case_vec_chr
5898 call fatal_error(
"NC_READ_VAR: Unkown data type?")
5902 errmsg=
"NC_READ_VAR: VARIABLE: "//var%varname//
"; Can not be read by nf90_get_var!" 5910 IF(.NOT.
ASSOCIATED(var%SCL_FLT))
THEN 5912 IF(
ASSOCIATED(var%VEC_FLT))
THEN 5913 IF(
size(var%VEC_FLT)==1) var%SCL_FLT=>var%VEC_FLT(1)
5914 ELSE IF(
ASSOCIATED(var%ARR_FLT))
THEN 5915 IF(
size(var%ARR_FLT)==1) var%SCL_FLT=>var%ARR_FLT(1,1)
5916 ELSE IF(
ASSOCIATED(var%CUB_FLT))
THEN 5917 IF(
size(var%CUB_FLT)==1) var%SCL_FLT=>var%CUB_FLT(1,1,1)
5918 ELSE IF(
ASSOCIATED(var%FDA_FLT))
THEN 5919 IF(
size(var%FDA_FLT)==1) var%SCL_FLT=>var%FDA_FLT(1,1,1,1)
5922 CALL fatal_error(
"NC_READ_VAR: Variable objects SCL_FLT data is NOT assocaited!")
5927 IF (ser_read .OR. dealer .EQ.
myid)
THEN 5930 IF (
SIZE(nstart) .GT. 0)
THEN 5932 if (product(ncount) .NE. 1)
CALL fatal_error&
5933 & (
"NC_READ_VAR: NCOUNT dimension invalid while reading scl_flt?")
5935 allocate(gvec_flt(1))
5936 status = nf90_get_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
5939 var%SCL_FLT = gvec_flt(1)
5940 deallocate(gvec_flt)
5943 status = nf90_get_var(var%NCID,var%VARID,var%SCL_FLT)
5950 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
5961 IF(.NOT.
ASSOCIATED(var%VEC_FLT))
THEN 5963 IF(
ASSOCIATED(var%ARR_FLT))
THEN 5964 IF(
size(var%ARR_FLT,1)==1) var%VEC_FLT=>var%ARR_FLT(1,1:)
5965 IF(
size(var%ARR_FLT,2)==1) var%VEC_FLT=>var%ARR_FLT(1:,1)
5966 ELSE IF(
ASSOCIATED(var%CUB_FLT))
THEN 5967 IF(
size(var%CUB_FLT,1)==1)
THEN 5968 IF(
size(var%CUB_FLT,2)==1) var%VEC_FLT=>var%CUB_FLT(1,1,1:)
5969 IF(
size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1,1:,1)
5971 IF(
size(var%CUB_FLT,1)==2)
THEN 5972 IF(
size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1:,1,1)
5977 CALL fatal_error(
"NC_READ_VAR: Variable objects VEC_FLT data is NOT assocaited!")
5984 IF (ubound(var%VEC_FLT,1) .NE. rdims(1))
CALL fatal_error &
5985 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 5986 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
5987 &
"varname: "//trim(var%VARNAME))
5989 gvec_flt => var%VEC_FLT(1:rdims(1))
5991 status = nf90_get_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
5996 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6007 IF(.NOT.
ASSOCIATED(var%ARR_FLT))
THEN 6009 IF(
ASSOCIATED(var%CUB_FLT))
THEN 6010 IF(
size(var%CUB_FLT,1)==1) var%ARR_FLT=>var%CUB_FLT(1,1:,1:)
6011 IF(
size(var%CUB_FLT,2)==1) var%ARR_FLT=>var%CUB_FLT(1:,1,1:)
6012 IF(
size(var%CUB_FLT,3)==1) var%ARR_FLT=>var%CUB_FLT(1:,1:,1)
6016 CALL fatal_error(
"NC_READ_VAR: Variable objects ARR_FLT data is NOT assocaited!")
6023 IF (ubound(var%ARR_FLT,1) .NE. rdims(1))
CALL fatal_error &
6024 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6025 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6026 &
"varname: "//trim(var%VARNAME),&
6027 &
"DIM1 does not match!")
6030 IF (ubound(var%ARR_FLT,2) .LT. rdims(2))
CALL fatal_error &
6031 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6032 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6033 &
"varname: "//trim(var%VARNAME),&
6034 &
"DIM2 does not match!")
6036 garr_flt => var%ARR_FLT(1:rdims(1),1:rdims(2))
6039 status = nf90_get_var(var%NCID,var%VARID,garr_flt,nstart,ncount,nstride)
6045 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6056 IF(.NOT.
ASSOCIATED(var%CUB_FLT))
THEN 6058 CALL fatal_error(
"NC_READ_VAR: Variable objects CUB_FLT data is NOT assocaited!")
6064 IF (ubound(var%CUB_FLT,1) .NE. rdims(1))
CALL fatal_error &
6065 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6066 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6067 &
"varname: "//trim(var%VARNAME),&
6068 &
"DIM1 does not match!")
6070 IF (ubound(var%CUB_FLT,2) .LT. rdims(2))
CALL fatal_error &
6071 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6072 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6073 &
"varname: "//trim(var%VARNAME),&
6074 &
"DIM2 does not match!")
6076 IF (ubound(var%CUB_FLT,3) .LT. rdims(3))
CALL fatal_error &
6077 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6078 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6079 &
"varname: "//trim(var%VARNAME),&
6080 &
"DIM3 does not match!")
6082 gcub_flt => var%CUB_FLT(1:rdims(1),1:rdims(2),1:rdims(3))
6085 status = nf90_get_var(var%NCID,var%VARID,gcub_flt,nstart,ncount,nstride)
6091 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6102 IF(.NOT.
ASSOCIATED(var%FDA_FLT))
THEN 6104 CALL fatal_error(
"NC_READ_VAR: Variable objects FDA_FLT data is NOT assocaited!")
6110 IF (ubound(var%FDA_FLT,1) .NE. rdims(1))
CALL fatal_error &
6111 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6112 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6113 &
"varname: "//trim(var%VARNAME),&
6114 &
"DIM1 does not match!")
6116 IF (ubound(var%FDA_FLT,2) .LT. rdims(2))
CALL fatal_error &
6117 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6118 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6119 &
"varname: "//trim(var%VARNAME),&
6120 &
"DIM2 does not match!")
6122 IF (ubound(var%FDA_FLT,3) .LT. rdims(3))
CALL fatal_error &
6123 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6124 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6125 &
"varname: "//trim(var%VARNAME),&
6126 &
"DIM3 does not match!")
6128 IF (ubound(var%FDA_FLT,4) .LT. rdims(4))
CALL fatal_error &
6129 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6130 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6131 &
"varname: "//trim(var%VARNAME),&
6132 &
"DIM4 does not match!")
6134 gfda_flt => var%FDA_FLT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
6137 status = nf90_get_var(var%NCID,var%VARID,gfda_flt,nstart,ncount,nstride)
6143 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6154 IF(.NOT.
ASSOCIATED(var%SCL_DBL))
THEN 6156 IF(
ASSOCIATED(var%VEC_DBL))
THEN 6157 IF(
size(var%VEC_DBL)==1) var%SCL_DBL=>var%VEC_DBL(1)
6158 ELSE IF(
ASSOCIATED(var%ARR_DBL))
THEN 6159 IF(
size(var%ARR_DBL)==1) var%SCL_DBL=>var%ARR_DBL(1,1)
6160 ELSE IF(
ASSOCIATED(var%CUB_DBL))
THEN 6161 IF(
size(var%CUB_DBL)==1) var%SCL_DBL=>var%CUB_DBL(1,1,1)
6165 CALL fatal_error(
"NC_READ_VAR: Variable objects SCL_DBL data is NOT assocaited!")
6170 IF (ser_read .OR. dealer .EQ.
myid)
THEN 6173 IF (
SIZE(nstart).GT.0)
THEN 6175 if (product(ncount) .NE. 1)
CALL fatal_error&
6176 & (
"NC_READ_VAR: NCOUNT dimension size invalid while reading scl_dbl?")
6178 allocate(gvec_dbl(1))
6180 status = nf90_get_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
6183 var%SCL_DBL = gvec_dbl(1)
6184 deallocate(gvec_dbl)
6188 status = nf90_get_var(var%NCID,var%VARID,var%SCL_DBL)
6195 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6206 IF(.NOT.
ASSOCIATED(var%VEC_DBL))
THEN 6208 IF(
ASSOCIATED(var%ARR_DBL))
THEN 6209 IF(
size(var%ARR_DBL,1)==1) var%VEC_DBL=>var%ARR_DBL(1,1:)
6210 IF(
size(var%ARR_DBL,2)==1) var%VEC_DBL=>var%ARR_DBL(1:,1)
6211 ELSE IF(
ASSOCIATED(var%CUB_DBL))
THEN 6212 IF(
size(var%CUB_DBL,1)==1)
THEN 6213 IF(
size(var%CUB_DBL,2)==1) var%VEC_DBL=>var%CUB_DBL(1,1,1:)
6214 IF(
size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1,1:,1)
6216 IF(
size(var%CUB_DBL,1)==2)
THEN 6217 IF(
size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1:,1,1)
6222 CALL fatal_error(
"NC_READ_VAR: Variable objects VEC_DBL data is NOT assocaited!")
6228 IF (ubound(var%VEC_DBL,1) .NE. rdims(1))
CALL fatal_error &
6229 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6230 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6231 &
"varname: "//trim(var%VARNAME))
6233 gvec_dbl => var%VEC_DBL(1:rdims(1))
6235 status = nf90_get_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
6240 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6252 IF(.NOT.
ASSOCIATED(var%ARR_DBL))
THEN 6254 IF(
ASSOCIATED(var%CUB_DBL))
THEN 6255 IF(
size(var%CUB_DBL,1)==1) var%ARR_DBL=>var%CUB_DBL(1,1:,1:)
6256 IF(
size(var%CUB_DBL,2)==1) var%ARR_DBL=>var%CUB_DBL(1:,1,1:)
6257 IF(
size(var%CUB_DBL,3)==1) var%ARR_DBL=>var%CUB_DBL(1:,1:,1)
6261 CALL fatal_error(
"NC_READ_VAR: Variable objects ARR_DBL data is NOT assocaited!")
6267 IF (ubound(var%ARR_DBL,1) .NE. rdims(1))
CALL fatal_error &
6268 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6269 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6270 &
"varname: "//trim(var%VARNAME),&
6271 &
"DIM1 does not match!")
6273 IF (ubound(var%ARR_DBL,2) .LT. rdims(2))
CALL fatal_error &
6274 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6275 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6276 &
"varname: "//trim(var%VARNAME),&
6277 &
"DIM2 does not match!")
6279 garr_dbl => var%ARR_DBL(1:rdims(1),1:rdims(2))
6281 status = nf90_get_var(var%NCID,var%VARID,garr_dbl,nstart,ncount,nstride)
6286 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6298 IF(.NOT.
ASSOCIATED(var%CUB_DBL))
THEN 6300 CALL fatal_error(
"NC_READ_VAR: Variable objects CUB_DBL data is NOT assocaited!")
6305 IF (ubound(var%CUB_DBL,1) .NE. rdims(1))
CALL fatal_error &
6306 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6307 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6308 &
"varname: "//trim(var%VARNAME),&
6309 &
"DIM1 does not match!")
6311 IF (ubound(var%CUB_DBL,2) .LT. rdims(2))
CALL fatal_error &
6312 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6313 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6314 &
"varname: "//trim(var%VARNAME),&
6315 &
"DIM2 does not match!")
6317 IF (ubound(var%CUB_DBL,3) .LT. rdims(3))
CALL fatal_error &
6318 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6319 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6320 &
"varname: "//trim(var%VARNAME),&
6321 &
"DIM3 does not match!")
6323 gcub_dbl => var%CUB_DBL(1:rdims(1),1:rdims(2),1:rdims(3))
6325 status = nf90_get_var(var%NCID,var%VARID,gcub_dbl,nstart,ncount,nstride)
6330 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6341 IF(.NOT.
ASSOCIATED(var%FDA_DBL))
THEN 6343 CALL fatal_error(
"NC_READ_VAR: Variable objects FDA_DBL data is NOT assocaited!")
6348 IF (ubound(var%FDA_DBL,1) .NE. rdims(1))
CALL fatal_error &
6349 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6350 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6351 &
"varname: "//trim(var%VARNAME),&
6352 &
"DIM1 does not match!")
6354 IF (ubound(var%FDA_DBL,2) .LT. rdims(2))
CALL fatal_error &
6355 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6356 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6357 &
"varname: "//trim(var%VARNAME),&
6358 &
"DIM2 does not match!")
6360 IF (ubound(var%FDA_DBL,3) .LT. rdims(3))
CALL fatal_error &
6361 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6362 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6363 &
"varname: "//trim(var%VARNAME),&
6364 &
"DIM3 does not match!")
6366 IF (ubound(var%FDA_DBL,4) .LT. rdims(4))
CALL fatal_error &
6367 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6368 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6369 &
"varname: "//trim(var%VARNAME),&
6370 &
"DIM4 does not match!")
6372 gfda_dbl => var%FDA_DBL(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
6374 status = nf90_get_var(var%NCID,var%VARID,gfda_dbl,nstart,ncount,nstride)
6379 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6390 IF(.NOT.
ASSOCIATED(var%SCL_INT))
THEN 6392 IF(
ASSOCIATED(var%VEC_INT))
THEN 6393 IF(
size(var%VEC_INT)==1) var%SCL_INT=>var%VEC_INT(1)
6394 ELSE IF(
ASSOCIATED(var%ARR_INT))
THEN 6395 IF(
size(var%ARR_INT)==1) var%SCL_INT=>var%ARR_INT(1,1)
6396 ELSE IF(
ASSOCIATED(var%CUB_INT))
THEN 6397 IF(
size(var%CUB_INT)==1) var%SCL_INT=>var%CUB_INT(1,1,1)
6401 CALL fatal_error(
"NC_READ_VAR: Variable objects SCL_INT data is NOT assocaited!")
6405 IF (ser_read .OR. dealer .EQ.
myid)
THEN 6408 IF (
SIZE(nstart).GT.0)
THEN 6410 if (product(ncount) .NE. 1)
CALL fatal_error&
6411 & (
"NC_READ_VAR: NCOUNT dimension invalid while reading scl_int?")
6413 allocate(gvec_int(1))
6414 gvec_int = var%SCL_INT
6415 status = nf90_get_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
6418 var%SCL_INT = gvec_int(1)
6419 deallocate(gvec_int)
6422 status = nf90_get_var(var%NCID,var%VARID,var%SCL_INT)
6429 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6439 IF(.NOT.
ASSOCIATED(var%VEC_INT))
THEN 6441 IF(
ASSOCIATED(var%ARR_INT))
THEN 6442 IF(
size(var%ARR_INT,1)==1) var%VEC_INT=>var%ARR_INT(1,1:)
6443 IF(
size(var%ARR_INT,2)==1) var%VEC_INT=>var%ARR_INT(1:,1)
6444 ELSE IF(
ASSOCIATED(var%CUB_INT))
THEN 6445 IF(
size(var%CUB_INT,1)==1)
THEN 6446 IF(
size(var%CUB_INT,2)==1) var%VEC_INT=>var%CUB_INT(1,1,1:)
6447 IF(
size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1,1:,1)
6449 IF(
size(var%CUB_INT,1)==2)
THEN 6450 IF(
size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1:,1,1)
6455 CALL fatal_error(
"NC_READ_VAR: Variable objects VEC_INT data is NOT assocaited!")
6461 IF (ubound(var%VEC_INT,1) .NE. rdims(1))
CALL fatal_error &
6462 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6463 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6464 &
"varname: "//trim(var%VARNAME))
6466 gvec_int => var%VEC_INT(1:rdims(1))
6468 status = nf90_get_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
6473 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6483 IF(.NOT.
ASSOCIATED(var%ARR_INT))
THEN 6485 IF(
ASSOCIATED(var%CUB_INT))
THEN 6486 IF(
size(var%CUB_INT,1)==1) var%ARR_INT=>var%CUB_INT(1,1:,1:)
6487 IF(
size(var%CUB_INT,2)==1) var%ARR_INT=>var%CUB_INT(1:,1,1:)
6488 IF(
size(var%CUB_INT,3)==1) var%ARR_INT=>var%CUB_INT(1:,1:,1)
6492 CALL fatal_error(
"NC_READ_VAR: Variable objects ARR_INT data is NOT assocaited!")
6498 IF (ubound(var%ARR_INT,1) .NE. rdims(1))
CALL fatal_error &
6499 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6500 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6501 &
"varname: "//trim(var%VARNAME),&
6502 &
"DIM1 does not match!")
6504 IF (ubound(var%ARR_INT,2) .LT. rdims(2))
CALL fatal_error &
6505 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6506 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6507 &
"varname: "//trim(var%VARNAME),&
6508 &
"DIM2 does not match!")
6510 garr_int => var%ARR_INT(1:rdims(1),1:rdims(2))
6512 status = nf90_get_var(var%NCID,var%VARID,garr_int,nstart,ncount,nstride)
6517 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6528 IF(.NOT.
ASSOCIATED(var%CUB_INT))
THEN 6530 CALL fatal_error(
"NC_READ_VAR: Variable objects CUB_INT data is NOT assocaited!")
6535 IF (ubound(var%CUB_INT,1) .NE. rdims(1))
CALL fatal_error &
6536 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6537 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6538 &
"varname: "//trim(var%VARNAME),&
6539 &
"DIM1 does not match!")
6541 IF (ubound(var%CUB_INT,2) .LT. rdims(2))
CALL fatal_error &
6542 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6543 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6544 &
"varname: "//trim(var%VARNAME),&
6545 &
"DIM2 does not match!")
6547 IF (ubound(var%CUB_INT,3) .LT. rdims(3))
CALL fatal_error &
6548 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6549 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6550 &
"varname: "//trim(var%VARNAME),&
6551 &
"DIM3 does not match!")
6553 gcub_int => var%CUB_INT(1:rdims(1),1:rdims(2),1:rdims(3))
6555 status = nf90_get_var(var%NCID,var%VARID,gcub_int,nstart,ncount,nstride)
6560 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6571 IF(.NOT.
ASSOCIATED(var%FDA_INT))
THEN 6573 CALL fatal_error(
"NC_READ_VAR: Variable objects FDA_INT data is NOT assocaited!")
6578 IF (ubound(var%FDA_INT,1) .NE. rdims(1))
CALL fatal_error &
6579 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6580 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6581 &
"varname: "//trim(var%VARNAME),&
6582 &
"DIM1 does not match!")
6584 IF (ubound(var%FDA_INT,2) .LT. rdims(2))
CALL fatal_error &
6585 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6586 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6587 &
"varname: "//trim(var%VARNAME),&
6588 &
"DIM2 does not match!")
6590 IF (ubound(var%FDA_INT,3) .LT. rdims(3))
CALL fatal_error &
6591 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6592 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6593 &
"varname: "//trim(var%VARNAME),&
6594 &
"DIM3 does not match!")
6596 IF (ubound(var%FDA_INT,4) .LT. rdims(4))
CALL fatal_error &
6597 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6598 & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6599 &
"varname: "//trim(var%VARNAME),&
6600 &
"DIM4 does not match!")
6602 gfda_int => var%FDA_INT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
6604 status = nf90_get_var(var%NCID,var%VARID,gfda_int,nstart,ncount,nstride)
6609 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6620 IF(.NOT.
ASSOCIATED(var%scl_chr))
THEN 6622 IF (
ASSOCIATED(var%vec_chr))
THEN 6623 IF(
SIZE(var%vec_chr)==1) var%scl_chr => var%vec_chr(1)
6626 CALL fatal_error(
"NC_READ_VAR: Variable objects scl_chr& 6627 & data is NOT assocaited!")
6633 IF (ser_read .OR. dealer .EQ.
myid)
THEN 6635 IF (len(var%SCL_CHR) .LT. rdims(1))
CALL fatal_error &
6636 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6637 & THE DIMENSIONS OF THE FILE CHARACTER DATA",&
6638 &
"varname: "//trim(var%VARNAME))
6640 var%scl_chr = achar(0)
6642 scl_chr => var%scl_chr
6648 status = nf90_get_var(var%NCID,var%VARID,scl_chr,nstart,ncount,nstride)
6651 nlen = index(scl_chr,achar(0))
6657 scl_chr = scl_chr(1:nlen)
6663 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6672 IF(.NOT.
ASSOCIATED(var%vec_chr))
THEN 6674 CALL fatal_error(
"NC_READ_VAR: Variable objects vec_chr& 6675 & data is NOT assocaited!")
6678 IF (ser_read .OR. dealer .EQ.
myid)
THEN 6680 IF (
SIZE(var%VEC_CHR) .NE. rdims(2))
CALL fatal_error &
6681 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED Character array DOES NOT MATCH& 6682 & THE DIMENSIONS OF THE FILE CHARACTER DATA",&
6683 &
"varname: "//trim(var%VARNAME))
6685 IF (len(var%VEC_CHR(1)) .LT. rdims(1))
CALL fatal_error &
6686 & (
"NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH& 6687 & THE DIMENSIONS OF THE FILE CHARACTER DATA",&
6688 &
"varname: "//trim(var%VARNAME))
6691 allocate(nstrt(cnt),ncnt(cnt),nstrd(cnt))
6699 var%vec_chr(i) = achar(0)
6700 scl_chr => var%vec_chr(i)
6706 status = nf90_get_var(var%NCID,var%VARID,scl_chr,nstrt,ncnt,nstrd)
6709 nlen = index(scl_chr,achar(0))
6715 scl_chr = scl_chr(1:nlen)
6721 deallocate(nstrt,ncnt,nstrd)
6726 CALL fatal_error(
"NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6733 call fatal_error(
"NC_WRITE_VAR: UNKNOWN CASE")
6739 IF(.not.
ASSOCIATED(rdims,ncount))
THEN 6740 IF(
ASSOCIATED(rdims))
DEALLOCATE(rdims)
6746 IF(
PRESENT(iostart))
THEN 6752 IF(
PRESENT(iocount))
THEN 6758 IF(
PRESENT(iostride))
THEN 6765 IF(dbg_set(dbg_sbr))
WRITE(
ipt,*)
"END NC_READ_VAR:" 6773 TYPE(
ncatt),
POINTER :: att
6774 TYPE(
ncvar),
POINTER :: var
6775 TYPE(
ncdim),
POINTER :: dim
6776 logical :: found, res
6777 character(len=80),
intent(out) :: tzone
6779 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
6780 & (
"IS_VALID_DATETIME: Variable object argument is not assocai& 6786 IF (var%XTYPE /= nf90_char)
RETURN 6788 att =>
find_att(var,
'description',found)
6790 IF (att%CHR(1) ==
"GMT time")
THEN 6797 att =>
find_att(var,
'time_zone',found)
6799 IF (.not. is_valid_timezone(att%chr(1)))
return 6812 TYPE(
ncvar),
POINTER :: var
6813 TYPE(
ncdim),
POINTER:: dimstr
6814 TYPE(
ncdim),
POINTER,
OPTIONAL :: dimtime
6815 INTEGER,
OPTIONAL :: size
6816 TYPE(
ncatt),
POINTER :: att
6817 CHARACTER(LEN=80),
pointer :: data_vec(:)
6818 CHARACTER(LEN=80),
pointer :: data_scl
6819 CHARACTER(LEN=*),
optional :: timezone
6821 IF(
PRESENT(size))
THEN 6822 ALLOCATE(data_vec(size))
6824 ALLOCATE(data_vec(1))
6825 data_scl =>data_vec(1)
6828 IF (
PRESENT(dimtime))
THEN 6829 var =>
nc_make_pvar(name=
'Times', values=data_vec, dim1= dimstr, dim2= dimtime)
6830 var%SCL_CHR => var%VEC_CHR(1)
6832 var =>
nc_make_pvar(name=
'Times', values=data_scl, dim1= dimstr)
6835 IF (
PRESENT(timezone))
THEN 6836 att =>
nc_make_att(name=
'time_zone',values=trim(timezone))
6849 TYPE(
ncvar),
POINTER :: VAR
6850 TYPE(
ncatt),
POINTER :: ATT
6851 TYPE(time),
INTENT(in) :: NOW
6852 CHARACTER(len=80),
POINTER :: Data
6854 CHARACTER(len=80):: TZONE
6855 CHARACTER(len=80):: TEMP
6862 (
"CAN NOT UPDATE TIME FOR INVALID DATE TIME VARIABLE")
6867 temp = write_datetime(now,
timeprec,tzone)
6875 character(len=80),
intent(out) :: tzone
6876 TYPE(
ncatt),
POINTER :: att
6877 TYPE(
ncvar),
POINTER :: var1,var2
6878 TYPE(
ncdim),
POINTER :: dim
6879 logical :: found, res
6881 IF(.NOT.
ASSOCIATED(var1))
CALL fatal_error &
6882 & (
"IS_VALID_INT2_MJD: Variable object argument is not assocaited!")
6884 IF(.NOT.
ASSOCIATED(var2))
CALL fatal_error &
6885 & (
"IS_VALID_INT2_MJD: Variable object argument is not assocaited!")
6889 IF (var1%XTYPE /= nf90_int)
RETURN 6890 IF (var2%XTYPE /= nf90_int)
RETURN 6903 att =>
find_att(var1,
'units',found)
6904 IF(.not. found)
return 6907 'days since '//trim(date_reference) .eq. att%chr(1)(1:len_trim(
mjd_units)))
THEN 6910 att =>
find_att(var1,
'format',found)
6911 IF(.not. found)
return 6913 IF (att%chr(1)(1:len_trim(
fmat)) .NE.
fmat .and. &
6914 att%chr(1)(1:len_trim(
rfmat)) .NE.
rfmat)
return 6917 att =>
find_att(var1,
'time_zone',found)
6918 IF(.not. found)
return 6923 att =>
find_att(var1,
'time_zone',found)
6924 IF(.not. found)
return 6925 tzone = trim(att%chr(1))
6926 IF (tzone /=
'none')
return 6945 att =>
find_att(var2,
'units',found)
6946 IF(.not. found)
return 6951 att =>
find_att(var2,
'time_zone',found)
6952 IF(.not. found)
return 6956 IF (trim(att%chr(1)) /= trim(tzone))
RETURN 6968 TYPE(
ncvar),
POINTER :: var
6969 logical,
intent(in) :: use_mjd
6970 TYPE(
ncdim),
POINTER,
OPTIONAL :: dim
6971 INTEGER,
OPTIONAL :: size
6972 TYPE(
ncatt),
POINTER :: att
6973 INTEGER,
POINTER :: data_vec(:)
6974 INTEGER,
POINTER :: data_scl
6976 IF(
PRESENT(size))
THEN 6977 ALLOCATE(data_vec(size))
6979 ALLOCATE(data_vec(1))
6980 data_scl =>data_vec(1)
6984 IF (
PRESENT(dim))
THEN 6985 var =>
nc_make_pvar(name=
'Itime', values=data_vec, dim1= dim)
6986 var%SCL_INT => var%VEC_INT(1)
6992 IF(date_reference ==
'default')
THEN 7002 att =>
nc_make_att(name=
'units',values=
'days since '//trim(date_reference))
7016 att =>
nc_make_att(name=
'time_zone',values=
'none')
7025 TYPE(
ncvar),
POINTER :: var
7026 logical,
intent(in) :: use_mjd
7027 TYPE(
ncdim),
POINTER,
OPTIONAL :: dim
7028 INTEGER,
OPTIONAL :: size
7029 TYPE(
ncatt),
POINTER :: att
7030 INTEGER,
POINTER :: data_vec(:)
7031 INTEGER,
POINTER :: data_scl
7033 IF(
PRESENT(size))
THEN 7034 ALLOCATE(data_vec(size))
7036 ALLOCATE(data_vec(1))
7037 data_scl =>data_vec(1)
7040 IF (
PRESENT(dim))
THEN 7042 var =>
nc_make_pvar(name=
'Itime2', values=data_vec, dim1= dim)
7043 var%SCL_INT => var%VEC_INT(1)
7058 att =>
nc_make_att(name=
'time_zone',values=
'none')
7068 TYPE(
ncvar),
POINTER :: VAR1
7069 TYPE(
ncvar),
POINTER :: VAR2
7070 TYPE(
ncatt),
POINTER :: ATT
7071 TYPE(time),
INTENT(in) :: NOW
7072 INTEGER,
POINTER :: D1,D2
7075 CHARACTER(len=80):: TZONE
7078 IF(.not. test2)
THEN 7082 (
"CAN NOT UPDATE TIME FOR INVALID INTEGER TIME VARIABLES")
7089 test = time2ncitime(now,referencedate,d1,d2)
7092 if(test==0)
call fatal_error(
"That is bad times man!")
7100 character(len=80),
intent(out) :: tzone
7101 TYPE(
ncatt),
POINTER :: att
7102 TYPE(
ncvar),
POINTER :: var
7103 TYPE(
ncdim),
POINTER :: dim
7104 logical :: found, res
7106 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
7107 & (
"IS_VALID_FLOAT_MJD: Variable object argument is not assocaited!")
7123 IF(.not. found)
return 7126 'days since '//trim(date_reference) .eq. att%chr(1)(1:len_trim(
mjd_units)))
THEN 7129 att =>
find_att(var,
'format',found)
7130 IF(.not. found)
return 7132 IF (att%chr(1)(1:len_trim(
fmat)) .NE.
fmat .and. &
7133 att%chr(1)(1:len_trim(
rfmat)) .NE.
rfmat)
return 7136 att =>
find_att(var,
'time_zone',found)
7137 IF(.not. found)
return 7139 IF (.not. is_valid_timezone(att%chr(1)))
return 7140 tzone=trim(att%chr(1))
7144 att =>
find_att(var,
'time_zone',found)
7145 IF(.not. found)
return 7146 tzone = trim(att%chr(1))
7147 IF (tzone /=
'none')
return 7160 character(len=80),
intent(out) :: tzone
7161 TYPE(
ncatt),
POINTER :: att
7162 TYPE(
ncvar),
POINTER :: var
7163 TYPE(
ncdim),
POINTER :: dim
7164 logical :: found, res
7166 IF(.NOT.
ASSOCIATED(var))
CALL fatal_error &
7167 & (
"IS_VALID_FLOAT_MJD: Variable object argument is not assocaited!")
7183 IF(.not. found)
return 7187 att =>
find_att(var,
'time_zone',found)
7188 IF(.not. found)
THEN 7191 tzone = trim(att%chr(1))
7204 TYPE(
ncvar),
POINTER :: var
7205 logical,
intent(in) :: use_mjd
7206 TYPE(
ncdim),
POINTER,
OPTIONAL :: dim
7207 INTEGER,
OPTIONAL :: size
7208 TYPE(
ncatt),
POINTER :: att
7209 REAL(sp),
pointer :: data_vec(:)
7210 REAL(sp),
pointer :: data_scl
7212 IF(
PRESENT(size))
THEN 7213 ALLOCATE(data_vec(size))
7215 ALLOCATE(data_vec(1))
7216 data_scl =>data_vec(1)
7219 IF (
PRESENT(dim))
THEN 7220 var =>
nc_make_pvar(name=
'time', values=data_vec, dim1= dim)
7221 if(
associated(var%vec_flt))
then 7222 var%scl_flt => var%vec_flt(1)
7224 var%scl_dbl => var%vec_dbl(1)
7230 att =>
nc_make_att(name=
'long_name',values=
'time')
7234 IF(date_reference ==
'default')
THEN 7244 att =>
nc_make_att(name=
'units',values=
'days since '//trim(date_reference))
7259 att =>
nc_make_att(name=
'time_zone',values=
'none')
7269 TYPE(
ncvar),
POINTER :: VAR
7270 TYPE(time),
INTENT(in) :: NOW
7271 REAL(SP),
POINTER :: Data
7273 CHARACTER(len=80):: TZONE
7280 (
"CAN NOT UPDATE TIME FOR INVALID FLOATING POINT TIME VARIABLE")
7285 Data = days(now) - days(referencedate)
7292 TYPE(
ncvar),
POINTER :: var
7293 TYPE(
ncdim),
POINTER,
OPTIONAL :: dim
7294 INTEGER,
OPTIONAL :: size
7295 TYPE(
ncatt),
POINTER :: att
7296 INTEGER,
POINTER :: data_vec(:)
7297 INTEGER,
POINTER :: data_scl
7299 IF(
PRESENT(size))
THEN 7300 ALLOCATE(data_vec(size))
7302 ALLOCATE(data_vec(1))
7303 data_scl =>data_vec(1)
7307 IF (
PRESENT(dim))
THEN 7308 var =>
nc_make_pvar(name=
'iint', values=data_vec, dim1= dim)
7309 var%SCL_INT => var%VEC_INT(1)
7314 att =>
nc_make_att(name=
'long_name',values=
'internal mode iteration number')
7330 IF (dbg_set(dbg_sbrio))
THEN 7331 WRITE(
ipt,*)
"%%%%%%%%%%%% RECURSIVE_FILE_BRACK INPUT %%%%%%%%%%%%%%" 7333 WRITE(
ipt,*)
"%%%%%%%%%%%%" 7334 CALL print_real_time(now,
ipt,
"NOW")
7335 WRITE(
ipt,*)
"%%%%%%%%%%%% ========================== %%%%%%%%%%%%%%" 7340 IF (ftm%NEXT_STKCNT == ftm%PREV_STKCNT)
THEN 7342 CALL fatal_error(
"PREVIOUS STKCNT IS EQUAL TO NEXT!")
7344 ELSE IF (ftm%NEXT_STKCNT < ftm%PREV_STKCNT)
THEN 7346 CALL fatal_error(
"PREVIOUS STKCNT IS GREATER THAN NEXT!")
7350 IF ( ftm%PREV_IO == ftm%NEXT_IO )
THEN 7352 CALL fatal_error(
"IT SEEMS YOUR FILE HAS DUPLICATE TIME VALUES!")
7354 ELSEIF ( ftm%PREV_IO > ftm%NEXT_IO )
THEN 7356 CALL fatal_error(
"IT SEEMS YOUR FILE HAS NONE MONOTONIC TIME!")
7364 IF( ftm%PREV_IO < now .AND. now < ftm%NEXT_IO )
THEN 7368 IF(ftm%NEXT_STKCNT == ftm%PREV_STKCNT+1)
THEN 7376 df = ftm%NEXT_STKCNT - ftm%PREV_STKCNT
7378 frame = ftm%PREV_STKCNT + ceiling(df/2.0_sp)
7381 IF( ctime < now)
THEN 7382 ftm%PREV_STKCNT = frame
7386 ELSE IF (ctime > now)
THEN 7387 ftm%NEXT_STKCNT = frame
7391 ELSE IF (ctime == now)
THEN 7396 ftm%PREV_STKCNT = frame-1
7399 ftm%NEXT_STKCNT = frame
7406 CALL fatal_error(
"YOU SHOULD NOT BE HERE - I MEAN IT!")
7409 ELSE IF( ftm%PREV_IO == now )
THEN 7413 ftm%NEXT_STKCNT = ftm%PREV_STKCNT + 1
7419 ELSE IF( ftm%NEXT_IO == now )
THEN 7423 ftm%PREV_STKCNT = ftm%NEXT_STKCNT - 1
7429 ELSE IF( now > ftm%NEXT_IO )
THEN 7433 IF (ftm%NEXT_STKCNT .GE. ftm%STK_LEN)
THEN 7439 df = (ftm%STK_LEN - ftm%NEXT_STKCNT)
7440 frame = ftm%NEXT_STKCNT + ceiling(df/2.0_sp)
7444 IF( ctime < now)
THEN 7445 ftm%PREV_STKCNT = frame
7448 ftm%NEXT_STKCNT = ftm%STK_LEN
7452 ELSE IF (ctime > now)
THEN 7454 ftm%PREV_STKCNT = ftm%NEXT_STKCNT
7455 ftm%PREV_IO = ftm%NEXT_IO
7457 ftm%NEXT_STKCNT = frame
7462 ELSE IF (ctime == now)
THEN 7465 ftm%PREV_STKCNT = frame-1
7468 ftm%NEXT_STKCNT = frame
7476 CALL fatal_error(
"YOU SHOULD NOT BE HERE - YOU DON'T LIKE ME, DO YOU!")
7481 ELSE IF ( ftm%PREV_IO > now)
THEN 7485 IF (ftm%PREV_STKCNT .LE. 1)
THEN 7491 df = (ftm%PREV_STKCNT)
7492 frame = ceiling(df/2.0_sp)
7496 IF( ctime < now)
THEN 7498 ftm%NEXT_STKCNT = ftm%PREV_STKCNT
7499 ftm%NEXT_IO = ftm%PREV_IO
7501 ftm%PREV_STKCNT = frame
7505 ELSE IF (ctime > now)
THEN 7510 ftm%NEXT_STKCNT = frame
7515 ELSE IF (ctime == now)
THEN 7517 ftm%PREV_STKCNT = frame
7520 ftm%NEXT_STKCNT = frame+1
7528 CALL fatal_error(
"YOU SHOULD NOT BE HERE - WHY OH WHY")
7533 CALL fatal_error(
"YOU SHOULD NOT BE HERE - THIS ONE IS NOT GOOD EITHER!")
7543 TYPE(
ncfile),
POINTER:: NCF
7547 TYPE(time) :: TIMETEST,dtime
7548 REAL(DP) :: denom, numer
7551 IF(.NOT.
ASSOCIATED(ncf))
CALL fatal_error &
7552 & (
"UPDATE_FILE_BRACKET: FILE object argument is not assocaited!")
7554 IF (.NOT.
ASSOCIATED(ncf%FTIME))
THEN 7556 CALL fatal_error(
"UPDATE_FILE_BRACKET: FILE object's FTIME is not assocaited!")
7561 IF (ftm%STK_LEN == 1)
THEN 7563 CALL fatal_error (
"FILE BRACKET DOES NOT WORK IF THE TIME DIMENSI& 7564 &ON LENGTH IS ONE!")
7567 IF (ftm%NEXT_STKCNT == ftm%PREV_STKCNT .or. &
7568 & ftm%PREV_IO == ftm%NEXT_IO )
THEN 7570 ftm%NEXT_STKCNT = ftm%STK_LEN
7577 IF(now > ftm%NEXT_IO)
THEN 7583 IF( now < ftm%PREV_IO)
THEN 7594 IF( ftm%PREV_IO < now .AND. now <= ftm%NEXT_IO .AND. &
7595 & ftm%NEXT_STKCNT .EQ. ftm%PREV_STKCNT+1 )
THEN 7600 ELSE IF( ftm%PREV_IO <= now .AND. now < ftm%NEXT_IO .AND. &
7601 & ftm%NEXT_STKCNT .EQ. ftm%PREV_STKCNT+1 )
THEN 7606 ELSE IF( now > ftm%NEXT_IO )
THEN 7610 IF (ftm%NEXT_STKCNT == ftm%STK_LEN)
THEN 7616 IF (timetest >= now)
THEN 7617 ftm%PREV_STKCNT = ftm%NEXT_STKCNT
7618 ftm%PREV_IO = ftm%NEXT_IO
7620 ftm%NEXT_STKCNT = ftm%NEXT_STKCNT +1
7621 ftm%NEXT_IO = timetest
7627 if (status /= 0)
return 7631 ELSE IF ( ftm%PREV_IO > now)
THEN 7633 IF (ftm%PREV_STKCNT == 1)
THEN 7639 IF (timetest <= now)
THEN 7640 ftm%NEXT_STKCNT = ftm%PREV_STKCNT
7641 ftm%NEXT_IO = ftm%PREV_IO
7643 ftm%PREV_STKCNT = ftm%PREV_STKCNT-1
7644 ftm%PREV_IO = timetest
7651 if (status /= 0)
return 7657 & (
"And you may ask yourself", &
7658 &
"How do I work this?", &
7659 &
"And you may ask yourself" , &
7660 &
"Where is that fvcom manual? - The Talking Heads")
7671 numer = seconds(now - ftm%PREV_IO)
7677 denom = seconds(ftm%NEXT_IO - ftm%PREV_IO)
7681 ftm%NEXT_WGHT = numer/denom
7683 ftm%PREV_WGHT = 1.0_dp - numer/denom
7698 TYPE(
ncvar),
POINTER :: VNEXT,VPREV, VTMP
7700 TYPE(
ncfile),
POINTER :: NCF
7702 TYPE(interp_weights),
POINTER,
OPTIONAL :: INTERP
7704 REAL(SP),
POINTER :: VARRP(:,:),VVECP(:)
7710 IF(.not.
ASSOCIATED(ncf))
CALL fatal_error&
7711 & (
"UPDATE_VAR_BRACKET: FILE OBJECT ARGUMENT IS NOT ASSOCIATED!")
7713 IF(.not.
ASSOCIATED(vnext))
CALL fatal_error&
7714 & (
"UPDATE_VAR_BRACKET: FIRST VARIABLE ARGUMENT IS NOT ASSOCIATED!")
7716 IF(.not.
ASSOCIATED(vprev))
CALL fatal_error&
7717 & (
"UPDATE_VAR_BRACKET: SECOND VARIABLE ARGUMENT IS NOT ASSOCIATED!")
7719 IF(
PRESENT(interp))
THEN 7720 IF (.not.
ASSOCIATED(interp))
CALL fatal_error&
7721 & (
"UPDATE_VAR_BRACKET: THE INTERP ARGUMENT IS NOT ASSOCIATED!")
7727 IF(.not.
ASSOCIATED(vprev%ncid,
target = vnext%ncid))
THEN 7730 CALL fatal_error (
"UPDATE_VAR_BRACKET: ", &
7731 &
" VARIABLE ARGUMENTS DO NOT POINT TO THE SAME NETCDF FILE!")
7734 IF(.not.
ASSOCIATED(vprev%ncid,
target = ncf%ncid))
THEN 7737 CALL fatal_error (
"UPDATE_VAR_BRACKET: ", &
7738 &
" VARIABLE ARGUMENTS DOES NOT POINT TO THE NETCDF FILE!")
7745 if (status /= 0)
RETURN 7750 IF(ftm%NEXT_STKCNT .EQ. vnext%CURR_STKCNT)
THEN 7752 IF(ftm%PREV_STKCNT .NE. vprev%CURR_STKCNT)
THEN 7755 IF(
PRESENT(interp))
THEN 7758 CALL interp_bilinear_p(varrp,interp,vvecp)
7764 ELSE IF (ftm%PREV_STKCNT .EQ. vprev%CURR_STKCNT)
THEN 7767 IF(
PRESENT(interp))
THEN 7770 CALL interp_bilinear_p(varrp,interp,vvecp)
7776 IF(ftm%PREV_STKCNT .EQ. vnext%CURR_STKCNT)
THEN 7781 IF(
PRESENT(interp))
THEN 7784 CALL interp_bilinear_p(varrp,interp,vvecp)
7787 ELSE IF ( ftm%NEXT_STKCNT .EQ. vprev%CURR_STKCNT)
THEN 7792 IF(
PRESENT(interp))
THEN 7795 CALL interp_bilinear_p(varrp,interp,vvecp)
7801 IF(
PRESENT(interp))
THEN 7804 CALL interp_bilinear_p(varrp,interp,vvecp)
7809 IF(
PRESENT(interp))
THEN 7812 CALL interp_bilinear_p(varrp,interp,vvecp)
7827 TYPE(
ncfile),
pointer :: ncf
7832 Character(len=80) :: tzone
7833 TYPE(
ncdim),
pointer :: dim
7834 TYPE(
ncatt),
pointer :: att
7835 TYPE(
ncvar),
pointer :: var1, var2
7836 LOGICAL :: found, valid
7838 IF(.NOT.
ASSOCIATED(ncf))
CALL fatal_error &
7839 & (
"SET_FILE_TIME_TYPE: FILE object argument is not assocaited!")
7844 IF(
ASSOCIATED(ncf%FTIME))
THEN 7852 var1 =>
find_var(ncf,
'Times',found)
7859 IF(.NOT.
ASSOCIATED(ncf%FTIME)) ncf%FTIME=>
new_ftime()
7864 IF (.not. found) dim =>
find_dim(var1,
'time',found)
7866 IF (.not. found)
THEN 7869 CALL fatal_error(
"SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
7872 ncf%FTIME%STK_LEN = dim%DIM
7879 ncf%FTIME%TimeZone=tzone
7883 IF (dim%DIM == 0)
THEN 7884 CALL warning(
"THE NETCDF FILE"//trim(ncf%FNAME),&
7885 &
"Has a Time variable but the dimension is zero!")
7889 if(dbg_set(dbg_io))
write(
ipt,*)
"Testing get time for file:"//trim(ncf%FNAME)
7891 if(dbg_set(dbg_io))
write(
ipt,*)
"Test Passed!" 7894 CALL warning (
"SET_FILE_TIME_TYPE: FOUND VARIABLE NAMED: 'Times'& 7895 & BUT IT IS NOT VALID ACCORDING TO IS_VALID_DATETIME")
7901 var1 =>
find_var(ncf,
'Itime',found)
7903 var2 =>
find_var(ncf,
'Itime2',found)
7910 IF(.NOT.
ASSOCIATED(ncf%FTIME)) ncf%FTIME=>
new_ftime()
7916 IF (.not. found)
THEN 7919 CALL fatal_error(
"SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
7922 ncf%FTIME%STK_LEN = dim%DIM
7931 ncf%FTIME%TimeZone=tzone
7935 IF (dim%DIM == 0)
THEN 7936 CALL warning(
"THE NETCDF FILE"//trim(ncf%FNAME),&
7937 &
"Has a Time variable but the dimension is zero!")
7941 if(dbg_set(dbg_io))
write(
ipt,*)
"Testing get time for file:"//trim(ncf%FNAME)
7943 if(dbg_set(dbg_io))
write(
ipt,*)
"Test Passed!" 7946 CALL warning (
"SET_FILE_TIME_TYPE: FOUND VARIABLE NAMES: Itime& 7947 & and Itime2 BUT THEY ARE NOT VALID ACCORDING TO IS_VALID_ITIME")
7951 CALL warning (
"SET_FILE_TIME_TYPE: FOUND ONLY ONE OF TWO INTEGER TIME VARIABLES?")
7961 IF(.NOT.
ASSOCIATED(ncf%FTIME)) ncf%FTIME=>
new_ftime()
7965 IF (.NOT.found)
THEN 7968 CALL fatal_error(
"SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
7970 ncf%FTIME%STK_LEN = dim%DIM
7977 ncf%FTIME%TimeZone=tzone
7981 IF (dim%DIM == 0)
THEN 7982 CALL warning(
"THE NETCDF FILE"//trim(ncf%FNAME),&
7983 &
"Has a Time variable but the dimension is zero!")
7987 if(dbg_set(dbg_io))
write(
ipt,*)
"Testing get time for file:"//trim(ncf%FNAME)
7989 if(dbg_set(dbg_io))
write(
ipt,*)
"Test Passed!" 7995 IF(.NOT.
ASSOCIATED(ncf%FTIME)) ncf%FTIME=>
new_ftime()
7999 IF (.NOT.found)
THEN 8002 CALL fatal_error(
"SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
8004 ncf%FTIME%STK_LEN = dim%DIM
8011 ncf%FTIME%TimeZone=tzone
8014 IF (dim%DIM == 0)
THEN 8015 CALL warning(
"THE NETCDF FILE"//trim(ncf%FNAME),&
8016 &
"Has a Time variable but the dimension is zero!")
8021 if(dbg_set(dbg_io))
write(
ipt,*)
"Testing get time for file:"//trim(ncf%FNAME)
8023 if(dbg_set(dbg_io))
write(
ipt,*)
"Test Passed!" 8026 CALL warning (
"SET_FILE_TIME_TYPE: FOUND VARIABLE NAMEd: 'time'& 8027 & BUT IT IS NOT VALID ACCORDING TO IS_VALID_FLOAT_DAYS/SECONDS")
8036 TYPE(time) :: thetime
8037 TYPE(
ncfile),
POINTER :: ncf
8038 INTEGER,
intent(in) :: stkcnt
8041 IF(.NOT.
ASSOCIATED(ncf))
CALL fatal_error &
8042 & (
"GET_FILE_TIME_NCF: FILE object argument is not assocaited!")
8045 IF(.NOT.
ASSOCIATED(ncf%FTIME))
THEN 8047 CALL fatal_error(
"GET_FILE_TIME_NCF: FILE object's FTIME is not assocaited!")
8059 TYPE(time) :: thetime
8061 TYPE(
ncvar),
POINTER :: var1, var2
8062 TYPE(
ncatt),
POINTER :: att
8063 INTEGER,
intent(in) :: stkcnt
8064 REAL(sp),
target :: float_time
8065 INTEGER,
target :: mjd,msec
8066 Character(len=80),
target :: dstring
8068 Character(len=80) :: dformat
8071 IF(.NOT.
ASSOCIATED(ftm))
THEN 8072 CALL fatal_error(
"GET_FILE_TIME_NCFTIME: THE ARGUMENT FTM is not assocaited!")
8076 IF(stkcnt .LE. 0)
CALL fatal_error&
8077 &(
'GET_FILE_TIME: YOU CAN NOT GET TIME FOR A STACK COUNT LESS THAN ONE!')
8079 SELECT CASE(ftm%TMTYPE)
8087 thetime = days2time(float_time) - time_zone(ftm%TIMEZONE,status)
8096 thetime = seconds2time(float_time) - time_zone(ftm%TIMEZONE,status)
8111 thetime%MuSod= int(msec,itime)* int(1000,itime)
8113 thetime = thetime - time_zone(ftm%TIMEZONE,status)
8124 thetime = read_datetime(dstring,dformat,ftm%TIMEZONE,status)
8125 if(status == 0)
THEN 8127 CALL fatal_error(
"GET_FILE_TIME: COULD NOT TRANSLATE TIME STRING",&
8128 "FILE RETURNED: "//trim(dstring))
8134 CALL fatal_error(
"GET_FILE_TIME: FILE object's FTIME is an unrecognized type")
8150 TYPE(
ncfile),
POINTER :: NCF_IN,NCF_TMP
8151 TYPE(time) :: Ttest,NOW,INTERVAL
8155 ncf_tmp%FNAME = ncf_in%FNAME
8160 idx = ncf_tmp%FTIME%STK_LEN
8162 IF(idx == 0)
CALL fatal_error&
8163 &(
"THERE IS NO DATA IN THE FILE:"//trim(ncf_in%FNAME),&
8164 &
"(STK_LEN == 0) WHEN THE MODEL CRASHED, SO HOTSTART IS IMPOSSIBLE.",&
8165 &
"BETTER LUCK NEXT TIME!")
8169 DO WHILE(ttest > now)
8173 CALL print_time(now,
ipt,
"NOW")
8174 CALL print_time(ttest,
ipt,
"EARLIEST FILE TIME")
8177 &(
"SET_FILE_STACK: SEARCHING FOR TIME IN FILE NAME:",&
8178 & trim(ncf_in%FNAME),&
8179 &
"ALL TIMES IN FILE ARE GREATER THAN NOW?")
8186 IF(ttest /= now)
THEN 8187 CALL print_time(now,
ipt,
"NOW")
8188 CALL print_time(ttest,
ipt,
"NEAREST TIME IN FILE")
8191 &(
"SET_FILE_STACK: SEARCHING FOR TIME IN FILE NAME:",&
8192 & trim(ncf_in%FNAME),&
8193 &
"CAN'T FIND EXACT MATCHING TIME IN FILE")
8198 ncf_in%FTIME%PREV_STKCNT=idx
8199 ncf_in%FTIME%NEXT_STKCNT=idx+1
8200 ncf_in%FTIME%PREV_IO=ttest
8201 ncf_in%FTIME%NEXT_IO=ttest+interval
integer function, dimension(:), pointer var_dimids(LIST)
integer, parameter tmtype_char_date
type(ncfile) function, pointer new_file(fname)
integer, parameter timeprec
subroutine print_file(NCF)
integer, parameter datestrlen
subroutine print_ftime(FTIME)
integer function count_var_list(LIST)
integer, parameter tmtype_int2_mjd
type(ncatt) function, pointer new_att()
type(ncftime) function, pointer new_ftime()
integer, parameter tmtype_float_days
type(ncvar) function, pointer new_var()
type(ncfilelist) function, pointer new_filehead()
type(ncdim) function, pointer copy_dim(DIMIN)
logical use_real_world_time
subroutine kill_file(NCF)
subroutine print_var_list(LIST)
subroutine print_var(VAR)
integer, parameter tmtype_unknown
integer, parameter tmtype_float_seconds
type(ncvar) function, pointer reference_var(VARIN)
type(ncdim) function, pointer new_dim()