;----------------------------------------------------------------------- pro anim_event,event ; ; Event handler for animation window: ; case event.action of "DONE": begin widget_control,event.top,/destroy return end else: print,'anim_event: Unknown action: ',event.action endcase return end ;----------------------------------------------------------------------- pro glbmproc,ps=ps,animate=animate,fields=fields,singles=singles ; basename = "glbmean-81jobs" ncfile = basename+".nc" psfile=basename+".ps" mystery_run = 66 ncid = ncdf_open(ncfile,/NOWRITE) print,'file=',ncfile,' ncid=',ncid if (keyword_set(fields)) then begin print,'fields=',fields endif ; file_inq = ncdf_inquire(ncid) name = " " id_time = ncdf_dimid(ncid,"time") ncdf_diminq,ncid,id_time,name,ntime id_lev = ncdf_dimid(ncid,"lev") ncdf_diminq,ncid,id_lev,name,nlev idv_lev = ncdf_varid(ncid,"lev") ncdf_varget,ncid,idv_lev,levs ; ; Full range: pltymin = levs[0] pltymax = levs[nlev-1] ipltymin = 0 ipltymax = nlev-1 ; ; From zp -5 to top: ;for i=0,nlev-1 do if (levs[i] eq -5.) then levm5 = i ;pltymin = levs[levm5] ;pltymax = levs[nlev-1] ;ipltymin = levm5 ;ipltymax = nlev-1 idv_f107d = ncdf_varid(ncid,"f107d") ncdf_varget,ncid,idv_f107d,f107d idv_f107a = ncdf_varid(ncid,"f107a") ncdf_varget,ncid,idv_f107a,f107a idv_ajoul = ncdf_varid(ncid,"ajoul") ncdf_varget,ncid,idv_ajoul,ajoul idv_alp = ncdf_varid(ncid,"alp") ncdf_varget,ncid,idv_alp,alp idv_eaur = ncdf_varid(ncid,"eaur") ncdf_varget,ncid,idv_eaur,eaur ;print,'ntime=',ntime,' nlev=',nlev,' levs=' & print,levs if (keyword_set(ps) and not keyword_set(singles)) then begin set_plot,'PS' device,filename=psfile endif else begin set_plot,'X' endelse ivar = 0 for iv = 0,file_inq.nvars-1 do begin var = ncdf_varinq(ncid,iv) found = 0 if (var.ndims eq 2) then begin ncdf_diminq,ncid,var.dim(0),dimname0,dimsize0 ncdf_diminq,ncid,var.dim(1),dimname1,dimsize1 if (dimname0 eq "lev" and dimname1 eq "time") then found = 1 endif if (keyword_set(fields)) then begin found = 0 for i=0,n_elements(fields)-1 do begin if (var.name eq fields[i]) then found = 1 endfor endif if (found) then begin ; plot 2-d field ivar = ivar+1 ncdf_varget,ncid,iv,f2d print,'Found var ',var.name,' f2d min,max=',min(f2d),max(f2d) fminall = min(f2d[ipltymin:ipltymax,*]) fmaxall = max(f2d[ipltymin:ipltymax,*]) xlog = 1 if (var.name eq 'TN' or var.name eq 'TE' or var.name eq 'TI') then $ xlog = 0 if (mystery_run eq 0) then begin title = "GLOBAL MEAN: "+ncfile+' njobs = '+$ string(format="(i3)",ntime) endif else begin title = "GLOBAL MEAN: "+ncfile+' njobs = '+$ string(format="(i3)",ntime-1) endelse xtitle=var.name+string(format="(' (min,max=',e12.4,', ',e12.4,')')",$ fminall,fmaxall) charsize = 1.4 pos = [.15,.15,.87,.90] ; ; Plot first run, set up axes, etc: if (not keyword_set(singles)) then begin plot,f2d(*,0),levs,title=title,ystyle=1,xrange=[fminall,fmaxall],$ xtitle=xtitle,ytitle='ZP LEVEL',xlog=xlog,position=pos,/norm,$ charsize=charsize,yrange=[pltymin,pltymax] ; ; Run loop: overplot curve from each run for current field: for ijob = 1,ntime-1 do begin if (mystery_run ne ijob) then begin oplot,f2d(*,ijob),levs endif else begin print,'Skipping mystery run ',mystery_run endelse endfor if (not keyword_set(ps)) then cursor,x,y,4 endif ; ; Make animations if requested: if (keyword_set(animate)) then begin xsize=450 & ysize=460 winsave = !d.window animbase = widget_base(title='PNG Animation') animate = cw_animate(animbase,xsize,ysize,ntime) widget_control,animbase,/realize for ijob = 1,ntime-1 do begin if (mystery_run eq ijob) then begin print,'Skipping mystery run ',mystery_run goto,anim_loop endif title = "GLOBAL MEAN: "+ncfile+' job '+string(format="(i3)",ijob+1) fmin = min(f2d[*,ijob]) & fmax = max(f2d[*,ijob]) xtitle=var.name+string(format="(' (min,max=',e12.4,', ',e12.4,')')",$ fmin,fmax) window,xsize=xsize,ysize=ysize,/pixmap,/free win = !d.window wset,win plot,f2d(*,ijob),levs,title=title,ystyle=1,xrange=[fminall,fmaxall],$ xtitle=xtitle,ytitle='zplev',xlog=xlog,position=pos,/norm,$ charsize=charsize faclab = "f107, ajoul alp eaur = "+$ string(format="(f6.2,',' )",f107d[ijob])+$ string(format="(e10.2,',')",ajoul[ijob])+$ string(format="(f8.2,',' )",alp[ijob])+$ string(format="(f8.2,',' )",eaur[ijob]) xyouts,.5,.06,faclab,alignment=.5,/norm cw_animate_load,animate,frame=ijob,window=win,/track anim_loop: endfor cw_animate_run,animate,ntime widget_control,hourglass=0 xmanager,"Map Animation",animbase,event_handler="anim_event" wset,winsave endif ; make png files ; ; Make plots of individual runs: if (keyword_set(singles)) then begin if (keyword_set(ps)) then begin set_plot,'PS' ; psfile=basename+var.name+".ps" if (mystery_run gt 0) then psfile = "glbmean-"+string(format="(i2)",ntime-1)+$ "jobs-"+var.name+".ps" device,filename=psfile endif else begin set_plot,'X' endelse iijob = 0 for ijob = 0,ntime-1 do begin if (mystery_run eq ijob+1) then begin print,'Skipping mystery run ',mystery_run goto,singles_loop endif else begin iijob = ijob endelse title = "GLOBAL MEAN: "+ncfile+' job '+string(format="(i3)",iijob+1) fmin = min(f2d[*,iijob]) & fmax = max(f2d[*,iijob]) xtitle=var.name+string(format="(' (min,max=',e12.4,', ',e12.4,')')",$ fmin,fmax) plot,f2d(*,iijob),levs,title=title,ystyle=1,xrange=[fminall,fmaxall],$ xtitle=xtitle,ytitle='zplev',xlog=xlog,position=pos,/norm faclab = "f107, ajoul alp eaur = "+$ string(format="(f6.2,',' )",f107d[iijob])+$ string(format="(e10.2,',')",ajoul[iijob])+$ string(format="(f8.2,',' )",alp[iijob])+$ string(format="(f8.2,',' )",eaur[iijob]) xyouts,.5,.04,faclab,alignment=.5,/norm if (not keyword_set(ps)) then cursor,x,y,4 iijob = iijob+1 singles_loop: endfor endif endif ; found 2-d var endfor ; iv=0,nvars-1 if (keyword_set(ps)) then device,/close_file end