program gpmdpr_hdf5data use netcdf implicit none ! ! Usage: ! Ku : ./(execfile) (Ku product) NS ! Ka : ./(execfile) (Ka product) (MS/HS) ! DPR : ./(execfile) (DPR product) (NS/MS/HS) character*200 :: filename, dsetname, groupname, dimname character :: productname*2 integer*1, allocatable, dimension (:) :: imo, idy, ihr, imn, isc integer*2, allocatable, dimension (:) :: iye, doy real*8 , allocatable, dimension (:) :: secondofday real*4 , allocatable, dimension (:,:) :: lon, lat, stormH, precipNS integer*4, allocatable, dimension (:,:) :: precipFlag ! integer, dimension (4) :: dimids ! integer :: nscan(3) integer :: i,j, istat integer :: ncid, varid, grpid, grp1id, grp2id, grp3id, grp7id integer :: dimid, dimsize, grpnum, dimnum, iparent call getarg(1,filename) call getarg(2,productname) if(iargc() /= 2) then call exit(1) endif istat = nf90_open(filename,nf90_nowrite,ncid) ! ! ! "NS" ! KuPR, DPR ! "MS" ! KaPR, DPR ! "HS" ! KaPR, DPR groupname = productname istat = nf90_inq_grp_ncid(ncid, groupname, grp1id) ! groupname = "ScanTime" istat = nf90_inq_grp_ncid(grp1id, groupname, grp2id) ! groupname = "PRE" istat = nf90_inq_grp_ncid(grp1id, groupname, grp3id) ! groupname = "SLV" istat = nf90_inq_grp_ncid(grp1id, groupname, grp7id) ! Find number of array ! grpid = grp1id istat = nf90_inq_dimids(grpid, dimnum , dimids, iparent ) do i = 1, 1 !dimnum istat = nf90_inquire_dimension(grpid, dimids(i), dimname, dimsize) nscan(i) = dimsize enddo ! ! Dimension number ! if(productname == "NS") then nscan(3) = 176 ; nscan(2) = 49 endif if(productname == "MS") then nscan(3) = 176 ; nscan(2) = 25 endif if(productname == "HS") then nscan(3) = 88 ; nscan(2) = 24 endif allocate( lat(nscan(2), nscan(1)) ) allocate( lon(nscan(2), nscan(1)) ) allocate( stormH(nscan(2), nscan(1)) ) allocate( precipFlag(nscan(2), nscan(1)) ) allocate( precipNS(nscan(2), nscan(1)) ) allocate( iye (nscan(1) ), imo(nscan(1)), idy(nscan(1)), secondofday(nscan(1)) ) ! ! Group /?? ! grpid = grp1id dsetname = "Latitude" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, lat) dsetname = "Longitude" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, lon) ! ! Group /??/ScanTime ! grpid = grp2id ! dsetname = "Year" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, iye) ! dsetname = "Month" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, imo) ! dsetname = "DayOfMonth" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, idy) ! dsetname = "SecondOfDay" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, secondofday) ! ! Group /??/PRE ! grpid = grp3id dsetname = "heightStormTop" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, stormH) ! dsetname = "flagPrecip" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, precipFlag) ! ! Group /??/SLV ! grpid = grp7id ! dsetname = "precipRateNearSurface" istat = nf90_inq_varid(grpid, dsetname, varid) istat = nf90_get_var(grpid, varid, precipNS) istat = nf90_close(ncid) ! do j = 1, nscan(1) do i = 1, nscan(2) if(precipFlag(i,j) == 0) cycle print "(i5,i3,i3,5f10.3,i5)", iye(j), imo(j), idy(j), secondofday(j)/3600., lon(i,j), lat(i,j), precipNS(i,j), stormH(i,j), precipFlag(i,j) enddo enddo deallocate( lon, lat, precipFlag, precipNS) deallocate( iye, imo, idy, secondofday) deallocate( stormH ) end program gpmdpr_hdf5data