PROGRAM radmosaic,28 ! !################################################################## !################################################################## !###### ###### !###### PROGRAM RADMOSAIC ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! ! PURPOSE: ! ! Create a 3-d radar mosaic from remapped radar files ! (output from 88d2arps and/or nids2arps). ! ! AUTHOR: ! ! Keith Brewster, CAPS, August, 2003 ! ! MODIFICATION HISTORY: ! ! !----------------------------------------------------------------------- ! ! Variable Declarations: ! !----------------------------------------------------------------------- ! IMPLICIT NONE ! 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 grid points in the -z-direction ! !----------------------------------------------------------------------- ! ! Maximum number of radars in the mosaic ! !----------------------------------------------------------------------- ! INTEGER, PARAMETER :: mx_rad=120 ! REAL, ALLOCATABLE :: x(:) REAL, ALLOCATABLE :: y(:) REAL, ALLOCATABLE :: z(:) REAL, ALLOCATABLE :: zp(:,:,:) REAL, ALLOCATABLE :: zpsoil(:,:,:) REAL, ALLOCATABLE :: hterain(:,:) REAL, ALLOCATABLE :: mapfct(:,:,:) REAL, ALLOCATABLE :: j1(:,:,:) REAL, ALLOCATABLE :: j2(:,:,:) REAL, ALLOCATABLE :: j3(:,:,:) REAL, ALLOCATABLE :: j3soil(:,:,:) REAL, ALLOCATABLE :: j3inv(:,:,:) REAL, ALLOCATABLE :: j3soilinv(:,:,:) ! REAL, ALLOCATABLE :: xs(:) REAL, ALLOCATABLE :: ys(:) REAL, ALLOCATABLE :: zs(:,:,:) REAL, ALLOCATABLE :: refmos(:,:,:) REAL, ALLOCATABLE :: refl(:,:,:) REAL, ALLOCATABLE :: tem1(:,:,:) REAL, ALLOCATABLE :: tem2(:,:,:) REAL, ALLOCATABLE :: tem3(:,:,:) CHARACTER (LEN=132) :: radfname(mx_rad) CHARACTER (LEN=6) :: varid CHARACTER (LEN=20) :: varname CHARACTER (LEN=20) :: varunits INTEGER :: nradfil INTEGER :: istatus INTEGER :: i,j,k,irad REAL :: alatru(2) REAL :: ctrx,ctry,swx,swy,dxscl,dyscl REAL :: rhinf REAL :: rvinf REAL :: refmax ! !----------------------------------------------------------------------- ! ! Include files ! !----------------------------------------------------------------------- ! INCLUDE 'mp.inc' INCLUDE 'grid.inc' INCLUDE 'globcst.inc' ! NAMELIST /grid_dims/ nx,ny,nz NAMELIST /terrain/ ternopt,mntopt,hmount,mntwidx,mntwidy, & mntctrx,mntctry,terndta,ternfmt NAMELIST /filelist/ nradfil,radfname NAMELIST /output/ runname,dirname ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! !----------------------------------------------------------------------- ! ! Initializations ! !----------------------------------------------------------------------- ! nx=5 ny=5 nz=5 ternopt=1 mntopt=0 hmount=0. mntwidx=0. mntwidy=0. mntctrx=0. mntctry=0. terndta='NULL' ternfmt=1 nradfil=1 DO irad=1,mx_rad radfname(irad)='NULL' END DO runname='NULL' dirname='NULL' mp_opt=0 max_fopen=1 nproc_x=1 nproc_y=1 nprocs=nproc_x*nproc_y myproc=0 readstride=1 ! READ(5,grid_dims) READ(5,terrain) READ(5,filelist) READ(5,output) ! CALL get_grid_from_rad(radfname(1),dx,dy,dz,dzmin,strhopt, & mapproj,ctrlat,ctrlon,trulat1,trulat2,trulon,sclfct, & istatus) alatru(1)=trulat1 alatru(2)=trulat2 nzsoil=2 dzsoil=1.0 ! ALLOCATE(x(nx),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:x") ALLOCATE(y(ny),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:y") ALLOCATE(z(nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:z") ALLOCATE(zp(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:zp") ALLOCATE(zpsoil(nx,ny,nzsoil),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:zpsoil") ALLOCATE(hterain(nx,ny),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:hterain") ALLOCATE(mapfct(nx,ny,8),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:mapfct") ALLOCATE(j1(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:j1") ALLOCATE(j2(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:j2") ALLOCATE(j3(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:j3") ALLOCATE(j3soil(nx,ny,nzsoil),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:j3soil") ALLOCATE(j3inv(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:j3inv") ALLOCATE(j3soilinv(nx,ny,nzsoil),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:j3invsoil") ! ALLOCATE(xs(nx),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:xs") ALLOCATE(ys(ny),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:ys") ALLOCATE(zs(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:zs") ALLOCATE(refmos(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:refmos") ALLOCATE(refl(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:refl") ALLOCATE(tem1(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:tem1") ALLOCATE(tem2(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:tem2") ALLOCATE(tem3(nx,ny,nz),STAT=istatus) CALL check_alloc_status(istatus, "radmosaic:tem3") ! !----------------------------------------------------------------------- ! ! Initialization of model grid definition arrays. ! !----------------------------------------------------------------------- ! CALL inigrd(nx,ny,nz,nzsoil,x,y,z,zp,zpsoil, & hterain,mapfct,j1,j2,j3,j3soil, & j3soilinv,tem1,tem2,tem3) CALL setmapr( mapproj,sclfct,alatru,trulon ) CALL lltoxy( 1,1, ctrlat,ctrlon, ctrx, ctry ) dxscl = dx*sclfct dyscl = dy*sclfct swx = ctrx - (0.5*FLOAT(nx-3)) * dxscl swy = ctry - (0.5*FLOAT(ny-3)) * dyscl CALL setorig( 1, swx, swy) ! !----------------------------------------------------------------------- ! ! Fill xs, ys and zs arrays. ! !----------------------------------------------------------------------- ! DO i = 1, nx-1 xs(i)=0.5*x(i)+x(i+1) END DO xs(nx)=2.*x(nx-1)-x(nx-2) DO j = 1, ny ys(j)=0.5*y(j)+y(j+1) END DO ys(ny)=2.*y(ny-1)-y(ny-2) ! DO k=1, nz-1 DO j=1, ny DO i=1, nx zs(i,j,k)=0.5*(zp(i,j,k)+zp(i,j,k+1)) END DO END DO END DO DO j=1, ny DO i=1, nx zs(i,j,nz)=2.*zp(i,j,nz-1)-zp(i,j,nz-2) END DO END DO rhinf=2.*dz rvinf=2.*sqrt(0.5*(dx*dx + dy*dy)) ! CALL refmosaic(nradfil,nx,ny,nz,mx_rad, & xs,ys,zs,radfname,refmos,rhinf,rvinf, & refl,tem1,tem2,istatus) ! DO j=1,ny DO i=1,nx refmax=-99. DO k=2,nz-1 refmax=max(refmax,refmos(i,j,k)) END DO refmos(i,j,1)=refmax END DO END DO ! varid='refmos' varname='Reflectivity Mosaic' varunits='dBZ' curtim=0. CALL wrtvar1(nx,ny,nz,refmos,varid,varname,varunits, & curtim,runname,dirname,istatus) STOP END PROGRAM radmosaic