<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">Emma,</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">The line:</div><div class="gmail_default" style><font face="verdana, sans-serif">  q_save(nt,nx) = where(xq .eq. 0, 0, 1)</font><br></div><div class="gmail_default" style><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style><font face="verdana, sans-serif">should be:</font></div><div class="gmail_default" style><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style><font face="verdana, sans-serif">  q_save = where(xq .eq. 0, 0, 1)<br></font></div><div class="gmail_default" style><br></div><div class="gmail_default" style>Wei</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><font face="tahoma, sans-serif">================================================</font><div><font face="tahoma, sans-serif">1850 Table Mesa Dr.</font></div><div><font face="tahoma, sans-serif">Boulder, CO 80307</font></div><div><font face="tahoma, sans-serif">Phone: 303-497-8924</font></div></div></div></div>
<br><div class="gmail_quote">On Thu, Jan 15, 2015 at 8:57 AM, Wei Huang <span dir="ltr">&lt;<a href="mailto:huangwei@ucar.edu" target="_blank">huangwei@ucar.edu</a>&gt;</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 class="gmail_default" style="font-family:verdana,sans-serif">Emma,</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Your function is slow is because you did not take the advantage of NCL&#39;s</div><div class="gmail_default" style="font-family:verdana,sans-serif">array operation, but looped through individuals.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">You may try to change your code to something like:</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default"><div class="gmail_default"><font face="verdana, sans-serif">undef(&quot;Qsave&quot;)</font></div><div class="gmail_default"><font face="verdana, sans-serif">function Qsave(quality:numeric)</font></div><div class="gmail_default"><font face="verdana, sans-serif">local ntime,nxtrack,nx,ii,ic,bit,bstr,nn,mm,xq,xq_tmp,xq_ref,xq_ref1</font></div><div class="gmail_default"><font face="verdana, sans-serif">begin</font></div><div class="gmail_default"><font face="verdana, sans-serif">  xq_ref1 = &quot;1010101010011111&quot; ; Never allow these flags to be set in the filtering</font></div><div class="gmail_default"><font face="verdana, sans-serif">  xq_ref = stringtocharacter(xq_ref1)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  nbits = dimsizes(xq_ref)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  q_save  = new(dimsizes(quality),integer)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  dims = dimsizes(quality)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  ntime   = dims(2)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  nxtrack = dims(1)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  ii = touint(quality)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  bstr = new((/ntime, nxtrack/), string)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  bstr = &quot;&quot;</font></div><div class="gmail_default"><font face="verdana, sans-serif">  ic = ii</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif">  do nn = 0, nbits-1</font></div><div class="gmail_default"><font face="verdana, sans-serif">     bit  = (ic % 2) ; pick off the lowest bit</font></div><div class="gmail_default"><font face="verdana, sans-serif">     ic   = ic/2 ; shift right one bit, drop lowest</font></div><div class="gmail_default"><font face="verdana, sans-serif">     bstr = bit + bstr</font></div><div class="gmail_default"><font face="verdana, sans-serif">  end do ; nn</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif">  xq = toint64(bstr)</font></div><div class="gmail_default"><font face="verdana, sans-serif">  q_save(nt,nx) = where(xq .eq. 0, 0, 1)</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font face="verdana, sans-serif">  return(q_save)</font></div><div class="gmail_default"><font face="verdana, sans-serif">end</font></div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">and let us know if this works for your case.</div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Regards,</div><div style="font-family:verdana,sans-serif"><br></div><div style="font-family:verdana,sans-serif">Wei</div></div></div><div class="gmail_extra"><br clear="all"><div><div><div dir="ltr"><font face="tahoma, sans-serif">================================================</font><div><font face="tahoma, sans-serif">1850 Table Mesa Dr.</font></div><div><font face="tahoma, sans-serif">Boulder, CO 80307</font></div><div><font face="tahoma, sans-serif">Phone: <a href="tel:303-497-8924" value="+13034978924" target="_blank">303-497-8924</a></font></div></div></div></div>
<br><div class="gmail_quote"><div><div class="h5">On Thu, Jan 15, 2015 at 3:35 AM, Emma Andersson <span dir="ltr">&lt;<a href="mailto:emma.andersson@chalmers.se" target="_blank">emma.andersson@chalmers.se</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div style="word-wrap:break-word">Hi NCL-talk,<div><br></div><div>I’m having some trouble with a my own written function that I call within a loop. </div><div><br></div><div>The function I’ve written converts quality flags from a satellite data set into an array of integers with zeros and ones.</div><div>The quality flags are given in ushort and corresponds to a 16-bit number. What I do is that I check each pixels</div><div>bit number if certain flags has been set. I compare with a reference bit number which contains the flags that I don’t want to be set</div><div>and then determines whether my new array value should be set to a one or a zero. I have basically written a kind of “bitand” function, </div><div>where if the output from the comparison are all zeros then I set my new array value to zero. I hope this description was understandable.</div><div><br></div><div>What happens when I call my function from a main script, is that it goes slower and slower for each step in the loop. My question is, </div><div>why it goes slower? Is something accumulating inside the function for each time I call it? I’m quite sure it doesn’t accumulate outside </div><div>in the main script, because I did some print statements inside the function and it was clearly there it was going slower. I also delete </div><div>the output in the main script after it being used? Would it be better to use a procedure instead of a function?</div><div><br></div><div>Kind regards,</div><div>Emma Andersson</div><div><br></div><div><div>-----------------------------------------------------------------------------------</div><div>PhD student</div><div>Global Environmental Measurement Techniques and Modelling</div><div>Earth and Space Sciences</div><div>Chalmers University of Technology</div><div>Gothenburg, Sweden</div><div>emma.andersson(at)<a href="http://chalmers.se" target="_blank">chalmers.se</a></div><div><div>-----------------------------------------------------------------------------------</div><div><br></div></div></div><div><br></div><div><br></div><div><br></div><div></div></div><br><div style="word-wrap:break-word"><div></div></div><br></div></div>_______________________________________________<br>
ncl-talk mailing list<br>
List instructions, subscriber options, unsubscribe:<br>
<a href="http://mailman.ucar.edu/mailman/listinfo/ncl-talk" target="_blank">http://mailman.ucar.edu/mailman/listinfo/ncl-talk</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>