3 SUBROUTINE get_3dfld (ng, model, ifield, ncid, &
4# if defined PIO_LIB && defined DISTRIBUTE
8 & LBi, UBi, LBj, UBj, LBk, UBk, &
31# if defined PIO_LIB && defined DISTRIBUTE
69 logical,
intent(out) :: update
71 integer,
intent(in) :: ng, model, ifield, nfiles
72 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
73 integer,
intent(in) :: Iout, Irec
74 integer,
intent(inout) :: ncid
76# if defined PIO_LIB && defined DISTRIBUTE
77 TYPE (File_desc_t),
intent(inout) :: pioFile
79 TYPE(
t_io),
intent(inout) :: S(nfiles)
82 real(r8),
intent(in) :: Fmask(LBi:UBi,LBj:UBj)
84 real(r8),
intent(inout) :: Fout(LBi:UBi,LBj:UBj,LBk:UBk,Iout)
88 character (len=*),
parameter :: MyFile = &
95 SELECT CASE (s(1)%IOtype)
98 & nfiles, s, update, &
99 & lbi, ubi, lbj, ubj, lbk, ubk, &
106# if defined PIO_LIB && defined DISTRIBUTE
109 & nfiles, s, update, &
110 & lbi, ubi, lbj, ubj, lbk, ubk, &
124 10
FORMAT (
' GET_3DFLD - Illegal input file type, io_type = ',i0, &
125 & /,13x,
'Check KeyWord ''INP_LIB'' in ''roms.in''.')
132 & nfiles, S, update, &
133 & LBi, UBi, LBj, UBj, LBk, UBk, &
157 logical,
intent(out) :: update
159 integer,
intent(in) :: ng, model, ifield, nfiles
160 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
161 integer,
intent(in) :: Iout, Irec
162 integer,
intent(inout) :: ncid
164 TYPE(
t_io),
intent(inout) :: S(nfiles)
167 real(r8),
intent(in) :: Fmask(LBi:UBi,LBj:UBj)
169 real(r8),
intent(inout) :: Fout(LBi:UBi,LBj:UBj,LBk:UBk,Iout)
173 logical :: Lgridded, Linquire, Liocycle, Lmulti, Lonerec
175 integer :: Nrec, Tid, Tindex, Trec, Vid, Vtype
176 integer :: i, job, lend, lstr, lvar, status
179 integer(i8b) :: Fhash
182 real(r8) :: Fmax, Fmin, Fval, my_Fmin, my_Fmax
184 real(dp) :: Clength, Tdelta, Tend
185 real(dp) :: Tmax, Tmin, Tmono, Tscale, Tstr
186 real(dp) :: Tsec, Tval
188 character (len=22) :: t_code
190 character (len=*),
parameter :: MyFile = &
191 & __FILE__//
", get_3dfld_nf90"
207 IF (
iic(ng).eq.0) linquire=.true.
208 IF (.not.linquire.and. &
209 & ((
iinfo(10,ifield,ng).gt.1).and. &
210 & (
linfo( 6,ifield,ng).or. &
227 CALL inquiry (ng, model, job, iout, irec, 1, ifield, ncid, &
230 IF (
linfo(6,ifield,ng))
THEN
231 linfo(6,ifield,ng)=.false.
243 tmono=
finfo(7,ifield,ng)
245 IF ((tmono.lt.
time(ng)).or.(
iic(ng).eq.0).or. &
250 lgridded=
linfo(1,ifield,ng)
251 liocycle=
linfo(2,ifield,ng)
252 lonerec =
linfo(3,ifield,ng)
253 vtype =
iinfo(1,ifield,ng)
254 vid =
iinfo(2,ifield,ng)
255 tid =
iinfo(3,ifield,ng)
256 nrec =
iinfo(4,ifield,ng)
257 vsize(1)=
iinfo(5,ifield,ng)
258 vsize(2)=
iinfo(6,ifield,ng)
259 vsize(3)=
iinfo(7,ifield,ng)
260 tindex =
iinfo(8,ifield,ng)
261 trec =
iinfo(9,ifield,ng)
262 tmin =
finfo(1,ifield,ng)
263 tmax =
finfo(2,ifield,ng)
264 clength =
finfo(5,ifield,ng)
265 tscale =
finfo(6,ifield,ng)
269 trec=mod(trec,nrec)+1
273 iinfo(9,ifield,ng)=trec
275 IF (trec.le.nrec)
THEN
288 iinfo(8,ifield,ng)=tindex
295 &
rclock%DateNumber, tval, &
297 & start = (/trec/), &
305 vtime(tindex,ifield,ng)=tval
311 IF ((trec.eq.nrec).and.(tval*
day2sec.le.
time(ng)))
THEN
312 linfo(6,ifield,ng)=.true.
324 &
vname(1,ifield), vid, &
326 & lbi, ubi, lbj, ubj, lbk, ubk, &
328 & my_fmin, my_fmax, &
338 fmin=min(fmin,my_fmin)
339 fmax=max(fmax,my_fmax)
341 finfo(8,ifield,ng)=fmin
342 finfo(9,ifield,ng)=fmax
345 &
vname(1,ifield), vid, &
346 & trec, vtype, vsize, &
347 & lbi, ubi, lbj, ubj, lbk, ubk, &
348 &
fscale(ifield,ng), fmin, fmax, &
353 & fout(:,:,:,tindex), &
356 & fout(:,:,:,tindex))
358 finfo(8,ifield,ng)=fmin
359 finfo(9,ifield,ng)=fmax
363 &
vname(1,ifield), fval, &
365 & start = (/trec/), &
367 fval=fval*
fscale(ifield,ng)
368 fpoint(tindex,ifield,ng)=fval
380 WRITE (
stdout,50) trim(
vname(2,ifield)), ng, fmin, fmax
382 lstr=scan(
ncfile,
'/',back=.true.)+1
384 lvar=min(46,len_trim(
vname(2,ifield)))
387 WRITE (
stdout,60)
vname(2,ifield)(1:lvar), t_code, &
388 & ng, trec, tindex,
ncfile(lstr:lend), &
389 & tmin, tmax, tval, fmin, fmax
404 IF (.not.lonerec)
THEN
405 tdelta=
vtime(tindex,ifield,ng)-
vtime(3-tindex,ifield,ng)
406 IF (liocycle.and.(tdelta.lt.0.0_r8))
THEN
407 tdelta=tdelta+clength
410 finfo(7,ifield,ng)=tmono
411 tintrp(tindex,ifield,ng)=tmono
415 10
FORMAT (/,
' GET_3DFLD_NF90 - unable to find dimension ',a, &
416 & /,18x,
'for variable: ',a,/,18x,
'in file: ',a, &
417 & /,18x,
'file is not CF compliant...')
418 20
FORMAT (/,
' GET_3DFLD_NF90 - unable to find requested variable:', &
419 & 1x,a,/,18x,
'in input NetCDF file: ',a)
420 30
FORMAT (/,
' GET_3DFLD_NF90 - unable to open input NetCDF', &
422 40
FORMAT (/,
' GET_3DFLD_NF90 - error while reading variable: ',a, &
423 & 2x,
' at TIME index = ',i0)
424 50
FORMAT (2x,
'GET_3DFLD_NF90 - ',a,/,22x,
'(Grid = ',i2.2, &
425 &
', Min = ',1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
426 60
FORMAT (2x,
'GET_3DFLD_NF90 - ',a,
',',t75,a,/,22x, &
427 &
'(Grid=',i2.2,
', Rec=',i0,
', Index=',i1, &
428 &
', File: ',a,
')',/,22x, &
429 &
'(Tmin= ', f15.4,
' Tmax= ', f15.4,
')', &
430 & t71,
't = ', f15.4 ,/,22x, &
431 &
'(Min = ', 1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
433 70
FORMAT (22x,
'(CheckSum = ',i0,
')')
439# if defined PIO_LIB && defined DISTRIBUTE
443 & nfiles, S, update, &
444 & LBi, UBi, LBj, UBj, LBk, UBk, &
468 logical,
intent(out) :: update
470 integer,
intent(in) :: ng, model, ifield, nfiles
471 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
472 integer,
intent(in) :: Iout, Irec
474 TYPE (File_desc_t),
intent(inout) :: pioFile
475 TYPE(
t_io),
intent(inout) :: S(nfiles)
478 real(r8),
intent(in) :: Fmask(LBi:UBi,LBj:UBj)
480 real(r8),
intent(inout) :: Fout(LBi:UBi,LBj:UBj,LBk:UBk,Iout)
484 logical :: Lgridded, Linquire, Liocycle, Lmulti, Lonerec
486 integer :: Nrec, Tindex, Trec, Vtype
487 integer :: i, job, lend, lstr, lvar, status
490 integer(i8b) :: Fhash
493 real(r8) :: Fmax, Fmin, Fval, my_Fmin, my_Fmax
495 real(dp) :: Clength, Tdelta, Tend
496 real(dp) :: Tmax, Tmin, Tmono, Tscale, Tstr
497 real(dp) :: Tsec, Tval
499 character (len=22) :: t_code
501 character (len=*),
parameter :: MyFile = &
502 & __FILE__//
", get_3dfld_pio"
504 TYPE (IO_Desc_t),
pointer :: ioDesc
505 TYPE (My_VarDesc) :: TpioVar, VpioVar
521 IF (
iic(ng).eq.0) linquire=.true.
522 IF (.not.linquire.and. &
523 & ((
iinfo(10,ifield,ng).gt.1).and. &
524 & (
linfo( 6,ifield,ng).or. &
541 CALL inquiry (ng, model, job, iout, irec, 1, ifield, piofile, &
544 IF (
linfo(6,ifield,ng))
THEN
545 linfo(6,ifield,ng)=.false.
557 tmono=
finfo(7,ifield,ng)
559 IF ((tmono.lt.
time(ng)).or.(
iic(ng).eq.0).or. &
564 lgridded=
linfo(1,ifield,ng)
565 liocycle=
linfo(2,ifield,ng)
566 lonerec =
linfo(3,ifield,ng)
567 vtype =
iinfo(1,ifield,ng)
568 vpiovar =
dinfo(1,ifield,ng)
569 tpiovar =
dinfo(2,ifield,ng)
570 nrec =
iinfo(4,ifield,ng)
571 vsize(1)=
iinfo(5,ifield,ng)
572 vsize(2)=
iinfo(6,ifield,ng)
573 vsize(3)=
iinfo(7,ifield,ng)
574 tindex =
iinfo(8,ifield,ng)
575 trec =
iinfo(9,ifield,ng)
576 tmin =
finfo(1,ifield,ng)
577 tmax =
finfo(2,ifield,ng)
578 clength =
finfo(5,ifield,ng)
579 tscale =
finfo(6,ifield,ng)
583 trec=mod(trec,nrec)+1
587 iinfo(9,ifield,ng)=trec
589 IF (trec.le.nrec)
THEN
602 iinfo(8,ifield,ng)=tindex
607 IF (tpiovar%vd%varID.ge.0)
THEN
609 &
rclock%DateNumber, tval, &
610 & piofile = piofile, &
611 & start = (/trec/), &
619 vtime(tindex,ifield,ng)=tval
625 IF ((trec.eq.nrec).and.(tval*
day2sec.le.
time(ng)))
THEN
626 linfo(6,ifield,ng)=.true.
631 IF (vpiovar%vd%varID.ge.0)
THEN
635 IF (kind(fout).eq.8)
THEN
641# if defined DIAGNOSTICS_BIO && defined ECOSIM
643 IF (kind(fout).eq.8)
THEN
650 IF (kind(fout).eq.8)
THEN
656 IF (kind(fout).eq.8)
THEN
662 IF (kind(fout).eq.8)
THEN
668 IF (kind(fout).eq.8)
THEN
674 IF (kind(fout).eq.8)
THEN
687 &
vname(1,ifield), vpiovar, &
688 & i, iodesc, vsize, &
689 & lbi, ubi, lbj, ubj, lbk, ubk, &
691 & my_fmin, my_fmax, &
701 fmin=min(fmin,my_fmin)
702 fmax=max(fmax,my_fmax)
704 finfo(8,ifield,ng)=fmin
705 finfo(9,ifield,ng)=fmax
708 &
vname(1,ifield), vpiovar, &
709 & trec, iodesc, vsize, &
710 & lbi, ubi, lbj, ubj, lbk, ubk, &
711 &
fscale(ifield,ng), fmin, fmax, &
716 & fout(:,:,:,tindex), &
719 & fout(:,:,:,tindex))
721 finfo(8,ifield,ng)=fmin
722 finfo(9,ifield,ng)=fmax
726 &
vname(1,ifield), fval, &
727 & piofile = piofile, &
728 & start = (/trec/), &
730 fval=fval*
fscale(ifield,ng)
731 fpoint(tindex,ifield,ng)=fval
743 WRITE (
stdout,50) trim(
vname(2,ifield)), ng, fmin, fmax
745 lstr=scan(
ncfile,
'/',back=.true.)+1
747 lvar=min(46,len_trim(
vname(2,ifield)))
750 WRITE (
stdout,60)
vname(2,ifield)(1:lvar), t_code, &
751 & ng, trec, tindex,
ncfile(lstr:lend), &
752 & tmin, tmax, tval, fmin, fmax
767 IF (.not.lonerec)
THEN
768 tdelta=
vtime(tindex,ifield,ng)-
vtime(3-tindex,ifield,ng)
769 IF (liocycle.and.(tdelta.lt.0.0_r8))
THEN
770 tdelta=tdelta+clength
773 finfo(7,ifield,ng)=tmono
774 tintrp(tindex,ifield,ng)=tmono
778 10
FORMAT (/,
' GET_3DFLD_PIO - unable to find dimension ',a, &
779 & /,17x,
'for variable: ',a,/,17x,
'in file: ',a, &
780 & /,17x,
'file is not CF compliant...')
781 20
FORMAT (/,
' GET_3DFLD_PIO - unable to find requested variable:', &
782 & 1x,a,/,17x,
'in input NetCDF file: ',a)
783 30
FORMAT (/,
' GET_3DFLD_PIO - unable to open input NetCDF', &
785 40
FORMAT (/,
' GET_3DFLD_PIO - error while reading variable: ',a, &
786 & 2x,
' at TIME index = ',i0)
787 50
FORMAT (2x,
'GET_3DFLD_PIO - ',a,/,22x,
'(Grid = ',i2.2, &
788 &
', Min = ',1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
789 60
FORMAT (2x,
'GET_3DFLD_PIO - ',a,
',',t75,a,/,22x, &
790 &
'(Grid=',i2.2,
', Rec=',i0,
', Index=',i1, &
791 &
', File: ',a,
')',/,22x, &
792 &
'(Tmin= ', f15.4,
' Tmax= ', f15.4,
')', &
793 & t71,
't = ', f15.4 ,/,22x, &
794 &
'(Min = ', 1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
796 70
FORMAT (22x,
'(CheckSum = ',i0,
')')
subroutine get_3dfld_nf90(ng, model, ifield, ncid, nfiles, s, update, lbi, ubi, lbj, ubj, lbk, ubk, iout, irec, fmask, fout)
subroutine get_3dfld(ng, model, ifield, ncid, piofile, nfiles, s, update, lbi, ubi, lbj, ubj, lbk, ubk, iout, irec, fmask, fout)
subroutine get_3dfld_pio(ng, model, ifield, piofile, nfiles, s, update, lbi, ubi, lbj, ubj, lbk, ubk, iout, irec, fmask, fout)
subroutine, public time_string(mytime, date_string)
character(len=256) ncfile
character(len=256) sourcefile
integer, parameter io_nf90
character(len=256), dimension(:,:), allocatable cinfo
logical, dimension(:,:,:), allocatable linfo
integer, parameter io_pio
type(my_vardesc), dimension(:,:,:), pointer dinfo
real(dp), dimension(:,:,:), allocatable vtime
real(dp), dimension(:,:,:), allocatable tintrp
real(dp), dimension(:,:,:), allocatable fpoint
real(dp), dimension(:,:), allocatable fscale
character(len=46), dimension(0:nv) tname
real(dp), dimension(:,:,:), allocatable finfo
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:,:,:), allocatable iinfo
integer, parameter b3dvar
integer, parameter r3dvar
integer, parameter u3dvar
integer, parameter w3dvar
integer, parameter l3dvar
integer, parameter p3dvar
integer, parameter v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_w3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_p3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_b3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_l3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_l3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_b3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_w3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_p3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dvar
real(dp), parameter day2sec
real(dp), parameter spval
integer, dimension(:), allocatable iic
real(dp), dimension(:), allocatable time
integer, dimension(:), allocatable ntstart
logical function, public founderror(flag, noerr, line, routine)