!######################################################################## !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE get_ncraddims ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !########################################################################SUBROUTINE get_ncraddims(fname,indir,iradtype,ngate,nazim,nvar, & 4 istatus) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Obtain dimension information from a NetCDF Radar file. ! Handles CASA Tier 2a and Tier 2b files. ! Reports the type of file via iradtype variable. ! !----------------------------------------------------------------------- ! ! AUTHOR: Keith Brewster ! 2007/02/27 ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! iradtype: 21 CASA Tier 2a Data ! 22 CASA Tier 2b Data (WDSS-II files) ! !----------------------------------------------------------------------- ! IMPLICIT NONE INCLUDE 'netcdf.inc' CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80) , INTENT(IN):: indir INTEGER, INTENT(OUT) :: iradtype INTEGER, INTENT(OUT) :: ngate INTEGER, INTENT(OUT) :: nazim INTEGER, INTENT(OUT) :: nvar INTEGER, INTENT(OUT) :: istatus ! !----------------------------------------------------------------------- ! ! Misc internal variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname CHARACTER(LEN=NF_MAX_NAME) :: varname INTEGER :: ncmode,ncid,gateid,azimid,k ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,a)') ' Reading file dimensions from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) IF( istatus /= NF_NOERR) THEN write(6,'(a,i6)') ' Error opening file, istatus= ',istatus RETURN END IF istatus=nf_inq_dimid(ncid,'Gate',gateid) IF( istatus /= NF_NOERR) THEN write(6,'(a,i6)') ' Error finding gate ID, istatus= ',istatus RETURN END IF istatus=nf_inq_dimlen(ncid,gateid,ngate) IF( istatus /= NF_NOERR) THEN write(6,'(a,i6)') ' Error finding number of gates, istatus= ',istatus RETURN END IF iradtype=0 istatus=nf_inq_dimid(ncid,'Radial',azimid) IF( istatus == NF_NOERR) THEN iradtype=21 write(6,'(a,i3)') ' File type is CASA Tier2a, iradtype=',iradtype istatus=nf_inq_dimlen(ncid,azimid,nazim) IF( istatus /= NF_NOERR) THEN write(6,'(a,i6)') & ' Error finding number of azimuths, istatus= ',istatus RETURN END IF ELSE istatus=nf_inq_dimid(ncid,'Azimuth',azimid) IF( istatus == NF_NOERR) THEN iradtype=22 write(6,'(a,i3)') ' File type is CASA Tier2b, iradtype=',iradtype istatus=nf_inq_dimlen(ncid,azimid,nazim) IF( istatus /= NF_NOERR) THEN write(6,'(a,i6)') & ' Error finding number of azimuths, istatus= ',istatus RETURN END IF ELSE write(6,'(a,i6)') ' Error finding azimuth ID, istatus= ',istatus RETURN END IF END IF WRITE(6,'(a,i6,a,i6)') ' ngate= ',ngate,' nazim= ',nazim nvar=0 DO k=1,NF_MAX_VARS istatus=nf_inq_varname(ncid,k,varname) IF( istatus /= NF_NOERR) EXIT nvar=nvar+1 END DO WRITE(6,'(a,i6)') ' nvar= ',nvar istatus=NF_CLOSE(ncid) RETURN END SUBROUTINE get_ncraddims ! !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE get_ncrad2ainfo ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !########################################################################
SUBROUTINE get_ncrad2ainfo(fname,indir,nazim,nvar,tem_double, & 2 radarname,radlat,radlon,radelv, & itimcdf,frtime,elv,ncvarname,istatus) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Obtain information about a CASA Tier 2a NetCDF radar file, ! !----------------------------------------------------------------------- ! ! AUTHOR: Keith Brewster ! 2007/02/27 ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'netcdf.inc' CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80), INTENT(IN) :: indir INTEGER, INTENT(IN) :: nazim INTEGER, INTENT(IN) :: nvar REAL(KIND=8), INTENT(OUT) :: tem_double(nazim) CHARACTER(LEN=32), INTENT(OUT) :: radarname REAL, INTENT(OUT) :: radlat REAL, INTENT(OUT) :: radlon REAL, INTENT(OUT) :: radelv INTEGER, INTENT(OUT) :: itimcdf REAL, INTENT(OUT) :: frtime REAL, INTENT(OUT) :: elv CHARACTER(LEN=NF_MAX_NAME) :: ncvarname(nvar) INTEGER, INTENT(OUT) :: istatus ! !----------------------------------------------------------------------- ! ! Misc Internal Variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname INTEGER :: ncmode,ncid,timeid,elevid,iazim,k REAL :: elvsum,elvknt ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,a)') ' Reading file information from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) IF( istatus /= NF_NOERR) THEN write(6,'(a,i6)') ' Error opening file, istatus= ',istatus RETURN END IF radarname=' ' istatus=nf_get_att_text(ncid,nf_global,'RadarName',radarname) WRITE(6,'(a,a)') ' RadarName=',TRIM(radarname) istatus=nf_get_att_real(ncid,nf_global,'Latitude',radlat) istatus=nf_get_att_real(ncid,nf_global,'Longitude',radlon) istatus=nf_get_att_real(ncid,nf_global,'Height',radelv) WRITE(6,'(a,f10.4,a,f10.4,a,f8.1)') & ' Lat=',radlat,' Lon=',radlon,' Height=',radelv istatus=nf_inq_varid(ncid,'Time',timeid) istatus=nf_get_var1_int(ncid,timeid,1,itimcdf) frtime=0.0 WRITE(6,'(a,i16,a,f10.2)') & ' Time=',itimcdf,' FrTime=',frtime ! istatus=nf_inq_varid(ncid,'Elevation',elevid) istatus=nf_get_var_double(ncid,elevid,tem_double) elv=0. elvsum=0. elvknt=0. DO iazim=1,nazim IF(tem_double(iazim) > -5.0 .AND. tem_double(iazim) < 90.1) THEN elvsum=elvsum+tem_double(iazim) elvknt=elvknt+1.0 END IF END DO IF(elvknt > 0.0) THEN elv=elvsum/elvknt END IF ! DO k=1,nvar istatus=nf_inq_varname(ncid,k,ncvarname(k)) IF( istatus /= NF_NOERR) EXIT END DO istatus=NF_CLOSE(ncid) RETURN END SUBROUTINE get_ncrad2ainfo ! !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE get_ncrad2binfo ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !########################################################################
SUBROUTINE get_ncrad2binfo(fname,indir,nazim,nvar, & 3 radarname,radlat,radlon,radelv, & itimcdf,frtime,ivcp,elv,ncvarname,istatus) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Obtain information about a CASA Tier 2b NetCDF radar file, ! !----------------------------------------------------------------------- ! ! AUTHOR: Keith Brewster ! 2007/02/26 ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'netcdf.inc' CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80), INTENT(IN) :: indir INTEGER, INTENT(IN) :: nazim INTEGER, INTENT(IN) :: nvar CHARACTER(LEN=32), INTENT(OUT) :: radarname REAL, INTENT(OUT) :: radlat REAL, INTENT(OUT) :: radlon REAL, INTENT(OUT) :: radelv INTEGER, INTENT(OUT) :: itimcdf REAL, INTENT(OUT) :: frtime INTEGER, INTENT(OUT) :: ivcp REAL, INTENT(OUT) :: elv CHARACTER(LEN=NF_MAX_NAME) :: ncvarname(nvar) INTEGER, INTENT(OUT) :: istatus ! !----------------------------------------------------------------------- ! ! Misc Internal Variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname CHARACTER (LEN=6) :: vcpstr INTEGER :: ncmode,ncid,timeid,elevid,k itimcdf=0 frtime=0. ivcp=0 elv=0. vcpstr=' ' ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,a)') ' Reading file information from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) IF( istatus /= NF_NOERR) THEN write(6,'(a,i6)') ' Error opening file, istatus= ',istatus RETURN END IF radarname=' ' istatus=nf_get_att_text(ncid,nf_global,'radarName-value',radarname) WRITE(6,'(a,a)') ' RadarName=',TRIM(radarname) istatus=nf_get_att_real(ncid,nf_global,'Latitude',radlat) istatus=nf_get_att_real(ncid,nf_global,'Longitude',radlon) istatus=nf_get_att_real(ncid,nf_global,'Height',radelv) WRITE(6,'(a,f10.4,a,f10.4,a,f8.1)') & ' Lat=',radlat,' Lon=',radlon,' Height=',radelv istatus=nf_get_att_int(ncid,nf_global,'Time',itimcdf) istatus=nf_get_att_real(ncid,nf_global,'FractionalTime',frtime) WRITE(6,'(a,i16,a,f10.2)') & ' Time=',itimcdf,' FrTime=',frtime istatus=nf_get_att_text(ncid,nf_global,'vcp-value',vcpstr) print *, ' read vcpstr as: ',vcpstr IF(istatus == NF_NOERR) read(vcpstr,*) ivcp istatus=nf_get_att_real(ncid,nf_global,'Elevation',elv) ! DO k=1,nvar istatus=nf_inq_varname(ncid,k,ncvarname(k)) IF( istatus /= NF_NOERR) EXIT END DO istatus=NF_CLOSE(ncid) RETURN END SUBROUTINE get_ncrad2binfo ! !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE rdrftiltcdf ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !######################################################################## !
SUBROUTINE rdrftiltcdf(nazim,ngate,fname,indir, & 3 rmisval,rngfval,itimcdf,frtime,initime,rfirstg, & azim,beamw,gtspc,refl) ! !------------------------------------------------------------------------ ! ! PURPOSE: ! ! Reads radar reflectivity data from CASA Tier 2b NetCDF data files ! !------------------------------------------------------------------------ ! ! AUTHOR: ! ! Keith Brewster (May 2005) ! ! MODIFICATIONS: ! 24 Mar 2007 (Keith Brewster) ! Added default value of beamw=1.0 if beamw is missing. ! !------------------------------------------------------------------------ IMPLICIT NONE !------------------------------------------------------------------------ ! ! Variable Declarations. ! !------------------------------------------------------------------------ INTEGER, INTENT(IN) :: nazim INTEGER, INTENT(IN) :: ngate CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80), INTENT(IN) :: indir REAL, INTENT(OUT) :: rmisval REAL, INTENT(OUT) :: rngfval INTEGER, INTENT(OUT) :: itimcdf REAL, INTENT(OUT) :: frtime INTEGER, INTENT(OUT) :: initime REAL, INTENT(OUT) :: rfirstg ! REAL, INTENT(OUT) :: azim(nazim) REAL, INTENT(OUT) :: beamw(nazim) REAL, INTENT(OUT) :: gtspc(nazim) REAL, INTENT(OUT) :: refl(ngate,nazim) ! !----------------------------------------------------------------------- ! ! netCDF variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname INTEGER :: istatus,ncid,ncmode INTEGER :: ipktyp,nbits ! !----------------------------------------------------------------------- ! ! Variable indexes and descriptors ! !----------------------------------------------------------------------- ! INTEGER :: nazimid,ngateid INTEGER :: azmid,bmwid,elvid,gtwid,refid ! !----------------------------------------------------------------------- ! ! Misc local variables ! !----------------------------------------------------------------------- ! INTEGER :: lrname,ifsecs ! INCLUDE 'globcst.inc' INCLUDE 'netcdf.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! itimcdf=-99 frtime=-999. rfirstg=-999. rmisval=-999. rngfval=-999. ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,a)') ' Reading reflectivity data from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) ! !----------------------------------------------------------------------- ! ! Read Global Attributes ! !----------------------------------------------------------------------- ! istatus=nf_get_att_int(ncid,nf_global,'Time',itimcdf) istatus=nf_get_att_real(ncid,nf_global,'FractionalTime',frtime) print *, ' Time=',itimcdf,' FrTime=',frtime istatus=nf_get_att_real(ncid,nf_global,'RangeToFirstGate',rfirstg) istatus=nf_get_att_real(ncid,nf_global,'MissingData',rmisval) istatus=nf_get_att_real(ncid,nf_global,'RangeFolded',rngfval) print *, ' Rng-1stgate=',rfirstg print *, ' MissingData=',rmisval,' RangeFolded=',rngfval initime=itimcdf istatus=nf_get_att_real(ncid,nf_global,'InitialTime',initime) ! !----------------------------------------------------------------------- ! ! Read data variables ! !----------------------------------------------------------------------- ! istatus=nf_inq_varid(ncid,'Azimuth',azmid) istatus=nf_get_var_real(ncid,azmid,azim) istatus=nf_inq_varid(ncid,'BeamWidth',bmwid) IF(istatus == NF_NOERR) THEN istatus=nf_get_var_real(ncid,bmwid,beamw) ELSE beamw=1.0 END IF istatus=nf_inq_varid(ncid,'GateWidth',gtwid) istatus=nf_get_var_real(ncid,gtwid,gtspc) istatus=nf_inq_varid(ncid,'Reflectivity',refid) istatus=nf_get_var_real(ncid,refid,refl) ! !----------------------------------------------------------------------- ! ! Close data file. ! !----------------------------------------------------------------------- ! istatus=nf_close(ncid) END SUBROUTINE rdrftiltcdf !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE rdvrtiltcdf ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !######################################################################## !
SUBROUTINE rdvrtiltcdf(nazim,ngate,fname,indir, & 3 rmisval,rngfval,itimcdf,frtime,initime, & vnyquist,rfirstg, & azim,beamw,gtspc,vnyq,radv) ! !------------------------------------------------------------------------ ! ! PURPOSE: ! ! Reads radar radial velocity data from CASA Tier 2b NetCDF data files ! !------------------------------------------------------------------------ ! ! AUTHOR: ! ! Keith Brewster (May 2005) ! ! MODIFICATIONS: ! ! 24 Mar 2007 (Keith Brewster) ! Added check for variable name AliasedVelocity in addition to RawVelocity ! Added default value of beamw=1.0 if beamw is missing. ! !------------------------------------------------------------------------ ! IMPLICIT NONE ! !------------------------------------------------------------------------ ! ! Variable Declarations. ! !------------------------------------------------------------------------ ! INTEGER, INTENT(IN) :: nazim INTEGER, INTENT(IN) :: ngate CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80), INTENT(IN) :: indir REAL, INTENT(OUT) :: rmisval REAL, INTENT(OUT) :: rngfval INTEGER, INTENT(OUT) :: itimcdf REAL, INTENT(OUT) :: frtime INTEGER, INTENT(OUT) :: initime REAL, INTENT(OUT) :: vnyquist REAL, INTENT(OUT) :: rfirstg ! REAL, INTENT(OUT) :: azim(nazim) REAL, INTENT(OUT) :: beamw(nazim) REAL, INTENT(OUT) :: gtspc(nazim) REAL, INTENT(OUT) :: vnyq(nazim) REAL, INTENT(OUT) :: radv(ngate,nazim) ! !----------------------------------------------------------------------- ! ! netCDF variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname INTEGER :: istatus,iostatus,ncid,ncmode INTEGER :: ipktyp,nbits ! !----------------------------------------------------------------------- ! ! Variable indexes and descriptors ! !----------------------------------------------------------------------- ! INTEGER :: nazimid,ngateid INTEGER :: azmid,bmwid,elvid,gtwid,nyqid,velid ! !----------------------------------------------------------------------- ! ! Misc local variables ! !----------------------------------------------------------------------- ! INCLUDE 'globcst.inc' INCLUDE 'netcdf.inc' INTEGER :: lrname,ifsecs CHARACTER(LEN=NF_MAX_NAME) vnyqtext REAL, PARAMETER :: vnyq_default = 31.9 ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! itimcdf=-99 frtime=-999. vnyquist=-99. rfirstg=-999. rmisval=-999. rngfval=-999. initime=-99 curtim=-999. vnyqtext=' ' ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,a)') ' Reading velocity data from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) ! !----------------------------------------------------------------------- ! ! Read Global Attributes ! !----------------------------------------------------------------------- ! istatus=nf_get_att_int(ncid,nf_global,'Time',itimcdf) istatus=nf_get_att_real(ncid,nf_global,'FractionalTime',frtime) istatus=nf_get_att_text(ncid,nf_global,'Nyquist_Vel-value',vnyqtext) READ(vnyqtext,*,iostat=iostatus) vnyquist IF(iostatus /= 0) vnyquist=vnyq_default istatus=nf_get_att_real(ncid,nf_global,'RangeToFirstGate',rfirstg) istatus=nf_get_att_real(ncid,nf_global,'MissingData',rmisval) istatus=nf_get_att_real(ncid,nf_global,'RangeFolded',rngfval) istatus=nf_get_att_text(ncid,nf_global,'Runname',runname) initime=itimcdf istatus=nf_get_att_int(ncid,nf_global,'InitialTime',initime) curtim=0. istatus=nf_get_att_real(ncid,nf_global,'ForecastSeconds',curtim) print *, ' Done reading global variables ' ! !----------------------------------------------------------------------- ! ! Read data variables ! !----------------------------------------------------------------------- ! istatus=nf_inq_varid(ncid,'Azimuth',azmid) istatus=nf_get_var_real(ncid,azmid,azim) istatus=nf_inq_varid(ncid,'BeamWidth',bmwid) IF(istatus == NF_NOERR) THEN istatus=nf_get_var_real(ncid,bmwid,beamw) ELSE beamw=1.0 END IF istatus=nf_inq_varid(ncid,'GateWidth',gtwid) istatus=nf_get_var_real(ncid,gtwid,gtspc) istatus=nf_inq_varid(ncid,'NyquistVelocity',nyqid) istatus=nf_get_var_real(ncid,nyqid,vnyq) istatus=nf_inq_varid(ncid,'RawVelocity',velid) IF(istatus == NF_NOERR) THEN istatus=nf_get_var_real(ncid,velid,radv) ELSE istatus=nf_inq_varid(ncid,'AliasedVelocity',velid) istatus=nf_get_var_real(ncid,velid,radv) END IF ! !----------------------------------------------------------------------- ! ! Close data file. ! !----------------------------------------------------------------------- ! istatus=nf_close(ncid) END SUBROUTINE rdvrtiltcdf ! !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE rdvvtiltcdf ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !########################################################################
SUBROUTINE rdvvtiltcdf(nazim,ngate,fname,indir, & 1 rmisval,rngfval,itimcdf,frtime,initime,rfirstg, & azim,beamw,gtspc,vort) ! !------------------------------------------------------------------------ ! ! PURPOSE: ! ! Reads vertical vorticity data from NetCDF data files ! Interpolated vertical vorticity is a special dataset generated by the ! radar emulator to use for verification of radar algortihms. ! !------------------------------------------------------------------------ ! ! AUTHOR: ! ! Keith Brewster (May 2005) ! ! MODIFICATIONS: ! 24 Mar 2007 (Keith Brewster) ! Added default value of beamw=1.0 if beamw is missing. ! !------------------------------------------------------------------------ IMPLICIT NONE !------------------------------------------------------------------------ ! ! Variable Declarations. ! !------------------------------------------------------------------------ ! INTEGER, INTENT(IN) :: nazim INTEGER, INTENT(IN) :: ngate CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80), INTENT(IN) :: indir REAL, INTENT(OUT) :: rmisval REAL, INTENT(OUT) :: rngfval INTEGER, INTENT(OUT) :: itimcdf REAL, INTENT(OUT) :: frtime INTEGER, INTENT(OUT) :: initime REAL, INTENT(OUT) :: rfirstg ! REAL, INTENT(OUT) :: azim(nazim) REAL, INTENT(OUT) :: beamw(nazim) REAL, INTENT(OUT) :: gtspc(nazim) REAL, INTENT(OUT) :: vort(ngate,nazim) ! !----------------------------------------------------------------------- ! ! netCDF variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname INTEGER :: istatus,ncid,ncmode INTEGER :: ipktyp,nbits ! !----------------------------------------------------------------------- ! ! Variable indexes and descriptors ! !----------------------------------------------------------------------- ! INTEGER :: azmid,bmwid,elvid,gtwid,vorid ! !----------------------------------------------------------------------- ! ! Misc local variables ! !----------------------------------------------------------------------- ! INTEGER :: lrname,ifsecs ! INCLUDE 'globcst.inc' INCLUDE 'netcdf.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! itimcdf=-99 frtime=-999. rfirstg=-999. rmisval=-999. rngfval=-999. ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,a)') ' Reading vorticity data from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) ! !----------------------------------------------------------------------- ! ! Read Global Attributes ! !----------------------------------------------------------------------- ! istatus=nf_get_att_int(ncid,nf_global,'Time',itimcdf) istatus=nf_get_att_real(ncid,nf_global,'FractionalTime',frtime) istatus=nf_get_att_real(ncid,nf_global,'RangeToFirstGate',rfirstg) istatus=nf_get_att_real(ncid,nf_global,'MissingData',rmisval) istatus=nf_get_att_real(ncid,nf_global,'RangeFolded',rngfval) istatus=nf_get_att_text(ncid,nf_global,'Runname',runname) initime=itimcdf istatus=nf_get_att_int(ncid,nf_global,'InitialTime',initime) curtim=0. istatus=nf_get_att_real(ncid,nf_global,'ForecastSeconds',curtim) ! !----------------------------------------------------------------------- ! ! Read data variables ! !----------------------------------------------------------------------- ! istatus=nf_inq_varid(ncid,'Azimuth',azmid) istatus=nf_get_var_real(ncid,azmid,azim) istatus=nf_inq_varid(ncid,'BeamWidth',bmwid) IF(istatus == NF_NOERR) THEN istatus=nf_get_var_real(ncid,bmwid,beamw) ELSE beamw=1.0 END IF istatus=nf_inq_varid(ncid,'GateWidth',gtwid) istatus=nf_get_var_real(ncid,gtwid,gtspc) istatus=nf_inq_varid(ncid,'VerticalVorticity',vorid) istatus=nf_get_var_real(ncid,vorid,vort) ! !----------------------------------------------------------------------- ! ! Close data file. ! !----------------------------------------------------------------------- ! istatus=nf_close(ncid) END SUBROUTINE rdvvtiltcdf ! !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE rdrhotiltcdf ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !######################################################################## !
SUBROUTINE rdrhotiltcdf(nazim,ngate,fname,indir, & 1 rmisval,rngfval,itimcdf,frtime,initime, & rfirstg,azim,rhohv) ! !------------------------------------------------------------------------ ! ! PURPOSE: ! ! Reads radar dual-pol Rho-HV data from CASA Level-2b NetCDF data files ! !------------------------------------------------------------------------ ! ! AUTHOR: ! ! Keith Brewster (Nov 2006) ! ! MODIFICATIONS: ! !------------------------------------------------------------------------ IMPLICIT NONE !------------------------------------------------------------------------ ! ! Variable Declarations. ! !------------------------------------------------------------------------ INTEGER, INTENT(IN) :: nazim INTEGER, INTENT(IN) :: ngate CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80), INTENT(IN) :: indir REAL, INTENT(OUT) :: rmisval REAL, INTENT(OUT) :: rngfval INTEGER, INTENT(OUT) :: itimcdf REAL, INTENT(OUT) :: frtime INTEGER, INTENT(OUT) :: initime REAL, INTENT(OUT) :: rfirstg ! REAL, INTENT(OUT) :: azim(nazim) REAL, INTENT(OUT) :: rhohv(ngate,nazim) ! !----------------------------------------------------------------------- ! ! netCDF variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname INTEGER :: istatus,ncid,ncmode INTEGER :: ipktyp,nbits ! !----------------------------------------------------------------------- ! ! Variable indexes and descriptors ! !----------------------------------------------------------------------- ! INTEGER :: azmid,elvid,rhoid ! !----------------------------------------------------------------------- ! ! Misc local variables ! !----------------------------------------------------------------------- ! INTEGER :: lrname,ifsecs ! INCLUDE 'globcst.inc' INCLUDE 'netcdf.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! itimcdf=-99 frtime=-999. rfirstg=-999. rmisval=-999. rngfval=-999. ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,/a)') ' Reading Rho-HV data from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) ! !----------------------------------------------------------------------- ! ! Read Global Attributes ! !----------------------------------------------------------------------- ! istatus=nf_get_att_int(ncid,nf_global,'Time',itimcdf) istatus=nf_get_att_real(ncid,nf_global,'FractionalTime',frtime) print *, ' Time=',itimcdf,' FrTime=',frtime istatus=nf_get_att_real(ncid,nf_global,'RangeToFirstGate',rfirstg) istatus=nf_get_att_real(ncid,nf_global,'MissingData',rmisval) istatus=nf_get_att_real(ncid,nf_global,'RangeFolded',rngfval) print *, ' r-1stgate=',rfirstg print *, ' MissingData=',rmisval,' RangeFolded=',rngfval initime=itimcdf istatus=nf_get_att_real(ncid,nf_global,'InitialTime',initime) ! !----------------------------------------------------------------------- ! ! Read data variables ! !----------------------------------------------------------------------- ! istatus=nf_inq_varid(ncid,'Azimuth',azmid) print *, ' azmid=',azmid istatus=nf_get_var_real(ncid,azmid,azim) istatus=nf_inq_varid(ncid,'RhoHV',rhoid) print *, ' rhoid',rhoid istatus=nf_get_var_real(ncid,rhoid,rhohv) ! !----------------------------------------------------------------------- ! ! Close data file. ! !----------------------------------------------------------------------- ! istatus=nf_close(ncid) END SUBROUTINE rdrhotiltcdf ! !######################################################################## !######################################################################## !######### ######### !######### SUBROUTINE rd2atiltcdf ######### !######### ######### !######### Developed by ######### !######### Center for Analysis and Prediction of Storms ######### !######### University of Oklahoma ######### !######### ######### !######################################################################## !######################################################################## !
SUBROUTINE rd2atiltcdf(nazim,ngate,fname,indir, & 1 rmisval,rngfval,itimcdf,frtime,initime, & vnyquist,rfirstg,istrgate, & azim,beamw,gtspc,attref,refl,radv,rhohv, & tem_double) ! !------------------------------------------------------------------------ ! ! PURPOSE: ! ! Reads radar data from CASA Level-2a NetCDF data files ! !------------------------------------------------------------------------ ! ! AUTHOR: ! ! Keith Brewster, CAPS (Feb 2007) ! ! MODIFICATIONS: ! !------------------------------------------------------------------------ IMPLICIT NONE !------------------------------------------------------------------------ ! ! Variable Declarations. ! !------------------------------------------------------------------------ INTEGER, INTENT(IN) :: nazim INTEGER, INTENT(IN) :: ngate CHARACTER (LEN=256), INTENT(IN) :: fname CHARACTER (LEN=80), INTENT(IN) :: indir REAL, INTENT(OUT) :: rmisval REAL, INTENT(OUT) :: rngfval INTEGER, INTENT(OUT) :: itimcdf REAL, INTENT(OUT) :: frtime INTEGER, INTENT(OUT) :: initime REAL, INTENT(OUT) :: vnyquist REAL, INTENT(OUT) :: rfirstg INTEGER, INTENT(OUT) :: istrgate(nazim) ! REAL, INTENT(OUT) :: azim(nazim) REAL, INTENT(OUT) :: beamw(nazim) REAL, INTENT(OUT) :: gtspc(nazim) REAL, INTENT(OUT) :: attref(ngate,nazim) REAL, INTENT(OUT) :: refl(ngate,nazim) REAL, INTENT(OUT) :: radv(ngate,nazim) REAL, INTENT(OUT) :: rhohv(ngate,nazim) REAL(KIND=8), INTENT(OUT) :: tem_double(nazim) ! !----------------------------------------------------------------------- ! ! netCDF variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=256) :: cdfname INTEGER :: istatus,ncid,ncmode INTEGER :: ipktyp,nbits ! !----------------------------------------------------------------------- ! ! Variable indexes and descriptors ! !----------------------------------------------------------------------- ! INTEGER :: timeid,istrid,strid INTEGER :: azmid,gtwid,arfid,refid,velid,rhoid ! !----------------------------------------------------------------------- ! ! Misc local variables ! !----------------------------------------------------------------------- ! REAL, PARAMETER :: mm2m = 0.001 REAL, PARAMETER :: vnyq_default = 31.9 REAL :: elvsum,rfrsum,bmwidth,strange INTEGER :: lrname,ifsecs INTEGER :: jazim,kntelv,kntrfr ! INCLUDE 'globcst.inc' INCLUDE 'netcdf.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! itimcdf=-99 frtime=-999. vnyquist=-99. rfirstg=0. istrgate=1 rmisval=-999. rngfval=-999. ! !----------------------------------------------------------------------- ! ! Open netcdf file ! !----------------------------------------------------------------------- ! write(cdfname,'(a,a,a)') TRIM(indir),'/',TRIM(fname) write(6,'(a,/a)') ' Reading Tier 2a ref, vel, rhohv data from: ',TRIM(cdfname) ncmode=nf_share istatus=nf_open(cdfname,ncmode,ncid) ! !----------------------------------------------------------------------- ! ! Read Global Attributes ! !----------------------------------------------------------------------- ! istatus=nf_inq_varid(ncid,'Time',timeid) istatus=nf_get_var1_int(ncid,timeid,1,itimcdf) frtime=0. WRITE(6,'(a,i16,a,f10.2)') ' Time=',itimcdf,' FrTime=',frtime vnyquist=vnyq_default istatus=nf_get_att_real(ncid,nf_global,'NyquistVelocity',vnyquist) print *, ' Nyquist=',vnyquist istatus=nf_get_att_real(ncid,nf_global,'AntennaBeamwidth',bmwidth) print *, ' Beamwidth=',bmwidth DO jazim=1,nazim beamw(jazim)=bmwidth END DO istatus=nf_inq_varid(ncid,'StartGate',istrid) print *, ' istrid=',istrid istatus=nf_get_var_int(ncid,istrid,istrgate) istatus=nf_inq_varid(ncid,'StartRange',strid) print *, ' strid=',strid istatus=nf_get_var_double(ncid,strid,tem_double) rfrsum=0. kntrfr=0 DO jazim=1,nazim strange=abs(mm2m*tem_double(jazim)) IF(strange < 10000.0) THEN rfrsum=rfrsum+strange kntrfr=kntrfr+1 END IF END DO rfirstg=0. IF(kntrfr > 0) THEN rfirstg=rfrsum/float(kntrfr) END IF print *, ' r-1stgate=',rfirstg rmisval=99900. rngfval=99901. istatus=nf_get_att_real(ncid,nf_global,'MissingData',rmisval) istatus=nf_get_att_real(ncid,nf_global,'RangeFolded',rngfval) print *, ' MissingData=',rmisval,' RangeFolded=',rngfval istatus=nf_get_att_real(ncid,nf_global,'InitialTime',initime) initime=itimcdf ! !----------------------------------------------------------------------- ! ! Read data variables ! !----------------------------------------------------------------------- ! istatus=nf_inq_varid(ncid,'Azimuth',azmid) print *, ' azmid=',azmid istatus=nf_get_var_double(ncid,azmid,tem_double) azim=-999. DO jazim=1,nazim azim(jazim)=tem_double(jazim) END DO istatus=nf_inq_varid(ncid,'GateWidth',gtwid) print *, ' gtwid=',gtwid istatus=nf_get_var_double(ncid,gtwid,tem_double) DO jazim=1,nazim gtspc(jazim)=mm2m*tem_double(jazim) END DO istatus=nf_inq_varid(ncid,'Reflectivity',arfid) print *, ' arfid',arfid istatus=nf_get_var_real(ncid,arfid,attref) istatus=nf_inq_varid(ncid,'CorrectedReflectivity',refid) print *, ' refid',refid istatus=nf_get_var_real(ncid,refid,refl) istatus=nf_inq_varid(ncid,'Velocity',velid) print *, ' velid',velid istatus=nf_get_var_real(ncid,velid,radv) istatus=nf_inq_varid(ncid,'CrossPolCorrelation',rhoid) print *, ' rhoid',rhoid istatus=nf_get_var_real(ncid,rhoid,rhohv) ! !----------------------------------------------------------------------- ! ! Close data file. ! !----------------------------------------------------------------------- ! istatus=nf_close(ncid) END SUBROUTINE rd2atiltcdf