mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
161 lines
4.7 KiB
Plaintext
161 lines
4.7 KiB
Plaintext
;********************************************************
|
|
; Plot storm stracks from wrfout files.
|
|
;********************************************************
|
|
;
|
|
; JUN-18-2005
|
|
; So-Young Ha (MMM/NCAR)
|
|
; SEP-01-2006
|
|
; Slightly modified by Mary Haley to add some extra comments.
|
|
; ===========================================
|
|
|
|
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
|
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
|
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
|
|
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl"
|
|
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
|
|
|
|
|
|
begin
|
|
|
|
; DATES
|
|
date = (/1512,1600,1612,1700,1712,1800,1812,1900/)
|
|
ndate = dimsizes(date)
|
|
|
|
sdate = sprinti("%4.0i",date)
|
|
|
|
; Experiment name (for legend)
|
|
EXP = (/"EXP_I"/) ; (/"EXP_I","EXP_II","EXP_III"/)
|
|
nexp = dimsizes(EXP)
|
|
|
|
; To get lat/lon info.
|
|
|
|
a = addfile("wrfout_d01_2003-07-15_00:00:00.nc","r")
|
|
|
|
lat2d = a->XLAT(0,:,:)
|
|
lon2d = a->XLONG(0,:,:)
|
|
dimll = dimsizes(lat2d)
|
|
nlat = dimll(0)
|
|
mlon = dimll(1)
|
|
|
|
; Sea Level Pressure
|
|
slp = wrf_user_getvar(a,"slp",0)
|
|
dims = dimsizes(slp)
|
|
|
|
; Array for track
|
|
time = new(ndate,string)
|
|
imin = new(ndate,integer)
|
|
jmin = new(ndate,integer)
|
|
smin = new(ndate,integer)
|
|
|
|
; =======
|
|
; ndate
|
|
; =======
|
|
fs = systemfunc("ls wrfout*00")
|
|
nfs= dimsizes(fs)
|
|
if(nfs .ne. ndate) then
|
|
print("Check input data:"+nfs+" .ne. "+ndate)
|
|
end if
|
|
|
|
do ifs=0,nfs-1
|
|
f = addfile(fs(ifs)+".nc","r")
|
|
time(ifs) = wrf_user_list_times(f)
|
|
; print(time(ifs))
|
|
slp2d = wrf_user_getvar(f,"slp",0)
|
|
|
|
; We need to convert 2-D array to 1-D array to find the minima.
|
|
slp1d = ndtooned(slp2d)
|
|
smin(ifs) = minind(slp1d)
|
|
|
|
; Convert the index for 1-D array back to the indeces for 2-D array.
|
|
minij = ind_resolve(ind(slp1d.eq.min(slp2d)),dims)
|
|
imin(ifs) = minij(0,0)
|
|
jmin(ifs) = minij(0,1)
|
|
|
|
; print(time(ifs)+" : "+min(slp2d)+" ("+imin(ifs)+","+jmin(ifs)+")")
|
|
end do
|
|
;
|
|
|
|
; Graphics section
|
|
|
|
wks=gsn_open_wks("ps","track") ; Open PS file.
|
|
gsn_define_colormap(wks,"BlGrYeOrReVi200") ; Change color map.
|
|
|
|
res = True
|
|
res@gsnDraw = False ; Turn off draw.
|
|
res@gsnFrame = False ; Turn off frame advance.
|
|
res@gsnMaximize = True ; Maximize plot in frame.
|
|
|
|
res@tiMainString = "Hurricane Isabel" ; Main title
|
|
|
|
WRF_map_c(a,res,0) ; Set up map resources
|
|
; (plot options)
|
|
plot = gsn_csm_map(wks,res) ; Create a map.
|
|
|
|
; Set up resources for polymarkers.
|
|
gsres = True
|
|
gsres@gsMarkerIndex = 16 ; filled dot
|
|
;gsres@gsMarkerSizeF = 0.005 ; default - 0.007
|
|
cols = (/5,160,40/)
|
|
|
|
; Set up resources for polylines.
|
|
res_lines = True
|
|
res_lines@gsLineThicknessF = 3. ; 3x as thick
|
|
|
|
dot = new(ndate,graphic) ; Make sure each gsn_add_polyxxx call
|
|
line = new(ndate,graphic) ; is assigned to a unique variable.
|
|
|
|
; Loop through each date and add polylines to the plot.
|
|
do i = 0,ndate-2
|
|
res_lines@gsLineColor = cols(0)
|
|
xx=(/lon2d(imin(i),jmin(i)),lon2d(imin(i+1),jmin(i+1))/)
|
|
yy=(/lat2d(imin(i),jmin(i)),lat2d(imin(i+1),jmin(i+1))/)
|
|
line(i) = gsn_add_polyline(wks,plot,xx,yy,res_lines)
|
|
end do
|
|
|
|
lon1d = ndtooned(lon2d)
|
|
lat1d = ndtooned(lat2d)
|
|
|
|
; Loop through each date and add polymarkers to the plot.
|
|
do i = 0,ndate-1
|
|
print("dot:"+lon1d(smin(i))+","+lat1d(smin(i)))
|
|
gsres@gsMarkerColor = cols(0)
|
|
dot(i)=gsn_add_polymarker(wks,plot,lon1d(smin(i)),lat1d(smin(i)),gsres)
|
|
end do
|
|
|
|
; Date (Legend)
|
|
txres = True
|
|
txres@txFontHeightF = 0.015
|
|
txres@txFontColor = cols(0)
|
|
|
|
txid1 = new(ndate,graphic)
|
|
; Loop through each date and draw a text string on the plot.
|
|
do i = 0, ndate-1
|
|
txres@txJust = "CenterRight"
|
|
ix = smin(i) - 4
|
|
print("Eye:"+ix)
|
|
if(i.eq.1) then
|
|
txres@txJust = "CenterLeft"
|
|
ix = ix + 8
|
|
end if
|
|
txid1(i) = gsn_add_text(wks,plot,sdate(i),lon1d(ix),lat1d(ix),txres)
|
|
end do
|
|
|
|
; Add marker and text for legend. (Or you can just use "pmLegend" instead.)
|
|
txres@txJust = "CenterLeft"
|
|
|
|
txid2 = new(nexp,graphic)
|
|
pmid2 = new(nexp,graphic)
|
|
do i = 0,nexp-1
|
|
gsres@gsMarkerColor = cols(i)
|
|
txres@txFontColor = cols(i)
|
|
ii = ((/129,119,109/)) ; ilat
|
|
jj = ((/110,110,110/)) ; jlon
|
|
ji = ii*mlon+jj ; col x row
|
|
pmid2(i) = gsn_add_polymarker(wks,plot,lon1d(ji(i)),lat1d(ji(i)),gsres)
|
|
txid2(i) = gsn_add_text(wks,plot,EXP(i),lon1d(ji(i)+5),lat1d(ji(i)),txres)
|
|
end do
|
|
|
|
draw(plot)
|
|
frame(wks)
|
|
end
|