!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE V3DDUMP ######
!###### ######
!###### Developed by ######
!###### Coastal Meteorology Research Project (CMRP) ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE v5ddump(nx,ny,nz,nstyps, filnam, istgr, & 1,54
u,v,w,ptprt,pprt,qv,qc,qr,qi,qs,qh,tke,kmh,kmv, &
ubar,vbar,wbar,ptbar,pbar,rhobar,qvbar, &
x,y,z,zp,hterain, j1,j2,j3, &
soiltyp,stypfrct,vegtyp,lai,roufns,veg, &
tsfc,tsoil,wetsfc,wetdp,wetcanp,snowdpth, &
raing,rainc,prcrate, &
radfrc,radsw,rnflx, &
usflx,vsflx,ptsflx,qvsflx, &
tem1,tem2)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Write history data into the file "filnam" in the Vis5D format.
!
! All output data are located at the grid cell centers.
!
! X_center(i) = ( X_edge(i) + X_edge(i+1) )/2, i = 1, n-1, 1
!
! The last edge value were kept unchanged so that it can be used to
! restore the stagger grid point values.
!
! X_edge(n) = X_center(n)
! X_edge(i) = 2*X_center(i) - X_edge(i+1), i = n-1, 1, -1
!
! Since total and perturbation variables will be dumped, the base
! state variables can be obtained by Xbar = X - Xprt.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Fanyou kong
! 4/28/97.
!
! 1/31/2002 (Ming Xue)
! Fixed a problem that occurs when nstyp>1.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! nx Number of grid points in the x-direction (east/west)
! ny Number of grid points in the y-direction (north/south)
! nz Number of grid points in the vertical
!
! nstyps number of soil types
!
! u x component of velocity at a given time level (m/s)
! v y component of velocity at a given time level (m/s)
! w Vertical component of Cartesian velocity at a given
! time level (m/s)
! ptprt Perturbation potential temperature at a given time
! level (K)
! pprt Perturbation pressure at a given time level (Pascal)
! qv Water vapor specific humidity at a given time level
! (kg/kg)
! qc Cloud water mixing ratio at a given time level (kg/kg)
! qr Rainwater mixing ratio at a given time level (kg/kg)
! qi Cloud ice mixing ratio at a given time level (kg/kg)
! qs Snow mixing ratio at a given time level (kg/kg)
! qh Hail mixing ratio at a given time level (kg/kg)
! tke Turbulent Kinetic Energy ((m/s)**2)
!
! kmh Horizontal turb. mixing coef. for momentum ( m**2/s )
! kmv Vertical turb. mixing coef. for momentum ( m**2/s )
!
! ubar Base state zonal velocity component (m/s)
! vbar Base state meridional velocity component (m/s)
! ptbar Base state potential temperature (K)
! pbar Base state pressure (Pascal)
! rhobar Base state density (kg/m**3)
! qvbar Base state water vapor specific humidity (kg/kg)
!
! 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 (m)
! zp Vertical coordinate of grid points in physical space(m)
! hterain Terrain height (m)
!
! j1 Coordinate transformation Jacobian -d(zp)/dx
! j2 Coordinate transformation Jacobian -d(zp)/dy
! j3 Coordinate transformation Jacobian d(zp)/dz
!
! soiltyp Soil type
! vegtyp Vegetation type
! lai Leaf Area Index
! roufns Surface roughness
! veg Vegetation fraction
!
! tsfc Temperature at ground (K) (in top 1 cm layer)
! tsoil Deep soil temperature (K) (in deep 1 m layer)
! wetsfc Surface soil moisture in the top 1 cm layer
! wetdp Deep soil moisture in the deep 1 m layer
! wetcanp Canopy water amount
!
! raing Grid supersaturation rain
! rainc Cumulus convective rain
!
! OUTPUT:
!
! None.
!
! WORK ARRAY:
!
! tem1 Temporary work array. Used to store data for Vis5D
! write function, which has different order of nx,ny
! tem2 Temporary work array.
!
!
!-----------------------------------------------------------------------
!
! The following parameters are passed into this subroutine through
! a common block in globcst.inc, and they determine which
! variables are output.
!
! varout =0 or 1. If varout=0, model perturbation variables are not
! dumped.
! mstout =0 or 1. If mstout=0, water variables are not dumped.
! rainout=0 or 1. If rainout=0, rain variables are not dumped.
! prcout =0 or 1. If prcout=0, precipitation rates are not dumped.
! iceout =0 or 1. If iceout=0, qi, qs and qh are not dumped.
! tkeout =0 or 1. If tkeout=0, tke is not dumped.
! trbout =0 or 1. If trbout=0, kmh and kmv are not dumped
! sfcout =0 or 1. If sfcout=0, surface variables are not dumped.
! landout=0 or 1. If landout=0, surface property arrays are not dumped.
! radout =0 or 1. If radout=0, radiation arrays are not dumped.
! flxout =0 or 1. If flxout=0, precipitation rates are not dumped.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'v5df.inc'
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
INTEGER :: istgr ! Flag for dumping stager point data
REAL :: u (nx,ny,nz) ! Total u-velocity (m/s)
REAL :: v (nx,ny,nz) ! Total v-velocity (m/s)
REAL :: w (nx,ny,nz) ! Total w-velocity (m/s)
REAL :: ptprt (nx,ny,nz) ! Perturbation potential temperature (K)
REAL :: pprt (nx,ny,nz) ! Perturbation pressure (Pascal)
REAL :: qv (nx,ny,nz) ! Water vapor specific humidity (kg/kg)
REAL :: qc (nx,ny,nz) ! Cloud water mixing ratio (kg/kg)
REAL :: qr (nx,ny,nz) ! Rain water mixing ratio (kg/kg)
REAL :: qi (nx,ny,nz) ! Cloud ice mixing ratio (kg/kg)
REAL :: qs (nx,ny,nz) ! Snow mixing ratio (kg/kg)
REAL :: qh (nx,ny,nz) ! Hail mixing ratio (kg/kg)
REAL :: tke (nx,ny,nz) ! Turbulent Kinetic Energy ((m/s)**2)
REAL :: kmh (nx,ny,nz) ! Horizontal turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: kmv (nx,ny,nz) ! Vertical turb. mixing coef. for
! momentum. ( m**2/s )
REAL :: ubar (nx,ny,nz) ! Base state u-velocity (m/s)
REAL :: vbar (nx,ny,nz) ! Base state v-velocity (m/s)
REAL :: wbar (nx,ny,nz) ! Base state w-velocity (m/s)
REAL :: ptbar (nx,ny,nz) ! Base state potential temperature (K)
REAL :: pbar (nx,ny,nz) ! Base state pressure (Pascal)
REAL :: rhobar(nx,ny,nz) ! Base state air density (kg/m**3)
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific
! humidity(kg/kg)
REAL :: x (nx) ! x-coord. of the physical and
! computational grid. Defined at u-point.
REAL :: y (ny) ! y-coord. of the physical and
! computational grid. Defined at v-point.
REAL :: z (nz) ! z-coord. of the computational grid.
! Defined at w-point on the staggered grid.
REAL :: zp (nx,ny,nz) ! Physical height coordinate defined at
! w-point of the staggered grid.
REAL :: hterain(nx,ny) ! Terrain height.
REAL :: j1 (nx,ny,nz) ! Coordinate transformation Jacobian
! defined as - d( zp )/d( x )
REAL :: j2 (nx,ny,nz) ! Coordinate transformation Jacobian
! defined as - d( zp )/d( y )
REAL :: j3 (nx,ny,nz) ! Coordinate transformation Jacobian
! ddefined as ( zp )/d( z )
INTEGER :: nstyps
INTEGER :: soiltyp(nx,ny,nstyps) ! Soil type
REAL :: stypfrct(nx,ny,nstyps) ! Fraction of soil types
INTEGER :: vegtyp (nx,ny) ! Vegetation type
REAL :: lai (nx,ny) ! Leaf Area Index
REAL :: roufns (nx,ny) ! Surface roughness
REAL :: veg (nx,ny) ! Vegetation fraction
REAL :: tsfc (nx,ny,0:nstyps) ! Temperature at surface (K)
! (in top 1 cm layer)
REAL :: tsoil (nx,ny,0:nstyps) ! Deep soil temperature (K)
! (in deep 1 m layer)
REAL :: wetsfc (nx,ny,0:nstyps) ! Surface soil moisture
REAL :: wetdp (nx,ny,0:nstyps) ! Deep soil moisture
REAL :: wetcanp(nx,ny,0:nstyps) ! Canopy water amount
REAL :: snowdpth(nx,ny) ! Snow depth (m)
REAL :: raing(nx,ny) ! Grid supersaturation rain
REAL :: rainc(nx,ny) ! Cumulus convective rain
REAL :: prcrate(nx,ny,4) ! precipitation rates (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 :: radfrc(nx,ny,nz) ! Radiation forcing (K/s)
REAL :: radsw (nx,ny) ! Solar radiation reaching the surface
REAL :: rnflx (nx,ny) ! Net radiation flux absorbed by surface
REAL :: usflx (nx,ny) ! Surface flux of u-momentum (kg/(m*s**2))
REAL :: vsflx (nx,ny) ! Surface flux of v-momentum (kg/(m*s**2))
REAL :: ptsflx(nx,ny) ! Surface heat flux (K*kg/(m*s**2))
REAL :: qvsflx(nx,ny) ! Surface moisture flux (kg/(m**2*s))
REAL :: tem1 (ny,nx,nz) ! Temporary work array (note the
! order of indexes)
REAL :: tem2 (nx,ny,nz) ! Temporary work array
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
INTEGER :: m, l
INTEGER :: ierr,is, it,iv, nl(maxvars),nr,nc, maxnl
INTEGER :: varnum,numtimes
INTEGER :: dates(maxtimes),times(maxtimes)
INTEGER :: compressmode
CHARACTER (LEN=*) :: filnam
CHARACTER (LEN=10) :: varnam(maxvars)
CHARACTER (LEN=20) :: chrstr
REAL :: proj_args(100)
REAL :: vert_args(maxlevels)
INTEGER :: projection
INTEGER :: vertical
REAL :: latnot(2), x0,y0
REAL :: xbgn,ybgn,zbgn,xinc,yinc,zinc,xmin,xmax,ymin,ymax
INTEGER :: yy,date0,time0,idatime,hh,mm,ss
INTEGER :: mndys(12) ! days for each months
DATA mndys/0,31,59,90,120,151,181,212,243,273,304,334/
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc'
!
!-----------------------------------------------------------------------
DATA numtimes/1/
DATA varnam(1) /'ZP'/
DATA compressmode/1/
!
!-----------------------------------------------------------------------
!
! Calculate time and grid parameters
!
!-----------------------------------------------------------------------
!
varnum = 1
yy = year - 100*(year/100)
date0 = 1000*yy + mndys(month) +day
time0 = 10000*hour + 100*minute + second
dates(1) = date0
idatime = INT(curtim)
hh = idatime/3600
idatime = idatime - 3600*hh
mm = idatime/60
ss = idatime - 60*mm
hh = hh + hour
IF(hh > 24) THEN
hh = hh - 24
dates(1) = dates(1) + 1
END IF
times(1) = 10000*hh+100*mm+ss
nr=ny
nc=nx
DO i=1, varnum
nl(i) = nz
END DO
xbgn = x(2)
ybgn = y(2)
zbgn = z(2)
xinc = (x(2) - x(1))
yinc = (y(2) - y(1))
xmin = xbgn
xmax = x(nx) + xinc
ymin = ybgn
ymax = y(ny) + yinc
!-----------------------------------------------------------------------
!
! Determine projection parameters used in the program
!
!-----------------------------------------------------------------------
IF(mapproj /= 0) THEN
latnot(1) = trulat1
latnot(2) = trulat2
CALL getmapr
(mapproj, sclfct, latnot,trulon,x0,y0)
WRITE(6,*) 'mapproj, sclfct,trulat1,trulat2,trulon:'
WRITE(6,*) mapproj, sclfct,trulat1,trulat2,trulon
WRITE(6,*) 'ctrlat,ctrlon:',ctrlat,ctrlon
WRITE(6,*) 'x0,y0:', x0,y0
IF( trulon > 180.0) trulon = trulon - 360.0
IF(-trulon > 180.0) trulon = trulon + 360.0
trulon = -trulon
END IF
IF(mapproj > 2) THEN
WRITE(6,*) 'mapproj=',mapproj, &
' is not a supported map projection by Vis5D, STOP'
CALL EXIT(1)
END IF
IF(mapproj == 0) THEN ! Linear, rectangular, generic units
projection = 0
proj_args(1) = ymax
proj_args(2) = xmin
proj_args(3) = yinc
! proj_args(4) = -xinc
proj_args(4) = xinc
ELSE IF (mapproj == 1) THEN ! Stereographic projection
! In Vis5D only azimuthal stereographic
! is supported, so the use of this
! projection in ARPS data is only an
! approximation which needs trulat1
! not less than 75 degree
IF(ABS(trulat1) < 75.0) THEN
WRITE(6,*) 'trulat1=',trulat1,' is less than 75deg', &
' which may cause large error'
WRITE(6,*) 'in polar stereographic projection mode, STOP'
CALL EXIT(1)
END IF
projection = 3
proj_args(1) = 90.0
proj_args(2) = trulon
proj_args(3) = y0/yinc + FLOAT(ny-2)
proj_args(4) = -x0/xinc + 2.0
proj_args(5) = xinc/1000.0
ELSE IF (mapproj == 2) THEN ! Lambert conformal projection
projection = 2
IF(trulat1 >= trulat2) THEN
proj_args(1) = trulat1
proj_args(2) = trulat2
ELSE
proj_args(1) = trulat2
proj_args(2) = trulat1
END IF
proj_args(3) = y0/yinc + FLOAT(ny-2)
proj_args(4) = -x0/xinc + 1.0
proj_args(5) = trulon
proj_args(6) = xinc/1000.0
END IF
WRITE(6,*) (proj_args(i),i=1,6)
!-----------------------------------------------------------------------
!
! Determine vertical coordinate parameters used in the program
!
!-----------------------------------------------------------------------
vertical = 2 ! unequally spaced (km)
zinc = (zp(1,1,2)-zp(1,1,1))/2.0
DO k = 1,nz
vert_args(k) = (zp(1,1,k)+zinc)/1000.0
END DO
! write(6,*) 'vertical:',vertical
! write(6,*) 'vert_args(k):'
! write(6,'(i10,f12.4/)') (k,vert_args(k),k=1,nz)
!-----------------------------------------------------------------------
!
! Determine the output fields according to input switches
!
!-----------------------------------------------------------------------
IF ( varout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'U'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'V'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'W'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'UPRT'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'VPRT'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'PT'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'PTPRT'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'P'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'PPRT'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'VORT'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'DIV'
nl(varnum) = nz
END IF
IF ( mstout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'QV'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'QVPRT'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'QC'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'QR'
nl(varnum) = nz
IF ( iceout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'QI'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'QS'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'QH'
nl(varnum) = nz
END IF
IF ( rainout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'RAING'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'RAINC'
nl(varnum) = 1
END IF
IF ( prcout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'PRCRATE1'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'PRCRATE2'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'PRCRATE3'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'PRCRATE4'
nl(varnum) = 1
END IF
END IF
IF ( tkeout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'TKE'
nl(varnum) = nz
END IF
IF ( trbout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'KMH'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'KMV'
nl(varnum) = nz
END IF
IF ( sfcout == 1 ) THEN
IF ( nstyp <= 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'TS'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'T2'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'WG'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'W2'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'WR'
nl(varnum) = 1
ELSE
DO is=0,nstyp
WRITE (chrstr,'(i1)') is
varnum = varnum + 1
varnam(varnum) = 'TS'//chrstr(1:1)
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'T2'//chrstr(1:1)
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'WG'//chrstr(1:1)
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'W2'//chrstr(1:1)
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'WR'//chrstr(1:1)
nl(varnum) = 1
END DO
END IF
varnum = varnum + 1
varnam(varnum) = 'SC'
nl(varnum) = 1
END IF
IF(landout == 1) THEN
IF (nstyp <= 1) THEN
varnum = varnum + 1
varnam(varnum) = 'SOILTY'
nl(varnum) = 1
ELSE
DO is=1,nstyp
WRITE (chrstr,'(i1)') is
varnum = varnum + 1
varnam(varnum) = 'SOILTY'//chrstr(1:1)
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'SOILFR'//chrstr(1:1)
nl(varnum) = 1
END DO
END IF
varnum = varnum + 1
varnam(varnum) = 'VEGTYP'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'LAI'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'ROUFNS'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'VEG'
nl(varnum) = 1
END IF
IF ( radout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'RADFRC'
nl(varnum) = nz
varnum = varnum + 1
varnam(varnum) = 'RADSW'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'RNFLX'
nl(varnum) = 1
END IF
IF ( flxout == 1 ) THEN
varnum = varnum + 1
varnam(varnum) = 'USFLX'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'VSFLX'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'PTSFLX'
nl(varnum) = 1
varnum = varnum + 1
varnam(varnum) = 'QVSFLX'
nl(varnum) = 1
END IF
WRITE(6,*) 'Number of variables to be written: ',varnum
!----------------------------------------------------------------------
!
! Open Vis5D file & write header to it
!
!-----------------------------------------------------------------------
m = v5dcreate (filnam, numtimes, varnum, nr, nc, nl, &
varnam, times, dates, compressmode, &
projection, proj_args, vertical, vert_args)
IF (m == 0) THEN
CALL EXIT(1)
END IF
maxnl = nl(1)
DO i = 1, varnum
IF(nl(i) > maxnl) THEN
maxnl = nl(i)
END IF
END DO
!----------------------------------------------------------------------
!
! Output data to Vis5D file
!
!-----------------------------------------------------------------------
DO it = 1, numtimes
DO iv = 1, varnum
DO k=1,nz
DO i=1,nx
DO j=1,ny
tem1(j,i,k) = 0.0
tem2(i,j,k) = 0.0
END DO
END DO
END DO
IF(varnam(iv) == 'ZP') THEN
CALL v5dsetunits(iv, "m\0")
CALL edgfill
(zp ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
IF ( istgr == 0 ) THEN
DO j=1,ny
DO i=1,nx
DO k=1,nz-1
tem2(i,j,k) = .5 * ( zp(i,j,k) + zp(i,j,k+1) )
END DO
tem2(i,j,nz) = zp(i,j,nz)
END DO
END DO
ELSE
DO j=1,ny
DO i=1,nx
DO k=1,nz
tem2(i,j,k) = zp(i,j,k)
END DO
END DO
END DO
END IF
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'U') THEN
CALL v5dsetunits(iv, "m/s\0")
CALL edgfill
(u, 1,nx,1,nx, 1,ny,1,ny-1, 1,nz,1,nz-1)
IF ( istgr == 0 ) THEN
DO k=1,nz
DO j=1,ny
DO i=1,nx-1
tem2(i,j,k) = .5 * ( u(i,j,k) + u(i+1,j,k) )
END DO
tem2(nx,j,k) = u(nx,j,k)
END DO
END DO
ELSE
DO k=1,nz
DO j=1,ny
DO i=1,nx
tem2(i,j,k) = u(i,j,k)
END DO
END DO
END DO
END IF
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'V') THEN
CALL v5dsetunits(iv, "m/s\0")
CALL edgfill
(v, 1,nx,1,nx-1, 1,ny,1,ny, 1,nz,1,nz-1)
IF ( istgr == 0 ) THEN
DO k=1,nz
DO i=1,nx
DO j=1,ny-1
tem2(i,j,k) = .5 * ( v(i,j,k) + v(i,j+1,k) )
END DO
tem2(i,ny,k) = v(i,ny,k)
END DO
END DO
ELSE
DO k=1,nz
DO j=1,ny
DO i=1,nx
tem2(i,j,k) = v(i,j,k)
END DO
END DO
END DO
END IF
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'UPRT') THEN
CALL v5dsetunits(iv, "m/s\0")
CALL edgfill
(ubar,1,nx,1,nx, 1,ny,1,ny-1, 1,nz,1,nz-1)
IF ( istgr == 0 ) THEN
DO k=1,nz
DO j=1,ny
DO i=1,nx-1
tem2(i,j,k) = .5 * ( u(i,j,k) + u(i+1,j,k) ) &
- .5 * ( ubar(i,j,k) + ubar(i+1,j,k) )
END DO
tem2(nx,j,k) = u(nx,j,k) - ubar(nx,j,k)
END DO
END DO
ELSE
DO k=1,nz
DO j=1,ny
DO i=1,nx
tem2(i,j,k) = u(i,j,k) - ubar(i,j,k)
END DO
END DO
END DO
END IF
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'VPRT') THEN
CALL v5dsetunits(iv, "m/s\0")
CALL edgfill
(vbar,1,nx,1,nx-1, 1,ny,1,ny, 1,nz,1,nz-1)
IF ( istgr == 0 ) THEN
DO k=1,nz
DO i=1,nx
DO j=1,ny-1
tem2(i,j,k) = .5 * ( v(i,j,k) + v(i,j+1,k) ) &
- .5 * ( vbar(i,j,k) + vbar(i,j+1,k) )
END DO
tem2(i,ny,k) = v(i,ny,k) - vbar(i,ny,k)
END DO
END DO
ELSE
DO k=1,nz
DO j=1,ny
DO i=1,nx
tem2(i,j,k) = v(i,j,k) - vbar(i,j,k)
END DO
END DO
END DO
END IF
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'W') THEN
CALL v5dsetunits(iv, "m/s\0")
CALL edgfill
(w ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz)
IF ( istgr == 0 ) THEN
DO j=1,ny
DO i=1,nx
DO k=1,nz-1
tem2(i,j,k) = .5 * ( w(i,j,k) + w(i,j,k+1) )
END DO
tem2(i,j,nz) = w(i,j,nz)
END DO
END DO
ELSE
DO j=1,ny
DO i=1,nx
DO k=1,nz
tem2(i,j,k) = w(i,j,k)
END DO
END DO
END DO
END IF
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'PT') THEN
CALL v5dsetunits(iv, "K\0")
CALL edgfill
(ptprt,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
CALL edgfill
(ptbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = ptprt(i,nr-j+1,k)+ptbar(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'PTPRT') THEN
CALL v5dsetunits(iv, "K\0")
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = ptprt(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'P') THEN
CALL v5dsetunits(iv, "mb\0")
CALL edgfill
(pprt,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
CALL edgfill
(pbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 0.01*(pprt(i,nr-j+1,k)+pbar(i,nr-j+1,k))
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'PPRT') THEN
CALL v5dsetunits(iv, "mb\0")
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 0.01*pprt(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'VORT') THEN
CALL v5dsetunits(iv, "1/s\0")
DO k=2,nz-2
DO j=2,ny-2
DO i=2,nx-2
tem2(i,j,k)= &
(v(i+1,j,k)-v(i-1,j,k)+v(i+1,j+1,k)-v(i-1,j+1,k))/ &
(4*(x(i+1)-x(i)))- &
(u(i,j+1,k)-u(i,j-1,k)+u(i+1,j+1,k)-u(i+1,j-1,k))/ &
(4*(y(j+1)-y(j)))
END DO
END DO
END DO
DO j=2,ny-2
DO i=2,nx-2
tem2(i,j, 1)=tem2(i,j, 2)
tem2(i,j,nz-1)=tem2(i,j,nz-2)
END DO
END DO
DO k=1,nz-1
DO j=2,ny-2
tem2( 1,j,k)=tem2( 2,j,k)
tem2(nx-1,j,k)=tem2(nx-2,j,k)
END DO
END DO
DO k=1,nz-1
DO i=1,nx-1
tem2(i, 1,k)=tem2(i, 2,k)
tem2(i,ny-1,k)=tem2(i,ny-2,k)
END DO
END DO
CALL edgfill
(tem2,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'DIV') THEN
CALL v5dsetunits(iv, "1/s\0")
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
tem2(i,j,k) = (u(i+1,j,k)-u(i,j,k))/(x(i+1)-x(i)) &
+ (v(i,j+1,k)-v(i,j,k))/(y(j+1)-y(j))
END DO
END DO
END DO
CALL edgfill
(tem2,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tem2(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'QV') THEN
CALL v5dsetunits(iv, "g/kg\0")
CALL edgfill
(qv, 1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 1000.*qv(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'QVPRT') THEN
CALL v5dsetunits(iv, "g/kg\0")
CALL edgfill
(qvbar,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 1000.*(qv(i,nr-j+1,k) - qvbar(i,j,k))
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'QC') THEN
CALL v5dsetunits(iv, "g/kg\0")
CALL edgfill
(qc, 1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 1000.*qc(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'QR') THEN
CALL v5dsetunits(iv, "g/kg\0")
CALL edgfill
(qr,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 1000.*qr(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'QI') THEN
CALL v5dsetunits(iv, "g/kg\0")
CALL edgfill
(qi,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 1000.*qi(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'QS') THEN
CALL v5dsetunits(iv, "g/kg\0")
CALL edgfill
(qs,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 1000.*qs(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'QH') THEN
CALL v5dsetunits(iv, "g/kg\0")
CALL edgfill
(qh,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = 1000.*qh(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'RAING') THEN
CALL v5dsetunits(iv, "mm\0")
CALL edgfill
(raing,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = raing(i,nr-j+1)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'RAINC') THEN
CALL v5dsetunits(iv, "mm\0")
CALL edgfill
(rainc,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = rainc(i,nr-j+1)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'PRCRATE1') THEN
CALL v5dsetunits(iv, "kg/m**2/s\0")
CALL edgfill
(prcrate(1,1,1),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = prcrate(i,nr-j+1,1)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'PRCRATE2') THEN
CALL v5dsetunits(iv, "kg/m**2/s\0")
CALL edgfill
(prcrate(1,1,2),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = prcrate(i,nr-j+1,2)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'PRCRATE3') THEN
CALL edgfill
(prcrate(1,1,3),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1)
CALL v5dsetunits(iv, "kg/m**2/s\0")
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = prcrate(i,nr-j+1,3)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'PRCRATE4') THEN
CALL v5dsetunits(iv, "kg/m**2/s\0")
CALL edgfill
(prcrate(1,1,4),1,nx,1,nx-1,1,ny,1,ny-1,1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = prcrate(i,nr-j+1,4)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'TKE') THEN
CALL v5dsetunits(iv, "m**2/s\0")
CALL edgfill
(tke,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tke(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'KMH') THEN
CALL v5dsetunits(iv, "m**2/s\0")
CALL edgfill
(kmh,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = kmh(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'KMV') THEN
CALL v5dsetunits(iv, "m**2/s\0")
CALL edgfill
(kmv,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = kmv(i,nr-j+1,k)
END DO
END DO
END DO
END IF
IF ( sfcout == 1 ) THEN
IF (nstyp <= 1) THEN
IF(varnam(iv) == 'TS') THEN
CALL v5dsetunits(iv, "K\0")
CALL edgfill
(tsfc(1,1,0), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tsfc(i,nr-j+1,0)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'T2') THEN
CALL v5dsetunits(iv, "K\0")
CALL edgfill
(tsoil(1,1,0), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tsoil(i,nr-j+1,0)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'WG') THEN
CALL v5dsetunits(iv, "m**3/m**3\0")
CALL edgfill
(wetsfc(1,1,0), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = wetsfc(i,nr-j+1,0)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'W2') THEN
CALL v5dsetunits(iv, "m**3/m**3\0")
CALL edgfill
(wetdp(1,1,0), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = wetdp(i,nr-j+1,0)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'WR') THEN
CALL v5dsetunits(iv, "m\0")
CALL edgfill
(wetcanp(1,1,0), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = wetcanp(i,nr-j+1,0)
END DO
END DO
END DO
END IF
ELSE
IF(varnam(iv)(1:2) == 'TS') THEN
READ(varnam(iv)(3:3), '(i1)') l
CALL v5dsetunits(iv, "K\0")
CALL edgfill
(tsfc(1,1,l), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tsfc(i,nr-j+1,l)
END DO
END DO
END DO
ELSE IF(varnam(iv)(1:2) == 'T2') THEN
READ(varnam(iv)(3:3), '(i1)') l
CALL v5dsetunits(iv, "K\0")
CALL edgfill
(tsoil(1,1,l), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = tsoil(i,nr-j+1,l)
END DO
END DO
END DO
ELSE IF(varnam(iv)(1:2) == 'WG') THEN
READ(varnam(iv)(3:3), '(i1)') l
CALL v5dsetunits(iv, "m**3/m**3\0")
CALL edgfill
(wetsfc(1,1,l), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = wetsfc(i,nr-j+1,l)
END DO
END DO
END DO
ELSE IF(varnam(iv)(1:2) == 'W2') THEN
READ(varnam(iv)(3:3), '(i1)') l
CALL v5dsetunits(iv, "m**3/m**3\0")
CALL edgfill
(wetdp(1,1,l), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = wetdp(i,nr-j+1,l)
END DO
END DO
END DO
ELSE IF(varnam(iv)(1:2) == 'WR') THEN
READ(varnam(iv)(3:3), '(i1)') l
CALL v5dsetunits(iv, "m\0")
CALL edgfill
(wetcanp(1,1,l), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = wetcanp(i,nr-j+1,l)
END DO
END DO
END DO
END IF
END IF
IF(snowout == 1) THEN
IF (varnam(iv)(1:2) == 'SD') THEN
CALL v5dsetunits(iv, "index\0")
CALL edgfill
(snowdpth,1,nx,1,nx-1, 1,ny,1,ny-1,1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = snowdpth(i,nr-j+1)
END DO
END DO
END DO
END IF
END IF
END IF ! End sfcout
IF(landout == 1) THEN
IF (nstyp <= 1) THEN
IF(varnam(iv) == 'SOILTY') THEN
CALL v5dsetunits(iv, "index\0")
CALL iedgfill
(soiltyp(1,1,1),1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = soiltyp(i,nr-j+1,1)
END DO
END DO
END DO
END IF
ELSE
IF(varnam(iv)(1:6) == 'SOILTY') THEN
READ(varnam(iv)(7:7), '(i1)') l
CALL v5dsetunits(iv, "index\0")
CALL edgfill
(soiltyp(1,1,l), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = soiltyp(i,nr-j+1,l)
END DO
END DO
END DO
ELSE IF(varnam(iv)(1:6) == 'SOILFR') THEN
READ(varnam(iv)(7:7), '(i1)') l
CALL v5dsetunits(iv, "fraction\0")
CALL edgfill
(stypfrct(1,1,l), 1,nx,1,nx-1, 1,ny,1,ny-1, &
1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = stypfrct(i,nr-j+1,l)
END DO
END DO
END DO
END IF
END IF
IF(varnam(iv) == 'VEGTYP') THEN
CALL v5dsetunits(iv, "index\0")
CALL iedgfill
(vegtyp ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = vegtyp(i,nr-j+1)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'LAI') THEN
CALL edgfill
(lai ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = lai(i,nr-j+1)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'ROUFNS') THEN
CALL v5dsetunits(iv, "m\0")
CALL edgfill
(roufns ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = roufns(i,nr-j+1)
END DO
END DO
END DO
ELSE IF(varnam(iv) == 'VEG') THEN
CALL v5dsetunits(iv, "fraction\0")
CALL edgfill
(veg ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = veg(i,nr-j+1)
END DO
END DO
END DO
END IF
END IF ! End landout
IF ( varnam(iv) == 'RADFRC' ) THEN
CALL v5dsetunits(iv, "K/s\0")
CALL edgfill
(radfrc ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,nz,1,nz-1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = radfrc(i,nr-j+1,k)
END DO
END DO
END DO
ELSE IF ( varnam(iv) == 'RADSW' ) THEN
CALL v5dsetunits(iv, "W/m**2\0")
CALL edgfill
(radsw ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = radsw(i,nr-j+1)
END DO
END DO
END DO
ELSE IF ( varnam(iv) == 'RNFLX' ) THEN
CALL v5dsetunits(iv, "W/m**2\0")
CALL edgfill
(rnflx ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = rnflx(i,nr-j+1)
END DO
END DO
END DO
ELSE IF ( varnam(iv) == 'USFLX' ) THEN
CALL v5dsetunits(iv, "kg/(m*s**2)\0")
CALL edgfill
(usflx ,1,nx,1,nx, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = usflx(i,nr-j+1)
END DO
END DO
END DO
ELSE IF ( varnam(iv) == 'VSFLX' ) THEN
CALL v5dsetunits(iv, "kg/(m*s**2)\0")
CALL edgfill
(vsflx ,1,nx,1,nx-1, 1,ny,1,ny, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = vsflx(i,nr-j+1)
END DO
END DO
END DO
ELSE IF ( varnam(iv) == 'PTSFLX' ) THEN
CALL v5dsetunits(iv, "K*kg/(m**2*s)\0")
CALL edgfill
(ptsflx ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = ptsflx(i,nr-j+1)
END DO
END DO
END DO
ELSE IF ( varnam(iv) == 'QVSFLX' ) THEN
CALL v5dsetunits(iv, "kg/(m**2*s)\0")
CALL edgfill
(qvsflx ,1,nx,1,nx-1, 1,ny,1,ny-1, 1,1,1,1)
DO k=1,nl(iv)
DO i=1,nc
DO j=1,nr
tem1(j,i,k) = qvsflx(i,nr-j+1)
END DO
END DO
END DO
END IF
m = v5dwrite(it,iv,tem1)
IF(m == 0) THEN
CALL EXIT(1)
END IF
END DO ! enddo of iv
END DO ! enddo of it
!
!----------------------------------------------------------------------
!
! End of putput, close the file & return
!
!-----------------------------------------------------------------------
m = v5dclose()
IF(m == 0) THEN
CALL EXIT(1)
END IF
RETURN
END SUBROUTINE v5ddump