PROGRAM testret,3
!
!##################################################################
!##################################################################
!###### ######
!###### PROGRAM TESTRET ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Test writing of retrieval columns.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Keith Brewster
!
! 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)
!
! 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)
! pt Potential temperature (K)
! qv Water vapor mixing ratio (kg/kg)
!
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations:
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'indtflg.inc'
INCLUDE 'grid.inc'
INTEGER :: nx, ny, nz ! Dimensions declaration
!
!-----------------------------------------------------------------------
!
! 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 :: 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 :: u(:,:,:) ! Total u-velocity (m/s)
REAL, ALLOCATABLE :: v(:,:,:) ! Total v-velocity (m/s)
REAL, ALLOCATABLE :: w(:,:,:) ! Total w-velocity (m/s)
REAL, ALLOCATABLE :: pt(:,:,:) ! Total potential temperature (K)
REAL, ALLOCATABLE :: qv (:,:,:) ! Water vapor specific humidity (kg/kg)
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 :: tke (:,:,:) ! Turbulent Kinetic Energy ((m/s)**2)
REAL, ALLOCATABLE :: kmh (:,:,:) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL, ALLOCATABLE :: kmv (:,:,:) ! Vertical turb. mixing coef. 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 :: nstyps
PARAMETER (nstyps=4)
INTEGER, ALLOCATABLE:: soiltyp (:,:,:) ! Soil type
REAL, ALLOCATABLE :: stypfrct(:,:,:) ! Fraction of soil types
INTEGER, ALLOCATABLE :: vegtyp (:,:) ! Vegetation type
REAL, ALLOCATABLE :: lai (:,:) ! Leaf Area Index
REAL, ALLOCATABLE :: roufns (:,:) ! Surface roughness
REAL, ALLOCATABLE :: veg (:,:) ! Vegetation fraction
REAL, ALLOCATABLE :: tsfc (:,:,:) ! Temperature at surface (K)
REAL, ALLOCATABLE :: tsoil (:,:,:) ! Deep soil temperature (K)
REAL, ALLOCATABLE :: wetsfc (:,:,:) ! Surface soil moisture
REAL, ALLOCATABLE :: wetdp (:,:,:) ! Deep soil moisture
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 :: 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(:,:,:)
REAL, ALLOCATABLE :: tem1d1(:),tem1d2(:),tem1d3(:),tem1d4(:), &
tem1d5(:), tem1d6(:),tem1d7(:),tem1d8(:),tem1d9(:)
!
!-----------------------------------------------------------------------
!
! "Fake" radar id stuff
!
!-----------------------------------------------------------------------
!
INTEGER :: iretfmt
CHARACTER (LEN=80) :: retfname
PARAMETER(iretfmt=1)
CHARACTER (LEN=4) :: radid
REAL :: latrad,lonrad,elvrad
PARAMETER(radid='KTLX', &
latrad=35.3331, &
lonrad=-97.2778, &
elvrad=389.4)
!
!-----------------------------------------------------------------------
!
! Misc internal variables
!
!-----------------------------------------------------------------------
!
REAL, ALLOCATABLE :: xsc(:)
REAL, ALLOCATABLE :: ysc(:)
REAL, ALLOCATABLE :: zpsc(:,:,:)
REAL :: latnot(2)
!
INTEGER :: i,j,k,ireturn
INTEGER :: istride,jstride,kstride
PARAMETER (istride=2, &
jstride=2, &
kstride=1)
CHARACTER (LEN=80) :: filename
CHARACTER (LEN=80) :: grdbasfn
INTEGER :: ngchan,nchanl,lenfil,lengbf
INTEGER :: nchin,iyr
INTEGER :: istatus
!----------------------------------------------------------------------
!
! NAMELIST declaration
!
!----------------------------------------------------------------------
NAMELIST /grid_dims/ nx, ny, nz
NAMELIST /input_fn/ hdmpfmt, grdbasfn, filename
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
WRITE(6,'(/11(/5x,a)/)') &
'###############################################################', &
'###############################################################', &
'### ###', &
'### Welcome to ARPSPRT ###', &
'### This program reads in the history dump data ###', &
'### sets generated by ARPS, and prints the array ###', &
'### contents as 2-D arrays tables at user specified ###', &
'### slices. ###', &
'### ###', &
'###############################################################', &
'###############################################################'
READ(5,grid_dims,END=100)
WRITE(6,'(/a)') 'Namelist block grid_dims successfully read.'
!-----------------------------------------------------------------------
!
! Allocate all arrays and fill them with zero, which is the default
! value of the data arrays.
!
!-----------------------------------------------------------------------
!
ALLOCATE( x=0
ALLOCATE( y=0
ALLOCATE( z=0
ALLOCATE(zp(nx,ny,nz),STAT=istatus)
zp=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( u=0
ALLOCATE( v=0
ALLOCATE( w=0
ALLOCATE(pt(nx,ny,nz),STAT=istatus)
pt=0
ALLOCATE(qv(nx,ny,nz),STAT=istatus)
qv=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(tke(nx,ny,nz),STAT=istatus)
tke=0
ALLOCATE(kmh(nx,ny,nz),STAT=istatus)
kmh=0
ALLOCATE(kmv(nx,ny,nz),STAT=istatus)
kmv=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,nstyps),STAT=istatus)
soiltyp=0
ALLOCATE(stypfrct(nx,ny,nstyps),STAT=istatus)
stypfrct=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(tsfc(nx,ny,0:nstyps),STAT=istatus)
tsfc=0
ALLOCATE(tsoil(nx,ny,0:nstyps),STAT=istatus)
tsoil=0
ALLOCATE(wetsfc(nx,ny,0:nstyps),STAT=istatus)
wetsfc=0
ALLOCATE(wetdp(nx,ny,0:nstyps),STAT=istatus)
wetdp=0
ALLOCATE(wetcanp(nx,ny,0:nstyps),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(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
!-----------------------------------------------------------------------
!
! Get the name of the input data set.
!
!-----------------------------------------------------------------------
!
READ(5,input_fn,END=100)
WRITE(6,'(/a,a)')' Namelist block input_fn successfully read in.'
lengbf=LEN_trim(grdbasfn)
lenfil=LEN_trim(filename)
WRITE(6,'(/a,a)')' The data set name is ', filename(1:lenfil)
!
!-----------------------------------------------------------------------
!
! Read all input data arrays
!
!-----------------------------------------------------------------------
!
CALL dtaread
(nx,ny,nz,nstyps, &
hdmpfmt,nchin,grdbasfn(1:lengbf),lengbf, &
filename(1:lenfil),lenfil,time, &
x,y,z,zp, uprt ,vprt ,wprt ,ptprt, pprt , &
qvprt, qc, qr, qi, qs, qh, tke,kmh,kmv, &
ubar, vbar, wbar, ptbar, pbar, rhobar, qvbar, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
ireturn, tem1,tem2,tem3)
curtim = time
!
!-----------------------------------------------------------------------
!
! ireturn = 0 for a successful read
!
!-----------------------------------------------------------------------
!
IF( ireturn == 0 ) THEN ! successful read
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(i)+y(i+1))
END DO
ysc(ny)=2.*ysc(ny-1)-ysc(ny-2)
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))
tem1(i,j,k)=0.5*(uprt( i,j,k)+ubar( i,j,k) &
+uprt(i+1,j,k)+ubar(i+1,j,k))
tem2(i,j,k)=0.5*(vprt(i, j,k)+vbar(i, j,k) &
+vprt(1,j+1,k)+vbar(i,j+1,k))
IF(MOD(i,istride) == 0 .AND. MOD(j,jstride) == 0 .AND. &
MOD(k,kstride) == 0 ) THEN
tem3(i,j,k)=1.0
ELSE
tem3(i,j,k)=-999.
END IF
END DO
END DO
END DO
latnot(1) = trulat1
latnot(2) = trulat2
CALL setmapr
(mapproj,1.0,latnot,trulon)
iyr=MOD(year,100)
WRITE(retfname,'(a,a,i2.2,i2.2,i2.2,a,i2.2,i2.2)') &
radid,'.',iyr,month,day,'.',hour,minute
PRINT *, ' Writing data into ',retfname
CALL wtretcol
(nx,ny,nz, &
2,nx-2,2,ny-2,2,nz-2, &
iyr,month,day,hour,minute,second, &
iretfmt,retfname,radid,latrad,lonrad,elvrad, &
xsc,ysc,zpsc, &
tem1,tem2,ptprt,pprt,qvprt,qr, &
ptbar,pbar,qvbar,tem3, &
tem1d1,tem1d2,tem1d3,tem1d4, &
tem1d5,tem1d6,tem1d7,tem1d8,tem1d9)
END IF ! successful read
GOTO 101
100 CONTINUE
WRITE(6,'(/a,a)') 'Error reading NAMELIST file. The program will abort.'
101 CONTINUE
STOP
END PROGRAM testret
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE WTRETCOL ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE wtretcol(nx,ny,nz, & 2,9
ibeg,iend,jbeg,jend,kbeg,kend, &
iyr,imon,iday,ihr,imin,isec, &
iretfmt,retfname,radid,latrad,lonrad,elvrad, &
xsc,ysc,zpsc, &
us,vs,ptprt,pprt,qvprt,qr, &
ptbar,pbar,qvbar,retrflg, &
outk,outhgt,outu,outv, &
outpr,outpt,outqv,outqr,outret)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Test writing of retrieval columns.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Keith Brewster
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
! Writes gridded radar data to a file
!
! INPUT
!
! 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)
!
! 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)
! qr Rainwater mixing ratio (kg/kg)
!
!-----------------------------------------------------------------------
!
!
IMPLICIT NONE
!
INTEGER :: nx,ny,nz
INTEGER :: ibeg,iend,jbeg,jend,kbeg,kend
!
REAL :: xsc(nx)
REAL :: ysc(ny)
REAL :: zpsc(nx,ny,nz)
REAL :: us(nx,ny,nz) ! total u velocity component at scalar points
REAL :: vs(nx,ny,nz) ! total v velocity component at scalar points
REAL :: ptprt (nx,ny,nz) ! Perturbation potential temperature (K)
REAL :: pprt (nx,ny,nz) ! Perturbation pressure (Pascal)
REAL :: qvprt (nx,ny,nz) ! Perturbation water vapor specific
! humidity (kg/kg)
REAL :: qr (nx,ny,nz) ! Rain water mixing ratio (kg/kg)
REAL :: ptbar (nx,ny,nz) ! Base state potential temperature (K)
REAL :: pbar (nx,ny,nz) ! Base state pressure (Pascal)
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific humidity
! (kg/kg)
REAL :: retrflg(nx,ny,nz)
!
INTEGER :: iretfmt
CHARACTER (LEN=80) :: retfname
CHARACTER (LEN=4) :: radid
REAL :: latrad
REAL :: lonrad
REAL :: elvrad
INTEGER :: iyr,imon,iday,ihr,imin,isec
!
!-----------------------------------------------------------------------
!
! Retrieval output variables
!
!-----------------------------------------------------------------------
!
REAL :: outk(nz)
REAL :: outhgt(nz)
REAL :: outu(nz)
REAL :: outv(nz)
REAL :: outpr(nz)
REAL :: outpt(nz)
REAL :: outqv(nz)
REAL :: outqr(nz)
REAL :: outret(nz)
!
!-----------------------------------------------------------------------
!
! Retrieved data threshold
!
!-----------------------------------------------------------------------
!
REAL :: retrthr
PARAMETER(retrthr=0.)
!
!-----------------------------------------------------------------------
!
! Include file
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc'
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: iunit,myr,itime
INTEGER :: i,j,k,klev,kk,kntcol
INTEGER :: nradvr,iradvr,ireftim,idummy
REAL :: gridlat,gridlon,elev,rdummy
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
myr=1900+iyr
IF(myr < 1960) myr=myr+100
CALL ctim2abss
(myr,imon,iday,ihr,imin,isec,itime)
!
CALL getunit
(iunit)
!
! Open file for output
!
OPEN(iunit,FILE=retfname,STATUS='unknown', &
FORM='unformatted')
!
! Write retrieval description variables
!
WRITE(iunit) radid
WRITE(iunit) ireftim,itime,idummy,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
!
! Write grid description variables
! This should provide enough info to verify that the
! proper grid has been chosen. To recreate the grid,
! icluding elevation information,
! the reading program should get a grid-base-file
! named runname.grdbasfil
!
idummy=0
rdummy=0.
WRITE(iunit) runname
WRITE(iunit) hdmpfmt,strhopt,mapproj,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
WRITE(iunit) dx,dy,dz,dzmin,ctrlat, &
ctrlon,trulat1,trulat2,trulon,sclfct, &
latrad,lonrad,elvrad,rdummy,rdummy
WRITE(iunit) nradvr,iradvr
!
! For each horizontal grid point form a column of remapped
! data containing the non-missing grid points
!
kntcol=0
DO j=jbeg,jend
DO i=ibeg,iend
klev=0
DO k=kbeg,kend
IF(retrflg(i,j,k) > retrthr) THEN
klev=klev+1
outk(klev)=FLOAT(k)
outhgt(klev)=zpsc(i,j,k)
outu(klev)=us(i,j,k)
outv(klev)=vs(i,j,k)
outpr(klev)=pprt(i,j,k)+pbar(i,j,k)
outpt(klev)=ptprt(i,j,k)+ptbar(i,j,k)
outqv(klev)=qvprt(i,j,k)+qvbar(i,j,k)
outqr(klev)=qr(i,j,k)
outret(klev)=retrflg(i,j,k)
END IF
END DO
!
! If there are data in this column, write them to the file.
!
IF(klev > 0) THEN
kntcol=kntcol+1
CALL xytoll
(1,1,xsc(i),ysc(j),gridlat,gridlon)
elev=0.5*(zpsc(i,j,1)+zpsc(i,j,2))
WRITE(iunit) i,j,xsc(i),ysc(j), &
gridlat,gridlon,elev,klev
WRITE(iunit) (outk(kk),kk=1,klev)
WRITE(iunit) (outhgt(kk),kk=1,klev)
WRITE(iunit) (outu(kk),kk=1,klev)
WRITE(iunit) (outv(kk),kk=1,klev)
WRITE(iunit) (outpr(kk),kk=1,klev)
WRITE(iunit) (outpt(kk),kk=1,klev)
WRITE(iunit) (outqv(kk),kk=1,klev)
WRITE(iunit) (outqr(kk),kk=1,klev)
WRITE(iunit) (outret(kk),kk=1,klev)
END IF
END DO
END DO
!
CLOSE(iunit)
CALL retunit(iunit)
!
! Report on what data were written
!
WRITE(6,'(//a,i2.2,i2.2,i2.2,a1,i2.2,a1,i2.2)') &
' Output statistics for time ', &
iyr,imon,iday,' ',ihr,':',imin
WRITE(6,'(a,i6,a,/a,i6,a//)') &
' There were ',kntcol,' columns written ', &
' of a total ',(nx*ny),' possible.'
!
RETURN
END SUBROUTINE wtretcol