!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE INITPLTPARA ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE initpltpara(nx,ny,nz,nzsoil,nstyps) 1,1250
!
!-----------------------------------------------------------------------
!
! This is the subroutine to initilize ARPSPLT parameter from the
! namelist input file arpsplt.input
!
!-----------------------------------------------------------------------
!
! AUTHOR: Yunheng Wang, CAPS/OU.
! 12/17/2002.
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
!-----------------------------------------------------------------------
!
! Variable Declarations:
!
!-----------------------------------------------------------------------
!
INTEGER :: nx,ny,nz ! Grid dimensions.
INTEGER :: nzsoil ! levels of soil model
INTEGER :: nstyps ! Maximum number of soil types.
INTEGER, PARAMETER :: nhisfile_max=200
INTEGER, PARAMETER :: max_dim = 200
INTEGER, PARAMETER :: fzone = 3
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'indtflg.inc'
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc'
INCLUDE 'phycst.inc'
INCLUDE 'arpsplt.inc'
INCLUDE 'alloc.inc'
INCLUDE 'mp.inc'
!-----------------------------------------------------------------------
!
! Variables for mpi jobs
!
!-----------------------------------------------------------------------
INTEGER :: nprocx_in, nprocy_in ! number of processors in input data
INTEGER :: ncompressx, ncompressy ! compression in x and y direction:
! ncompressx=nprocx_in/nproc_x
! ncompressy=nprocy_in/nproc_y
INTEGER :: nproc_node
NAMELIST /message_passing/ nproc_x, nproc_y, max_fopen, nproc_node, &
readsplit, nprocx_in, nprocy_in
COMMON /init1_mpi/ ncompressx, ncompressy, nproc_node
!-----------------------------------------------------------------------
!
! Variables in NAMELISTs
!
!-----------------------------------------------------------------------
INTEGER :: hinfmt, nhisfile
CHARACTER (LEN=256) :: grdbasfn
CHARACTER (LEN=256) :: hisfile(nhisfile_max)
! base name, DONOT contain processor info.
COMMON /init2_hisf/ hinfmt,nhisfile, grdbasfn, hisfile
INTEGER :: layout,nxpic,nypic,inwfrm
REAL :: paprlnth
NAMELIST /page_setup/ layout, nxpic, nypic, inwfrm,paprlnth
COMMON /init3_page/ layout, inwfrm, paprlnth
INTEGER :: iorig
REAL :: xbgn,xend,ybgn,yend,zbgn,zend,zsoilbgn,zsoilend
REAL :: yxstrch ! Stretching factor for x-y plots
REAL :: zxstrch ! Stretching factor for x-z plots
REAL :: zystrch ! Stretching factor for y-z plots
REAL :: zhstrch ! Stretching factor for arbitrary vertical slices
REAL :: zsoilxstrch ! Stretching factor for x-z plots for the soil model
REAL :: zsoilystrch ! Stretching factor for y-z plots for the soil model
REAL :: winsiz ! A global factor for window size
REAL :: margnx, margny ! margin
INTEGER :: pcolbar ! position of color bar
NAMELIST /plotting_setup/ iorig, xorig, yorig, &
xbgn, xend, ybgn, yend, zbgn, zend, zsoilbgn, zsoilend, &
yxstrch, zxstrch, zystrch, zhstrch, zsoilxstrch, zsoilystrch, &
winsiz, margnx, margny,pcolbar
COMMON /init4_plotset/ iorig,zbgn,zend,zsoilbgn,zsoilend, &
yxstrch,zxstrch,zystrch, &
zhstrch,zsoilxstrch,zsoilystrch, &
margnx,margny
COMMON /pltwdw/ xbgn,xend,ybgn,yend
COMMON /windows/ winsiz
INTEGER :: col_table
CHARACTER (LEN=80) :: color_map
NAMELIST /col_table_cntl/ col_table,color_map
COMMON /init5_coltab/ color_map
COMMON /coltable/col_table,pcolbar
INTEGER :: lnmag,fontopt,lbaxis,axlbfmt
INTEGER :: haxisu, vaxisu
INTEGER :: tickopt
INTEGER :: presaxis_no
INTEGER :: ctrlbopt, ctrstyle, ctrlbfrq
INTEGER :: lbmaskopt
REAL :: lblmag ! A global magnification factor for labels.
REAL :: ctrlbsiz, axlbsiz
REAL :: hmintick,vmajtick,vmintick,hmajtick
REAL :: pres_val(20), pres_z(20)
NAMELIST /style_tuning/ lblmag,lnmag, fontopt, &
lbaxis,axlbfmt,axlbsiz, haxisu, vaxisu, &
tickopt,hmintick,vmajtick,vmintick,hmajtick, &
presaxis_no,pres_val, &
ctrlbopt,ctrstyle,ctrlbfrq,ctrlbsiz,lbmaskopt
COMMON /init6_style/ lnmag, ctrlbopt, ctrstyle
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
COMMON /var_par/ fontopt,haxisu, vaxisu,lbaxis,tickopt, &
hmintick,vmajtick,vmintick,hmajtick,axlbfmt
COMMON /pressbar_par/presaxis_no,pres_val,pres_z
COMMON /clb_frq/ ctrlbfrq
INTEGER :: smooth
NAMELIST /smooth_cntl/ smooth
COMMON /smoothopt/smooth
INTEGER :: ntitle,titcol, wpltime
REAL :: titsiz
CHARACTER (LEN=256) :: title(3), footer_l, footer_c, footer_r
NAMELIST /title_setup/ntitle,titcol,titsiz,title
NAMELIST /footer_setup/wpltime,footer_l,footer_c, footer_r
COMMON /titpar1/title, footer_l, footer_c, footer_r
COMMON /titpar2/ntitle,titcol,wpltime, nxpic, nypic
COMMON /titpar3/titsiz
INTEGER :: ovrmap,mapgrid,mapgridcol,nmapfile,mapcol(maxmap), &
mapline_style(maxmap)
REAL :: latgrid,longrid
CHARACTER (LEN=256) :: mapfile(maxmap)
NAMELIST /map_plot/ ovrmap,mapgrid,latgrid,longrid,mapgridcol, &
nmapfile,mapfile,mapcol,mapline_style
COMMON /mappar / ovrmap
COMMON /mappar1/ nmapfile,mapcol,mapline_style,mapfile
COMMON /mappar2/ mapgrid,mapgridcol, latgrid,longrid
INTEGER :: missfill_opt,missval_colind ! miss value color index
NAMELIST /multi_setup/ missfill_opt,missval_colind
COMMON /multi_value/ missfill_opt, missval_colind
INTEGER :: nslice_xy, slice_xy(max_dim)
INTEGER :: nslice_xz, slice_xz(max_dim)
INTEGER :: nslice_yz, slice_yz(max_dim)
INTEGER :: nslice_h, nslice_p, nslice_pt, nslice_v
REAL :: slice_h(max_dim), slice_p(max_dim), slice_pt(max_dim)
REAL :: xpnt1(max_dim),ypnt1(max_dim),xpnt2(max_dim),ypnt2(max_dim)
INTEGER :: nslice_xy_soil, slice_xy_soil(max_dim)
INTEGER :: nslice_xz_soil, slice_xz_soil(max_dim)
INTEGER :: nslice_yz_soil, slice_yz_soil(max_dim)
NAMELIST /xy_slice_cntl/ nslice_xy, slice_xy
NAMELIST /xz_slice_cntl/ nslice_xz, slice_xz
NAMELIST /yz_slice_cntl/ nslice_yz, slice_yz
NAMELIST /h_slice_cntl/ nslice_h, slice_h
NAMELIST /v_slice_cntl/ nslice_v, xpnt1,ypnt1,xpnt2,ypnt2
NAMELIST /p_slice_cntl/ nslice_p, slice_p
NAMELIST /pt_slice_cntl/ nslice_pt, slice_pt
NAMELIST /xy_soil_slice_cntl/ nslice_xy_soil, slice_xy_soil
NAMELIST /xz_soil_slice_cntl/ nslice_xz_soil, slice_xz_soil
NAMELIST /yz_soil_slice_cntl/ nslice_yz_soil, slice_yz_soil
COMMON /init7_slice/ nslice_xy, nslice_xz, nslice_yz, nslice_h, &
nslice_v, nslice_p, nslice_pt, &
nslice_xy_soil, nslice_xz_soil, nslice_yz_soil, &
slice_xy, slice_xz, slice_yz, slice_h, &
slice_p, slice_pt, xpnt1, ypnt1, xpnt2, ypnt2, &
slice_xy_soil, slice_xz_soil, slice_yz_soil, &
imove
INTEGER :: imove
NAMELIST /domain_move/ imove, umove, vmove
!-----------------------------------------------------------------------
!
! *inc -- Contour intervals
! *minc,*maxc -- Limited variable minimum and maximum for color
! contour shade
! *ovr -- Overlay control parameters
! *hlf -- highlighting frequency for contour parameters
! *zro -- define the attributes of zero contour to be plotted
! parameters
! *sty -- Define the option for contour line stypes.
!
!-----------------------------------------------------------------------
INTEGER :: hplot, msfplt, thkplt, tplot, uplot, vplot, vhplot, vsplot,&
wplot, ptplot, pplot, ipvplt
REAL :: hinc, msfinc, thkinc, tinc, uinc, vinc, vhinc, vsinc, &
winc, ptinc, pinc, ipvinc
REAL :: hminc, msfminc, thkminc, tminc, uminc, vminc, vhminc, vsminc, &
wminc, ptminc, pminc, ipvminc
REAL :: hmaxc, msfmaxc, thkmaxc, tmaxc, umaxc, vmaxc, vhmaxc, vsmaxc, &
wmaxc, ptmaxc, pmaxc, ipvmaxc
INTEGER :: hovr, msfovr, thkovr, tovr, uovr, vovr, vhovr, vsovr, &
wovr , ptovr , povr, ipvovr
INTEGER :: hcol1, msfcol1, thkcol1, tcol1, ucol1, vcol1, vhcol1, vscol1, &
wcol1 , ptcol1 , pcol1, ipvcol1
INTEGER :: hcol2, msfcol2, thkcol2, tcol2, ucol2, vcol2, vhcol2, vscol2, &
wcol2 , ptcol2 , pcol2, ipvcol2
INTEGER :: hprio, msfprio, thkprio, tprio, uprio, vprio, vhprio, vsprio, &
wprio , ptprio , pprio, ipvprio
INTEGER :: hhlf, msfhlf, thkhlf, thlf, uhlf, vhlf, vhhlf, vshlf, &
whlf , pthlf , phlf, ipvhlf
INTEGER :: hzro, msfzro, thkzro, tzro, uzro, vzro, vhzro, vszro, &
wzro , ptzro , pzro, ipvzro
INTEGER :: hsty, msfsty, thksty, tsty, usty, vsty, vhsty, vssty, &
wsty , ptsty , psty, ipvsty
CHARACTER (LEN=1) :: tunits ! units for temperature F or C
INTEGER :: vhunits
NAMELIST /sclrplt_cntl1/ &
hplot, hinc, hminc, hmaxc, hovr, hcol1,hcol2, hprio, &
hhlf, hzro, hsty, &
msfplt,msfinc,msfminc, msfmaxc,msfovr,msfcol1,msfcol2,msfprio, &
msfhlf, msfzro, msfsty, &
thkplt,thkinc,thkminc, thkmaxc,thkovr,thkcol1,thkcol2,thkprio, &
thkhlf, thkzro, thksty, &
tplot, tinc, tminc, tmaxc, tovr, tcol1,tcol2, tprio, &
tunits, thlf, tzro, tsty, &
uplot, uinc, uminc, umaxc, uovr, ucol1,ucol2, uprio, &
uhlf, uzro, usty, &
vplot, vinc, vminc, vmaxc, vovr, vcol1,vcol2, vprio, &
vhlf, vzro, vsty, &
vhplot, vhinc, vhminc, vhmaxc, vhovr, vhcol1,vhcol2,vhprio, &
vhunits, vhhlf, vhzro, vhsty, &
vsplot, vsinc, vsminc, vsmaxc, vsovr, vscol1,vscol2,vsprio, &
vshlf, vszro, vssty, &
wplot, winc, wminc, wmaxc, wovr, wcol1,wcol2, wprio, &
whlf, wzro, wsty, &
ptplot, ptinc, ptminc, ptmaxc, ptovr, ptcol1,ptcol2,ptprio, &
pthlf, ptzro, ptsty, &
pplot , pinc, pminc, pmaxc, povr, pcol1,pcol2, pprio, &
phlf, pzro, psty, &
ipvplt,ipvinc,ipvminc, ipvmaxc,ipvovr,ipvcol1,ipvcol2,ipvprio, &
ipvhlf, ipvzro, ipvsty
COMMON /init8_cntl1/ &
hplot, hinc, hminc, hmaxc, hovr, hcol1,hcol2, hprio, &
hhlf, hzro, hsty, &
msfplt,msfinc,msfminc, msfmaxc,msfovr,msfcol1,msfcol2,msfprio, &
msfhlf, msfzro, msfsty, &
thkplt,thkinc,thkminc, thkmaxc,thkovr,thkcol1,thkcol2,thkprio, &
thkhlf, thkzro, thksty, &
tplot, tinc, tminc, tmaxc, tovr, tcol1,tcol2, tprio, &
thlf, tzro, tsty, &
uplot, uinc, uminc, umaxc, uovr, ucol1,ucol2, uprio, &
uhlf, uzro, usty, &
vplot, vinc, vminc, vmaxc, vovr, vcol1,vcol2, vprio, &
vhlf, vzro, vsty, &
vhplot, vhinc, vhminc, vhmaxc, vhovr, vhcol1,vhcol2,vhprio, &
vhunits, vhhlf, vhzro, vhsty, &
vsplot, vsinc, vsminc, vsmaxc, vsovr, vscol1,vscol2,vsprio, &
vshlf, vszro, vssty, &
wplot, winc, wminc, wmaxc, wovr, wcol1,wcol2, wprio, &
whlf, wzro, wsty, &
ptplot, ptinc, ptminc, ptmaxc, ptovr, ptcol1,ptcol2,ptprio, &
pthlf, ptzro, ptsty, &
pplot , pinc, pminc, pmaxc, povr, pcol1,pcol2, pprio, &
phlf, pzro, psty, &
ipvplt,ipvinc,ipvminc, ipvmaxc,ipvovr,ipvcol1,ipvcol2,ipvprio, &
ipvhlf, ipvzro, ipvsty
INTEGER :: qvplot,qcplot,qrplot,qiplot,qsplot,qhplot,qwplot,qtplot
REAL :: qvinc,qcinc,qrinc,qiinc,qsinc,qhinc,qwinc,qtinc
REAL :: qvminc,qcminc,qrminc,qiminc,qsminc,qhminc,qwminc,qtminc
REAL :: qvmaxc,qcmaxc,qrmaxc,qimaxc,qsmaxc,qhmaxc,qwmaxc,qtmaxc
INTEGER :: qvovr,qcovr,qrovr,qiovr,qsovr,qhovr,qwovr,qtovr
INTEGER :: qvcol1,qccol1,qrcol1,qicol1,qscol1,qhcol1,qwcol1,qtcol1
INTEGER :: qvcol2,qccol2,qrcol2,qicol2,qscol2,qhcol2,qwcol2,qtcol2
INTEGER :: qvprio,qcprio,qrprio,qiprio,qsprio,qhprio,qwprio,qtprio
INTEGER :: qvhlf,qchlf,qrhlf,qihlf,qshlf,qhhlf,qwhlf,qthlf
INTEGER :: qvzro,qczro,qrzro,qizro,qszro,qhzro,qwzro,qtzro
INTEGER :: qvsty,qcsty,qrsty,qisty,qssty,qhsty,qwsty,qtsty
NAMELIST /sclrplt_cntl2/ &
qvplot, qvinc, qvminc, qvmaxc, qvovr, qvcol1,qvcol2,qvprio, &
qvhlf, qvzro, qvsty, &
qcplot, qcinc, qcminc, qcmaxc, qcovr, qccol1,qccol2,qcprio, &
qchlf, qczro, qcsty, &
qrplot, qrinc, qrminc, qrmaxc, qrovr, qrcol1,qrcol2,qrprio, &
qrhlf, qrzro, qrsty, &
qiplot, qiinc, qiminc, qimaxc, qiovr, qicol1,qicol2,qiprio, &
qihlf, qizro, qisty, &
qsplot, qsinc, qsminc, qsmaxc, qsovr, qscol1,qscol2,qsprio, &
qshlf, qszro, qssty, &
qhplot, qhinc, qhminc, qhmaxc, qhovr, qhcol1,qhcol2,qhprio, &
qhhlf, qhzro, qhsty, &
qwplot, qwinc, qwminc, qwmaxc, qwovr, qwcol1,qwcol2,qwprio, &
qwhlf, qwzro, qwsty, &
qtplot, qtinc, qtminc, qtmaxc, qtovr, qtcol1,qtcol2,qtprio, &
qthlf, qtzro, qtsty
COMMON /init9_cntl2/ &
qvplot, qvinc, qvminc, qvmaxc, qvovr, qvcol1,qvcol2,qvprio, &
qvhlf, qvzro, qvsty, &
qcplot, qcinc, qcminc, qcmaxc, qcovr, qccol1,qccol2,qcprio, &
qchlf, qczro, qcsty, &
qrplot, qrinc, qrminc, qrmaxc, qrovr, qrcol1,qrcol2,qrprio, &
qrhlf, qrzro, qrsty, &
qiplot, qiinc, qiminc, qimaxc, qiovr, qicol1,qicol2,qiprio, &
qihlf, qizro, qisty, &
qsplot, qsinc, qsminc, qsmaxc, qsovr, qscol1,qscol2,qsprio, &
qshlf, qszro, qssty, &
qhplot, qhinc, qhminc, qhmaxc, qhovr, qhcol1,qhcol2,qhprio, &
qhhlf, qhzro, qhsty, &
qwplot, qwinc, qwminc, qwmaxc, qwovr, qwcol1,qwcol2,qwprio, &
qwhlf, qwzro, qwsty, &
qtplot, qtinc, qtminc, qtmaxc, qtovr, qtcol1,qtcol2,qtprio, &
qthlf, qtzro, qtsty
INTEGER :: kmhplt,kmvplt,tkeplt,rhplot,tdplot,rfplot,rfcplt,pteplt
INTEGER :: rfopt
REAL :: kmhinc,kmvinc,tkeinc,rhinc,tdinc,rfinc,rfcinc,pteinc
REAL :: kmhminc,kmvminc,tkeminc,rhminc,tdminc,rfminc,rfcminc,pteminc
REAL :: kmhmaxc,kmvmaxc,tkemaxc,rhmaxc,tdmaxc,rfmaxc,rfcmaxc,ptemaxc
INTEGER :: kmhovr,kmvovr,tkeovr,rhovr,tdovr,rfovr,rfcovr,pteovr
INTEGER :: kmhcol1,kmvcol1,tkecol1,rhcol1,tdcol1,rfcol1,rfccol1,ptecol1
INTEGER :: kmhcol2,kmvcol2,tkecol2,rhcol2,tdcol2,rfcol2,rfccol2,ptecol2
INTEGER :: kmhprio,kmvprio,tkeprio,rhprio,tdprio,rfprio,rfcprio,pteprio
INTEGER :: kmhhlf,kmvhlf,tkehlf,rhhlf,tdhlf,rfhlf,rfchlf,ptehlf
INTEGER :: kmhzro,kmvzro,tkezro,rhzro,tdzro,rfzro,rfczro,ptezro
INTEGER :: kmhsty,kmvsty,tkesty,rhsty,tdsty,rfsty,rfcsty,ptesty
CHARACTER (LEN=1) :: tdunits ! units for dew-point temp F or C
NAMELIST /sclrplt_cntl3/ &
kmhplt, kmhinc, kmhminc,kmhmaxc,kmhovr,kmhcol1,kmhcol2,kmhprio, &
kmhhlf, kmhzro, kmhsty, &
kmvplt, kmvinc, kmvminc,kmvmaxc,kmvovr,kmvcol1,kmvcol2,kmvprio, &
kmvhlf, kmvzro, kmvsty, &
tkeplt, tkeinc, tkeminc, tkemaxc,tkeovr,tkecol1,tkecol2,tkeprio, &
tkehlf, tkezro, tkesty, &
rhplot, rhinc, rhminc, rhmaxc, rhovr, rhcol1,rhcol2,rhprio, &
rhhlf, rhzro, rhsty, &
tdplot, tdinc, tdminc, tdmaxc, tdovr, tdcol1,tdcol2,tdprio, &
tdunits, tdhlf, tdzro, tdsty, &
rfopt, &
rfplot, rfinc, rfminc, rfmaxc, rfovr, rfcol1,rfcol2,rfprio, &
rfhlf, rfzro, rfsty, &
rfcplt, rfcinc, rfcminc, rfcmaxc,rfcovr,rfccol1,rfccol2,rfcprio, &
rfchlf, rfczro, rfcsty, &
pteplt, pteinc, pteminc, ptemaxc,pteovr,ptecol1,ptecol2,pteprio, &
ptehlf, ptezro, ptesty
COMMON /init10_cntl3/ &
kmhplt, kmhinc, kmhminc,kmhmaxc,kmhovr,kmhcol1,kmhcol2,kmhprio, &
kmhhlf, kmhzro, kmhsty, &
kmvplt, kmvinc, kmvminc,kmvmaxc,kmvovr,kmvcol1,kmvcol2,kmvprio, &
kmvhlf, kmvzro, kmvsty, &
tkeplt, tkeinc, tkeminc, tkemaxc,tkeovr,tkecol1,tkecol2,tkeprio, &
tkehlf, tkezro, tkesty, &
rhplot, rhinc, rhminc, rhmaxc, rhovr, rhcol1,rhcol2,rhprio, &
rhhlf, rhzro, rhsty, &
tdplot, tdinc, tdminc, tdmaxc, tdovr, tdcol1,tdcol2,tdprio, &
tdhlf, tdzro, tdsty, &
rfopt, &
rfplot, rfinc, rfminc, rfmaxc, rfovr, rfcol1,rfcol2,rfprio, &
rfhlf, rfzro, rfsty, &
rfcplt, rfcinc, rfcminc, rfcmaxc,rfcovr,rfccol1,rfccol2,rfcprio, &
rfchlf, rfczro, rfcsty, &
pteplt, pteinc, pteminc, ptemaxc,pteovr,ptecol1,ptecol2,pteprio, &
ptehlf, ptezro, ptesty
COMMON /init810_char_units/ tunits, tdunits
INTEGER :: upplot,vpplot,wpplot,ptpplt,ppplot,qvpplt, &
vorpplt, divpplt, divqplt
REAL :: upinc,vpinc,wpinc,ptpinc,ppinc,qvpinc, &
vorpinc, divpinc, divqinc
REAL :: upminc,vpminc,wpminc,ptpminc,ppminc,qvpminc, &
vorpminc, divpminc, divqminc
REAL :: upmaxc,vpmaxc,wpmaxc,ptpmaxc,ppmaxc,qvpmaxc, &
vorpmaxc, divpmaxc, divqmaxc
INTEGER :: upovr,vpovr,wpovr,ptpovr,ppovr,qvpovr, &
vorpovr, divpovr, divqovr
INTEGER :: upcol1,vpcol1,wpcol1,ptpcol1,ppcol1,qvpcol1, &
vorpcol1, divpcol1, divqcol1
INTEGER :: upcol2,vpcol2,wpcol2,ptpcol2,ppcol2,qvpcol2, &
vorpcol2, divpcol2, divqcol2
INTEGER :: upprio,vpprio,wpprio,ptpprio,ppprio,qvpprio, &
vorpprio, divpprio, divqprio
INTEGER :: uphlf,vphlf,wphlf,ptphlf,pphlf,qvphlf, &
vorphlf, divphlf, divqhlf
INTEGER :: upzro,vpzro,wpzro,ptpzro,ppzro,qvpzro, &
vorpzro, divpzro, divqzro
INTEGER :: upsty,vpsty,wpsty,ptpsty,ppsty,qvpsty, &
vorpsty, divpsty, divqsty
NAMELIST /sclrplt_cntl_prt1/ &
upplot, upinc, upminc, upmaxc, upovr,upcol1,upcol2,upprio, &
uphlf, upzro, upsty, &
vpplot, vpinc, vpminc, vpmaxc, vpovr,vpcol1,vpcol2,vpprio, &
vphlf, vpzro, vpsty, &
wpplot, wpinc, wpminc, wpmaxc, wpovr,wpcol1,wpcol2,wpprio, &
wphlf, wpzro, wpsty, &
ptpplt, ptpinc, ptpminc,ptpmaxc,ptpovr,ptpcol1,ptpcol2,ptpprio, &
ptphlf, ptpzro, ptpsty, &
ppplot, ppinc, ppminc, ppmaxc, ppovr, ppcol1,ppcol2,ppprio, &
pphlf, ppzro, ppsty, &
qvpplt, qvpinc, qvpminc,qvpmaxc,qvpovr,qvpcol1,qvpcol2,qvpprio, &
qvphlf, qvpzro, qvpsty, &
vorpplt,vorpinc,vorpminc, vorpmaxc, vorpovr, vorpcol1,vorpcol2, &
vorphlf, vorpprio, vorpzro, vorpsty, &
divpplt,divpinc,divpminc, divpmaxc, divpovr, divpcol1,divpcol2, &
divphlf, divpprio, divpzro, divpsty, &
divqplt,divqinc,divqminc, divqmaxc, divqovr, divqcol1,divqcol2, &
divqhlf,divqprio, divqzro,divqsty
COMMON /init11_cntl_prt1/ &
upplot, upinc, upminc, upmaxc, upovr,upcol1,upcol2,upprio, &
uphlf, upzro, upsty, &
vpplot, vpinc, vpminc, vpmaxc, vpovr,vpcol1,vpcol2,vpprio, &
vphlf, vpzro, vpsty, &
wpplot, wpinc, wpminc, wpmaxc, wpovr,wpcol1,wpcol2,wpprio, &
wphlf, wpzro, wpsty, &
ptpplt, ptpinc, ptpminc,ptpmaxc,ptpovr,ptpcol1,ptpcol2,ptpprio, &
ptphlf, ptpzro, ptpsty, &
ppplot, ppinc, ppminc, ppmaxc, ppovr, ppcol1,ppcol2,ppprio, &
pphlf, ppzro, ppsty, &
qvpplt, qvpinc, qvpminc,qvpmaxc,qvpovr,qvpcol1,qvpcol2,qvpprio, &
qvphlf, qvpzro, qvpsty, &
vorpplt,vorpinc,vorpminc, vorpmaxc, vorpovr, vorpcol1,vorpcol2, &
vorphlf, vorpprio, vorpzro, vorpsty, &
divpplt,divpinc,divpminc, divpmaxc, divpovr, divpcol1,divpcol2, &
divphlf, divpprio, divpzro, divpsty, &
divqplt,divqinc,divqminc, divqmaxc, divqovr, divqcol1,divqcol2, &
divqhlf,divqprio, divqzro,divqsty
INTEGER :: gricplt, avorplt, rhiplot
REAl :: gricinc, avorinc, rhiinc
REAl :: gricminc, avorminc, rhiminc
REAl :: gricmaxc, avormaxc, rhimaxc
INTEGER :: gricovr, avorovr, rhiovr
INTEGER :: griccol1, avorcol1, rhicol1
INTEGER :: griccol2, avorcol2, rhicol2
INTEGER :: gricprio, avorprio, rhiprio
INTEGER :: grichlf, avorhlf, rhihlf
INTEGER :: griczro, avorzro, rhizro
INTEGER :: gricsty, avorsty, rhisty
NAMELIST /sclrplt_cntl_prt2/ &
gricplt,gricinc,gricminc, gricmaxc, gricovr, griccol1,griccol2, &
grichlf,gricprio, griczro, gricsty, &
avorplt,avorinc,avorminc, avormaxc, avorovr, avorcol1,avorcol2, &
avorhlf,avorprio, avorzro, avorsty, &
rhiplot, rhiinc, rhiminc, rhimaxc, rhiovr, rhicol1,rhicol2, &
rhiprio, rhihlf, rhizro , rhisty
COMMON /init12_cntl_prt2/ &
gricplt,gricinc,gricminc, gricmaxc, gricovr, griccol1,griccol2, &
grichlf,gricprio, griczro, gricsty, &
avorplt,avorinc,avorminc, avormaxc, avorovr, avorcol1,avorcol2, &
avorhlf,avorprio, avorzro, avorsty, &
rhiplot, rhiinc, rhiminc, rhimaxc, rhiovr, rhicol1,rhicol2, &
rhiprio, rhihlf, rhizro , rhisty
INTEGER :: istride,jstride,kstride
INTEGER :: vtrplt, vtpplt, xuvplt, strmplt, vagplt
REAL :: vtrunit, vtpunit, xuvunit, strmunit, vagunit
INTEGER :: vtrovr, vtpovr, xuvovr, strmovr, vagovr
INTEGER :: vtrcol1, vtpcol1, xuvcol1, strmcol1, vagcol1
INTEGER :: vtrcol2, vtpcol2, xuvcol2, strmcol2, vagcol2
INTEGER :: vtrprio, vtpprio, xuvprio, strmprio, vagprio
INTEGER :: vtrunits, vtpunits, xuvunits, strmunits, vagunits
INTEGER :: vtrtype, vtptype, xuvtype, strmtype, vagtype
NAMELIST /vctrplt_cntl/istride,jstride,kstride, &
vtrplt, vtrunit,vtrovr,vtrcol1,vtrcol2,vtrprio,vtrunits,vtrtype, &
vtpplt, vtpunit, vtpovr,vtpcol1,vtpcol2,vtpprio,vtpunits,vtptype, &
xuvplt, xuvunit,xuvovr,xuvcol1,xuvcol2,xuvprio,xuvunits,xuvtype, &
strmplt,strmunit,strmovr,strmcol1,strmcol2,strmprio,strmunits, &
strmtype, &
vagplt, vagunit,vagovr,vagcol1,vagcol2,vagprio,vagunits,vagtype
COMMON /init13_cntl_vctr/ istride,jstride,kstride, &
vtrplt, vtrunit,vtrovr,vtrcol1,vtrcol2,vtrprio,vtrunits,vtrtype, &
vtpplt, vtpunit, vtpovr,vtpcol1,vtpcol2,vtpprio,vtpunits,vtptype, &
xuvplt, xuvunit,xuvovr,xuvcol1,xuvcol2,xuvprio,xuvunits,xuvtype, &
strmplt,strmunit,strmovr,strmcol1,strmcol2,strmprio,strmunits, &
strmtype, &
vagplt, vagunit,vagovr,vagcol1,vagcol2,vagprio,vagunits,vagtype
INTEGER :: vtrstrm, vtrstmovr, vtrstmcol1, vtrstmcol2, vtrstmprio
INTEGER :: vtpstrm, vtpstmovr, vtpstmcol1, vtpstmcol2, vtpstmprio
NAMELIST /strmplt_cntl/ &
vtrstrm, vtrstmovr, vtrstmcol1, vtrstmcol2, vtrstmprio, &
vtpstrm, vtpstmovr, vtpstmcol1, vtpstmcol2, vtpstmprio
COMMON /init14_cntl_strm/ &
vtrstrm, vtrstmovr, vtrstmcol1, vtrstmcol2, vtrstmprio, &
vtpstrm, vtpstmovr, vtpstmcol1, vtpstmcol2, vtpstmprio
INTEGER :: trnplt,wetcanplt,raincplt,raingplt,raintplt
REAL :: trninc,wcpinc,raincinc,rainginc,raintinc
REAL :: trnminc,wcpminc,raincminc,raingminc,raintminc
REAL :: trnmaxc,wcpmaxc,raincmaxc,raingmaxc,raintmaxc
INTEGER :: trnovr,wcpovr,racovr,ragovr,ratovr
INTEGER :: trncol1,wcpcol1,raccol1,ragcol1,ratcol1
INTEGER :: trncol2,wcpcol2,raccol2,ragcol2,ratcol2
INTEGER :: trnprio,wcpprio,racprio,ragprio,ratprio
INTEGER :: trnhlf,wcphlf,rachlf,raghlf,rathlf
INTEGER :: trnzro,wcpzro,raczro,ragzro,ratzro
INTEGER :: trnsty,wcpsty,racsty,ragsty,ratsty
INTEGER :: racunit, ragunit, ratunit
INTEGER :: rainicplt,rainigplt,rainitplt
REAL :: rainicinc,rainiginc,rainitinc
REAL :: rainicminc, rainigminc, rainitminc
REAL :: rainicmaxc, rainigmaxc, rainitmaxc
INTEGER :: raicovr,raigovr,raitovr
INTEGER :: raiccol1,raigcol1,raitcol1
INTEGER :: raiccol2,raigcol2,raitcol2
INTEGER :: raichlf,raighlf,raithlf
INTEGER :: raicprio,raigprio,raitprio
INTEGER :: raiczro,raigzro,raitzro
INTEGER :: raicsty,raigsty,raitsty
INTEGER :: raicunit,raigunit,raitunit
NAMELIST /sfc_plot1/ &
trnplt,trninc,trnminc, trnmaxc,trnovr,trncol1,trncol2,trnprio, &
trnhlf, trnzro, trnsty, &
wetcanplt,wcpinc,wcpminc,wcpmaxc,wcpovr,wcpcol1,wcpcol2,wcpprio, &
wcphlf, wcpzro, wcpsty, &
raincplt,raincinc,raincminc,raincmaxc,racovr,raccol1,raccol2, &
rachlf, racprio, raczro, racsty, racunit, &
raingplt,rainginc,raingminc,raingmaxc,ragovr,ragcol1,ragcol2, &
raghlf, ragprio, ragzro, ragsty, ragunit, &
raintplt,raintinc,raintminc,raintmaxc,ratovr,ratcol1,ratcol2, &
rathlf, ratprio, ratzro, ratsty, ratunit, &
rainicplt,rainicinc,rainicminc,rainicmaxc,raicovr,raiccol1, &
raiccol2,raichlf,raicprio,raiczro,raicsty,raicunit, &
rainigplt,rainiginc,rainigminc,rainigmaxc,raigovr,raigcol1, &
raigcol2,raighlf,raigprio,raigzro,raigsty,raigunit, &
rainitplt,rainitinc,rainitminc,rainitmaxc,raitovr,raitcol1, &
raitcol2,raithlf,raitprio,raitzro,raitsty,raitunit
COMMON /init15_sfc/ &
trnovr,trncol1,trncol2,trnprio,trnhlf, trnzro, trnsty, &
wetcanplt,wcpinc,wcpminc,wcpmaxc,wcpovr,wcpcol1,wcpcol2,wcpprio, &
wcphlf, wcpzro, wcpsty, &
raincplt,raincinc,raincminc,raincmaxc,racovr,raccol1,raccol2, &
rachlf, racprio, raczro, racsty, racunit, &
raingplt,rainginc,raingminc,raingmaxc,ragovr,ragcol1,ragcol2, &
raghlf, ragprio, ragzro, ragsty, ragunit, &
raintplt,raintinc,raintminc,raintmaxc,ratovr,ratcol1,ratcol2, &
rathlf, ratprio, ratzro, ratsty, ratunit, &
rainicplt,rainicinc,rainicminc,rainicmaxc,raicovr,raiccol1, &
raiccol2,raichlf,raicprio,raiczro,raicsty,raicunit, &
rainigplt,rainiginc,rainigminc,rainigmaxc,raigovr,raigcol1, &
raigcol2,raighlf,raigprio,raigzro,raigsty,raigunit, &
rainitplt,rainitinc,rainitminc,rainitmaxc,raitovr,raitcol1, &
raitcol2,raithlf,raitprio,raitzro,raitsty,raitunit
INTEGER :: tsoilplt, qsoilplt
REAL :: tsoilinc, qsoilinc
REAL :: tsoilminc, qsoilminc
REAL :: tsoilmaxc, qsoilmaxc
INTEGER :: tsoilovr, qsoilovr
INTEGER :: tsoilcol1, qsoilcol1
INTEGER :: tsoilcol2, qsoilcol2
INTEGER :: tsoilhlf, qsoilhlf
INTEGER :: tsoilprio, qsoilprio
INTEGER :: tsoilzro, qsoilzro
NAMELIST /soil_plot/ &
tsoilplt,tsoilinc,tsoilminc,tsoilmaxc,tsoilovr, &
tsoilcol1,tsoilcol2,tsoilhlf,tsoilprio,tsoilzro, &
qsoilplt,qsoilinc,qsoilminc,qsoilmaxc,qsoilovr, &
qsoilcol1,qsoilcol2,qsoilhlf,qsoilprio,qsoilzro
COMMON /init19_soil/ &
tsoilplt,tsoilinc,tsoilminc,tsoilmaxc,tsoilovr, &
tsoilcol1,tsoilcol2,tsoilhlf,tsoilprio,tsoilzro, &
qsoilplt,qsoilinc,qsoilminc,qsoilmaxc,qsoilovr, &
qsoilcol1,qsoilcol2,qsoilhlf,qsoilprio,qsoilzro
INTEGER :: pslplt,capeplt,cinplt,thetplt,heliplt,brnplt,brnuplt, &
srlfplt,srmfplt
REAL :: pslinc,capeinc,cininc,thetinc,heliinc,brninc,brnuinc, &
srlfinc,srmfinc
REAL :: pslminc,capeminc,cinminc,thetminc,heliminc,brnminc,bruminc, &
srlminc,srmminc
REAL :: pslmaxc,capemaxc,cinmaxc,thetmaxc,helimaxc,brnmaxc,brumaxc, &
srlmaxc,srmmaxc
INTEGER :: pslovr,capovr,cinovr,theovr,helovr,brnovr,brnuovr, &
srlfovr,srmfovr
INTEGER :: pslcol1,capcol1,cincol1,thecol1,helcol1,brncol1,brnucol1, &
srlfcol1,srmfcol1
INTEGER :: pslcol2,capcol2,cincol2,thecol2,helcol2,brncol2,brnucol2, &
srlfcol2,srmfcol2
INTEGER :: pslprio,capprio,cinprio,theprio,helprio,brnprio,bruprio, &
srlprio,srmprio
INTEGER :: pslhlf,caphlf,cinhlf,thehlf,helhlf,brnhlf,brnuhlf, &
srlfhlf,srmfhlf
INTEGER :: pslzro,capzro,cinzro,thezro,helzro,brnzro,brnuzro, &
srlfzro,srmfzro
INTEGER :: pslsty,capsty,cinsty,thesty,helsty,brnsty,brnusty, &
srlfsty,srmfsty
NAMELIST /sfc_plot2/ &
pslplt,pslinc, pslminc, pslmaxc,pslovr,pslcol1,pslcol2,pslprio, &
pslhlf, pslzro, pslsty, &
capeplt,capeinc,capeminc,capemaxc,capovr,capcol1,capcol2,capprio, &
caphlf, capzro, capsty, &
cinplt, cininc, cinminc, cinmaxc, cinovr,cincol1,cincol2,cinprio, &
cinhlf, cinzro, cinsty, &
thetplt,thetinc,thetminc,thetmaxc,theovr,thecol1,thecol2,theprio, &
thehlf, thezro, thesty, &
heliplt,heliinc,heliminc,helimaxc,helovr,helcol1,helcol2,helprio, &
helhlf, helzro, helsty, &
brnplt, brninc, brnminc, brnmaxc, brnovr,brncol1,brncol2,brnprio, &
brnhlf, brnzro, brnsty, &
brnuplt, brnuinc, bruminc, brumaxc, brnuovr, brnucol1,brnucol2, &
brnuhlf, brnuzro, brnusty, bruprio, &
srlfplt, srlfinc, srlminc, srlmaxc, srlfovr, srlfcol1,srlfcol2, &
srlfhlf, srlfzro, srlfsty, srlprio, &
srmfplt, srmfinc, srmminc, srmmaxc, srmfovr, srmfcol1,srmfcol2, &
srmfhlf, srmfzro, srmfsty, srmprio
COMMON /init16_sfc/ &
pslplt,pslinc, pslminc, pslmaxc,pslovr,pslcol1,pslcol2,pslprio, &
pslhlf, pslzro, pslsty, &
capeplt,capeinc,capeminc,capemaxc,capovr,capcol1,capcol2,capprio, &
caphlf, capzro, capsty, &
cinplt, cininc, cinminc, cinmaxc, cinovr,cincol1,cincol2,cinprio, &
cinhlf, cinzro, cinsty, &
thetplt,thetinc,thetminc,thetmaxc,theovr,thecol1,thecol2,theprio, &
thehlf, thezro, thesty, &
heliplt,heliinc,heliminc,helimaxc,helovr,helcol1,helcol2,helprio, &
helhlf, helzro, helsty, &
brnplt, brninc, brnminc, brnmaxc, brnovr,brncol1,brncol2,brnprio, &
brnhlf, brnzro, brnsty, &
brnuplt, brnuinc, bruminc, brumaxc, brnuovr, brnucol1,brnucol2, &
brnuhlf, brnuzro, brnusty, bruprio, &
srlfplt, srlfinc, srlminc, srlmaxc, srlfovr, srlfcol1,srlfcol2, &
srlfhlf, srlfzro, srlfsty, srlprio, &
srmfplt, srmfinc, srmminc, srmmaxc, srmfovr, srmfcol1,srmfcol2, &
srmfhlf, srmfzro, srmfsty, srmprio
INTEGER :: liplt,capsplt,blcoplt,viqcplt,viqiplt,viqrplt,viqsplt, &
viqhplt, vilplt
REAL :: liinc,capsinc,blcoinc,viqcinc,viqiinc,viqrinc,viqsinc, &
viqhinc, vilinc
REAL :: liminc,capsminc,blcominc,viqcminc,viqiminc,viqrminc,viqsminc, &
viqhminc, vilminc
REAL :: limaxc,capsmaxc,blcomaxc,viqcmaxc,viqimaxc,viqrmaxc,viqsmaxc, &
viqhmaxc, vilmaxc
INTEGER :: liovr,capsovr,blcoovr,viqcovr,viqiovr,viqrovr,viqsovr, &
viqhovr, vilovr
INTEGER :: licol1,capscol1,blcocol1,viqccol1,viqicol1,viqrcol1,viqscol1, &
viqhcol1, vilcol1
INTEGER :: licol2,capscol2,blcocol2,viqccol2,viqicol2,viqrcol2,viqscol2, &
viqhcol2, vilcol2
INTEGER :: liprio,capsprio,blcoprio,viqcprio,viqiprio,viqrprio,viqsprio, &
viqhprio, vilprio
INTEGER :: lihlf,capshlf,blcohlf,viqchlf,viqihlf,viqrhlf,viqshlf, &
viqhhlf, vilhlf
INTEGER :: lizro,capszro,blcozro,viqczro,viqizro,viqrzro,viqszro, &
viqhzro, vilzro
INTEGER :: listy,capssty,blcosty,viqcsty,viqisty,viqrsty,viqssty, &
viqhsty, vilsty
NAMELIST /sfc_plot3/ &
liplt, liinc, liminc, limaxc, liovr, licol1,licol2,liprio, &
lihlf, lizro, listy, &
capsplt, capsinc, capsminc, capsmaxc, capsovr, capscol1,capscol2, &
capshlf, capszro, capssty, capsprio, &
blcoplt, blcoinc, blcominc, blcomaxc, blcoovr, blcocol1,blcocol2, &
blcohlf, blcozro, blcosty, blcoprio, &
viqcplt, viqcinc, viqcminc, viqcmaxc, viqcovr, viqccol1,viqccol2, &
viqchlf, viqczro, viqcsty, viqcprio, &
viqiplt, viqiinc, viqiminc, viqimaxc, viqiovr, viqicol1,viqicol2, &
viqihlf, viqizro, viqisty, viqiprio, &
viqrplt, viqrinc, viqrminc, viqrmaxc, viqrovr, viqrcol1,viqrcol2, &
viqrhlf, viqrzro, viqrsty, viqrprio, &
viqsplt, viqsinc, viqsminc, viqsmaxc, viqsovr, viqscol1,viqscol2, &
viqshlf, viqszro, viqssty,viqsprio, &
viqhplt, viqhinc, viqhminc, viqhmaxc, viqhovr, viqhcol1,viqhcol2, &
viqhhlf, viqhzro, viqhsty,viqhprio, &
vilplt, vilinc, vilminc, vilmaxc, vilovr, vilcol1,vilcol2, &
vilhlf, vilzro, vilsty, vilprio
COMMON /init17_sfc/ &
liplt, liinc, liminc, limaxc, liovr, licol1,licol2,liprio, &
lihlf, lizro, listy, &
capsplt, capsinc, capsminc, capsmaxc, capsovr, capscol1,capscol2, &
capshlf, capszro, capssty, capsprio, &
blcoplt, blcoinc, blcominc, blcomaxc, blcoovr, blcocol1,blcocol2, &
blcohlf, blcozro, blcosty, blcoprio, &
viqcplt, viqcinc, viqcminc, viqcmaxc, viqcovr, viqccol1,viqccol2, &
viqchlf, viqczro, viqcsty, viqcprio, &
viqiplt, viqiinc, viqiminc, viqimaxc, viqiovr, viqicol1,viqicol2, &
viqihlf, viqizro, viqisty, viqiprio, &
viqrplt, viqrinc, viqrminc, viqrmaxc, viqrovr, viqrcol1,viqrcol2, &
viqrhlf, viqrzro, viqrsty, viqrprio, &
viqsplt, viqsinc, viqsminc, viqsmaxc, viqsovr, viqscol1,viqscol2, &
viqshlf, viqszro, viqssty,viqsprio, &
viqhplt, viqhinc, viqhminc, viqhmaxc, viqhovr, viqhcol1,viqhcol2, &
viqhhlf, viqhzro, viqhsty,viqhprio, &
vilplt, vilinc, vilminc, vilmaxc, vilovr, vilcol1,vilcol2, &
vilhlf, vilzro, vilsty, vilprio
INTEGER :: viiplt,vicplt,ctcplt,vitplt,pwplt,tprplt,gprplt,cprplt
REAL :: viiinc,vicinc,ctcinc,vitinc,pwinc,tprinc,gprinc,cprinc
REAL :: viiminc,vicminc,ctcminc,vitminc,pwminc,tprminc,gprminc,cprminc
REAL :: viimaxc,vicmaxc,ctcmaxc,vitmaxc,pwmaxc,tprmaxc,gprmaxc,cprmaxc
INTEGER :: viiovr,vicovr,ctcovr,vitovr,pwovr,tprovr,gprovr,cprovr
INTEGER :: viicol1,viccol1,ctccol1,vitcol1,pwcol1,tprcol1,gprcol1,cprcol1
INTEGER :: viicol2,viccol2,ctccol2,vitcol2,pwcol2,tprcol2,gprcol2,cprcol2
INTEGER :: viihlf,vichlf,ctchlf,vithlf,pwhlf,tprhlf,gprhlf,cprhlf
INTEGER :: viizro,viczro,ctczro,vitzro,pwzro,tprzro,gprzro,cprzro
INTEGER :: viisty,vicsty,ctcsty,vitsty,pwsty,tprsty,gprsty,cprsty
INTEGER :: viiprio,vicprio,ctcprio,vitprio,pwprio,tprprio,gprprio,cprprio
INTEGER :: tprunits, gprunits, cprunits
NAMELIST /sfc_plot4/ &
viiplt, viiinc, viiminc, viimaxc, viiovr, viicol1,viicol2, &
viihlf, viizro, viisty, viiprio, &
vicplt, vicinc, vicminc, vicmaxc, vicovr, viccol1,viccol2, &
vichlf, viczro, vicsty, vicprio, &
ctcplt, ctcinc, ctcminc, ctcmaxc, ctcovr, ctccol1,ctccol2, &
ctchlf, ctczro, ctcsty, ctcprio, &
vitplt, vitinc, vitminc, vitmaxc, vitovr, vitcol1,vitcol2, &
vithlf, vitzro, vitsty, vitprio, &
pwplt, pwinc, pwminc, pwmaxc, pwovr, pwcol1,pwcol2, &
pwhlf, pwzro, pwsty, pwprio, &
tprplt, tprinc, tprminc, tprmaxc, tprovr, tprcol1,tprcol2, &
tprhlf, tprzro, tprsty, tprprio, tprunits, &
gprplt, gprinc, gprminc, gprmaxc, gprovr, gprcol1,gprcol2, &
gprhlf, gprzro, gprsty, gprprio, gprunits, &
cprplt, cprinc, cprminc, cprmaxc, cprovr, cprcol1,cprcol2, &
cprhlf, cprzro, cprsty, cprprio, cprunits
COMMON /init18_sfc/ &
viiplt, viiinc, viiminc, viimaxc, viiovr, viicol1,viicol2, &
viihlf, viizro, viisty, viiprio, &
vicplt, vicinc, vicminc, vicmaxc, vicovr, viccol1,viccol2, &
vichlf, viczro, vicsty, vicprio, &
ctcplt, ctcinc, ctcminc, ctcmaxc, ctcovr, ctccol1,ctccol2, &
ctchlf, ctczro, ctcsty, ctcprio, &
vitplt, vitinc, vitminc, vitmaxc, vitovr, vitcol1,vitcol2, &
vithlf, vitzro, vitsty, vitprio, &
pwplt, pwinc, pwminc, pwmaxc, pwovr, pwcol1,pwcol2, &
pwhlf, pwzro, pwsty, pwprio, &
tprplt, tprinc, tprminc, tprmaxc, tprovr, tprcol1,tprcol2, &
tprhlf, tprzro, tprsty, tprprio, tprunits, &
gprplt, gprinc, gprminc, gprmaxc, gprovr, gprcol1,gprcol2, &
gprhlf, gprzro, gprsty, gprprio, gprunits, &
cprplt, cprinc, cprminc, cprmaxc, cprovr, cprcol1,cprcol2, &
cprhlf, cprzro, cprsty, cprprio, cprunits
INTEGER :: soiltpplt,vegtpplt,laiplt,rouplt,vegplt,snowdplt
REAL :: soiltpinc,vegtpinc,laiinc,rouinc,veginc,snowdinc
REAL :: soiltpminc,vegtpminc,laiminc,rouminc,vegminc,snowdminc
REAL :: soiltpmaxc,vegtpmaxc,laimaxc,roumaxc,vegmaxc,snowdmaxc
INTEGER :: styovr,vtyovr,laiovr,rouovr,vegovr,snowdovr
INTEGER :: stycol1,vtycol1,laicol1,roucol1,vegcol1,snowdcol1
INTEGER :: stycol2,vtycol2,laicol2,roucol2,vegcol2,snowdcol2
INTEGER :: styprio,vtyprio,laiprio,rouprio,vegprio,snowdprio
INTEGER :: styhlf,vtyhlf,laihlf,rouhlf,veghlf,snowdhlf
INTEGER :: styzro,vtyzro,laizro,rouzro,vegzro,snowdzro
INTEGER :: stysty,vtysty,laisty,rousty,vegsty,snowdsty
INTEGER :: soiltpn ! number of soil type 1 to 4
NAMELIST /sfc_cha_plot/ &
soiltpplt,soiltpinc,soiltpminc,soiltpmaxc,styovr,stycol1,stycol2, &
styhlf, styzro, stysty,styprio,soiltpn, &
vegtpplt,vegtpinc,vegtpminc,vegtpmaxc,vtyovr,vtycol1,vtycol2, &
vtyhlf, vtyzro, vtysty,vtyprio, &
laiplt,laiinc,laiminc,laimaxc,laiovr,laicol1,laicol2,laiprio, &
laihlf, laizro, laisty, &
rouplt,rouinc,rouminc,roumaxc,rouovr,roucol1,roucol2,rouprio, &
rouhlf, rouzro, rousty, &
vegplt,veginc,vegminc,vegmaxc,vegovr,vegcol1,vegcol2,vegprio, &
veghlf, vegzro, vegsty, &
snowdplt,snowdinc,snowdminc,snowdmaxc,snowdovr,snowdcol1, &
snowdcol2, snowdprio,snowdhlf, snowdzro, snowdsty
COMMON /init20_sfccha/ &
soiltpplt,soiltpinc,soiltpminc,soiltpmaxc,styovr,stycol1,stycol2, &
styhlf, styzro, stysty,styprio,soiltpn, &
vegtpplt,vegtpinc,vegtpminc,vegtpmaxc,vtyovr,vtycol1,vtycol2, &
vtyhlf, vtyzro, vtysty,vtyprio, &
laiplt,laiinc,laiminc,laimaxc,laiovr,laicol1,laicol2,laiprio, &
laihlf, laizro, laisty, &
rouplt,rouinc,rouminc,roumaxc,rouovr,roucol1,roucol2,rouprio, &
rouhlf, rouzro, rousty, &
vegplt,veginc,vegminc,vegmaxc,vegovr,vegcol1,vegcol2,vegprio, &
veghlf, vegzro, vegsty, &
snowdplt,snowdinc,snowdminc,snowdmaxc,snowdovr,snowdcol1, &
snowdcol2, snowdprio,snowdhlf, snowdzro, snowdsty
INTEGER :: setcontopt ,setcontnum
CHARACTER (LEN=12) :: setcontvar(maxuneva)
REAL :: setconts(maxunevm,maxuneva)
NAMELIST /setcont_cntl/setcontopt,setcontnum,setcontvar,setconts
COMMON /setcont_var/setcontvar
COMMON /setcon_par/setcontopt,setcontnum,setconts
INTEGER :: arbvaropt ! plot arbitrary variable
CHARACTER (LEN=40) :: dirname3d(maxarbvar),dirname2d(maxarbvar)
CHARACTER (LEN=6) :: var3d(maxarbvar),var2d(maxarbvar)
INTEGER :: var3dnum, var3dplot(maxarbvar)
REAL :: var3dinc(maxarbvar), var3dminc(maxarbvar), &
var3dmaxc(maxarbvar)
INTEGER :: var3dovr(maxarbvar),var3dcol1(maxarbvar), &
var3dcol2(maxarbvar),var3dprio(maxarbvar), &
var3dhlf(maxarbvar),var3dzro(maxarbvar), &
var3dsty(maxarbvar)
INTEGER :: var2dnum, var2dplot(maxarbvar)
REAL :: var2dinc(maxarbvar), var2dminc(maxarbvar), &
var2dmaxc(maxarbvar)
INTEGER :: var2dovr(maxarbvar),var2dcol1(maxarbvar), &
var2dcol2(maxarbvar), var2dprio(maxarbvar), &
var2dhlf(maxarbvar),var2dzro(maxarbvar), &
var2dsty(maxarbvar)
NAMELIST /arbvar_cntl/arbvaropt, &
var3dnum,dirname3d, &
var3d,var3dplot, var3dinc, var3dminc,var3dmaxc, &
var3dovr, var3dhlf, var3dzro,var3dsty,var3dcol1, var3dcol2, &
var3dprio, var2dnum,dirname2d, &
var2d,var2dplot, var2dinc, var2dminc,var2dmaxc, &
var2dovr, var2dhlf, var2dzro, var2dsty, var2dcol1, var2dcol2, &
var2dprio
COMMON /init21_cntl_arbvar/arbvaropt, &
var3dnum,dirname3d, &
var3d,var3dplot, var3dinc, var3dminc,var3dmaxc, &
var3dovr, var3dhlf, var3dzro,var3dsty,var3dcol1, var3dcol2, &
var3dprio, var2dnum,dirname2d, &
var2d,var2dplot, var2dinc, var2dminc,var2dmaxc, &
var2dovr, var2dhlf, var2dzro, var2dsty, var2dcol1, var2dcol2, &
var2dprio
INTEGER :: number_of_boxes, boxcol
REAL :: bctrx(10),bctry(10),blengx(10),blengy(10)
REAL :: bx1(10), bx2(10),by1(10),by2(10)
NAMELIST /plot_boxes/ number_of_boxes,boxcol, &
bctrx,bctry,blengx,blengy
COMMON /boxesopt/number_of_boxes,boxcol,bx1,bx2,by1,by2
INTEGER :: number_of_polys, polycol
REAL :: vertx(max_verts,max_polys), verty(max_verts,max_polys)
NAMELIST /plot_polylines/ number_of_polys,polycol,vertx,verty
COMMON /polysopt/number_of_polys,polycol,vertx,verty
INTEGER :: ovrlaymulopt, ovrmul_num
CHARACTER (LEN=12) :: ovrname, ovrmulname(50)
NAMELIST /ovrlay_mul/ovrlaymulopt,ovrname,ovrmul_num,ovrmulname
COMMON /init22_ovrlay/ovrlaymulopt,ovrname,ovrmul_num,ovrmulname
INTEGER :: ovrtrn
NAMELIST /ovr_terrain/ ovrtrn
REAL :: ztmin,ztmax
COMMON /trnpar/trnplt,ovrtrn,trninc,trnminc,trnmaxc, &
ztmin,ztmax
INTEGER :: w3dplt, q3dplt
REAL :: wisosf,qisosf
NAMELIST /wirfrm_plot/ w3dplt, wisosf, q3dplt, qisosf
COMMON /init23_wirfrm/ w3dplt, wisosf, q3dplt, qisosf
INTEGER :: ovrobs,obsset,obscol,obs_marktyp
CHARACTER (LEN=256) :: sfcobfl
REAL :: obs_marksz
NAMELIST /plot_obs/ ovrobs,sfcobfl,obscol,obs_marktyp,obs_marksz
COMMON /init24_obs/ sfcobfl
COMMON /obspar/ ovrobs,obsset,obscol,obs_marktyp, obs_marksz
INTEGER :: ovrstaopt
INTEGER :: ovrstam,staset,ovrstan,ovrstav,wrtstax,stacol,markprio
REAL :: wrtstad
INTEGER :: nsta_typ,sta_typ(10),sta_marktyp(10),sta_markcol(10)
REAL :: sta_marksz(10)
CHARACTER (LEN=256) :: stalofl
NAMELIST /plot_sta/ ovrstaopt,ovrstam,ovrstan,ovrstav,wrtstax, &
wrtstad, stacol, markprio, nsta_typ, sta_typ, sta_marktyp, &
sta_markcol,sta_marksz,stalofl
COMMON /sta_par/ ovrstaopt,ovrstam,staset,ovrstan,ovrstav,stacol, &
markprio,nsta_typ,sta_typ,sta_marktyp, &
sta_markcol,sta_marksz,stalofl,wrtstax,wrtstad
!---------------------------------------------------------------------
!
! *min -- Profile plot lower bound
! *max -- Profile plot upper bound
!
!----------------------------------------------------------------------
INTEGER :: profopt,nprof,npicprof
REAL :: xprof(max_dim), yprof(max_dim)
INTEGER :: uprof, vprof, wprof, ptprof, pprof, qvprof, &
qcprof,qrprof,qiprof,qsprof,qhprof,rhprof, &
kmhprof,kmvprof,tkeprof,rfprof,pteprf, &
upprof,vpprof,wpprof,ptpprf,ppprof,qvpprf, &
vorpprf,divpprf, tsoilprof,qsoilprof
REAL :: uprmin, vprmin, wprmin, ptprmin, pprmin,qvprmin, &
qcpmin,qrpmin,qipmin,qspmin,qhpmin,rhpmin, &
kmhpmin,kmvpmin,tkepmin,rfpmin,ptepmin, &
uppmin,vppmin,wppmin,ptppmin,pppmin,qvppmin, &
vorppmin,divppmin,tsoilprofmin,qsoilprofmin
REAL :: uprmax, vprmax, wprmax, ptprmax, pprmax,qvprmax, &
qcpmax,qrpmax,qipmax,qspmax,qhpmax,rhpmax, &
kmhpmax,kmvpmax,tkepmax,rfpmax,ptepmax, &
uppmax,vppmax,wppmax,ptppmax,pppmax,qvppmax, &
vorppmax,divppmax,tsoilprofmax,qsoilprofmax
REAL :: zprofbgn, zprofend, zsoilprofbgn, zsoilprofend
INTEGER :: nxprpic, nyprpic
NAMELIST /profile_cntl/ profopt, nprof, xprof, yprof, &
npicprof, uprof, uprmin, uprmax, vprof, vprmin, vprmax, &
wprof,wprmin,wprmax, ptprof,ptprmin,ptprmax, &
pprof,pprmin,pprmax, qvprof,qvprmin,qvprmax, &
qcprof,qcpmin,qcpmax, qrprof,qrpmin,qrpmax, &
qiprof,qipmin,qipmax, qsprof,qspmin,qspmax, &
qhprof,qhpmin,qhpmax, rhprof,rhpmin,rhpmax, &
kmhprof,kmhpmin,kmhpmax, kmvprof,kmvpmin,kmvpmax, &
tkeprof,tkepmin,tkepmax, &
rfprof,rfpmin,rfpmax, pteprf,ptepmin,ptepmax, &
upprof,uppmin,uppmax, vpprof,vppmin,vppmax, &
wpprof,wppmin,wppmax, ptpprf,ptppmin,ptppmax, &
ppprof,pppmin,pppmax, qvpprf,qvppmin,qvppmax, &
vorpprf, vorppmin, vorppmax, divpprf, divppmin, divppmax, &
zprofbgn,zprofend, &
tsoilprof,tsoilprofmin,tsoilprofmax, &
qsoilprof,qsoilprofmin,qsoilprofmax, &
zsoilprofbgn,zsoilprofend, &
nxprpic, nyprpic
COMMON /init25_prof/ profopt, nprof, xprof, yprof, &
npicprof, uprof, uprmin, uprmax, vprof, vprmin, vprmax, &
wprof,wprmin,wprmax, ptprof,ptprmin,ptprmax, &
pprof,pprmin,pprmax, qvprof,qvprmin,qvprmax, &
qcprof,qcpmin,qcpmax, qrprof,qrpmin,qrpmax, &
qiprof,qipmin,qipmax, qsprof,qspmin,qspmax, &
qhprof,qhpmin,qhpmax, rhprof,rhpmin,rhpmax, &
kmhprof,kmhpmin,kmhpmax, kmvprof,kmvpmin,kmvpmax, &
tkeprof,tkepmin,tkepmax, &
rfprof,rfpmin,rfpmax, pteprf,ptepmin,ptepmax, &
upprof,uppmin,uppmax, vpprof,vppmin,vppmax, &
wpprof,wppmin,wppmax, ptpprf,ptppmin,ptppmax, &
ppprof,pppmin,pppmax, qvpprf,qvppmin,qvppmax, &
vorpprf, vorppmin, vorppmax, divpprf, divppmin, divppmax, &
zprofbgn,zprofend, &
tsoilprof,tsoilprofmin,tsoilprofmax, &
qsoilprof,qsoilprofmin,qsoilprofmax, &
zsoilprofbgn,zsoilprofend, &
nxprpic, nyprpic
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
INTEGER :: lmapfile
INTEGER :: ireturn
INTEGER :: lengbf,nf,lenfil
INTEGER :: indxslic
INTEGER :: lsfcobfl,lstalofl
LOGICAL :: fexist
INTEGER :: i,j,k
INTEGER :: nxlg, nylg
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
CALL mpinit_proc
IF(myproc == 0) WRITE(6,'(/ 16(/5x,a)//)') &
'###############################################################', &
'###############################################################', &
'#### ####', &
'#### Welcome to ARPSPLT ####', &
'#### ####', &
'#### A graphic analysis program for model ARPS 5.0 ####', &
'#### ####', &
'#### The graphic plotting is based ####', &
'#### on graphic package ZXPLOT ####', &
'#### by Ming Xue CAPS/SOM/OU ####', &
'#### (http://www.caps.ou.edu/ZXPLOT) ####', &
'#### ####', &
'###############################################################', &
'###############################################################'
!-----------------------------------------------------------------------
!
! First, initialize MPI jobs
!
!-----------------------------------------------------------------------
IF(myproc == 0) THEN
READ(5,message_passing,ERR=100)
WRITE(6,'(a)')'Namelist message_passing was successfully read.'
END IF
CALL mpupdatei
(nproc_x,1)
CALL mpupdatei
(nproc_y,1)
CALL mpupdatei
(max_fopen,1)
CALL mpupdatei
(nproc_node,1)
CALL mpupdatei
(readsplit,1)
IF(readsplit > 0) THEN
nprocx_in = nproc_x
nprocy_in = nproc_y
END IF
CALL mpupdatei
(nprocx_in,1)
CALL mpupdatei
(nprocy_in,1)
ncompressx = nprocx_in/nproc_x
ncompressy = nprocy_in/nproc_y
IF (mp_opt > 0 .AND. ( &
(MOD(nprocx_in,nproc_x) /= 0 .OR. MOD(nprocy_in,nproc_y) /= 0) &
.OR. (ncompressx < 1 .OR. ncompressy < 1) ) ) THEN
IF (myproc == 0) WRITE(6,'(3x,a/,2(3x,2(a,I2)/))') &
'nprocx_in (nprocy_in) must be a multiplier of nproc_x(nproc_y)', &
'nprocx_in = ',nprocx_in, 'nprocy_in = ',nprocy_in, &
'nproc_x = ', nproc_x, 'nproc_y = ', nproc_y
CALL mpexit
(1);
STOP
END IF
CALL mpinit_var
IF (mp_opt == 0) THEN ! no-mpi specific
ncompressx = 1
ncompressy = 1
nprocx_in = 1
nprocy_in = 1
nproc_node = 1
ELSE ! mpi specific
readstride = max_fopen
dumpstride = nprocs
IF (readsplit > 0) THEN ! ignore both max_fopen & nproc_node
readstride = nprocs
nproc_node = 1
ELSE IF (nproc_node <= 1) THEN ! ignore nproc_node
nproc_node = 1
ELSE ! ignore max_fopen
readstride = nprocs
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Get the names of the input data files.
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
CALL get_input_file_names
(hinfmt,grdbasfn,hisfile,nhisfile)
lengbf = len_trim(grdbasfn)
IF(mp_opt > 0 .AND. readsplit <= 0) THEN
WRITE(grdbasfn,'(a,a,2i2.2)') grdbasfn(1:lengbf),'_',loc_x,loc_y
lengbf = lengbf + 5
END IF
CALL get_dims_from_data
(hinfmt,grdbasfn(1:lengbf), &
nx,ny,nz,nzsoil,nstyps, ireturn)
IF( ireturn /= 0 ) THEN
PRINT*,'Problem occured when trying to get dimensions from data.'
PRINT*,'Program stopped.'
STOP
END IF
IF (mp_opt > 0) THEN
IF( readsplit > 0 ) THEN
IF( MOD(nx-fzone,nproc_x) /= 0 .OR. MOD(ny-fzone,nproc_y) /= 0) THEN
WRITE(6,'(a/,a/,4(a,i5))') &
'The specification of nproc_x or nproc_y is not matched with nx or ny.',&
'nx-3 and ny-3 must be multiples of nproc_x and nproc_y respectively.', &
'nx = ', nx, ' ny = ', ny, ' nproc_x = ',nproc_x, ' nproc_y = ',nproc_y
nx = 0
ny = 0
ELSE
nx = (nx-fzone)/nproc_x + fzone
ny = (ny-fzone)/nproc_y + fzone
END IF
ELSE
nx = (nx-fzone)*ncompressx + fzone
ny = (ny-fzone)*ncompressy + fzone
END IF
END IF
END IF ! myproc == 0
CALL mpupdatei
(hinfmt,1)
CALL mpupdatec
(grdbasfn,256)
CALL mpupdatei
(nhisfile,1)
CALL mpupdatec
(hisfile,256*nhisfile_max)
CALL mpupdatei
(nx,1)
CALL mpupdatei
(ny,1)
CALL mpupdatei
(nz,1)
CALL mpupdatei
(nzsoil,1)
CALL mpupdatei
(nstyps,1)
IF( nx <= 0 .OR. ny <= 0 ) THEN
CALL mpexit
(1);
END IF
nstyp = nstyps ! Copy to global variable
IF(myproc == 0) THEN
WRITE(6,'(4(a,i5))') 'nx =',nx,', ny=',ny,', nz=',nz,', nzsoil=',nzsoil
print*,'nstyps =', nstyps
END IF
nxlg = (nx-3)*nproc_x + 3
nylg = (ny-3)*nproc_y + 3
!-----------------------------------------------------------------------
! Set certain defaul options / values
!-----------------------------------------------------------------------
msfplt = 0
ipvplt = 0
vagplt = 0
thkplt = 0
paprlnth = 1.5 ! default value
lnmag = 1 ! default value
lblmag = 1.0
winsiz = 1.0
margnx = 0.1
margny = 0.1
pcolbar = 1
axlbfmt = -1
axlbsiz = 0.025
tickopt=0
ctrlbopt = 1
ctrstyle = 1
ctrlbfrq = 2
ctrlbsiz = 0.02
lbmaskopt = 0
istride = 0
jstride = 0
kstride = 0
!
!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
!
! Read in plotting control parameters
!
!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
!
!
!-----------------------------------------------------------------------
!
! Page set-up parameters
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,page_setup,ERR=100)
WRITE(6,'(a)')'Namelist page_setup was successfully read.'
END IF
CALL mpupdatei
(layout,1)
CALL mpupdatei
(nxpic,1)
CALL mpupdatei
(nypic,1)
CALL mpupdatei
(inwfrm,1)
CALL mpupdater
(paprlnth,1)
IF(myproc == 0) THEN
READ(5,plotting_setup,ERR=100)
WRITE(6,'(a)')'Namelist plotting_setup was successfully read.'
END IF
CALL mpupdatei
(iorig,1)
CALL mpupdater
(xorig,1)
CALL mpupdater
(yorig,1)
CALL mpupdater
(xbgn,1)
CALL mpupdater
(xend,1)
CALL mpupdater
(ybgn,1)
CALL mpupdater
(yend,1)
CALL mpupdater
(zbgn,1)
CALL mpupdater
(zend,1)
CALL mpupdater
(zsoilbgn,1)
CALL mpupdater
(zsoilend,1)
CALL mpupdater
(yxstrch,1)
CALL mpupdater
(zxstrch,1)
CALL mpupdater
(zystrch,1)
CALL mpupdater
(zhstrch,1)
CALL mpupdater
(zsoilxstrch,1)
CALL mpupdater
(zsoilystrch,1)
CALL mpupdater
(winsiz,1)
CALL mpupdater
(margnx,1)
CALL mpupdater
(margny,1)
CALL mpupdater
(pcolbar,1)
IF(myproc == 0) THEN
READ(5,col_table_cntl, ERR=100)
WRITE(6,'(a)')'namelist col_table_cntl was successfully read.'
WRITE(6,'(a,i3)') 'Color table is : ',col_table
END IF
CALL mpupdatei
(col_table,1)
CALL mpupdatec
(color_map,80)
IF(myproc == 0) THEN
READ(5,style_tuning,ERR=100)
WRITE(6,'(a)')'Namelist style_tuning was successfully read.'
END IF
CALL mpupdater
(lblmag,1)
CALL mpupdatei
(lnmag,1)
CALL mpupdatei
(fontopt,1)
CALL mpupdatei
(lbaxis,1)
CALL mpupdatei
(axlbfmt,1)
CALL mpupdater
(axlbsiz,1)
CALL mpupdatei
(haxisu,1)
CALL mpupdatei
(vaxisu,1)
CALL mpupdatei
(tickopt,1)
CALL mpupdater
(hmintick,1)
CALL mpupdater
(vmajtick,1)
CALL mpupdater
(vmintick,1)
CALL mpupdater
(hmajtick,1)
CALL mpupdatei
(presaxis_no,1)
CALL mpupdater
(pres_val,20)
CALL mpupdatei
(ctrlbopt,1)
CALL mpupdatei
(ctrstyle,1)
CALL mpupdatei
(ctrlbfrq,1)
CALL mpupdater
(ctrlbsiz,1)
CALL mpupdatei
(lbmaskopt,1)
IF(myproc == 0) THEN
READ(5,smooth_cntl, ERR=100)
WRITE(6,'(a)')'Namelist ,smooth_cntl was successfully read.'
WRITE(6,'(a,i3)') 'Smoothing option is : ',smooth
END IF
CALL mpupdatei
(smooth,1)
IF(myproc == 0) THEN
READ(5,title_setup, ERR=100)
WRITE(6,'(a)')'Namelist title_setup was successfully read.'
END IF
CALL mpupdatei
(ntitle,1)
CALL mpupdatei
(titcol,1)
CALL mpupdater
(titsiz,1)
CALL mpupdatec
(title,3*256)
IF(myproc == 0) THEN
READ(5,footer_setup, ERR=100)
WRITE(6,'(a)')'Namelist footer_setup was successfully read.'
END IF
CALL mpupdatei
(wpltime,1)
CALL mpupdatec
(footer_l,256)
CALL mpupdatec
(footer_c,256)
CALL mpupdatec
(footer_r,256)
!
!-----------------------------------------------------------------------
!
! Input control parameters map plotting
!
!-----------------------------------------------------------------------
!
mapgrid = 0 ! no longer used.
IF(myproc == 0) THEN
READ(5,map_plot,ERR=100)
WRITE(6,'(a)')'Namelist map_plot was successfully read.'
IF(nmapfile > maxmap) &
WRITE(6,'(a)')'Warning: the maximum map files should be ',maxmap
DO i=1,nmapfile
lmapfile = LEN_TRIM(mapfile(i))
WRITE(6,'(1x,a,a)') 'Input was ',mapfile(i)(1:lmapfile)
IF(ovrmap == 1) THEN
INQUIRE(FILE=mapfile(i)(1:lmapfile), EXIST = fexist )
IF( .NOT.fexist) THEN
WRITE(6,'(a)') 'Warning: Map file '//mapfile(i)(1:lmapfile) &
//' not found. Program will be continue'
END IF
END IF
END DO
END IF
CALL mpupdatei
(ovrmap,1)
CALL mpupdatei
(mapgrid,1)
CALL mpupdater
(latgrid,1)
CALL mpupdater
(longrid,1)
CALL mpupdatei
(mapgridcol,1)
CALL mpupdatei
(nmapfile,1)
CALL mpupdatec
(mapfile,256*maxmap)
CALL mpupdatei
(mapcol,maxmap)
CALL mpupdatei
(mapline_style,maxmap)
IF(myproc == 0) THEN
READ(5,multi_setup,ERR=100)
WRITE(6,'(a)')'Namelist multi_setup was successfully read.'
END IF
CALL mpupdatei
(missfill_opt,1)
CALL mpupdatei
(missval_colind,1)
!
!-----------------------------------------------------------------------
!
! Input control parameters plotting type
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,xy_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist xy_slice_cntl was successfully read.'
END IF
CALL mpupdatei
(nslice_xy,1)
CALL mpupdatei
(slice_xy,max_dim)
IF(myproc == 0) THEN
READ(5,xz_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist xz_slice_cntl was successfully read.'
END IF
CALL mpupdatei
(nslice_xz,1)
CALL mpupdatei
(slice_xz,max_dim)
IF(myproc == 0) THEN
READ(5,yz_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist yz_slice_cntl was successfully read.'
END IF
CALL mpupdatei
(nslice_yz,1)
CALL mpupdatei
(slice_yz,max_dim)
IF(myproc == 0) THEN
READ(5,h_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist h_slice_cntl was successfully read.'
IF(nslice_h > max_dim ) THEN
WRITE(6,'(a,i3,a)') 'Please give value smaller than ', &
nz,'. Program stopped !'
CALL mpexit
(0)
END IF
END IF
CALL mpupdatei
(nslice_h,1)
CALL mpupdater
(slice_h,max_dim)
IF(myproc == 0) THEN
READ(5,xy_soil_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist xy_soil_slice_cntl was successfully read.'
END IF
CALL mpupdatei
(nslice_xy_soil,1)
CALL mpupdatei
(slice_xy_soil,max_dim)
IF(myproc == 0) THEN
READ(5,xz_soil_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist xz_soil_slice_cntl was successfully read.'
END IF
CALL mpupdatei
(nslice_xz_soil,1)
CALL mpupdatei
(slice_xz_soil,max_dim)
IF(myproc == 0) THEN
READ(5,yz_soil_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist yz_soil_slice_cntl was successfully read.'
END IF
CALL mpupdatei
(nslice_yz_soil,1)
CALL mpupdatei
(slice_yz_soil,max_dim)
IF(myproc == 0) THEN
READ(5,v_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist v_slice_cntl was successfully read.'
IF(nslice_v > nxlg+nylg) THEN
WRITE(6,'(1x,a,i3,a)') ' Please give a value smaller than ', &
nx+ny,'. Program stopped !'
CALL mpexit
(0)
END IF
END IF
CALL mpupdatei
(nslice_v,1)
CALL mpupdater
(xpnt1,max_dim)
CALL mpupdater
(ypnt1,max_dim)
CALL mpupdater
(xpnt2,max_dim)
CALL mpupdater
(ypnt2,max_dim)
IF(myproc == 0) THEN
READ(5,p_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist p_slice_cntl was successfully read.'
WRITE(6,'(a)') 'Pressure slices to be plotted are at p=: '
DO indxslic = 1,nslice_p
WRITE(6,'(1x,f10.3)') slice_p(indxslic)
END DO
IF(nslice_p > nz) THEN
WRITE(6,'(1x,a,i3,a)') 'Please give value smaller than ', &
nz,'. Program stopped !'
CALL mpexit
(0)
END IF
END IF
CALL mpupdatei
(nslice_p,1)
CALL mpupdater
(slice_p,max_dim)
IF(myproc == 0) THEN
READ(5,pt_slice_cntl,ERR=100)
WRITE(6,'(a)')'Namelist pt_slice_cntl was successfully read.'
IF(nslice_pt > max_dim) THEN
WRITE(6,'(1x,2(a,i3))') &
'Warning: Maximum number of PT slices allowed is max_dim= ', &
max_dim,'nslice_pt reset t= ',max_dim
nslice_pt = max_dim
END IF
WRITE(6,'(a)')'Isentropic slices to be plotted are at theta=:'
DO indxslic = 1,nslice_pt
WRITE(6,'(1x,f10.3)') slice_pt(indxslic)
END DO
END IF
CALL mpupdatei
(nslice_pt,1)
CALL mpupdater
(slice_pt,max_dim)
IF(myproc == 0) THEN
READ(5,domain_move,ERR=100)
WRITE(6,'(a)')'Namelist domain_move was successfully read.'
END IF
CALL mpupdatei
(imove,1)
CALL mpupdater
(umove,1)
CALL mpupdater
(vmove,1)
IF(myproc == 0) THEN
READ(5,sclrplt_cntl1, ERR=100)
WRITE(6,'(a)')'Namelist sclrplt_cntl1 was successfully read.'
END IF
CALL mpupdatei
(hplot,1)
CALL mpupdater
(hinc,1)
CALL mpupdater
(hminc,1)
CALL mpupdater
(hmaxc,1)
CALL mpupdatei
(hovr,1)
CALL mpupdatei
(hcol1,1)
CALL mpupdatei
(hcol2,1)
CALL mpupdatei
(hprio,1)
CALL mpupdatei
(hhlf,1)
CALL mpupdatei
(hzro,1)
CALL mpupdatei
(hsty,1)
CALL mpupdatei
(msfplt,1)
CALL mpupdater
(msfinc,1)
CALL mpupdater
(msfminc,1)
CALL mpupdater
(msfmaxc,1)
CALL mpupdatei
(msfovr,1)
CALL mpupdatei
(msfcol1,1)
CALL mpupdatei
(msfcol2,1)
CALL mpupdatei
(msfprio,1)
CALL mpupdatei
(msfhlf,1)
CALL mpupdatei
(msfzro,1)
CALL mpupdatei
(msfsty,1)
CALL mpupdatei
(thkplt,1)
CALL mpupdater
(thkinc,1)
CALL mpupdater
(thkminc,1)
CALL mpupdater
(thkmaxc,1)
CALL mpupdatei
(thkovr,1)
CALL mpupdatei
(thkcol1,1)
CALL mpupdatei
(thkcol2,1)
CALL mpupdatei
(thkprio,1)
CALL mpupdatei
(thkhlf,1)
CALL mpupdatei
(thkzro,1)
CALL mpupdatei
(thksty,1)
CALL mpupdatei
(tplot,1)
CALL mpupdater
(tinc,1)
CALL mpupdater
(tminc,1)
CALL mpupdater
(tmaxc,1)
CALL mpupdatei
(tovr,1)
CALL mpupdatei
(tcol1,1)
CALL mpupdatei
(tcol2,1)
CALL mpupdatei
(tprio,1)
CALL mpupdatec
(tunits,1)
CALL mpupdatei
(thlf,1)
CALL mpupdatei
(tzro,1)
CALL mpupdatei
(tsty,1)
CALL mpupdatei
(uplot,1)
CALL mpupdater
(uinc,1)
CALL mpupdater
(uminc,1)
CALL mpupdater
(umaxc,1)
CALL mpupdatei
(uovr,1)
CALL mpupdatei
(ucol1,1)
CALL mpupdatei
(ucol2,1)
CALL mpupdatei
(uprio,1)
CALL mpupdatei
(uhlf,1)
CALL mpupdatei
(uzro,1)
CALL mpupdatei
(usty,1)
CALL mpupdatei
(vplot,1)
CALL mpupdater
(vinc,1)
CALL mpupdater
(vminc,1)
CALL mpupdater
(vmaxc,1)
CALL mpupdatei
(vovr,1)
CALL mpupdatei
(vcol1,1)
CALL mpupdatei
(vcol2,1)
CALL mpupdatei
(vprio,1)
CALL mpupdatei
(vhlf,1)
CALL mpupdatei
(vzro,1)
CALL mpupdatei
(vsty,1)
CALL mpupdatei
(vhplot,1)
CALL mpupdater
(vhinc,1)
CALL mpupdater
(vhminc,1)
CALL mpupdater
(vhmaxc,1)
CALL mpupdatei
(vhovr,1)
CALL mpupdatei
(vhcol1,1)
CALL mpupdatei
(vhcol2,1)
CALL mpupdatei
(vhprio,1)
CALL mpupdatei
(vhunits,1)
CALL mpupdatei
(vhhlf,1)
CALL mpupdatei
(vhzro,1)
CALL mpupdatei
(vhsty,1)
CALL mpupdatei
(vsplot,1)
CALL mpupdater
(vsinc,1)
CALL mpupdater
(vsminc,1)
CALL mpupdater
(vsmaxc,1)
CALL mpupdatei
(vsovr,1)
CALL mpupdatei
(vscol1,1)
CALL mpupdatei
(vscol2,1)
CALL mpupdatei
(vsprio,1)
CALL mpupdatei
(vshlf,1)
CALL mpupdatei
(vszro,1)
CALL mpupdatei
(vssty,1)
CALL mpupdatei
(wplot,1)
CALL mpupdater
(winc,1)
CALL mpupdater
(wminc,1)
CALL mpupdater
(wmaxc,1)
CALL mpupdatei
(wovr,1)
CALL mpupdatei
(wcol1,1)
CALL mpupdatei
(wcol2,1)
CALL mpupdatei
(wprio,1)
CALL mpupdatei
(whlf,1)
CALL mpupdatei
(wzro,1)
CALL mpupdatei
(wsty,1)
CALL mpupdatei
(ptplot,1)
CALL mpupdater
(ptinc,1)
CALL mpupdater
(ptminc,1)
CALL mpupdater
(ptmaxc,1)
CALL mpupdatei
(ptovr,1)
CALL mpupdatei
(ptcol1,1)
CALL mpupdatei
(ptcol2,1)
CALL mpupdatei
(ptprio,1)
CALL mpupdatei
(pthlf,1)
CALL mpupdatei
(ptzro,1)
CALL mpupdatei
(ptsty,1)
CALL mpupdatei
(pplot,1)
CALL mpupdater
(pinc,1)
CALL mpupdater
(pminc,1)
CALL mpupdater
(pmaxc,1)
CALL mpupdatei
(povr,1)
CALL mpupdatei
(pcol1,1)
CALL mpupdatei
(pcol2,1)
CALL mpupdatei
(pprio,1)
CALL mpupdatei
(phlf,1)
CALL mpupdatei
(pzro,1)
CALL mpupdatei
(psty,1)
CALL mpupdatei
(ipvplt,1)
CALL mpupdater
(ipvinc,1)
CALL mpupdater
(ipvminc,1)
CALL mpupdater
(ipvmaxc,1)
CALL mpupdatei
(ipvovr,1)
CALL mpupdatei
(ipvcol1,1)
CALL mpupdatei
(ipvcol2,1)
CALL mpupdatei
(ipvprio,1)
CALL mpupdatei
(ipvhlf,1)
CALL mpupdatei
(ipvzro,1)
CALL mpupdatei
(ipvsty,1)
IF(myproc == 0) THEN
READ(5,sclrplt_cntl2, ERR=100)
WRITE(6,'(a)')'Namelist sclrplt_cntl2 was successfully read.'
END IF
CALL mpupdatei
(qvplot,1)
CALL mpupdater
(qvinc,1)
CALL mpupdater
(qvminc,1)
CALL mpupdater
(qvmaxc,1)
CALL mpupdatei
(qvovr,1)
CALL mpupdatei
(qvcol1,1)
CALL mpupdatei
(qvcol2,1)
CALL mpupdatei
(qvprio,1)
CALL mpupdatei
(qvhlf,1)
CALL mpupdatei
(qvzro,1)
CALL mpupdatei
(qvsty,1)
CALL mpupdatei
(qcplot,1)
CALL mpupdater
(qcinc,1)
CALL mpupdater
(qcminc,1)
CALL mpupdater
(qcmaxc,1)
CALL mpupdatei
(qcovr,1)
CALL mpupdatei
(qccol1,1)
CALL mpupdatei
(qccol2,1)
CALL mpupdatei
(qcprio,1)
CALL mpupdatei
(qchlf,1)
CALL mpupdatei
(qczro,1)
CALL mpupdatei
(qcsty,1)
CALL mpupdatei
(qrplot,1)
CALL mpupdater
(qrinc,1)
CALL mpupdater
(qrminc,1)
CALL mpupdater
(qrmaxc,1)
CALL mpupdatei
(qrovr,1)
CALL mpupdatei
(qrcol1,1)
CALL mpupdatei
(qrcol2,1)
CALL mpupdatei
(qrprio,1)
CALL mpupdatei
(qrhlf,1)
CALL mpupdatei
(qrzro,1)
CALL mpupdatei
(qrsty,1)
CALL mpupdatei
(qiplot,1)
CALL mpupdater
(qiinc,1)
CALL mpupdater
(qiminc,1)
CALL mpupdater
(qimaxc,1)
CALL mpupdatei
(qiovr,1)
CALL mpupdatei
(qicol1,1)
CALL mpupdatei
(qicol2,1)
CALL mpupdatei
(qiprio,1)
CALL mpupdatei
(qihlf,1)
CALL mpupdatei
(qizro,1)
CALL mpupdatei
(qisty,1)
CALL mpupdatei
(qsplot,1)
CALL mpupdater
(qsinc,1)
CALL mpupdater
(qsminc,1)
CALL mpupdater
(qsmaxc,1)
CALL mpupdatei
(qsovr,1)
CALL mpupdatei
(qscol1,1)
CALL mpupdatei
(qscol2,1)
CALL mpupdatei
(qsprio,1)
CALL mpupdatei
(qshlf,1)
CALL mpupdatei
(qszro,1)
CALL mpupdatei
(qssty,1)
CALL mpupdatei
(qhplot,1)
CALL mpupdater
(qhinc,1)
CALL mpupdater
(qhminc,1)
CALL mpupdater
(qhmaxc,1)
CALL mpupdatei
(qhovr,1)
CALL mpupdatei
(qhcol1,1)
CALL mpupdatei
(qhcol2,1)
CALL mpupdatei
(qhprio,1)
CALL mpupdatei
(qhhlf,1)
CALL mpupdatei
(qhzro,1)
CALL mpupdatei
(qhsty,1)
CALL mpupdatei
(qwplot,1)
CALL mpupdater
(qwinc,1)
CALL mpupdater
(qwminc,1)
CALL mpupdater
(qwmaxc,1)
CALL mpupdatei
(qwovr,1)
CALL mpupdatei
(qwcol1,1)
CALL mpupdatei
(qwcol2,1)
CALL mpupdatei
(qwprio,1)
CALL mpupdatei
(qwhlf,1)
CALL mpupdatei
(qwzro,1)
CALL mpupdatei
(qwsty,1)
CALL mpupdatei
(qtplot,1)
CALL mpupdater
(qtinc,1)
CALL mpupdater
(qtminc,1)
CALL mpupdater
(qtmaxc,1)
CALL mpupdatei
(qtovr,1)
CALL mpupdatei
(qtcol1,1)
CALL mpupdatei
(qtcol2,1)
CALL mpupdatei
(qtprio,1)
CALL mpupdatei
(qthlf,1)
CALL mpupdatei
(qtzro,1)
CALL mpupdatei
(qtsty,1)
IF(myproc == 0) THEN
READ(5,sclrplt_cntl3, ERR=100)
WRITE(6,'(a)')'Namelist sclrplt_cntl3 was successfully read.'
END IF
CALL mpupdatei
(kmhplt,1)
CALL mpupdater
(kmhinc,1)
CALL mpupdater
(kmhminc,1)
CALL mpupdater
(kmhmaxc,1)
CALL mpupdatei
(kmhovr,1)
CALL mpupdatei
(kmhcol1,1)
CALL mpupdatei
(kmhcol2,1)
CALL mpupdatei
(kmhprio,1)
CALL mpupdatei
(kmhhlf,1)
CALL mpupdatei
(kmhzro,1)
CALL mpupdatei
(kmhsty,1)
CALL mpupdatei
(kmvplt,1)
CALL mpupdater
(kmvinc,1)
CALL mpupdater
(kmvminc,1)
CALL mpupdater
(kmvmaxc,1)
CALL mpupdatei
(kmvovr,1)
CALL mpupdatei
(kmvcol1,1)
CALL mpupdatei
(kmvcol2,1)
CALL mpupdatei
(kmvprio,1)
CALL mpupdatei
(kmvhlf,1)
CALL mpupdatei
(kmvzro,1)
CALL mpupdatei
(kmvsty,1)
CALL mpupdatei
(tkeplt,1)
CALL mpupdater
(tkeinc,1)
CALL mpupdater
(tkeminc,1)
CALL mpupdater
(tkemaxc,1)
CALL mpupdatei
(tkeovr,1)
CALL mpupdatei
(tkecol1,1)
CALL mpupdatei
(tkecol2,1)
CALL mpupdatei
(tkeprio,1)
CALL mpupdatei
(tkehlf,1)
CALL mpupdatei
(tkezro,1)
CALL mpupdatei
(tkesty,1)
CALL mpupdatei
(rhplot,1)
CALL mpupdater
(rhinc,1)
CALL mpupdater
(rhminc,1)
CALL mpupdater
(rhmaxc,1)
CALL mpupdatei
(rhovr,1)
CALL mpupdatei
(rhcol1,1)
CALL mpupdatei
(rhcol2,1)
CALL mpupdatei
(rhprio,1)
CALL mpupdatei
(rhhlf,1)
CALL mpupdatei
(rhzro,1)
CALL mpupdatei
(rhsty,1)
CALL mpupdatei
(tdplot,1)
CALL mpupdater
(tdinc,1)
CALL mpupdater
(tdminc,1)
CALL mpupdater
(tdmaxc,1)
CALL mpupdatei
(tdovr,1)
CALL mpupdatei
(tdcol1,1)
CALL mpupdatei
(tdcol2,1)
CALL mpupdatei
(tdprio,1)
CALL mpupdatec
(tdunits,1)
CALL mpupdatei
(tdhlf,1)
CALL mpupdatei
(tdzro,1)
CALL mpupdatei
(tdsty,1)
CALL mpupdatei
(rfopt,1)
CALL mpupdatei
(rfplot,1)
CALL mpupdater
(rfinc,1)
CALL mpupdater
(rfminc,1)
CALL mpupdater
(rfmaxc,1)
CALL mpupdatei
(rfovr,1)
CALL mpupdatei
(rfcol1,1)
CALL mpupdatei
(rfcol2,1)
CALL mpupdatei
(rfprio,1)
CALL mpupdatei
(rfhlf,1)
CALL mpupdatei
(rfzro,1)
CALL mpupdatei
(rfsty,1)
CALL mpupdatei
(rfcplt,1)
CALL mpupdater
(rfcinc,1)
CALL mpupdater
(rfcminc,1)
CALL mpupdater
(rfcmaxc,1)
CALL mpupdatei
(rfcovr,1)
CALL mpupdatei
(rfccol1,1)
CALL mpupdatei
(rfccol2,1)
CALL mpupdatei
(rfcprio,1)
CALL mpupdatei
(rfchlf,1)
CALL mpupdatei
(rfczro,1)
CALL mpupdatei
(rfcsty,1)
CALL mpupdatei
(pteplt,1)
CALL mpupdater
(pteinc,1)
CALL mpupdater
(pteminc,1)
CALL mpupdater
(ptemaxc,1)
CALL mpupdatei
(pteovr,1)
CALL mpupdatei
(ptecol1,1)
CALL mpupdatei
(ptecol2,1)
CALL mpupdatei
(pteprio,1)
CALL mpupdatei
(ptehlf,1)
CALL mpupdatei
(ptezro,1)
CALL mpupdatei
(ptesty,1)
IF(myproc == 0) THEN
READ(5,sclrplt_cntl_prt1, ERR=100)
WRITE(6,'(a)')'Namelist sclrplt_cntl_prt1 was successfully read.'
END IF
CALL mpupdatei
(upplot,1)
CALL mpupdater
(upinc,1)
CALL mpupdater
(upminc,1)
CALL mpupdater
(upmaxc,1)
CALL mpupdatei
(upovr,1)
CALL mpupdatei
(upcol1,1)
CALL mpupdatei
(upcol2,1)
CALL mpupdatei
(upprio,1)
CALL mpupdatei
(uphlf,1)
CALL mpupdatei
(upzro,1)
CALL mpupdatei
(upsty,1)
CALL mpupdatei
(vpplot,1)
CALL mpupdater
(vpinc,1)
CALL mpupdater
(vpminc,1)
CALL mpupdater
(vpmaxc,1)
CALL mpupdatei
(vpovr,1)
CALL mpupdatei
(vpcol1,1)
CALL mpupdatei
(vpcol2,1)
CALL mpupdatei
(vpprio,1)
CALL mpupdatei
(vphlf,1)
CALL mpupdatei
(vpzro,1)
CALL mpupdatei
(vpsty,1)
CALL mpupdatei
(wpplot,1)
CALL mpupdater
(wpinc,1)
CALL mpupdater
(wpminc,1)
CALL mpupdater
(wpmaxc,1)
CALL mpupdatei
(wpovr,1)
CALL mpupdatei
(wpcol1,1)
CALL mpupdatei
(wpcol2,1)
CALL mpupdatei
(wpprio,1)
CALL mpupdatei
(wphlf,1)
CALL mpupdatei
(wpzro,1)
CALL mpupdatei
(wpsty,1)
CALL mpupdatei
(ptpplt,1)
CALL mpupdater
(ptpinc,1)
CALL mpupdater
(ptpminc,1)
CALL mpupdater
(ptpmaxc,1)
CALL mpupdatei
(ptpovr,1)
CALL mpupdatei
(ptpcol1,1)
CALL mpupdatei
(ptpcol2,1)
CALL mpupdatei
(ptpprio,1)
CALL mpupdatei
(ptphlf,1)
CALL mpupdatei
(ptpzro,1)
CALL mpupdatei
(ptpsty,1)
CALL mpupdatei
(ppplot,1)
CALL mpupdater
(ppinc,1)
CALL mpupdater
(ppminc,1)
CALL mpupdater
(ppmaxc,1)
CALL mpupdatei
(ppovr,1)
CALL mpupdatei
(ppcol1,1)
CALL mpupdatei
(ppcol2,1)
CALL mpupdatei
(ppprio,1)
CALL mpupdatei
(pphlf,1)
CALL mpupdatei
(ppzro,1)
CALL mpupdatei
(ppsty,1)
CALL mpupdatei
(qvpplt,1)
CALL mpupdater
(qvpinc,1)
CALL mpupdater
(qvpminc,1)
CALL mpupdater
(qvpmaxc,1)
CALL mpupdatei
(qvpovr,1)
CALL mpupdatei
(qvpcol1,1)
CALL mpupdatei
(qvpcol2,1)
CALL mpupdatei
(qvpprio,1)
CALL mpupdatei
(qvphlf,1)
CALL mpupdatei
(qvpzro,1)
CALL mpupdatei
(qvpsty,1)
CALL mpupdatei
(vorpplt,1)
CALL mpupdater
(vorpinc,1)
CALL mpupdater
(vorpminc,1)
CALL mpupdater
(vorpmaxc,1)
CALL mpupdatei
(vorpovr,1)
CALL mpupdatei
(vorpcol1,1)
CALL mpupdatei
(vorpcol2,1)
CALL mpupdatei
(vorphlf,1)
CALL mpupdatei
(vorpprio,1)
CALL mpupdatei
(vorpzro,1)
CALL mpupdatei
(vorpsty,1)
CALL mpupdatei
(divpplt,1)
CALL mpupdater
(divpinc,1)
CALL mpupdater
(divpminc,1)
CALL mpupdater
(divpmaxc,1)
CALL mpupdatei
(divpovr,1)
CALL mpupdatei
(divpcol1,1)
CALL mpupdatei
(divpcol2,1)
CALL mpupdatei
(divphlf,1)
CALL mpupdatei
(divpprio,1)
CALL mpupdatei
(divpzro,1)
CALL mpupdatei
(divpsty,1)
CALL mpupdatei
(divqplt,1)
CALL mpupdater
(divqinc,1)
CALL mpupdater
(divqminc,1)
CALL mpupdater
(divqmaxc,1)
CALL mpupdatei
(divqovr,1)
CALL mpupdatei
(divqcol1,1)
CALL mpupdatei
(divqcol2,1)
CALL mpupdatei
(divqhlf,1)
CALL mpupdatei
(divqprio,1)
CALL mpupdatei
(divqzro,1)
CALL mpupdatei
(divqsty,1)
IF(myproc == 0) THEN
READ(5,sclrplt_cntl_prt2, ERR=100)
WRITE(6,'(a)')'Namelist sclrplt_cntl_prt2 was successfully read.'
END IF
CALL mpupdatei
(gricplt,1)
CALL mpupdater
(gricinc,1)
CALL mpupdater
(gricminc,1)
CALL mpupdater
(gricmaxc,1)
CALL mpupdatei
(gricovr,1)
CALL mpupdatei
(griccol1,1)
CALL mpupdatei
(griccol2,1)
CALL mpupdatei
(grichlf,1)
CALL mpupdatei
(gricprio,1)
CALL mpupdatei
(griczro,1)
CALL mpupdatei
(gricsty,1)
CALL mpupdatei
(avorplt,1)
CALL mpupdater
(avorinc,1)
CALL mpupdater
(avorminc,1)
CALL mpupdater
(avormaxc,1)
CALL mpupdatei
(avorovr,1)
CALL mpupdatei
(avorcol1,1)
CALL mpupdatei
(avorcol2,1)
CALL mpupdatei
(avorhlf,1)
CALL mpupdatei
(avorprio,1)
CALL mpupdatei
(avorzro,1)
CALL mpupdatei
(avorsty,1)
CALL mpupdatei
(rhiplot,1)
CALL mpupdater
(rhiinc,1)
CALL mpupdater
(rhiminc,1)
CALL mpupdater
(rhimaxc,1)
CALL mpupdatei
(rhiovr,1)
CALL mpupdatei
(rhicol1,1)
CALL mpupdatei
(rhicol2,1)
CALL mpupdatei
(rhiprio,1)
CALL mpupdatei
(rhihlf,1)
CALL mpupdatei
(rhizro,1)
CALL mpupdatei
(rhisty,1)
IF(myproc == 0) THEN
READ(5,vctrplt_cntl, ERR=100)
WRITE(6,'(a)')'Namelist vctrplt_cntl was successfully read.'
END IF
CALL mpupdatei
(istride,1)
CALL mpupdatei
(jstride,1)
CALL mpupdatei
(kstride,1)
CALL mpupdatei
(vtrplt,1)
CALL mpupdater
(vtrunit,1)
CALL mpupdatei
(vtrovr,1)
CALL mpupdatei
(vtrcol1,1)
CALL mpupdatei
(vtrcol2,1)
CALL mpupdatei
(vtrprio,1)
CALL mpupdatei
(vtrunits,1)
CALL mpupdatei
(vtrtype,1)
CALL mpupdatei
(vtpplt,1)
CALL mpupdater
(vtpunit,1)
CALL mpupdatei
(vtpovr,1)
CALL mpupdatei
(vtpcol1,1)
CALL mpupdatei
(vtpcol2,1)
CALL mpupdatei
(vtpprio,1)
CALL mpupdatei
(vtpunits,1)
CALL mpupdatei
(vtptype,1)
CALL mpupdatei
(xuvplt,1)
CALL mpupdater
(xuvunit,1)
CALL mpupdatei
(xuvovr,1)
CALL mpupdatei
(xuvcol1,1)
CALL mpupdatei
(xuvcol2,1)
CALL mpupdatei
(xuvprio,1)
CALL mpupdatei
(xuvunits,1)
CALL mpupdatei
(xuvtype,1)
CALL mpupdatei
(strmplt,1)
CALL mpupdater
(strmunit,1)
CALL mpupdatei
(strmovr,1)
CALL mpupdatei
(strmcol1,1)
CALL mpupdatei
(strmcol2,1)
CALL mpupdatei
(strmprio,1)
CALL mpupdatei
(strmunits,1)
CALL mpupdatei
(strmtype,1)
CALL mpupdatei
(vagplt,1)
CALL mpupdater
(vagunit,1)
CALL mpupdatei
(vagovr,1)
CALL mpupdatei
(vagcol1,1)
CALL mpupdatei
(vagcol2,1)
CALL mpupdatei
(vagprio,1)
CALL mpupdatei
(vagunits,1)
CALL mpupdatei
(vagtype,1)
IF(myproc == 0) THEN
READ(5,strmplt_cntl,ERR=100)
WRITE(6,'(a)')'Namelist strmplt_cntl was successfully read.'
IF ( nprocs > 1 .AND. vtrstrm /= 0 ) THEN
WRITE(6,'(a)') &
'*** Streamlines won''t work in an MPI job. Turning off. ***'
vtrstrm = 0
END IF
END IF
CALL mpupdatei
(vtrstrm,1)
CALL mpupdatei
(vtrstmovr,1)
CALL mpupdatei
(vtrstmcol1,1)
CALL mpupdatei
(vtrstmcol2,1)
CALL mpupdatei
(vtrstmprio,1)
CALL mpupdatei
(vtpstrm,1)
CALL mpupdatei
(vtpstmovr,1)
CALL mpupdatei
(vtpstmcol1,1)
CALL mpupdatei
(vtpstmcol2,1)
CALL mpupdatei
(vtpstmprio,1)
!
!-----------------------------------------------------------------------
!
! Input control parameters for 2-d surface feild plotting
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,sfc_plot1,ERR=100)
WRITE(6,'(a)')'Namelist sfc_plot1 was successfully read.'
END IF
CALL mpupdatei
(trnplt,1)
CALL mpupdater
(trninc,1)
CALL mpupdater
(trnminc,1)
CALL mpupdater
(trnmaxc,1)
CALL mpupdatei
(trnovr,1)
CALL mpupdatei
(trncol1,1)
CALL mpupdatei
(trncol2,1)
CALL mpupdatei
(trnprio,1)
CALL mpupdatei
(trnhlf,1)
CALL mpupdatei
(trnzro,1)
CALL mpupdatei
(trnsty,1)
CALL mpupdatei
(wetcanplt,1)
CALL mpupdater
(wcpinc,1)
CALL mpupdater
(wcpminc,1)
CALL mpupdater
(wcpmaxc,1)
CALL mpupdatei
(wcpovr,1)
CALL mpupdatei
(wcpcol1,1)
CALL mpupdatei
(wcpcol2,1)
CALL mpupdatei
(wcpprio,1)
CALL mpupdatei
(wcphlf,1)
CALL mpupdatei
(wcpzro,1)
CALL mpupdatei
(wcpsty,1)
CALL mpupdatei
(raincplt,1)
CALL mpupdater
(raincinc,1)
CALL mpupdater
(raincminc,1)
CALL mpupdater
(raincmaxc,1)
CALL mpupdatei
(racovr,1)
CALL mpupdatei
(raccol1,1)
CALL mpupdatei
(raccol2,1)
CALL mpupdatei
(rachlf,1)
CALL mpupdatei
(racprio,1)
CALL mpupdatei
(raczro,1)
CALL mpupdatei
(racsty,1)
CALL mpupdatei
(racunit,1)
CALL mpupdatei
(raingplt,1)
CALL mpupdater
(rainginc,1)
CALL mpupdater
(raingminc,1)
CALL mpupdater
(raingmaxc,1)
CALL mpupdatei
(ragovr,1)
CALL mpupdatei
(ragcol1,1)
CALL mpupdatei
(ragcol2,1)
CALL mpupdatei
(raghlf,1)
CALL mpupdatei
(ragprio,1)
CALL mpupdatei
(ragzro,1)
CALL mpupdatei
(ragsty,1)
CALL mpupdatei
(ragunit,1)
CALL mpupdatei
(raintplt,1)
CALL mpupdater
(raintinc,1)
CALL mpupdater
(raintminc,1)
CALL mpupdater
(raintmaxc,1)
CALL mpupdatei
(ratovr,1)
CALL mpupdatei
(ratcol1,1)
CALL mpupdatei
(ratcol2,1)
CALL mpupdatei
(rathlf,1)
CALL mpupdatei
(ratprio,1)
CALL mpupdatei
(ratzro,1)
CALL mpupdatei
(ratsty,1)
CALL mpupdatei
(ratunit,1)
CALL mpupdatei
(rainicplt,1)
CALL mpupdater
(rainicinc,1)
CALL mpupdater
(rainicminc,1)
CALL mpupdater
(rainicmaxc,1)
CALL mpupdatei
(raicovr,1)
CALL mpupdatei
(raiccol1,1)
CALL mpupdatei
(raiccol2,1)
CALL mpupdatei
(raichlf,1)
CALL mpupdatei
(raicprio,1)
CALL mpupdatei
(raiczro,1)
CALL mpupdatei
(raicsty,1)
CALL mpupdatei
(raicunit,1)
CALL mpupdatei
(rainigplt,1)
CALL mpupdater
(rainiginc,1)
CALL mpupdater
(rainigminc,1)
CALL mpupdater
(rainigmaxc,1)
CALL mpupdatei
(raigovr,1)
CALL mpupdatei
(raigcol1,1)
CALL mpupdatei
(raigcol2,1)
CALL mpupdatei
(raighlf,1)
CALL mpupdatei
(raigprio,1)
CALL mpupdatei
(raigzro,1)
CALL mpupdatei
(raigsty,1)
CALL mpupdatei
(raigunit,1)
CALL mpupdatei
(rainitplt,1)
CALL mpupdater
(rainitinc,1)
CALL mpupdater
(rainitminc,1)
CALL mpupdater
(rainitmaxc,1)
CALL mpupdatei
(raitovr,1)
CALL mpupdatei
(raitcol1,1)
CALL mpupdatei
(raitcol2,1)
CALL mpupdatei
(raithlf,1)
CALL mpupdatei
(raitprio,1)
CALL mpupdatei
(raitzro,1)
CALL mpupdatei
(raitsty,1)
CALL mpupdatei
(raitunit,1)
IF(myproc == 0) THEN
READ(5,soil_plot,ERR=100)
WRITE(6,'(a)')'Namelist soil_plot was successfully read.'
END IF
CALL mpupdatei
(tsoilplt,1)
CALL mpupdater
(tsoilinc,1)
CALL mpupdater
(tsoilminc,1)
CALL mpupdater
(tsoilmaxc,1)
CALL mpupdatei
(tsoilovr,1)
CALL mpupdatei
(tsoilcol1,1)
CALL mpupdatei
(tsoilcol2,1)
CALL mpupdatei
(tsoilhlf,1)
CALL mpupdatei
(tsoilprio,1)
CALL mpupdatei
(tsoilzro,1)
CALL mpupdatei
(qsoilplt,1)
CALL mpupdater
(qsoilinc,1)
CALL mpupdater
(qsoilminc,1)
CALL mpupdater
(qsoilmaxc,1)
CALL mpupdatei
(qsoilovr,1)
CALL mpupdatei
(qsoilcol1,1)
CALL mpupdatei
(qsoilcol2,1)
CALL mpupdatei
(qsoilhlf,1)
CALL mpupdatei
(qsoilprio,1)
CALL mpupdatei
(qsoilzro,1)
IF(myproc == 0) THEN
READ(5,sfc_plot2,ERR=100)
WRITE(6,'(a)')'Namelist sfc_plot2 was successfully read.'
END IF
CALL mpupdatei
(pslplt,1)
CALL mpupdater
(pslinc,1)
CALL mpupdater
(pslminc,1)
CALL mpupdater
(pslmaxc,1)
CALL mpupdatei
(pslovr,1)
CALL mpupdatei
(pslcol1,1)
CALL mpupdatei
(pslcol2,1)
CALL mpupdatei
(pslprio,1)
CALL mpupdatei
(pslhlf,1)
CALL mpupdatei
(pslzro,1)
CALL mpupdatei
(pslsty,1)
CALL mpupdatei
(capeplt,1)
CALL mpupdater
(capeinc,1)
CALL mpupdater
(capeminc,1)
CALL mpupdater
(capemaxc,1)
CALL mpupdatei
(capovr,1)
CALL mpupdatei
(capcol1,1)
CALL mpupdatei
(capcol2,1)
CALL mpupdatei
(capprio,1)
CALL mpupdatei
(caphlf,1)
CALL mpupdatei
(capzro,1)
CALL mpupdatei
(capsty,1)
CALL mpupdatei
(cinplt,1)
CALL mpupdater
(cininc,1)
CALL mpupdater
(cinminc,1)
CALL mpupdater
(cinmaxc,1)
CALL mpupdatei
(cinovr,1)
CALL mpupdatei
(cincol1,1)
CALL mpupdatei
(cincol2,1)
CALL mpupdatei
(cinprio,1)
CALL mpupdatei
(cinhlf,1)
CALL mpupdatei
(cinzro,1)
CALL mpupdatei
(cinsty,1)
CALL mpupdatei
(thetplt,1)
CALL mpupdater
(thetinc,1)
CALL mpupdater
(thetminc,1)
CALL mpupdater
(thetmaxc,1)
CALL mpupdatei
(theovr,1)
CALL mpupdatei
(thecol1,1)
CALL mpupdatei
(thecol2,1)
CALL mpupdatei
(theprio,1)
CALL mpupdatei
(thehlf,1)
CALL mpupdatei
(thezro,1)
CALL mpupdatei
(thesty,1)
CALL mpupdatei
(heliplt,1)
CALL mpupdater
(heliinc,1)
CALL mpupdater
(heliminc,1)
CALL mpupdater
(helimaxc,1)
CALL mpupdatei
(helovr,1)
CALL mpupdatei
(helcol1,1)
CALL mpupdatei
(helcol2,1)
CALL mpupdatei
(helprio,1)
CALL mpupdatei
(helhlf,1)
CALL mpupdatei
(helzro,1)
CALL mpupdatei
(helsty,1)
CALL mpupdatei
(brnplt,1)
CALL mpupdater
(brninc,1)
CALL mpupdater
(brnminc,1)
CALL mpupdater
(brnmaxc,1)
CALL mpupdatei
(brnovr,1)
CALL mpupdatei
(brncol1,1)
CALL mpupdatei
(brncol2,1)
CALL mpupdatei
(brnprio,1)
CALL mpupdatei
(brnhlf,1)
CALL mpupdatei
(brnzro,1)
CALL mpupdatei
(brnsty,1)
CALL mpupdatei
(brnuplt,1)
CALL mpupdater
(brnuinc,1)
CALL mpupdater
(bruminc,1)
CALL mpupdater
(brumaxc,1)
CALL mpupdatei
(brnuovr,1)
CALL mpupdatei
(brnucol1,1)
CALL mpupdatei
(brnucol2,1)
CALL mpupdatei
(brnuhlf,1)
CALL mpupdatei
(brnuzro,1)
CALL mpupdatei
(brnusty,1)
CALL mpupdatei
(bruprio,1)
CALL mpupdatei
(srlfplt,1)
CALL mpupdater
(srlfinc,1)
CALL mpupdater
(srlminc,1)
CALL mpupdater
(srlmaxc,1)
CALL mpupdatei
(srlfovr,1)
CALL mpupdatei
(srlfcol1,1)
CALL mpupdatei
(srlfcol2,1)
CALL mpupdatei
(srlfhlf,1)
CALL mpupdatei
(srlfzro,1)
CALL mpupdatei
(srlfsty,1)
CALL mpupdatei
(srlprio,1)
CALL mpupdatei
(srmfplt,1)
CALL mpupdater
(srmfinc,1)
CALL mpupdater
(srmminc,1)
CALL mpupdater
(srmmaxc,1)
CALL mpupdatei
(srmfovr,1)
CALL mpupdatei
(srmfcol1,1)
CALL mpupdatei
(srmfcol2,1)
CALL mpupdatei
(srmfhlf,1)
CALL mpupdatei
(srmfzro,1)
CALL mpupdatei
(srmfsty,1)
CALL mpupdatei
(srmprio,1)
IF(myproc == 0) THEN
READ(5,sfc_plot3,ERR=100)
WRITE(6,'(a)')'Namelist sfc_plot3 was successfully read.'
END IF
CALL mpupdatei
(liplt,1)
CALL mpupdater
(liinc,1)
CALL mpupdater
(liminc,1)
CALL mpupdater
(limaxc,1)
CALL mpupdatei
(liovr,1)
CALL mpupdatei
(licol1,1)
CALL mpupdatei
(licol2,1)
CALL mpupdatei
(liprio,1)
CALL mpupdatei
(lihlf,1)
CALL mpupdatei
(lizro,1)
CALL mpupdatei
(listy,1)
CALL mpupdatei
(capsplt,1)
CALL mpupdater
(capsinc,1)
CALL mpupdater
(capsminc,1)
CALL mpupdater
(capsmaxc,1)
CALL mpupdatei
(capsovr,1)
CALL mpupdatei
(capscol1,1)
CALL mpupdatei
(capscol2,1)
CALL mpupdatei
(capshlf,1)
CALL mpupdatei
(capszro,1)
CALL mpupdatei
(capssty,1)
CALL mpupdatei
(capsprio,1)
CALL mpupdatei
(blcoplt,1)
CALL mpupdater
(blcoinc,1)
CALL mpupdater
(blcominc,1)
CALL mpupdater
(blcomaxc,1)
CALL mpupdatei
(blcoovr,1)
CALL mpupdatei
(blcocol1,1)
CALL mpupdatei
(blcocol2,1)
CALL mpupdatei
(blcohlf,1)
CALL mpupdatei
(blcozro,1)
CALL mpupdatei
(blcosty,1)
CALL mpupdatei
(blcoprio,1)
CALL mpupdatei
(viqcplt,1)
CALL mpupdater
(viqcinc,1)
CALL mpupdater
(viqcminc,1)
CALL mpupdater
(viqcmaxc,1)
CALL mpupdatei
(viqcovr,1)
CALL mpupdatei
(viqccol1,1)
CALL mpupdatei
(viqccol2,1)
CALL mpupdatei
(viqchlf,1)
CALL mpupdatei
(viqczro,1)
CALL mpupdatei
(viqcsty,1)
CALL mpupdatei
(viqcprio,1)
CALL mpupdatei
(viqiplt,1)
CALL mpupdater
(viqiinc,1)
CALL mpupdater
(viqiminc,1)
CALL mpupdater
(viqimaxc,1)
CALL mpupdatei
(viqiovr,1)
CALL mpupdatei
(viqicol1,1)
CALL mpupdatei
(viqicol2,1)
CALL mpupdatei
(viqihlf,1)
CALL mpupdatei
(viqizro,1)
CALL mpupdatei
(viqisty,1)
CALL mpupdatei
(viqiprio,1)
CALL mpupdatei
(viqrplt,1)
CALL mpupdater
(viqrinc,1)
CALL mpupdater
(viqrminc,1)
CALL mpupdater
(viqrmaxc,1)
CALL mpupdatei
(viqrovr,1)
CALL mpupdatei
(viqrcol1,1)
CALL mpupdatei
(viqrcol2,1)
CALL mpupdatei
(viqrhlf,1)
CALL mpupdatei
(viqrzro,1)
CALL mpupdatei
(viqrsty,1)
CALL mpupdatei
(viqrprio,1)
CALL mpupdatei
(viqsplt,1)
CALL mpupdater
(viqsinc,1)
CALL mpupdater
(viqsminc,1)
CALL mpupdater
(viqsmaxc,1)
CALL mpupdatei
(viqsovr,1)
CALL mpupdatei
(viqscol1,1)
CALL mpupdatei
(viqscol2,1)
CALL mpupdatei
(viqshlf,1)
CALL mpupdatei
(viqszro,1)
CALL mpupdatei
(viqssty,1)
CALL mpupdatei
(viqsprio,1)
CALL mpupdatei
(viqhplt,1)
CALL mpupdater
(viqhinc,1)
CALL mpupdater
(viqhminc,1)
CALL mpupdater
(viqhmaxc,1)
CALL mpupdatei
(viqhovr,1)
CALL mpupdatei
(viqhcol1,1)
CALL mpupdatei
(viqhcol2,1)
CALL mpupdatei
(viqhhlf,1)
CALL mpupdatei
(viqhzro,1)
CALL mpupdatei
(viqhsty,1)
CALL mpupdatei
(viqhprio,1)
CALL mpupdatei
(vilplt,1)
CALL mpupdater
(vilinc,1)
CALL mpupdater
(vilminc,1)
CALL mpupdater
(vilmaxc,1)
CALL mpupdatei
(vilovr,1)
CALL mpupdatei
(vilcol1,1)
CALL mpupdatei
(vilcol2,1)
CALL mpupdatei
(vilhlf,1)
CALL mpupdatei
(vilzro,1)
CALL mpupdatei
(vilsty,1)
CALL mpupdatei
(vilprio,1)
IF(myproc == 0) THEN
READ(5,sfc_plot4,ERR=100)
WRITE(6,'(a)')'Namelist sfc_plot4 was successfully read.'
END IF
CALL mpupdatei
(viiplt,1)
CALL mpupdater
(viiinc,1)
CALL mpupdater
(viiminc,1)
CALL mpupdater
(viimaxc,1)
CALL mpupdatei
(viiovr,1)
CALL mpupdatei
(viicol1,1)
CALL mpupdatei
(viicol2,1)
CALL mpupdatei
(viihlf,1)
CALL mpupdatei
(viizro,1)
CALL mpupdatei
(viisty,1)
CALL mpupdatei
(viiprio,1)
CALL mpupdatei
(vicplt,1)
CALL mpupdater
(vicinc,1)
CALL mpupdater
(vicminc,1)
CALL mpupdater
(vicmaxc,1)
CALL mpupdatei
(vicovr,1)
CALL mpupdatei
(viccol1,1)
CALL mpupdatei
(viccol2,1)
CALL mpupdatei
(vichlf,1)
CALL mpupdatei
(viczro,1)
CALL mpupdatei
(vicsty,1)
CALL mpupdatei
(vicprio,1)
CALL mpupdatei
(ctcplt,1)
CALL mpupdater
(ctcinc,1)
CALL mpupdater
(ctcminc,1)
CALL mpupdater
(ctcmaxc,1)
CALL mpupdatei
(ctcovr,1)
CALL mpupdatei
(ctccol1,1)
CALL mpupdatei
(ctccol2,1)
CALL mpupdatei
(ctchlf,1)
CALL mpupdatei
(ctczro,1)
CALL mpupdatei
(ctcsty,1)
CALL mpupdatei
(ctcprio,1)
CALL mpupdatei
(vitplt,1)
CALL mpupdater
(vitinc,1)
CALL mpupdater
(vitminc,1)
CALL mpupdater
(vitmaxc,1)
CALL mpupdatei
(vitovr,1)
CALL mpupdatei
(vitcol1,1)
CALL mpupdatei
(vitcol2,1)
CALL mpupdatei
(vithlf,1)
CALL mpupdatei
(vitzro,1)
CALL mpupdatei
(vitsty,1)
CALL mpupdatei
(vitprio,1)
CALL mpupdatei
(pwplt,1)
CALL mpupdater
(pwinc,1)
CALL mpupdater
(pwminc,1)
CALL mpupdater
(pwmaxc,1)
CALL mpupdatei
(pwovr,1)
CALL mpupdatei
(pwcol1,1)
CALL mpupdatei
(pwcol2,1)
CALL mpupdatei
(pwhlf,1)
CALL mpupdatei
(pwzro,1)
CALL mpupdatei
(pwsty,1)
CALL mpupdatei
(pwprio,1)
CALL mpupdatei
(tprplt,1)
CALL mpupdater
(tprinc,1)
CALL mpupdater
(tprminc,1)
CALL mpupdater
(tprmaxc,1)
CALL mpupdatei
(tprovr,1)
CALL mpupdatei
(tprcol1,1)
CALL mpupdatei
(tprcol2,1)
CALL mpupdatei
(tprhlf,1)
CALL mpupdatei
(tprzro,1)
CALL mpupdatei
(tprsty,1)
CALL mpupdatei
(tprprio,1)
CALL mpupdatei
(tprunits,1)
CALL mpupdatei
(gprplt,1)
CALL mpupdater
(gprinc,1)
CALL mpupdater
(gprminc,1)
CALL mpupdater
(gprmaxc,1)
CALL mpupdatei
(gprovr,1)
CALL mpupdatei
(gprcol1,1)
CALL mpupdatei
(gprcol2,1)
CALL mpupdatei
(gprhlf,1)
CALL mpupdatei
(gprzro,1)
CALL mpupdatei
(gprsty,1)
CALL mpupdatei
(gprprio,1)
CALL mpupdatei
(gprunits,1)
CALL mpupdatei
(cprplt,1)
CALL mpupdater
(cprinc,1)
CALL mpupdater
(cprminc,1)
CALL mpupdater
(cprmaxc,1)
CALL mpupdatei
(cprovr,1)
CALL mpupdatei
(cprcol1,1)
CALL mpupdatei
(cprcol2,1)
CALL mpupdatei
(cprhlf,1)
CALL mpupdatei
(cprzro,1)
CALL mpupdatei
(cprsty,1)
CALL mpupdatei
(cprprio,1)
CALL mpupdatei
(cprunits,1)
!-----------------------------------------------------------------------
!
! Input control parameters for 2-d surface characteristics plotting
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,sfc_cha_plot,ERR=100)
WRITE(6,'(a)') &
'Namelist sfc_cha_plot was successfully read.'
END IF
CALL mpupdatei
(soiltpplt,1)
CALL mpupdater
(soiltpinc,1)
CALL mpupdater
(soiltpminc,1)
CALL mpupdater
(soiltpmaxc,1)
CALL mpupdatei
(styovr,1)
CALL mpupdatei
(stycol1,1)
CALL mpupdatei
(stycol2,1)
CALL mpupdatei
(styhlf,1)
CALL mpupdatei
(styzro,1)
CALL mpupdatei
(stysty,1)
CALL mpupdatei
(styprio,1)
CALL mpupdatei
(soiltpn,1)
CALL mpupdatei
(vegtpplt,1)
CALL mpupdater
(vegtpinc,1)
CALL mpupdater
(vegtpminc,1)
CALL mpupdater
(vegtpmaxc,1)
CALL mpupdatei
(vtyovr,1)
CALL mpupdatei
(vtycol1,1)
CALL mpupdatei
(vtycol2,1)
CALL mpupdatei
(vtyhlf,1)
CALL mpupdatei
(vtyzro,1)
CALL mpupdatei
(vtysty,1)
CALL mpupdatei
(vtyprio,1)
CALL mpupdatei
(laiplt,1)
CALL mpupdater
(laiinc,1)
CALL mpupdater
(laiminc,1)
CALL mpupdater
(laimaxc,1)
CALL mpupdatei
(laiovr,1)
CALL mpupdatei
(laicol1,1)
CALL mpupdatei
(laicol2,1)
CALL mpupdatei
(laiprio,1)
CALL mpupdatei
(laihlf,1)
CALL mpupdatei
(laizro,1)
CALL mpupdatei
(laisty,1)
CALL mpupdatei
(rouplt,1)
CALL mpupdater
(rouinc,1)
CALL mpupdater
(rouminc,1)
CALL mpupdater
(roumaxc,1)
CALL mpupdatei
(rouovr,1)
CALL mpupdatei
(roucol1,1)
CALL mpupdatei
(roucol2,1)
CALL mpupdatei
(rouprio,1)
CALL mpupdatei
(rouhlf,1)
CALL mpupdatei
(rouzro,1)
CALL mpupdatei
(rousty,1)
CALL mpupdatei
(vegplt,1)
CALL mpupdater
(veginc,1)
CALL mpupdater
(vegminc,1)
CALL mpupdater
(vegmaxc,1)
CALL mpupdatei
(vegovr,1)
CALL mpupdatei
(vegcol1,1)
CALL mpupdatei
(vegcol2,1)
CALL mpupdatei
(vegprio,1)
CALL mpupdatei
(veghlf,1)
CALL mpupdatei
(vegzro,1)
CALL mpupdatei
(vegsty,1)
CALL mpupdatei
(snowdplt,1)
CALL mpupdater
(snowdinc,1)
CALL mpupdater
(snowdminc,1)
CALL mpupdater
(snowdmaxc,1)
CALL mpupdatei
(snowdovr,1)
CALL mpupdatei
(snowdcol1,1)
CALL mpupdatei
(snowdcol2,1)
CALL mpupdatei
(snowdprio,1)
CALL mpupdatei
(snowdhlf,1)
CALL mpupdatei
(snowdzro,1)
CALL mpupdatei
(snowdsty,1)
!-----------------------------------------------------------------------
!
! Input control parameter for uneven contour interval
!
!-----------------------------------------------------------------------
DO i=1,maxuneva
setcontvar(i)(1:12) = ' '
DO k=1,maxunevm
setconts(k,i) = -9999.
END DO
END DO
IF(myproc == 0) THEN
READ(5,setcont_cntl,ERR=100)
WRITE(6,'(a)')'Namelist setcont_cntl was successfully read.'
END IF
CALL mpupdatei
(setcontopt,1)
CALL mpupdatei
(setcontnum,1)
CALL mpupdatec
(setcontvar,12*maxuneva)
CALL mpupdater
(setconts,maxunevm*maxuneva)
IF(myproc == 0) THEN
READ(5,arbvar_cntl,ERR=100)
WRITE(6,'(a)')'Namelist arbvar_cntl was successfully read.'
END IF
CALL mpupdatei
(arbvaropt,1)
CALL mpupdatei
(var3dnum,1)
CALL mpupdatec
(dirname3d,40*maxarbvar)
CALL mpupdatec
(var3d,6*maxarbvar)
CALL mpupdatei
(var3dplot,maxarbvar)
CALL mpupdater
(var3dinc,maxarbvar)
CALL mpupdater
(var3dminc,maxarbvar)
CALL mpupdater
(var3dmaxc,maxarbvar)
CALL mpupdatei
(var3dovr,maxarbvar)
CALL mpupdatei
(var3dhlf,maxarbvar)
CALL mpupdatei
(var3dzro,maxarbvar)
CALL mpupdatei
(var3dsty,maxarbvar)
CALL mpupdatei
(var3dcol1,maxarbvar)
CALL mpupdatei
(var3dcol2,maxarbvar)
CALL mpupdatei
(var3dprio,maxarbvar)
CALL mpupdatei
(var2dnum,1)
CALL mpupdatec
(dirname2d,40*maxarbvar)
CALL mpupdatec
(var2d,6*maxarbvar)
CALL mpupdatei
(var2dplot,maxarbvar)
CALL mpupdater
(var2dinc,maxarbvar)
CALL mpupdater
(var2dminc,maxarbvar)
CALL mpupdater
(var2dmaxc,maxarbvar)
CALL mpupdatei
(var2dovr,maxarbvar)
CALL mpupdatei
(var2dhlf,maxarbvar)
CALL mpupdatei
(var2dzro,maxarbvar)
CALL mpupdatei
(var2dsty,maxarbvar)
CALL mpupdatei
(var2dcol1,maxarbvar)
CALL mpupdatei
(var2dcol2,maxarbvar)
CALL mpupdatei
(var2dprio,maxarbvar)
!
!-----------------------------------------------------------------------
!
! Input control parameters plotting boxes
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,plot_boxes,ERR=100)
WRITE(6,'(a)')'Namelist plot_box was successfully read.'
END IF
CALL mpupdatei
(number_of_boxes,1)
CALL mpupdatei
(boxcol,1)
CALL mpupdater
(bctrx,10)
CALL mpupdater
(bctry,10)
CALL mpupdater
(blengx,10)
CALL mpupdater
(blengy,10)
IF(number_of_boxes /= 0) THEN
DO k=1,number_of_boxes
WRITE(6,'(1x,a,i3,a,2f10.5)') &
'Center of box No.',k,' is at ',bctrx(k),bctry(k)
WRITE(6,'(1x,a,i3,a,2f10.5)') &
'The size of box No.',k,' is ',blengx(k),blengy(k)
END DO
DO k=1,number_of_boxes
bx1(k)=bctrx(k) - blengx(k)*0.5
bx2(k)=bctrx(k) + blengx(k)*0.5
by1(k)=bctry(k) - blengy(k)*0.5
by2(k)=bctry(k) + blengy(k)*0.5
END DO
END IF
!
!
!-----------------------------------------------------------------------
!
! Input control parameters plotting polylines
!
!-----------------------------------------------------------------------
!
DO j=1,max_polys
DO i=1,max_verts
vertx(i,j) = -9999.
verty(i,j) = -9999.
END DO
END DO
IF(myproc == 0) THEN
READ(5,plot_polylines,ERR=100)
WRITE(6,'(a)')'Namelist plot_polylines was successfully read.'
IF(number_of_polys /= 0) THEN
DO k=1,number_of_polys
WRITE(6,'(1x,a,i2)')'The number of polyline is : ',k
DO j = 1, max_verts
IF(vertx(j,k) /= -9999. .AND. verty(j,k) /= -9999.) &
WRITE(6,'(1x,a,2f10.5)') &
'The position of vertices are: ',vertx(j,k),verty(j,k)
END DO
END DO
END IF
END IF !myproc == 0
CALL mpupdatei
(number_of_polys,1)
CALL mpupdatei
(polycol,1)
CALL mpupdater
(vertx,max_verts*max_polys)
CALL mpupdater
(verty,max_verts*max_polys)
!
!-----------------------------------------------------------------------
!
! Input control parameters for overlay one filed to many fields
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,ovrlay_mul,ERR=100)
WRITE(6,'(a)')'Namelist ovrlay_mul was successfully read.'
END IF
CALL mpupdatei
(ovrlaymulopt,1)
CALL mpupdatec
(ovrname,12)
CALL mpupdatei
(ovrmul_num,1)
CALL mpupdatec
(ovrmulname,50*12)
IF(ovrlaymulopt == 0) THEN
ovrname(1:12)=' '
ovrmul_num = 0
DO i = 1,50
ovrmulname(i)(1:12) =' '
END DO
END IF
!
!-----------------------------------------------------------------------
!
! Input control parameters for terrain overlay
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,ovr_terrain,ERR=100)
WRITE(6,'(a)')'Namelist ovr_terrain was successfully read.'
END IF
CALL mpupdatei
(ovrtrn,1)
!
!-----------------------------------------------------------------------
!
! Input control parameters for 3-D wireframe plotting
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
READ(5,wirfrm_plot,ERR=100)
WRITE(6,'(a)')'Namelist wirfrm_plot was successfully read.'
END IF
CALL mpupdatei
(w3dplt,1)
CALL mpupdater
(wisosf,1)
CALL mpupdatei
(q3dplt,1)
CALL mpupdater
(qisosf,1)
!
!-----------------------------------------------------------------------
!
! Parameters for overlaying observations
!
!-----------------------------------------------------------------------
!
ovrobs=0
IF(myproc == 0) THEN
READ(5,plot_obs,ERR=71)
WRITE(6,'(a)')'Namelist plot_obs was successfully read.'
lsfcobfl=LEN_TRIM(sfcobfl)
WRITE(6,'(1x,a,a)') 'The surface observation file name was ', &
sfcobfl(1:lsfcobfl)
END IF
CALL mpupdatei
(ovrobs,1)
CALL mpupdatec
(sfcobfl,256)
CALL mpupdatei
(obscol,1)
CALL mpupdatei
(obs_marktyp,1)
CALL mpupdater
(obs_marksz,1)
71 CONTINUE
!-----------------------------------------------------------------------
!
! Parameters for overlaying airport location
!
!-----------------------------------------------------------------------
!
ovrstam=0
ovrstan=0
ovrstav=0
wrtstax=0
IF(myproc == 0) THEN
READ(5,plot_sta, ERR=72)
WRITE(6,'(a)') 'Namelist plot_sta was successfully read.'
lstalofl=LEN_TRIM(stalofl)
WRITE(6,'(1x,a,a)') 'Station file name was ',stalofl(1:lstalofl)
END IF
CALL mpupdatei
(ovrstaopt,1)
CALL mpupdatei
(ovrstam,1)
CALL mpupdatei
(ovrstan,1)
CALL mpupdatei
(ovrstav,1)
CALL mpupdatei
(wrtstax,1)
CALL mpupdater
(wrtstad,1)
CALL mpupdatei
(stacol,1)
CALL mpupdatei
(markprio,1)
CALL mpupdatei
(nsta_typ,10)
CALL mpupdatei
(sta_typ,1)
CALL mpupdatei
(sta_marktyp,10)
CALL mpupdatei
(sta_markcol,10)
CALL mpupdater
(sta_marksz,10)
CALL mpupdatec
(stalofl,256)
72 CONTINUE
!-----------------------------------------------------------------------
!
! Input control parameter for profile
!
!-----------------------------------------------------------------------
xprof = 0.0
yprof = 0.0
IF(myproc == 0) THEN
READ(5,profile_cntl,ERR=100)
WRITE(6,'(a)')'Namelist profile_cntl was successfully read.'
IF (nprof > max_dim) THEN
WRITE (6,'(1x,a,i4)') 'Too many profiles. Limited to ',max_dim
nprof = max_dim
END IF
END IF
CALL mpupdatei
(profopt,1)
CALL mpupdatei
(nprof,1)
CALL mpupdater
(xprof,max_dim)
CALL mpupdater
(yprof,max_dim)
CALL mpupdatei
(npicprof,1)
CALL mpupdatei
(uprof,1)
CALL mpupdater
(uprmin,1)
CALL mpupdater
(uprmax,1)
CALL mpupdatei
(vprof,1)
CALL mpupdater
(vprmin,1)
CALL mpupdater
(vprmax,1)
CALL mpupdatei
(wprof,1)
CALL mpupdater
(wprmin,1)
CALL mpupdater
(wprmax,1)
CALL mpupdatei
(ptprof,1)
CALL mpupdater
(ptprmin,1)
CALL mpupdater
(ptprmax,1)
CALL mpupdatei
(pprof,1)
CALL mpupdater
(pprmin,1)
CALL mpupdater
(pprmax,1)
CALL mpupdatei
(qvprof,1)
CALL mpupdater
(qvprmin,1)
CALL mpupdater
(qvprmax,1)
CALL mpupdatei
(qcprof,1)
CALL mpupdater
(qcpmin,1)
CALL mpupdater
(qcpmax,1)
CALL mpupdatei
(qrprof,1)
CALL mpupdater
(qrpmin,1)
CALL mpupdater
(qrpmax,1)
CALL mpupdatei
(qiprof,1)
CALL mpupdater
(qipmin,1)
CALL mpupdater
(qipmax,1)
CALL mpupdatei
(qsprof,1)
CALL mpupdater
(qspmin,1)
CALL mpupdater
(qspmax,1)
CALL mpupdatei
(qhprof,1)
CALL mpupdater
(qhpmin,1)
CALL mpupdater
(qhpmax,1)
CALL mpupdatei
(rhprof,1)
CALL mpupdater
(rhpmin,1)
CALL mpupdater
(rhpmax,1)
CALL mpupdatei
(kmhprof,1)
CALL mpupdater
(kmhpmin,1)
CALL mpupdater
(kmhpmax,1)
CALL mpupdatei
(kmvprof,1)
CALL mpupdater
(kmvpmin,1)
CALL mpupdater
(kmvpmax,1)
CALL mpupdatei
(tkeprof,1)
CALL mpupdater
(tkepmin,1)
CALL mpupdater
(tkepmax,1)
CALL mpupdatei
(rfprof,1)
CALL mpupdater
(rfpmin,1)
CALL mpupdater
(rfpmax,1)
CALL mpupdatei
(pteprf,1)
CALL mpupdater
(ptepmin,1)
CALL mpupdater
(ptepmax,1)
CALL mpupdatei
(upprof,1)
CALL mpupdater
(uppmin,1)
CALL mpupdater
(uppmax,1)
CALL mpupdatei
(vpprof,1)
CALL mpupdater
(vppmin,1)
CALL mpupdater
(vppmax,1)
CALL mpupdatei
(wpprof,1)
CALL mpupdater
(wppmin,1)
CALL mpupdater
(wppmax,1)
CALL mpupdatei
(ptpprf,1)
CALL mpupdater
(ptppmin,1)
CALL mpupdater
(ptppmax,1)
CALL mpupdatei
(ppprof,1)
CALL mpupdater
(pppmin,1)
CALL mpupdater
(pppmax,1)
CALL mpupdatei
(qvpprf,1)
CALL mpupdater
(qvppmin,1)
CALL mpupdater
(qvppmax,1)
CALL mpupdatei
(vorpprf,1)
CALL mpupdater
(vorppmin,1)
CALL mpupdater
(vorppmax,1)
CALL mpupdatei
(divpprf,1)
CALL mpupdater
(divppmin,1)
CALL mpupdater
(divppmax,1)
CALL mpupdater
(zprofbgn,1)
CALL mpupdater
(zprofend,1)
CALL mpupdatei
(tsoilprof,1)
CALL mpupdater
(tsoilprofmin,1)
CALL mpupdater
(tsoilprofmax,1)
CALL mpupdatei
(qsoilprof,1)
CALL mpupdater
(qsoilprofmin,1)
CALL mpupdater
(qsoilprofmax,1)
CALL mpupdater
(zsoilprofbgn,1)
CALL mpupdater
(zsoilprofend,1)
CALL mpupdatei
(nxprpic,1)
CALL mpupdatei
(nyprpic,1)
GO TO 10
100 WRITE(6,'(a)')'Error reading NAMELIST file. Job stopped in ARPSPLT.'
CALL mpexit
(1)
STOP
10 CONTINUE
RETURN
END SUBROUTINE initpltpara
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CTR3D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ctr3d(b,x,y,z, x1,x2,dx,y1,y2,dy,z1,z2,dz, & 41,38
nx,ibgn,iend, ny,jbgn,jend, nz,kbgn,kend, &
label,time,slicopt, kslice, jslice, islice, &
n,xp,yp,axy2d,av2d,zp, runname, factor,tem1,tem2,tem3, &
tem4,bb,tem5,hterain,pltopt)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set-up 2-d slices of a 3-d data array to contour with
! subroutine ctr2d.
!
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! 6/08/92 Added full documentation (K. Brewster)
!
! 12/25/1992 M. Xue and H. Jin
! Added capability to plot arbitary cross sections.
!
! 8/28/1994 M. Zou
! Added color shader to contour plot,add full documentation
!
! 3/25/96 (K. Brewster)
! Added variables isize,jsize,ksize
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! b 3-dimension array of variable
! x x-coord of scalar point (km)
! y y-coord of scalar point (km)
! z z-coord of scalar point in computation space (km)
! label character string describing the contents of a plot
! time model runing time step
! slicopt slice orientation indicator
! = 1, x-y slice of at k=kslice is plotted.
! = 2, x-z slice of at j=jslice is plotted.
! = 3, y-z slice of at i=islice is plotted.
! = 4, horizontal slice at z index islice is plotted.
! = 5, xy-z cross section of wind islice is plotted.
! = 6, data field on constant p-level is plotted.
! = 0, all of the three slices above are plotted.
! axy2d 2d x-y array
! av2d 2D array for the vertical slice
! xp x-coordinate of grid points on arbitary vertical
! cross-section
! yp y-coordinate of grid points on arbitary vertical
! cross-section
! zp z-coordinate of grid points on arbitary vertical
! cross-section
! runname character string describing the model run
! factor scaling factor
! hterain 2-D terrain data for contour
! trnplt flag to plot terrain (0/1)
! WORK ARRAY:
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
! tem5 Temporary work array.
!
! (These arrays are defined and used locally (i.e. inside this
! subroutine), they may also be passed into routines called by
! this one. Exiting the call to this subroutine, these temporary
! work arrays may be used for other purposes therefore their
! contents overwritten. Please examine the usage of work arrays
! before you alter the code.)
!
! pp01 The pressure (mb) value at the specific p-level
! ercpl reciprocal of exponent
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
INTEGER :: n
REAL :: b(nx,ny,nz)
REAL :: x(nx,ny,nz)
REAL :: y(nx,ny,nz)
REAL :: z(nx,ny,nz)
REAL :: axy2d(nx,ny)
REAL :: av2d(n,nz),zp(n,nz)
REAL :: xp(n),yp(n)
REAL :: x1,x2,dx,y1,y2,dy,z1,z2,dz
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend,length
CHARACTER (LEN=6) :: timhms
CHARACTER (LEN=*) :: label
REAL :: time
INTEGER :: slicopt
INTEGER :: kslice,jslice,islice
CHARACTER (LEN=*) :: runname
REAL :: factor
INTEGER :: trnplt ! plot terrain option (0/1/2/3)
INTEGER :: pltopt ! plot variable option (0/1/2/3)
REAL :: hterain(nx,ny) ! The height of the terrain.
REAL :: tem1(*)
REAL :: tem2(*)
REAL :: tem3(*)
REAL :: tem4(*)
REAL :: bb(nx,ny,nz)
REAL :: tem5(*) ! size must >= 6*nx*ny
!
!-----------------------------------------------------------------------
!
! Some constants
!
!-----------------------------------------------------------------------
!
REAL :: pp01
REAL, PARAMETER :: ercpl = 0.3678794 ! exp(-1.0)
!
!-----------------------------------------------------------------------
!
! Common blocks for plotting control parameters
!
!-----------------------------------------------------------------------
!
REAL :: x01,y01 ! the first point of interpolation
REAL :: x02,y02 ! the second point of interpolation
REAL :: zlevel ! the given height of the slice
REAL :: sinaf,cosaf,dist,sqrtdxy
COMMON /slicev/x01,y01,x02,y02,sinaf,cosaf,dist,sqrtdxy
COMMON /sliceh/zlevel
INTEGER :: ovrtrn ! overlay terrain option (0/1)
REAL :: trninc,trnmin, trnmax ! terrain interval minimum, maximum
REAL :: ztmin,ztmax
COMMON /trnpar/ trnplt,ovrtrn,trninc,trnmin, trnmax,ztmin,ztmax
INTEGER :: smooth
COMMON /smoothopt/smooth
INTEGER :: xfont ! the font of character
INTEGER :: haxisu, vaxisu
INTEGER :: lbaxis
INTEGER :: tickopt
INTEGER :: axlbfmt
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
CHARACTER (LEN=4) :: stem2
CHARACTER (LEN=1) :: stem1
REAL :: x_tmp
COMMON /tmphc2/ x_tmp
REAL :: tmpx, tmpy
CHARACTER (LEN=20) :: distc
REAL :: x101, y101, x102,y102
COMMON /slicev1/x101, y101, x102,y102
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,ij,ik,jk,isize,jsize,ksize, llabel
CHARACTER (LEN=120) :: label_copy
CHARACTER (LEN=120) :: title
INTEGER :: wrtflag
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
CHARACTER (LEN=25) :: timestring
COMMON /timelev/wrtflag, timelab, levlab, timestring
INTEGER :: xpbgn,xpend,ypbgn,ypend
COMMON /processors/ xpbgn, xpend, ypbgn, ypend
INTEGER :: idsize, jdsize, mnsize
INTEGER :: tinds, tind1,tind2,tind3,tind4,tind5,tind6
! temporary arrays index, assume size of tem5 > 6*nx*ny
!----------------------------------------------------------------------
!
! Include files
!
!---------------------------------------------------------------------
INCLUDE 'mp.inc'
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
isize = (iend-ibgn)+1
jsize = (jend-jbgn)+1
ksize = (kend-kbgn)+1
idsize = isize ! global maximum isize
jdsize = jsize
CALL mpmaxi
(idsize)
CALL mpmaxi
(jdsize)
mnsize = idsize*jdsize
mnsize = MAX(mnsize,idsize*ksize,jdsize*ksize)
tind1 = 1 ! reuse a 3d temporary array 'tem5' as several 2D
tind2 = tind1+mnsize ! arrays inside ctr2d
tind3 = tind2+mnsize
tind4 = tind3+mnsize
tind5 = tind4+mnsize
tind6 = tind5+mnsize
! tinds = SIZE(tem5)
! IF (tinds < 6*mnsize) THEN
! WRITE(6,'(3a)') 'ERROR: temporary array tem5 is too small ', &
! 'inside ctr3d while plotting ', label
! CALL arpsstop('Temporary array too small inside ctr3d.',1)
! END IF
label_copy = label
llabel = 120
CALL xstrlnth(label_copy, llabel)
IF(myproc == 0) CALL xpscmnt('Start plotting '//label_copy(1:llabel))
!
!-----------------------------------------------------------------------
!
! Set up terrain, if needed.
!
!-----------------------------------------------------------------------
!
IF(trnplt == 1 .OR.trnplt == 2 .OR. ovrtrn == 1) THEN
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem4(ij)=hterain(i,j)
END DO
END DO
END IF
CALL cvttim
( time, timhms )
IF( timhms(1:1) == '0' ) timhms(1:1)=' '
WRITE(timelab,'(''T='',F8.1,A)') time, &
' s ('//timhms(1:2)//':'//timhms(3:4)//':'//timhms(5:6)//')'
CALL get_time_string
( time, timestring)
IF ( slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5 .OR. &
slicopt == 10 .OR. slicopt == 11) THEN
CALL cal_dist
(haxisu,dx,dy,x01,y01,x02,y02, &
slicopt,tmpx,tmpy,distc)
END IF
IF(slicopt == 1 .OR. slicopt == 0 ) THEN
k = kslice
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
IF(b(i,j,k) /= -9999.0) tem1(ij)=b(i,j,k)*factor
tem2(ij)=x(i,j,k)
tem3(ij)=y(i,j,k)
END DO
END DO
IF (k /= 2) THEN
WRITE(levlab,'(''GRID LEVEL='',I3)')k
WRITE(title,'(a)') label
ELSE
WRITE(levlab,'(''FIRST LEVEL ABOVE GROUND (SURFACE)'')')
WRITE(title,'(a)') label
END IF
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, x1,x2,dx, y1,y2,dy, &
isize,jsize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
!
!-----------------------------------------------------------------------
!
! slicopt=2 Plot x-z cross-section
!
!-----------------------------------------------------------------------
!
ELSE IF (slicopt == 2 .OR. slicopt == 0 ) THEN
x_tmp = y(1,jslice,1)
j = jslice
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
IF(b(i,j,k) /= -9999.0) tem1(ik)=b(i,j,k)*factor
tem2(ik)=x(i,j,k)
tem3(ik)=z(i,j,k)
END DO
END DO
j = j + (ny-3)*(ypbgn-1)
dist = (j-1.5)*tmpy
length= LEN(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''X-Z PLANE AT Y='',F8.1,A)')dist,distc(1:length)
WRITE(title,'( a )') label
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,ksize,1,isize,1,ksize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, x1,x2,dx, z1,z2,dz, &
isize,ksize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
!
!-----------------------------------------------------------------------
!
! slicopt=3 Plot y-z cross-section
!
!-----------------------------------------------------------------------
!
ELSE IF ( slicopt == 3 .OR. slicopt == 0) THEN
x_tmp = x(islice,1,1)
i = islice
DO k=kbgn,kend
DO j=jbgn,jend
jk = j-jbgn+1 + (k-kbgn)*jsize
tem1(jk) = -9999.0
IF(b(i,j,k) /= -9999.0) tem1(jk)=b(i,j,k)*factor
tem2(jk)=y(i,j,k)
tem3(jk)=z(i,j,k)
END DO
END DO
i = i + (nx-3)*(xpbgn-1)
dist = (i-1.5)*tmpx
length= LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''Y-Z PLANE AT X='',F8.1,A)')dist,distc(1:length)
WRITE(title,'( a )' ) label
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,jsize,ksize,1,jsize,1,ksize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, y1,y2,dy, z1,z2,dz, &
jsize,ksize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
!
!-----------------------------------------------------------------------
!
! slicopt=4 Plot horizontal slice at given height
! slicopt=6 Plot constant pressure slice at given pressure(mb)
! slicopt=7 Plot isentropic surfaces
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 4.OR.slicopt == 6.OR.slicopt == 7 ) THEN
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
bb(i,j,k) = -9999.0
IF(b(i,j,k) /= -9999.0) bb(i,j,k)= b(i,j,k)*factor
END DO
END DO
END DO
CALL hintrp1
(nx,ny,nz,kbgn,kend,bb,z,zlevel,axy2d)
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij)=axy2d(i,j)
tem2(ij)=x(i,j,2)
tem3(ij)=y(i,j,2)
END DO
END DO
IF(slicopt == 4) THEN
WRITE(levlab,'(''Z='',F7.3,'' KM MSL'')') &
zlevel
ELSE IF(slicopt == 6) THEN
pp01 = 0.01*ercpl**zlevel
WRITE(levlab,'(''P='',F7.2,A)') pp01, ' MB'
ELSE
WRITE(levlab,'(''THETA='',F5.1,A)') zlevel, ' (K)'
END IF
WRITE(title,'(a)') label
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, x1,x2,dx, y1,y2,dy, &
isize,jsize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
!
!-----------------------------------------------------------------------
!
! slicopt=5 Plot vectical slice through two given points
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 5 ) THEN
CALL sectvrt
(nx,ny,nz,b,x,y,z,dx,dy,av2d,zp,n,xp,yp)
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
IF(av2d(i,k) /= -9999.0) tem1(ik)=av2d(i,k)*factor
tem2(ik)=x1+(i-ibgn)* sqrtdxy
tem3(ik)=zp(i,k)
END DO
END DO
IF(axlbfmt == -1 .OR. axlbfmt == 1 ) THEN
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab, &
'(''VERTICAL PLANE FROM '',4(A,F8.1),A,A)') &
'(',x101,',',y101,') through (',x102,',',y102,') ', &
distc(1:length)
WRITE(title,'(a)') label
ELSE IF(axlbfmt == 0) THEN
length= LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab, &
'(''VERTICAL PLANE FROM '',4(A,I5),A,A)') &
'(',NINT(x101),',',NINT(y101),') through (',NINT(x102),',' &
,NINT(y102),') ', distc(1:length)
WRITE(title,'(a)') label
ELSE
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
! WRITE(stem1,'(i1)')axlbfmt
! WRITE(stem2,'(a3,a1)')'f8.',stem1
WRITE(title,'(''V-W '',A)') label
WRITE(levlab, &
'(''VERTICAL PLANE FROM '',4(A,F8.2),A,A)') &
'(',x101,',',y101,') through (',x102,',',y102,') ', &
distc(1:length)
END IF
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,ksize,1,isize,1,ksize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, x1,x2,sqrtdxy, z1,z2,dz, &
isize,ksize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
!
!-----------------------------------------------------------------------
!
! slicopt=9 Plot x-y cross-section of the soil model
!
! 06/03/2002 Zuwen He
!
! slicopt (9) is the same as slicopt (1), except that
! the labels.
!
!-----------------------------------------------------------------------
!
ELSE IF(slicopt == 9) THEN
k = kslice
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
IF(b(i,j,k) /= -9999.0) tem1(ij)=b(i,j,k)*factor
tem2(ij)=x(i,j,k)
tem3(ij)=y(i,j,k)
END DO
END DO
WRITE(levlab,'(''GRID LEVEL (SOIL) ='',I3)')k
WRITE(title,'(a)') label
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, x1,x2,dx, y1,y2,dy, &
isize,jsize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
!
!-----------------------------------------------------------------------
!
! Zuwen He, 06/06/2002
!
! slicopt=10 Plot x-z cross-section of the soil model.
!
!-----------------------------------------------------------------------
!
ELSE IF (slicopt == 10) THEN
x_tmp = y(1,jslice,1)
j = jslice
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
IF(b(i,j,k) /= -9999.0) tem1(ik)=b(i,j,k)*factor
tem2(ik)=x(i,j,k)
tem3(ik)=z(i,j,k)
END DO
END DO
j = j + (ny-3)*(ypbgn-1)
dist = (j-1.5)*tmpy
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''X-Z PLANE (SOIL) AT Y='',F8.1,A)')dist,distc(1:length)
WRITE(title,'( a )') label
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,ksize,1,isize,1,ksize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, x1,x2,dx, z1,z2,dz, &
isize,ksize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
!
!-----------------------------------------------------------------------
!
! slicopt=11 Plot y-z cross-section of the soil model
!
!-----------------------------------------------------------------------
!
ELSE IF ( slicopt == 11) THEN
x_tmp = x(islice,1,1)
i = islice
DO k=kbgn,kend
DO j=jbgn,jend
jk = j-jbgn+1 + (k-kbgn)*jsize
tem1(jk) = -9999.0
IF(b(i,j,k) /= -9999.0) tem1(jk)=b(i,j,k)*factor
tem2(jk)=y(i,j,k)
tem3(jk)=z(i,j,k)
END DO
END DO
i = i + (nx-3)*(xpbgn-1)
dist = (i-1.5)*tmpx
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''Y-Z PLANE (SOIL) AT X='',F8.1,A)')dist,distc(1:length)
write (*,*) "levlab", levlab
WRITE(title,'( a )' ) label
length = LEN_TRIM(title)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,jsize,ksize,1,jsize,1,ksize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, y1,y2,dy, z1,z2,dz, &
jsize,ksize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
END IF
IF(myproc == 0) CALL xpscmnt('End plotting '//label_copy(1:llabel))
RETURN
END SUBROUTINE ctr3d
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CTR2D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ctr2d(a,x,y,xl,xr,dx,yb,yt,dy,m,n,title,runname, & 9,65
hterain,slicopt,pltopt,mnsize, &
plota,plotx,ploty,iwrk,xwk,ywk)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Generate contour plots of 2-d field A given its coordinates
! using ZXPLOT package..
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
!
! 6/08/92 (K. Brewster)
! Added full documentation.
!
! 8/28/94 (M. Zou)
! Added color routing , overlay terrain.
!
! 1/24/96 (J. Zong and M. Xue)
! Fixed a problem related to finding the minimum and maximum of the
! 2D array, a, when there exist missing data. Initial min. and max.
! should be set to values other than the missing value, -9999.0.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a 2-dimensional slice of data to contour
!
! x x coordinate of grid points in plot space (over on page)
! y y coordinate of grid points in plot space (up on page)
!
!
! xl Left bound of the physical domain
! xr Right bound of the physical domain
! dx Spacing between x-axis tick marks
! yb Bottom bound of the physical domain.
! yt Top bound of the physical domain.
! dy Spacing between y-axis tick marks
!
! m first dimension of a
! n second dimension of a
!
! title character string describing the contents of a
! runname character string describing the model run
!
! hterain 2-D terrain data to contour
! slicopt slice orientation indicator
! = 1, x-y slice of at k=kslice is plotted.
! = 2, x-z slice of at j=jslice is plotted.
! = 3, y-z slice of at i=islice is plotted.
! = 4, horizontal slice at z index islice is plotted.
! = 5, xy-z cross section of wind islice is plotted.
! = 6, data field on constant p-level is plotted.
! = 0, all of the three slices above are plotted.
! plot variable plot option (0/1/2/3)
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'arpsplt.inc'
INTEGER, INTENT(IN) :: m,n
REAL, INTENT(IN) :: a(m,n)
REAL, INTENT(IN) :: x(m,n)
REAL, INTENT(IN) :: y(m,n)
REAL, INTENT(IN) :: xl,xr,dx,yb,yt,dy
REAL, INTENT(IN) :: hterain(m,n)
CHARACTER(LEN=*), INTENT(IN) :: runname
CHARACTER(LEN=*), INTENT(IN) :: title
INTEGER, INTENT(IN) :: pltopt ! variavle plot option (0/1/2/3)
INTEGER, INTENT(IN) :: slicopt
INTEGER, INTENT(IN) :: mnsize ! maximum m*n among all processors
REAL, INTENT(INOUT) :: plota(mnsize), plotx(mnsize), ploty(mnsize)
INTEGER, INTENT(INOUT) :: iwrk(mnsize)
REAL, INTENT(INOUT) :: xwk(mnsize), ywk(mnsize)
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: layover
COMMON /laypar/ layover
INTEGER :: ovrobs,obsset,obscol,obs_marktyp
REAL :: obs_marksz
COMMON /obspar/ ovrobs,obsset,obscol,obs_marktyp, obs_marksz
INTEGER :: ovrstaopt
INTEGER :: ovrstam,staset,ovrstan,ovrstav,stacol,markprio,wrtstax
INTEGER :: nsta_typ,sta_typ(10),sta_marktyp(10),sta_markcol(10)
REAL :: sta_marksz(10),wrtstad
CHARACTER (LEN=132) :: stalofl
COMMON /sta_par/ ovrstaopt,ovrstam,staset,ovrstan,ovrstav,stacol, &
markprio,nsta_typ,sta_typ,sta_marktyp, &
sta_markcol,sta_marksz,stalofl,wrtstax,wrtstad
REAL :: ctinc,ctmin,ctmax,vtunt ! contour interval and vector unit
COMMON /incunt/ ctinc,ctmin,ctmax,vtunt
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
INTEGER :: flag
INTEGER :: xfont ! the font of character
INTEGER :: haxisu, vaxisu
INTEGER :: lbaxis
INTEGER :: tickopt
INTEGER :: axlbfmt
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
REAL :: yxratio
COMMON /yratio/ yxratio ! the scaling factor the y/x ratio.
INTEGER :: ntitle,titcol, nxpic, nypic, wpltime
REAL :: titsiz
CHARACTER (LEN=132) :: ptitle(3), footer_l, footer_c, footer_r
COMMON /titpar1/ptitle, footer_l, footer_c, footer_r
COMMON /titpar2/ntitle,titcol,wpltime, nxpic, nypic
COMMON /titpar3/titsiz
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=150) :: ch1
CHARACTER (LEN=150) :: ch
INTEGER :: istatus
INTEGER :: i,j
REAL :: cl(500) ! contour levels
REAL :: pl,pr,pb,pt ! plot space left, right, bottom, top coordinate
REAL :: px,py ! plot space left-right length and up-down height
REAL :: pxc,pyc ! plot space left-right center and
! up-down center
REAL :: xs,ys ! real space left-right length and up-down height
REAL :: zinc ! contour interval
REAL :: zmin,zmax ! max and min of data array
INTEGER :: ncl,mode1
REAL :: zlevel
COMMON/sliceh/zlevel
INTEGER :: timeovr
COMMON /timover/ timeovr
REAL :: lblmag, ctrlbsiz, axlbsiz
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
REAL :: xfinc
INTEGER :: col_table,pcolbar
COMMON /coltable/col_table,pcolbar
INTEGER :: LEN0,len1
CHARACTER (LEN=12) :: varname
COMMON /varplt1/ varname
CHARACTER (LEN=150) :: f_ch
INTEGER :: setcontopt, setcontnum
REAL :: setconts(maxunevm,maxuneva)
COMMON /setcon_par/setcontopt,setcontnum,setconts
INTEGER :: ncont
REAL :: tcont(maxunevm)
INTEGER :: wrtflag
CHARACTER (LEN=25) :: timestring
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
COMMON /timelev/wrtflag,timelab, levlab, timestring
CHARACTER (LEN=80) :: prestr
INTEGER :: preflag
COMMON /preinfo/ prestr,preflag
REAL :: x101, y101, x102,y102
COMMON /slicev1/x101, y101, x102,y102
REAL :: ytmp !! local temporary variable
!wdt update
REAL :: f_cputime,cpu1, cpu2
DOUBLE PRECISION :: f_walltime,second1,second2
REAL :: hatch_angle
INTEGER :: missval_colind, missfill_opt ! miss value color index
COMMON /multi_value/ missfill_opt,missval_colind
INTEGER :: missfill
DATA missfill/0/
INTEGER :: mxset
INTEGER :: xnwpic_called
COMMON /callnwpic/xnwpic_called
INTEGER :: iclfrq
INTEGER :: ctrlbfrq
COMMON /clb_frq/ ctrlbfrq
!----------------------------------------------------------------------
!
! Message passing version
!
!---------------------------------------------------------------------
INTEGER :: xpbgn,xpend,ypbgn,ypend
COMMON /processors/ xpbgn, xpend, ypbgn, ypend
INCLUDE 'mp.inc'
INTEGER :: ii,jj
INTEGER :: mm,nn ! temporay varaible only useful for processor 0
INTEGER :: ierr, itags, itagr
INTEGER, PARAMETER :: destination = 0
INTEGER :: source
! CHARACTER(LEN=4) :: sourcechar
REAL :: clsaved(500)
INTEGER :: nclsaved, nminctr, nmaxctr
REAL :: zminc, zmaxc
REAL, PARAMETER :: eps = 1.0E-6
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!-----------------------------------------------------------------------
!
! Check for adequate room in work array
!
!-----------------------------------------------------------------------
!
second1= f_walltime
()
cpu1 = f_cputime
()
ncont = 0
ncl = 1
IF(myproc == 0) THEN
WRITE(6,'(//a,a)') 'Plotting ',title
IF( layover == 0 .OR. xnwpic_called == 0) THEN
CALL xnwpic
xnwpic_called = 1
timeovr = 0 ! set overlayer terrain agian
wrtflag = 0 !
preflag = 0
prestr = levlab
len1=LEN_TRIM(prestr)
CALL strmin
(prestr,len1)
ELSE
timeovr=1
wrtflag = wrtflag + 1
END IF
!
!-----------------------------------------------------------------------
!
! Get plotting space variables
!
!-----------------------------------------------------------------------
!
CALL xqpspc( pl, pr, pb, pt)
px = pr - pl
py = pt - pb
pxc = (pr+pl)/2
pyc = (pb+pt)/2
xs = xr-xl
ys = yt-yb
!
!-----------------------------------------------------------------------
!
! Let the longest lenth determine size scaling of plot
!
!-----------------------------------------------------------------------
!
IF( py/px >= (ys*yxratio)/xs ) THEN
py = (ys*yxratio)/xs*px
CALL xpspac(pl, pr, pyc-py/2, pyc+py/2 )
ELSE
px = xs/(ys*yxratio)*py
CALL xpspac(pxc-px/2, pxc+px/2, pb, pt)
END IF
!
!-----------------------------------------------------------------------
!
! Set the real distance to plot distance scaling
!
!-----------------------------------------------------------------------
!
CALL xmap( xl, xr, yb, yt )
CALL xlbsiz( ctrlbsiz*(yt-yb)*lblmag )
END IF ! myproc == 0
!
!-----------------------------------------------------------------------
!
! Find max and min of data array
!
!-----------------------------------------------------------------------
!
mxset = 0
missfill = 0
zmax = -9999.0
zmin = 999999999999.0
DO j=1,n
DO i=1,m
IF(ABS(a(i,j)-(-9999.0)) < 1.0E-6) THEN
missfill = 1
CYCLE
END IF
IF( mxset == 0) THEN
zmax= a(i,j)
zmin= a(i,j)
mxset = 1
ELSE
zmax= MAX (zmax,a(i,j))
zmin= MIN (zmin,a(i,j))
END IF
END DO
END DO
CALL mpmax0
(zmax, zmin) !? only inside xpbgn-xpend, ypbgn-ypend
CALL mpmax0i
(mxset,missfill) ! Ensure missfill = 1 only when it
! is 1 in all processors
IF (missfill == 1 .AND. missfill_opt == 1) &
CALL fillmissval
( m,n,xl, xr, yb,yt )
!
!-----------------------------------------------------------------------
!
! Find proper contour interval and then contour field
! using ZXPLOT routine xconta
!
!-----------------------------------------------------------------------
cl(1)=0.0
IF( zmax-zmin > 1.0E-20 ) THEN
!
!-----------------------------------------------------------------------
!
! Check to see if user defined contour levels is available for the
! current variable.
!
!-----------------------------------------------------------------------
IF(myproc == 0) CALL xcolor(lbcolor)
CALL get_contour
(ncont, tcont)
iclfrq = ctrlbfrq
IF(setcontopt > 0 .AND. ncont > 0) THEN
ch1(1:11)=' contours: '
LEN0=11
DO i =1,ncont
CALL xrch1
(tcont(i),f_ch,len1)
WRITE(ch1,'(a,a,'' '')')ch1(1:LEN0), f_ch(1:len1)
LEN0=LEN0+len1+1
END DO
DO i=1,ncont
cl(i)=tcont(i)
END DO
ncl = ncont
mode1 = 4
iclfrq = 1
GO TO 150
END IF
IF( ctinc == 0.0) THEN
cl(2)=cl(1)+ xfinc(zmax-zmin)/2
IF(cl(2)-cl(1) == 0.0) cl(2)=cl(1)+1.0
nminctr = 8
nmaxctr = 20
!CALL xnctrs( 8,20)
mode1=1
ELSE IF ( ctinc == -9999.) THEN
CALL set_interval
(a, m,n,zmin,zmax,ctmin,ctmax,cl)
ctinc = cl(2)-cl(1)
zinc = ctinc
nminctr = 8
nmaxctr = 20
!CALL xnctrs( 8,20)
mode1=1
ELSE
cl(2)=cl(1)+ctinc
! Not one, as one ends up giving a division by zero later.
nminctr = 2
nmaxctr = 300
!CALL xnctrs(1,300)
mode1=1
END IF
! new subroutine call for MPI mode. NOTE that mode1 reset to 4
IF( mp_opt > 0 ) THEN
IF(ABS(ctmax-ctmin) < eps) THEN
ctmax = zmax
ctmin = zmin
ELSE IF (ctmax < -9990) THEN
ctmax = zmax
ELSE IF (ctmin < -9990) THEN
ctmin = zmin
END IF
CALL setcontr
(ctmin,ctmax,nminctr,nmaxctr,cl,ncl,zminc,zmaxc)
mode1 = 4
END IF
nclsaved = ncl
clsaved(1:ncl) = cl(1:ncl)
CALL xnctrs(nminctr,nmaxctr)
150 CONTINUE
zinc = cl(2)-cl(1)
!-----------------------------------------------------------------------
!
! Plot contour or color filled contour fields
!
!-----------------------------------------------------------------------
IF(myproc == 0) THEN
CALL xwindw(xl, xr, yb, yt)
CALL xctrlim(ctmin,ctmax)
CALL xclfrq(iclfrq)
END IF ! myproc == 0
DO j = 1,n ! to pack data to plota, useful for processor 0 only
DO i = 1,m
ii = i+(j-1)*m
plota(ii) = a(i,j)
plotx(ii) = x(i,j)
ploty(ii) = y(i,j)
END DO
END DO
mm = m ! mm*nn is the valid data to be ploted, this assignment
nn = n ! is for processor 0 only. All other processors will
! will pass their dimensions to processor 0 later
DO jj = ypbgn,ypend
DO ii = xpbgn, xpend
source = (ii+(jj-1)*nproc_x-1)
IF (source == 0) GOTO 600
CALL inctag
IF (myproc == source ) THEN
itags = gentag + 4
CALL mpsendi
(m,destination,itags,ierr)
itags = gentag + 5
CALL mpsendi
(n,destination,itags,ierr)
itags = gentag
CALL mpsendr
(a,m*n,destination,itags,ierr)
itags = gentag + 1
CALL mpsendr
(x,m*n,destination,itags,ierr)
itags = gentag + 2
CALL mpsendr
(y,m*n,destination,itags,ierr)
END IF
plota = 0.0 ! to clear previous values for safety only
plotx = 0.0
ploty = 0.0
mm = 0
nn = 0
IF (myproc == 0) THEN
itagr = gentag + 4
CALL mprecvi
(mm,source,itagr,ierr)
itagr = gentag + 5
CALL mprecvi
(nn,source,itagr,ierr)
itagr = gentag
CALL mprecvr
(plota,mm*nn,source,itagr,ierr)
itagr = gentag + 1
CALL mprecvr
(plotx,mm*nn,source,itagr,ierr)
itagr = gentag+2
CALL mprecvr
(ploty,mm*nn,source,itagr,ierr)
ncl = nclsaved
cl(1:nclsaved) = clsaved(1:nclsaved)
END IF
600 CONTINUE
!WRITE(sourcechar,'(I04)') source
IF (myproc == 0) THEN
!CALL xpscmnt('Begin plotting processor :: '//sourcechar)
IF(pltopt == 1) THEN
CALL xctrclr(icolor, icolor)
CALL xconta(plota,plotx,ploty,iwrk,mm,mm,nn,cl,ncl,mode1)
ELSE IF( pltopt == 2) THEN
CALL xctrclr(icolor, icolor1)
CALL xcolfil(plota,plotx,ploty,iwrk,xwk,ywk,mm,mm,nn,cl,ncl,mode1)
CALL xchsiz(0.025*(yt-yb))
CALL xcpalet(pcolbar)
ELSE IF(pltopt == 4) THEN
CALL xctrclr(icolor, icolor1)
CALL xconta(plota,plotx,ploty,iwrk,mm,mm,nn,cl,ncl,mode1)
ELSE IF(pltopt == 5) THEN
CALL xctrclr(icolor, icolor1)
CALL xcolfil(plota,plotx,ploty,iwrk,xwk,ywk,mm,mm,nn,cl,ncl,mode1)
CALL xchsiz(0.025*(yt-yb))
CALL xcpalet(pcolbar)
CALL xctrclr(lbcolor, lbcolor)
CALL xconta(plota,plotx,ploty,iwrk,mm,mm,nn,cl,ncl,mode1)
ELSE IF(pltopt == 6) THEN
CALL xctrclr(icolor, icolor)
CALL xdhtch(0.003)
CALL xctrclr(icolor, icolor)
ncl = 2
mode1 = 4
cl(1) = ctmin
cl(2) = ctmax
CALL xclfrq(1)
CALL xhilit(0)
CALL xconta(plota,plotx,ploty,iwrk,mm,mm,nn,cl,ncl,mode1)
CALL xhilit(1)
hatch_angle = 45.0
CALL xdhtch(0.004)
CALL xhatcha(plota,plotx,ploty,xwk,ywk,mm,mm,nn,ctmin,1.0E10,hatch_angle)
CALL xdhtch(0.002)
CALL xhatcha(plota,plotx,ploty,xwk,ywk,mm,mm,nn,ctmax,1.0E10,hatch_angle)
END IF
CALL xclfrq(2)
!CALL xpscmnt('End plotting processor ::'//sourcechar)
END IF ! myproc == 0
CALL mpbarrier
! sync the processors
END DO
END DO
ELSE
cl(2)=1.0
ncl=2
END IF ! zmax-zmin > 1.0E-20
IF(ctinc == 0.0) THEN
zinc = cl(2) - cl(1)
ELSE
zinc = ctinc
END IF
!
!-----------------------------------------------------------------------
!
! Plot map, boxes and polygons.
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) CALL pltextra
(slicopt, pltopt)
!
!-----------------------------------------------------------------------
!
! Plot terrain etc.
!
!-----------------------------------------------------------------------
!
DO j = 1,n ! again useful for processor 0 only
DO i = 1,m
ii = i + (j-1)*m
plota(ii) = hterain(i,j)
plotx(ii) = x(i,j)
ploty(ii) = y(i,j)
END DO
END DO
mm = m
nn = n
DO jj = ypbgn,ypend
DO ii = xpbgn, xpend
source = (ii+(jj-1)*nproc_x-1)
IF (source == 0) GOTO 602
CALL inctag
IF (myproc == source ) THEN
itags = gentag + 4
CALL mpsendi
(m,destination,itags,ierr)
itags = gentag + 5
CALL mpsendi
(n,destination,itags,ierr)
itags = gentag
CALL mpsendr
(hterain,m*n,destination,itags,ierr)
itags = gentag + 1
CALL mpsendr
(x,m*n,destination,itags,ierr)
itags = gentag + 2
CALL mpsendr
(y,m*n,destination,itags,ierr)
END IF
plota = 0.0
plotx = 0.0
ploty = 0.0
mm = 0
nn = 0
IF (myproc == 0) THEN
itagr = gentag + 4
CALL mprecvi
(mm,source,itagr,ierr)
itagr = gentag + 5
CALL mprecvi
(nn,source,itagr,ierr)
itagr = gentag
CALL mprecvr
(plota,mm*nn,source,itagr,ierr)
itagr = gentag + 1
CALL mprecvr
(plotx,mm*nn,source,itagr,ierr)
itagr = gentag+2
CALL mprecvr
(ploty,mm*nn,source,itagr,ierr)
END IF
602 CONTINUE
IF (myproc == 0) THEN
!-----------------------------------------------------------------------
!
! Terrain outline in vertical slices.
!
!-----------------------------------------------------------------------
IF(slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5 .OR. &
slicopt == 10 .OR. slicopt == 11) THEN
CALL xcolor(trcolor)
CALL xthick(3)
CALL xpenup( plotx(1), ploty(1)-0.5*(ploty(mm+1)-ploty(1)) )
DO i=2,mm
CALL xpendn( plotx(i), ploty(i)-0.5*(ploty(i+mm)-ploty(i)) )
END DO
CALL xthick(1)
END IF ! slicopt
!
!-----------------------------------------------------------------------
!
! Overlay terrain contour if required in x-y level
! or Plot terrain outline in slice zlevel
!
!-----------------------------------------------------------------------
!
IF ( timeovr == 0 ) CALL plttrn
(plota,plotx,ploty,mm,nn, &
slicopt,iwrk,xwk,ywk)
END IF ! myproc == 0
CALL mpbarrier
! sync the processors
END DO
END DO
!
!-----------------------------------------------------------------------
!
! Plot station labels
!
!-----------------------------------------------------------------------
!
IF (ovrstaopt == 1 .AND. (wrtstax == 1 .OR. staset == 1) ) THEN
DO j = 1,n
DO i = 1,m
ii = i+(j-1)*m
plota(ii) = a(i,j)
plotx(ii) = x(i,j)
ploty(ii) = y(i,j)
END DO
END DO
mm = m
nn = n
DO jj = ypbgn,ypend
DO ii = xpbgn, xpend
source = (ii+(jj-1)*nproc_x-1)
IF (source == 0) GOTO 603
CALL inctag
IF (myproc == source ) THEN
itags = gentag + 4
CALL mpsendi
(m,destination,itags,ierr)
itags = gentag + 5
CALL mpsendi
(n,destination,itags,ierr)
itags = gentag
CALL mpsendr
(a,m*n,destination,itags,ierr)
itags = gentag + 1
CALL mpsendr
(x,m*n,destination,itags,ierr)
itags = gentag + 2
CALL mpsendr
(y,m*n,destination,itags,ierr)
END IF
plota = 0.0
plotx = 0.0
ploty = 0.0
mm = 0
nn = 0
IF (myproc == 0) THEN
itagr = gentag + 4
CALL mprecvi
(mm,source,itagr,ierr)
itagr = gentag + 5
CALL mprecvi
(nn,source,itagr,ierr)
itagr = gentag
CALL mprecvr
(plota,mm*nn,source,itagr,ierr)
itagr = gentag + 1
CALL mprecvr
(plotx,mm*nn,source,itagr,ierr)
itagr = gentag+2
CALL mprecvr
(ploty,mm*nn,source,itagr,ierr)
END IF
603 CONTINUE
IF (myproc == 0) THEN
IF( wrtstax == 1 .AND. (timeovr == 0 .OR. &
(timeovr== 1 .AND. pltopt == 2)) .AND.&
(slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5 .OR. &
slicopt == 10 .OR. slicopt == 11) ) THEN
CALL xchsiz(0.025*ys * lblmag)
flag=1
CALL pltsta
(plota,plota,plotx,ploty,mm,nn,flag,slicopt)
END IF
IF( staset == 1 .AND. (ovrstam == 1 .OR. ovrstan == 1 &
.OR. ovrstav == 1) .AND. &
(slicopt == 1 .OR. slicopt == 4 .OR. slicopt == 6 .OR. &
slicopt == 7 .OR. slicopt == 8 .OR. slicopt == 9) .AND. &
(timeovr == 0 .OR. (timeovr == 1.AND.pltopt == 2) )) THEN
CALL xchsiz(0.025*ys * lblmag)
flag=0
CALL pltsta
(plota,plota,plotx,ploty,mm,nn,flag,slicopt)
END IF
END IF ! myproc == 0
CALL mpbarrier
! sync the processors
END DO
END DO
END IF ! ovrstaopt == 1
IF (myproc == 0) CALL xwdwof
!
!-----------------------------------------------------------------------
!
! Plot observations
!
!-----------------------------------------------------------------------
!
IF(obsset == 1 .AND. ovrobs == 1 .AND. &
(slicopt == 1 .OR. slicopt == 4 .OR. slicopt == 6 .OR. &
slicopt == 7 .OR. slicopt == 8 .OR. slicopt == 9) ) THEN
IF (myproc == 0) THEN
CALL xchsiz(0.025*ys * lblmag)
CALL pltobs
(1)
END IF
obsset=0
END IF
!
!-----------------------------------------------------------------------
!
! Plot axes with tick marks
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
CALL pltaxes
(slicopt,dx,dy)
IF(ntitle>0 .AND. nxpic==1 .AND. nypic==1 .AND. timeovr == 0 ) THEN
CALL xcolor(titcol)
CALL xchsiz(0.025*ys * titsiz)
DO i=1,ntitle
LEN0=132
CALL strlnth
(ptitle(i),LEN0)
CALL xchori(0.)
CALL xcharc( xl+xs/2,yt+(0.25-(i-1)*0.06)*ys,ptitle(i)(1:LEN0))
END DO
CALL xcolor(lbcolor)
END IF
CALL xchsiz( 0.030*ys * lblmag )
! plot time and level label
IF ( layover < 1 ) THEN
IF(levlab /= ' ') THEN
len1=LEN_TRIM(levlab)
CALL strmin
(levlab,len1)
CALL xcharc((xl+xr)*0.5,yt+0.015*ys, levlab(1:len1))
preflag = 1
END IF
len1=LEN_TRIM(timelab)
CALL strmin
(timelab,len1)
CALL xcharc((xl+xr)*0.5,yt+0.06*ys, &
timestring(1:25)//' '//timelab(1:len1))
END IF
IF(preflag == 0 .AND. levlab /= ' ') THEN
len1=LEN_TRIM(levlab)
CALL strmin
(levlab,len1)
CALL xcharc((xl+xr)*0.5,yt+0.015*ys, levlab(1:len1))
preflag = 1
END IF
LEN0 = LEN_TRIM(title)
CALL strmin
(title, LEN0)
IF( title(LEN0:LEN0) == ')' ) LEN0 = max(1,LEN0-1)
IF(pltopt == 2) THEN
WRITE(f_ch, '(a,'', SHADED)'')')title(1:LEN0)
ELSE IF( pltopt == 5 ) THEN
WRITE(f_ch, '(a,'', SHADED/CONTOUR)'')')title(1:LEN0)
ELSE
WRITE(f_ch, '(a,'', CONTOUR)'')')title(1:LEN0)
END IF
! if first levlab is not equal second levlab then attatch levlab on f_ch
LEN0=LEN_TRIM(f_ch)
CALL strmin
(f_ch, LEN0)
len1=LEN_TRIM(levlab)
CALL strmin
(levlab,len1)
IF(pltopt == 1) CALL xcolor(icolor)
! plot variable name
IF (preflag == 1 .AND. prestr /= levlab .AND. prestr /= ' ' &
.AND.layover /= 0 .AND. levlab /= ' ') THEN
CALL xchsiz( 0.018*ys * lblmag )
ELSE
CALL xchsiz( 0.028*ys * lblmag )
END IF
IF(prestr(1:1) == ' ' .AND.layover /= 0 ) prestr=levlab
! save for next time use
IF(lbaxis == 1 ) THEN
IF( wrtstax == 0) THEN
ytmp = 0.08
ELSE
ytmp = 0.14
END IF
ELSE
ytmp = 0.12
END IF
LEN0=LEN_TRIM(f_ch)
CALL strmin
(f_ch,LEN0)
CALL xchsiz( 0.025*ys * lblmag )
CALL xcolor(lbcolor)
CALL xcharl(xl-0.20*(xr-xl), yb-(ytmp+wrtflag*0.030)*ys , &
f_ch(1:LEN0))
IF (pltopt == 1.OR.pltopt == 3.OR.pltopt == 4.OR.pltopt == 5)THEN
IF(ABS(zmin-zmax) <= 1.e-15 .OR. ncont > 0) THEN
WRITE(ch,'(''MIN='',G9.3E2,'' MAX='',G9.3E2)')zmin,zmax
ELSE
WRITE(ch,'(''MIN='',G10.4E2,'' MAX='',G10.4E2, &
& '' inc='',g10.4E2)')zmin,zmax,zinc
END IF
ELSE IF( pltopt == 2 ) THEN
WRITE(ch,'(''MIN='',G9.3E2,'' MAX='',G9.3E2)')zmin,zmax
END IF
LEN0=LEN_TRIM(ch)
CALL strmin
(ch,LEN0)
CALL xcharr(xr+0.20*(xr-xl), yb-(ytmp+wrtflag*0.030)*ys , &
ch(1:LEN0))
IF (ncont > 1 .AND. (pltopt == 1 .OR. pltopt == 4) ) THEN
wrtflag = wrtflag+1
len1=LEN_TRIM(ch1)
CALL strmin
(ch1,len1)
CALL xcharr(xr+0.20*(xr-xl),yb-(ytmp+wrtflag*0.030)*ys, &
ch1(1:len1))
END IF
!-----------------------------------------------------------------------
!
! Plot additional text below the figure
!
!-----------------------------------------------------------------------
CALL label2d
(runname)
CALL xpspac(pl, pr, pb, pt) ! set frame back
END IF ! myproc == 0
cpu2 = f_cputime
()
second2 = f_walltime
()
! write(6,*) '!!!! total cpu time for one CTR2D :', &
! cpu2-cpu1,' PLOT:',varname
RETURN
END SUBROUTINE ctr2d
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CTRINC ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ctrinc( ctinc0, ctmin0, ctmax0 ) 3
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set the contour interval for field to plotted by CTR2D.
!
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! 6/08/92 Added full documentation (K. Brewster)
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! ctinc0 Contour interval
! If CTINC0 = 0.0, the interval is internally determined.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
REAL :: ctinc0,ctmin0,ctmax0
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
REAL :: ctinc,ctmin,ctmax,vtunt ! contour interval and vector unit
COMMON /incunt/ ctinc,ctmin,ctmax,vtunt
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
ctinc = ctinc0
ctmin = ctmin0
ctmax = ctmax0
RETURN
END SUBROUTINE ctrinc
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE LABEL2D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE label2d(runname) 2,3
!
!-----------------------------------------------------------------------
!
! PURPOSE:
! Plot certain text labels for VTR2D and CTR2d.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! Taked from former CTR2D.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! xl Left bound of the physical domain
! xr Right bound of the physical domain
! yb Bottom bound of the physical domain.
! yt Top bound of the physical domain.
!
! runname character string describing the model run
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
CHARACTER (LEN=*) :: runname
INTEGER :: layover
COMMON /laypar/ layover
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
!
INTEGER :: xfont ! the font of character
INTEGER :: haxisu, vaxisu
INTEGER :: lbaxis
INTEGER :: tickopt
INTEGER :: axlbfmt
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
!
INTEGER :: ntitle,titcol, nxpic, nypic, wpltime
REAL :: titsiz
CHARACTER (LEN=132) :: ptitle(3), footer_l, footer_c, footer_r
COMMON /titpar1/ptitle, footer_l, footer_c, footer_r
COMMON /titpar2/ntitle,titcol,wpltime, nxpic, nypic
COMMON /titpar3/titsiz
REAL :: xl,xr,yb,yt
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: nopic
REAL :: xlimit, ylimit, rotang
INTEGER :: nhpic, nvpic,ifont
INTEGER :: ovrtrn ,trnplt ! overlay terrain option (0/1)
REAL :: trninc,trnmin, trnmax ! terrain interval minimum, maximum
REAL :: ztmin,ztmax
COMMON /trnpar/ trnplt,ovrtrn,trninc,trnmin, trnmax,ztmin,ztmax
INTEGER :: timeovr
COMMON /timover/ timeovr
REAL :: lblmag, ctrlbsiz, axlbsiz
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
!
INTEGER :: col_table,pcolbar
COMMON /coltable/col_table,pcolbar
!
CHARACTER (LEN=24) :: tzstring
CHARACTER (LEN=24) :: tz
CHARACTER (LEN=132) :: datetimestr
INTEGER :: lnblnk, len1, len2, len3
CHARACTER (LEN=132) :: string_l, string_c, string_r
CHARACTER (LEN=8) :: tzone
CHARACTER (LEN=10) :: cur_time
CHARACTER (LEN=8) :: cur_date
INTEGER :: t_values(8)
REAL :: ytmp, hch
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
CALL xqmap(xl,xr,yb,yt)
CALL xcolor(lbcolor)
CALL xqnpic(nopic)
CALL xqspac(nhpic, nvpic, rotang, xlimit, ylimit)
CALL xchsiz( 0.021*(yt-yb) * lblmag )
IF(timeovr == 0) THEN
IF(nopic == nhpic*(nvpic-1)+1 ) THEN
IF ( wpltime == 1) THEN
CALL date_and_time(cur_date,cur_time,tzone,t_values)
IF(t_values(4) == 0) THEN
tzstring = ' UTC'
ELSE
tzstring = ' Local Time'
END IF
WRITE (datetimestr,999) 'Plotted ', &
t_values(1),t_values(2),t_values(3), &
t_values(5),t_values(6),tzstring
999 FORMAT (a, i4.4,'/',i2.2,'/',i2.2,' ',i2.2,':',i2.2,a)
END IF
IF ( footer_l == ' ') THEN
string_l = 'ARPSPLT/ZXPLOT '
ELSE
string_l = footer_l
END IF
IF( footer_c == ' ') THEN
string_c = runname
ELSE
string_c = footer_c
END IF
IF(wpltime == 1 ) THEN
string_r = datetimestr(:lnblnk(datetimestr))
ELSE
string_r = footer_r
END IF
CALL xqcfnt(ifont)
CALL xcfont(xfont)
ytmp = 0.29
CALL xqchsz(hch)
IF ( layover < 1) THEN
len1=LEN_TRIM(string_l)
CALL strmin
(string_l, len1)
len2=LEN_TRIM(string_c)
CALL strmin
(string_c, len2)
len3=LEN_TRIM(string_r)
CALL strmin
(string_r, len3)
CALL xcharc(xl+0.5*(xr-xl), &
yb-(ytmp+layover*0.03)*(yt-yb), &
string_l(1:len1)//' '//string_c(1:len2)//' '// &
string_r(1:len3))
END IF
CALL xcfont(ifont)
END IF
timeovr=1
END IF
RETURN
END SUBROUTINE label2d
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE VTR3D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE vtr3d(u,v,w, x,y,z, xw,xe,dx, ys,yn,dy, zb,zt,dz, & 3,41
nx,ibgn,iend,ist, ny,jbgn,jend,jst, nz,kbgn,kend,kst, &
kslice, jslice, islice, label,time, runname, factor, &
slicopt,n,xp,yp,zp,u1,v1,u2,v2,w2, &
tem1,tem2,tem3,tem4, &
tem5,tem6,hterain)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Plot vector fields in 2-d slices
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! 6/08/92 Added full documentation (K. Brewster)
!
! 3/25/96 (K. Brewster)
! Added variables isize,jsize,ksize
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! u 3-dimensional array of u wind components (m/s)
! v 3-dimensional array of v wind components (m/s)
! w 3-dimensional array of w wind components (m/s)
!
! 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 physical space (m)
!
! xw value of x for first i grid point to plot
! xe value of x for last i grid point to plot
! ys value of y for first j grid point to plot
! yn value of y for last j grid point to plot
! zb value of z for first k grid point to plot
! zt value of z for last k grid point to plot
!
! nx first dimension of b
! ibgn index of first i grid point to plot
! iend index of last i grid point to plot
!
! ny second dimension of b
! jbgn index of first j grid point to plot
! jend index of last j grid point to plot
!
! nz third dimension of b
! kbgn index of first k grid point to plot
! kend index of last k grid point to plot
!
! ist step size in x direction
! jst step size in y direction
! kst step size in z direction
!
! time time of data in seconds
!
! kslice k index of plane for slicopt=1 x-y slice
! jslice j index of plane for slicopt=2 x-z slice
! islice i index of plane for slicopt=1 y-z slice
!
! runname character string decribing run
!
! factor scaling factor for winds
! V*factor wind vectors are plotted
!
! slicopt slice orientation indicator
! = 1, x-y slice of at k=kslice is plotted.
! = 2, x-z slice of at j=jslice is plotted.
! = 3, y-z slice of at i=islice is plotted.
! = 4, horizontal slice at z index islice is plotted.
! = 5, xy-z cross section of wind islice is plotted.
! = 6, data field on constant p-level is plotted.
! = 0, all of the three slices above are plotted.
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
! tem5 Temporary work array.
!
! (These arrays are defined and used locally (i.e. inside this
! subroutine), they may also be passed into routines called by
! this one. Exiting the call to this subroutine, these temporary
! work arrays may be used for other purposes therefore their
! contents overwritten. Please examine the usage of work arrays
! before you alter the code.)
!
! pp01 The pressure (mb) value at the specific p-level
! ercpl reciprocal of exponent
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
INTEGER :: n
REAL :: u(nx,ny,nz)
REAL :: v(nx,ny,nz)
REAL :: w(nx,ny,nz)
REAL :: x(nx,ny,nz)
REAL :: y(nx,ny,nz)
REAL :: z(nx,ny,nz)
REAL :: u1(nx,ny),v1(nx,ny)
REAL :: u2(n,nz),v2(n,nz),w2(n,nz),zp(n,nz)
REAL :: xp(n),yp(n)
REAL :: hterain(nx,ny) ! The height of the terrain.
INTEGER :: kslice,jslice,islice
CHARACTER (LEN=*) :: runname
CHARACTER (LEN=*) :: label
REAL :: xw,xe,dx,ys,yn,dy,zb,zt,dz
INTEGER :: ibgn,iend,ist, jbgn,jend,jst, kbgn,kend,kst
REAL :: time,factor
INTEGER :: slicopt
INTEGER :: iunits, itype
COMMON /windvtr/iunits, itype
CHARACTER (LEN=12) :: varname
COMMON /varplt1/ varname
REAL :: xw1,xe1,ys1,yn1
COMMON /xuvpar/xw1,xe1,ys1,yn1
!
!-----------------------------------------------------------------------
!
! Some constants
!
!-----------------------------------------------------------------------
!
REAL :: pp01
REAL, PARAMETER :: ercpl=0.3678794 ! exp(-1.0)
!
!-----------------------------------------------------------------------
!
! Work arrays: tem1,tem2,tem3,tem4,tem5 of size at least
! max( nx*ny, nx*nz, ny*nz).
!
!-----------------------------------------------------------------------
!
REAL :: tem1(*),tem2(*),tem3(*),tem4(*),tem5(*)
REAL :: tem6(*)
!
!-----------------------------------------------------------------------
!
! Common blocks for plotting control parameters
!
!-----------------------------------------------------------------------
!
REAL :: x01,y01 ! the first point of interpolation
REAL :: x02,y02 ! the second point of interpolation
REAL :: zlevel ! the given height of the slice
REAL :: sinaf,cosaf,dist,sqrtdxy
COMMON /slicev/x01,y01,x02,y02,sinaf,cosaf,dist,sqrtdxy
COMMON /sliceh/zlevel
INTEGER :: ovrobs,obsset,obscol,obs_marktyp
REAL :: obs_marksz
COMMON /obspar/ ovrobs,obsset,obscol,obs_marktyp, obs_marksz
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
INTEGER :: trnplt ! flag to plot terain (1 or 0)
INTEGER :: ovrtrn ! overlay terrain option (0/1)
REAL :: trninc,trnmin, trnmax ! terrain interval minimum, maximum
REAL :: ztmin,ztmax
COMMON /trnpar/ trnplt,ovrtrn,trninc,trnmin, trnmax,ztmin,ztmax
!
!-----------------------------------------------------------------------
!
! Misc. local Variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,ij,ik,jk,istep,jstep,length,isize,jsize,ksize
REAL :: uunit
CHARACTER (LEN=6) :: timhms
CHARACTER (LEN=120) :: title
INTEGER :: xfont ! the font of character
INTEGER :: haxisu, vaxisu
INTEGER :: lbaxis
INTEGER :: tickopt
INTEGER :: axlbfmt
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
CHARACTER (LEN=6) :: stem2
CHARACTER (LEN=1) :: stem1
INTEGER :: smooth
COMMON /smoothopt/smooth
INTEGER :: id
REAL :: x_tmp
COMMON /tmphc2/ x_tmp
INTEGER :: wrtflag
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
CHARACTER (LEN=25) :: timestring
COMMON /timelev/wrtflag, timelab, levlab, timestring
REAL :: tmpx, tmpy
CHARACTER (LEN=20) :: distc
REAL :: x101, y101, x102,y102
COMMON /slicev1/x101, y101, x102,y102
INTEGER :: llabel
CHARACTER (LEN=120) :: label_copy
INTEGER :: xpbgn,xpend,ypbgn,ypend
COMMON /processors/ xpbgn, xpend, ypbgn, ypend
INTEGER :: idsize, jdsize, mnsize
INTEGER :: tinds, tind1,tind2,tind3,tind4,tind5,tind6,tind7,tind8
!----------------------------------------------------------------------
!
! Include files
!
!---------------------------------------------------------------------
INCLUDE 'mp.inc'
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
isize=(iend-ibgn)+1
jsize=(jend-jbgn)+1
ksize=(kend-kbgn)+1
idsize = isize ! global maximum isize
jdsize = jsize
CALL mpmaxi
(idsize)
CALL mpmaxi
(jdsize)
mnsize = idsize*jdsize
mnsize = MAX(mnsize,idsize*ksize,jdsize*ksize)
tind1 = 1 ! reuse a 3d temporary array 'tem5' as several 2D
tind2 = tind1+mnsize ! arrays inside vtr2d
tind3 = tind2+mnsize
tind4 = tind3+mnsize
tind5 = tind4+mnsize
tind6 = tind5+mnsize
tind7 = tind6+mnsize
tind8 = tind7+mnsize
! tinds = SIZE(tem6)
! IF (tinds < 5*mnsize) THEN
! WRITE(6,'(3a)') 'ERROR: temporary array tem6 is too small ', &
! 'inside vtr3d while plotting ',label
! CALL arpsstop('Temporary array too small inside vtr3d.',1)
! END IF
label_copy = label
llabel = 120
CALL xstrlnth(label_copy, llabel)
IF(myproc == 0)CALL xpscmnt('Start plotting '//label_copy(1:llabel))
!
!-----------------------------------------------------------------------
!
! slicopt=1 Plot u-v field
!
!-----------------------------------------------------------------------
!
CALL cvttim
( time, timhms)
IF( timhms(1:1) == '0' ) timhms(1:1)=' '
WRITE(timelab,'(''T='',F8.1,A)') time, &
' s ('//timhms(1:2)//':'//timhms(3:4)//':'//timhms(5:6)//')'
CALL get_time_string
( time, timestring)
IF ( slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5) THEN
CALL cal_dist
(haxisu,dx,dy,x01,y01,x02,y02,slicopt, &
tmpx,tmpy,distc)
END IF
!
!-----------------------------------------------------------------------
!
! Set up terrain, if needed.
!
!-----------------------------------------------------------------------
!
IF(trnplt == 1 .OR.trnplt == 2 .OR. ovrtrn == 1) THEN
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem5(ij)=hterain(i,j)
END DO
END DO
END IF
IF( slicopt == 1 .OR. slicopt == 0 ) THEN
k = kslice
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
tem2(ij) = -9999.0
IF(u(i,j,k) /= -9999.0) tem1(ij)=u(i,j,k)*factor
IF(v(i,j,k) /= -9999.0) tem2(ij)=v(i,j,k)*factor
tem3(ij)=x(i,j,k)
tem4(ij)=y(i,j,k)
END DO
END DO
IF (k /= 2) THEN
WRITE(levlab,'(''GRID LEVEL='',I3)')k
WRITE(title,'(''U-V '',A)')label
ELSE
WRITE(levlab,'(''FIRST LEVEL ABOVE GROUND (SURFACE)'')')
WRITE(title,'(''U-V '',A)') label
END IF
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
uunit = 10.0
CALL xvmode(1)
istep = ist
jstep = jst
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem6)
CALL smooth9pmv
(tem2,isize,jsize,1,isize,1,jsize,tem6)
END DO
CALL vtr2d
(tem1,tem2,tem3,tem4, uunit, xw,xe,dx,ys,yn,dy, &
isize,istep,jsize,jstep,title(1:length),runname, 1, &
tem5,slicopt,mnsize,tem6(tind1),tem6(tind2),tem6(tind3), &
tem6(tind4),tem6(tind5),tem6(tind6),tem6(tind7), &
tem6(tind8))
!
!-----------------------------------------------------------------------
!
! slicopt=2 Plot u-w field
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 2 .OR. slicopt == 0 ) THEN
x_tmp = y(1,jslice,1)
j = jslice
j = j + (ypbgn-1)*(ny-3)
dist = (j-1.5)*tmpy
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''X-Z PLANE AT Y='',F8.1,A)')dist,distc(1:length)
IF(varname(1:6) == 'xuvplt') THEN
xw1=xw
xe1=xe
ys1=ys
yn1=yn
id=4
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
tem2(ik) = -9999.0
IF(u(i,j,k) /= -9999.0) tem1(ik)=u(i,j,k)*factor
IF(v(i,j,k) /= -9999.0) tem2(ik)=v(i,j,k)*factor
tem3(ik)=x(i,j,k)
tem4(ik)=z(i,j,k)
END DO
END DO
WRITE(title,'(''U-V '',A)')label
ELSE
id=2
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
tem2(ik) = -9999.0
IF(u(i,j,k) /= -9999.0) tem1(ik)=u(i,j,k)*factor
IF(w(i,j,k) /= -9999.0) tem2(ik)=w(i,j,k)*factor
tem3(ik)=x(i,j,k)
tem4(ik)=z(i,j,k)
END DO
END DO
WRITE(title,'(''U-W '',A)')label
END IF
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,ksize,1,isize,1,ksize,tem6)
CALL smooth9pmv
(tem2,isize,ksize,1,isize,1,ksize,tem6)
END DO
uunit = 10.0
CALL xvmode(1)
istep = ist
jstep = kst
CALL vtr2d
(tem1,tem2,tem3,tem4,uunit, xw,xe,dx,zb,zt,dz, &
isize,istep,ksize,jstep,title(1:length),runname, id, &
tem5,slicopt,mnsize,tem6(tind1),tem6(tind2),tem6(tind3), &
tem6(tind4),tem6(tind5),tem6(tind6),tem6(tind7), &
tem6(tind8))
!
!-----------------------------------------------------------------------
!
! slicopt=3 Plot v-w field
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 3 .OR. slicopt == 0 ) THEN
! x_tmp = y(1,jslice,1)
x_tmp = x(islice,1,1)
i = islice
i = i+ (xpbgn-1)*(nx-3)
dist = (i-1.5)*tmpx
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''Y-Z PLANE AT X='',F8.1,A)')dist,distc(1:length)
IF(varname(1:6) == 'xuvplt') THEN
xw1=xw
xe1=xe
ys1=ys
yn1=yn
id=4
DO k=kbgn,kend
DO j=jbgn,jend
jk = j-jbgn+1 + (k-kbgn)*jsize
tem1(jk) = -9999.0
tem2(jk) = -9999.0
IF(u(i,j,k) /= -9999.0) tem1(jk)=u(i,j,k)*factor
IF(v(i,j,k) /= -9999.0) tem2(jk)=v(i,j,k)*factor
tem3(jk)=y(i,j,k)
tem4(jk)=z(i,j,k)
END DO
END DO
WRITE(title,'(''U-V '',A)')label
ELSE
id=3
DO k=kbgn,kend
DO j=jbgn,jend
jk = j-jbgn+1 + (k-kbgn)*jsize
tem1(jk) = -9999.0
tem2(jk) = -9999.0
IF(v(i,j,k) /= -9999.0) tem1(jk)=v(i,j,k)*factor
IF(w(i,j,k) /= -9999.0) tem2(jk)=w(i,j,k)*factor
tem3(jk)=y(i,j,k)
tem4(jk)=z(i,j,k)
END DO
END DO
WRITE(title,'(''V-W '',A)')label
END IF
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,jsize,ksize,1,jsize,1,ksize,tem6)
CALL smooth9pmv
(tem2,jsize,ksize,1,jsize,1,ksize,tem6)
END DO
uunit = 10.0
CALL xvmode(1)
istep = jst
jstep = kst
CALL vtr2d
(tem1,tem2,tem3,tem4,uunit, ys,yn,dy,zb,zt,dz, &
jsize,istep,ksize,jstep,title(1:length),runname, id, &
tem5,slicopt,mnsize,tem6(tind1),tem6(tind2),tem6(tind3), &
tem6(tind4),tem6(tind5),tem6(tind6),tem6(tind7), &
tem6(tind8))
!
!-----------------------------------------------------------------------
!
! slicopt=4 Plot u-v field on constant z levels
! slicopt=6 Plot u-v field on constant pressure levels
! slicopt=7 Plot u-v field on constant PT levels
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 4.OR.slicopt == 6.OR.slicopt == 7 ) THEN
! CALL hintrp(nx,ny,nz,u,z,zlevel,u1)
! CALL hintrp(nx,ny,nz,v,z,zlevel,v1)
CALL hintrp1
(nx,ny,nz,kbgn,kend,u,z,zlevel,u1)
CALL hintrp1
(nx,ny,nz,kbgn,kend,v,z,zlevel,v1)
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
tem2(ij) = -9999.0
IF(u1(i,j) /= -9999.0) tem1(ij)=u1(i,j)*factor
IF(v1(i,j) /= -9999.0) tem2(ij)=v1(i,j)*factor
tem3(ij)=x(i,j,2)
tem4(ij)=y(i,j,2)
END DO
END DO
IF( slicopt == 4) THEN
WRITE(levlab,'(''Z='',F7.3,'' KM MSL'')') &
zlevel
ELSE IF( slicopt == 6) THEN
pp01 = 0.01*ercpl**zlevel
WRITE(levlab,'(''P='',F7.2,A)') pp01, ' MB'
ELSE
WRITE(levlab,'(''THETA='',F5.1,A)') zlevel, ' (K)'
END IF
WRITE(title,'(''U-V '',A)') label
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
uunit = 10.0
CALL xvmode(1)
istep = ist
jstep = jst
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem6)
CALL smooth9pmv
(tem2,isize,jsize,1,isize,1,jsize,tem6)
END DO
CALL vtr2d
(tem1,tem2,tem3,tem4, uunit, xw,xe,dx,ys,yn,dy, &
isize,istep,jsize,jstep,title(1:length),runname, 1, &
tem5,slicopt,mnsize,tem6(tind1),tem6(tind2),tem6(tind3), &
tem6(tind4),tem6(tind5),tem6(tind6),tem6(tind7), &
tem6(tind8))
!
!-----------------------------------------------------------------------
!
! slicopt=5 Plot u-v field
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 5 ) THEN
CALL sectvrt
(nx,ny,nz,u,x,y,z,dx,dy,u2,zp,n,xp,yp)
CALL sectvrt
(nx,ny,nz,v,x,y,z,dx,dy,v2,zp,n,xp,yp)
CALL sectvrt
(nx,ny,nz,w,x,y,z,dx,dy,w2,zp,n,xp,yp)
IF(varname(1:6) == 'xuvplt') THEN
xw1=xw
xe1=xe
ys1=ys
yn1=yn
id=4
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
tem2(ik) = -9999.0
IF(u2(i,k) /= -9999.0) tem1(ik)= u2(i,k)*factor
IF(v2(i,k) /= -9999.0) tem2(ik)= v2(i,k)*factor
tem3(ik)=xw+(i-ibgn)* sqrtdxy
tem4(ik)=zp(i,k)
END DO
END DO
ELSE
id=2
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
tem2(ik) = -9999.0
IF(u2(i,k) /= -9999.0 .AND. v2(i,k) /= -9999.0) &
tem1(ik)=(u2(i,k)*cosaf+v2(i,k)*sinaf)*factor
IF(w2(i,k) /= -9999.0) tem2(ik)=w2(i,k)*factor
tem3(ik)=xw+(i-ibgn)* sqrtdxy
tem4(ik)=zp(i,k)
END DO
END DO
END IF
IF(axlbfmt == -1 .OR. axlbfmt == 1 ) THEN
length=LEN_TRIM(distc)
CALL strmin
(distc,length)
IF(varname(1:6) == 'xuvplt') THEN
length=LEN_TRIM(distc)
CALL strmin
(distc,length)
WRITE(title,'(''U-V '',A)') label
WRITE(levlab,'(''XY-Z PLOT FROM '',4(A,F5.1),A,A)') &
'(',x101,',',y101,') through (',x102,',',y102,') ', &
distc(1:length)
ELSE
WRITE(title,'(''UV-W '',A)') label
WRITE(levlab, &
'(''VERTICAL PLANE FROM '',4(A,F8.1),A,A)') &
'(',x101,',',y101,') through (',x102,',',y102,') ', &
distc(1:length)
END IF
ELSE IF(axlbfmt == 0) THEN
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
IF(varname(1:6) == 'xuvplt') THEN
WRITE(title,'(''U-V '',A)') label
WRITE(levlab,'(''XY-Z PLOT FROM '',4(A,I5),A,A)') &
'(',NINT(x101),',',NINT(y101),') through (', &
NINT(x102),',',NINT(y102),') ',distc(1:length)
ELSE
WRITE(title,'(''UV-W '',A)') label
WRITE(levlab, &
'(''VERTICAL PLANE FROM '',4(A,I5),A,A)') &
'(',NINT(x101),',',NINT(y101),') through (', &
NINT(x102),',',NINT(y102),') ',distc(1:length)
END IF
ELSE
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
! WRITE(stem1,'(i1)')axlbfmt
! WRITE(stem2,'(a3,a1)')'f8.',stem1
IF(varname(1:6) == 'xuvplt') THEN
WRITE(title,'(''U-V '',A)') label
WRITE(levlab,'(''XY-Z PLOT FROM '',4(A,f8.2),A,A)') &
'(',x101,',',y101,') through (',x102,',',y102,') ', &
distc(1:length)
ELSE
WRITE(title,'(''UV-W '',A)') label
WRITE(levlab, &
'(''VERTICAL PLANE FROM '',4(A,f8.2),A,A)') &
'(',x101,',',y101,') through (',x102,',',y102,') ', &
distc(1:length)
END IF
END IF
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,ksize,1,isize,1,ksize,tem6)
CALL smooth9pmv
(tem2,isize,ksize,1,isize,1,ksize,tem6)
END DO
uunit = 10.0
CALL xvmode(1)
istep = ist
jstep = kst
CALL vtr2d
(tem1,tem2,tem3,tem4,uunit, xw,xe,sqrtdxy,zb,zt,dz, &
isize,istep,ksize,jstep,title(1:length),runname, id, &
tem5,slicopt,mnsize,tem6(tind1),tem6(tind2),tem6(tind3), &
tem6(tind4),tem6(tind5),tem6(tind6),tem6(tind7), &
tem6(tind8))
END IF
IF(myproc == 0) CALL xpscmnt('End plotting '//label_copy(1:llabel))
RETURN
END SUBROUTINE vtr3d
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE VTR2D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE vtr2d(u,v,x,y,uunit1, xl,xr,dx,yb,yt,dy, & 6,53
m,istep,n,jstep,char1,char2, vpltmod, &
hterain,slicopt,mnsize, &
plotu,plotv,plota,plotx,ploty,iwrk,xwk,ywk)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Plot 2-d wind (u1,u2) vector field defined on grid points (x,y)
! using ZXPLOT package..
!
!-----------------------------------------------------------------------
!
! AUTHOR:
!
! MODIFICATION HISTORY:
!
! 1/24/96 (J. Zong and M. Xue)
! Fixed a problem related to finding the minima and maxima of u & v
! when there exist missing data. The initial min. and max. should be
! set to values other than the missing value, -9999.0.
!
!-----------------------------------------------------------------------
!
!
! INPUT:
! u m by n 2-dimensional array of u (left-to-right)
! wind components (m/s)
! v m by n 2-dimensional array of v (down-to-up)
! wind components (m/s)
!
! x x coordinate of grid points in physical/comp. space (m)
! y y coordinate of grid points in physical/comp. space (m)
!
! uunit1
!
! xl,xr The left and right bound of the physical domain.
! dx Spacing between the x-axis tick marks
! yb,yt Bottom and top bound of the physical domain.
! dy Spacing between the y-axis tick marks
!
! m First dimension of vector component array
! istep Step increment for plotting in x direction
!
! n Second dimension of vector component array
! jstep Step increment for plotting in y direction
!
! char1 First character string to plot (title)
! char2 Second character string to plot (runname)
!
! vpltmod vpltmod = 1 for u-v vector (u=u, v=v in model space)
! vpltmod = 2 for u-w vector (u=u, v=w in model space)
! vpltmod = 3 for v-w vector (u=v, v=w in model space)
! hterain the height of terrain
! slicopt slice orientation indicator
! = 1, x-y slice of at k=kslice is plotted.
! = 2, x-z slice of at j=jslice is plotted.
! = 3, y-z slice of at i=islice is plotted.
! = 4, horizontal slice at z index islice is plotted.
! = 5, xy-z cross section of wind islice is plotted.
! = 6, data field on constant p-level is plotted.
! = 0, all of the three slices above are plotted.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'arpsplt.inc'
INTEGER, INTENT(IN) :: m,n
REAL, INTENT(IN) :: u(m,n)
REAL, INTENT(IN) :: v(m,n)
REAL, INTENT(IN) :: x(m,n)
REAL, INTENT(IN) :: y(m,n)
REAL, INTENT(IN) :: uunit1
REAL, INTENT(IN) :: xl,xr,dx,yb,yt,dy
INTEGER, INTENT(IN) :: istep,jstep
CHARACTER(LEN=*), INTENT(IN) :: char2
CHARACTER(LEN=*), INTENT(INOUT) :: char1
INTEGER, INTENT(IN) :: slicopt,vpltmod
REAL, INTENT(IN) :: hterain(m,n) ! The height of the terrain.
INTEGER, INTENT(IN) :: mnsize
REAL, INTENT(INOUT) :: plotu(mnsize)
REAL, INTENT(INOUT) :: plotv(mnsize)
REAL, INTENT(INOUT) :: plota(mnsize)
REAL, INTENT(INOUT) :: plotx(mnsize)
REAL, INTENT(INOUT) :: ploty(mnsize)
INTEGER, INTENT(INOUT) :: iwrk(mnsize)
REAL, INTENT(INOUT) :: xwk(mnsize), ywk(mnsize)
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: layover
REAL :: ctinc,ctmin,ctmax,vtunt !contour interval and vector unit
REAL :: xleng,vunit
REAL :: yxratio !the scaling factor the y/x ratio.
INTEGER :: iunits, itype
COMMON /laypar/ layover
COMMON /incunt/ ctinc,ctmin,ctmax,vtunt
COMMON /vecscl/ xleng,vunit
COMMON /yratio/ yxratio
COMMON /windvtr/ iunits, itype
INTEGER :: ovrstaopt
INTEGER :: ovrstam,staset,ovrstan,ovrstav,stacol,markprio,wrtstax
INTEGER :: nsta_typ,sta_typ(10),sta_marktyp(10),sta_markcol(10)
REAL :: sta_marksz(10),wrtstad
CHARACTER (LEN=132) :: stalofl
COMMON /sta_par/ ovrstaopt,ovrstam,staset,ovrstan,ovrstav,stacol, &
markprio,nsta_typ,sta_typ,sta_marktyp, &
sta_markcol,sta_marksz,stalofl,wrtstax,wrtstad
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
INTEGER :: ovrobs,obsset,obscol,obs_marktyp
REAL :: obs_marksz
COMMON /obspar/ ovrobs,obsset,obscol,obs_marktyp, obs_marksz
REAL :: lblmag, ctrlbsiz, axlbsiz
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
INTEGER :: flag, haxisu, vaxisu, lbaxis, tickopt, axlbfmt
INTEGER :: xfont ! the font of character
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
REAL :: ubarb(200,200), vbarb(200,200)
COMMON /windtmp/ubarb, vbarb
REAL :: zlevel
COMMON /sliceh/ zlevel
INTEGER :: timeovr
COMMON /timover/ timeovr
INTEGER :: ntitle,titcol, nxpic, nypic, wpltime
REAL :: titsiz
CHARACTER (LEN=132) :: ptitle(3), footer_l, footer_c, footer_r
COMMON /titpar1/ptitle, footer_l, footer_c, footer_r
COMMON /titpar2/ntitle,titcol,wpltime, nxpic, nypic
COMMON /titpar3/titsiz
INTEGER :: col_table,pcolbar
COMMON /coltable/ col_table,pcolbar
CHARACTER (LEN=12) :: varname
COMMON /varplt1/ varname
REAL :: xw1,xe1,ys1,yn1
COMMON /xuvpar/ xw1,xe1,ys1,yn1
INTEGER :: wrtflag
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
CHARACTER (LEN=25) :: timestring
COMMON /timelev/wrtflag, timelab, levlab, timestring
CHARACTER (LEN=80) :: prestr
INTEGER :: preflag
COMMON /preinfo/ prestr,preflag
REAL :: x101, y101, x102,y102
COMMON /slicev1/x101, y101, x102,y102
INTEGER :: xnwpic_called
COMMON /callnwpic/xnwpic_called
INTEGER :: xpbgn,xpend,ypbgn,ypend ! for MPI jobs
COMMON /processors/ xpbgn,xpend,ypbgn,ypend
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,key
REAL :: pl,pr,pb,pt ! plot space left, right, bottom, top coordinate
REAL :: px,py ! plot space left-right length and up-down height
REAL :: xs,ys ! real space left-right length and up-down height
REAL :: pxc,pyc ! plot space left-right center and
! up-down center
REAL :: x0,y0
REAL :: umax,umin ! max and min of u component
REAL :: vmax,vmin ! max and min of v component
REAL :: uunit, uunit0
REAL :: am
INTEGER :: len0, len1
REAL :: xleng0,istand
INTEGER :: iunits0
CHARACTER (LEN=15) :: ichar2
CHARACTER (LEN=150) :: f_char1
CHARACTER (LEN=150) :: ch
REAL :: ytmp !!local temporary variable
!wdt update
REAL :: f_cputime,cpu1,cpu2
DOUBLE PRECISION :: f_walltime,second1,second2
INCLUDE 'mp.inc'
INTEGER :: ii,jj,mm,nn
INTEGER :: ierr, itags, itagr
INTEGER, PARAMETER :: destination = 0
INTEGER :: source
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
second1= f_walltime
()
cpu1 = f_cputime
()
IF(myproc == 0) THEN
WRITE(6,'(/1x,a,a)') ' Plotting ',char1
IF( layover == 0 .OR. xnwpic_called == 0) THEN
CALL xnwpic
xnwpic_called=1
timeovr=0
wrtflag = 0
preflag = 0
prestr = levlab
len1=LEN_TRIM(prestr)
CALL strmin
(prestr,len1)
ELSE
timeovr=1
wrtflag = wrtflag + 1
END IF
!
!-----------------------------------------------------------------------
!
! Get plotting space variables
!
!-----------------------------------------------------------------------
!
CALL xqpspc( pl, pr, pb, pt)
px = pr - pl
py = pt - pb
xs = xr-xl
ys = yt-yb
pxc = (pr+pl)/2
pyc = (pb+pt)/2
!
!-----------------------------------------------------------------------
!
! Let the longest lenth determine size scaling of plot
!
!-----------------------------------------------------------------------
!
IF( py/px >= ys*yxratio/xs ) THEN
py = ys*yxratio/xs*px
CALL xpspac(pl, pr, pyc-py/2, pyc+py/2 )
ELSE
px = xs/(ys*yxratio)*py
CALL xpspac(pxc-px/2, pxc+px/2, pb, pt)
END IF
!
!-----------------------------------------------------------------------
!
! Set the real distance to plot distance scaling
!
!-----------------------------------------------------------------------
!
CALL xmap( xl, xr, yb,yt)
!
!-----------------------------------------------------------------------
!
! Plot maps, boxes, and polygons
!
!-----------------------------------------------------------------------
!
CALL xcolor(lbcolor)
CALL pltextra
(slicopt, 1 )
END IF ! myproc == 0
!
!-----------------------------------------------------------------------
!
! Find max and min of data array
!
!-----------------------------------------------------------------------
!
DO j=1,n
DO i=1,m
IF(u(i,j) == -9999.0 .OR. v(i,j) == -9999.0) CYCLE
umin = u(i,j)
vmin = v(i,j)
GO TO 110
END DO
END DO
110 CONTINUE
umax=umin
vmax=vmin
DO j=1,n
DO i=1,m
IF(u(i,j) > umax .AND. u(i,j) /= -9999.0) umax=u(i,j)
IF(u(i,j) < umin .AND. u(i,j) /= -9999.0) umin=u(i,j)
IF(v(i,j) > vmax .AND. v(i,j) /= -9999.0) vmax=v(i,j)
IF(v(i,j) < vmin .AND. v(i,j) /= -9999.0) vmin=v(i,j)
END DO
END DO
CALL mpmax0
(umax, umin) !? only inside xpbgn-xpend, ypbgn-ypend
CALL mpmax0
(vmax, vmin) !? only inside xpbgn-xpend, ypbgn-ypend
!
!-----------------------------------------------------------------------
!
! Fill various labels
!
!-----------------------------------------------------------------------
!
IF(myproc == 0) THEN
CALL xchsiz( 0.030*(yt-yb) * lblmag )
CALL xcolor(lbcolor)
IF ( layover < 1 ) THEN
len1=LEN_TRIM(timelab)
CALL strmin
(timelab,len1)
CALL xcharl(xl,yt+0.07*ys, timestring(1:25))
CALL xcharr(xr+0.05*(xr-xl),yt+0.07*ys, timelab(1:len1))
IF(levlab /= ' ') THEN
len1=LEN_TRIM(levlab)
CALL strmin
(levlab,len1)
CALL xcharc(xl+xs*0.5,yt+0.015*ys, levlab(1:len1))
preflag = 1
END IF
! len1=80
! CALL strmin(levlab,len1)
! CALL xcharc(xl+xs*0.5,yt+0.015*ys, levlab(1:len1))
END IF
IF(preflag == 0 .AND. levlab /= ' ') THEN
len1=LEN_TRIM(levlab)
CALL strmin
(levlab,len1)
CALL xcharc(xl+xs*0.5,yt+0.015*ys, levlab(1:len1))
preflag = 1
END IF
IF( vpltmod == 1 .OR. vpltmod == 4 ) THEN
WRITE(ch,'(''Umin='',F7.2,'' Umax='',F7.2, &
& '' Vmin='',f7.2,'' Vmax='',f7.2)') umin,umax,vmin,vmax
ELSE IF( vpltmod == 2 ) THEN
WRITE(ch,'(''Umin='',F7.2,'' Umax='',F7.2, &
& '' Wmin='',f7.2,'' Wmax='',f7.2)') umin,umax,vmin,vmax
ELSE
WRITE(ch,'(''Vmin='',F7.2,'' Vmax='',F7.2, &
& '' Wmin='',f7.2,'' Wmax='',f7.2)') umin,umax,vmin,vmax
END IF
LEN0= LEN_TRIM(char1)
CALL strmin
(char1,LEN0)
IF( char1(LEN0:LEN0) == ')' ) char1(LEN0:LEN0)=','
IF(itype == 1) THEN
WRITE(f_char1, '(a,'' VECTOR)'')') char1(1:LEN0)
ELSE IF(itype == 2) THEN
WRITE(f_char1, '(a, '' BARB)'')')char1(1:LEN0)
END IF
! if first levlab is not equal second levlab then attatch levlab on f_ch
!
!mx
LEN0=LEN_TRIM(f_char1)
CALL strmin
(f_char1,LEN0)
len1=LEN_TRIM(levlab)
CALL strmin
(levlab,len1)
! IF (preflag.eq.1 .and. prestr(1:len1).ne.levlab(1:len1)
! : .and. prestr(1:1).ne.' '
! : .and.layover.ne.0 .and. levlab(1:1).ne.' ') THEN
! write(f_char1,'(a,a)') f_char1(1:len0),levlab(1:len1)
! ENDIF
WRITE(6,'(1x,a51)') ch(1:51)
CALL xcolor(icolor)
IF(lbaxis == 1) THEN
IF(wrtstax == 0) THEN
ytmp = 0.08
ELSE
ytmp =0.14
END IF
ELSE
ytmp = 0.12
END IF
LEN0=LEN_TRIM(f_char1)
CALL strmin
(f_char1,LEN0)
CALL xchsiz(0.025*ys * lblmag )
CALL xcharl(xl-0.20*(xr-xl), yb-(yt-yb)*(ytmp+wrtflag*0.030), &
f_char1(1:LEN0))
len1=LEN_TRIM(ch)
CALL strmin
(ch,len1)
CALL xcharr(xr+0.20*(xr-xl), yb-(yt-yb)*(ytmp+wrtflag*0.030), &
ch(1:len1))
!
!-----------------------------------------------------------------------
!
! Set vector unit and plot vectors.
!
!-----------------------------------------------------------------------
!
! Set parameter for barb
xleng0 = (pr-pl)/(m-1) * istep * 0.65
IF(iunits == 1 .AND. itype == 2) THEN
iunits0=1
istand = 5.
WRITE(ichar2,'(a15)')'5 m/s'
ELSE IF(iunits == 2 .AND. itype == 2) THEN
iunits0=2
istand = 10.
WRITE(ichar2,'(a15)')'10 knots'
ELSE IF (iunits == 3 .AND. itype == 2) THEN
iunits0=2
istand = 10.
WRITE(ichar2,'(a15)')'10 MPH'
END IF
IF(layover >= 1) CALL xcolor(icolor)
CALL xcolor(icolor)
CALL xwindw(xl, xr, yb, yt)
END IF ! myproc == 0
uunit=uunit1
IF( vtunt /= 0.0 ) THEN
uunit=vtunt
CALL xvmode(2)
END IF
CALL xmap(xl,xr, yb,yt)
CALL xvectu(u,v,m,m,istep,n,jstep,xleng,uunit)
IF (mp_opt > 0) THEN
xleng = xleng/nproc_x
CALL mpmax0
(uunit0,uunit)
END IF
DO j = 1,n
DO i = 1,m
ii = i+(j-1)*m
plotu(ii) = u(i,j)
plotv(ii) = v(i,j)
plotx(ii) = x(i,j)
ploty(ii) = y(i,j)
END DO
END DO
mm = m
nn = n
DO jj = ypbgn,ypend
DO ii = xpbgn, xpend
source = (ii+(jj-1)*nproc_x-1)
IF (source == 0) GOTO 600
CALL inctag
IF (myproc == source ) THEN
itags = gentag + 4
CALL mpsendi
(m,destination,itags,ierr)
itags = gentag + 5
CALL mpsendi
(n,destination,itags,ierr)
itags = gentag
CALL mpsendr
(u,m*n,destination,itags,ierr)
itags = gentag+3
CALL mpsendr
(v,m*n,destination,itags,ierr)
itags = gentag + 1
CALL mpsendr
(x,m*n,destination,itags,ierr)
itags = gentag + 2
CALL mpsendr
(y,m*n,destination,itags,ierr)
END IF
plotu = 0.0
plotv = 0.0
plotx = 0.0
ploty = 0.0
mm = 0
nn = 0
IF (myproc == 0) THEN
itagr = gentag + 4
CALL mprecvi
(mm,source,itagr,ierr)
itagr = gentag + 5
CALL mprecvi
(nn,source,itagr,ierr)
itagr = gentag
CALL mprecvr
(plotu,mm*nn,source,itagr,ierr)
itagr = gentag + 3
CALL mprecvr
(plotv,mm*nn,source,itagr,ierr)
itagr = gentag + 1
CALL mprecvr
(plotx,mm*nn,source,itagr,ierr)
itagr = gentag + 2
CALL mprecvr
(ploty,mm*nn,source,itagr,ierr)
END IF
600 CONTINUE
IF (myproc == 0) THEN
IF(itype == 1) THEN
CALL xvectr(plotu,plotv,plotx,ploty,mm,mm,istep,nn,jstep,xleng,uunit)
ELSE IF(itype == 2) THEN
CALL xbarbs(plotu,plotv,plotx,ploty,mm,mm,istep,nn,jstep,iunits0,xleng*0.65,2)
END IF
CALL xwdwof
END IF ! myproc == 0
CALL mpbarrier
! sync the processors
END DO
END DO
IF (myproc == 0) THEN
!
!-----------------------------------------------------------------------
!
! Plot axes with tick marks
!
!-----------------------------------------------------------------------
!
CALL pltaxes
(slicopt,dx,dy)
vunit=uunit
x0=xl-(xr-xl)*0.08
y0=yb-(yt-yb)*0.07
key=0
am=0.5
IF( ((m-1)/istep) > 30 ) am=1.0
IF(itype == 1) THEN
IF(varname(1:6) == 'xuvplt') CALL xmap(xl, xr,yb,yt)
CALL xvectk(x0,y0,xleng*am,uunit*am, key)
CALL xmap(xl, xr, yb, yt)
END IF
END IF ! myproc == 0
!
!-----------------------------------------------------------------------
!
! Plot terrain etc.
!
!-----------------------------------------------------------------------
!
DO j = 1,n
DO i = 1,m
ii = i+ (j-1)*m
plota(ii) = hterain(i,j)
plotu(ii) = u(i,j)
plotv(ii) = v(i,j)
plotx(ii) = x(i,j)
ploty(ii) = y(i,j)
END DO
END DO
mm = m
nn = n
DO jj = ypbgn,ypend
DO ii = xpbgn, xpend
source = (ii+(jj-1)*nproc_x-1)
IF (source == 0) GOTO 602
CALL inctag
IF (myproc == source ) THEN
itags = gentag + 4
CALL mpsendi
(m,destination,itags,ierr)
itags = gentag + 5
CALL mpsendi
(n,destination,itags,ierr)
itags = gentag
CALL mpsendr
(hterain,m*n,destination,itags,ierr)
itags = gentag + 3
CALL mpsendr
(u,m*n,destination,itags,ierr)
itags = gentag + 4
CALL mpsendr
(v,m*n,destination,itags,ierr)
itags = gentag + 1
CALL mpsendr
(x,m*n,destination,itags,ierr)
itags = gentag + 2
CALL mpsendr
(y,m*n,destination,itags,ierr)
END IF
plota = 0.0
plotu = 0.0
plotv = 0.0
plotx = 0.0
ploty = 0.0
mm = 0
nn = 0
IF (myproc == 0) THEN
itagr = gentag + 4
CALL mprecvi
(mm,source,itagr,ierr)
itagr = gentag + 5
CALL mprecvi
(nn,source,itagr,ierr)
itagr = gentag
CALL mprecvr
(plota,mm*nn,source,itagr,ierr)
itagr = gentag + 3
CALL mprecvr
(plotu,mm*nn,source,itagr,ierr)
itagr = gentag + 4
CALL mprecvr
(plotv,mm*nn,source,itagr,ierr)
itagr = gentag + 1
CALL mprecvr
(plotx,mm*nn,source,itagr,ierr)
itagr = gentag+2
CALL mprecvr
(ploty,mm*nn,source,itagr,ierr)
END IF
602 CONTINUE
IF (myproc == 0) THEN
!-----------------------------------------------------------------------
!
! Plot terrain profile in vertical slices
!
!-----------------------------------------------------------------------
IF(slicopt == 2 .OR. slicopt == 3 .OR.slicopt == 5) THEN
CALL xcolor(trcolor)
CALL xthick(2)
CALL xpenup( plotx(1), ploty(1)-0.5*(ploty(1+mm)-ploty(1)) )
DO i=2,mm
CALL xpendn(plotx(i), ploty(i)-0.5*(ploty(i+mm)-ploty(i)) )
END DO
CALL xthick(1)
END IF
!
!-----------------------------------------------------------------------
!
! Overlay terrain contour if required in x-y level
! or Plot terrain outline in this slice zlevel .
!
!-----------------------------------------------------------------------
!
IF(timeovr == 0) CALL plttrn
(plota,plotx,ploty,mm,nn,slicopt, &
iwrk,xwk,ywk)
CALL xcolor(lbcolor)
CALL xwindw(xl, xr, yb, yt)
!
!-----------------------------------------------------------------------
!
! Plot station labels
!
!-----------------------------------------------------------------------
!
CALL xcolor(lbcolor)
IF(ovrstaopt == 1 .AND. staset == 1 .AND. &
(ovrstam == 1 .OR. ovrstan == 1 .OR. ovrstav == 1) .AND. &
(slicopt == 1 .OR. slicopt == 4 .OR. slicopt == 6 .OR. &
slicopt == 7 .OR. slicopt == 8 ) .AND. timeovr == 0 ) THEN
CALL xchsiz(0.025*ys * lblmag)
CALL pltsta
(plotu,plotv,plotx,ploty,mm,nn,0,slicopt)
!staset=0
END IF
IF (ovrstaopt == 1 .AND. wrtstax == 1 .AND. timeovr == 0 .AND. &
(slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5) ) THEN
CALL xchsiz(0.025*ys * lblmag)
flag=1
CALL pltsta
(plotu,plotv,plotx,ploty,mm,nn,flag,slicopt)
END IF
CALL xwdwof
END IF ! myproc == 0
CALL mpbarrier
! sync the processors
END DO
END DO
IF(myproc == 0) THEN
!-----------------------------------------------------------------------
!
! Plot observations
!
!-----------------------------------------------------------------------
!
IF(ovrobs == 1 .AND. obsset == 1.AND. (slicopt == 1.OR.slicopt == 4.OR. &
slicopt == 6.OR.slicopt == 7.OR.slicopt == 8)) THEN
CALL pltobs
(3)
obsset=0
END IF
!-----------------------------------------------------------------------
!
! Plot additional text below the figure
!
!-----------------------------------------------------------------------
CALL label2d
(char2)
END IF ! myproc == 0
cpu2 = f_cputime
()
second2 = f_walltime
()
! write(6,*) '!!!! total cpu time for one VTR2D :', &
! cpu2-cpu1,' PLOT:',varname
RETURN
END SUBROUTINE vtr2d
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE VTRUNT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE vtrunt( vtunt0 ) 6
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set the wind vector unit for wind field to be plotted by VTR2D.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! 6/08/92 Added full documentation (K. Brewster)
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! vtunt0 Unit vector
! If VTUNT0 = 0.0, the unit is internally determined.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
REAL :: vtunt0
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
REAL :: ctinc,ctmin,ctmax,vtunt ! contour interval and vector unit
COMMON /incunt/ ctinc,ctmin,ctmax,vtunt
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
vtunt = vtunt0
RETURN
END SUBROUTINE vtrunt
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE STRM3D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE strm3d(u,v,w, x,y,z, xw,xe,dx, ys,yn,dy, zb,zt,dz, & 2,43
nx,ibgn,iend,ist, ny,jbgn,jend,jst, nz,kbgn,kend,kst, &
kslice, jslice, islice, time, runname,factor,slicopt, &
n,xp,yp,zp,u1,v1,u2,v2,w2, &
tem1,tem2,tem3,tem4,tem5, &
tem6,hterain)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Plot a streamline field in 2-d slices
!
! AUTHOR: Ming Xue
! 1/16/1992
!
! MODIFICATION HISTORY:
!
! 3/25/96 (K. Brewster)
! Added variables isize,jsize,ksize
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! u 3-dimensional array of u wind components (m/s)
! v 3-dimensional array of v wind components (m/s)
! w 3-dimensional array of w wind components (m/s)
!
! 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 physcal space (m)
!
! xw value of x for first i grid point to plot
! xe value of x for last i grid point to plot
! ys value of y for first j grid point to plot
! yn value of y for last j grid point to plot
! zb value of z for first k grid point to plot
! zt value of z for last k grid point to plot
!
! nx first dimension of b
! ibgn index of first i grid point to plot
! iend index of last i grid point to plot
!
! ny second dimension of b
! jbgn index of first j grid point to plot
! jend index of last j grid point to plot
!
! nz third dimension of b
! kbgn index of first k grid point to plot
! kend index of last k grid point to plot
!
! ist step size in x direction
! jst step size in y direction
! kst step size in z direction
!
! time time of data in seconds
!
! kslice k index of plane for slicopt=1 x-y slice
! jslice j index of plane for slicopt=2 x-z slice
! islice i index of plane for slicopt=1 y-z slice
!
! runname character string decribing run
!
! factor scaling factor for winds
! V*factor wind vectors are plotted
!
! slicopt slice orientation indicator
! = 1, x-y slice of at k=kslice is plotted.
! = 2, x-z slice of at j=jslice is plotted.
! = 3, y-z slice of at i=islice is plotted.
! = 4, horizontal slice at z index islice is plotted.
! = 5, xy-z cross section of wind islice is plotted.
! = 6, data field on constant p-level is plotted.
! = 0, all of the three slices above are plotted.
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
! tem5 Temporary work array.
! tem6 Temporary work array.
!
! (These arrays are defined and used locally (i.e. inside this
! subroutine), they may also be passed into routines called by
! this one. Exiting the call to this subroutine, these temporary
! work arrays may be used for other purposes therefore their
! contents overwritten. Please examine the usage of work arrays
! before you alter the code.)
!
! pp01 The pressure (mb) value at the specific p-level
! ercpl reciprocal of exponent
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
INTEGER :: nx,ny,nz
INTEGER :: n
!
REAL :: u(nx,ny,nz)
REAL :: v(nx,ny,nz)
REAL :: w(nx,ny,nz)
REAL :: x(nx,ny,nz)
REAL :: y(nx,ny,nz)
REAL :: z(nx,ny,nz)
!
REAL :: u1(nx,ny),v1(nx,ny)
REAL :: u2(n,nz),v2(n,nz),w2(n,nz),zp(n,nz)
REAL :: xp(n),yp(n)
INTEGER :: kslice,jslice,islice
CHARACTER (LEN=*) :: runname
REAL :: xw,xe,dx,ys,yn,dy,zb,zt,dz
INTEGER :: ibgn,iend,ist, jbgn,jend,jst, kbgn,kend,kst
REAL :: time,factor
INTEGER :: slicopt
REAL :: x_tmp
COMMON /tmphc2/ x_tmp
!
!-----------------------------------------------------------------------
!
! Some constants
!
!-----------------------------------------------------------------------
!
REAL :: pp01, ercpl
PARAMETER (ercpl=0.3678794) ! exp(-1.0)
!
!-----------------------------------------------------------------------
!
! Work arrays: tem1,tem2,tem3 of size at least
! max( nx*ny, nx*nz, ny*nz).
!
!-----------------------------------------------------------------------
!
REAL :: tem1(*),tem2(*),tem3(*),tem4(*),tem5(*),tem6(*)
INTEGER :: nzmax
PARAMETER (nzmax = 300)
REAL :: fdata(nzmax),zdata(nzmax),fprof(nzmax),zprof(nzmax)
!
!-----------------------------------------------------------------------
!
! Common blocks for plotting control parameters
!
!-----------------------------------------------------------------------
!
REAL :: x01,y01 ! the first point of interpolation
REAL :: x02,y02 ! the second point of interpolation
REAL :: zlevel ! the given height of the slice
REAL :: sinaf,cosaf,dist,sqrtdxy
COMMON /slicev/x01,y01,x02,y02,sinaf,cosaf,dist,sqrtdxy
COMMON /sliceh/zlevel
!
!-----------------------------------------------------------------------
!
! Misc. local Variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,ij,ik,jk,length,isize,jsize,ksize
CHARACTER (LEN=6) :: timhms
CHARACTER (LEN=120) :: title
!
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
!
INTEGER :: trnplt ! flag to plot terain (1 or 0)
REAL :: hterain(nx,ny) ! The height of the terrain.
INTEGER :: ovrtrn ! overlay terrain option (0/1)
REAL :: trninc,trnmin, trnmax ! terrain interval minimum, maximum
REAL :: ztmin,ztmax
COMMON /trnpar/ trnplt,ovrtrn,trninc,trnmin, trnmax,ztmin,ztmax
!
INTEGER :: xfont ! the font of character
INTEGER :: haxisu, vaxisu
INTEGER :: lbaxis
INTEGER :: tickopt
INTEGER :: axlbfmt
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
CHARACTER (LEN=4) :: stem2
CHARACTER (LEN=1) :: stem1
INTEGER :: smooth
COMMON /smoothopt/smooth
INTEGER :: wrtflag
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
CHARACTER (LEN=25) :: timestring
COMMON /timelev/wrtflag, timelab, levlab, timestring
REAL :: tmpx, tmpy
CHARACTER (LEN=20) :: distc
REAL :: x101, y101, x102,y102
COMMON /slicev1/x101, y101, x102,y102
INTEGER :: xpbgn,xpend,ypbgn,ypend
COMMON /processors/ xpbgn, xpend, ypbgn, ypend
INTEGER :: idsize, jdsize, mnsize
INTEGER :: tinds, tind1,tind2,tind3
!----------------------------------------------------------------------
!
! Include files
!
!---------------------------------------------------------------------
INCLUDE 'mp.inc'
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF (mp_opt >0) THEN
WRITE(6,'(2a/,a/)') 'Sorry, since subroutine strmln is an ', &
'internal procedure of NCARG package. It is not MPI''ed.', &
'No streamline field is plotted.'
RETURN
END IF
isize=(iend-ibgn)+1
jsize=(jend-jbgn)+1
ksize=(kend-kbgn)+1
mnsize = isize*jsize
mnsize = MAX(mnsize, isize*ksize, jsize*ksize)
tind1 = 1 ! reuse a 3d temporary array 'tem5' as several 2D
tind2 = tind1+mnsize ! arrays inside vtr2d
tind3 = tind2+mnsize
!
!-----------------------------------------------------------------------
!
! setup time label
!
!-----------------------------------------------------------------------
!
CALL cvttim
( time, timhms)
IF( timhms(1:1) == '0' ) timhms(1:1)=' '
WRITE(timelab,'(''T='',F8.1,A)') time, &
' s ('//timhms(1:2)//':'//timhms(3:4)//':'//timhms(5:6)//')'
CALL get_time_string
( time, timestring)
!
!-----------------------------------------------------------------------
!
! Set up terrain, if needed.
!
!-----------------------------------------------------------------------
!
IF(trnplt == 1 .OR.trnplt == 2 .OR. ovrtrn == 1) THEN
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem6(ij)=hterain(i,j)
END DO
END DO
END IF
IF ( slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5) THEN
CALL cal_dist
(haxisu,dx,dy,x01,y01,x02,y02,slicopt, &
tmpx,tmpy,distc)
END IF
!
!-----------------------------------------------------------------------
!
! slicopt=1 Plot u-v field
!
!-----------------------------------------------------------------------
!
IF( slicopt == 1 .OR. slicopt == 0 ) THEN
k = kslice
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
tem2(ij) = -9999.0
IF(u(i,j,k) /= -9999.0) tem1(ij)=u(i,j,k)*factor
IF(v(i,j,k) /= -9999.0) tem2(ij)=v(i,j,k)*factor
tem3(ij)=x(i,j,k)
tem5(ij)=y(i,j,k)
END DO
END DO
IF (k /= 2) THEN
WRITE(title,'(''U-V STREAMLINE'')')
WRITE(levlab,'(''X-Y CROSS SECTION THROUGH K='',I3)')k
ELSE
WRITE(title,'(''U-V STREAMLINE'')')
WRITE(levlab,'(''X-Y CROSS SECTION THROUGH K=2 (SURFACE)'')')
END IF
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem4)
CALL smooth9pmv
(tem2,isize,jsize,1,isize,1,jsize,tem4)
END DO
CALL strm2d
(tem1,tem2, xw,xe,ys,yn, dx, dy, &
isize,jsize, &
title(1:length),runname, tem3,tem5, &
tem6,slicopt,tem4(tind1),tem4(tind2),tem4(tind3))
!
!-----------------------------------------------------------------------
!
! slicopt=2 Plot u-w streamline
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 2 .OR. slicopt == 0 ) THEN
x_tmp = y(1,jslice,1)
j = jslice
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
tem2(ik) = -9999.0
IF(u(i,j,k) /= -9999.0) tem1(ik)=u(i,j,k)*factor
IF(w(i,j,k) /= -9999.0) tem2(ik)=w(i,j,k)*factor
tem4(ik)=z(i,j,k)
tem3(ik)=x(i,j,k)
END DO
END DO
IF( nzmax < ksize) THEN
WRITE(6,'(1x,a)') &
'nzmax given in STRM3D too small. Job stopped.'
STOP
END IF
DO k=1,ksize
zprof(k)= zb+(k-1)*(zt-zb)/(kend-kbgn)
END DO
CALL unigrid
(isize,ksize,tem1,tem4, &
fdata,zdata,fprof,zprof)
CALL unigrid
(isize,ksize,tem2,tem4, &
fdata,zdata,fprof,zprof)
WRITE(title,'(''U-W STREAMLINE '')')
j = j + (ypbgn-1)*(ny-3)
dist = (j-1)*tmpy
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''X-Z CROSS SECTION THROUGH J='',I3, &
& '' (y = '',f8.1,a)')j,dist,distc(1:length)
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,ksize,1,isize,1,ksize,tem4)
CALL smooth9pmv
(tem2,isize,ksize,1,isize,1,ksize,tem4)
END DO
CALL strm2d
(tem1,tem2, xw,xe,zb,zt, dx, dz, &
isize,ksize, &
title(1:length),runname, tem3 ,tem4, &
tem6,slicopt,tem4(tind1),tem4(tind2),tem4(tind3))
!
!-----------------------------------------------------------------------
!
! slicopt=3 Plot v-w field
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 3 .OR. slicopt == 0 ) THEN
! x_tmp = y(1,jslice,1)
x_tmp = x(islice,1,1)
i = islice
DO k=kbgn,kend
DO j=jbgn,jend
jk = j-jbgn+1 + (k-kbgn)*jsize
tem1(jk) = -9999.0
tem2(jk) = -9999.0
IF(v(i,j,k) /= -9999.0) tem1(jk)=v(i,j,k)*factor
IF(w(i,j,k) /= -9999.0) tem2(jk)=w(i,j,k)*factor
tem4(jk)=z(i,j,k)
tem5(jk)=y(i,j,k)
END DO
END DO
IF( nzmax < ksize) THEN
WRITE(6,'(1x,a)') &
'nzmax given in STRM3D too small. Job stopped.'
STOP
END IF
DO k=1,ksize
zprof(k)= zb+(k-1)*(zt-zb)/(kend-kbgn)
END DO
CALL unigrid
(jsize,ksize,tem1,tem4, &
fdata,zdata,fprof,zprof)
CALL unigrid
(jsize,ksize,tem2,tem4, &
fdata,zdata,fprof,zprof)
i = i + (xpbgn-1)*(nx-3)
dist = (i-1)*tmpx
length=LEN_TRIM(distc)
CALL strmin
( distc, length)
WRITE(levlab,'(''Y-Z CROSS SECTION THROUGH I='',I3, &
& '' ( x='',f8.1,a )')i,dist, distc(1:length)
WRITE(title,'(''V-W STREAMLINE'')')
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,jsize,ksize,1,jsize,1,ksize,tem4)
CALL smooth9pmv
(tem2,jsize,ksize,1,jsize,1,ksize,tem4)
END DO
CALL strm2d
(tem1,tem2, ys,yn,zb,zt, dy, dz, &
jsize,ksize, &
title(1:length),runname, tem5 ,tem4, &
tem6,slicopt,tem4(tind1),tem4(tind2),tem4(tind3))
!
!-----------------------------------------------------------------------
!
! slicopt=4 Plot u-v streamlines on constant z levels
! slicopt=6 Plot u-v streamlines on constant pressure levels
! slicopt=7 Plot u-v streamlines on constant PT levels
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 4.OR.slicopt == 6.OR.slicopt == 7 ) THEN
! CALL hintrp(nx,ny,nz,u,z,zlevel,u1)
! CALL hintrp(nx,ny,nz,v,z,zlevel,v1)
CALL hintrp1
(nx,ny,nz,kbgn,kend,u,z,zlevel,u1)
CALL hintrp1
(nx,ny,nz,kbgn,kend,v,z,zlevel,v1)
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
tem2(ij) = -9999.0
IF(u1(i,j) /= -9999.0) tem1(ij)=u1(i,j)*factor
IF(v1(i,j) /= -9999.0) tem2(ij)=v1(i,j)*factor
tem3(ij)=x(i,j,2)
tem5(ij)=y(i,j,2)
END DO
END DO
IF( slicopt == 4) THEN
WRITE(levlab,'(''Z='',F7.3,A,'' MSL'')')zlevel,' KM'
ELSE IF( slicopt == 6) THEN
pp01=0.01*ercpl**zlevel
WRITE(levlab,'(''P='',F7.2,A)') pp01, ' MB'
ELSE
WRITE(levlab,'(''THETA='',F5.1,A)') zlevel, ' (K)'
END IF
WRITE(title,'(''U-V STREAMLINE'')')
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem4)
CALL smooth9pmv
(tem2,isize,jsize,1,isize,1,jsize,tem4)
END DO
CALL strm2d
(tem1,tem2, xw,xe,ys,yn, dx, dy, &
isize,jsize, &
title(1:length),runname, tem3 ,tem5, &
tem6,slicopt,tem4(tind1),tem4(tind2),tem4(tind3))
!
!-----------------------------------------------------------------------
!
! slicopt=5 Plot V-w field
!
!-----------------------------------------------------------------------
!
ELSE IF( slicopt == 5 ) THEN
CALL sectvrt
(nx,ny,nz,u,x,y,z,dx,dy,u2,zp,n,xp,yp)
CALL sectvrt
(nx,ny,nz,v,x,y,z,dx,dy,v2,zp,n,xp,yp)
CALL sectvrt
(nx,ny,nz,w,x,y,z,dx,dy,w2,zp,n,xp,yp)
DO k=kbgn,kend
DO i=ibgn,iend
ik = i-ibgn+1 + (k-kbgn)*isize
tem1(ik) = -9999.0
tem2(ik) = -9999.0
IF(u2(i,k) /= -9999.0 .AND. v2(i,k) /= -9999.0) &
tem1(ik)=(u2(i,k)*cosaf+v2(i,k)*sinaf)*factor
IF(w2(i,k) /= -9999.0) tem2(ik)=w2(i,k)*factor
tem3(ik)=xw+(i-ibgn)*sqrtdxy
tem4(ik)=zp(i,k)
END DO
END DO
IF( nzmax < ksize) THEN
WRITE(6,'(1x,a)') 'nzmax given in STRM3D too small. Job stopped.'
STOP
END IF
DO k=1,ksize
zprof(k)= zb+(k-1)*(zt-zb)/(kend-kbgn)
END DO
CALL unigrid
(isize,ksize,tem1,tem4, &
fdata,zdata,fprof,zprof)
CALL unigrid
(isize,ksize,tem2,tem4, &
fdata,zdata,fprof,zprof)
IF(axlbfmt == -1 .OR. axlbfmt == 1 ) THEN
length=LEN_TRIM(distc)
CALL strmin
(distc,length)
WRITE(title,'(''V-W STREAMLINE'')')
WRITE(levlab, &
'(''VERT CROSS SECTION THROUGH '',4(A,F8.1),A,A)') &
'(',x101,',',y101,') (',x102,',',y102,')',distc(1:length)
ELSE IF(axlbfmt == 0 ) THEN
length=LEN_TRIM(distc)
CALL strmin
(distc,length)
WRITE(title,'(''V-W STREAMLINE'')')
WRITE(levlab, &
'(''VERT CROSS SECTION THROUGH '',4(A,I5),A,A)') &
'(',NINT(x101),',',NINT(y101),') (',NINT(x102),',',NINT(y102),&
')',distc(1:length)
ELSE
! WRITE(stem1,'(i1)')axlbfmt
! WRITE(stem2,'(a3,a1)')'f8.',stem1
WRITE(title,'(''V-W STREAMLINE'')')
WRITE(levlab, &
'(''VERT CROSS SECTION THROUGH '',4(A,f8.2),A,A)') &
'(',x101,',',y101,') (',x102,',',y102,')',distc(1:length)
END IF
length = 120
CALL strlnth
( title, length )
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,ksize,1,isize,1,ksize,tem4)
CALL smooth9pmv
(tem2,isize,ksize,1,isize,1,ksize,tem4)
END DO
CALL strm2d
(tem1,tem2, xw,xe,zb,zt, sqrtdxy, dz, &
isize,ksize, &
title(1:length),runname, tem3,tem4, &
tem6,slicopt,tem4(tind1),tem4(tind2),tem4(tind3))
END IF
RETURN
END SUBROUTINE strm3d
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE STRM2D ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE strm2d(u,v,xl,xr,yb,yt,dx,dy,m,n,char1,char2, x,y, & 5,7
hterain,slicopt,iwrk,xwk,ywk)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Plot streamlines of a 2-d wind (u1,u2) field using ncargraphic
! subroutine strmln
!
! INPUT:
! u m by n 2-dimensional array of u (left-to-right)
! wind components (m/s)
! v m by n 2-dimensional array of v (down-to-up)
! wind components (m/s)
!
! xl,xr The left and right bound of the physical domain.
! yb,yt Bottom and top bound of the physical domain.
! dx,dy Grid interval in x and y direction (km)
!
! m First dimension of vector component array
! n Second dimension of vector component array
!
! char1 First character string to plot (title)
! char2 Second character string to plot (runname)
!
! x x coordinate of grid points in plot space (over on page)
! y y coordinate of grid points in plot space (up on page)
!
! hterain the height of terrain
! slicopt slice orientation indicator
! slicopt = 1, x-y slice of u,v at z index kslice is plotted.
! slicopt = 2, x-z slice of u,w at y index jslice is plotted.
! slicopt = 3, y-z slice of v,w at x index islice is plotted.
! slicopt = 4, x-y slice of u,v at z index islice is plotted.
! slicopt = 5, xy-z cross section of wind islice is plotted.
! slicopt = 6, data field on constant p-level is plotted.
! slicopt = 0, all of the three slices above are plotted.
!
! WORK ARRAY
! iwrk A work array of size at least m*n*2
! xwk A work array of size at least m*n*2
! ywk
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'arpsplt.inc'
INTEGER :: m,n
INTEGER :: i
REAL :: u(m,n)
REAL :: v(m,n)
REAL :: x(m,n)
REAL :: y(m,n)
REAL :: xl,xr,yb,yt,dx,dy
INTEGER, INTENT(INOUT) :: iwrk(m,n)
REAL, INTENT(INOUT) :: xwk(m,n), ywk(m,n)
CHARACTER (LEN=*) :: char2
CHARACTER (LEN=*) :: char1
INTEGER :: ierror
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: layover
COMMON /laypar/ layover
REAL :: ctinc,ctmin,ctmax,vtunt !contour interval and vector unit
COMMON /incunt/ ctinc,ctmin,ctmax,vtunt
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
INTEGER :: flag
INTEGER :: xfont ! the font of character
INTEGER :: haxisu, vaxisu
INTEGER :: lbaxis
INTEGER :: tickopt
INTEGER :: axlbfmt
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
INTEGER :: ovrstaopt
INTEGER :: ovrstam,staset,ovrstan,ovrstav,stacol,markprio,wrtstax
INTEGER :: nsta_typ,sta_typ(10),sta_marktyp(10),sta_markcol(10)
REAL :: sta_marksz(10),wrtstad
CHARACTER (LEN=132) :: stalofl
COMMON /sta_par/ ovrstaopt,ovrstam,staset,ovrstan,ovrstav,stacol, &
markprio,nsta_typ,sta_typ,sta_marktyp, &
sta_markcol,sta_marksz,stalofl,wrtstax,wrtstad
REAL :: yxratio !the scaling factor the y/x ratio.
COMMON /yratio/ yxratio
INTEGER :: col_table,pcolbar
COMMON /coltable/col_table,pcolbar
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: nopic,nhpic,nvpic,ifont
REAL :: pl,pr,pb,pt ! plot space left, right, bottom, top coordinate
REAL :: px,py ! plot space left-right length and up-down height
REAL :: xs,ys ! real space left-right length and up-down height
REAL :: pxc,pyc ! plot space left-right center and
! up-down center
REAL :: xlimit,ylimit
REAL :: rotang
REAL :: xp1,xp2,yp1,yp2
REAL :: xd1,xd2,yd1,yd2,xpos1,xpos2,ypos1,ypos2
REAL :: zlevel
COMMON/sliceh/zlevel
REAL :: hterain(m,n) ! The height of the terrain.
INTEGER :: slicopt
INTEGER :: timeovr
COMMON /timover/ timeovr
REAL :: lblmag, ctrlbsiz, axlbsiz
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
INTEGER :: len1
INTEGER :: wrtflag
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
CHARACTER (LEN=25) :: timestring
COMMON /timelev/wrtflag, timelab, levlab, timestring
REAL :: x101, y101, x102,y102
COMMON /slicev1/x101, y101, x102,y102
INTEGER :: xnwpic_called
COMMON /callnwpic/xnwpic_called
REAL :: ytmp !! local temporary variable
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
WRITE(6,'(/1x,a,a)') ' Plotting ',char1
IF( layover == 0 .OR. xnwpic_called == 0) THEN
CALL xnwpic
xnwpic_called=1
timeovr=0
wrtflag = 0
ELSE
timeovr=1
wrtflag = wrtflag + 1
END IF
!
!-----------------------------------------------------------------------
!
! Get plotting space variables
!
!-----------------------------------------------------------------------
!
CALL xqpspc( pl, pr, pb, pt)
px = pr - pl
py = pt - pb
xs = xr-xl
ys = yt-yb
pxc = (pr+pl)/2
pyc = (pb+pt)/2
!
!-----------------------------------------------------------------------
!
! Let the longest lenth determine size scaling of plot
!
!-----------------------------------------------------------------------
!
IF( py/px >= ys*yxratio/xs ) THEN
py = ys*yxratio/xs*px
CALL xpspac(pl, pr, pyc-py/2, pyc+py/2 )
ELSE
px = xs/(ys*yxratio)*py
CALL xpspac(pxc-px/2, pxc+px/2, pb, pt)
END IF
!
!-----------------------------------------------------------------------
!
! Set the real distance to plot distance scaling
!
!-----------------------------------------------------------------------
!
CALL xmap( xl, xr, yb,yt)
!
!-----------------------------------------------------------------------
!
! Plot map, boxes and polygons.
!
!-----------------------------------------------------------------------
!
CALL xcolor(lbcolor)
CALL pltextra
(slicopt, 1 )
xpos1 = xl
xpos2 = xr
ypos1 = yb
ypos2 = yt
CALL xtrans(xpos1,ypos1)
CALL xtrans(xpos2,ypos2)
CALL xzx2ncar(xpos1,ypos1)
CALL xzx2ncar(xpos2,ypos2)
!
IF(slicopt == 2 .OR. slicopt == 3 .OR.slicopt == 5) THEN
CALL xcolor(trcolor)
CALL xthick(3)
CALL xpenup( x(1,1), y(1,1)-0.5*(y(1,2)-y(1,1)) )
DO i=2,m
CALL xpendn( x(i,1), y(i,1)-0.5*(y(i,2)-y(i,1)) )
END DO
CALL xthick(1)
END IF
!
!-----------------------------------------------------------------------
!
! Overlay terrain contour if required in x-y level
! or Plot terrain outline in this slice zlevel .
!
!-----------------------------------------------------------------------
!
IF( timeovr == 0)CALL plttrn
(hterain,x,y,m,n,slicopt,iwrk,xwk,ywk)
CALL xcolor(lbcolor)
!
!-----------------------------------------------------------------------
!
! Plot station labels
!
!-----------------------------------------------------------------------
!
IF(ovrstaopt == 1 .AND. staset == 1 .AND. &
(ovrstam == 1.OR.ovrstan == 1.OR.ovrstav == 1).AND. &
(slicopt == 1.OR.slicopt == 4.OR.slicopt == 6 &
.OR.slicopt == 7.OR.slicopt == 8) &
.AND.timeovr == 0 ) THEN
CALL xchsiz(0.025*ys * lblmag)
CALL pltsta
(u,v,x,y,m,n,0,slicopt)
! staset=0
END IF
!
!-----------------------------------------------------------------------
!
! Plot observations
!
!-----------------------------------------------------------------------
!
IF( ovrstaopt == 1 .AND. wrtstax == 1 .AND. timeovr == 0 &
.AND.(slicopt == 2.OR.slicopt == 3.OR. slicopt == 5) ) THEN
CALL xchsiz(0.025*ys * lblmag)
flag=1
CALL pltsta
(u,v,x,y,m,n,flag,slicopt)
END IF
!
!-----------------------------------------------------------------------
!
! Plot streamlines
!
!-----------------------------------------------------------------------
!
CALL xcolor(lbcolor)
!
CALL xqset(xp1,xp2,yp1,yp2, xd1,xd2,yd1,yd2)
CALL set(xpos1,xpos2,ypos1,ypos2, 1.0, FLOAT(m), 1.0, FLOAT(n),1)
CALL xcolor(icolor)
CALL strmln(u,v,y ,m,m,n, 1, ierror)
CALL set(xp1,xp2,yp1,yp2, xd1,xd2,yd1,yd2, 1)
!
!-----------------------------------------------------------------------
!
! Plot axes with tick marks
!
!-----------------------------------------------------------------------
!
CALL pltaxes
(slicopt,dx,dy)
!-----------------------------------------------------------------------
!
! Plot labels
!
!-----------------------------------------------------------------------
CALL xcolor(lbcolor)
CALL xqnpic(nopic)
CALL xqspac(nhpic, nvpic, rotang, xlimit, ylimit)
! write time and level
CALL xchsiz( 0.030*ys * lblmag )
IF ( layover < 1 ) THEN
len1=LEN_TRIM(timelab)
CALL strmin
(timelab,len1)
CALL xcharl(xl,yt+0.07*ys, timestring(1:25))
CALL xcharr(xr+0.05*(xr-xl),yt+0.07*ys, timelab(1:len1))
len1=LEN_TRIM(levlab)
CALL strmin
(levlab,len1)
CALL xcharc(xl+xs*0.5,yt+0.015*ys, levlab(1:len1))
END IF
! write variable label
CALL xcolor(icolor)
IF(lbaxis == 1) THEN
IF(wrtstax == 0) THEN
ytmp = 0.08
ELSE
ytmp = 0.14
END IF
ELSE
ytmp =0.12
END IF
CALL xchsiz( 0.025*ys * lblmag )
CALL xcharl(xl-0.20*(xr-xl), yb-(yt-yb)*(ytmp+layover*0.030), &
char1)
CALL xcolor(lbcolor)
IF (timeovr == 0) THEN
IF(nopic == nhpic*(nvpic-1)+1 ) THEN
ytmp =0.25
IF(layover < 1) CALL xcharl(xl,yb-(ytmp+layover*0.03)*(yt-yb), char2 )
CALL xqcfnt(ifont)
CALL xcfont(xfont)
ytmp = 0.20
IF(layover < 1) CALL xcharl(xl,yb-(0.20+layover*0.03)*(yt-yb), &
'CAPS/ARPS ' )
! : 'Project Hub-CAPS Experimental ' ) !Hub-CAPS+
CALL xcfont(ifont)
END IF
timeovr=1
END IF
RETURN
END SUBROUTINE strm2d
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CTRSFC ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ctrsfc(a,x,y,x1,x2,dx,y1,y2,dy, & 44,8
nx,ibgn,iend, ny,jbgn,jend, &
label,time, runname, factor,tem1,tem2,tem3, &
tem4,tem5,hterain,slicopt,pltopt)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! To plot a contour map for a 2-d surface array.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 4/20/1994
!
! MODIFICATION HISTORY:
!
! 9/27/95 (Yuhe Liu)
! Fixed a bug in call of smth. Added the temporary array tem5 to
! the argument list.
!
! 3/25/96 (Keith Brewster)
! Added variables isize,jsize and replaced smth with smooth9p
!
!-----------------------------------------------------------------------
!
! INPUT :
!
! a 2-d surface array.
!
! x x coordinate of grid points in physical/comp. space (m)
! y y coordinate of grid points in physical/comp. space (m)
!
! x1 value of x for first i grid point to plot
! x2 value of x for last i grid point to plot
! dx
! y1 value of y for first j grid point to plot
! y2 value of y for last j grid point to plot
! dy
!
! nx first dimension of a
! ibgn index of first i grid point to plot
! iend index of last i grid point to plot
!
! ny second dimension of a
! jbgn index of first j grid point to plot
! jend index of last j grid point to plot
!
! label character string describing the contents of a
!
! time time of data in seconds
!
! runname character string decribing run
!
! factor scaling factor for data
! contours are labelled a*factor
! slicopt slice orientation indicator
! slicopt = 1, x-y slice of u,v at z index kslice is plotted.
! slicopt = 2, x-z slice of u,w at y index jslice is plotted.
! slicopt = 3, y-z slice of v,w at x index islice is plotted.
! slicopt = 4, x-y slice of u,v at z index islice is plotted.
! slicopt = 5, xy-z cross section of wind islice is plotted.
! slicopt = 6, data field on constant p-level is plotted.
! slicopt = 0, all of the three slices above are plotted.
! plot variable plot option (0/1/2/3)
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
! tem5 Temporary work array.
!
!
! hterain The height of the terrain.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny
REAL :: a(nx,ny)
REAL :: x(nx,ny)
REAL :: y(nx,ny)
REAL :: x1,x2,dx,y1,y2,dy
INTEGER :: ibgn,iend,jbgn,jend,length
CHARACTER (LEN=6) :: timhms
CHARACTER (LEN=*) :: label
CHARACTER (LEN=*) :: runname
REAL :: time
REAL :: factor
REAL :: tem1(*)
REAL :: tem2(*)
REAL :: tem3(*)
REAL :: tem4(*)
REAL :: tem5(*)
REAL :: hterain(nx,ny)
INTEGER :: slicopt
INTEGER :: pltopt ! variable plot option (0/1/2/3)
INTEGER :: ovrtrn,trnplt ! overlay terrain option (0/1)
REAL :: trninc,trnmin, trnmax ! terrain interval minimum, maximum
REAL :: ztmin,ztmax
COMMON /trnpar/ trnplt,ovrtrn,trninc,trnmin, trnmax,ztmin,ztmax
INTEGER :: smooth
COMMON /smoothopt/smooth
INTEGER :: wrtflag
CHARACTER (LEN=120) :: label_copy
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
CHARACTER (LEN=25) :: timestring
COMMON /timelev/wrtflag, timelab, levlab, timestring
INTEGER :: xpbgn,xpend,ypbgn,ypend
COMMON /processors/ xpbgn, xpend, ypbgn, ypend
!----------------------------------------------------------------------
!
! Include files
!
!---------------------------------------------------------------------
INCLUDE 'mp.inc'
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,ij,isize,jsize,llabel
CHARACTER (LEN=120) :: title
INTEGER :: idsize, jdsize, mnsize
INTEGER :: tinds, tind1,tind2,tind3,tind4,tind5,tind6
! temporary arrays index, assume size of tem5 > 6*nx*ny
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF (slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5 .OR. slicopt >9) RETURN
isize=(iend-ibgn)+1
jsize=(jend-jbgn)+1
idsize = isize ! global maximum isize
jdsize = jsize
CALL mpmaxi
(idsize)
CALL mpmaxi
(jdsize)
mnsize = idsize*jdsize
tind1 = 1 ! reuse a 3d temporary array 'tem5' as several 2D
tind2 = tind1+mnsize ! arrays inside ctr2d
tind3 = tind2+mnsize
tind4 = tind3+mnsize
tind5 = tind4+mnsize
tind6 = tind5+mnsize
! tinds = SIZE(tem5)
! IF (tinds < 6*mnsize) THEN
! WRITE(6,*) 'ERROR: temporary array tem5 is too small.'
! WRITE(6,*) ' Inside ctrsfc: isize = ',isize,' jsize = ',jsize, &
! ' size(tem5) = ',tinds
! CALL arpsstop('Temporary array too small inside ctrsfc.',1)
! END IF
label_copy = label
llabel = 120
CALL xstrlnth(label_copy, llabel)
IF(myproc == 0)CALL xpscmnt('Start plotting '//label_copy(1:llabel))
!
!-----------------------------------------------------------------------
!
! Set up terrain, if needed.
!
!-----------------------------------------------------------------------
!
IF(ovrtrn == 1) THEN
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem4(ij)=hterain(i,j)
END DO
END DO
END IF
CALL cvttim
( time, timhms )
IF( timhms(1:1) == '0' ) timhms(1:1)=' '
WRITE(timelab,'(''T='',F8.1,A)') time, &
' s ('//timhms(1:2)//':'//timhms(3:4)//':'//timhms(5:6)//')'
CALL get_time_string
( time, timestring)
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
IF(a(i,j) /= -9999.0) tem1(ij)=a(i,j)*factor
tem2(ij)=x(i,j)
tem3(ij)=y(i,j)
END DO
END DO
levlab=' '
WRITE(title,'(a)') label
length = 120
CALL strlnth
( title, length)
CALL strmin
( title, length)
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem5)
END DO
CALL ctr2d
(tem1,tem2,tem3, x1,x2,dx, y1,y2,dy, &
isize,jsize,title(1:length),runname, &
tem4,slicopt,pltopt,mnsize, &
tem5(tind1),tem5(tind2),tem5(tind3), &
tem5(tind4),tem5(tind5),tem5(tind6))
IF(myproc == 0) CALL xpscmnt('End plotting '//label_copy(1:llabel))
RETURN
END SUBROUTINE ctrsfc
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE OVERLAY ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE overlay (layovr) 14
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set the layover counter parameter in the laypar common block
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! 6/08/92 Added full documentation (K. Brewster)
!
! 8/08/93 (MX)
! Automatically set the overlay parameter when input is not zero.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! layovr The 'overlay' parameter.
! If layover .ne. 0, the following 2-d contour plot will be
! superimposed on the previous plot.
! layover =1, 2, ... indicating this is the
! layover'th (1st or 2nd ...) plot to be overlayed
! on the previous one.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
INTEGER :: layovr
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: layover, first_frame
COMMON /laypar/ layover
COMMON /frstfrm/ first_frame
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF( first_frame == 1 .OR. layovr == 0 ) THEN
layover = 0
ELSE
layover = layover + 1
END IF
first_frame = 0
RETURN
END SUBROUTINE overlay
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE STYXRT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE styxrt( yxrt )
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set the scaling factor of the y/x ratio of the plot.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! 6/08/92 Added full documentation (K. Brewster)
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! yxrt Ratio of height to length of plot space
! Default is set in the main program to 1.0
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
REAL :: yxrt
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
REAL :: yxratio
COMMON /yratio/ yxratio ! the scaling factor the y/x ratio.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
yxratio = yxrt
RETURN
END SUBROUTINE styxrt
!
!##################################################################
!##################################################################
!###### ######
!###### FUNCTION XFINC ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
REAL FUNCTION xfinc(x)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Automatically divide domain (0,x) to a number of subdomain
! with interval xfinc which is >=4 and =<16 for fold=1.0
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! sometime
!
! MODIFICATIONS:
! 6/09/92 Added full documentation (K. Brewster)
!
!-----------------------------------------------------------------------
!
! INPUT:
! x not sure
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
REAL :: x
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: ipower
REAL :: d,fold
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
ipower= INT( ALOG10(x) )
d= INT(x/(10.0**ipower))
fold=1.0
xfinc=0.1*x
IF( d >= 0.0 .AND. d < 3.0 ) THEN
xfinc=2.0*10.0**(ipower-1)
ELSE IF( d >= 3.0 .AND. d < 7.0 ) THEN
xfinc=5.0*10.0**(ipower-1)*fold
ELSE IF( d >= 7.0 .AND. d < 10. ) THEN
xfinc=1.0*10.0** ipower*fold
END IF
IF(xfinc == 0.0) xfinc=x*0.1
RETURN
END FUNCTION xfinc
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CLIPWD ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE clipwd(x1,y1,x2,y2,idispl) 1,2
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Return the portion of a line that is within a given window
! (xw1,xw2,yw1,yw2)
!
! If the given line is completely outside the window,
! idispl=0, otherwise, idispl=1.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 3/6/93
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! x1 value of x for first i grid point to plot
! x2 value of x for last i grid point to plot
! y1 value of y for first j grid point to plot
! y2 value of y for last j grid point to plot
!
! idispl line orientation indicator
! idispl = 0, the given line is completely outside the window
! idispl = 1, the given line is partly inside the window
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
REAL :: x1,x2,y1,y2
INTEGER :: idispl
!
!-----------------------------------------------------------------------
!
! Common blocks for plotting control parameters
!
!-----------------------------------------------------------------------
!
REAL :: xw1,xw2,yw1,yw2
COMMON /pltwdw/ xw1,xw2,yw1,yw2
INTEGER :: ic1(4),ic2(4)
!
!-----------------------------------------------------------------------
!
! Misc. local Variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,knt,isw
REAL :: x0,y0
REAL :: isum1,isum2,ic01,ic02,ic03,ic04
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
knt = 0
5 knt = knt+1
CALL encodwd
(x1,y1,ic1)
CALL encodwd
(x2,y2,ic2)
isum1=ic1(1)+ic1(2)+ic1(3)+ic1(4)
isum2=ic2(1)+ic2(2)+ic2(3)+ic2(4)
idispl=1
IF(isum1+isum2 == 0) GO TO 999
idispl=0
DO i=1,4
IF(ic1(i)+ic2(i) == 2) GO TO 999
END DO
!
!-----------------------------------------------------------------------
!
! Make sure (x1,y1) is outside the window
!
!-----------------------------------------------------------------------
!
isw=0
IF(isum1 == 0) THEN
ic01=ic1(1)
ic02=ic1(2)
ic03=ic1(3)
ic04=ic1(4)
DO i=1,4
ic1(i)=ic2(i)
END DO
ic2(1)=ic01
ic2(2)=ic02
ic2(3)=ic03
ic2(4)=ic04
x0=x1
y0=y1
x1=x2
y1=y2
x2=x0
y2=y0
isw=1
END IF
IF(ic1(1) == 1) THEN
y1=y1+(xw1-x1)*(y2-y1)/(x2-x1)
x1=xw1
ELSE IF(ic1(2) == 1) THEN
y1=y1+(xw2-x1)*(y2-y1)/(x2-x1)
x1=xw2
ELSE IF(ic1(3) == 1) THEN
x1=x1+(yw1-y1)*(x2-x1)/(y2-y1)
y1=yw1
ELSE IF(ic1(4) == 1) THEN
x1=x1+(yw2-y1)*(x2-x1)/(y2-y1)
y1=yw2
END IF
IF(isw == 1) THEN
x0=x1
y0=y1
x1=x2
y1=y2
x2=x0
y2=y0
END IF
idispl=1
IF(knt > 10) THEN
WRITE(6,*)'Dead loop encountered in CLIPWD, job stopped.'
STOP 991
END IF
GO TO 5
999 RETURN
END SUBROUTINE clipwd
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE ENCODWD ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE encodwd(x,y,ic) 2
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Encode a line section for window clipping purpose.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 3/6/93
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! x value of x
! y value of y
! ic
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
REAL :: x,y
INTEGER :: ic(4)
!
!-----------------------------------------------------------------------
!
! Common blocks for plotting control parameters
!
!-----------------------------------------------------------------------
!
REAL :: xw1,xw2,yw1,yw2
COMMON /pltwdw/ xw1,xw2,yw1,yw2
!
!-----------------------------------------------------------------------
!
! Misc. local Variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO i=1,4
ic(i)=0
END DO
IF(x < xw1) ic(1)=1
IF(x > xw2) ic(2)=1
IF(y < yw1) ic(3)=1
IF(y > yw2) ic(4)=1
RETURN
END SUBROUTINE encodwd
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CTRCOL ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ctrcol (icol,icol0) 9
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set the color for field to plotted by CTR2D.
!
!
!-----------------------------------------------------------------------
!
! AUTHOR: Min Zou
!
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! icol begin color index
! icol0 end color index
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: icol,icol0
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: icolor,icolor1,lbcolor,trcolor
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
icolor=icol
icolor1=icol0
RETURN
END SUBROUTINE ctrcol
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE CTRVTR ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE ctrvtr (units0,type0) 6
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set the units and type for plot wind
!
!
!-----------------------------------------------------------------------
!
! AUTHOR: Min Zou
!
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! units0 the units of wind
! type0 the type of wind
! wcolor0 the color index
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: units0,type0
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: iunits, itype
COMMON /windvtr/iunits, itype
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
iunits = units0
itype = type0
RETURN
END SUBROUTINE ctrvtr
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE VARPLT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE varplt( var ) 13
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Set the variable plot name for xconta.
!
!
!-----------------------------------------------------------------------
!
! AUTHOR: Min Zou
!
! MODIFICATION HISTORY:
! 3/28/96
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! var variable plot name
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
CHARACTER (LEN=*) :: var
CHARACTER (LEN=12) :: varname
COMMON /varplt1/ varname
varname=var
RETURN
END SUBROUTINE varplt
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE VTRSFC ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE vtrsfc(u,v, x,y, xw,xe,dx, ys,yn,dy, & 3,7
nx,ibgn,iend,ist, ny,jbgn,jend,jst, &
label,time, runname, factor, slicopt, &
tem1,tem2,tem3,tem4, &
tem5,tem6,hterain)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Plot vector fields in 2-d array
!
! AUTHOR: Min Zou
! 4/28/97
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! u 2-dimensional array of u wind components (m/s)
! v 2-dimensional array of v wind components (m/s)
!
! 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 physical space (m)
!
! xw value of x for first i grid point to plot
! xe value of x for last i grid point to plot
! ys value of y for first j grid point to plot
! yn value of y for last j grid point to plot
!
! nx first dimension of b
! ibgn index of first i grid point to plot
! iend index of last i grid point to plot
!
! ny second dimension of b
! jbgn index of first j grid point to plot
! jend index of last j grid point to plot
!
!
! time time of data in seconds
!
! runname character string decribing run
!
! factor scaling factor for winds
! V*factor wind vectors are plotted
! slicopt slice orientation indicator
! slicopt = 1, x-y slice of u,v at z index kslice is plotted.
! slicopt = 2, x-z slice of u,w at y index jslice is plotted.
! slicopt = 3, y-z slice of v,w at x index islice is plotted.
! slicopt = 4, x-y slice of u,v at z index islice is plotted.
! slicopt = 5, xy-z cross section of wind islice is plotted.
! slicopt = 6, data field on constant p-level is plotted.
! slicopt = 0, all of the three slices above are plotted.
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
! tem2 Temporary work array.
! tem3 Temporary work array.
! tem4 Temporary work array.
! tem5 Temporary work array.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny
REAL :: u(nx,ny)
REAL :: v(nx,ny)
REAL :: x(nx,ny)
REAL :: y(nx,ny)
CHARACTER (LEN=*) :: runname
CHARACTER (LEN=*) :: label
REAL :: xw,xe,dx,ys,yn,dy
INTEGER :: ibgn,iend,ist, jbgn,jend,jst
REAL :: time,factor
INTEGER :: slicopt
INTEGER :: iunits, itype
COMMON /windvtr/iunits, itype
CHARACTER (LEN=12) :: varname
COMMON /varplt1/ varname
REAL :: xw1,xe1,ys1,yn1
COMMON /xuvpar/xw1,xe1,ys1,yn1
!
!-----------------------------------------------------------------------
!
! Work arrays: tem1,tem2,tem3,tem4,tem5 of size at least
! max( nx*ny, nx*nz, ny*nz).
!
!-----------------------------------------------------------------------
!
REAL :: tem1(*),tem2(*),tem3(*),tem4(*),tem5(*)
REAL :: tem6(*)
!
!-----------------------------------------------------------------------
!
! Common blocks for plotting control parameters
!
!-----------------------------------------------------------------------
!
REAL :: x01,y01 ! the first point of interpolation
REAL :: x02,y02 ! the second point of interpolation
REAL :: zlevel ! the given height of the slice
REAL :: sinaf,cosaf,dist,sqrtdxy
COMMON /slicev/x01,y01,x02,y02,sinaf,cosaf,dist,sqrtdxy
COMMON /sliceh/zlevel
INTEGER :: ovrobs,obsset,obscol,obs_marktyp
REAL :: obs_marksz
COMMON /obspar/ ovrobs,obsset,obscol,obs_marktyp, obs_marksz
!
!-----------------------------------------------------------------------
!
! Misc. local Variables
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,ij,istep,jstep,length,isize,jsize
REAL :: uunit
CHARACTER (LEN=6) :: timhms
CHARACTER (LEN=120) :: title
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
INTEGER :: trnplt ! flag to plot terain (1 or 0)
REAL :: hterain(nx,ny) ! The height of the terrain.
INTEGER :: ovrtrn ! overlay terrain option (0/1)
REAL :: trninc,trnmin, trnmax ! terrain interval minimum, maximum
REAL :: ztmin,ztmax
COMMON /trnpar/ trnplt,ovrtrn,trninc,trnmin, trnmax,ztmin,ztmax
INTEGER :: smooth
COMMON /smoothopt/smooth
INTEGER :: wrtflag, llabel
CHARACTER (LEN=80) :: levlab
CHARACTER (LEN=50) :: timelab
CHARACTER (LEN=25) :: timestring
COMMON /timelev/wrtflag,timelab, levlab, timestring
CHARACTER (LEN=120) :: label_copy
INTEGER :: xpbgn,xpend,ypbgn,ypend
COMMON /processors/ xpbgn, xpend, ypbgn, ypend
INTEGER :: idsize, jdsize, mnsize
INTEGER :: tinds, tind1,tind2,tind3,tind4,tind5,tind6,tind7,tind8
!----------------------------------------------------------------------
!
! Include files
!
!---------------------------------------------------------------------
INCLUDE 'mp.inc'
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF (slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5 .OR. slicopt >9) RETURN
isize=(iend-ibgn)+1
jsize=(jend-jbgn)+1
idsize = isize ! global maximum isize
jdsize = jsize
CALL mpmaxi
(idsize)
CALL mpmaxi
(jdsize)
mnsize = idsize*jdsize
tind1 = 1 ! reuse a 3d temporary array 'tem6' as several 2D
tind2 = tind1+mnsize ! arrays inside vtr2d
tind3 = tind2+mnsize
tind4 = tind3+mnsize
tind5 = tind4+mnsize
tind6 = tind5+mnsize
tind7 = tind6+mnsize
tind8 = tind7+mnsize
! tinds = SIZE(tem6)
! IF (tinds < 5*mnsize) THEN
! WRITE(6,*) 'ERROR: temporary array tem6 is too small.'
! CALL arpsstop('Temporary array too small inside vtrsfc.',1)
! END IF
!
!-----------------------------------------------------------------------
!
! Set up terrain, if needed.
!
!-----------------------------------------------------------------------
!
label_copy = label
llabel = 120
CALL xstrlnth(label_copy, llabel)
IF(myproc ==0) CALL xpscmnt('Start plotting '//label_copy(1:llabel))
IF(trnplt == 1 .OR.trnplt == 2 .OR. ovrtrn == 1) THEN
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem5(ij)=hterain(i,j)
END DO
END DO
END IF
CALL cvttim
( time, timhms)
IF( timhms(1:1) == '0' ) timhms(1:1)=' '
WRITE(timelab,'(''T='',F8.1,A)') time, &
' s ('//timhms(1:2)//':'//timhms(3:4)//':'//timhms(5:6)//')'
CALL get_time_string
( time, timestring)
! length=50
! CALL strmin(timelab,length)
! write(timelab,'(a,'' '',a)') timestring(1:21), timelab(1:length)
! print*,'in vtrsfc', timelab
DO j=jbgn,jend
DO i=ibgn,iend
ij = i-ibgn+1 + (j-jbgn)*isize
tem1(ij) = -9999.0
tem2(ij) = -9999.0
IF(u(i,j) /= -9999.0) tem1(ij)=u(i,j)*factor
IF(v(i,j) /= -9999.0) tem2(ij)=v(i,j)*factor
tem3(ij)=x(i,j)
tem4(ij)=y(i,j)
END DO
END DO
levlab = 'First level above ground (surface)'
WRITE(title,'(2A)') 'U-V ',label
! length = 120
! CALL strlnth( title, length )
! CALL strmin ( title, length)
length = LEN_TRIM(title)
uunit = 10.0
CALL xvmode(1)
istep = ist
jstep = jst
DO i=1,smooth
CALL smooth9pmv
(tem1,isize,jsize,1,isize,1,jsize,tem6)
CALL smooth9pmv
(tem2,isize,jsize,1,isize,1,jsize,tem6)
END DO
CALL vtr2d
(tem1,tem2,tem3,tem4, uunit, xw,xe,dx,ys,yn,dy, &
isize,istep,jsize,jstep,title(1:length),runname, 1, &
tem5,slicopt,mnsize,tem6(tind1),tem6(tind2),tem6(tind3), &
tem6(tind4),tem6(tind5),tem6(tind6),tem6(tind7),tem6(tind8))
IF(myproc==0) CALL xpscmnt('End plotting '//label_copy(1:llabel))
RETURN
END SUBROUTINE vtrsfc
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE SET_INTERVAL ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE set_interval(z, m,n,zmin1,zmax1,ctmin,ctmax,cl) 1
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Limited contour interval when uinc = -9999.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Min Zou
!
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! z 2-D array
! m,n dimension of 2-d array
! zmin1 the minimum value of 2-D array
! zmax1 The maximum value of 2-D array
! ctmin the input minimum value
! ctmax the input maximum value
! cl the intervals
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
REAL :: z(m,n),cl(*)
REAL :: zmin, zmax
REAL :: zinc
COMMON /xclm19/ nmin, nmax
COMMON /xcrf17/clref,lcptn,labtyp,iclf,lhilit,ihlf,kct0
COMMON /zchole/ nhole,specia,nvtrbadv
COMMON /xoutch/ nch
IF(ctmin == 0.0 .AND. ctmax == 0.0) THEN
cl(2)=cl(1)+ xfinc(zmax1-zmin1)/2
ELSE
cl(2)=cl(1)+ xfinc(ctmax-ctmin)/2
END IF
IF(cl(2)-cl(1) == 0.0) cl(2)=cl(1)+1.0
zinc = cl(2)-cl(1)
ncmin=nmin
ncmax=nmax
diff=ctmax-ctmin
IF( diff - ABS(zinc)*1.0E-6 > 0.0) THEN
GOTO 4
END IF
WRITE(nch,'(a,a)') &
' Bad first guess of contour increment or field is constant', &
', number of contours is one.'
ncnt=1
cl(1)= ctmin
RETURN
4 kcount=0
1 CONTINUE
eps=0.1*zinc
kcount=kcount+1
IF( kcount > 20) GO TO 998
kzinc=(ctmin-clref)/zinc
zmin=kzinc*zinc+clref
kzinc=(ctmax-clref)/zinc
zmax=kzinc*zinc+clref
IF(ctmin-clref > 0.0) zmin=zmin+zinc
IF(ctmax-clref < 0.0) zmax=zmax-zinc
!
clv=zmin-zinc
ncnt=0
6 clv=clv+zinc
IF(clv-zmax-eps > 0.0) THEN
GO TO 8
END IF
ncnt=ncnt+1
IF(ncnt > ncmax) THEN
zinc=zinc*2
WRITE(nch,1000) ncmax, zinc
1000 FORMAT(' Number of contours > ',i3,' ,Zinc is doubled. Zinc=' &
,e10.3)
GO TO 1
END IF
IF( ABS( clv-clref ) < eps ) clv=clref
cl(ncnt)=clv
GO TO 6
8 CONTINUE
IF( ncnt < ncmin) THEN
zinc=zinc/2
WRITE(nch,2000) ncmin,zinc
2000 FORMAT(' Number of contours < ',i3,' ,Zinc is halved. Zinc=' &
,e10.3)
GO TO 1
END IF
WRITE(nch,'('' * NUMBER OF CONTOURS= '',I5,'' MIN='',E12.4, &
& '' MAX='', e12.4,'' inc='',e12.5 )') &
ncnt,ctmin,ctmax,zinc
IF( zmin1 >= ctmin .AND. zmax1 <= ctmax) THEN
zinc = cl(2) - cl(1)
WRITE(nch,'(''SET MINIMUM CONTOUR INTERVAL IS'',E12.4, &
& '' ctmin='',e12.4,'' ctmax='',e12.4 )')zinc,ctmin,ctmax
CALL xctref(zinc)
CALL xnctrs( 1,300)
ELSE
WRITE(nch,'(''NO NEED SET MINIMUM CONTOUR INTERVAL'')' )
WRITE(nch,'(''CNTOUR INTERVAL IS SET AUTOMATICALLY'')' )
cl(2)=cl(1)+ xfinc(zmax1-zmin1)/2
IF(cl(2)-cl(1) == 0.0) cl(2)=cl(1)+1.0
END IF
RETURN
998 WRITE(nch,*)' Contour levels can not be selected by XCNTLV.'
WRITE(nch,*) &
' Plz alter input contour interval or limits of contour number'
END SUBROUTINE set_interval
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE XRCH1 ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE xrch1( r,ch,lch) 1,3
! Return real number R as a character string in automatically set format
REAL :: r
CHARACTER (LEN=20) :: str
CHARACTER (LEN=*) :: ch
CALL get_format
(r,str)
IF(ABS(r-0.0) < 1.e-20) THEN
WRITE(ch,'(F3.1)') r
ELSE
WRITE(ch,str) r
END IF
lch=20
CALL strlnth
( ch, lch)
CALL strmin
( ch, lch)
RETURN
END SUBROUTINE xrch1
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE GET_FORMAT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE get_format(r,ch) 1
INTEGER :: npoz
CHARACTER (LEN=1) :: FORM,ndrob
CHARACTER (LEN=20) :: ch
WRITE(ch,10)r
10 FORMAT(g11.4)
DO i=20,1,-1
IF(ch(i:i) == '0'.OR.ch(i:i) == ' ') THEN
ch(i:i)=' '
ELSE
GO TO 1
END IF
END DO
1 CONTINUE
npoz=0
ndot=0
nmant=0
ndrob=' '
FORM='F'
DO i = 1,20
IF(ch(i:i) /= ' ' ) npoz=npoz+1
IF(ch(i:i) == 'E') FORM='E'
IF(ndrob == '.'.AND.ch(i:i) /= ' ') ndot=ndot+1
IF(ch(i:i) == '.') ndrob='.'
IF(FORM /= 'E') nmant=npoz
END DO
npoz=npoz
IF(FORM == 'F') THEN
IF(ndot /= 0) THEN
WRITE(ch,20) '(',FORM,npoz,'.',ndot,')'
ELSE
WRITE(ch,20) '(',FORM,npoz,'.',ndot,')'
END IF
ELSE IF(FORM == 'E') THEN
ch = '(1PE20.2)'
ELSE
WRITE(ch,20) '(',FORM,npoz,'.',nmant,')'
END IF
20 FORMAT(a1,a1,i1,a1,i1,a1)
RETURN
END SUBROUTINE get_format
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DRAWMAP ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE drawmap(nunit) 1
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! This subroutine will plot the map
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
! 6/2/97 Min Zou
! Read multiple mapfile only once. Using differnt line style to
! plot mapdata.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! nunit the channel of the mapfile data
! mapfile character of map file name
!
!-----------------------------------------------------------------------
!
! Variable Declarations
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'arpsplt.inc'
INTEGER :: nunit,i
INTEGER :: lmapfile
CHARACTER (LEN=256) :: mapfile(maxmap)
INTEGER :: mapgrid,mapgridcol, kolor
REAL :: latgrid,longrid
INTEGER :: nmapfile,mapcol(maxmap),mapline_style(maxmap)
COMMON /mappar1/nmapfile,mapcol,mapline_style,mapfile
COMMON /mappar2/mapgrid,mapgridcol,latgrid,longrid
REAL :: x1,x2,y1,y2
CALL xpscmnt('Start of map plotting ')
CALL xqmap (x1,x2,y1,y2)
CALL xwindw(x1,x2,y1,y2)
CALL xqcolor(kolor)
DO i=1,nmapfile
CALL xcolor(mapcol(i))
IF(mapline_style(i) == 1) THEN
CALL xthick(1)
CALL xbrokn(6,3,6,3)
ELSE IF(mapline_style(i) == 2) THEN
CALL xthick(1)
ELSE IF(mapline_style(i) == 3) THEN
CALL xthick(3)
CALL xfull
END IF
lmapfile=256
CALL xstrlnth(mapfile(i), lmapfile)
CALL xdrawmap(nunit,mapfile(i)(1:lmapfile),latgrid,longrid)
END DO
CALL xcolor(kolor)
CALL xfull
CALL xwdwof
CALL xpscmnt('End of map plotting ')
RETURN
END SUBROUTINE drawmap
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE PLTOBS ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE pltobs(obopt) 2
!
!
!-----------------------------------------------------------------------
!
! PURPOSE:
! Plots observations on an arpsplt contour map.
!
!-----------------------------------------------------------------------
!
! INPUT:
! obopt Plotting option
! 1 Plot data in obs1 as characters
! 2 Plot data in obs1 and obs2 as characters
! 3 Plot wind arrows with obs1 as u and obs2 as v.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'arpsplt.inc'
!
! Arguments
!
INTEGER :: obopt
!
INTEGER :: nobs
REAL :: latob(mxsfcob)
REAL :: lonob(mxsfcob)
REAL :: obs1(mxsfcob)
REAL :: obs2(mxsfcob)
!
COMMON /sfc_obs1/ nobs
COMMON /sfc_obs2/ latob,lonob,obs1,obs2
!
! Plotting parameters
!
CHARACTER (LEN=1) :: cross
PARAMETER(cross='+')
!
INTEGER :: ovrobs,obsset,obscol,obs_marktyp
REAL :: obs_marksz
COMMON /obspar/ ovrobs,obsset,obscol,obs_marktyp, obs_marksz
!
! Plotting common blocks
!
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
REAL :: ctinc,ctmin,ctmax,vtunt ! contour interval and vector unit
COMMON /incunt/ ctinc,ctmin,ctmax,vtunt
REAL :: xleng,vunit
COMMON /vecscl/ xleng,vunit
INTEGER :: iunits, itype
COMMON /windvtr/iunits, itype
!
! Misc local variables
!
INTEGER :: iob
REAL :: orgmag,obmag,yoff,yoff2
REAL :: x1,x2,y1,y2
REAL :: xob,yob
CHARACTER (LEN=4) :: chplot
INTEGER :: imkrfil
!
! Set-up plotting space and zxplot variables
!
CALL xcolor(lbcolor)
CALL xqmap (x1,x2,y1,y2)
CALL xwindw(x1,x2,y1,y2)
CALL xchori(0.0)
CALL xqchsz(orgmag)
obmag=0.8*orgmag
yoff=0.5*orgmag
yoff2=2.*yoff
CALL xchsiz(obmag)
IF(obopt == 1) THEN
CALL xcolor(obscol)
CALL xmrksz(obs_marksz)
DO iob=1,nobs
IF(obs1(iob) > -98. .AND. obs1(iob) < 500.) THEN
CALL xlltoxy(1,1,latob(iob),lonob(iob),xob,yob)
WRITE(chplot,810) nint(obs1(iob))
810 FORMAT(i4)
CALL xcharc((0.001*xob),(0.001*yob+yoff),chplot)
! call XCHARC((0.001*xob),(0.001*yob),cross)
CALL xmarker((0.001*xob),(0.001*yob),obs_marktyp)
IF(obs_marktyp > 5) THEN
CALL xqmkrfil(imkrfil)
CALL xmkrfil(1)
CALL xmarker((0.001*xob),(0.001*yob),MOD(obs_marktyp,5))
CALL xmkrfil(imkrfil)
END IF
END IF
END DO
ELSE IF(obopt == 2) THEN
CALL xcolor(obscol)
CALL xmrksz(obs_marksz)
DO iob=1,nobs
CALL xlltoxy(1,1,latob(iob),lonob(iob),xob,yob)
IF(obs1(iob) > -98. .AND. obs1(iob) < 500.) THEN
WRITE(chplot,810) nint(obs1(iob))
CALL xcharc((0.001*xob),(0.001*yob+yoff),chplot)
! call XCHARC((0.001*xob),(0.001*yob),cross)
IF(obs_marktyp > 5) THEN
CALL xqmkrfil(imkrfil)
CALL xmkrfil(1)
CALL xmarker((0.001*xob),(0.001*yob),MOD(obs_marktyp,5))
CALL xmkrfil(imkrfil)
END IF
END IF
IF(obs2(iob) > -98. .AND. obs2(iob) < 500.) THEN
WRITE(chplot,810) nint(obs2(iob))
CALL xcharc((0.001*xob),(0.001*yob+yoff),chplot)
! call XCHARC((0.001*xob),(0.001*yob),cross)
CALL xmarker((0.001*xob),(0.001*yob),obs_marktyp)
IF(obs_marktyp > 5) THEN
CALL xqmkrfil(imkrfil)
CALL xmkrfil(1)
CALL xmarker((0.001*xob),(0.001*yob),MOD(obs_marktyp,5))
CALL xmkrfil(imkrfil)
END IF
END IF
END DO
ELSE IF(obopt == 3) THEN
CALL xcolor(obscol)
CALL xmrksz(obs_marksz)
DO iob=1,nobs
IF(obs1(iob) > -98. .AND. obs1(iob) < 500. .AND. &
obs2(iob) > -98. .AND. obs2(iob) < 500.) THEN
CALL xlltoxy(1,1,latob(iob),lonob(iob),xob,yob)
xob=0.001*xob
yob=0.001*yob
IF( xob > x1 .AND. xob < x2 .AND. yob > y1 .AND. yob < y2 ) THEN
CALL xarrow(obs1(iob),obs2(iob),xob,yob,xleng,vunit)
CALL xmarker(xob,yob,obs_marktyp)
IF(obs_marktyp > 5) THEN
CALL xqmkrfil(imkrfil)
CALL xmkrfil(1)
CALL xmarker(xob,yob,MOD(obs_marktyp,5))
CALL xmkrfil(imkrfil)
END IF
END IF
END IF
END DO
END IF
CALL xcolor(lbcolor)
CALL xchsiz(orgmag)
CALL xfull
CALL xwdwof
RETURN
END SUBROUTINE pltobs
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE PLTSTA ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE pltsta(a,b,x,y,m,n,flag,slicopt) 6,5
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! This subroutine will plot some station information.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! AUTHOR:
! Min Zou (6/1/97)
!
! Modification history:
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a, b 2-dimension array of Variable
! m, n Array dimensions
! x, y x-coord and y-coord of the staions
! flag a flag for different plot
! slicopt slice orientation indicator
!
!-----------------------------------------------------------------------
!
! Variable Declarations
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INCLUDE 'arpsplt.inc'
INTEGER :: m,n
REAL :: a(m,n)
REAL :: b(m,n)
REAL :: x(m,n)
REAL :: y(m,n)
INTEGER :: nsta,nstapro(mxstalo),nstatyp(mxstalo)
REAL :: latsta(mxstalo), lonsta(mxstalo)
CHARACTER (LEN=5) :: s_name(mxstalo)
INTEGER :: ovrstaopt
INTEGER :: ovrstam,staset,ovrstan,ovrstav,stacol,markprio,wrtstax
INTEGER :: nsta_typ,sta_typ(10),sta_marktyp(10), sta_markcol(10)
REAL :: sta_marksz(10)
REAL :: wrtstad
CHARACTER (LEN=132) :: stalofl
COMMON /sta_par/ ovrstaopt,ovrstam,staset,ovrstan,ovrstav,stacol, &
markprio, nsta_typ,sta_typ,sta_marktyp, &
sta_markcol,sta_marksz,stalofl,wrtstax,wrtstad
COMMON /sta_loc/latsta,lonsta,nstatyp,nstapro,nsta
COMMON /sta_loc1/s_name
REAL :: xob(mxstalo), yob(mxstalo),aob(mxstalo),bob(mxstalo)
COMMON /xob_yob/xob, yob
INTEGER :: LEN,i,j
!
REAL :: x01,x02,y01,y02
REAL :: sinaf,cosaf,dist,sqrtdxy
COMMON /slicev/x01,y01,x02,y02,sinaf,cosaf,dist,sqrtdxy
!
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
!
INTEGER :: layover
COMMON /laypar/ layover
!
CHARACTER (LEN=12) :: varname
COMMON /varplt1/ varname
!
REAL :: xori1,xori2,yori1,yori2,zori1,zori2
COMMON /tmphc1/xori1,xori2,yori1,yori2,zori1,zori2
!
REAL :: xleng,vunit
COMMON /vecscl/ xleng,vunit
INTEGER :: iunits, itype
COMMON /windvtr/iunits, itype
REAL :: x_tmp
COMMON /tmphc2/ x_tmp
!
REAL :: x1,x2,y1,y2
REAL :: orgmag,obmag,yoff,yoff2,xoff, xoff2
CHARACTER (LEN=30) :: ctmp
!
INTEGER :: flag,slicopt,fg
REAL :: xdist, ydist,xd0,yd0,xa,xb
SAVE fg
REAL :: xleng0, spd, dir, istand
INTEGER :: iunits0, imkrfil
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! calculate xob and yob on the xy plane
CALL xwindw(xori1,xori2,yori1,yori2)
IF(fg == 0) THEN
CALL xlltoxy(nsta,1,latsta,lonsta,xob,yob)
DO i= 1,nsta
xob(i) = xob(i)*0.001
yob(i) = yob(i)*0.001
END DO
fg=1
END IF
!
CALL xqmap (x1,x2,y1,y2)
CALL xwindw(x1,x2,y1,y2)
CALL xchori(0.0)
CALL xqchsz(orgmag)
obmag=0.8*orgmag
yoff=0.5*orgmag
yoff2=3.*yoff
xoff = 0.001*(x2-x1)
xoff2 = 4.*xoff
CALL xchsiz(obmag)
IF(ovrstav == 1 ) THEN ! interpolation
CALL intepo
(nsta,xob,yob,aob,m,n,x,y,a)
IF(varname(1:6) == 'vtrplt' .OR. varname(1:6) == 'vtpplt') &
CALL intepo
(nsta,xob,yob,bob,m,n,x,y,b)
END IF
IF (flag == 1) THEN
CALL xcolor(stacol)
IF(slicopt == 5) THEN
xa = (y02-y01)/(x02-x01)
xb = y01 - xa*x01
END IF
DO i = 1,nsta
IF(nstapro(i) <= markprio) THEN
IF(wrtstax == 1 )THEN
CALL xwindw(x1,x2-0.005*(x2-x1), &
y1-0.3*(y2-y1),y1)
LEN=5
CALL strlnth
(s_name(i),LEN)
CALL xchori(90.)
IF(slicopt == 2 .OR. slicopt == 10) THEN
CALL xwindw(xori1,xori2-0.005*(xori2-xori1), &
y1-0.3*(y2-y1),y1)
IF ( (xob(i) <= xori2.AND.xob(i) >= xori1) &
.AND. (yob(i) <= yori2.AND.yob(i) >= yori1) ) THEN
IF( ABS(yob(i)-x_tmp) <= wrtstad ) THEN
! CALL XCHARR((xob(i)),y1-1.75*yoff2,
CALL xcharr((xob(i)),y1-1.50*yoff2, &
s_name(i)(1:LEN))
END IF
END IF
ELSE IF(slicopt == 3 .OR. slicopt == 11) THEN
CALL xwindw(yori1,yori2-0.005*(yori2-yori1), &
y1-0.3*(y2-y1),y1)
IF ( (xob(i) <= xori2.AND.xob(i) >= xori1) &
.AND. (yob(i) <= yori2.AND.yob(i) >= yori1) ) THEN
IF( ABS(xob(i)-x_tmp) <= wrtstad ) THEN
CALL xcharr((yob(i)),y1-1.75*yoff2, &
s_name(i)(1:LEN))
END IF
END IF
ELSE IF( slicopt == 5) THEN
CALL xwindw(x1,x2-0.005*(x2-x1), &
y1-0.3*(y2-y1),y1)
IF ( (xob(i) <= xori2.AND.xob(i) >= xori1) &
.AND. (yob(i) <= yori2.AND.yob(i) >= yori1) ) THEN
xd0 = 1./(xa*xa+1.0)*((yob(i)-xb)*xa+xob(i))
yd0 = xa*xd0+xb
xdist = SQRT((x01-xd0)*(x01-xd0) + (y01-yd0)*(y01-yd0))
ydist = SQRT((xob(i)-xd0)*(xob(i)-xd0)+ &
(yob(i)-yd0)*(yob(i)-yd0))
xdist = xdist+x1
IF(ABS(ydist) <= wrtstad ) THEN
CALL xcharr(xdist,y1-1.75*yoff2, &
s_name(i)(1:LEN))
END IF
END IF
END IF
CALL xchori(0.)
END IF
END IF
END DO
ELSE IF(flag == 0) THEN
CALL xwindw(x1,x2,y1,y2)
DO i = 1,nsta
IF( (xob(i) >= x1.AND.xob(i) <= x2) .AND. &
(yob(i) >= y1.AND.yob(i) <= y2) ) THEN
IF(nstapro(i) <= markprio) THEN
IF(ovrstan == 1) THEN
LEN=5
CALL strlnth
(s_name(i),LEN)
CALL xcharc((xob(i)),(yob(i)-yoff2), &
s_name(i)(1:LEN))
END IF
IF(ovrstam == 1) THEN
DO j=1,nsta_typ
CALL xmrksz(sta_marksz(j))
CALL xcolor(sta_markcol(j))
IF(nstatyp(i) == sta_typ(j)) THEN
CALL xmarker((xob(i)),(yob(i)), &
sta_marktyp(j))
IF(sta_marktyp(j) > 5) THEN
CALL xqmkrfil(imkrfil)
CALL xmkrfil(1)
CALL xmarker((xob(i)),(yob(i)), &
MOD(sta_marktyp(j) ,5))
CALL xmkrfil(imkrfil)
END IF
IF(ovrstan == 1) THEN
LEN=5
CALL strlnth
(s_name(i),LEN)
CALL xcharc((xob(i)),(yob(i)-yoff2), &
s_name(i)(1:LEN))
END IF
END IF
END DO
END IF
IF(ovrstav == 1) THEN
CALL xcolor(stacol)
IF(varname(1:6) == 'vtrplt' .OR. varname(1:6) == 'vtpplt') THEN
! IF(i.eq.1) THEN
xleng0=xleng*0.0004
IF(iunits == 2 ) THEN
iunits0=2
istand = 10.
WRITE(ctmp,'(a30)')'10 knots'
ELSE IF (iunits == 3) THEN
iunits0=2
istand = 10.
WRITE(ctmp,'(a30)')'10 MPH'
ELSE IF(iunits == 1) THEN
iunits0=1
istand = 5.
WRITE(ctmp,'(a30)')'5 m/s'
END IF
! ENDIF
IF(aob(i) /= -9999. .AND. bob(i) /= -9999.) THEN
spd = SQRT(aob(i)*aob(i)+bob(i)*bob(i))
dir = ATAN2(-1.*aob(i),-1.*bob(i))*180./3.1415926
IF(dir <= 0.) dir = 360.+dir
! CALL barb((xob(i)),
! : (yob(i)),dir,spd,iunits0-1, xleng0)
CALL xbarb(aob(i),bob(i),xob(i),yob(i), &
iunits0,xleng*0.65,2)
END IF
ELSE
IF(aob(i) /= -9999.) THEN
CALL xrch(aob(i),ctmp,LEN)
IF(layover == 0) CALL xcharr((xob(i)-xoff2), &
(yob(i)+yoff),ctmp(1:LEN))
IF(layover == 1) CALL xcharl((xob(i)+xoff2), &
(yob(i)+yoff) ,ctmp(1:LEN))
IF(layover == 2) CALL xcharc((xob(i)+xoff2), &
(yob(i)-yoff),ctmp(1:LEN))
IF(layover == 3) CALL xcharl((xob(i))+xoff2, &
(yob(i)-yoff) ,ctmp(1:LEN))
END IF
END IF
END IF
END IF
END IF
END DO
END IF
CALL xcolor(lbcolor)
CALL xchsiz(orgmag)
CALL xfull
CALL xwdwof
RETURN
END SUBROUTINE pltsta
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE RUNLAB ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE runlab(runname) 38
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Plot a run label at the lower left cornor of the picture frame.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! runname character string of run label
!
!-----------------------------------------------------------------------
!
! Variables Declarations
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
CHARACTER (LEN=*) :: runname
REAL :: xl, xr, yb, yt, rotang, xlimit, ylimit
INTEGER :: nopic, nxpic, nypic
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
CALL xqmap(xl,xr,yb,yt)
CALL xqnpic(nopic)
CALL xqspac(nxpic, nypic, rotang, xlimit, ylimit)
IF( rotang == 0.0 ) THEN
IF(nopic == nxpic*nypic -(nxpic-1)) THEN
CALL xcharl( xl, yb-0.15*(yt-yb), runname )
END IF
ELSE
IF(nopic == nypic*nxpic -(nypic-1)) THEN
CALL xcharl( xl, yb-0.15*(yt-yb), runname )
END IF
END IF
RETURN
END SUBROUTINE runlab
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE VPROFIL ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE vprofil(nx,ny,nz,nzprofc,var,xc,yc,zpc,plwr,pupr, & 27,15
xpnt,ypnt,npoints,zlwr,zupr,xcaptn,ycaptn,npicprof, &
profil,height)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! This subroutine will plot the vertical profiles of a given
! variable through points (xpnt(i),ypnt(i),i=1,npoints).
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! AUTHOR:
! Adwait Sathye (2/28/94)
!
! Modification history:
!
! 4/18/94, (Ming Xue)
! Major overhaul. Many temporary arrays removed. New frame option
! added.
!
! 9/18/1995 (Ming Xue)
! Fixed a problem in the code that determines kbgn and kend.
!
! 10/8/1996 (Y. Richardson)
! Corrected a bug in the interpolation weights.
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! nx, ny, nz Array dimensions
! nzprofc the maximum vertical index in height (zpc/zpsoilc)
! and variables to be profiled when calling vprofil
! subroutine. 06/10/2002, Zuwen He
! In the atmosphere model, the vertical index is
! typically nz-1, while in the soil model, it's nzsoil.
! var Variable data array
! xc,yc,zpc The coordinate of input data var.
! plwr,pupr Lower and upper bounds for the horiz. axis of profile
! xpnt, ypnt Arrays containing the X and Y locations of the
! mulitple profiles to be plotted
! npoints Number of profile points to be plotted
! zlwr, zupr Bounds in the vertical direction
! xcaptn Caption for the X axis
! ycaptn Caption for the Y axis
!
! Work arrays:
!
! profil,height Temporary arrays
!
!-----------------------------------------------------------------------
!
!
!-----------------------------------------------------------------------
!
! Variable Declarations
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
!-----------------------------------------------------------------------
!
! Variables passed in
!
!-----------------------------------------------------------------------
!
INTEGER :: nx, ny, nz, nzprofc
REAL :: var(nx,ny,nz)
REAL :: xc(nx,ny,nz), yc(nx,ny,nz), zpc(nx,ny,nz)
REAL :: plwr,pupr
REAL :: zlwr, zupr
INTEGER :: npoints
REAL :: xpnt(npoints), ypnt(npoints)
CHARACTER (LEN=*) :: xcaptn
CHARACTER (LEN=*) :: ycaptn
INTEGER :: npicprof
REAL :: profil(nz,npoints)
REAL :: height(nz,npoints)
LOGICAL :: multiprof
!
!-----------------------------------------------------------------------
!
! Temporary local variables
!
!-----------------------------------------------------------------------
!
REAL :: lower, upper, zmin, zmax
REAL :: x1, x2, y1, y2
REAL :: a(2,2)
INTEGER :: i, j, k, ix, jy,kbgn,kend,ip,lchar
REAL :: dx,dy,temp,hmaxk,hmink
CHARACTER (LEN=80) :: ch
REAL :: lblmag, ctrlbsiz, axlbsiz
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
INCLUDE 'mp.inc'
INTEGER :: nxlg, nylg
INTEGER :: source, itags, itagr
INTEGER, PARAMETER :: destination = 0
INTEGER :: indxx,indxy,xp(2),yp(2)
INTEGER :: ii,jj, ierr
REAL :: xtem, ytem
REAL, ALLOCATABLE :: vartem(:), zptem(:)
REAL, ALLOCATABLE :: varctem(:,:,:), zpctem(:,:,:)
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
nxlg = (nx-3)*nproc_x + 3
nylg = (ny-3)*nproc_y + 3
multiprof = .false.
IF( npicprof == 0 .AND. npoints > 1 ) multiprof = .true.
!
!-----------------------------------------------------------------------
!
! If lower boundary is bigger, then swap boundaries.
!
!-----------------------------------------------------------------------
!
IF (plwr > pupr) THEN
lower = pupr
upper = plwr
ELSE
lower = plwr
upper = pupr
END IF
!
!-----------------------------------------------------------------------
!
! Find corresponding coordinates for the boundaries in the Z
! dimension. IF both have been set to 0, use the boundary values.
! Else, loop through the zpc array and find the location of the
! point.
!
!-----------------------------------------------------------------------
!
dx = xc(2,1,1)-xc(1,1,1)
dy = yc(1,2,1)-yc(1,1,1)
zmin = zpc(1,1,1)
zmax = zpc(1,1,nzprofc)
DO j=1,ny-1
DO i=1,nx-1
zmin=MIN( zmin, zpc(i,j,1))
zmax=MAX( zmax, zpc(i,j,nzprofc))
zmin=MIN( zmin, zpc(i,j,nzprofc)) ! because of soil model, Zuwen
zmax=MAX( zmax, zpc(i,j,1)) ! because of soil model, Zuwen
END DO
END DO
CALL mpmax0
(zmax,zmin)
IF( zlwr /= zupr ) THEN
zmin = MAX(zmin, zlwr)
zmax = MIN(zmax, zupr)
END IF
IF( zmax < zmin) WRITE(6,'(a, f10.3, a, f10.3)') &
'Warning: zmax is less then zmin. Check input data zprofbgn', &
zlwr , 'and zprofend',zupr
ALLOCATE(vartem(nz), STAT = ierr)
ALLOCATE(zptem(nz), STAT = ierr)
ALLOCATE(varctem(2,2,nz), STAT = ierr)
ALLOCATE(zpctem(2,2,nz), STAT = ierr)
CALL check_alloc_status
(ierr, "vprofil:zpctem")
varctem = 0.0
zpctem = 0.0
DO ip = 1, npoints
ix = INT ( (xpnt(ip) - xc(1,1,1))/dx ) + 1
jy = INT ( (ypnt(ip) - yc(1,1,1))/dy ) + 1
ix = MIN(MAX(1,ix), nxlg-2)
jy = MIN(MAX(1,jy), nylg-2)
IF(myproc == 0) WRITE(6,'(1x,2a,2(a,f10.3),2(a,i4) )') &
'Plotting ',xcaptn,' profile through (', &
xpnt(ip),',',ypnt(ip),') km, at i=',ix,' j=',jy
CALL mpupdatei
(ix,1)
CALL mpupdatei
(jy,1)
xp(1) = (ix-2)/(nx-3) + 1
xp(2) = (ix-1)/(nx-3) + 1
yp(1) = (jy-2)/(ny-3) + 1
yp(2) = (jy-1)/(ny-3) + 1
IF(xp(2) > nproc_x) xp(2) = nproc_x
IF(yp(2) > nproc_y) yp(2) = nproc_y
DO jj = 1,2
DO ii = 1,2
indxx = MOD((ix-2+ii-1),(nx-3)) + 2
indxy = MOD((jy-2+jj-1),(ny-3)) + 2
IF(ix+ii-1 > nxlg-2) indxx = nx-1
IF(jy+jj-1 > nylg-2) indxy = ny-1
source = xp(ii) + (yp(jj)-1)*nproc_x -1
vartem = 0.0
zptem = 0.0
CALL inctag
IF (myproc == source) THEN
xtem = xc(indxx,indxy,1)
ytem = yc(indxx,indxy,1)
vartem(:) = var(indxx,indxy,1:nz)
zptem(:) = zpc(indxx,indxy,1:nz)
itags = gentag
CALL mpsendr
(xtem,1,destination,itags,ierr)
itags = gentag + 1
CALL mpsendr
(ytem,1,destination,itags,ierr)
itags = gentag + 2
CALL mpsendr
(vartem,nz,destination,itags,ierr)
itags = gentag + 3
CALL mpsendr
(zptem,nz,destination,itags,ierr)
END IF
IF(myproc == 0) THEN
itagr = gentag
CALL mprecvr
(xtem,1,source,itagr,ierr)
itagr = gentag + 1
CALL mprecvr
(ytem,1,source,itagr,ierr)
itagr = gentag + 2
CALL mprecvr
(vartem,nz,source,itagr,ierr)
itagr = gentag + 3
CALL mprecvr
(zptem,nz,source,itagr,ierr)
a(ii,jj) = ABS( (xtem-xpnt(ip))*(ytem-ypnt(ip)) )
varctem(ii,jj,:) = vartem(:)
zpctem(ii,jj,:) = zptem(:)
END IF
END DO
END DO
!
!-----------------------------------------------------------------------
!
! Interpolate the data value and its height to the specified point.
!
!-----------------------------------------------------------------------
!
IF( myproc == 0) THEN
DO k = 1,nzprofc
profil(k,ip)= (a(2,2)*varctem(1,1,k) + a(2,1)*varctem(1,2,k)+ &
a(1,2)*varctem(2,1,k) + a(1,1)*varctem(2,2,k)) &
/(a(1,1) + a(1,2) + a(2,1) + a(2,2))
height(k,ip)= (a(2,2)*zpctem(1,1,k) + a(2,1)*zpctem(1,2,k)+ &
a(1,2)*zpctem(2,1,k) + a(1,1)*zpctem(2,2,k)) &
/(a(1,1) + a(1,2) + a(2,1) + a(2,2))
END DO
END IF ! myproc == 0
END DO
DEALLOCATE(vartem, zptem)
DEALLOCATE(varctem, zpctem)
IF(myproc == 0) THEN
kbgn = nzprofc
DO k=nzprofc,1,-1
hmaxk = height(k,1)
DO ip=1,npoints
hmaxk = MAX(hmaxk,height(k,ip))
END DO
IF( hmaxk >= zmin) kbgn = k
END DO
kend = 1
DO k=1,nzprofc
hmink = height(k,1)
DO ip=1,npoints
hmink = MIN(hmink,height(k,ip))
END DO
IF( hmink <= zmax) kend=k
END DO
!
!-----------------------------------------------------------------------
!
! If input bounds for the profile are zero, use the min. and max.
! in the profile as the lower and upper bounds for the horizontal
! axis.
!
!-----------------------------------------------------------------------
!
IF( plwr == 0.0 .AND. pupr == 0.0 ) THEN
lower = profil(kbgn,1)
upper = profil(kend,1)
DO ip=1,npoints
DO k = kbgn,kend
lower = MIN(lower, profil(k,ip))
upper = MAX(upper, profil(k,ip))
END DO
END DO
ELSE
lower = plwr
upper = pupr
END IF
!
!-----------------------------------------------------------------------
!
! If the lower and upper bounds are equal, set the horizontal
! axis scale to 1.0.
!
!-----------------------------------------------------------------------
!
IF ((lower == 0.0 .AND. upper == 0.0).OR.upper == lower) upper = lower+1.0
!
!-----------------------------------------------------------------------
!
! Start to plot the profile...
!
!-----------------------------------------------------------------------
!
DO ip=1,npoints
IF( (.NOT.multiprof) .OR. (multiprof.AND.ip == 1) ) THEN
CALL xnwpic
CALL xaxtik(1, 1)
CALL xaxant(-1, -1)
CALL xmap (lower, upper, zmin, zmax)
CALL xaxnsz ( axlbsiz*(zmax-zmin)*lblmag )
CALL xqmap(x1,x2,y1,y2)
CALL xchsiz(0.03*(y2-y1)*lblmag)
CALL xchori(0.0)
IF( .NOT.multiprof ) THEN
lchar = LEN( xcaptn)
ch = xcaptn
WRITE(ch(lchar+1:lchar+33), '(a,f13.3,a,f13.3,a)') &
' at (',xpnt(ip),',',ypnt(ip),')'
lchar = lchar+33
CALL strmin
(ch(1:lchar), lchar)
CALL xcharc((x1+x2)*0.5, y1-(y2-y1)*0.10, ch(1:lchar))
ELSE
CALL xcharc((x1+x2)*0.5, y1-(y2-y1)*0.10, xcaptn )
END IF
!
!-----------------------------------------------------------------------
!
! Check if the points lie on one side of the axis. If the points are
! all positive, draw the y-axis on the left border, if all points are
! negative, draw the y-axis on the right border. If points lie on both
! sides, draw the y-axis through x=0.0.
!
!-----------------------------------------------------------------------
!
temp = lower * upper
IF (temp > 0.0) THEN
IF (lower > 0.0) THEN
CALL xaxes(lower,0.0,zmin,0.0)
CALL xchori(90.0)
CALL xcharc(x1-0.12*(x2-x1), (y1+y2)*0.5, ycaptn)
ELSE
CALL xaxant(-1, 1)
CALL xaxtik(1, -1)
CALL xaxes(upper,0.0,zmin,0.0)
CALL xchori(90.0)
CALL xcharc(x1-0.05*(x2-x1), (y1+y2)*0.5, ycaptn)
END IF
ELSE
CALL xaxes(0.0,0.0,zmin,0.0)
CALL xchori(90.0)
CALL xcharc(x1-0.10*(x2-x1), (y1+y2)*0.5, ycaptn)
END IF
END IF
CALL xchori(0.0)
CALL xbordr
CALL xfull
!
!-----------------------------------------------------------------------
!
! The first plot is labeled `A'. The subsequent plots will be `B'...
!
!-----------------------------------------------------------------------
!
IF( multiprof ) THEN
CALL xlbon
CALL xlabel(CHAR(64+ip))
ch(1:1) = CHAR(64+ip)
ch(2:2) = ' '
lchar = 2
WRITE(ch(lchar+1:lchar+33), '(a,f13.2,a,f13.2,a)') &
' at (',xpnt(ip),',',ypnt(ip),')'
lchar = lchar+33
CALL strmin
(ch(1:lchar), lchar)
CALL xqmap(x1,x2,y1,y2)
CALL xchsiz(0.025*(y2-y1)*lblmag)
CALL xchori(0.0)
CALL xcharl(x1+(x2-x1)*0.03, y2-(y2-y1)*(0.03+0.035*ip), &
ch(1:lchar))
CALL xlbsiz( ctrlbsiz*(y2-y1)*lblmag )
ELSE
CALL xlboff
END IF
CALL xwindw(lower, upper, zmin, zmax)
CALL xqmap(x1,x2,y1,y2)
CALL xcurve(profil(kbgn,ip),height(kbgn,ip),kend-kbgn+1,0)
CALL xwdwof
END DO ! ip
END IF ! myproc == 0
RETURN
END SUBROUTINE vprofil
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE SPLTPARA ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE spltpara(inc,MIN,MAX,ovr,hlf,zro,col1,col2,pltvar),4
!
!-----------------------------------------------------------------------
!
! PURPOSE:
! Set some parameters for one plot.
!
!-----------------------------------------------------------------------
!
! AUTHOR:
! Min Zou (3/2/98)
!
! Modification history:
!
!-----------------------------------------------------------------------
!
! INPUT:
! inc interval of the contour
! min the minimum value for the contour
! max the maximum valur foj the contour
! ovr overlay option
! hlf the contour highlight frequency
! zro define the attributes of zero contours
! col1 the start color index for contour
! col2 the end color index for contour
! pltvar the plot name
! len the length of pltvar
!
!-----------------------------------------------------------------------
!
INTEGER :: ovr,hlf,zro,col1,col2
REAL :: inc, MIN, MAX
CHARACTER (LEN=12) :: pltvar
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
CALL ctrinc
( inc, MIN, MAX )
CALL overlay
(ovr)
CALL xhlfrq (hlf)
CALL xczero (zro)
CALL ctrcol
( col1,col2)
CALL varplt
( pltvar )
RETURN
END SUBROUTINE spltpara
SUBROUTINE fillmissval (m, n, xl, xr, yb,yt ) 1
REAL :: x1,x2,y1,y2
REAL :: xra(4), yra(4)
INTEGER :: missval_colind, missfill_opt ! miss value color index
COMMON /multi_value/ missfill_opt,missval_colind
x1 = xl + (xr-xl)/REAL(m)*0.5
x2 = xr - (xr-xl)/REAL(m)*0.5
y1 = yb + (yt-yb)/REAL(n)*0.5
y2 = yt - (yt-yb)/REAL(n)*0.5
xra(1) = x1
xra(2) = x2
xra(3) = x2
xra(4) = x1
yra(1) = y1
yra(2) = y1
yra(3) = y2
yra(4) = y2
CALL xcolor(missval_colind)
CALL xfilarea(xra, yra, 4)
RETURN
END SUBROUTINE fillmissval
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE HINTRP ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE hintrp(nx,ny,nz,a3din,z3d,zlevel, a2dout) 7
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Interpolate a 3-D array to horizontal level z=zlevel.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! Based on original SECTHRZ.
! 12/10/98.
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
! 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
!
! a3din 3-d input array
! z3d z-coordinate of data in a3din
! zlevel Level to which data is interpolated.
!
! OUTPUT:
! a2dout 2-d output array interpolated to zlevel
!
!-----------------------------------------------------------------------
!
! Parameters of output
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
REAL :: a3din(nx,ny,nz) ! 3-d input array
REAL :: z3d (nx,ny,nz) ! z-coordinate of data in a3din
REAL :: zlevel ! Level to which data is interpolated.
REAL :: a2dout(nx,ny) ! 2-d output array interpolated to zlevel
INTEGER :: i,j,k
!
!-----------------------------------------------------------------------
!
! Find index for interpolation
!
!-----------------------------------------------------------------------
!
DO i=1,nx-1
DO j=1,ny-1
IF(zlevel <= z3d(i,j,1)) GO TO 11
IF(zlevel >= z3d(i,j,nz-1)) GO TO 12
DO k=2,nz-2
IF(zlevel >= z3d(i,j,k).AND.zlevel < z3d(i,j,k+1)) GO TO 15
END DO
11 k=1
GO TO 15
12 k=nz-1
GO TO 15
15 a2dout(i,j)=a3din(i,j,k)+(a3din(i,j,k+1)-a3din(i,j,k))* &
(zlevel-z3d(i,j,k))/(z3d(i,j,k+1)-z3d(i,j,k))
!-----------------------------------------------------------------------
!
! If the data point is below the ground level, set the
! data value to the missing value.
!
!-----------------------------------------------------------------------
IF( zlevel < z3d(i,j,2) ) a2dout(i,j) = -9999.0
IF( zlevel > z3d(i,j,nz-1)) a2dout(i,j) = -9999.0
END DO
END DO
RETURN
END SUBROUTINE hintrp
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE HINTRP1 ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE hintrp1(nx,ny,nz, kbgn,kend,a3din,z3d,zlevel, a2dout) 13
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Interpolate a 3-D array to horizontal level z=zlevel.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! Based on original SECTHRZ.
! 12/10/98.
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
! 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
! kbgn
! kend
!
! a3din 3-d input array
! z3d z-coordinate of data in a3din
! zlevel Level to which data is interpolated.
!
! OUTPUT:
! a2dout 2-d output array interpolated to zlevel
!
!-----------------------------------------------------------------------
!
! Parameters of output
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
INTEGER :: kbgn, kend
REAL :: a3din(nx,ny,nz) ! 3-d input array
REAL :: z3d (nx,ny,nz) ! z-coordinate of data in a3din
REAL :: zlevel ! Level to which data is interpolated.
REAL :: a2dout(nx,ny) ! 2-d output array interpolated to zlevel
INTEGER :: i,j,k
!
!-----------------------------------------------------------------------
!
! Find index for interpolation
!
!-----------------------------------------------------------------------
!
DO i=1,nx-1
DO j=1,ny-1
IF(zlevel <= z3d(i,j,kbgn)) GO TO 11
IF(zlevel >= z3d(i,j,kend)) GO TO 12
DO k=kbgn,kend-1
IF(zlevel >= z3d(i,j,k).AND.zlevel < z3d(i,j,k+1)) GO TO 15
END DO
11 k=kbgn
GO TO 15
12 k=kend-1
GO TO 15
15 a2dout(i,j)=a3din(i,j,k)+(a3din(i,j,k+1)-a3din(i,j,k))* &
(zlevel-z3d(i,j,k))/(z3d(i,j,k+1)-z3d(i,j,k))
!-----------------------------------------------------------------------
!
! If the data point is below the ground level, set the
! data value to the missing value.
!
!-----------------------------------------------------------------------
IF( zlevel < z3d(i,j,kbgn) ) a2dout(i,j) = -9999.0
IF( zlevel > z3d(i,j,kend) ) a2dout(i,j) = -9999.0
END DO
END DO
RETURN
END SUBROUTINE hintrp1
SUBROUTINE indxbnds(xc,yc,zpc,zpsoilc,nx,ny,nz,nzsoil, & 1,14
xbgn,xend,ybgn,yend,zbgn,zend,zsoilbgn,zsoilend, &
ibgn,iend,jbgn,jend,kbgn,kend,ksoilbgn,ksoilend)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
! Return index bounds of the domain to be plotted
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz
INTEGER :: nzsoil
REAL :: xc (nx,ny,nz) ! x-coor of sacalar point (km)
REAL :: yc (nx,ny,nz) ! y-coor of sacalar point (km)
REAL :: zpc (nx,ny,nz) ! z-coor of sacalar point in physical
! space (km)
REAL :: zpsoilc(nx,ny,nzsoil) ! z-coor of sacalar point in physical
! space (m) for soil model
REAL :: xbgn,xend,ybgn,yend,zbgn,zend,zsoilbgn,zsoilend
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend,ksoilbgn,ksoilend
INTEGER :: i,j,k
!----------------------------------------------------------------------
!
! Include files
!
!----------------------------------------------------------------------
INCLUDE 'mp.inc'
!
!----------------------------------------------------------------------
INTEGER :: nxlg,nylg
INTEGER :: istatus
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begining of executable code ...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
nxlg = (nx-3)*nproc_x+3
nylg = (ny-3)*nproc_y+3
IF(xbgn /= xend) THEN
IF (xbgn >= xc(1,2,2) .AND. xbgn < xc(nx-2,2,2)) THEN
DO i = 1,nx-2
IF (xc(i,2,2) >= xbgn) EXIT ! find local ibgn
END DO
ibgn = (nx-3)*(loc_x-1) + i ! find global ibgn
ELSE
ibgn = -1
END IF
IF (xend > xc(2,2,2) .AND. xend <= xc(nx-1,2,2)) THEN
DO i = nx-1,2,-1
IF (xc(i,2,2) <= xend) EXIT
END DO
iend = (nx-3)*(loc_x-1) + i
ELSE
iend = -1
END IF
CALL mpmaxi
(ibgn)
CALL mpmaxi
(iend)
ELSE
ibgn = 2
iend = nxlg- 2
IF (myproc == 0) xbgn = xc( 2,2,2)
IF (myproc == nproc_x-1) xend = xc(nx-2,2,2)
CALL mpbcastr
(xbgn,0)
CALL mpbcastr
(xend,nproc_x-1)
END IF
IF(ybgn /= yend) THEN
IF (ybgn >= yc(2,1,2) .AND. ybgn < yc(2,ny-2,2) ) THEN
DO j = 1,ny-2
IF (yc(2,j,2) >= ybgn) EXIT
END DO
jbgn = (ny-3)*(loc_y-1) + j
ELSE
jbgn = -1
END IF
IF (yend > yc(2,2,2) .AND. yend <= yc(2,ny-1,2) ) THEN
DO j = ny-1,2,-1
IF (yc(2,j,2) <= yend) EXIT
END DO
jend = (ny-3)*(loc_y-1) + j
ELSE
jend = -1
END IF
CALL mpmaxi
(jbgn)
CALL mpmaxi
(jend)
ELSE
jbgn = 2
jend = nylg-2
IF (loc_x == 1 .AND. loc_y == 1) THEN ! processor 0
ybgn = yc(2, 2,2)
END IF
IF (loc_x == 1 .AND. loc_y == nproc_y) THEN ! processor (nporc_y-1)*nproc_x
yend = yc(2,ny-2,2)
END IF
CALL mpbcastr
(ybgn,0)
CALL mpbcastr
(yend,(nproc_y-1)*nproc_x)
END IF
IF(zbgn /= zend) THEN
kend = 2
DO k = 2,nz-1
DO j = 2,ny-2
DO i = 2,ny-2
IF(zpc(i,j,k) < zend) THEN
kend=k
GO TO 225
END IF
END DO
END DO
GO TO 235
225 CONTINUE
END DO
235 kend = MIN(kend, nz-1)
kbgn= nz-1
DO k = nz-1,2,-1
DO j = 2,ny-2
DO i = 2,ny-2
IF(zpc(i,j,k) > zbgn) THEN
kbgn=k
GO TO 250
END IF
END DO
END DO
GO TO 245
250 CONTINUE
END DO
245 kbgn = MAX(kbgn,2)
CALL mpmax0i
(kbgn,kend)
ELSE
kbgn = 2
kend = nz-2
END IF
IF(zsoilbgn /= zsoilend) THEN
!
! 05/31/2002 Zuwen He
!
! Note: k is 1 at the surface in the soil model,
! and k increase when zpsoilc decrease.
! zpsoilc=zpsoil(k)-zpsoil(1) < 0.
!
ksoilend = 1
DO k = 1,nzsoil
DO j = 2,ny-2
DO i = 2,nx-2
IF(zpsoilc(i,j,k) > zsoilend) THEN
ksoilend=k
GO TO 325
END IF
END DO
END DO
GO TO 335
325 CONTINUE
END DO
335 ksoilend = MIN(ksoilend+1, nzsoil)
ksoilbgn= nzsoil
DO k = nzsoil,1,-1
DO j = 2,ny-2
DO i = 2,nx-2
IF(zpsoilc(i,j,k) < zsoilbgn) THEN
ksoilbgn=k
GO TO 350
END IF
END DO
END DO
GO TO 345
350 CONTINUE
END DO
345 ksoilbgn = MAX(ksoilbgn-1,1)
CALL mpmax0i
(ksoilbgn,ksoilend)
ELSE
ksoilbgn = 1
ksoilend = nzsoil
END IF
IF(myproc == 0) WRITE(6,'(/1x,a,i3,a,i3)') 'ibgn =',ibgn,', iend =',iend
IF(iend < ibgn) THEN
IF(myproc == 0) WRITE(6,'(1x,a,/1x,a)') &
'iend was found smaller than ibgn. Check the input', &
'domain bounds in x direction. Program stopped.'
CALL arpsstop
('ibgn & iend error inside indxbnds.',1)
END IF
IF(myproc == 0) WRITE(6,'(1x,a,i3,a,i3)') 'jbgn =',jbgn,', jend =',jend
IF(jend < jbgn) THEN
IF(myproc == 0) WRITE(6,'(1x,a,/1x,a)') &
'jend was found smaller than jbgn. Check the input', &
'domain bounds in y direction. Program stopped.'
CALL arpsstop
('jbgn & jend error inside indxbnds.',1)
END IF
IF(myproc == 0) WRITE(6,'(1x,a,i3,a,i3)') 'kbgn =',kbgn,', kend =',kend
IF(kend < kbgn) THEN
IF(myproc == 0) WRITE(6,'(1x,a,/1x,a)') &
'kend was found smaller than kbgn. Check the input', &
'domain bounds in z direction. Program stopped.'
CALL arpsstop
('kbgn & kend error inside indxbnds.',1)
END IF
IF(myproc == 0) WRITE(6,'(1x,a,i3,a,i3)') 'ksoilbgn =', ksoilbgn, &
', ksoilend =',ksoilend
IF(ksoilend < ksoilbgn) THEN
IF(myproc == 0) WRITE(6,'(1x,a,/1x,a)') &
'ksoilend was found smaller than ksoilbgn. Check the input', &
'domain bounds in zpsoil direction. Program stopped.'
CALL arpsstop
('ksoilbgn & ksoilend error inside indxbnds.',1)
END IF
RETURN
END SUBROUTINE indxbnds
SUBROUTINE ctrsetup(zinc,zminc,zmaxc, & 85,4
zovr,zhlf,zzro,zcol1,zcol2,zlabel)
IMPLICIT NONE
REAL :: zinc,zminc,zmaxc
INTEGER :: zovr,zhlf,zzro,zcol1,zcol2
CHARACTER (LEN=*) :: zlabel
IF(zhlf <= 0.0) THEN
WRITE(6,'(/4a/a)') 'ERROR: ZHLF must be a positive value for "', &
TRIM(zlabel),'".', &
'Please check your input file. Program Stopping...'
STOP
END IF
CALL ctrinc
(zinc,zminc,zmaxc )
CALL overlay
(zovr)
CALL xhlfrq (zhlf)
CALL xczero (zzro)
CALL ctrcol
(zcol1,zcol2 )
CALL varplt
(zlabel)
RETURN
END SUBROUTINE ctrsetup
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE PLTTRN ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE plttrn(hterain,x,y,m,n,slicopt,iwrk,xwk,ywk) 3,1
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Generate terrain contours
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! hterain 2-D terrain data to contour
! x x coordinate of grid points in plot space (over on page)
! y y coordinate of grid points in plot space (up on page)
! m first dimension
! n second dimension
!
! slicopt slice orientation indicator
! slicopt = 1, x-y slice of u,v at z index kslice is plotted.
! slicopt = 2, x-z slice of u,w at y index jslice is plotted.
! slicopt = 3, y-z slice of v,w at x index islice is plotted.
! slicopt = 4, x-y slice of u,v at z index islice is plotted.
! slicopt = 5, xy-z cross section of wind islice is plotted.
! slicopt = 6, data field on constant p-level is plotted.
! slicopt = 0, all of the three slices above are plotted.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: m,n
REAL :: hterain(m,n)
REAL :: x(m,n)
REAL :: y(m,n)
INTEGER :: slicopt
INTEGER, INTENT(INOUT) :: iwrk(m,n)
REAL , INTENT(INOUT) :: xwk(m,n),ywk(m,n)
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
REAL :: ctinc,ctmin,ctmax,vtunt ! contour interval and vector unit
COMMON /incunt/ ctinc,ctmin,ctmax,vtunt
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
REAL :: ztmin,ztmax
INTEGER :: ovrtrn ,trnplt ! overlay terrain option (0/1)
REAL :: trninc,trnmin, trnmax ! terrain interval minimum, maximum
COMMON /trnpar/ trnplt,ovrtrn,trninc,trnmin, trnmax,ztmin,ztmax
REAL :: zlevel
COMMON /sliceh/zlevel
INTEGER :: col_table,pcolbar
COMMON /coltable/col_table,pcolbar
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
REAL :: cl(500)
INTEGER :: ncl
REAL :: z02,xl,xr,yt,yb,xfinc
INTEGER :: mode1
INTEGER :: istatus
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF( ovrtrn == 0 .OR. ztmax-ztmin < 1.0E-20 ) RETURN
!
!-----------------------------------------------------------------------
!
! Overlay terrain contour if required in x-y level
! or Plot terrain outline in slice zlevel
!
!-----------------------------------------------------------------------
!
CALL xqmap(xl,xr,yb,yt)
cl(1)=0.0
IF(slicopt == 1 .OR. slicopt == 8 .OR. slicopt == 9) THEN
CALL ctrinc
( trninc,trnmin, trnmax )
IF( trninc == 0.0) THEN
cl(2)=cl(1)+ xfinc(ztmax-ztmin)/2
IF(cl(2)-cl(1) == 0.0) cl(2)=cl(1)+1.0
mode1=1
CALL xnctrs(6,18)
ELSE
cl(2)=cl(1)+trninc
CALL xnctrs(1,300)
IF(ztmin == 0.0 .AND. ztmax == 0.0) THEN
mode1=1
ELSE
mode1=3
END IF
END IF
CALL xctrlim(ctmin,ctmax)
IF (trnplt == 1) THEN
CALL xthick(2)
CALL xctrclr(trcolor, trcolor)
IF(mode1 == 3) THEN
ncl=FLOOR( (ztmax-ztmin)/trninc ) + 1
cl(1)=ztmin
cl(2)=cl(1)+trninc
END IF
CALL xconta(hterain,x,y,iwrk,m,m,n,cl,ncl,mode1)
ELSE IF (trnplt == 2) THEN
CALL xctrclr(icolor, icolor1)
IF(mode1 == 3) THEN
ncl=FLOOR( (ztmax-ztmin)/trninc ) + 1
cl(1)=ztmin
cl(2)=cl(1)+trninc
END IF
CALL xcolfil(hterain,x,y,iwrk,xwk,ywk,m,m,n,cl,ncl,mode1)
CALL xchsiz(0.025*(yt-yb))
CALL xcpalet(pcolbar)
ELSE IF (trnplt == 4) THEN
CALL xctrclr(icolor, icolor1)
CALL xconta(hterain,x,y,iwrk,m,m,n,cl,ncl,mode1)
END IF
ELSE IF(slicopt == 4.OR.slicopt == 6.OR.slicopt == 7) THEN
CALL xcolor(trcolor)
z02=zlevel*1000.
CALL xthick(2)
CALL xcontr(hterain,x,y,iwrk,m,m,n,z02)
CALL xthick(1)
END IF
RETURN
END SUBROUTINE plttrn
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE PLTAXES ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE pltaxes(slicopt,dx,dy) 3,3
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
!-----------------------------------------------------------------------
!
! AUTHOR: M. Xue
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
!
! INPUT:
! slicopt slice orientation indicator
! = 1, x-y slice of at k=kslice is plotted.
! = 2, x-z slice of at j=jslice is plotted.
! = 3, y-z slice of at i=islice is plotted.
! = 4, horizontal slice at z index islice is plotted.
! = 5, xy-z cross section of wind islice is plotted.
! = 6, data field on constant p-level is plotted.
! = 0, all of the three slices above are plotted.
! dx Spacing between the x-axis tick marks
! dy Spacing between the y-axis tick marks
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
REAL :: dx,dy
INTEGER :: slicopt
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: layover
COMMON /laypar/ layover
INTEGER :: presaxis_no
REAL :: pres_val(20), pres_z(20)
COMMON /pressbar_par/presaxis_no,pres_val,pres_z
REAL :: lblmag, ctrlbsiz, axlbsiz
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
INTEGER :: timeovr
COMMON /timover/ timeovr
REAL :: x101, y101, x102,y102
COMMON /slicev1/x101, y101, x102,y102
INTEGER :: xfont ! the font of character
INTEGER :: haxisu, vaxisu
INTEGER :: lbaxis
INTEGER :: tickopt
INTEGER :: axlbfmt
REAL :: hmintick,vmajtick,vmintick,hmajtick
COMMON /var_par/ xfont,haxisu,vaxisu,lbaxis,tickopt,hmintick, &
vmajtick, vmintick,hmajtick,axlbfmt
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
REAL :: axnmag
REAL :: xl,xr,yb,yt,pl,pr,pb,pt
REAL :: xtem1, xtem2 !local temporary variable
REAL :: x1,x2, y1,y2, xstep, ystep, xmstep, ymstep
INTEGER :: LEN
CHARACTER (LEN=15) :: ylabel
CHARACTER (LEN=15) :: xlabel
!
!-----------------------------------------------------------------------
!
! Set-up variables for tick marks and draw axes
!
!-----------------------------------------------------------------------
!
CALL xqmap(xl,xr, yb,yt)
CALL setcords
(xl,xr,yb,yt,dx,dy, slicopt, &
x1,x2,y1,y2,xlabel,ylabel,xstep,ystep,xmstep,ymstep)
CALL xqpspc( pl, pr, pb, pt)
axnmag = axlbsiz*MIN(pt-pb, pr-pl)*lblmag
CALL xaxnmg( axnmag )
IF(slicopt == 5) THEN
IF( ABS(y101-y102) <= 1.0E-3 ) THEN
xtem1 = x101
xtem2 = x102
ELSE IF(ABS(x101-x102) <= 1.0E-3 ) THEN
xtem1 = y101
xtem2 = y102
ELSE
xtem1 = SQRT(x101*x101 + y101*y101)
xtem2 = xtem1 + SQRT( (y102-y101)*(y102-y101) + &
(x102-x101)*(x102-x101) )
END IF
ELSE
xtem1 = x1
xtem2 = x2
END IF
CALL xmap(xtem1,xtem2,y1,y2)
IF( layover == 0) THEN
CALL xaxsor(0.0, 0.0)
! call xthick(2)
CALL xaxsca1( xtem1,xtem2,xstep,xmstep, y1,y2,ystep,ymstep )
CALL xthick(1)
END IF
!
! Plot pressure axis
!
CALL xqpspc(pl, pr, pb, pt)
IF(presaxis_no > 0 .AND.timeovr == 0 .AND. &
(slicopt == 2 .OR. slicopt == 3 .OR. slicopt == 5 .OR. &
slicopt == 10 .OR. slicopt ==11) ) THEN
x1 = pl - (pr-pl)*0.25
x2 = pl
y1 = pb
y2 = pt
CALL xpspac(x1,x2,y1,y2)
y1 = yb
y2 = yt
CALL xmap(x1,x2,y1,y2)
CALL xaxfmt('(I4)')
CALL xyaxis(x1+0.40*(x2-x1),pres_z,pres_val,presaxis_no)
CALL xchori(90.)
CALL xcharc(x1,yb+(yt-yb)*0.5 ,'Pressure(mb)')
CALL xchori(0.)
END IF
!
! Restore the original plotting scape
!
CALL xpspac( pl, pr, pb, pt)
CALL xmap(xl,xr, yb,yt)
IF(layover > 1) THEN
CALL xchsiz( 0.018*(yt-yb) * lblmag )
ELSE
CALL xchsiz( 0.020*(yt-yb) * lblmag )
END IF
IF(lbaxis == 1 .AND. timeovr == 0) THEN
CALL xcolor(lbcolor)
LEN=LEN_TRIM(xlabel)
CALL strmin
(xlabel,LEN)
CALL xcharc( xl+(xr-xl)*0.5,yb-0.08*(yt-yb),xlabel(1:LEN))
LEN=LEN_TRIM(ylabel)
CALL strmin
(ylabel,LEN)
CALL xchori(90.)
CALL xcharc(xl-0.10*(xr-xl),yb+(yt-yb)*0.5,ylabel(1:LEN))
CALL xchori(0.)
END IF
RETURN
END SUBROUTINE pltaxes
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE PLTEXTRA ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE pltextra(slicopt, pltopt) 3,2
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Plot extra things such as map, boxes, polygons and stations
! in a 2D plot
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
!
! MODIFICATION HISTORY:
!
! 6/08/92 (K. Brewster)
! Added full documentation.
!
! 8/28/94 (M. Zou)
! Added color routing , overlay terrain.
!
! 1/24/96 (J. Zong and M. Xue)
! Fixed a problem related to finding the minimum and maximum of the
! 2D array, a, when there exist missing data. Initial min. and max.
! should be set to values other than the missing value, -9999.0.
!
!-----------------------------------------------------------------------
!
! INPUT:
! slicopt slice orientation indicator
! = 1, x-y slice of at k=kslice is plotted.
! = 2, x-z slice of at j=jslice is plotted.
! = 3, y-z slice of at i=islice is plotted.
! = 4, horizontal slice at z index islice is plotted.
! = 5, xy-z cross section of wind islice is plotted.
! = 6, data field on constant p-level is plotted.
! = 0, all of the three slices above are plotted.
! plot
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: slicopt, pltopt
INCLUDE 'arpsplt.inc'
!
!-----------------------------------------------------------------------
!
! Plotting control common blocks
!
!-----------------------------------------------------------------------
!
INTEGER :: ovrstaopt
INTEGER :: ovrstam,staset,ovrstan,ovrstav,stacol,markprio,wrtstax
INTEGER :: nsta_typ,sta_typ(10),sta_marktyp(10),sta_markcol(10)
REAL :: sta_marksz(10),wrtstad
CHARACTER (LEN=132) :: stalofl
COMMON /sta_par/ ovrstaopt,ovrstam,staset,ovrstan,ovrstav,stacol, &
markprio,nsta_typ,sta_typ,sta_marktyp, &
sta_markcol,sta_marksz,stalofl,wrtstax,wrtstad
INTEGER :: icolor,icolor1,lbcolor,trcolor ! required color
COMMON /recolor/icolor,icolor1,lbcolor,trcolor
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: timeovr
COMMON /timover/ timeovr
INTEGER :: ovrmap
COMMON /mappar / ovrmap
INTEGER :: number_of_boxes,boxcol
REAL :: bx1(10),bx2(10),by1(10),by2(10)
COMMON /boxesopt/number_of_boxes,boxcol,bx1,bx2,by1,by2
INTEGER :: num_of_verts
INTEGER :: number_of_polys,polycol
REAL :: vertx(max_verts,max_polys),verty(max_verts,max_polys)
COMMON /polysopt/number_of_polys,polycol,vertx,verty
REAL :: lblmag, ctrlbsiz, axlbsiz
COMMON /labmag/ lblmag, ctrlbsiz, axlbsiz
INTEGER :: nunit
INTEGER :: i,j
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!
!-----------------------------------------------------------------------
!
! Plot map boundaries.
!
!-----------------------------------------------------------------------
!
CALL xcolor(lbcolor)
IF((slicopt == 1 .OR. slicopt == 4 .OR. slicopt == 6 .OR. &
slicopt == 7 .OR. slicopt == 8 .OR. slicopt == 9) &
.AND.ovrmap == 1 &
.AND.(timeovr == 0 .OR. (timeovr == 1 .AND. pltopt == 2) ))THEN
CALL getunit
(nunit)
CALL drawmap
(nunit)
CLOSE (UNIT=nunit)
CALL retunit(nunit)
CALL xthick(1)
END IF
!
!-----------------------------------------------------------------------
!
! Draw boxes
!
!-----------------------------------------------------------------------
!
IF(number_of_boxes /= 0 .AND. &
(slicopt == 1 .OR. slicopt == 4 .OR. slicopt == 6 .OR. &
slicopt == 7 .OR. slicopt == 8 .OR. slicopt == 9) &
.AND. timeovr == 0 ) THEN
CALL xthick(1)
CALL xcolor(boxcol)
CALL xbrokn(6,3,6,3)
DO i=1,number_of_boxes
CALL xbox(bx1(i),bx2(i),by1(i),by2(i))
END DO
CALL xthick(1)
CALL xfull
END IF
!
!-----------------------------------------------------------------------
!
! Draw polylines
!
!-----------------------------------------------------------------------
!
IF(number_of_polys /= 0 .AND. &
(slicopt == 1 .OR. slicopt == 4 .OR. slicopt == 6 .OR. &
slicopt == 7 .OR. slicopt == 8 .OR. slicopt == 9) &
.AND. timeovr == 0 ) THEN
CALL xthick(2)
CALL xcolor(polycol)
! CALL xbrokn(6,3,6,3)
DO j=1,number_of_polys
num_of_verts=0
DO i=1,max_verts
IF(vertx(i,j) /= -9999. .AND. verty(i,j) /= -9999.) &
num_of_verts = num_of_verts +1
END DO
IF(num_of_verts /= 0 ) CALL xcurve(vertx(1,j),verty(1,j),num_of_verts, 0)
END DO
CALL xthick(1)
CALL xfull
END IF
RETURN
END SUBROUTINE pltextra
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE SMOOTH9PMV ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
!
SUBROUTINE smooth9pmv( arr, nx,ny,ibgn,iend,jbgn,jend, tem1 ) 31
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! 1 2 1
! Smooth a 2-D array by the filter of { 2 4 2 }
! 1 2 1
!
!-----------------------------------------------------------------------
!
! AUTHOR: Yuhe Liu
!
! 5/3/94
!
! Modification History
! 8/20/1995 (M. Xue)
! Fixed errors in the index bound of loops 100 and 200.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! nx Number of grid points in the x-direction
! ny Number of grid points in the y-direction
! ibgn First index in x-direction in the soomthing region.
! iend Last index in x-direction in the soomthing region.
! jbgn First index in j-direction in the soomthing region.
! jend Last index in j-direction in the soomthing region.
!
! arr 2-D array
!
! OUTPUT:
!
! arr 2-D array
!
! TEMPORARY:
!
! tem1 Temporary 2-D array
!
!-----------------------------------------------------------------------
!
! 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 :: ibgn
INTEGER :: iend
INTEGER :: jbgn
INTEGER :: jend
!
REAL :: arr (nx,ny) ! 2-D array
!
REAL :: tem1(nx,ny) ! Temporary array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,ip,im,jp,jm
REAL :: wtf,mv
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
wtf = 1.0/16.0
mv = -9999.0 ! missing value flag
DO i=1,nx
DO j=1,ny
IF( ABS(arr(i,j)-mv) <= 0.1) arr(i,j)=mv
END DO
END DO
DO j = jbgn,jend
DO i = ibgn,iend
ip=MIN(nx,i+1)
im=MAX( 1,i-1)
jp=MIN(ny,j+1)
jm=MAX( 1,j-1)
tem1(i,j) = wtf &
* ( arr(im,jm) + 2.*arr(i,jm) + arr(ip,jm) &
+ 2.*arr(im,j ) + 4.*arr(i,j ) + 2.*arr(ip,j ) &
+ arr(im,jp) + 2.*arr(i,jp) + arr(ip,jp))
IF(arr(im,jm) == mv.OR.arr(i,jm) == mv.OR.arr(ip,jm) == mv.OR. &
arr(im,j ) == mv.OR.arr(i,j ) == mv.OR.arr(ip,j ) == mv.OR. &
arr(im,jp) == mv.OR.arr(i,jp) == mv.OR.arr(ip,jp) == mv)THEN
tem1(i,j)=mv
END IF
END DO
END DO
DO j = jbgn,jend
DO i = ibgn,iend
arr(i,j) = tem1(i,j)
END DO
END DO
RETURN
END SUBROUTINE smooth9pmv
SUBROUTINE buoycy_plt(nx,ny,nz,ptprt,pprt,qv,qc,qr,qi,qs,qh, & 1
ptbar,pbar,rhobar,qvbar, wbuoy, tem1)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Calculate the total buoyancy including liquid and solid water
! loading.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91.
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 3/10/93 (M. Xue)
! The buoyancy term is reformulated. The previous formula was
! in error. The water loading was calculated wrong, resulting in
! a value of the water loading that is typically an order of
! magnitude too small.
!
! 3/25/94 (G. Bassett & M. Xue)
! The buoyancy terms are reformulated for better numerical accuracy.
! Instead of storing numbers which had the form (1+eps)*(1+eps1)
! (eps << 1 and eps1 <<1), terms were expanded out, and most of the
! high order terms neglected, except for the second order terms
! in ptprt, pprt and qvbar.
!
! 9/10/94 (D. Weber & Y. Lu)
! Cleaned up documentation.
!
! 6/21/95 (Alan Shapiro)
! Fixed bug involving missing qvpert term in buoyancy formulation.
!
! 10/15/97 (Donghai Wang)
! Added a new option for including the second order terms.
!
! 11/05/97 (D. Weber)
! Changed lower loop bounds in DO LOOP 400 for computing the
! buoyancy term from k=3,nz-2 to k=2,nz-1. Level k=2 data will be
! used in the hydrostatic pprt lower boundary condition (removed
! DO LOOP 410 used to set wbuoy = 0.0 for k= 2 and nz-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 direction.
!
! ptprt Perturbation potential temperature at a 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)
!
! ptbar Base state potential temperature (K)
! pbar Base state pressure (Pascal)
! rhobar Base state density rhobar
! qvbar Base state water vapor specific humidity (kg/kg)
!
! OUTPUT:
!
! wbuoy The total buoyancy force (kg/(m*s)**2)
!
! WORK ARRAYS:
!
! tem1 Temporary work array.
!
!-----------------------------------------------------------------------
!
! Variable Declarations
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
REAL :: ptprt (nx,ny,nz) ! Perturbation potential temperature
! at a given time level (K)
REAL :: pprt (nx,ny,nz) ! Perturbation pressure at a given time
! level (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 :: 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 density rhobar
REAL :: qvbar (nx,ny,nz) ! Base state water vapor specific
! humidity(kg/kg)
REAL :: wbuoy(nx,ny,nz) ! Total buoyancy in w-eq. (kg/(m*s)**2)
REAL :: tem1 (nx,ny,nz) ! Temporary work array.
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
REAL :: g5
REAL :: pttem,tema
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc' ! Global model control parameters
INCLUDE 'phycst.inc' ! Physical constants
!
!-----------------------------------------------------------------------
!
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!
!-----------------------------------------------------------------------
!
! The total buoyancy
!
! wbuoy = rhobar*g ( ptprt/ptbar-pprt/(rhobar*csndsq)+
! qvprt/(rddrv+qvbar)-(qvprt+qc+qr+qs+qi+qh)/(1+qvbar)
! -(ptprt*ptprt)/(ptbar*ptbar) !2nd-order
! +0.5*(ptprt*pprt)/(cpdcv*ptbar*pbar)) !2nd-order
!
! and rddrv=rd/rv, cp, cv, rd and rv are defined in phycst.inc.
!
! Here, the contribution from pprt (i.e., term pprt/(rhobar*csndsq))
! is evaluated inside the small time steps, therefore wbuoy
! does not include this part.
!
! The contribution from ptprt is calculated inside the small time
! steps if the potential temperature equation is solved inside
! small time steps, i.e., if ptsmlstp=1.
!
!-----------------------------------------------------------------------
!
tema = 1.0/cpdcv
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
pttem = ptprt(i,j,k)/ptbar(i,j,k)
tem1(i,j,k) = pttem* &
(1.0-pttem+0.5*pprt(i,j,k)*(tema/pbar(i,j,k)))
END DO
END DO
END DO
!
!-----------------------------------------------------------------------
!
! Add on the contributions to the buoyancy from the water vapor
! content and the liquid and ice water loading.
!
!-----------------------------------------------------------------------
!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
tem1(i,j,k) = tem1(i,j,k) &
+ (qv(i,j,k) - qvbar(i,j,k))/(rddrv + qvbar(i,j,k)) &
- (qv(i,j,k) - qvbar(i,j,k) + qc(i,j,k) + qr(i,j,k) + &
qs(i,j,k) + qi(i,j,k) + qh(i,j,k))/(1 + qvbar(i,j,k))
END DO
END DO
END DO
!
!-----------------------------------------------------------------------
!
! Then the total buoyancy:
!
! wbuoy = tem1 * rhobar * g
!
! averged to the w-point on the staggered grid.
!
!-----------------------------------------------------------------------
!
DO k=1,nz-1
DO j=1,ny-1
DO i=1,nx-1
wbuoy(i,j,k)= tem1(i,j, k )*rhobar(i,j, k )*g
END DO
END DO
END DO
RETURN
END SUBROUTINE buoycy_plt
!#######################################################################
!
! TO DETERMINE THE CONTOUR INCRMENT AND CONTOUR VALUES FOR a
! max and min from a data set.
!
!#######################################################################
SUBROUTINE setcontr(zmin,zmax,nminctr,nmaxctr,cl,ncl,zminc,zmaxc) 1
IMPLICIT NONE
REAL, INTENT(IN) :: zmin, zmax ! field min, and max
INTEGER, INTENT(IN) :: nminctr, nmaxctr ! contour number limits
REAL, INTENT(INOUT) :: cl(*) ! contour levels
INTEGER, INTENT(OUT) :: ncl ! actual contour number
REAL, INTENT(OUT) :: zminc, zmaxc ! first and last contours
INTEGER :: nch
COMMON /XOUTCH/ nch
INTEGER :: LCPTN,LABTYP,ICLF,LHILIT,IHLF,KCT01
REAL :: clref
COMMON /XCRF17/clref,LCPTN,LABTYP,ICLF,LHILIT,IHLF,KCT01
REAL :: diff, zinc, clv
REAL :: eps
INTEGER :: kcount, kzinc
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code ...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
zinc = cl(2) - cl(1)
diff = zmax-zmin
IF(diff <= ABS(zinc)*1.0E-6) THEN
WRITE(nch,'(1x,a,/1x,a)') &
'Bad first guess of contour increment or field is constant', &
'number of contours is one.'
ncl = 1
cl(1) = zmin
cl(2) = zmin + 1.0
RETURN
ENDIF
kcount = 0
1 CONTINUE
eps = 0.001*zinc
kcount = kcount + 1
IF (kcount > 20) GOTO 998 ! too many loops, abort the program
kzinc = (zmin-clref)/zinc
zminc = kzinc*zinc + clref
kzinc = (zmax-clref)/zinc
zmaxc = kzinc*zinc + clref
IF(zmin-clref > 0.0) ZMINC=ZMINC+ZINC
IF(zmax-clref < 0.0) ZMAXC=ZMAXC-ZINC
CLV = ZMINC-ZINC
NCL = 0
6 CLV = CLV + ZINC
IF(CLV-ZMAXC-EPS > 0.0) GOTO 8 ! Reach zmax, check the contour levels
NCL = NCL + 1
IF(NCL > nmaxctr) THEN
ZINC=ZINC*2
WRITE(nch,'(a,I3,a,E10.3)') &
' Number of contours > ',nmaxctr,' ,Zinc is doubled. Zinc=',zinc
GO TO 1
ENDIF
IF( ABS( CLV-CLREF ) < EPS ) CLV=CLREF
CL(NCL) = CLV
GOTO 6
8 CONTINUE
IF( NCL < nminctr) THEN
ZINC=ZINC/2
WRITE(nch,'(a,I3,a,E10.3)') &
' Number of contours < ',nminctr,' ,Zinc is halved. Zinc=',zinc
GO TO 1
ENDIF
WRITE(nch,'(a,I5,2(a,E12.4),a,E12.5)') &
' * Number of contours= ',ncl, &
' MIN=',zminc, ' MAX=', zmaxc,' INC=',zinc
RETURN
998 WRITE(NCH,*)' Contour levels can not be selected by XCNTLV.'
WRITE(NCH,*) &
' Plz alter input contour interval or limits of contour number'
RETURN
END SUBROUTINE setcontr