3#if defined FOUR_DVAR || defined ENKF_RESTART
44# if defined PIO_LIB && defined DISTRIBUTE
56 integer,
intent(in) :: ng
60 character (len=*),
parameter :: myfile = &
67 SELECT CASE (
dai(ng)%IOtype)
71# if defined PIO_LIB && defined DISTRIBUTE
81 10
FORMAT (
' DEF_DAI - Illegal output file type, io_type = ',i0, &
82 & /,11x,
'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
95 integer,
intent(in) :: ng
99 logical :: got_var(
nv)
101 integer,
parameter :: natt = 25
103 integer :: i, j, itrc, nvd3, nvd4
104 integer :: recdim, status, varid
107 integer :: t2dgrd(3), u2dgrd(3), v2dgrd(3)
109 integer :: t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
114 character (len=256) :: ncname
115 character (len=MaxLen) :: vinfo(natt)
117 character (len=*),
parameter :: myfile = &
118 & __FILE__//
", def_dai_nf90"
131 WRITE (
stdout,10) ng, trim(ncname)
133 WRITE (
stdout,20) ng, trim(ncname)
196 &
n(ng)+1, dimids(10))
200 &
nt(ng), dimids(11))
247 & nf90_unlimited, dimids(12))
331 vinfo(11)=
'downwards'
332 vinfo(22)=
'coordinates'
335 &
nf_frst, nvd3, t3dgrd, aval, vinfo, ncname, &
336 & setfillval = .false.)
344 vinfo(11)=
'downwards'
345 vinfo(22)=
'coordinates'
348 &
nf_frst, nvd3, u3dgrd, aval, vinfo, ncname, &
349 & setfillval = .false.)
357 vinfo(11)=
'downwards'
358 vinfo(22)=
'coordinates'
361 &
nf_frst, nvd3, v3dgrd, aval, vinfo, ncname, &
362 & setfillval = .false.)
370 vinfo(11)=
'downwards'
371 vinfo(22)=
'coordinates'
374 &
nf_frst, nvd3, w3dgrd, aval, vinfo, ncname, &
375 & setfillval = .false.)
387 WRITE (vinfo( 3),
'(a,a)')
'seconds since ', trim(
rclock%string)
388 vinfo( 4)=trim(
rclock%calendar)
392 &
nf_tout, 1, (/recdim/), aval, vinfo, ncname, &
393 & setparaccess = .true.)
404 vinfo(22)=
'coordinates'
408 &
nf_frst, nvd3, t2dgrd, aval, vinfo, ncname, &
409 & setfillval = .false.)
411 &
nf_frst, nvd3, t2dgrd, aval, vinfo, ncname)
424 vinfo(22)=
'coordinates'
427 &
nf_frst, nvd3, u2dgrd, aval, vinfo, ncname)
438 vinfo(22)=
'coordinates'
441 &
nf_frst, nvd3, v2dgrd, aval, vinfo, ncname)
454 vinfo(22)=
'coordinates'
457 &
nf_frst, nvd4, u3dgrd, aval, vinfo, ncname)
468 vinfo(22)=
'coordinates'
471 &
nf_frst, nvd4, v3dgrd, aval, vinfo, ncname)
484 IF (itrc.eq.
idsed(i))
THEN
485 WRITE (vinfo(19),50) 1000.0_r8*
sd50(i,ng)
490 vinfo(22)=
'coordinates'
493 &
nf_frst, nvd4, t3dgrd, aval, vinfo, ncname)
505 vinfo(22)=
'coordinates'
508 &
nf_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
509 & setfillval = .false.)
520 vinfo(22)=
'coordinates'
523 &
nf_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
524 & setfillval = .false.)
536 vinfo(22)=
'coordinates'
539 &
nf_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
540 & setfillval = .false.)
566 query :
IF (.not.
ldefdai(ng))
THEN
573 WRITE (
stdout,60) trim(ncname)
580 & ncid =
dai(ng)%ncid)
586 & ncid =
dai(ng)%ncid)
632 got_var(
idtvar(itrc))=.true.
642 IF (.not.got_var(
idtime))
THEN
648 IF (.not.got_var(
idfsur))
THEN
654 IF (.not.got_var(
idubar))
THEN
660 IF (.not.got_var(
idvbar))
THEN
667 IF (.not.got_var(
iduvel))
THEN
673 IF (.not.got_var(
idvvel))
THEN
680 IF (.not.got_var(
idtvar(itrc)))
THEN
687 IF (.not.got_var(
idvvis))
THEN
693 IF (.not.got_var(
idtdif))
THEN
700 IF (.not.got_var(
idsdif))
THEN
714 10
FORMAT (/,2x,
'DEF_DAI_NF90 - creating DA INI/RST file,',t56, &
715 &
'Grid ',i2.2,
': ',a)
716 20
FORMAT (/,2x,
'DEF_DAI_NF90 - inquiring DA INI/RST file,',t56, &
717 &
'Grid ',i2.2,
': ',a)
718 30
FORMAT (/,
' DEF_DAI_NF90 - unable to create DA initial/restart', &
719 &
' NetCDF file: ',a)
720 40
FORMAT (
'time independent',1x,a)
721 50
FORMAT (1pe11.4,1x,
'millimeter')
722 60
FORMAT (/,
' DEF_DAI_NF90 - unable to open DA initial/restart' &
723 &
' NetCDF file: ',a)
724 70
FORMAT (/,
' DEF_DAI_NF90 - unable to find variable: ',a,2x, &
725 &
' in DA initial/restart NetCDF file: ',a)
730# if defined PIO_LIB && defined DISTRIBUTE
740 integer,
intent(in) :: ng
744 logical :: got_var(
nv)
746 integer,
parameter :: natt = 25
748 integer :: i, j, itrc, nvd3, nvd4
749 integer :: recdim, status
752 integer :: t2dgrd(3), u2dgrd(3), v2dgrd(3)
754 integer :: t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
759 character (len=256) :: ncname
760 character (len=MaxLen) :: vinfo(natt)
762 character (len=*),
parameter :: myfile = &
763 & __FILE__//
", def_dai_pio"
776 WRITE (
stdout,10) ng, trim(ncname)
778 WRITE (
stdout,20) ng, trim(ncname)
841 &
n(ng)+1, dimids(10))
845 &
nt(ng), dimids(11))
892 & pio_unlimited, dimids(12))
976 vinfo(11)=
'downwards'
977 vinfo(22)=
'coordinates'
984 &
pio_frst, nvd3, t3dgrd, aval, vinfo, ncname, &
985 & setfillval = .false.)
993 vinfo(11)=
'downwards'
994 vinfo(22)=
'coordinates'
1001 &
pio_frst, nvd3, u3dgrd, aval, vinfo, ncname, &
1002 & setfillval = .false.)
1010 vinfo(11)=
'downwards'
1011 vinfo(22)=
'coordinates'
1018 &
pio_frst, nvd3, v3dgrd, aval, vinfo, ncname, &
1019 & setfillval = .false.)
1027 vinfo(11)=
'downwards'
1028 vinfo(22)=
'coordinates'
1035 &
pio_frst, nvd3, w3dgrd, aval, vinfo, ncname, &
1036 & setfillval = .false.)
1048 WRITE (vinfo( 3),
'(a,a)')
'seconds since ', trim(
rclock%string)
1049 vinfo( 4)=trim(
rclock%calendar)
1057 &
pio_tout, 1, (/recdim/), aval, vinfo, ncname, &
1058 & setparaccess = .true.)
1069 vinfo(22)=
'coordinates'
1077 &
pio_frst, nvd3, t2dgrd, aval, vinfo, ncname, &
1078 & setfillval = .false.)
1080 &
pio_frst, nvd3, t2dgrd, aval, vinfo, ncname)
1093 vinfo(22)=
'coordinates'
1100 &
pio_frst, nvd3, u2dgrd, aval, vinfo, ncname)
1111 vinfo(22)=
'coordinates'
1118 &
pio_frst, nvd3, v2dgrd, aval, vinfo, ncname)
1131 vinfo(22)=
'coordinates'
1138 &
pio_frst, nvd4, u3dgrd, aval, vinfo, ncname)
1149 vinfo(22)=
'coordinates'
1156 &
pio_frst, nvd4, v3dgrd, aval, vinfo, ncname)
1169 IF (itrc.eq.
idsed(i))
THEN
1170 WRITE (vinfo(19),50) 1000.0_r8*
sd50(i,ng)
1175 vinfo(22)=
'coordinates'
1181 &
dai(ng)%pioTrc(itrc)%vd, &
1182 &
pio_frst, nvd4, t3dgrd, aval, vinfo, ncname)
1194 vinfo(22)=
'coordinates'
1201 &
pio_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
1202 & setfillval = .false.)
1213 vinfo(22)=
'coordinates'
1220 &
pio_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
1221 & setfillval = .false.)
1234 vinfo(22)=
'coordinates'
1241 &
pio_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
1242 & setfillval = .false.)
1268 query :
IF (.not.
ldefdai(ng))
THEN
1275 WRITE (
stdout,60) trim(ncname)
1282 & piofile =
dai(ng)%pioFile)
1288 & piofile=
dai(ng)%pioFile)
1301 IF (trim(var_name(i)).eq.trim(
vname(1,
idtime)))
THEN
1306 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idfsur)))
THEN
1311 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idubar)))
THEN
1316 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvbar)))
THEN
1322 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
iduvel)))
THEN
1327 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvvel)))
THEN
1332 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvvis)))
THEN
1337 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idtdif)))
THEN
1342 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idsdif)))
THEN
1351 IF (trim(var_name(i)).eq.trim(
vname(1,
idtvar(itrc))))
THEN
1352 got_var(
idtvar(itrc))=.true.
1364 IF (.not.got_var(
idtime))
THEN
1370 IF (.not.got_var(
idfsur))
THEN
1376 IF (.not.got_var(
idubar))
THEN
1382 IF (.not.got_var(
idvbar))
THEN
1389 IF (.not.got_var(
iduvel))
THEN
1395 IF (.not.got_var(
idvvel))
THEN
1402 IF (.not.got_var(
idtvar(itrc)))
THEN
1409 IF (.not.got_var(
idvvis))
THEN
1415 IF (.not.got_var(
idtdif))
THEN
1422 IF (.not.got_var(
idsdif))
THEN
1433 dai(ng)%Rindex=rec_size
1436 10
FORMAT (/,2x,
'DEF_DAI_PIO - creating DA INI/RST file,',t56, &
1437 &
'Grid ',i2.2,
': ',a)
1438 20
FORMAT (/,2x,
'DEF_DAI_PIO - inquiring DA INI/RST file,',t56, &
1439 &
'Grid ',i2.2,
': ',a)
1440 30
FORMAT (/,
' DEF_DAI_PIO - unable to create DA initial/restart', &
1441 &
' NetCDF file: ',a)
1442 40
FORMAT (
'time independent',1x,a)
1443 50
FORMAT (1pe11.4,1x,
'millimeter')
1444 60
FORMAT (/,
' DEF_DAI_PIO - unable to open DA initial/restart' &
1445 &
' NetCDF file: ',a)
1446 70
FORMAT (/,
' DEF_DAI_PIO - unable to find variable: ',a,2x, &
1447 &
' in DA initial/restart NetCDF file: ',a)
subroutine, private def_dai_nf90(ng)
subroutine, private def_dai_pio(ng)
subroutine, public def_dai(ng)
integer, parameter nbands
integer, dimension(:), allocatable nstatevar
type(t_io), dimension(:), allocatable dai
character(len=256) sourcefile
integer, parameter io_nf90
integer, parameter io_pio
integer, dimension(:), allocatable idtvar
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:,:,:), allocatable iinfo
integer, parameter ndimid
integer, parameter nf_tout
subroutine, public netcdf_check_dim(ng, model, ncname, ncid)
subroutine, public netcdf_open(ng, model, ncname, omode, ncid)
subroutine, public netcdf_enddef(ng, model, ncname, ncid)
character(len=100), dimension(mvars) var_name
integer, dimension(mvars) var_id
subroutine, public netcdf_create(ng, model, ncname, ncid)
subroutine, public netcdf_inq_var(ng, model, ncname, ncid, myvarname, searchvar, varid, nvardim, nvaratt)
integer, parameter nf_frst
integer, dimension(:), allocatable n
integer, parameter r3dvar
type(t_iobounds), dimension(:), allocatable iobounds
integer, parameter u3dvar
integer, parameter u2dvar
integer, parameter w3dvar
integer, dimension(:), allocatable nt
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter v3dvar
type(var_desc_t), dimension(:), pointer var_desc
integer, parameter pio_frst
subroutine, public pio_netcdf_create(ng, model, ncname, piofile)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
integer, parameter pio_tout
subroutine, public pio_netcdf_enddef(ng, model, ncname, piofile)
logical, dimension(:), allocatable ldefdai
integer, dimension(:), allocatable idsed
real(r8), dimension(:,:), allocatable sd50
logical function, public founderror(flag, noerr, line, routine)