subroutine griddims2d_byte_llf(ifile, idata)
type (nc2d_byte_llf) :: idata
integer(kind=intgr) :: ncid, varid, i
character(*), intent(in) :: ifile
!Open NetCDF File
call check(nf90_open(ifile, nf90_nowrite, ncid))
!Inquire variable type and number of dimensions
call checkvarid(nf90_inq_varid(ncid, idata%varname, varid), idata%varname)
call check(nf90_inquire_variable(ncid,varid,idata%varname, idata%vartype, idata%ndims, idata%dims))
allocate(idata%dimid(idata%ndims))
allocate(idata%varids(idata%ndims))
allocate(idata%dimunits(idata%ndims))
allocate(idata%dimname(idata%ndims))
allocate(idata%dimsize(idata%ndims))
idata%dimname(1) = idata%lonname
idata%dimname(2) = idata%latname
!Get number of
do i = 1, idata%ndims
call checkdimid(nf90_inq_dimid(ncid, idata%dimname(i), idata%dimid(i)), idata%dimname(i))
end do
call bubbleSort(idata%dimid, idata%dimname, idata%ndims)
!Get dimension sizes
do i = 1, idata%ndims
call check(nf90_inquire_dimension(ncid, idata%dimid(i), idata%dimname(i), idata%dimsize(i)))
end do
!Get
do i = 1, idata%ndims
call check(nf90_inq_varid(ncid, idata%dimname(i), idata%varids(i)))
call check(nf90_get_att(ncid, idata%varids(i), "units", idata%dimunits(i)), idata%dimunits(i), ifile)
end do
!Get some attributes
call check(nf90_get_att(ncid, varid, "long_name", idata%long_name), "long_name", ifile)
call check(nf90_get_att(ncid, varid, "_FillValue", idata%FillValue), "_FillValue", ifile)
call check(nf90_get_att(ncid, varid, "units", idata%varunits),"varunits", ifile)
do i = 1, idata%ndims
if(idata%dimname(i).eq."longitude".or.idata%dimname(i).eq."lon") then
idata%nlons = idata%dimsize(i)
idata%lonunits = idata%dimunits(i)
end if
if(idata%dimname(i).eq."latitude".or.idata%dimname(i).eq."lat") then
idata%nlats = idata%dimsize(i)
idata%latunits = idata%dimunits(i)
end if
end do
!Close NetCDF
call check(nf90_close(ncid))
end subroutine griddims2d_byte_llf