PROGRAM fakerad,18 ! !################################################################## !################################################################## !###### ###### !###### PROGRAM FAKERAD ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Generate fake radar data from an ARPS history file. ! ! It shares with the model the include file 'globcst.inc' ! for storage parameters. ! ! It reads in a history file produced by ARPS 4.0 in a user ! specified format. ! ! Parameters grdin,basin,mstin,icein,trbin are read in from the ! data file itself, therefore are determined internally. ! Arrays that are not read in retain their initial zero values. ! These parameters are passed among subroutines through ! a common block defined in 'indtflg.inc'. ! !----------------------------------------------------------------------- ! ! AUTHOR: Keith Brewster, CAPS, December, 1995 ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! DATA ARRAYS READ IN: ! ! x x coordinate of grid points in physical/comp. space (m) ! y y coordinate of grid points in physical/comp. space (m) ! z z coordinate of grid points in computational space (km) ! zp z coordinate of grid points in computational space (m) ! zpsoil z coordinate of soil levels (m) ! uprt x component of perturbation velocity (m/s) ! vprt y component of perturbation velocity (m/s) ! wprt Vertical component of perturbation velocity in Cartesian ! coordinates (m/s). ! ! ptprt Perturbation potential temperature (K) ! pprt Perturbation pressure (Pascal) ! ! qvprt Perturbation water vapor mixing ratio (kg/kg) ! qc Cloud water mixing ratio (kg/kg) ! qr Rainwater mixing ratio (kg/kg) ! qi Cloud ice mixing ratio (kg/kg) ! qs Snow mixing ratio (kg/kg) ! qh Hail mixing ratio (kg/kg) ! ! ubar Base state x velocity component (m/s) ! vbar Base state y velocity component (m/s) ! wbar Base state z velocity component (m/s) ! ptbar Base state potential temperature (K) ! pbar Base state pressure (Pascal) ! rhobar Base state air density (kg/m**3) ! qvbar Base state water vapor mixing ratio (kg/kg) ! ! CALCULATED DATA ARRAYS: ! ! u x component of velocity (m/s) ! v y component of velocity (m/s) ! w z component of velocity (m/s) ! ! WORK ARRAYS: ! ! tem1 Temporary work array. ! tem2 Temporary work array. ! ! !----------------------------------------------------------------------- ! ! Variable Declarations: ! !----------------------------------------------------------------------- ! IMPLICIT NONE ! !----------------------------------------------------------------------- ! ! Include files: ! !----------------------------------------------------------------------- ! INCLUDE 'globcst.inc' INCLUDE 'grid.inc' INCLUDE 'indtflg.inc' ! !----------------------------------------------------------------------- ! ! Arrays to be read in: ! !----------------------------------------------------------------------- ! REAL, ALLOCATABLE :: x (:) ! The x-coord. of the physical and ! computational grid. Defined at u-point. REAL, ALLOCATABLE :: y (:) ! The y-coord. of the physical and ! computational grid. Defined at v-point. REAL, ALLOCATABLE :: z (:) ! The z-coord. of the computational grid. ! Defined at w-point on the staggered grid. REAL, ALLOCATABLE :: zp (:,:,:) ! The physical height coordinate defined at ! w-point of the staggered grid. REAL, ALLOCATABLE :: zpsoil(:,:,:) ! Soil level depth. REAL, ALLOCATABLE :: j1 (:,:,:) ! Coordinate transformation Jacobian defined ! as - d( zp )/d( x ) REAL, ALLOCATABLE :: j2 (:,:,:) ! Coordinate transformation Jacobian defined ! as - d( zp )/d( y ) REAL, ALLOCATABLE :: j3 (:,:,:) ! Coordinate transformation Jacobian defined ! as d( zp )/d( z ) REAL, ALLOCATABLE :: j3soil(:,:,:) ! Coordinate transformation Jacobian defined ! as d( zp )/d( z ) REAL, ALLOCATABLE :: u (:,:,:) ! Total u-velocity (m/s) REAL, ALLOCATABLE :: v (:,:,:) ! Total v-velocity (m/s) REAL, ALLOCATABLE :: w (:,:,:) ! Total w-velocity (m/s) REAL, ALLOCATABLE :: qc (:,:,:) ! Cloud water mixing ratio (kg/kg) REAL, ALLOCATABLE :: qr (:,:,:) ! Rain water mixing ratio (kg/kg) REAL, ALLOCATABLE :: qi (:,:,:) ! Cloud ice mixing ratio (kg/kg) REAL, ALLOCATABLE :: qs (:,:,:) ! Snow mixing ratio (kg/kg) REAL, ALLOCATABLE :: qh (:,:,:) ! Hail mixing ratio (kg/kg) REAL, ALLOCATABLE :: km (:,:,:) ! The turbulent mixing coefficient for ! momentum. ( m**2/s ) REAL, ALLOCATABLE :: ubar (:,:,:) ! Base state u-velocity (m/s) REAL, ALLOCATABLE :: vbar (:,:,:) ! Base state v-velocity (m/s) REAL, ALLOCATABLE :: wbar (:,:,:) ! Base state w-velocity (m/s) REAL, ALLOCATABLE :: ptbar (:,:,:) ! Base state potential temperature (K) REAL, ALLOCATABLE :: rhobar(:,:,:) ! Base state air density (kg/m**3) REAL, ALLOCATABLE :: pbar (:,:,:) ! Base state pressure (Pascal) REAL, ALLOCATABLE :: qvbar (:,:,:) ! Base state water vapor specific humidity ! (kg/kg) INTEGER, ALLOCATABLE :: soiltyp(:,:) ! Soil type INTEGER, ALLOCATABLE :: vegtyp(:,:) ! Vegetation type REAL, ALLOCATABLE :: lai (:,:) ! Leaf Area Index REAL, ALLOCATABLE :: roufns (:,:) ! Surface roughness REAL, ALLOCATABLE :: veg (:,:) ! Vegetation fraction REAL, ALLOCATABLE :: tsoil (:,:,:,:) ! soil temperature (K) REAL, ALLOCATABLE :: qsoil (:,:,:,:) ! soil moisture (g/kg) REAL, ALLOCATABLE :: wetcanp(:,:) ! Canopy water amount REAL, ALLOCATABLE :: snowdpth(:,:) ! Snow depth (m) REAL, ALLOCATABLE :: raing (:,:) ! Grid supersaturation rain REAL, ALLOCATABLE :: rainc (:,:) ! Cumulus convective rain REAL, ALLOCATABLE :: prcrate(:,:,:) ! precipitation rate (kg/(m**2*s)) ! prcrate(1,1,1) = total precip. rate ! prcrate(1,1,2) = grid scale precip. rate ! prcrate(1,1,3) = cumulus precip. rate ! prcrate(1,1,4) = microphysics precip. rate REAL, ALLOCATABLE :: radfrc(:,:,:) ! Radiation forcing (K/s) REAL, ALLOCATABLE :: radsw (:,:) ! Solar radiation reaching the surface REAL, ALLOCATABLE :: rnflx (:,:) ! Net radiation flux absorbed by surface REAL, ALLOCATABLE :: radswnet (:,:) ! Net solar radiation, SWin - SWout REAL, ALLOCATABLE :: radlwin (:,:) ! Incoming longwave radiation REAL, ALLOCATABLE :: usflx (:,:) ! Surface flux of u-momentum (kg/(m*s**2)) REAL, ALLOCATABLE :: vsflx (:,:) ! Surface flux of v-momentum (kg/(m*s**2)) REAL, ALLOCATABLE :: ptsflx(:,:) ! Surface heat flux (K*kg/(m*s**2)) REAL, ALLOCATABLE :: qvsflx(:,:) ! Surface moisture flux (kg/(m**2*s)) REAL, ALLOCATABLE :: uprt (:,:,:) ! Perturbation u-velocity (m/s) REAL, ALLOCATABLE :: vprt (:,:,:) ! Perturbation v-velocity (m/s) REAL, ALLOCATABLE :: wprt (:,:,:) ! Perturbation w-velocity (m/s) REAL, ALLOCATABLE :: ptprt (:,:,:) ! Perturbation potential temperature (K) REAL, ALLOCATABLE :: pprt (:,:,:) ! Perturbation pressure (Pascal) REAL, ALLOCATABLE :: rhoprt(:,:,:) ! Perturbation air density (kg/m**3) REAL, ALLOCATABLE :: qvprt (:,:,:) ! Perturbation water vapor specific ! humidity (kg/kg) ! !----------------------------------------------------------------------- ! ! Other data variables ! !----------------------------------------------------------------------- ! REAL :: time ! !----------------------------------------------------------------------- ! ! Temporary working arrays: ! !----------------------------------------------------------------------- ! REAL, ALLOCATABLE :: tem1(:,:,:) REAL, ALLOCATABLE :: tem2(:,:,:) REAL, ALLOCATABLE :: tem3(:,:,:) ! !----------------------------------------------------------------------- ! ! ARPS dimensions: ! ! nx, ny, nz: Dimensions of computatioal grid. When run on MPP ! with PVM or MPI, they represent of the size of the ! subdomains. See below. ! ! Given nx, ny and nz, the physical domain size will be ! xl=(nx-3)*dx by yl=(ny-3)*dy by zh=(nz-3)*dz. The ! variables nx, ny, nz, dx, dy and dz are read in from ! the input file by subroutine INITPARA. ! !----------------------------------------------------------------------- ! INTEGER :: nx ! Number of grid points in the x-direction INTEGER :: ny ! Number of grid points in the y-direction INTEGER :: nz ! Number of grid points in the z-direction INTEGER :: nzsoil ! Number of soil levels ! !----------------------------------------------------------------------- ! ! User request stuff ! !----------------------------------------------------------------------- ! CHARACTER (LEN=4) :: radid CHARACTER (LEN=256) :: grdbasfn,filename CHARACTER (LEN=256) :: rfname REAL :: latrad,lonrad,elvrad REAL :: thref,elvmin,elvmax,dstmin,dstmax ! !----------------------------------------------------------------------- ! ! Scalar grid location variables ! !----------------------------------------------------------------------- ! REAL, ALLOCATABLE :: lat(:,:),lon(:,:) !----------------------------------------------------------------------- ! ! Radar variables ! !----------------------------------------------------------------------- ! INCLUDE 'remap.inc' REAL, ALLOCATABLE :: gridvel(:,:,:) REAL, ALLOCATABLE :: gridref(:,:,:) REAL, ALLOCATABLE :: gridnyq(:,:,:) REAL, ALLOCATABLE :: gridtim(:,:,:) REAL, ALLOCATABLE :: xsc(:),ysc(:) REAL, ALLOCATABLE :: zpsc(:,:,:) ! !----------------------------------------------------------------------- ! ! Radar angles ! !----------------------------------------------------------------------- ! INTEGER :: maxtilt PARAMETER (maxtilt=14) REAL :: hlfwid PARAMETER (hlfwid=0.45) INTEGER :: ntilt REAL :: ang(maxtilt) REAL :: ang11(maxtilt),ang12(maxtilt) REAL :: ang31(maxtilt),ang32(maxtilt) DATA ang11 / 0.5,1.5,2.4,3.4,4.3,5.3,6.2,7.5,8.7, & 10.0,12.0,14.0,16.7,19.5/ DATA ang12 / 0.5,1.5,2.4,3.4,4.3,6.0,9.9,14.6,19.5, & 19.5,19.5,19.5,19.5,19.5/ DATA ang31 / 0.5,1.5,2.5,3.5,4.5,4.5,4.5,4.5,4.5, & 4.5, 4.5, 4.5, 4.5, 4.5/ DATA ang32 / 0.5,1.5,2.5,3.5,4.5,4.5,4.5,4.5,4.5, & 4.5, 4.5, 4.5, 4.5, 4.5/ ! !----------------------------------------------------------------------- ! ! Misc internal variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=60) :: vcptxt INTEGER :: i,j,k,itilt,ireturn,mode INTEGER :: ngchan,nchanl,lenfil,lengbf,nchin INTEGER :: iradfmt,vcpnum,myr INTEGER :: knt,knttry,kntref,kntdst,kntang INTEGER :: abstsec,iyr,imon,idy,ihr,imin,isec REAL :: latnot(2) REAL :: xctr,yctr,x0sc,y0sc REAL :: azim,dist,delz,eleva,range,dhdr,dsdr REAL :: ddrot,uazmrad,vazmrad REAL :: perc,prctry,prcref,prcdst,prcang INTEGER :: istatus !----------------------------------------------------------------------- ! ! NAMELIST DECLARATION ! !----------------------------------------------------------------------- ! NAMELIST /grid_dims/ nx,ny,nz NAMELIST /file_name/ hdmpfmt,grdbasfn,filename NAMELIST /radar_info/ radid, latrad, lonrad, elvrad, vcpnum, dstmin, & dstmax, thref ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! WRITE(6,'(/11(/5x,a)/)') & '###############################################################', & '###############################################################', & '### ###', & '### Welcome to FAKERAD ###', & '### This program reads in the history dump data ###', & '### sets generated by ARPS, and generates a fake ###', & '### radar data file. ###', & '### ###', & '###############################################################', & '###############################################################' !----------------------------------------------------------------------- ! ! Read in the dimensions ! !----------------------------------------------------------------------- ! READ(5,grid_dims,END=100) ! WRITE(6,'(/a)')' Namelist grid_dims sucessfully read in.' ! !----------------------------------------------------------------------- ! ! Get the name of the input data set. ! !----------------------------------------------------------------------- ! READ(5,file_name,END=100) WRITE(6,'(/a)')' Namelist file_name sucessfully read in.' lengbf=LEN_trim(grdbasfn) lenfil=LEN_trim(filename) WRITE(6,'(/a,a)')' The data set name is ', filename(1:lenfil) CALL get_dims_from_data(hinfmt,grdbasfn, nx,ny,nz,nzsoil,nstyps, ireturn) !----------------------------------------------------------------------- ! ! Initialize variables. ! !----------------------------------------------------------------------- ! istatus=0 ALLOCATE(x(nx),STAT=istatus) x=0 ALLOCATE(y(ny),STAT=istatus) y=0 ALLOCATE(z(nz),STAT=istatus) z=0 ALLOCATE(zp(nx,ny,nz),STAT=istatus) zp=0 ALLOCATE(zpsoil(nx,ny,nzsoil),STAT=istatus) zpsoil=0 ALLOCATE(j1(nx,ny,nz),STAT=istatus) j1=0 ALLOCATE(j2(nx,ny,nz),STAT=istatus) j2=0 ALLOCATE(j3(nx,ny,nz),STAT=istatus) j3=0 ALLOCATE(j3(nx,ny,nzsoil),STAT=istatus) j3soil=0 ALLOCATE(u(nx,ny,nz),STAT=istatus) u=0 ALLOCATE(v(nx,ny,nz),STAT=istatus) v=0 ALLOCATE(w(nx,ny,nz),STAT=istatus) w=0 ALLOCATE(qc(nx,ny,nz),STAT=istatus) qc=0 ALLOCATE(qr(nx,ny,nz),STAT=istatus) qr=0 ALLOCATE(qi(nx,ny,nz),STAT=istatus) qi=0 ALLOCATE(qs(nx,ny,nz),STAT=istatus) qs=0 ALLOCATE(qh(nx,ny,nz),STAT=istatus) qh=0 ALLOCATE(km(nx,ny,nz),STAT=istatus) km=0 ALLOCATE(ubar(nx,ny,nz),STAT=istatus) ubar=0 ALLOCATE(vbar(nx,ny,nz),STAT=istatus) vbar=0 ALLOCATE(wbar(nx,ny,nz),STAT=istatus) wbar=0 ALLOCATE(ptbar(nx,ny,nz),STAT=istatus) ptbar=0 ALLOCATE(rhobar(nx,ny,nz),STAT=istatus) rhobar=0 ALLOCATE(pbar(nx,ny,nz),STAT=istatus) pbar=0 ALLOCATE(qvbar(nx,ny,nz),STAT=istatus) qvbar=0 ALLOCATE(soiltyp(nx,ny),STAT=istatus) soiltyp=0 ALLOCATE(vegtyp(nx,ny),STAT=istatus) vegtyp=0 ALLOCATE(lai(nx,ny),STAT=istatus) lai=0 ALLOCATE(roufns(nx,ny),STAT=istatus) roufns=0 ALLOCATE(veg(nx,ny),STAT=istatus) veg=0 ALLOCATE(tsoil (nx,ny,nzsoil,0:nstyps),STAT=istatus) CALL check_alloc_status(istatus, "arps:tsoil") tsoil = 0 ALLOCATE(qsoil (nx,ny,nzsoil,0:nstyps),STAT=istatus) CALL check_alloc_status(istatus, "arps:qsoil") qsoil = 0 ALLOCATE(wetcanp(nx,ny),STAT=istatus) wetcanp=0 ALLOCATE(snowdpth(nx,ny),STAT=istatus) snowdpth=0 ALLOCATE(raing(nx,ny),STAT=istatus) raing=0 ALLOCATE(rainc(nx,ny),STAT=istatus) rainc=0 ALLOCATE(prcrate(nx,ny,4),STAT=istatus) prcrate=0 ALLOCATE(radfrc(nx,ny,nz),STAT=istatus) radfrc=0 ALLOCATE(radsw(nx,ny),STAT=istatus) radsw=0 ALLOCATE(rnflx(nx,ny),STAT=istatus) rnflx=0 ALLOCATE(radswnet (nx,ny),STAT=istatus) CALL check_alloc_status(istatus, "arps:radswnet") radswnet = 0 ALLOCATE(radlwin (nx,ny),STAT=istatus) CALL check_alloc_status(istatus, "arps:radlwin") radlwin = 0 ALLOCATE(usflx(nx,ny),STAT=istatus) usflx=0 ALLOCATE(vsflx(nx,ny),STAT=istatus) vsflx=0 ALLOCATE(ptsflx(nx,ny),STAT=istatus) ptsflx=0 ALLOCATE(qvsflx(nx,ny),STAT=istatus) qvsflx=0 ALLOCATE(uprt(nx,ny,nz),STAT=istatus) uprt=0 ALLOCATE(vprt(nx,ny,nz),STAT=istatus) vprt=0 ALLOCATE(wprt(nx,ny,nz),STAT=istatus) wprt=0 ALLOCATE(ptprt(nx,ny,nz),STAT=istatus) ptprt=0 ALLOCATE(pprt(nx,ny,nz),STAT=istatus) pprt=0 ALLOCATE(rhoprt(nx,ny,nz),STAT=istatus) rhoprt=0 ALLOCATE(qvprt(nx,ny,nz),STAT=istatus) qvprt=0 ALLOCATE(tem1(nx,ny,nz),STAT=istatus) tem1=0 ALLOCATE(tem2(nx,ny,nz),STAT=istatus) tem2=0 ALLOCATE(tem3(nx,ny,nz),STAT=istatus) tem3=0 ALLOCATE(lat(nx,ny),STAT=istatus) lat=0 ALLOCATE(lon(nx,ny),STAT=istatus) lon=0 !------------------------------------------------------------- ! Allocate for variables from remap_d.inc !------------------------------------------------------------- ALLOCATE (gridvel(nx,ny,nz),STAT=istatus) gridvel=velmis ALLOCATE (gridref(nx,ny,nz),STAT=istatus) gridref=refmis ALLOCATE (gridnyq(nx,ny,nz),STAT=istatus) gridnyq=100. ALLOCATE (gridtim(nx,ny,nz),STAT=istatus) gridtim=0. ALLOCATE (xsc(nx),ysc(ny),STAT=istatus) ALLOCATE (zpsc(nx,ny,nz),STAT=istatus) !----------------------------------------------------------------------- ! ! Get the name of the input data set. ! !----------------------------------------------------------------------- ! ! READ(5,file_name,END=100) ! WRITE(6,'(/a)')' Namelist file_name sucessfully read in.' ! ! lengbf=LEN_trim(grdbasfn) ! lenfil=LEN_trim(filename) ! ! WRITE(6,'(/a,a)')' The data set name is ', filename(1:lenfil) ! !------------------------------------------------------------------------ ! ! Get the rada information ! !------------------------------------------------------------------------ READ(5,radar_info,END=100) WRITE(6,'(/a)')' Namelist radar_info sucessfully read in.' dstmin=dstmin*1000. dstmax=dstmax*1000. !----------------------------------------------------------------------- ! ! Set elevation angles ! !----------------------------------------------------------------------- ! IF(vcpnum == 11) THEN ntilt=14 vcptxt='Storm mode 14 tilts 0.5-19.5 deg' DO itilt=1,ntilt ang(itilt)=ang11(itilt) END DO ELSE IF (vcpnum == 12) THEN ntilt=9 vcptxt='Storm mode 9 tilts 0.5-19.5 deg' DO itilt=1,ntilt ang(itilt)=ang11(itilt) END DO ELSE IF (vcpnum == 31) THEN ntilt=5 vcptxt='Clear-air 5 tilts 0.5- 4.5 deg' DO itilt=1,ntilt ang(itilt)=ang11(itilt) END DO ELSE IF (vcpnum == 32) THEN ntilt=5 vcptxt='Clear-air 5 tilts 0.5- 4.5 deg' DO itilt=1,ntilt ang(itilt)=ang11(itilt) END DO ELSE WRITE(6,*) vcpnum,' is a bogus vcpnum' STOP END IF elvmin=ang(1)-hlfwid elvmax=ang(ntilt)+hlfwid ! !----------------------------------------------------------------------- ! ! Read all input data arrays ! !----------------------------------------------------------------------- ! CALL dtaread(nx,ny,nz,nzsoil,nstyps, & hdmpfmt,nchin,grdbasfn(1:lengbf),lengbf, & filename(1:lenfil),lenfil,time, & x,y,z,zp,zpsoil,uprt,vprt,wprt,ptprt,pprt, & qvprt, qc, qr, qi, qs, qh, km, & ubar, vbar, wbar, ptbar, pbar, rhobar, qvbar, & soiltyp,vegtyp,lai,roufns,veg, & tsoil,qsoil,wetcanp,snowdpth, & raing,rainc,prcrate, & radfrc,radsw,rnflx,radswnet,radlwin, & usflx,vsflx,ptsflx,qvsflx, & ireturn, tem1,tem2,tem3) curtim = time ! !----------------------------------------------------------------------- ! ! ireturn = 0 for a successful read ! !----------------------------------------------------------------------- ! IF( ireturn == 0 ) THEN ! successful read ! !----------------------------------------------------------------------- ! ! Set map projection parameters ! !----------------------------------------------------------------------- ! latnot(1)=trulat1 latnot(2)=trulat2 CALL setmapr(mapproj,sclfct,latnot,trulon) CALL lltoxy(1,1,ctrlat,ctrlon,xctr,yctr) ! gdx=x(2)-x(1) x0sc=xctr - 0.5*(nx-3)*gdx gdy=y(2)-y(1) y0sc=yctr - 0.5*(ny-3)*gdy CALL setorig(1,x0sc,y0sc) ! !----------------------------------------------------------------------- ! ! Calculate lat,lon locations of the scalar grid points ! !----------------------------------------------------------------------- ! DO i=1,nx-1 xsc(i)=0.5*(x(i)+x(i+1)) END DO xsc(nx)=2.*xsc(nx-1)-xsc(nx-2) DO j=1,ny-1 ysc(j)=0.5*(y(j)+y(j+1)) END DO ysc(ny)=2.*ysc(ny-1)-ysc(ny-2) CALL xytoll(nx,ny,xsc,ysc,lat,lon) ! !----------------------------------------------------------------------- ! ! Move z field onto the scalar grid. ! !----------------------------------------------------------------------- ! DO k=1,nz-1 DO j=1,ny-1 DO i=1,nx-1 zpsc(i,j,k)=0.5*(zp(i,j,k)+zp(i,j,k+1)) END DO END DO END DO DO j=1,ny-1 DO i=1,nx-1 zpsc(i,j,nz)=(2.*zpsc(i,j,nz-1)) & -zpsc(i,j,nz-2) END DO END DO ! !----------------------------------------------------------------------- ! ! Combine wind perturbations and mean fields and put them ! on scalar grid. ! !----------------------------------------------------------------------- ! DO k=1,nz-1 DO j=1,ny-1 DO i=1,nx-1 u(i,j,k)=0.5*(ubar(i,j,k) +uprt(i,j,k) + & ubar(i+1,j,k)+uprt(i+1,j,k)) END DO END DO END DO ! DO k=1,nz-1 DO j=1,ny-1 DO i=1,nx-1 v(i,j,k)=0.5*(vbar(i,j,k) +vprt(i,j,k) + & vbar(i,j+1,k)+vprt(i,j+1,k)) END DO END DO END DO ! DO k=1,nz-1 DO j=1,ny-1 DO i=1,nx-1 w(i,j,k)=0.5*(wbar(i,j,k) +wprt(i,j,k) + & wbar(i,j,k+1)+wprt(i,j,k+1)) END DO END DO END DO ! !----------------------------------------------------------------------- ! ! Get reflectivity from qr. ! !----------------------------------------------------------------------- ! CALL reflec(nx,ny,nz, rhobar, qr, qs, qh, gridref) ! !----------------------------------------------------------------------- ! ! Get radial velocity from 3-d velocity components ! !----------------------------------------------------------------------- ! knt=0 kntref=0 kntang=0 kntdst=0 DO j=2,ny-2 DO i=2,nx-2 CALL disthead(lat(i,j),lon(i,j), & latrad,lonrad,azim,dist) IF(dist > dstmin .AND. dist < dstmax)THEN DO k=2,nz-2 IF(gridref(i,j,k) > thref) THEN delz=zpsc(i,j,k)-elvrad CALL beamelv(delz,dist,eleva,range) IF(eleva > elvmin .AND. eleva < elvmax ) THEN DO itilt=1,ntilt IF(ABS(eleva-ang(itilt)) < hlfwid) GO TO 145 END DO kntang=kntang+1 CYCLE 145 CONTINUE knt=knt+1 CALL dhdrange(eleva,range,dhdr) dsdr=SQRT(AMAX1(0.,(1.-dhdr*dhdr))) CALL ddrotuv(1,lon(i,j),azim,1., & ddrot,uazmrad,vazmrad) gridvel(i,j,k)=u(i,j,k)*uazmrad*dsdr & +v(i,j,k)*vazmrad*dsdr & +w(i,j,k)*dhdr ELSE kntang=kntang+1 END IF ELSE kntref=kntref+1 END IF END DO ELSE kntdst=kntdst+(nz-3) END IF END DO END DO ! !----------------------------------------------------------------------- ! ! Write the data counters. ! !----------------------------------------------------------------------- ! knttry=(nx-3)*(ny-3)*(nz-3) perc=100.*FLOAT(knt)/FLOAT(knttry) prcdst=100.*FLOAT(kntdst)/FLOAT(knttry) prcang=100.*FLOAT(kntang)/FLOAT(knttry) prcref=100.*FLOAT(kntref)/FLOAT(knttry) ! WRITE(6,'(a,i4/,a/)') ' Used VCP Number',vcpnum,vcptxt WRITE(6,'(a,i12)') ' Total points: ',knttry WRITE(6,'(a,i12,f6.1,a)') ' Generated data: ',knt,perc,' %' WRITE(6,'(a,i12,f6.1,a)') ' Dist rejected: ', & kntdst,prcdst,' %' WRITE(6,'(a,i12,f6.1,a)') ' Angle samp rej: ', & kntang,prcang,' %' WRITE(6,'(a,i12,f6.1,a//)') ' Ref thresh rej: ', & kntref,prcref,' %' ! !----------------------------------------------------------------------- ! ! Write the radar data out. ! !----------------------------------------------------------------------- ! iradfmt=1 CALL ctim2abss(year,month,day,hour,minute,second, abstsec) abstsec=abstsec+curtim CALL abss2ctim( abstsec, iyr, imon, idy, ihr, imin, isec ) ! myr=MOD(iyr,100) WRITE(rfname,'(a,a,i2.2,i2.2,i2.2,a,i2.2,i2.2)') & radid,'.',myr,imon,idy,'.',ihr,imin PRINT *, ' Writing data into ',rfname CALL wtradcol(iradfmt,rfname,radid,latrad,lonrad,elvrad, & myr,imon,idy,ihr,imin,isec,vcpnum, & nx,ny,nz,gridvel,gridref,gridnyq,gridtim,xsc,ysc,zpsc) END IF ! successful read GOTO 110 100 CONTINUE Write(6,'(1x,a)')'Namelist read end encountered. Program stopped.' 110 CONTINUE STOP END PROGRAM fakerad