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
5568 dimcnt = count_dim_list(var)
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.")
5627 dim => find_unlimited(var,found)
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.")
5682 dim => find_unlimited(var,found)
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 5833 write(
ipt,*)
"FILE DIMENSION COUNT IS ::", count_dim_list(var)
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)
5937 CALL handle_ncerr(status,trim(errmsg))
5939 var%SCL_FLT = gvec_flt(1)
5940 deallocate(gvec_flt)
5943 status = nf90_get_var(var%NCID,var%VARID,var%SCL_FLT)
5944 CALL handle_ncerr(status,trim(errmsg))
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)
5992 CALL handle_ncerr(status,trim(errmsg))
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)
6040 CALL handle_ncerr(status,trim(errmsg))
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)
6086 CALL handle_ncerr(status,trim(errmsg))
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)
6138 CALL handle_ncerr(status,trim(errmsg))
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)
6181 CALL handle_ncerr(status,trim(errmsg))
6183 var%SCL_DBL = gvec_dbl(1)
6184 deallocate(gvec_dbl)
6188 status = nf90_get_var(var%NCID,var%VARID,var%SCL_DBL)
6189 CALL handle_ncerr(status,trim(errmsg))
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)
6236 CALL handle_ncerr(status,trim(errmsg))
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)
6282 CALL handle_ncerr(status,trim(errmsg))
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)
6326 CALL handle_ncerr(status,trim(errmsg))
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)
6375 CALL handle_ncerr(status,trim(errmsg))
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)
6416 CALL handle_ncerr(status,trim(errmsg))
6418 var%SCL_INT = gvec_int(1)
6419 deallocate(gvec_int)
6422 status = nf90_get_var(var%NCID,var%VARID,var%SCL_INT)
6423 CALL handle_ncerr(status,trim(errmsg))
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)
6469 CALL handle_ncerr(status,trim(errmsg))
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)
6513 CALL handle_ncerr(status,trim(errmsg))
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)
6556 CALL handle_ncerr(status,trim(errmsg))
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)
6605 CALL handle_ncerr(status,trim(errmsg))
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)
6649 CALL handle_ncerr(status,trim(errmsg))
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)
6707 CALL handle_ncerr(status,trim(errmsg))
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:"