program trmmpr_v7 use netcdf implicit none character*200 :: hdffile, param, dimname integer :: i, j, istat, iray, iscan integer :: idate integer :: nscan(3) logical :: lexist real :: plwp, piwp integer*1, allocatable, dimension (:) :: imo, idy, ihr, imn, isc, dataquality integer*2, allocatable, dimension (:) :: iye real*8 , allocatable, dimension (:) :: granule_fraction integer*2, allocatable, dimension (:,:) :: raintype, rainflag real*4 , allocatable, dimension (:,:) :: lon, lat, scrange, ame, ame_err, ame_ns integer*1, allocatable, dimension (:,:,:) :: reliab integer*2, allocatable, dimension (:,:,:) :: rain, rangebin real*4 , allocatable, dimension (:,:,:) :: pwp ! integer :: ncid, dimsize, varid, inum ! call getarg(1, hdffile) ! inquire(file=hdffile, exist=lexist) if(.not. lexist) then print *, "" endif call nc_check( nf90_open(hdffile, nf90_nowrite, ncid) ) istat = nf90_inquire_dimension(ncid, 1, dimname, dimsize) if(istat < 0) then call nc_check( nf90_close(ncid) ) print *, "Empty file ???" call exit(1) endif do i = 1, 6 inum = i call nc_check( nf90_inquire_dimension(ncid, inum, dimname, dimsize) ) if(dimname == "nscan") exit enddo if(dimsize == 0) then call nc_check( nf90_close(ncid) ) print *, "nscan empty ???" call exit(1) endif nscan(3) = dimsize nscan(2) = 49 nscan(1) = 80 allocate( iye( nscan(3) ), imo( nscan(3) ), idy( nscan(3) ) ) allocate( ihr( nscan(3) ), imn( nscan(3) ), isc( nscan(3) ) ) allocate( dataquality( nscan(3) ) ) allocate( lon(nscan(2), nscan(3)) ) allocate( lat(nscan(2), nscan(3)) ) allocate( rainflag(nscan(2), nscan(3)) ) allocate( raintype(nscan(2), nscan(3)) ) allocate( granule_fraction ( nscan(3) ) ) allocate(ame(nscan(2), nscan(3)) ) allocate(ame_err(nscan(2), nscan(3)) ) allocate(ame_ns (nscan(2), nscan(3)) ) allocate(rangebin(7, nscan(2), nscan(3)) ) allocate(pwp(2, nscan(2), nscan(3)) ) !allocate(rain(80, nscan(2), nscan(3)) ) !allocate(reliab(80, nscan(2), nscan(3)) ) param = "Year" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, iye) ) param = "Month" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, imo) ) param = "DayOfMonth" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, idy) ) param = "Hour" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, ihr) ) param = "Minute" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, imn) ) param = "Second" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, isc) ) param = "dataQuality" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, dataquality) ) param = "FractionalGranuleNumber" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, granule_fraction) ) param = "Longitude" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, lon) ) param = "Latitude" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, lat) ) param = "e_SurfRain" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, ame) ) param = "nearSurfRain" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, ame_ns) ) param = "errorRain" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, ame_err) ) param = "rainFlag" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, rainflag) ) param = "rainType" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, raintype) ) param = "rangeBinNum" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, rangebin) ) !param = "rain" !call nc_check( nf90_inq_varid(ncid, param, varid) ) !call nc_check( nf90_get_var(ncid, varid, rain) ) !param = "reliab" !call nc_check( nf90_inq_varid(ncid, param, varid) ) !call nc_check( nf90_get_var(ncid, varid, reliab) ) param = "precipWaterSum" call nc_check( nf90_inq_varid(ncid, param, varid) ) call nc_check( nf90_get_var(ncid, varid, pwp) ) call nc_check( nf90_close(ncid) ) do iscan = 1, nscan(3) idate = iye(iscan)*10000 + imo(iscan)*100 + idy(iscan) if(dataquality(iscan) /= 0) cycle do iray = 1, nscan(2) if(rainflag(iray,iscan) == 0) cycle ! no-rain if(int(raintype(iray,iscan)/100) == 3) cycle ! others !if(count(pwp(:,iray,iscan) == 0.0) == 2) cycle plwp = pwp(1,iray,iscan) ! [kg/m2] piwp = pwp(2,iray,iscan) ! [kg/m2] print "(i5,i3, i9, i3,i3,i3, f7.3, 2f8.3, i4, 4f9.3)", & int2(iscan), int1(iray), idate, ihr(iscan), imn(iscan), isc(iscan), granule_fraction(iscan), lon(iray,iscan), lat(iray,iscan), raintype(iray, iscan), ame(iray,iscan), ame_err(iray,iscan), plwp, piwp enddo enddo deallocate(iye, imo, idy) deallocate(ihr, imn, isc) deallocate(granule_fraction) deallocate(dataquality) deallocate(lon, lat) deallocate(rainflag) deallocate(raintype) deallocate(ame, ame_err, ame_ns) !deallocate(rain) !deallocate(reliab) deallocate(rangebin) deallocate(pwp) end program trmmpr_v7 ! subroutine nc_check(status) use netcdf implicit none integer, intent ( in) :: status if(status /= nf90_noerr) then print *, trim(nf90_strerror(status)) stop end if end subroutine nc_check