<div dir="ltr">Thanks, Dave. You are right. <div> "graphic array" do consume a lot of memory. After following your suggestion to reduce the size of the array, my code works! </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 10, 2017 at 7:25 PM, Dave Allured - NOAA Affiliate <span dir="ltr"><<a href="mailto:dave.allured@noaa.gov" target="_blank">dave.allured@noaa.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Graphic arrays in NCL consume large amounts of memory in hidden structures.  More memory is consumed with each plot command.  It is likely that your script is running out of memory or slowing way down because of lots of virtual memory swapping.</div><div><br></div><div>I agree with most of Alan's suggestions.  However I think it is not necessary in this case to break up the processing and plotting.  The most important change would be to restructure your loops so that you are not creating such a large graphics array.  I have successfully made large PDF files with hundreds of panel plot frames, using a careful loop structure that only reads, processes, and plots one PDF frame at a time.<br></div><div><br></div><div>Will a new structure like this work for you?  Notice that the smaller 2-D graphics array gets reused at every time step, which generally means that the hidden memory is reclaimed each time.  This assumes there are no calculations between time steps.  This might not be true.  However there are other solutions for that case, if needed.</div><div><br></div><div><font color="#ff0000">plot_1_2d=new((/</font><span style="color:rgb(255,0,0)">num_var</span><font color="#ff0000">,nlevel<wbr>s/),"graphic") <br></font><span class=""><div><font color="#ff0000"><br></font></div><div><font color="#ff0000">do it=0, ntimes-1</font></div><div><font color="#ff0000"><br></font></div><div><span style="color:rgb(255,0,0)">     do var_id=num_var-1</span></div><div><font color="#ff0000">              do level=nlevels-1</font></div><div><font color="#ff0000">                       ........................... ; I skip my code here</font></div></span><div><font color="#ff0000">                       plot_1_2d(</font><span style="color:rgb(255,0,0)">var_id,</span><span style="color:rgb(255,0,0)">level) = contour_data_1_2d(it,var_id,le<wbr>vel</span><span style="color:rgb(255,0,0)">)</span></div><div><div><font color="#ff0000">              end do</font></div><div></div></div><div><div><font color="#ff0000">     end do</font></div><div><font color="#ff0000"><br></font></div><div></div><div><span style="color:rgb(255,0,0)">     do var_id=num_var-1</span><br></div><div><font color="#ff0000">              do level=nlevels-1</font></div></div><div><div><font color="#ff0000">                      gsn_panel(wks,(/plot_1_2d(var_<wbr>id,level)/),(/1,1/),resP)     </font></div><div><font color="#ff0000">                      frame(wks)    ; ???</font></div></div><span class=""><div><div><font color="#ff0000">              end do</font></div><div><font color="#ff0000">     end do</font></div><div><span style="color:rgb(255,0,0)"><br></span></div><div><span style="color:rgb(255,0,0)">end do</span><br></div></div><div><font color="#ff0000"><br></font></div></span><span class="HOEnZb"><font color="#888888"><div>--Dave</div></font></span></div><div><div class="h5"><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 10, 2017 at 4:21 PM, music piano <span dir="ltr"><<a href="mailto:musicpianoljy@gmail.com" target="_blank">musicpianoljy@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,  everyone <div><br></div><div>Sorry for bothering you. Thanks for Alan's detail suggestions. I like your idea that process the data before plotting. I didn't show my original code which is very lengthy, in which I actually process the data inside ncl since it has convenient functions to deal with WRF data, such as interpolating to pressure levels.</div><div><br></div><div>The code I show here is just a structure to demonstrate the problem, in which I made a typo error(should be level, not k). I actually use panel plot to organize my figure, not just drawing one figure as I showed in this email. Thus, drawing before the panel plot is not suitable. That is why I need an "graphic array" to store all the figures.</div><div><br></div><div>The code actually stops before the panel plot. So I think it is not the problem of panel plot. I am still interested to know why the script stops working when I increase the number of loops.</div><div><br></div><div>Anybody has more suggestions? </div><div><br></div><div>Best regards</div><div>Richard</div><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 10, 2017 at 2:41 PM, Alan Brammer <span dir="ltr"><<a href="mailto:abrammer@albany.edu" target="_blank">abrammer@albany.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="font-family:verdana,sans-serif">There might be some copy/paste errors in your email and I don't know about limits on graphic array sizes but a couple comments before someone from the NCL team can reply.  </div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif"><div>Possibly most importantly, given that you're drawing individual plots, why not just plot in the first loop and drop the dependence on the array. <br></div><div><br></div><div>Plots have a bunch of attributes connected to them I feel like using the (/ /) notation will likely disrupt how NCL handles graphics and tickmarks etc.  Although if this works on smaller loops maybe it doesn't matter. <br></div><div><br></div></div><div style="font-family:verdana,sans-serif">Why use gsn_panel() for a single plot? Why not just draw() and frame(), and why frame() after gsn_panel() instead of just letting gsn_panel() do it. </div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Your 2nd nested loop uses level as the iterator but you use k as the index in the gsn_panel call.  (copy paste error or actual typo?)</div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Finally, if you're processing 650GB of data, it's probably best to process the data and save the processed output to a netcdf. Then have a second script that plots the processed data. This way you can play with the plotting criteria without having to run through all of the data again.  </div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Or if you're just digging through raw data which based on the loops you may well be doing, panoply, ncview or similar would allow you to just visualise the data without having to process it at all. Are you sure you want 972 pages in a single pdf? </div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Good luck, </div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Alan</div><div style="font-family:verdana,sans-serif"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_3494606378612666925m_-9209236786091532753gmail-m_-3737927395154997266gmail-h5">On Fri, Nov 10, 2017 at 2:17 PM, music piano <span dir="ltr"><<a href="mailto:musicpianoljy@gmail.com" target="_blank">musicpianoljy@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div><div class="m_3494606378612666925m_-9209236786091532753gmail-m_-3737927395154997266gmail-h5"><div dir="ltr"><div>Hi, everyone </div><div><br></div><div>I produced many figures and passed to panel plot. I define a "graphic" array to store my figures. </div><div><br></div><div>The following script is the essential part to produce the figure. There are many files, the code read one file at a time. It loops over many times, many variables and many vertical levels. </div><div><br></div><div>After all the figures were stored in plot_1_3d array. the panel plot plot them. <b>This code works fine</b> when plot_1_3d is a smaller array. For instance, ntimes=4, num_var=2, nlevels=18.</div><div><br></div><div> However, when I loop over many files, such as ntimes=27, the program stops without any error message when it loops to it=12 or some other number. Each of the file the program read is 25GB, but I delete old variables in every time loop. The only array exists over the whole period is the "graphic" array. I am not sure it is the memory issue. I run this code on a supercomputer node, which has  32GB memory. The output pdf file for the figure is 43MB if ntimes=4, nlevels=18, num_var=2.</div><div><br></div><div>I will be very appreciated if anybody can help me. </div><div><br></div><div>My scripts: </div><font color="#ff0000">plot_1_3d=new((/ntimes,</font><span style="color:rgb(255,0,0)">num_var</span><font color="#ff0000"><wbr>,nlevels/),"graphic") <br></font><div><font color="#ff0000"><br></font></div><div><font color="#ff0000">do it=0, ntimes-1</font></div><div><font color="#ff0000">    do var_id=num_var-1</font></div><div><font color="#ff0000">              do level=nlevels-1</font></div><div><font color="#ff0000">                         ........................... ; I skip my code here</font></div><div><font color="#ff0000">                        plot_1_3d(it,var_id,level) = contour_data_1_3d(var_id,level<wbr>)<br></font></div><div><font color="#ff0000">               end do</font></div><div><font color="#ff0000">     end do</font></div><div><font color="#ff0000">end do</font></div><div><font color="#ff0000"><br></font></div><div><div><font color="#ff0000">do it=0, ntimes-1</font></div><div><font color="#ff0000">    do var_id=num_var-1</font></div><div><font color="#ff0000">              do level=nlevels-1</font></div></div><div><div><font color="#ff0000">                      gsn_panel(wks,(/plot_1_3d(it,v<wbr>ar_id,k)/),(/1,1/),resP     )     </font></div><div><font color="#ff0000">                       frame(wks)</font></div></div><div><div><font color="#ff0000">      end do</font></div><div><font color="#ff0000">     end do</font></div><div><font color="#ff0000">end do</font></div></div></div></div></div></blockquote></div></div></blockquote></div></div></div></div></blockquote></div></div></div></div></div>
</blockquote></div><br></div>