33 integer,
intent(in) :: ng, model
37 integer :: i, max_files
41 character (len= 1),
parameter :: blank =
' '
42 character (len=40) :: file_type
44 character (len=*),
parameter :: MyFile = &
97 IF (model.eq.
iadm)
THEN
109 file_type=
'Lateral Boundary'
121 file_type=
'Climatology'
140#if defined TANGENT || defined TL_IOMS
171 file_type=
'Sources/Sinks Data'
221 integer,
intent(in) :: ng, model
223 character (len=*),
intent(in) :: file_type
225 TYPE(
t_io),
intent(inout) :: S(Ngrids)
229 logical :: Lcheck, foundit
230 logical :: check_file
232 integer :: Fcount, Nfiles, i, ifile
234 real(dp) :: Tfinal, Tmax, Tmin, Tscale
236 character (len= 22) :: Tmin_code, Tmax_code
237 character (len=256) :: ncname
239 character (len=*),
parameter :: MyFile = &
240 & __FILE__//
", multifile_info_s1d"
250 IF (model.eq.
iadm)
THEN
260 ncname=trim(s(ng)%files(ifile))
261 foundit=check_file(ng, model, nfiles, ncname, s(ng)%IOtype, &
262 & tmin, tmax, tscale, lcheck)
264 s(ng)%time_min(ifile)=tmin
265 s(ng)%time_max(ifile)=tmax
273 IF (model.eq.
iadm)
THEN
275 tmax=tscale*s(ng)%time_max(ifile)
276 IF (
time(ng).le.tmax)
THEN
282 tmin=tscale*s(ng)%time_min(ifile)
283 IF (
time(ng).ge.tmin)
THEN
295 IF (fcount.gt.0)
THEN
297 ncname=s(ng)%files(fcount)
298 s(ng)%name=trim(ncname)
300 IF (
master.and.lcheck)
THEN
303 tmin=tscale*s(ng)%time_min(ifile)
304 tmax=tscale*s(ng)%time_max(ifile)
307 WRITE (
stdout,20) tmin_code, tmax_code, &
308 & trim(s(ng)%files(ifile))
318 IF (model.eq.
iadm)
THEN
319 tmin=tscale*s(ng)%time_min(1)
320 IF (tfinal.lt.tmin)
THEN
323 WRITE (
stdout,30) trim(file_type)//
' (adjoint)', &
324 & trim(s(ng)%files(1)), &
325 &
'first ', tmin_code,
f_code
331 tmax=tscale*s(ng)%time_max(nfiles)
332 IF (tfinal.gt.tmax)
THEN
335 WRITE (
stdout,30) trim(file_type), &
336 & trim(s(ng)%files(nfiles)), &
337 &
'last ', tmax_code,
f_code
341 & __line__, myfile))
RETURN
346 10
FORMAT (/,
' MULTIFILE_INFO_S1D - Error while processing ', a, &
347 &
' multi-files: ',/,22x,
'data does not include', &
348 &
' initialization time = ', a,/)
349 20
FORMAT (3x,a,2x,a,5x,a)
350 30
FORMAT (/,
' MULTIFILE_INFO_S1D - Error while checking input ', a, &
351 &
' file:',/,22x,a,/,22x, &
352 & a,
'data time record available is for day: ',a,/,22x, &
353 &
'but data is needed to finish run until day: ',a)
388 integer,
intent(in) :: ng, model, idim
389 integer,
intent(in) :: InpFiles(Ngrids)
391 character (len=*),
intent(in) :: file_type
393 TYPE(
t_io),
intent(inout) :: S(idim,Ngrids)
397 logical :: Lcheck, foundit
398 logical :: check_file
400 integer :: Fcount, Nfiles, i, ifile
402 real(dp) :: Tfinal, Tmax, Tmin, Tscale
404 character (len= 22) :: Tmin_code, Tmax_code
405 character (len=256) :: ncname
407 character (len=*),
parameter :: MyFile = &
408 & __FILE__//
", multifile_info_s2d"
418 IF (model.eq.
iadm)
THEN
427 nfiles=s(i,ng)%Nfiles
429 ncname=trim(s(i,ng)%files(ifile))
430 foundit=check_file(ng, model, nfiles, ncname, s(i,ng)%IOtype, &
431 & tmin, tmax, tscale, lcheck)
433 s(i,ng)%time_min(ifile)=tmin
434 s(i,ng)%time_max(ifile)=tmax
442 IF (model.eq.
iadm)
THEN
444 tmax=tscale*s(i,ng)%time_max(ifile)
445 IF (
time(ng).le.tmax)
THEN
451 tmin=tscale*s(i,ng)%time_min(ifile)
452 IF (
time(ng).ge.tmin)
THEN
464 IF (fcount.gt.0)
THEN
465 s(i,ng)%Fcount=fcount
466 ncname=s(i,ng)%files(fcount)
467 s(i,ng)%name=trim(ncname)
469 IF (
master.and.lcheck)
THEN
472 tmin=tscale*s(i,ng)%time_min(ifile)
473 tmax=tscale*s(i,ng)%time_max(ifile)
476 WRITE (
stdout,20) tmin_code, tmax_code, &
477 & trim(s(i,ng)%files(ifile))
487 IF (model.eq.
iadm)
THEN
488 tmin=tscale*s(i,ng)%time_min(1)
489 IF (tfinal.lt.tmin)
THEN
492 WRITE (
stdout,30) trim(file_type)//
' (adjoint)', &
493 & trim(s(i,ng)%files(1)), &
494 &
'first ', tmin_code,
f_code
498 & __line__, myfile))
RETURN
501 tmax=tscale*s(i,ng)%time_max(nfiles)
502 IF (tfinal.gt.tmax)
THEN
505 WRITE (
stdout,30) trim(file_type), &
506 & trim(s(i,ng)%files(nfiles)), &
507 &
'last ', tmax_code,
f_code
511 & __line__, myfile))
RETURN
517 10
FORMAT (/,
' MULTIFILE_INFO_S2D - Error while processing ', a, &
518 &
' multi-files: ',/,22x,
'data does not include', &
519 &
' initialization time = ', a,/)
520 20
FORMAT (3x,a,2x,a,5x,a)
521 30
FORMAT (/,
' MULTIFILE_INFO_S2D - Error while checking input ', a, &
522 &
' file:',/,22x,a,/,22x, &
523 & a,
'data time record available is for day: ',a,/,22x, &
524 &
'but data is needed to finish run until day: ',a)
530 & Tmin, Tmax, Tscale, Lcheck)
RESULT (foundit)
566#if defined PIO_LIB && defined DISTRIBUTE
577 logical,
intent(out) :: lcheck
579 integer,
intent(in) :: ng, model, nfiles, iotype
581 character (*),
intent(in) :: ncname
583 real(dp),
intent(out) :: tmin, tmax, tscale
587 logical :: lcycle, lperpetual, lspectral, foundit
589 integer :: nrec, tvarid, i, ncid, nvdim, nvatt
591 character (len=40) :: tunits, tvarname
593 character (len=*),
parameter :: myfile = &
594 & __FILE__//
", check_file"
596#if defined PIO_LIB && defined DISTRIBUTE
598 TYPE (file_desc_t) :: piofile
599 TYPE (var_desc_t) :: tvardesc
624#if defined PIO_LIB && defined DISTRIBUTE
640#if defined PIO_LIB && defined DISTRIBUTE
657 ELSE IF ((index(trim(
var_name(i)),
'tide_period').ne.0).and. &
665 IF (.not.foundit)
THEN
667 WRITE (
stdout,20) trim(ncname)
679 & myvarname = trim(tvarname), &
683#if defined PIO_LIB && defined DISTRIBUTE
686 & piofile = piofile, &
687 & myvarname = trim(tvarname), &
688 & piovar = tvardesc, &
707 IF (index(trim(
var_achar(i)),
'day').ne.0)
THEN
709 ELSE IF (index(trim(
var_achar(i)),
'hour').ne.0)
THEN
711 ELSE IF (index(trim(
var_achar(i)),
'second').ne.0)
THEN
714 ELSE IF (trim(
var_aname(i)).eq.
'calendar')
THEN
715 IF (((nrec.eq.1).and.(nfiles.eq.1)).or. &
716 & (index(trim(
var_achar(i)),
'none').ne.0))
THEN
719 ELSE IF (trim(
var_aname(i)).eq.
'cycle_length')
THEN
727 IF (lcycle.or.lperpetual.or.lspectral.or. &
728 & ((nrec.eq.1).and.(nfiles.eq.1)))
THEN
737 &
rclock%DateNumber, tmin, &
744 &
rclock%DateNumber, tmax, &
746 & start = (/nrec/), &
750#if defined PIO_LIB && defined DISTRIBUTE
753 &
rclock%DateNumber, tmin, &
754 & piofile = piofile, &
760 &
rclock%DateNumber, tmax, &
761 & piofile = piofile, &
762 & start = (/nrec/), &
774#if defined PIO_LIB && defined DISTRIBUTE
781 10
FORMAT (/,
' CHECK_FILE - unable to open grid NetCDF file: ',a)
782 20
FORMAT (/,
' CHECK_FILE - unable to find time variable in input', &
783 &
' NetCDF file:', /, 14x, a, /, 14x, &
784 &
'variable name does not contains the "time" string.')
logical function check_file(ng, model, nfiles, ncname, iotype, tmin, tmax, tscale, lcheck)
subroutine multifile_info_s1d(ng, model, file_type, s)
subroutine multifile_info_s2d(ng, model, file_type, inpfiles, idim, s)
subroutine check_multifile(ng, model)
subroutine, public time_string(mytime, date_string)
type(t_io), dimension(:), allocatable ssf
integer, dimension(:), allocatable nclmfiles
type(t_io), dimension(:), allocatable tlm
type(t_io), dimension(:), allocatable blk
type(t_io), dimension(:,:), allocatable frc
type(t_io), dimension(:,:), allocatable bry
type(t_io), dimension(:), allocatable fwd
integer, dimension(:), allocatable nbcfiles
type(t_io), dimension(:,:), allocatable clm
character(len=256) sourcefile
integer, dimension(:), allocatable nffiles
integer, parameter io_nf90
character(len=256), dimension(:,:), allocatable cinfo
logical, dimension(:,:,:), allocatable linfo
integer, parameter io_pio
real(dp), dimension(:,:,:), allocatable vtime
integer, dimension(:,:), allocatable frcncid
real(dp), dimension(:,:,:), allocatable tintrp
real(dp), dimension(:,:,:), allocatable fpoint
real(dp), dimension(:,:,:), allocatable finfo
integer, dimension(:,:,:), allocatable iinfo
subroutine, public netcdf_close(ng, model, ncid, ncname, lupdate)
character(len=1024), dimension(nvara) var_achar
subroutine, public netcdf_open(ng, model, ncname, omode, ncid)
integer, dimension(mvars) var_ndim
character(len=100), dimension(mvars) var_name
integer, dimension(nvard) var_dsize
character(len=100), dimension(nvara) var_aname
subroutine, public netcdf_inq_var(ng, model, ncname, ncid, myvarname, searchvar, varid, nvardim, nvaratt)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
subroutine, public pio_netcdf_close(ng, model, piofile, ncname, lupdate)
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
logical, dimension(:), allocatable clm_file
logical, dimension(:), allocatable luvsrc
integer, dimension(:), allocatable ntimes
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable lreadfrc
logical, dimension(:), allocatable lwsrc
logical, dimension(:), allocatable obcdata
logical, dimension(:), allocatable lreadtlm
real(dp), dimension(:), allocatable time
logical, dimension(:), allocatable lreadfwd
logical, dimension(:), allocatable lreadblk
character(len(sinp)) function, public lowercase(sinp)
logical function, public founderror(flag, noerr, line, routine)