;************************************************ ; This program picks a temperature profile from the merra-2 ; opendap server that corresponds to a lat,lon,time ; point from an aircraft flight track ; ; Website that points you to the dataset ; http://disc.sci.gsfc.nasa.gov/uui/datasets?keywords=%22MERRA-2%22 ; ; Click on dataset M2T3NVASM ; http://disc.sci.gsfc.nasa.gov/uui/datasets/GES_DISC_M2T3NVASM_V5.12.4/summary?keywords=%22MERRA-2%22 ; ; Click on "Web Services" Button ; ; Select OPENDAP (DODS) ; ; Browse to your file and click on the filename ; ; The web site "OPeNDAP Server Dataset Access Form" will help you build a url to the file ;*********************************************** pro volcano_plot_merra_wind_sub,date,time,xlat,xlon,llat,llon,ulat,rlon,$ u850_merra,v850_merra,lon_merra,lat_merra,uwind,vwind,lat_f,lon_f,volcano_name,$ u500_merra,v500_merra ;syear='2008' ;volcano_name='ambrym_vanuatu' ;xlon=168.12 & xlat=-16.25 ;volcano location ;filedir='/uufs/chpc.utah.edu/common/home/u0079358/volcano/subset_files/' ;file_str=volcano_name+'.subset.'+syear+'*.cdf' ;files=file_search(filedir+file_str,count=num_files) ;for fidx=0,num_files-1 do begin ;fidx=0 ; Input date and time ;date='20080323' & time='0540' ;parts=strsplit(file_basename(files[fidx]),'.',/extract) ;date=parts[2] & time=parts[3] ; Center Lat and Lon center_lat=xlat & center_lon=xlon ; Define bounding box for map plot ;delta_degree=2.0 ;delta_degree=5.0 ;delta_degree=10.0 ;delta_degree=15.0 ;delta_degree=20.0 ;delta_degree=30.0 ;ulat=center_lat+delta_degree;/2.0 ;llat=center_lat-delta_degree;/2.0 ;rlon=center_lon+delta_degree+1.2*(delta_degree) ;llon=center_lon-delta_degree-1.2*(delta_degree) ;*********************************************************************** ; Create time range for synoptic plots ;*********************************************************************** syear=strmid(date,0,4) smonth=strmid(date,4,2) sday=strmid(date,6,2) shour=strmid(time,0,2) sminute=strmid(time,2,2) print,smonth,sday,syear,shour,sminute,0 julian_day=julday(smonth,sday,syear,shour,sminute,0) julian_day_synoptic=timegen(start=julday(smonth,sday,syear)-1D,$ final=julday(smonth,sday,syear)+1D,step_size=1,units='Hours') caldat,julian_day_synoptic,mm_synoptic,dd_synoptic,yy_synoptic,hh_synoptic,mi_synoptic,ss_synoptic ;for i=0,n_elements(julian_day_synoptic)-1 do begin ; print,mm_synoptic[i],dd_synoptic[i],yy_synoptic[i],hh_synoptic[i],mi_synoptic[i],ss_synoptic[i] ;endfor ;*********************************************************************** ; plot snyoptic map ;*********************************************************************** ; Find the closest synopotic time to the input time closest=min(abs(julian_day_synoptic-julian_day),time_idx) julian_day_synoptic=julian_day_synoptic[time_idx] caldat,julian_day_synoptic,mm_synoptic,dd_synoptic,yy_synoptic,hh_synoptic,mi_synoptic,ss_synoptic ;print,mm_synoptic,dd_synoptic,yy_synoptic,hh_synoptic,mi_synoptic,ss_synoptic,'synoptic',closest syear_synoptic=string(yy_synoptic,format='(I4)') smonth_synoptic=string(mm_synoptic,format='(I02)') sday_synoptic=string(dd_synoptic,format='(I02)') ; Synoptic time is close enough for a plot if closest lt 0.1 then begin ; Depending on the date, choose the assimilation stream number ; Bosilovich785.pdf page 13 if julian_day_synoptic lt julday(01,01,1992) then begin asm_stream='100' endif else if julian_day_synoptic lt julday(01,01,2001) then begin asm_stream='200' endif else if julian_day_synoptic lt julday(01,01,2011) then begin asm_stream='300' endif else begin asm_stream='400' endelse ; Build the first part of the merra url ; 1hr time-averaged url = 'http://sbenson:R1a3i5n*@goldsmr4.gesdisc.eosdis.nasa.gov:80/opendap/MERRA2/M2T1NXSLV.5.12.4/'+$ syear_synoptic+'/'+smonth_synoptic+'/MERRA2_'+asm_stream+'.tavg1_2d_slv_Nx.'+$ syear_synoptic+smonth_synoptic+sday_synoptic+'.nc4?' ; Second part of the url that selects out the time, lat and lon array url2='time[0:1:23],lat[0:1:360],lon[0:1:575]' print,'getting time,lat,lon' file_id=ncdf_open(url+url2) ; Get the time variable from the merra file ; minutes since file date 00:00:00 var_id=ncdf_varid(file_id,'time') ncdf_varget,file_id,var_id,minutes ; convert merra time to julian day julian_day_merra=julday(smonth_synoptic,sday_synoptic,syear_synoptic,0,minutes,0) caldat,julian_day_merra,mm,dd,yy,hh,mi,ss ;print,mm,dd,yy,hh,mi,ss ; Get latitude array var_id=ncdf_varid(file_id,'lat') ncdf_varget,file_id,var_id,all_lat_merra ; Get longitude array var_id=ncdf_varid(file_id,'lon') ncdf_varget,file_id,var_id,all_lon_merra ncdf_close,file_id ; Find the closest merra time to synoptic closest=min(abs(julian_day_synoptic-julian_day_merra),time_idx) caldat,julian_day_merra[time_idx],mm_merra,dd_merra,yy_merra,hh_merra,mi_merra,ss_merra print,mm_merra,dd_merra,yy_merra,hh_merra,mi_merra,ss_merra,'merra' ; ; Select the synoptic variables ; url2='H250['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'U250['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'V250['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'H500['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'U500['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'V500['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'Q850['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'T850['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'U850['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'V850['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'H850['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'H1000['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'U2M['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],'+$ ; 'V2M['+string(time_idx,format='(I03)')+'][0:1:360][0:1:575],lat[0:1:360],lon[0:1:575]' ; Find the latitude range lat_idx=where(all_lat_merra le ulat+1.0 and all_lat_merra ge llat-1.0,count) lat_merra=all_lat_merra[lat_idx] ; Strings of the indices to use for lat and lon slat0=string(lat_idx[0],format='(I03)') slat1=string(lat_idx[-1],format='(I03)') ; Gets all lats and lons at one time ; url2='H250['+string(time_idx,format='(I3)')+'][0:1:360][0:1:575],'+$ ; 'U250['+string(time_idx,format='(I3)')+'][0:1:360][0:1:575],'+$ ; 'V250['+string(time_idx,format='(I3)')+'][0:1:360][0:1:575]' ; Select time and lat indexes, all lons url2='H250['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'U250['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'V250['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'H500['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'U500['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'V500['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'Q850['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'T850['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'U850['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'V850['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'H850['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'H1000['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'U2M['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575],'+$ 'V2M['+string(time_idx,format='(I03)')+']['+slat0+':'+slat1+'][0:1:575]' print,'getting profiles' file_id=ncdf_open(url+url2) var_id=ncdf_varid(file_id,'H250') ncdf_varget,file_id,var_id,h250_merra var_id=ncdf_varid(file_id,'U250') ncdf_varget,file_id,var_id,u250_merra var_id=ncdf_varid(file_id,'V250') ncdf_varget,file_id,var_id,v250_merra var_id=ncdf_varid(file_id,'H500') ncdf_varget,file_id,var_id,h500_merra var_id=ncdf_varid(file_id,'U500') ncdf_varget,file_id,var_id,u500_merra var_id=ncdf_varid(file_id,'V500') ncdf_varget,file_id,var_id,v500_merra var_id=ncdf_varid(file_id,'Q850') ncdf_varget,file_id,var_id,q850_merra var_id=ncdf_varid(file_id,'T850') ncdf_varget,file_id,var_id,t850_merra var_id=ncdf_varid(file_id,'U850') ncdf_varget,file_id,var_id,u850_merra var_id=ncdf_varid(file_id,'V850') ncdf_varget,file_id,var_id,v850_merra var_id=ncdf_varid(file_id,'H850') ncdf_varget,file_id,var_id,h850_merra var_id=ncdf_varid(file_id,'H1000') ncdf_varget,file_id,var_id,h1000_merra var_id=ncdf_varid(file_id,'U2M') ncdf_varget,file_id,var_id,u2m_merra var_id=ncdf_varid(file_id,'V2M') ncdf_varget,file_id,var_id,v2m_merra ncdf_close,file_id print,'done getting profiles' ;***************************** ; Subset out the longitudes ;***************************** if rlon le 180 then begin lon_idx=where(all_lon_merra le rlon+1.0 and all_lon_merra ge llon-1.0,count) lon_merra=all_lon_merra[lon_idx] h250_merra=h250_merra[lon_idx,*] u250_merra=u250_merra[lon_idx,*] v250_merra=v250_merra[lon_idx,*] h500_merra=h500_merra[lon_idx,*] u500_merra=u500_merra[lon_idx,*] v500_merra=v500_merra[lon_idx,*] q850_merra=q850_merra[lon_idx,*] t850_merra=t850_merra[lon_idx,*] u850_merra=u850_merra[lon_idx,*] v850_merra=v850_merra[lon_idx,*] h850_merra=h850_merra[lon_idx,*] h1000_merra=h1000_merra[lon_idx,*] u2m_merra=u2m_merra[lon_idx,*] v2m_merra=v2m_merra[lon_idx,*] endif else if rlon gt 180 then begin ; Calculate longitude as 0 to 360 colon_merra=all_lon_merra result=where(colon_merra lt 0,count) if count gt 0 then colon_merra[result]=360.0+colon_merra[result] ; Calculate map boundaries in colongitude if rlon lt 0 then rcolon=360.0+rlon else rcolon=rlon if llon lt 0 then lcolon=360.0+llon else lcolon=llon ; Reorder the colon array idx=sort(colon_merra) ; Reorder the data before subsetting colon_merra=colon_merra[idx] h250_merra=h250_merra[idx,*] u250_merra=u250_merra[idx,*] v250_merra=v250_merra[idx,*] h500_merra=h500_merra[idx,*] u500_merra=u500_merra[idx,*] v500_merra=v500_merra[idx,*] q850_merra=q850_merra[idx,*] t850_merra=t850_merra[idx,*] u850_merra=u850_merra[idx,*] v850_merra=v850_merra[idx,*] h850_merra=h850_merra[idx,*] h1000_merra=h1000_merra[idx,*] u2m_merra=u2m_merra[idx,*] v2m_merra=v2m_merra[idx,*] ; Subset data within colon bounds lon_idx=where(colon_merra le rcolon+1.0 and colon_merra ge lcolon-1.0,count) colon_merra=colon_merra[lon_idx] h250_merra=h250_merra[lon_idx,*] u250_merra=u250_merra[lon_idx,*] v250_merra=v250_merra[lon_idx,*] h500_merra=h500_merra[lon_idx,*] u500_merra=u500_merra[lon_idx,*] v500_merra=v500_merra[lon_idx,*] q850_merra=q850_merra[lon_idx,*] t850_merra=t850_merra[lon_idx,*] u850_merra=u850_merra[lon_idx,*] v850_merra=v850_merra[lon_idx,*] h850_merra=h850_merra[lon_idx,*] h1000_merra=h1000_merra[lon_idx,*] u2m_merra=u2m_merra[lon_idx,*] v2m_merra=v2m_merra[lon_idx,*] rlon=rcolon llon=lcolon lon_merra=colon_merra ; convert colon back to longitude lon_merra=colon_merra result=where(colon_merra lt 0,count) if count gt 0 then lon_merra[result]=colon_merra[result]-360.0 endif ;*************** ; Replace missing values with nan. ; Nan is recognized by IDL as the missing value ;*************** result=where(u850_merra eq 1e15,count) if count gt 0 then u850_merra[result]=!values.f_NAN result=where(v850_merra eq 1e15,count) if count gt 0 then v850_merra[result]=!values.f_NAN result=where(h250_merra eq 1e15,count) if count gt 0 then h250_merra[result]=!values.f_NAN result=where(u250_merra eq 1e15,count) if count gt 0 then u250_merra[result]=!values.f_NAN result=where(v250_merra eq 1e15,count) if count gt 0 then v250_merra[result]=!values.f_NAN result=where(h500_merra eq 1e15,count) if count gt 0 then h500_merra[result]=!values.f_NAN result=where(u500_merra eq 1e15,count) if count gt 0 then u500_merra[result]=!values.f_NAN result=where(v500_merra eq 1e15,count) if count gt 0 then v500_merra[result]=!values.f_NAN result=where(q850_merra eq 1e15,count) if count gt 0 then q850_merra[result]=!values.f_NAN result=where(t850_merra eq 1e15,count) if count gt 0 then t850_merra[result]=!values.f_NAN result=where(u850_merra eq 1e15,count) if count gt 0 then u850_merra[result]=!values.f_NAN result=where(v850_merra eq 1e15,count) if count gt 0 then v850_merra[result]=!values.f_NAN result=where(h850_merra eq 1e15,count) if count gt 0 then h850_merra[result]=!values.f_NAN result=where(h1000_merra eq 1e15,count) if count gt 0 then h1000_merra[result]=!values.f_NAN result=where(u2m_merra eq 1e15,count) if count gt 0 then u2m_merra[result]=!values.f_NAN result=where(v2m_merra eq 1e15,count) if count gt 0 then v2m_merra[result]=!values.f_NAN ;******************************************** ; Pull out the 850mb winds at the volcano and predict parcel movement ;******************************************** close_volcano=min(abs(lat_merra-xlat),lat_idx) close_volcano=min(abs(lon_merra-xlon),lon_idx) uwind=u850_merra[lon_idx,lat_idx] vwind=v850_merra[lon_idx,lat_idx] ;********************************************* ; Predic parcel movement ;********************************************* delta_time=60.0*60.0*10.0 ;s (60min) ;parcel_forcast,xlat,xlon,uwind,vwind,delta_time,date,$ ; lat_f,lon_f,wspd lz_parcel_forcast,xlat,xlon,uwind,vwind,delta_time,$ lat_f,lon_f,wspd, tcr,lon2,lat2,distr ;******************************************* ; particle trace ;******************************************** ; ; Build a data array from the wind data. ; s=size(u850_merra,/dimensions) ; wind_data = FLTARR(2, s[0], s[1]) ; wind_data[0, *, *] = u850_merra ; wind_data[1, *, *] = v850_merra ; ; ; Define starting points for the streamlines ; seeds = [[lon_idx, lat_idx]] ; ; ; Calculate the vertext and connectivity data for the ; ; streamline paths ; PARTICLE_TRACE, wind_data, seeds, verts, conn, MAX_ITERATIONS=30 ; ; Overplot the streamlines ; i = 0 ; sz = SIZE(verts,/dimensions) ; WHILE (i LT sz[1]) DO BEGIN ; nverts = conn[i] ; ; ; OLD METHOD: Uses 'x' and 'y' as lookup tables, losing the fractional ; ; part of the result, ending up only using data grid points. ; ;PLOTS, x[verts[0, conn[i+1:i+nverts]]], $ ; ; y[verts[1, conn[i+1:i+nverts]]], $ ; ; COLOR='0000FF'x, THICK=2 ; ; ; NEW METHOD: Find 'index' locations of desired points, then scale them ; ; correctly to exact degrees. Plotting both to show improvement. ; xIndices = verts[0, conn[i+1:i+nverts]] ; yIndices = verts[1, conn[i+1:i+nverts]] ; xDeg = (xIndices / 128) * 360 - 180 ; yDeg = (yIndices / 64) * 180 - 90 ; ; PLOTS, xDeg, yDeg, COLOR='0000FF'x, THICK=2 ; i += nverts + 1 ; ENDWHILE ; Do Plot if 1 eq 0 then begin ;*************** ; Plot map ;*************** ; int_flag=0 automatically determines the contour intervals ; int_flag=1 use a standard set of contour intervals int_flag=0 ; Set up the plot pxdim=800 pydim=600 m0=plot([0,1],[0,1],dimensions=[pxdim,pydim],/buffer,/nodata,axis_style=4) ;create window ; Position plots xl=0.05 & xr=0.95 yb=0.1 & yt=0.90 sx=0.05 sy=0.15 numplots_x=1 numplots_y=1 position_plots,xl,xr,yb,yt,sx,sy,numplots_x,numplots_y,pos ; Colorbar position cbpos=pos cbpos[*,1]=pos[*,1]-0.03 ;ybottom cbpos[*,3]=pos[*,1]-0.01 ;ytop cbpos[*,0]=pos[*,0]+0.05 cbpos[*,2]=pos[*,2]-0.05 tdy=0.01 ; Define the color table levels = 8 ;ctable = COLORTABLE([[200,180,255],[140,170,255],[20,170,255],$ ; [40,255,200],[50,255,50],[255,255,70],[255,165,40],[255,70,70]],ncolors=levels,/TRANSPOSE) ctable = COLORTABLE(['lavender','thistle','light sky blue',$ 'aquamarine','light green','khaki','sandy brown','light coral'],ncolors=levels,/TRANSPOSE) fontsize1=15 map_fontsize=10 cbfs=12 ;continent_color='dim grey' continent_color='green' ;****************************************************** ; Panel 3 - 850 mb Data ;****************************************************** ; Plot location pnum=0 ; Panel title '850 mb Geopotential Height' t0=text( pos[pnum,0]+(pos[pnum,2]-pos[pnum,0])/2.0,$ ;xcoor pos[pnum,3]+tdy,alignment=0.5,$ ;ycoor '850 mb Geopotential Height',color='black',/normal,font_size=fontsize1) ; Set up the map m0=map('mercator',$ limit=[llat,llon,ulat,rlon],font_size=map_fontsize,$ box_axes=1,label_position=0,linestyle='dotted',$ position=pos[pnum,*],/buffer,/current) ; Change the lat/lons separately. ;m0['Latitudes'].LABEL_ANGLE = 90 m0['Longitudes'].LABEL_ANGLE = 0 ; ; Compute relative humidity ; t=t850_merra ;K ; t0=273.15 ;K ; q=q850_merra ; p=850.0*100.0 ;Pa ; s=size(t,/dimensions) ; rh=make_array(/float,s[0],s[1],value=!values.f_NAN) ; ;result=where( finite(t,/nan) or finite(q,/nan) ,countnan) ; result=where( finite(t) and finite(q),count) ; if count gt 0 then begin ; rh[result]=0.263*p*q[result]*(exp( (17.67*(t[result]-t0)) / (t[result]-29.65) ) )^(-1) ; endif t850_merra=t850_merra-273.15 ; Levels for color contours of temperature if int_flag eq 0 then begin result=where(finite(t850_merra)) dmax=max(t850_merra[result]) dmin=min(t850_merra[result]) endif else begin dmax=19.0 dmin=-26.0 endelse levels2=(indgen(8)*ceil(ceil(dmax-dmin)/7.0))+floor(dmin) ;levels2=indgen(8)*12.0 ; Filled color contours of temp c1=contour(t850_merra,lon_merra,lat_merra,/overplot,$ c_value=levels2,c_color=ctable,/fill,grid_units='degrees',$ xstyle=1,ystyle=1) ;; d=convert_coord([pos[pnum,0],pos[pnum,2]],[pos[pnum,1],pos[pnum,3]],/normal,/to_device) ;; isx=(d[0,1,0]-d[0,0,0]) ;; isy=(d[1,1,0]-d[1,0,0]) ;; px0=d[0,0,0] ;; py0=d[1,0,0] ;; rh_image=bytscl(rh,max=dmax,min=dmin,top=levels-1) ;; c1=image(rh_image,/buffer,/current,rgb_table=ctable,dimensions=[pxdim,pydim],$ ;the size of the overall window ;; image_dimensions=[isx,isy],$ ;; image_location=[px0,py0],$ ;; position=pos[pnum,*]) ;; merra_hour_str=string(hh_merra,format='(I02)')+'h' ;; m0.save,'synoptic.'+program+'.'+date+'.'+merra_hour_str+'.'+$ ;; string(delta_degree,format='(I03)')+'.co3.png',height=pydim ; ; Plot the 850mb windbarbs ; Plot a wind barb of u and v components delta_degree=2 v0=vector(u850_merra,v850_merra,lon_merra,lat_merra,$ vector_style=1,/overplot,$ x_subsample=ceil(delta_degree/2.0),y_subsample=ceil(delta_degree/2.0),$ color='blue',grid_units='degrees') ; Continents mc=mapcontinents(/countries,color=continent_color,thick=1.5,/hires) mc2=mapcontinents(/USA,color=continent_color) ; ; ; Contour 850mb geopotential height ; ;c0=contour(H850_merra,lon_merra,lat_merra,/overplot,$ ; ; color='black',c_thick=1.5,grid_units='degrees',position=pos[pnum,*]) ; ; ; Contour temp lines ; ;t850_merra=t850_merra-273.15 ;convert from kelvin to celcius ; ;c2=contour(t850_merra,lon_merra,lat_merra,/overplot,c_linestyle=2,$ ; ; color='black',c_thick=2,grid_units='degrees',position=pos[pnum,*]) ; ; ; track location ; ;p1=polyline(lon_track,lat_track,target=m0,color='red',/data) s0=symbol(center_lon,center_lat,'o',sym_color='black',/data,/current,target=m0,sym_size=2,sym_thick=2) ; ;s0=symbol(lon_f,lat_f,'o',sym_color='red',/data,/current,target=m0,sym_size=2,sym_thick=2) ; ;a0=arrow([center_lon,lon_f],[center_lat,lat_f],/data,/current,target=m0) ; ; ;streamlines ; s1=streamline(u850_merra,v850_merra,lon_merra,lat_merra,grid_units=2,/overplot,$ ; ; ;xrange=[166.875,170.0],yrange=[-18.0,-15.0]) ; ;xrange=[166.875,170.0],yrange=[-15.0,-18.0]) ; ;xrange=[170.0,166.875],yrange=[-18.0,-15.0]) ; ; Colorbar cb0=colorbar(target=c1,position=reform(cbpos[pnum,*]),/border,title='850 mb Temperature (C)',font_size=cbfs) ; ; ; ; Titles ; ;s0=symbol(0.1,0.9,'o',sym_color='black',/current,target=m0,sym_size=2,sym_thick=2) ; ;s0=symbol(0.1,0.85,'o',sym_color='red',/current,target=m0,sym_size=2,sym_thick=2) ; ;t1=text(0.12,0.89,'parcel over volcano',/current) ; ;t2=text(0.12,0.84,'parcel in 1 hour',color='red',/current) ; ; ; ; ; ;t5=text(0.1,0.95,program,color='black',/normal,font_size=10) ; ;t4=text(0.12,0.92,'ship',color='blue',/normal,font_size=10) ; ;t0=text(0.2,0.95,string(yy_track,format='(I4)')+$ ; ; string(mm_track,format='(I02)')+string(dd_track,format='(I02)')+' '+$ ; ; string(hh_track,format='(I02)')+':'+string(mi_track,format='(I02)')+':'+$ ; ; string(ss_track,format='(I02)'),color='black',/normal,font_size=10) ; t1=text(0.12,0.95,'merra-2 '+string(yy_merra,format='(I4)')+$ ; string(mm_merra,format='(I02)')+string(dd_merra,format='(I02)')+' '+$ ; string(hh_merra,format='(I02)')+':'+string(mi_merra,format='(I02)')+':'+$ ; string(ss_merra,format='(I02)'),color='black',/normal,font_size=fontsize1) ; t2=text(0.45,0.95,string(center_lat,format='(F9.4)')+'lat '+string(center_lon,format='(F9.4)')+'lon',$ ; color='black',/normal,font_size=fontsize1) ; ;t3=text(0.45,0.95,string(lat_merra[lat_idx],format='(F9.4)')+'lat '+$ ; ; string(lon_merra[lon_idx],format='(F9.4)')+'lon',$ ; ; color='black',/normal) ; ; ;merra_hour_str=string(hh_merra,format='(I02)')+'h' ; ;imagedir='/uufs/chpc.utah.edu/common/home/mace-group2/capricorn/synoptic/' imagedir='./' if int_flag eq 0 then intstr='self' else intstr='standard' imagename=volcano_name+'.merra_wind.'+date+'.'+string(hh_merra,format='(I02)')+'h.'+$ string(delta_degree,format='(I03)')+'deg.'+intstr+'.png' m0.save,imagedir+imagename,height=pydim print,imagename endif ;do plot endif ;close enough ; ;endelse ;plot unique file ; ; Hold last values ; ;julian_day_merra_last=julian_day_merra[time_idx] ;;endfor ;loop through airplane track ;;endfor ; URLS ;url = 'http://eosdap.hdfgroup.uiuc.edu:8080/opendap/data/NASAFILES/hdf4/AIRS.2008.10.27.L3.RetStd001.v5.2.2.0.G08303124144.hdf' ;url = 'http://goldsmr5.sci.gsfc.nasa.gov:80/opendap/MERRA2/M2T3NVASM.5.12.4/'+$ ; '2014/05/MERRA2_400.tavg3_3d_asm_Nv.20140501.nc4?'+$ ; 'T[0:1:7][0:1:71][0:1:360][0:1:575],lat[0:1:360],lon[0:1:575]' ;url = 'http://goldsmr5.sci.gsfc.nasa.gov:80/opendap/MERRA2/M2T3NVASM.5.12.4/'+$ ; syear+'/'+smonth+'/MERRA2_400.tavg3_3d_asm_Nv.'+syear+smonth+sday+'.nc4?'+$ ; 'T[0:1:7][0:1:71][0:1:360][0:1:575],lat[0:1:360],lon[0:1:575],time[0:1:7]' end