2#if defined ADJOINT && defined SOLVE3D
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 = &
96 SELECT CASE (s(1)%IOtype)
99 & nfiles, s, update, &
100 & lbi, ubi, lbj, ubj, lbk, ubk, &
107# if defined PIO_LIB && defined DISTRIBUTE
110 & nfiles, s, update, &
111 & lbi, ubi, lbj, ubj, lbk, ubk, &
124 10
FORMAT (
' GET_3DFLDR - Illegal inpput type, io_type = ',i0, &
125 & /,14x,
'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_3dfldr_nf90"
207 IF (
iic(ng).eq.0) linquire=.true.
208 IF (.not.linquire.and. &
209 & ((
iinfo(10,ifield,ng).gt.1).and. &
210 & (
linfo( 5,ifield,ng).or. &
227 CALL inquiry (ng, model, job, iout, irec, 1, ifield, ncid, &
230 IF (
linfo(5,ifield,ng))
THEN
231 linfo(5,ifield,ng)=.false.
243 tmono=
finfo(7,ifield,ng)
245 IF ((tmono.gt.
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
270 IF (trec.le.0) trec=nrec+trec
274 iinfo(9,ifield,ng)=trec
276 IF ((1.le.trec).and.(trec.le.nrec))
THEN
289 iinfo(8,ifield,ng)=tindex
296 &
rclock%DateNumber, tval, &
298 & start = (/trec/), &
306 vtime(tindex,ifield,ng)=tval
312 IF ((trec.eq.1).and.(tval*
day2sec.ge.
time(ng)))
THEN
313 linfo(5,ifield,ng)=.true.
325 &
vname(1,ifield), vid, &
327 & lbi, ubi, lbj, ubj, lbk, ubk, &
329 & my_fmin, my_fmax, &
339 fmin=min(fmin,my_fmin)
340 fmax=max(fmax,my_fmax)
342 finfo(8,ifield,ng)=fmin
343 finfo(9,ifield,ng)=fmax
346 &
vname(1,ifield), vid, &
347 & trec, vtype, vsize, &
348 & lbi, ubi, lbj, ubj, lbk, ubk, &
349 &
fscale(ifield,ng), fmin, fmax, &
354 & fout(:,:,:,tindex), &
357 & fout(:,:,:,tindex))
359 finfo(8,ifield,ng)=fmin
360 finfo(9,ifield,ng)=fmax
366 & start = (/trec/), &
368 fval=fval*
fscale(ifield,ng)
369 fpoint(tindex,ifield,ng)=fval
381 WRITE (
stdout,50) trim(
vname(2,ifield)), ng, fmin, fmax
383 lstr=scan(
ncfile,
'/',back=.true.)+1
385 lvar=min(46,len_trim(
vname(2,ifield)))
388 WRITE (
stdout,60)
vname(2,ifield)(1:lvar), t_code, &
389 & ng, trec, tindex,
ncfile(lstr:lend), &
390 & tmin, tmax, tval, fmin, fmax
405 IF (.not.lonerec)
THEN
406 tdelta=
vtime(3-tindex,ifield,ng)-
vtime(tindex,ifield,ng)
407 IF (liocycle.and.(tdelta.lt.0.0_r8))
THEN
408 tdelta=tdelta+clength
411 finfo(7,ifield,ng)=tmono
412 tintrp(tindex,ifield,ng)=tmono
416 10
FORMAT (/,
' GET_3DFLDR_NF90 - unable to find dimension ',a, &
417 & /,19x,
'for variable: ',a,/,19x,
'in file: ',a, &
418 & /,19x,
'file is not CF compliant...')
419 20
FORMAT (/,
' GET_3DFLDR_NF90 - unable to find requested', &
420 &
' variable: ',a,/,19x,
'in input NetCDF file: ',a)
421 30
FORMAT (/,
' GET_3DFLDR_NF90 - unable to open input NetCDF', &
423 40
FORMAT (/,
' GET_3DFLDR_NF90 - error while reading variable: ',a, &
424 & 2x,
' at TIME index = ',i0)
425 50
FORMAT (2x,
'GET_3DFLDR_NF90 - ',a,/,22x,
'(Grid = ',i2.2, &
426 &
', Min = ',1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
427 60
FORMAT (2x,
'GET_3DFLDR_NF90 - ',a,
',',t75,a,/,22x, &
428 &
'(Grid=',i2.2,
', Rec=',i0,
', Index=',i1, &
429 &
', File: ',a,
')',/,22x, &
430 &
'(Tmin= ', f15.4,
' Tmax= ', f15.4,
')', &
431 & t71,
't = ', f15.4 ,/,22x, &
432 &
'(Min = ', 1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
434 70
FORMAT (22x,
'(CheckSum = ',i0,
')')
440# if defined PIO_LIB && defined DISTRIBUTE
444 & nfiles, S, update, &
445 & LBi, UBi, LBj, UBj, LBk, UBk, &
469 logical,
intent(out) :: update
471 integer,
intent(in) :: ng, model, ifield, nfiles
472 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
473 integer,
intent(in) :: Iout, Irec
475 TYPE (File_desc_t),
intent(inout) :: pioFile
476 TYPE(
t_io),
intent(inout) :: S(nfiles)
479 real(r8),
intent(in) :: Fmask(LBi:UBi,LBj:UBj)
481 real(r8),
intent(inout) :: Fout(LBi:UBi,LBj:UBj,LBk:UBk,Iout)
485 logical :: Lgridded, Linquire, Liocycle, Lmulti, Lonerec
487 integer :: Nrec, Tindex, Trec, Vtype
488 integer :: i, job, lend, lstr, lvar, status
491 integer(i8b) :: Fhash
494 real(r8) :: Fmax, Fmin, Fval, my_Fmin, my_Fmax
496 real(dp) :: Clength, Tdelta, Tend
497 real(dp) :: Tmax, Tmin, Tmono, Tscale, Tstr
498 real(dp) :: Tsec, Tval
500 character (len=22) :: t_code
502 character (len=*),
parameter :: MyFile = &
503 & __FILE__//
", get_3dfldr_pio"
505 TYPE (IO_Desc_t),
pointer :: ioDesc
506 TYPE (My_VarDesc) :: TpioVar, VpioVar
522 IF (
iic(ng).eq.0) linquire=.true.
523 IF (.not.linquire.and. &
524 & ((
iinfo(10,ifield,ng).gt.1).and. &
525 & (
linfo( 5,ifield,ng).or. &
542 CALL inquiry (ng, model, job, iout, irec, 1, ifield, piofile, &
545 IF (
linfo(5,ifield,ng))
THEN
546 linfo(5,ifield,ng)=.false.
558 tmono=
finfo(7,ifield,ng)
560 IF ((tmono.gt.
time(ng)).or.(
iic(ng).eq.0).or. &
565 lgridded=
linfo(1,ifield,ng)
566 liocycle=
linfo(2,ifield,ng)
567 lonerec =
linfo(3,ifield,ng)
568 vtype =
iinfo(1,ifield,ng)
569 vpiovar =
dinfo(1,ifield,ng)
570 tpiovar =
dinfo(2,ifield,ng)
571 nrec =
iinfo(4,ifield,ng)
572 vsize(1)=
iinfo(5,ifield,ng)
573 vsize(2)=
iinfo(6,ifield,ng)
574 vsize(3)=
iinfo(7,ifield,ng)
575 tindex =
iinfo(8,ifield,ng)
576 trec =
iinfo(9,ifield,ng)
577 tmin =
finfo(1,ifield,ng)
578 tmax =
finfo(2,ifield,ng)
579 clength =
finfo(5,ifield,ng)
580 tscale =
finfo(6,ifield,ng)
584 trec=mod(trec,nrec)-1
585 IF (trec.le.0) trec=nrec+trec
589 iinfo(9,ifield,ng)=trec
591 IF ((1.le.trec).and.(trec.le.nrec))
THEN
604 iinfo(8,ifield,ng)=tindex
609 IF (tpiovar%vd%varID.ge.0)
THEN
611 &
rclock%DateNumber, tval, &
612 & piofile = piofile, &
613 & start = (/trec/), &
621 vtime(tindex,ifield,ng)=tval
627 IF ((trec.eq.1).and.(tval*
day2sec.ge.
time(ng)))
THEN
628 linfo(5,ifield,ng)=.true.
633 IF (vpiovar%vd%varID.ge.0)
THEN
637 IF (kind(fout).eq.8)
THEN
643# if defined DIAGNOSTICS_BIO && defined ECOSIM
645 IF (kind(fout).eq.8)
THEN
652 IF (kind(fout).eq.8)
THEN
658 IF (kind(fout).eq.8)
THEN
664 IF (kind(fout).eq.8)
THEN
670 IF (kind(fout).eq.8)
THEN
676 IF (kind(fout).eq.8)
THEN
689 &
vname(1,ifield), vpiovar, &
690 & i, iodesc, vsize, &
691 & lbi, ubi, lbj, ubj, lbk, ubk, &
693 & my_fmin, my_fmax, &
703 fmin=min(fmin,my_fmin)
704 fmax=min(fmax,my_fmax)
706 finfo(8,ifield,ng)=fmin
707 finfo(9,ifield,ng)=fmax
710 &
vname(1,ifield), vpiovar, &
711 & trec, iodesc, vsize, &
712 & lbi, ubi, lbj, ubj, lbk, ubk, &
713 &
fscale(ifield,ng), fmin, fmax, &
718 & fout(:,:,:,tindex), &
721 & fout(:,:,:,tindex))
723 finfo(8,ifield,ng)=fmin
724 finfo(9,ifield,ng)=fmax
728 &
vname(1,ifield), fval, &
729 & piofile = piofile, &
730 & start = (/trec/), &
732 fval=fval*
fscale(ifield,ng)
733 fpoint(tindex,ifield,ng)=fval
745 WRITE (
stdout,50) trim(
vname(2,ifield)), ng, fmin, fmax
747 lstr=scan(
ncfile,
'/',back=.true.)+1
749 lvar=min(46,len_trim(
vname(2,ifield)))
752 WRITE (
stdout,60)
vname(2,ifield)(1:lvar), t_code, &
753 & ng, trec, tindex,
ncfile(lstr:lend), &
754 & tmin, tmax, tval, fmin, fmax
769 IF (.not.lonerec)
THEN
770 tdelta=
vtime(3-tindex,ifield,ng)-
vtime(tindex,ifield,ng)
771 IF (liocycle.and.(tdelta.lt.0.0_r8))
THEN
772 tdelta=tdelta+clength
775 finfo(7,ifield,ng)=tmono
776 tintrp(tindex,ifield,ng)=tmono
780 10
FORMAT (/,
' GET_3DFLDR_PIO - unable to find dimension ',a, &
781 & /,18x,
'for variable: ',a,/,18x,
'in file: ',a, &
782 & /,18x,
'file is not CF compliant...')
783 20
FORMAT (/,
' GET_3DFLDR_PIO - unable to find requested', &
784 &
' variable: ',a,/,18x,
'in input NetCDF file: ',a)
785 30
FORMAT (/,
' GET_3DFLDR_PIO - unable to open input NetCDF', &
787 40
FORMAT (/,
' GET_3DFLDR_PIO - error while reading variable: ',a, &
788 & 2x,
' at TIME index = ',i0)
789 50
FORMAT (2x,
'GET_3DFLDR_PIO - ',a,/,22x,
'(Grid = ',i2.2, &
790 &
', Min = ',1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
791 60
FORMAT (2x,
'GET_3DFLDR_PIO - ',a,
',',t75,a,/,22x, &
792 &
'(Grid=',i2.2,
', Rec=',i0,
', Index=',i1, &
793 &
', File: ',a,
')',/,22x, &
794 &
'(Tmin= ', f15.4,
' Tmax= ', f15.4,
')', &
795 & t71,
't = ', f15.4 ,/,22x, &
796 &
'(Min = ', 1p,e15.8,0p,
' Max = ',1p,e15.8,0p,
')')
798 70
FORMAT (22x,
'(CheckSum = ',i0,
')')
subroutine get_3dfldr_pio(ng, model, ifield, piofile, nfiles, s, update, lbi, ubi, lbj, ubj, lbk, ubk, iout, irec, fmask, fout)
subroutine get_3dfldr(ng, model, ifield, ncid, piofile, nfiles, s, update, lbi, ubi, lbj, ubj, lbk, ubk, iout, irec, fmask, fout)
subroutine get_3dfldr_nf90(ng, model, ifield, ncid, 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)