source: palm/trunk/SCRIPTS/NCL/timeseries.ncl @ 559

Last change on this file since 559 was 534, checked in by heinze, 15 years ago

Bugfix in spectra.ncl concerning output in png and small changes in layout

File size: 48.6 KB
Line 
1load "$NCARG_ROOT/lib/ncarg/nclex/gsun/gsn_code.ncl"
2load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
3load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
4load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
5 
6;***************************************************
7; load .ncl.config or .ncl.config.default
8;***************************************************
9
10function which_script()
11local script
12begin
13   script="timeseries"
14   return(script)
15end
16
17if (isfilepresent("$PALM_BIN/../../.ncl.config")) then
18   loadscript("$PALM_BIN/../../.ncl.config")
19else
20  if (isfilepresent("$PALM_BIN/NCL/.ncl.config.default")) then
21     loadscript( "$PALM_BIN/NCL/.ncl.config.default")
22  else
23      palm_bin_path = getenv("PALM_BIN")
24      print(" ")
25      print("Neither the personal configuration file '.ncl.config' exists in")
26      print("~/palm/current_version")
27      print("nor the default configuration file '.ncl.config.default' exists in")
28      print(palm_bin_path + "/NCL")
29      print(" ")
30      exit
31   end if
32end if   
33   
34begin
35
36   ;***************************************************
37   ; Retrieving the NCL version used
38   ;***************************************************
39   
40   ncl_version_ch = systemfunc("ncl -V")
41   ncl_version    = stringtofloat(ncl_version_ch)
42
43   ;***************************************************
44   ; Retrieving the double quote character
45   ;***************************************************
46   
47   dq=str_get_dq()
48
49   ;***************************************************
50   ; set up default parameter values and strings
51   ;***************************************************
52   
53   if (file_1 .EQ. "File in") then
54      print(" ")
55      print("Declare input file 'file_1=' in '.ncl.config' or prompt")
56      print(" ")
57      exit
58   else
59      file_in = file_1   
60   end if
61
62   if (format_out .NE. "x11" .AND. format_out .NE. "pdf" .AND. format_out .NE. "eps" .AND. format_out .NE. "ps" .AND. format_out .NE. "epsi" .AND. format_out .NE. "ncgm" .AND. format_out .NE. "png")then
63      print(" ")
64      print("'format_out = "+format_out+"' is invalid and set to'x11'")
65      print(" ")
66      format_out="x11"
67   end if 
68
69   if (ncl_version .LE. 5.1 .AND. format_out .EQ. "png") then
70      print(" ")
71      print("Output of png files not available")
72      print("png output is avaiable with NCL version 5.2.0 and higher ")
73      print("NCL version used: " + ncl_version_ch)
74      print(" ")
75      exit
76   end if
77
78   if (over .NE. 0 .AND. over .NE. 1) then
79      print(" ")
80      print("'over'= "+over+" is invalid and set to 0")
81      print(" ")
82      over = 0
83   end if 
84   
85   if (norm_t .EQ. 0) then
86      print(" ")
87      print("Normalising with 0 is not allowed, 'norm_t' is set to 1.0")
88      print(" ")
89      norm_t = 1.0
90   end if
91 
92
93   ;***************************************************
94   ; open input file
95   ;***************************************************
96   
97   file_in_1 = False
98   if (isStrSubset(file_in, ".nc"))then
99      start_f = -2
100      end_f = -2
101      file_in_1 = True     
102   end if
103
104   if (start_f .EQ. -1)then
105      print(" ")
106      print("'start_f' must be one of the cyclic numbers (at least 0) of your input file(s)")
107      print(" ") 
108      exit
109   end if
110   if (end_f .EQ. -1)then
111      print(" ")
112      print("'end_f' must be one of the cyclic numbers (at least 0) of your input file(s)")
113      print(" ") 
114      exit
115   end if
116
117   files=new(end_f-start_f+1,string)
118
119   if (file_in_1)then
120      if (isfilepresent(file_in))then
121         files(0)=file_in
122      else
123         print(" ")
124         print("1st input file: '"+file_in+"' does not exist")
125         print(" ")
126         exit
127      end if
128   else   
129      if (start_f .EQ. 0)then
130         if (isfilepresent(file_in+".nc"))then
131            files(0)=file_in+".nc"
132            do i=1,end_f
133               if (isfilepresent(file_in+"."+i+".nc"))then   
134                  files(i)=file_in+"."+i+".nc"
135               else
136                  print(" ")
137                  print("Input file: '"+file_in+"."+i+".nc' does not exist")
138                  print(" ")
139                  exit 
140               end if       
141            end do         
142         else
143            print(" ")
144            print("Input file: '"+file_in+".nc' does not exist")
145            print(" ")
146            exit
147         end if
148      else
149         do i=start_f,end_f
150            if (isfilepresent(file_in+"."+i+".nc"))then   
151               files(i-start_f)=file_in+"."+i+".nc"
152            else
153               print(" ")
154               print("Input file: '"+file_in+"."+i+".nc' does not exist")
155               print(" ")
156               exit 
157            end if
158         end do
159      end if
160   end if
161
162   f=addfiles(files,"r")
163   f_att=addfile(files(0),"r")
164   ListSetType(f,"cat")
165
166   vNam=getfilevarnames(f_att)
167   vNam_static=vNam
168
169   print(" ")
170   print("Variables in input file:")
171   print("- "+ vNam)
172   print(" ")
173   dim = dimsizes(vNam)
174   if (dim .EQ. 0) then
175      print(" ")
176      print("There is no data on file")
177      print(" ")
178   end if
179
180   t_all   = f[:]->time
181   nt      = dimsizes(t_all)
182   delta_t = t_all(nt-1)/nt
183
184   ;****************************************************       
185   ; start of time step and different types of mistakes that could be done
186   ;****************************************************
187
188   if (start_time_step .EQ. -1.) then           
189      start_time_step=t_all(0)/3600     
190   else
191      if (start_time_step .GE. t_all(nt-1)/3600)
192         print(" ")
193         print("'start_time_step' = "+ start_time_step +"h is equal or greater than last time step = " + t_all(nt-1)+"s = "+t_all(nt-1)/3600+"h")
194         print(" ")
195         print("Select another 'start_time_step'")
196         print(" ")
197         exit
198      end if
199      if (start_time_step .LT. t_all(0)/3600)
200         print(" ")
201         print("'start_time_step' = "+ start_time_step +"h is lower than first time step = " + t_all(0)+"s = "+t_all(0)/3600+"h")
202         print(" ")
203         print("Select another 'start_time_step'")
204         print(" ")
205         exit
206      end if
207   end if
208   do i=0,nt-2     
209      if (start_time_step .GE. (t_all(i)-delta_t/2)/3600 .AND. start_time_step .LT. (t_all(i)+delta_t/2)/3600)then
210         st=i
211         break
212      end if
213   end do
214   if (start_time_step .GE. t_all(nt-1)-delta_t/2 .AND. start_time_step .LT. t_all(nt-1)) then
215      st=nt-2   
216   end if
217   if (.not. isvar("st"))then
218      print(" ")
219      print("'start_time_step' = "+ start_time_step +"h is invalid")
220      print(" ")
221      print("Select another 'start_time_step'")
222      print(" ")
223      exit
224   end if
225     
226   ;****************************************************
227   ; end of time step and different types of mistakes that could be done
228   ;****************************************************
229
230   if (end_time_step .EQ. -1.) then             
231      end_time_step = t_all(nt-1)/3600 
232   else
233      if (end_time_step .LE. t_all(0)/3600)
234         print(" ")
235         print("'end_time_step' = "+end_time_step+ "h is lower or equal than first time step = " + t_all(0)+"s = "+t_all(0)/3600+"h")
236         print(" ")
237         print("Select another 'end_time_step'")
238         print(" ")
239         exit
240      end if
241      if (end_time_step .GT. t_all(nt-1)/3600)
242         print(" ")
243         print("'end_time_step' = "+ end_time_step +"h is greater than last time step = " + t_all(nt-1)+"s = "+t_all(nt-1)/3600+"h")
244         print(" ")
245         print("Select another 'end_time_step'") 
246         print(" ")
247         exit
248      end if
249      if (end_time_step .LE. start_time_step/3600)
250         print(" ")
251         print("'end_time_step' = "+ end_time_step +"h is equal or lower than 'start_time_step' = "+start_time_step+"h")
252         print(" ")
253         print("Select another 'start_time_step' or 'end_time_step'")
254         print(" ")
255         exit
256      end if
257   end if
258   do i=0,nt-1     
259      if (end_time_step .GE. (t_all(i)-delta_t/2)/3600 .AND. end_time_step .LT. (t_all(i)+delta_t/2)/3600)then
260         et=i
261         break
262      end if
263   end do
264   
265   if (.not. isvar("et"))then
266      print(" ")
267      print("'end_time_step' = "+ end_time_step +"h is invalid")
268      print(" ")
269      print("Select another 'end_time_step'")
270      print(" ")
271      exit
272   end if
273 
274   delete(start_time_step)
275   start_time_step=round(st,3)
276   delete(end_time_step)
277   end_time_step=round(et,3)
278
279   print(" ")
280   print("Output of time steps from "+t_all(start_time_step)/3600+" h = "+t_all(start_time_step)+" s => index = "+start_time_step)
281   print("                     till "+t_all(end_time_step)/3600+" h = "+t_all(end_time_step)+" s => index = "+end_time_step)
282   print(" ")
283
284   t = t_all(start_time_step:end_time_step)/norm_t
285 
286   ; ***************************************************
287   ; set up recourses
288   ; ***************************************************
289
290   res                         = True
291   res@gsnDraw                 = False
292   res@gsnFrame                = False
293   res@tmXBMode                = True
294   res@tmYLMode                = True
295   res@txFont                  = "helvetica"
296   res@tiMainFont              = "helvetica"
297   res@tiXAxisFont             = "helvetica"
298   res@tiYAxisFont             = "helvetica"
299   res@tmXBLabelFont           = "helvetica"
300   res@tmYLLabelFont           = "helvetica"
301   res@xyLineColors            = (/237/)
302   
303   res@lgLabelFontHeightF     = 0.02
304
305   resP                        = True
306   resP@txFont                 = "helvetica"
307   resP@txString               = f_att@title+" time series "
308   resP@txFuncCode             = "~"
309   resP@txFontHeightF          = 0.015
310
311   res@tmXBMinorPerMajor = 4
312   res@tmYLMinorPerMajor = 4
313
314   res@vpWidthF=4
315
316   txres = True
317
318   ; ***************************************************
319   ; read data and create plots
320   ; ***************************************************
321   
322   if ( format_out .EQ. "pdf" .OR. format_out .EQ. "ps" ) then
323      format_out@wkPaperSize = "A4"
324   end if
325   if ( format_out .EQ. "png" ) then
326      format_out@wkWidth  = 1000
327      format_out@wkHeight = 1000
328   end if
329
330   wks_ps = gsn_open_wks(format_out,file_out)           
331   gsn_define_colormap(wks_ps,"rainbow+white")
332   plot_ps=new(dim,graphic)
333                                 
334   n=0
335   minE=1.E27
336   maxE=-1.E27
337   minus=1.E27
338   maxus=-1.E27
339   minu=1.E27
340   maxu=-1.E27
341   minz=1.E27
342   maxz=-1.E27
343   minw=1.E27
344   maxw=-1.E27
345   minp=1.E27
346   maxp=-1.E27
347   mins=1.E27
348   maxs=-1.E27
349
350   data   = new((/dim,(end_time_step-start_time_step)+1/),float)
351   unit   = new(dim,string)
352   data_0 = new((end_time_step-start_time_step)+1,float)
353   data_0 = 0.0
354   mini   = new(dim,float)
355   maxi   = new(dim,float)
356   
357   if (over .EQ. 1) then
358      plot_E       = gsn_csm_xy(wks_ps,t,data_0(:),res)
359      plot_Es      = gsn_csm_xy(wks_ps,t,data_0(:),res)
360      plot_us      = gsn_csm_xy(wks_ps,t,data_0(:),res)
361      plot_ws      = gsn_csm_xy(wks_ps,t,data_0(:),res)
362      plot_umax    = gsn_csm_xy(wks_ps,t,data_0(:),res)
363      plot_vmax    = gsn_csm_xy(wks_ps,t,data_0(:),res)
364      plot_wmax    = gsn_csm_xy(wks_ps,t,data_0(:),res)
365      plot_z_i_wpt = gsn_csm_xy(wks_ps,t,data_0(:),res)
366      plot_z_i_pt  = gsn_csm_xy(wks_ps,t,data_0(:),res)
367      plot_wpptp0  = gsn_csm_xy(wks_ps,t,data_0(:),res)
368      plot_wpptp   = gsn_csm_xy(wks_ps,t,data_0(:),res)
369      plot_wpt     = gsn_csm_xy(wks_ps,t,data_0(:),res)
370      plot_pt_0_   = gsn_csm_xy(wks_ps,t,data_0(:),res)
371      plot_pt_zp_  = gsn_csm_xy(wks_ps,t,data_0(:),res)
372   end if
373
374
375   if (var .NE. "all") then
376      vNam_temp = new((/dim/),string)
377      comma     = 0
378      var_char  = stringtocharacter(var)
379      no_char   = dimsizes(var_char)
380       
381      do j = 0, no_char-1
382         if(var_char(j) .eq. ",")
383            comma = comma + 1
384         end if
385      end do
386
387      if(comma .eq. 0 .or. comma .eq. 1)
388          print(" ")
389          print("The variables 'var="+var+"'" )
390          print("do not exist on your input file;")
391          print("be sure to have one comma before and after each variable")
392          print(" ")
393          exit
394      end if
395
396      indices = new((/comma/), integer)
397      comma   = 0
398       
399      do j = 0, no_char-1
400         if(var_char(j) .eq. ",")
401           indices(comma) = j
402           comma = comma + 1
403         end if
404      end do
405
406      do j = 0, comma -2
407         vNam_temp(j) = charactertostring(var_char(indices(j)+1:indices(j+1)-1))
408      end do
409     
410      delete(vNam)
411      vNam = new((/comma-1/),string)
412      do varn = 0, comma - 2
413         vNam(varn) = vNam_temp(comma - 2 - varn)
414      end do
415     
416      do j = 0, comma-2
417        count_check = 0
418        do varn = 0, dim-1
419           if(vNam(j) .ne. vNam_static(varn))
420             count_check=count_check+1
421           end if
422        end do   
423
424        if(count_check .eq. dim)
425            print(" ")
426            print("The variables 'var="+var+"'" )
427            print("do not exist on your input file;")
428            print("be sure to have one comma before and after each variable")
429            print(" ")
430            exit
431        end if
432      end do
433
434      dim = comma-1
435    end if
436
437
438   do varn = dim-1, 0, 1
439
440      if( isStrSubset (vNam(varn), "time") )
441         check = False
442      else
443         check = True
444      end if
445     
446      if(check) then
447
448         data_all = f[:]->$vNam(varn)$
449         data_att = f_att->$vNam(varn)$
450         unit(varn) = data_att@units
451 
452     
453         data(varn,:)=data_all(start_time_step:end_time_step)
454         
455         if (over .EQ. 1) then
456
457            mini(varn) = min(data(varn,:))
458            maxi(varn) = max(data(varn,:))
459           
460            if (vNam(varn) .EQ. "E" .OR. vNam(varn) .EQ. "Es" .OR. vNam(varn) .EQ. "E*") then
461               if (mini(varn) .EQ. maxi(varn)) then
462                  if (min(data(varn,:)) .EQ. 0)then
463                     mini(varn)= mini(varn)-0.1
464                     maxi(varn)= maxi(varn)+0.1
465                  end if
466                  if (min(data(varn,:)) .LT. 0)then
467                     mini(varn)= mini(varn)-1.+(mini(varn))/2
468                     maxi(varn)= maxi(varn)+1.-(maxi(varn))/2
469                  end if
470                  if (min(data(varn,:)) .GT. 0)then
471                     mini(varn)= mini(varn)-1.-(mini(varn))/2
472                     maxi(varn)= maxi(varn)+1.+(maxi(varn))/2
473                  end if
474               end if
475               minE=min((/minE,mini(varn)/))
476               maxE=max((/maxE,maxi(varn)/))
477            end if
478
479            if (vNam(varn) .EQ. "us" .OR. vNam(varn) .EQ. "ws"\
480                .OR. vNam(varn) .EQ. "u*" .OR. vNam(varn) .EQ. "w*") then
481               if (mini(varn) .EQ. maxi(varn)) then
482                  if (min(data(varn,:)) .EQ. 0)then
483                     mini(varn)= mini(varn)-0.1
484                     maxi(varn)= maxi(varn)+0.1
485                  end if
486                  if (min(data(varn,:)) .LT. 0)then
487                     mini(varn)= mini(varn)-1.+(mini(varn))/2
488                     maxi(varn)= maxi(varn)+1.-(maxi(varn))/2
489                  end if
490                  if (min(data(varn,:)) .GT. 0)then
491                     mini(varn)= mini(varn)-1.-(mini(varn))/2
492                     maxi(varn)= maxi(varn)+1.+(maxi(varn))/2
493                  end if
494               end if
495               minus=min((/minus,mini(varn)/))
496               maxus=max((/maxus,maxi(varn)/))
497            end if
498
499            if (vNam(varn) .EQ. "umax" .OR. vNam(varn) .EQ. "vmax" .OR. vNam(varn) .EQ. "wmax") then
500               if (mini(varn) .EQ. maxi(varn)) then
501                  if (mini(varn) .EQ. 0)then
502                     mini(varn)= mini(varn)-0.1
503                     maxi(varn)= maxi(varn)+0.1
504                  end if
505                  if (mini(varn) .LT. 0)then
506                     mini(varn)= mini(varn)-1.+(mini(varn))/2
507                     maxi(varn)= maxi(varn)+1.-(maxi(varn))/2
508                  end if
509                  if (mini(varn) .GT. 0)then
510                     mini(varn)= mini(varn)-1.-(mini(varn))/2
511                     maxi(varn)= maxi(varn)+1.+(maxi(varn))/2
512                  end if
513               end if
514               minu=min((/minu,mini(varn)/))
515               maxu=max((/maxu,maxi(varn)/))
516            end if
517
518            if (vNam(varn) .EQ. "z_i_wpt" .OR. vNam(varn) .EQ. "z_i_pt") then
519               if (mini(varn) .EQ. maxi(varn)) then
520                  if (min(data(varn,:)) .EQ. 0)then
521                     mini(varn)= mini(varn)-0.1
522                     maxi(varn)= maxi(varn)+0.1
523                  end if
524                  if (min(data(varn,:)) .LT. 0)then
525                     mini(varn)= mini(varn)-1.+(mini(varn))/2
526                     maxi(varn)= maxi(varn)+1.-(maxi(varn))/2
527                  end if
528                  if (min(data(varn,:)) .GT. 0)then
529                     mini(varn)= mini(varn)-1.-(mini(varn))/2
530                     maxi(varn)= maxi(varn)+1.+(maxi(varn))/2
531                  end if
532               end if
533               minz=min((/minz,mini(varn)/))
534               maxz=max((/maxz,maxi(varn)/))
535            end if
536
537            if (vNam(varn) .EQ. "wpptp0" .OR. vNam(varn) .EQ. "wpptp" .OR. vNam(varn) .EQ. "wpt"\
538               .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq+"0" .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq ) then
539               if (mini(varn) .EQ. maxi(varn)) then
540                  if (min(data(varn,:)) .EQ. 0)then
541                     mini(varn)= mini(varn)-0.1
542                     maxi(varn)= maxi(varn)+0.1
543                  end if
544                  if (min(data(varn,:)) .LT. 0)then
545                     mini(varn)= mini(varn)-1.+(mini(varn))/2
546                     maxi(varn)= maxi(varn)+1.-(maxi(varn))/2
547                  end if
548                  if (min(data(varn,:)) .GT. 0)then
549                     mini(varn)= mini(varn)-1.-(mini(varn))/2
550                     maxi(varn)= maxi(varn)+1.+(maxi(varn))/2
551                  end if
552               end if
553               minw=min((/minw,mini(varn)/))
554               maxw=max((/maxw,maxi(varn)/))
555            end if
556
557            if (vNam(varn) .EQ. "pt_0_" .OR. vNam(varn) .EQ. "pt_zp_"\
558               .OR. vNam(varn) .EQ. "pt(0)" .OR. vNam(varn) .EQ. "pt(zp)") then
559               if (mini(varn) .EQ. maxi(varn)) then
560                  if (min(data(varn,:)) .EQ. 0)then
561                     mini(varn)= mini(varn)-0.1
562                     maxi(varn)= maxi(varn)+0.1
563                  end if
564                  if (min(data(varn,:)) .LT. 0)then
565                     mini(varn)= mini(varn)-1.+(mini(varn))/2
566                     maxi(varn)= maxi(varn)+1.-(maxi(varn))/2
567                  end if
568                  if (min(data(varn,:)) .GT. 0)then
569                     mini(varn)= mini(varn)-1.-(mini(varn))/2
570                     maxi(varn)= maxi(varn)+1.+(maxi(varn))/2
571                  end if
572               end if
573               minp=min((/minp,mini(varn)/))
574               maxp=max((/maxp,maxi(varn)/))
575            end if
576           
577         end if
578      end if
579   end do
580 
581  if (isStrSubset(data@long_name," SR " ))then
582      print(" ")
583      print("If you have outputs of statistic regions you cannot overlay variables;")
584      print("'over' is set to 0" )
585      print(" ")
586      over = 0
587   end if
588
589   do varn = dim-1, 0, 1
590     
591      if( isStrSubset (vNam(varn), "time") )
592         check = False
593      else
594         check = True
595      end if     
596   
597      if (var .NE. "all") then
598         check = isStrSubset( var,","+vNam(varn)+"," )
599      end if
600 
601      if(check) then
602       
603        if (over .EQ. 1) then
604 
605            res@gsnLeftString       = "overlayed plot"
606            res@gsnRightString      = unit(varn)
607            if (norm_t .NE. 1.)then
608               res@tiXAxisString        = "t ("+unit_t+")"
609            else
610               res@tiXAxisString        = "t (s)"
611            end if
612            res@tiYAxisString = " "
613            res@tiXAxisFontHeightF   = font_size
614            res@txFontHeightF        = font_size
615            res@tiYAxisFontHeightF   = font_size           
616
617            if (vNam(varn) .EQ. "E")
618               E=0
619               res@xyLineColors     = (/237/)
620               res@xyLineLabelFontHeightF = 0.05
621               res@xyLineLabelFontColor   = 237
622               res@trYMaxF           = maxE
623               res@trYMinF           = minE
624               plot_E = gsn_csm_xy(wks_ps,t,data(varn,:),res)
625            end if
626            if (vNam(varn) .EQ. "Es" .OR. vNam(varn) .EQ. "E*")
627               Es=0
628               res@xyLineColors            = (/144/)
629               res@xyLineLabelFontHeightF = 0.05
630               res@xyLineLabelFontColor   = 144
631               plot_Es = gsn_csm_xy(wks_ps,t,data(varn,:),res)
632            end if
633             
634            if (vNam(varn) .EQ. "us" .OR. vNam(varn) .EQ. "u*")
635               us=0
636               res@xyLineColors            = (/237/)
637               res@xyLineLabelFontHeightF = 0.05
638               res@xyLineLabelFontColor   = 237
639               res@trYMaxF           = maxus
640               res@trYMinF           = minus
641               plot_us = gsn_csm_xy(wks_ps,t,data(varn,:),res)
642            end if             
643            if (vNam(varn) .EQ. "ws" .OR. vNam(varn) .EQ. "w*")
644               ws=0
645               res@xyLineColors            = (/144/)
646               res@xyLineLabelFontHeightF = 0.05
647               res@xyLineLabelFontColor   = 144
648               plot_ws = gsn_csm_xy(wks_ps,t,data(varn,:),res)
649            end if
650             
651            if (vNam(varn) .EQ. "umax")
652               u=0
653               res@xyLineColors            = (/237/)
654               res@xyLineLabelFontHeightF = 0.05
655               res@xyLineLabelFontColor   = 237
656               res@trYMaxF           = maxu
657               res@trYMinF           = minu
658               plot_umax = gsn_csm_xy(wks_ps,t,data(varn,:),res)
659            end if
660            if (vNam(varn) .EQ. "vmax")
661               v=0
662               res@xyLineColors            = (/144/)
663               res@xyLineLabelFontHeightF = 0.05
664               res@xyLineLabelFontColor   = 144
665               plot_vmax = gsn_csm_xy(wks_ps,t,data(varn,:),res)
666            end if
667            if (vNam(varn) .EQ. "wmax")
668               w=0
669               res@xyLineColors            = (/80/)
670               res@xyLineLabelFontHeightF = 0.05
671               res@xyLineLabelFontColor   = 80
672               plot_wmax = gsn_csm_xy(wks_ps,t,data(varn,:),res)
673            end if
674   
675            if (vNam(varn) .EQ. "z_i_wpt")
676               zw=0
677               res@xyLineColors            = (/237/)
678               res@xyLineLabelFontHeightF = 0.05
679               res@xyLineLabelFontColor   = 237
680               res@trYMaxF           = maxz
681               res@trYMinF           = minz
682               plot_z_i_wpt = gsn_csm_xy(wks_ps,t,data(varn,:),res)
683            end if
684            if (vNam(varn) .EQ. "z_i_pt")
685               z=0
686               res@xyLineColors            = (/144/) 
687               res@xyLineLabelFontHeightF = 0.05
688               res@xyLineLabelFontColor   = 144
689               plot_z_i_pt = gsn_csm_xy(wks_ps,t,data(varn,:),res)
690            end if
691
692            if (vNam(varn) .EQ. "wpptp0" .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq+"0" )
693               w0=0
694               res@xyLineColors            = (/237/)
695               res@xyLineLabelFontHeightF = 0.05
696               res@xyLineLabelFontColor   = 237
697               res@trYMaxF           = maxw
698               res@trYMinF           = minw
699               plot_wpptp0 = gsn_csm_xy(wks_ps,t,data(varn,:),res)
700            end if
701            if (vNam(varn) .EQ. "wpptp" .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq)
702               wp=0
703               res@xyLineColors            = (/144/)
704               res@xyLineLabelFontHeightF = 0.05
705               res@xyLineLabelFontColor   = 144
706               plot_wpptp = gsn_csm_xy(wks_ps,t,data(varn,:),res) 
707            end if
708            if (vNam(varn) .EQ. "wpt")
709               wt=0
710               res@xyLineColors            = (/80/)
711               res@xyLineLabelFontHeightF = 0.05
712               res@xyLineLabelFontColor   = 80
713               plot_wpt = gsn_csm_xy(wks_ps,t,data(varn,:),res)
714            end if
715
716            if (vNam(varn) .EQ. "pt_0_" .OR. vNam(varn) .EQ. "pt(0)")
717               p=0
718               res@xyLineColors            = (/237/)
719               res@xyLineLabelFontHeightF = 0.05
720               res@xyLineLabelFontColor   = 237
721               res@trYMaxF           = maxp
722               res@trYMinF           = minp
723               plot_pt_0_ = gsn_csm_xy(wks_ps,t,data(varn,:),res) 
724            end if
725            if (vNam(varn) .EQ. "pt_zp_" .OR. vNam(varn) .EQ. "pt(zp)")
726               pz=0
727               res@xyLineColors            = (/144/)
728               res@xyLineLabelFontHeightF = 0.05
729               res@xyLineLabelFontColor   = 144
730               plot_pt_zp_ = gsn_csm_xy(wks_ps,t,data(varn,:),res)
731            end if
732
733         end if
734      end if
735   end do
736
737
738   do varn = dim-1, 0, 1
739   
740      if( isStrSubset (vNam(varn), "time") )
741         check = False
742      else
743         check = True
744      end if   
745 
746      if (var.NE. "all") then
747         check = isStrSubset( var,","+vNam(varn)+"," )
748      end if
749   
750      if(check) then
751       
752         if (over .EQ. 1) then       
753       
754            if (vNam(varn) .EQ. "E" .AND. Es .NE. 1) then
755               E=1   
756               overlay(plot_E,plot_Es)
757               n=n+1
758               plot_ps(n) = plot_E   
759
760               ; ***************************************************
761               ; legend for combined plot
762               ; ***************************************************
763     
764               lgres                    = True
765               lgMonoDashIndex          = False
766               lgres@lgLabelFont        = "helvetica"   
767               lgres@lgLabelFontHeightF = .1           
768               lgres@vpWidthF           = 0.4           
769               lgres@vpHeightF          = 0.4         
770               lgres@lgDashIndexes      = (/0,0,0/)
771               lgres@lgLineColors       = (/237,144,80/)
772               lbid = gsn_create_legend(wks_ps,2,(/"E","E*"/),lgres)       
773
774               amres = True
775               amres@amParallelPosF   = 0.6                 
776               amres@amOrthogonalPosF = -0.2           
777               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)           
778            end if
779            if ((vNam(varn) .EQ. "Es" .OR. vNam(varn) .EQ. "E*") .AND. E .NE. 1) then
780               Es=1
781               overlay(plot_E,plot_Es)
782               n=n+1
783               plot_ps(n) = plot_E 
784
785               ; ***************************************************
786               ; legend for combined plot
787               ; ***************************************************
788     
789               lgres                    = True
790               lgMonoDashIndex          = False
791               lgres@lgLabelFont        = "helvetica"   
792               lgres@lgLabelFontHeightF = .1           
793               lgres@vpWidthF           = 0.4           
794               lgres@vpHeightF          = 0.4         
795               lgres@lgDashIndexes      = (/0,0,0/)
796               lgres@lgLineColors       = (/237,144,80/)
797               lbid = gsn_create_legend(wks_ps,2,(/"E","E*"/),lgres)       
798
799               amres = True
800               amres@amParallelPosF   = 0.6                 
801               amres@amOrthogonalPosF = -0.2           
802               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)         
803            end if
804
805            if ((vNam(varn) .EQ. "us" .OR. vNam(varn) .EQ. "u*") .AND. ws .NE. 1) then
806               us=1
807               overlay(plot_us,plot_ws)
808               n=n+1
809               plot_ps(n) = plot_us
810
811               ; ***************************************************
812               ; legend for combined plot
813               ; ***************************************************
814     
815               lgres                    = True
816               lgMonoDashIndex          = False
817               lgres@lgLabelFont        = "helvetica"   
818               lgres@lgLabelFontHeightF = .1           
819               lgres@vpWidthF           = 0.4           
820               lgres@vpHeightF          = 0.4         
821               lgres@lgDashIndexes      = (/0,0,0/)
822               lgres@lgLineColors       = (/237,144,80/)
823               lbid = gsn_create_legend(wks_ps,2,(/"u*","w*"/),lgres)       
824
825               amres = True
826               amres@amParallelPosF   = 0.6                 
827               amres@amOrthogonalPosF = -0.2           
828               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
829            end if
830            if ((vNam(varn) .EQ. "ws" .OR. vNam(varn) .EQ. "w*") .AND. us .NE. 1) then
831               ws=1
832               overlay(plot_us,plot_ws)
833               n=n+1
834               plot_ps(n) = plot_us
835
836               ; ***************************************************
837               ; legend for combined plot
838               ; ***************************************************
839     
840               lgres                    = True
841               lgMonoDashIndex          = False
842               lgres@lgLabelFont        = "helvetica"   
843               lgres@lgLabelFontHeightF = .1           
844               lgres@vpWidthF           = 0.4           
845               lgres@vpHeightF          = 0.4         
846               lgres@lgDashIndexes      = (/0,0,0/)
847               lgres@lgLineColors       = (/237,144,80/)
848               lbid = gsn_create_legend(wks_ps,2,(/"u*","w*"/),lgres)       
849
850               amres = True
851               amres@amParallelPosF   = 0.6                 
852               amres@amOrthogonalPosF = -0.2           
853               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
854            end if
855         
856            if (vNam(varn) .EQ. "umax" .AND. v .NE. 1)
857               if (w .NE. 1) then
858                  u=1         
859                  overlay(plot_umax,plot_vmax)
860                  overlay(plot_umax,plot_wmax)
861               
862                  n=n+1
863                  plot_ps(n) = plot_umax
864
865                  ; ***************************************************
866                  ; legend for combined plot
867                  ; ***************************************************
868     
869                  lgres                    = True
870                  lgMonoDashIndex          = False
871                  lgres@lgLabelFont        = "helvetica"   
872                  lgres@lgLabelFontHeightF = .1           
873                  lgres@vpWidthF           = 0.4           
874                  lgres@vpHeightF          = 0.4         
875                  lgres@lgDashIndexes      = (/0,0,0/)
876                  lgres@lgLineColors       = (/237,144,80/)
877                  lbid = gsn_create_legend(wks_ps,3,(/"umax","vmax","wmax"/),lgres)       
878
879                  amres = True
880                  amres@amParallelPosF   = 0.6             
881                  amres@amOrthogonalPosF = -0.2           
882                  annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
883               end if
884            end if
885            if (vNam(varn) .EQ. "vmax" .AND. u .NE. 1)
886               if (w .NE. 1) then
887                  v=1 
888                  overlay(plot_umax,plot_vmax)
889                  overlay(plot_umax,plot_wmax)
890                  n=n+1
891                  plot_ps(n) = plot_umax
892
893                  ; ***************************************************
894                  ; legend for combined plot
895                  ; ***************************************************
896     
897                  lgres                    = True
898                  lgMonoDashIndex          = False
899                  lgres@lgLabelFont        = "helvetica"   
900                  lgres@lgLabelFontHeightF = .1         
901                  lgres@vpWidthF           = 0.4           
902                  lgres@vpHeightF          = 0.4         
903                  lgres@lgDashIndexes      = (/0,0,0/)
904                  lgres@lgLineColors       = (/237,144,80/)
905                  lbid = gsn_create_legend(wks_ps,3,(/"umax","vmax","wmax"/),lgres)       
906
907                  amres = True
908                  amres@amParallelPosF   = 0.6             
909                  amres@amOrthogonalPosF = -0.2           
910                  annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
911               end if
912            end if
913            if (vNam(varn) .EQ. "wmax" .AND. v .NE. 1)
914               if(u .NE. 1) then 
915                  w=1       
916                  overlay(plot_umax,plot_vmax)
917                  overlay(plot_umax,plot_wmax)
918                  n=n+1
919                  plot_ps(n) = plot_umax
920
921                  ; ***************************************************
922                  ; legend for combined plot
923                  ; ***************************************************
924     
925                  lgres                    = True
926                  lgMonoDashIndex          = False
927                  lgres@lgLabelFont        = "helvetica"   
928                  lgres@lgLabelFontHeightF = .1           
929                  lgres@vpWidthF           = 0.4           
930                  lgres@vpHeightF          = 0.4         
931                  lgres@lgDashIndexes      = (/0,0,0/)
932                  lgres@lgLineColors       = (/237,144,80/)
933                  lbid = gsn_create_legend(wks_ps,3,(/"umax","vmax","wmax"/),lgres)       
934
935                  amres = True
936                  amres@amParallelPosF   = 0.6             
937                  amres@amOrthogonalPosF = -0.2           
938                  annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
939               end if
940            end if
941           
942            if (vNam(varn) .EQ. "z_i_wpt" .AND. z .NE. 1) then
943               zw=1       
944               overlay(plot_z_i_wpt,plot_z_i_pt)
945               n=n+1
946               plot_ps(n) = plot_z_i_wpt
947       
948               ; ***************************************************
949               ; legend for combined plot
950               ; ***************************************************
951     
952               lgres                    = True
953               lgMonoDashIndex          = False
954               lgres@lgLabelFont        = "helvetica"   
955               lgres@lgLabelFontHeightF = .1           
956               lgres@vpWidthF           = 0.4           
957               lgres@vpHeightF          = 0.4         
958               lgres@lgDashIndexes      = (/0,0,0/)
959               lgres@lgLineColors       = (/237,144,80/)
960               lbid = gsn_create_legend(wks_ps,2,(/"z_i_wpt","z_i_pt"/),lgres)       
961
962               amres = True
963               amres@amParallelPosF   = 0.6                 
964               amres@amOrthogonalPosF = -0.2           
965               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)         
966            end if
967            if (vNam(varn) .EQ. "z_i_pt" .AND. zw .NE. 1) then
968               z=1     
969               overlay(plot_z_i_wpt,plot_z_i_pt)
970               n=n+1
971               plot_ps(n) = plot_z_i_wpt
972
973               ; ***************************************************
974               ; legend for combined plot
975               ; ***************************************************
976     
977               lgres                    = True
978               lgMonoDashIndex          = False
979               lgres@lgLabelFont        = "helvetica"   
980               lgres@lgLabelFontHeightF = .1           
981               lgres@vpWidthF           = 0.4           
982               lgres@vpHeightF          = 0.4         
983               lgres@lgDashIndexes      = (/0,0,0/)
984               lgres@lgLineColors       = (/237,144,80/)
985               lbid = gsn_create_legend(wks_ps,2,(/"z_i_wpt","z_i_pt"/),lgres)       
986
987               amres = True
988               amres@amParallelPosF   = 0.6                 
989               amres@amOrthogonalPosF = -0.2           
990               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)           
991            end if   
992         
993            if ((vNam(varn) .EQ. "wpptp0" .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq+"0") .AND. wp .NE. 1)
994               if (wt .NE. 1) then
995                  w0=1
996                  overlay(plot_wpptp0,plot_wpptp)
997                  overlay(plot_wpptp0,plot_wpt)
998                  n=n+1
999                  plot_ps(n) = plot_wpptp0
1000
1001                  ; ***************************************************
1002                  ; legend for combined plot
1003                  ; ***************************************************
1004     
1005                  lgres                    = True
1006                  lgMonoDashIndex          = False
1007                  lgres@lgLabelFont        = "helvetica"   
1008                  lgres@lgLabelFontHeightF = .1           
1009                  lgres@vpWidthF           = 0.4           
1010                  lgres@vpHeightF          = 0.4         
1011                  lgres@lgDashIndexes      = (/0,0,0/)
1012                  lgres@lgLineColors       = (/237,144,80/)
1013                  lbid = gsn_create_legend(wks_ps,3,(/"wpptp0","wpptp","wpt"/),lgres)       
1014
1015                  amres = True
1016                  amres@amParallelPosF   = 0.6             
1017                  amres@amOrthogonalPosF = -0.2           
1018                  annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
1019               end if           
1020            end if
1021            if ((vNam(varn) .EQ. "wpptp" .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq) .AND. w0 .NE. 1)
1022               if (wt .NE. 1) then
1023                 wp=1
1024                 overlay(plot_wpptp0,plot_wpptp)
1025                 overlay(plot_wpptp0,plot_wpt)
1026                 n=n+1
1027                 plot_ps(n) = plot_wpptp0
1028                 
1029                 ; ***************************************************
1030                  ; legend for combined plot
1031                  ; ***************************************************
1032     
1033                  lgres                    = True
1034                  lgMonoDashIndex          = False
1035                  lgres@lgLabelFont        = "helvetica"   
1036                  lgres@lgLabelFontHeightF = .1           
1037                  lgres@vpWidthF           = 0.4           
1038                  lgres@vpHeightF          = 0.4         
1039                  lgres@lgDashIndexes      = (/0,0,0/)
1040                  lgres@lgLineColors       = (/237,144,80/)
1041                  lbid = gsn_create_legend(wks_ps,3,(/"wpptp0","wpptp","wpt"/),lgres)       
1042
1043                  amres = True
1044                  amres@amParallelPosF   = 0.6             
1045                  amres@amOrthogonalPosF = -0.2           
1046                  annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres) 
1047               end if           
1048            end if
1049            if (vNam(varn) .EQ. "wpt" .AND. wp .NE. 1)
1050               if (w0 .NE. 1) then
1051                  wt=1
1052                  overlay(plot_wpptp0,plot_wpptp)
1053                  overlay(plot_wpptp0,plot_wpt)
1054                  n=n+1
1055                  plot_ps(n) = plot_wpptp0
1056
1057                  ; ***************************************************
1058                  ; legend for combined plot
1059                  ; ***************************************************
1060     
1061                  lgres                    = True
1062                  lgMonoDashIndex          = False
1063                  lgres@lgLabelFont        = "helvetica"   
1064                  lgres@lgLabelFontHeightF = .1           
1065                  lgres@vpWidthF           = 0.4           
1066                  lgres@vpHeightF          = 0.4         
1067                  lgres@lgDashIndexes      = (/0,0,0/)
1068                  lgres@lgLineColors       = (/237,144,80/)
1069                  lbid = gsn_create_legend(wks_ps,3,(/"wpptp0","wpptp","wpt"/),lgres)       
1070
1071                  amres = True
1072                  amres@amParallelPosF   = 0.6             
1073                  amres@amOrthogonalPosF = -0.2           
1074                  annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
1075               end if
1076            end if
1077
1078            if ((vNam(varn) .EQ. "pt_0_" .OR. vNam(varn) .EQ. "pt(0)") .AND. pz .NE. 1) then
1079               p=1     
1080               overlay(plot_pt_0_,plot_pt_zp_)
1081               n=n+1
1082               plot_ps(n) = plot_pt_0_ 
1083     
1084               ; ***************************************************
1085               ; legend for combined plot
1086               ; ***************************************************
1087     
1088               lgres                    = True
1089               lgMonoDashIndex          = False
1090               lgres@lgLabelFont        = "helvetica"   
1091               lgres@lgLabelFontHeightF = .1           
1092               lgres@vpWidthF           = 0.4           
1093               lgres@vpHeightF          = 0.4         
1094               lgres@lgDashIndexes      = (/0,0,0/)
1095               lgres@lgLineColors       = (/237,144,80/)
1096               lbid = gsn_create_legend(wks_ps,2,(/"pt_0_","pt_zp_"/),lgres)       
1097
1098               amres = True
1099               amres@amParallelPosF   = 0.6                 
1100               amres@amOrthogonalPosF = -0.2           
1101               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
1102            end if
1103            if ((vNam(varn) .EQ. "pt_zp_" .OR. vNam(varn) .EQ. "pt(zp)") .AND. p .NE. 1) then
1104               pz=1       
1105               overlay(plot_pt_0_,plot_pt_zp_)
1106               n=n+1
1107               plot_ps(n) = plot_pt_0_   
1108
1109               ; ***************************************************
1110               ; legend for combined plot
1111               ; ***************************************************
1112     
1113               lgres                    = True
1114               lgMonoDashIndex          = False
1115               lgres@lgLabelFont        = "helvetica"   
1116               lgres@lgLabelFontHeightF = .1           
1117               lgres@vpWidthF           = 0.4           
1118               lgres@vpHeightF          = 0.4         
1119               lgres@lgDashIndexes      = (/0,0,0/)
1120               lgres@lgLineColors       = (/237,144,80/)
1121               lbid = gsn_create_legend(wks_ps,2,(/"pt_0_","pt_zp_"/),lgres)       
1122
1123               amres = True
1124               amres@amParallelPosF   = 0.6                 
1125               amres@amOrthogonalPosF = -0.2           
1126               annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
1127            end if
1128
1129            if(vNam(varn) .NE. "pt_zp_" .AND. vNam(varn) .NE. "pt(zp)" .AND. \
1130               vNam(varn) .NE. "pt_0_" .AND. vNam(varn) .NE. "pt(0)" .AND. \
1131               vNam(varn) .NE. "wpt" .AND. vNam(varn) .NE. "wpptp" .AND. \
1132               vNam(varn) .NE. "w"+dq+"pt"+dq .AND. vNam(varn) .NE. "wpptp0" .AND. \
1133               vNam(varn) .NE. "w"+dq+"pt"+dq+"0" .AND. vNam(varn) .NE. "z_i_pt" .AND.\
1134               vNam(varn) .NE. "z_i_wpt" .AND. vNam(varn) .NE. "wmax" .AND. \
1135               vNam(varn) .NE. "vmax" .AND. vNam(varn) .NE. "umax" .AND. \
1136               vNam(varn) .NE. "ws" .AND. vNam(varn) .NE. "w*" .AND.  \
1137               vNam(varn) .NE. "us" .AND. vNam(varn) .NE. "u*" .AND. \
1138               vNam(varn) .NE. "Es" .AND. vNam(varn) .NE. "E*" .AND. \
1139               vNam(varn) .NE. "E") then
1140
1141               n=n+1
1142               res@xyLineColors   = (/237/)
1143               res@xyLabelMode    = False
1144               res@gsnLeftString  = vNam(varn)
1145               res@gsnRightString = unit(varn)
1146               res@trYMaxF        = max(data(varn,:))
1147               res@trYMinF        = min(data(varn,:))
1148               if (min(data(varn,:)) .EQ. max(data(varn,:))) then
1149                  if (min(data(varn,:)) .EQ. 0)then
1150                     res@trYMaxF = max(data(varn,:))-0.1
1151                     res@trYMinF = min(data(varn,:))+0.1
1152                  end if
1153                  if (min(data(varn,:)) .LT. 0)then
1154                     res@trYMaxF = max(data(varn,:))+(min(data(varn,:)))/2
1155                     res@trYMinF = min(data(varn,:))-(max(data(varn,:)))/2
1156                  end if
1157                  if (min(data(varn,:)) .GT. 0)then
1158                     res@trYMaxF = max(data(varn,:))-(min(data(varn,:)))/2
1159                     res@trYMinF = min(data(varn,:))+(max(data(varn,:)))/2
1160                  end if
1161               end if
1162               plot_ps(n) = gsn_csm_xy(wks_ps,t,data(varn,:),res) 
1163            end if
1164
1165            ; ***************************************************
1166            ; transparent legend as placeholder for single plots
1167            ; ***************************************************
1168            lgresmono                    = True
1169            lgMonoDashIndex              = False
1170            lgresmono@lgMonoLineColor    = True
1171            lgresmono@lgLabelFont        = "helvetica"   
1172            lgresmono@lgLabelFontHeightF = .1           
1173            lgresmono@vpWidthF           = 0.4           
1174            lgresmono@vpHeightF          = 0.4         
1175            lgresmono@lgLineColor        = 0
1176            lgresmono@lgPerimOn          = False
1177            lbid = gsn_create_legend(wks_ps,1,(/""/),lgresmono)       
1178
1179            amres = True
1180            amres@amParallelPosF   = 0.6                   
1181            amres@amOrthogonalPosF = -0.2           
1182            annoid1 = gsn_add_annotation(plot_ps(n),lbid,amres)
1183       
1184         else
1185           
1186            print("plot of " + vNam(varn))
1187           
1188            n=n+1
1189            res@xyLineColors            = (/237/)
1190            res@gsnLeftString       = vNam(varn)
1191            res@gsnRightString      = unit(varn)
1192       
1193            if (norm_t .NE. 1.)then
1194               res@tiXAxisString        = "t ("+unit_t+")"
1195            else
1196               res@tiXAxisString        = "t (s)"
1197            end if
1198            res@tiYAxisString = " "
1199            res@tiXAxisFontHeightF   = font_size
1200            res@txFontHeightF        = font_size
1201            res@tiYAxisFontHeightF   = font_size
1202            res@tmXBLabelFontHeightF = font_size
1203            res@tmYLLabelFontHeightF = font_size
1204            res@trYMaxF        = max(data(varn,:))
1205            res@trYMinF        = min(data(varn,:))
1206            if (min(data(varn,:)) .EQ. max(data(varn,:))) then
1207               if (min(data(varn,:)) .EQ. 0)then
1208                     res@trYMaxF = max(data(varn,:))-0.1
1209                     res@trYMinF = min(data(varn,:))+0.1
1210                  end if
1211                  if (min(data(varn,:)) .LT. 0)then
1212                     res@trYMaxF = max(data(varn,:))+(min(data(varn,:)))/2
1213                     res@trYMinF = min(data(varn,:))-(max(data(varn,:)))/2
1214                  end if
1215                  if (min(data(varn,:)) .GT. 0)then
1216                     res@trYMaxF = max(data(varn,:))-(min(data(varn,:)))/2
1217                     res@trYMinF = min(data(varn,:))+(max(data(varn,:)))/2
1218                  end if
1219            end if
1220            plot_ps(n) = gsn_csm_xy(wks_ps,t,data(varn,:),res)
1221           
1222         end if     
1223      end if
1224   end do
1225 
1226   ; ***************************************************
1227   ; merge plots onto one page
1228   ; ***************************************************
1229
1230   no_frames = 0
1231 
1232   if ((format_out .EQ. "eps" .OR. format_out .EQ. "epsi") .AND. n .gt. no_rows*no_columns) then
1233      gsn_panel(wks_ps,plot_ps(1:n),(/n,1/),resP)
1234      print(" ")
1235      print("Outputs to .eps or .epsi have only one frame")
1236      print(" ")
1237   else
1238      do np = 1,n,no_rows*no_columns   
1239         if ( np + no_rows*no_columns .gt. n) then   
1240            gsn_panel(wks_ps, plot_ps(np:n),(/no_rows,no_columns/),resP)
1241            no_frames = no_frames + 1           
1242         else
1243            gsn_panel(wks_ps, plot_ps(np:np+no_rows*no_columns-1),(/no_rows,no_columns/),resP)
1244            no_frames = no_frames + 1
1245         end if
1246      end do
1247   end if
1248
1249   if (format_out .EQ. "png" ) then
1250     png_output = new((/no_frames/), string)
1251     j = 0
1252     do i=0, no_frames-1
1253       j = i + 1
1254       if (j .LE. 9) then
1255         png_output(i) = file_out+".00000"+j+".png"
1256       end if
1257       if (j .GT. 9 .AND. j .LE. 99) then
1258         png_output(i) = file_out+".0000"+j+".png"
1259       end if
1260       if (j .GT. 99 .AND. j .LE. 999) then
1261         png_output(i) = file_out+".000"+j+".png"
1262       end if
1263       if (j .GT. 999) then
1264         png_output(i) = file_out+".00"+j+".png"
1265       end if
1266
1267       ;using imagemagick's convert for reducing the white
1268       ;space around the plot
1269       cmd = "convert -geometry 1000x1000 -density 300 -trim " +  \
1270              png_output(i) + " " + png_output(i)
1271       system(cmd)
1272     end do
1273
1274     print(" ")
1275     print("Output to: "+ png_output)
1276     print(" ")
1277   else
1278     print(" ")
1279     print("Output to: " + file_out +"."+ format_out)
1280     print(" ")
1281   end if
1282 
1283 
1284end
Note: See TracBrowser for help on using the repository browser.