PROGRAM arpsprt,30
!
!##################################################################
!##################################################################
!###### ######
!###### PROGRAM ARPSPRT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Program to examine ARPS grids that have been saved as
! history files. This prints out the variables to a file or
! screen.
!
! It shares with the model the include files 'globcst.inc'
! for storage parameters.
!
! It reads in a history file produced by ARPS 3.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 OU School of Meteorology. April 1992
!
! MODIFICATION HISTORY:
! 14 May 1992 (KB) changed from arps2.5 to arps3.0
! 03 Aug 1992 (KB) updated to account for changes in arps3.0
!
! 8/27/1992 (M. Xue)
! To call dtaread to read new data format.
!
! 8/30/1992 (K. Brewster)
! Moved label 101 so that grid file name is not reentered for
! second and subsequent data reads.
!
! 9/1/94 (Y. Lu)
! Cleaned up documentation.
!
! 10/11/1994 (K. Brewster)
! Further update for dtaread.
!
!-----------------------------------------------------------------------
!
! 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.
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations:
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.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 :: 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 :: 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(:,:,:)
!
!-----------------------------------------------------------------------
!
! User request stuff
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=80) :: inline(5)
INTEGER :: maxpar
PARAMETER (maxpar=10)
CHARACTER (LEN=2) :: params(maxpar)
INTEGER :: islice(5),jslice(5),kslice(5)
INTEGER :: nparams,ip
INTEGER :: ireply(5)
INTEGER :: nreply
!
!-----------------------------------------------------------------------
!
! Misc internal variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,ireturn,mode,nm
!
CHARACTER (LEN=80) :: filename
CHARACTER (LEN=80) :: grdbasfn
CHARACTER (LEN=25) :: title
INTEGER :: lenfil,lengbf
!
INTEGER :: iplot(3,5)
INTEGER :: ib(3),ie(3),jb(3),je(3),kb(3),ke(3)
INTEGER :: nchin
INTEGER :: istatus
!-----------------------------------------------------------------------
!
! NAMELIST definition
!
!-----------------------------------------------------------------------
NAMELIST /grid_dims/ nx, ny, nz
NAMELIST /input_fn/ hdmpfmt, grdbasfn, filename
NAMELIST /field_number/ nreply
NAMELIST /plot_options/ ireply, inline, iplot, kslice, jslice, islice
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! 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) ! read in the dimensions
WRITE(6,'(/a,a)') 'Namelist block grid_dims successfully read.'
!-----------------------------------------------------------------------
!
! Allocate variables and initialize to zero
!
!-----------------------------------------------------------------------
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(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
!
!-----------------------------------------------------------------------
!
! A few initializations
!
!-----------------------------------------------------------------------
DO mode=1,3
ib(mode)=2
ie(mode)=nx-2
jb(mode)=2
je(mode)=ny-2
kb(mode)=2
ke(mode)=nz-2
END DO
!
!-----------------------------------------------------------------------
!
! Get the name of the input data set.
!
!-----------------------------------------------------------------------
!
READ(5,input_fn,END=100)
WRITE(6,'(/a,a)')' Namelist block input_fn successfully read.'
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
!-----------------------------------------------------------------------
!
! Determine how many variables to process
!
!-----------------------------------------------------------------------
READ(5,field_number,END=100)
WRITE(6,'(/a,a)') 'Namelist block field_number successfully read.'
!
!-----------------------------------------------------------------------
!
! Determine variables to plot
!
!-----------------------------------------------------------------------
!
READ(5,plot_options,END=100)
WRITE(6,'(/a,a)') 'Namelist block plot_options successfully read.'
DO nm=1,nreply
IF( ireply(nm) /= 1) THEN
CALL strcap
(inline(nm),inline(nm),80)
WRITE(6,'(a,/a80)') ' inline: ',inline(nm)
CALL parsln
(inline(nm),params,80,maxpar,nparams)
WRITE(6,'(a,i4,a,20a)') &
' read ',nparams,' params: ', (params(ip),ip=1,nparams)
WRITE(6,'(a)') ' '
IF( kslice(nm) <= 0) kslice(nm) = (nz-2)/2+1
IF( jslice(nm) <= 0) jslice(nm) = (ny-2)/2+1
IF( islice(nm) <= 0) islice(nm) = (nx-2)/2+1
ELSE
nparams=5
params(1)='uu'
params(2)='vv'
params(3)='ww'
params(4)='TH'
params(5)='PR'
!
!-----------------------------------------------------------------------
!
! Set the printing parameter for each mode
!
!-----------------------------------------------------------------------
!
iplot(1,nm)=1 ! control for plotting x-y slice
iplot(2,nm)=1 ! control for plotting x-z slice
iplot(3,nm)=0 ! control for plotting y-z slice
kslice(nm) = 3
jslice(nm) = (ny-2)/2+1
islice(nm) = 8
END IF
!
!-----------------------------------------------------------------------
!
! Transfer the islice info into the ib,ie vectors
! Likewise for j and k
!
!-----------------------------------------------------------------------
!
kb(1)=kslice(nm)
ke(1)=kslice(nm)
jb(2)=jslice(nm)
je(2)=jslice(nm)
ib(3)=islice(nm)
ie(3)=islice(nm)
!
!-----------------------------------------------------------------------
!
! Calculate total fields from that for base state and perturbations
!
!-----------------------------------------------------------------------
!
DO k=1,nz
DO j=1,ny
DO i=1,nx
u(i,j,k)=uprt(i,j,k)+ubar(i,j,k)
v(i,j,k)=vprt(i,j,k)+vbar(i,j,k)
w(i,j,k)=wprt(i,j,k)+wbar(i,j,k)
pt(i,j,k)=ptprt(i,j,k)+ptbar(i,j,k)
qv(i,j,k)=qvprt(i,j,k)+qvbar(i,j,k)
END DO
END DO
END DO
!
!-----------------------------------------------------------------------
!
! Loop through three plotting modes
! producing x-y, x-z and y-z slices of 2-d plotting each time.
! If iplot(mode)=0, plotting is skipped.
!
!-----------------------------------------------------------------------
!
DO mode = 1, 3
WRITE(6,'(a,i3)') 'mode =',mode
IF( iplot(mode,nm) /= 0 ) THEN
DO ip=1,nparams
WRITE(6,'(a,i4,a,a2)') &
' ip= ',ip,' param= ',params(ip)
IF (params(ip) == 'uu') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'u'
CALL wrigar
(u, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'vv') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'v'
CALL wrigar
(v, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'ww') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'w'
CALL wrigar
(w, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'pt') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'pt'
CALL wrigar
(pt, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'pp') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'pprt '
CALL wrigar
(pprt , &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qv') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qv'
CALL wrigar
(qv, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qc') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qc'
CALL wrigar
(qc, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qr') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qr'
CALL wrigar
(qr, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qi') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qi'
CALL wrigar
(qi, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qs') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qs'
CALL wrigar
(qs, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qh') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qh'
CALL wrigar
(qh, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
!
!-----------------------------------------------------------------------
!
! Perturbation quantities
!
!-----------------------------------------------------------------------
!
ELSE IF (params(ip) == 'up') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'uprt '
CALL wrigar
(uprt , &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'vp') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'vprt '
CALL wrigar
(vprt , &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'wp') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'wprt '
CALL wrigar
(wprt , &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'tp') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'ptprt'
CALL wrigar
(ptprt, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qp') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qvprt '
CALL wrigar
(qvprt , &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'ub') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'u base'
CALL wrigar
(ubar, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'vb') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'v base'
CALL wrigar
(vbar, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'wb') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'w base'
CALL wrigar
(wbar, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'tb') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'thbase'
CALL wrigar
(ptbar, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'pb') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'pbar'
CALL wrigar
(pbar, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'qb') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'qvbase'
CALL wrigar
(qvbar, &
1,nx,1,ny,1,nz,ib(mode),ie(mode), &
jb(mode),je(mode),kb(mode),ke(mode), &
title,0.,mode)
ELSE IF (params(ip) == 'st') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'sfc t'
CALL wrigar
( tsfc, &
1,nx,1,ny,1,1,ib(mode),ie(mode), &
jb(mode),je(mode),1,1, &
title,0.,mode)
ELSE IF (params(ip) == 'LT') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'soil t'
CALL wrigar
( tsoil, &
1,nx,1,ny,1,1,ib(mode),ie(mode), &
jb(mode),je(mode),1,1, &
title,0.,mode)
ELSE IF (params(ip) == 'sm') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'wetsfc'
CALL wrigar
( wetsfc, &
1,nx,1,ny,1,1,ib(mode),ie(mode), &
jb(mode),je(mode),1,1, &
title,0.,mode)
ELSE IF (params(ip) == 'lm') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'wetdp '
CALL wrigar
( wetdp, &
1,nx,1,ny,1,1,ib(mode),ie(mode), &
jb(mode),je(mode),1,1, &
title,0.,mode)
ELSE IF (params(ip) == 'cm') THEN
WRITE(title,'(a6,1x,a)') runname(1:6),'wetcan'
CALL wrigar
( wetcanp, &
1,nx,1,ny,1,1,ib(mode),ie(mode), &
jb(mode),je(mode),1,1, &
title,0.,mode)
END IF
END DO
END IF ! iplot(mode).NE.0
END DO
END DO ! nm
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 arpsprt