21#if defined PIO_LIB && defined DISTRIBUTE
47#if defined ICE_MODEL && defined SOLVE3D
52#if defined SEDIMENT || defined BBL_MODEL
65#if defined PIO_LIB && defined DISTRIBUTE
74 & Nrec, Nvar, tvarnam, get_var, have_var)
81 integer,
intent(in) :: ng, model, ncid, Nvar
82 integer,
intent(inout) :: Nrec
84 character (len=*),
intent(in) :: ncname
85 character (len=*),
intent(in) :: string
87 character (len=*),
intent(inout) :: tvarnam
89 logical,
dimension(Nvar),
intent(out) :: get_var
90 logical,
dimension(Nvar),
intent(out) :: have_var
94 integer :: IDmod, i, itrc
96 character (len=*),
parameter :: MyFile = &
97 & __FILE__//
", checkvars_nf90"
109 IF ((model.lt.1).or.(model.gt.4))
THEN
142 IF ((model.le.11).or.(model.eq.14).or.(model.eq.15))
THEN
144 IF (
nrrec(ng).ne.0)
THEN
152 get_var(
idtvar(itrc))=.true.
166 get_var(
idtvar(itrc))=.true.
172# if defined ANA_BIOLOGY
173 IF (
nrrec(ng).ne.0)
THEN
184# if defined T_PASSIVE
185# if defined ANA_PASSIVE
186 IF (
nrrec(ng).ne.0)
THEN
199 IF (
nrrec(ng).ne.0)
THEN
202 get_var(
idfrac(itrc))=.true.
203 get_var(
idbmas(itrc))=.true.
206 get_var(
idsbed(itrc))=.true.
212 get_var(
idfrac(itrc))=.true.
213 get_var(
idbmas(itrc))=.true.
216 get_var(
idsbed(itrc))=.true.
220 IF (
nrrec(ng).ne.0)
THEN
222 get_var(
idubld(itrc))=.true.
223 get_var(
idvbld(itrc))=.true.
228 IF (
nrrec(ng).ne.0)
THEN
233# if defined SEDIMENT || defined BBL_MODEL
236 get_var(
idbott(itrc))=.true.
242 IF (
isice(i).gt.0)
THEN
243 get_var(
isice(i))=.true.
248#ifdef PERFECT_RESTART
252 IF (((model.eq.0).or.(model.eq.
inlm)).and.(
nrrec(ng).ne.0))
THEN
260# if defined GLS_MIXING || defined MY25_MIXING
272#ifdef ADJUST_BOUNDARY
276 IF ((model.eq.
iadm).or.(model.eq.
itlm).or.(model.eq.
inlm).or. &
277 & (model.eq.
irpm).or.(model.eq.5).or.(model.eq.12).or. &
278 & (model.eq.16))
THEN
303#if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
307 IF ((model.eq.
iadm).or.(model.eq.
itlm).or.(model.eq.
inlm).or. &
308 & (model.eq.
irpm).or.(model.eq.5).or.(model.eq.13).or. &
309 & (model.eq.17))
THEN
313 get_var(
idtsur(itrc))=.true.
317# ifdef ADJUST_WSTRESS
331#if defined SEDIMENT && defined SED_MORPH
335#ifdef ADJUST_BOUNDARY
370# if defined GLS_MIXING || defined MY25_MIXING || defined LMD_MIXING
394# if defined GLS_MIXING || defined MY25_MIXING
433 have_var(
idtvar(itrc))=.true.
434# ifdef ADJUST_BOUNDARY
443 have_var(
idtsur(itrc))=.true.
450 have_var(
idfrac(itrc))=.true.
453 have_var(
idbmas(itrc))=.true.
457 have_var(
idubld(itrc))=.true.
460 have_var(
idvbld(itrc))=.true.
466 have_var(
idsbed(itrc))=.true.
470# if defined SEDIMENT || defined BBL_MODEL
473 have_var(
idbott(itrc))=.true.
482 IF (.not.have_var(
idtime))
THEN
488#if defined SEDIMENT && defined SED_MORPH
502#ifdef ADJUST_BOUNDARY
503 IF ((model.eq.5).or.(model.eq.6))
THEN
579 IF ((model.eq.5).or.(model.eq.6))
THEN
620 IF (.not.have_var(
idtvar(itrc)).and. &
621 & get_var(
idtvar(itrc)))
THEN
629# ifdef ADJUST_BOUNDARY
630 IF ((model.eq.5).or.(model.eq.6))
THEN
636 WRITE (
stdout,10) string, &
647 IF ((model.eq.5).or.(model.eq.6))
THEN
649 IF (.not.have_var(
idtsur(itrc)).and. &
660# if defined GLS_MIXING || defined MY25_MIXING
696 IF (.not.have_var(
idfrac(itrc)).and. &
697 & get_var(
idfrac(itrc)))
THEN
704 IF (.not.have_var(
idbmas(itrc)).and. &
705 & get_var(
idbmas(itrc)))
THEN
713 IF (.not.have_var(
idubld(itrc)).and. &
714 & get_var(
idubld(itrc)))
THEN
721 IF (.not.have_var(
idvbld(itrc)).and. &
722 & get_var(
idvbld(itrc)))
THEN
732 IF (.not.have_var(
idsbed(itrc)).and. &
733 & get_var(
idsbed(itrc)))
THEN
742# if defined SEDIMENT || defined BBL_MODEL
748 IF (.not.have_var(
idbott(itrc)).and. &
749 & get_var(
idbott(itrc)))
THEN
760 10
FORMAT (/,a,
'CHECKVARS_NF90 - unable to find model variable: ',a, &
761 & /,23x,
'in file: ',a)
766#if defined PIO_LIB && defined DISTRIBUTE
770 & Nrec, Nvar,tvarnam, get_var, have_var)
777 logical,
dimension(Nvar),
intent(out) :: get_var
778 logical,
dimension(Nvar),
intent(out) :: have_var
780 integer,
intent(in) :: ng, model, Nvar
781 integer,
intent(inout) :: Nrec
783 character (len=*),
intent(in) :: ncname
784 character (len=*),
intent(in) :: string
786 character (len=*),
intent(inout) :: tvarnam
788 TYPE (file_desc_t),
intent(inout) :: pioFile
792 integer :: IDmod, i, itrc
794 character (len=*),
parameter :: MyFile = &
795 & __FILE__//
", checkvars_pio"
807 IF ((model.lt.1).or.(model.gt.4))
THEN
840 IF ((model.le.11).or.(model.eq.14).or.(model.eq.15))
THEN
842 IF (
nrrec(ng).ne.0)
THEN
850 get_var(
idtvar(itrc))=.true.
864 get_var(
idtvar(itrc))=.true.
870# if defined ANA_BIOLOGY
871 IF (
nrrec(ng).ne.0)
THEN
882# if defined T_PASSIVE
883# if defined ANA_PASSIVE
884 IF (
nrrec(ng).ne.0)
THEN
897 IF (
nrrec(ng).ne.0)
THEN
900 get_var(
idfrac(itrc))=.true.
901 get_var(
idbmas(itrc))=.true.
904 get_var(
idsbed(itrc))=.true.
910 get_var(
idfrac(itrc))=.true.
911 get_var(
idbmas(itrc))=.true.
914 get_var(
idsbed(itrc))=.true.
918 IF (
nrrec(ng).ne.0)
THEN
920 get_var(
idubld(itrc))=.true.
921 get_var(
idvbld(itrc))=.true.
926 IF (
nrrec(ng).ne.0)
THEN
931# if defined SEDIMENT || defined BBL_MODEL
934 get_var(
idbott(itrc))=.true.
939# ifdef PERFECT_RESTART
943 IF (((model.eq.0).or.(model.eq.
inlm)).and.(
nrrec(ng).ne.0))
THEN
951# if defined GLS_MIXING || defined MY25_MIXING
963# ifdef ADJUST_BOUNDARY
967 IF ((model.eq.
iadm).or.(model.eq.
itlm).or.(model.eq.
inlm).or. &
968 & (model.eq.
irpm).or.(model.eq.5).or.(model.eq.12).or. &
969 & (model.eq.16))
THEN
994# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
998 IF ((model.eq.
iadm).or.(model.eq.
itlm).or.(model.eq.
inlm).or. &
999 & (model.eq.
irpm).or.(model.eq.5).or.(model.eq.13).or. &
1000 & (model.eq.17))
THEN
1001# ifdef ADJUST_STFLUX
1004 get_var(
idtsur(itrc))=.true.
1008# ifdef ADJUST_WSTRESS
1019 IF (trim(var_name(i)).eq.trim(
vname(1,
idtime)))
THEN
1020 tvarnam=trim(var_name(i))
1022# if defined SEDIMENT && defined SED_MORPH
1023 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idbath)))
THEN
1026# ifdef ADJUST_BOUNDARY
1028 & (trim(var_name(i)).eq. &
1032 & (trim(var_name(i)).eq. &
1036 & (trim(var_name(i)).eq. &
1041 & (trim(var_name(i)).eq. &
1045 & (trim(var_name(i)).eq. &
1051 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idkver)))
THEN
1053 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
iduvel)))
THEN
1055 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idru3d)))
THEN
1057 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvvel)))
THEN
1059 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idrv3d)))
THEN
1061# if defined GLS_MIXING || defined MY25_MIXING || defined LMD_MIXING
1062 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvvis)))
THEN
1064 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idtdif)))
THEN
1066 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idsdif)))
THEN
1069 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idhsbl)))
THEN
1073 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idhbbl)))
THEN
1085# if defined GLS_MIXING || defined MY25_MIXING
1086 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idmtke)))
THEN
1088 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idmtls)))
THEN
1090 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvmls)))
THEN
1092 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvmkk)))
THEN
1095 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvmkp)))
THEN
1100# ifdef ADJUST_WSTRESS
1101 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idusms)))
THEN
1103 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvsms)))
THEN
1106 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idfsur)))
THEN
1108 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idrzet)))
THEN
1110 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idubar)))
THEN
1112 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idru2d)))
THEN
1114 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvbar)))
THEN
1116 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idrv2d)))
THEN
1118 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idkhor)))
THEN
1123 IF (trim(var_name(i)).eq.trim(
vname(1,
idtvar(itrc))))
THEN
1124 have_var(
idtvar(itrc))=.true.
1125# ifdef ADJUST_BOUNDARY
1127 & (trim(var_name(i)).eq. &
1131# ifdef ADJUST_STFLUX
1132 ELSE IF (trim(var_name(i)).eq. &
1134 have_var(
idtsur(itrc))=.true.
1140 IF (trim(var_name(i)).eq.trim(
vname(1,
idfrac(itrc))))
THEN
1141 have_var(
idfrac(itrc))=.true.
1142 ELSE IF (trim(var_name(i)).eq. &
1144 have_var(
idbmas(itrc))=.true.
1146 ELSE IF (trim(var_name(i)).eq. &
1148 have_var(
idubld(itrc))=.true.
1149 ELSE IF (trim(var_name(i)).eq. &
1151 have_var(
idvbld(itrc))=.true.
1156 IF (trim(var_name(i)).eq.trim(
vname(1,
idsbed(itrc))))
THEN
1157 have_var(
idsbed(itrc))=.true.
1161# if defined SEDIMENT || defined BBL_MODEL
1163 IF (trim(var_name(i)).eq.trim(
vname(1,
idbott(itrc))))
THEN
1164 have_var(
idbott(itrc))=.true.
1173 IF (.not.have_var(
idtime))
THEN
1179# if defined SEDIMENT && defined SED_MORPH
1193# ifdef ADJUST_BOUNDARY
1194 IF ((model.eq.5).or.(model.eq.6))
THEN
1269# ifdef ADJUST_WSTRESS
1270 IF ((model.eq.5).or.(model.eq.6))
THEN
1311 IF (.not.have_var(
idtvar(itrc)).and. &
1312 & get_var(
idtvar(itrc)))
THEN
1320# ifdef ADJUST_BOUNDARY
1321 IF ((model.eq.5).or.(model.eq.6))
THEN
1327 WRITE (
stdout,10) string, &
1337# ifdef ADJUST_STFLUX
1338 IF ((model.eq.5).or.(model.eq.6))
THEN
1340 IF (.not.have_var(
idtsur(itrc)).and. &
1351# if defined GLS_MIXING || defined MY25_MIXING
1387 IF (.not.have_var(
idfrac(itrc)).and. &
1388 & get_var(
idfrac(itrc)))
THEN
1395 IF (.not.have_var(
idbmas(itrc)).and. &
1396 & get_var(
idbmas(itrc)))
THEN
1404 IF (.not.have_var(
idubld(itrc)).and. &
1405 & get_var(
idubld(itrc)))
THEN
1412 IF (.not.have_var(
idvbld(itrc)).and. &
1413 & get_var(
idvbld(itrc)))
THEN
1423 IF (.not.have_var(
idsbed(itrc)).and. &
1424 & get_var(
idsbed(itrc)))
THEN
1433# if defined SEDIMENT || defined BBL_MODEL
1439 IF (.not.have_var(
idbott(itrc)).and. &
1440 & get_var(
idbott(itrc)))
THEN
1451 10
FORMAT (/,a,
'CHECKVARS_PIO - unable to find model variable: ',a, &
1452 & /,22x,
'in file: ',a)
subroutine checkvars_pio(ng, model, ncname, piofile, string, nrec, nvar, tvarnam, get_var, have_var)
subroutine checkvars_nf90(ng, model, ncname, ncid, string, nrec, nvar, tvarnam, get_var, have_var)
integer, dimension(:), allocatable idbio
integer, dimension(nices) isice
character(len=256) sourcefile
integer, dimension(:), allocatable idsbry
integer, dimension(:), allocatable idtsur
integer, dimension(:), allocatable idtvar
integer, dimension(:), allocatable istvar
integer, dimension(2) idghat
character(len=maxlen), dimension(6, 0:nv) vname
subroutine, public netcdf_check_dim(ng, model, ncname, ncid)
subroutine, public netcdf_check_var(ng, model, ncname, ncid)
character(len=100), dimension(mvars) var_name
integer, dimension(:), allocatable nt
subroutine, public pio_netcdf_check_var(ng, model, ncname, piofile)
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
integer, dimension(:), allocatable nrrec
logical, dimension(:,:,:), allocatable lobc
logical, dimension(:,:), allocatable lstflux
integer, dimension(:), pointer inert
integer, dimension(:), allocatable idubld
integer, dimension(mbedp) idsbed
integer, dimension(:), allocatable idsed
integer, dimension(:), allocatable idfrac
integer, dimension(mbotp) idbott
integer, dimension(:), allocatable idvbld
integer, dimension(:), allocatable idbmas
logical function, public founderror(flag, noerr, line, routine)