comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Loop breaks IDL
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: Loop breaks IDL [message #62094] Sat, 23 August 2008 12:51
mbweller is currently offline  mbweller
Messages: 24
Registered: July 2008
Junior Member
Well, that's what I get for staring at the computer screen for too
long while doing monotonous tasks, my brain stops working. I figured
out how to fix it with an if then begin statement, but it is always
nice to see other approaches, gives someone ideas.

Thanks for all the help.

~Matt
Re: Loop breaks IDL [message #62096 is a reply to message #62094] Fri, 22 August 2008 23:47 Go to previous message
Chris[6] is currently offline  Chris[6]
Messages: 84
Registered: July 2008
Member
try this

ind_e=where(array[1,*] eq 2, count)
if count eq 0 then tl_small=0 else begin
ext=array[*,ind_e]
ext_test=where(ext[2,*] lt 2*x1, ct)
if ct eq 0 then tl_small=0 else tl_small=total(ext[2,ext_test]^3)
endelse

or, more compactly,

tl_small=total(array[2,*]^3*((array[1,*] eq 2) and (array[2,*] lt
2*x1)))


chris
Re: Loop breaks IDL [message #62097 is a reply to message #62096] Fri, 22 August 2008 22:42 Go to previous message
mbweller is currently offline  mbweller
Messages: 24
Registered: July 2008
Junior Member
On Aug 22, 8:48 pm, David Fanning <n...@dfanning.com> wrote:
> Jeremy Bailin writes:
>> The probelm is that it keeps going through the loop over and over
>> again waiting for count to no longer be greater than zero... but count
>> never changes within the loop, so "count gt 0" is always true.
>
> Well, that, too. :-)
>
> Cheers,
>
> David
> --
> David Fanning, Ph.D.
> Fanning Software Consulting, Inc.
> Coyote's Guide to IDL Programming:http://www.dfanning.com/
> Sepore ma de ni thui. ("Perhaps thou speakest truth.")

It sound as if the while statement is not the correct approach, or at
least not count gt 0. What might work instead then?

~Matt
Re: Loop breaks IDL [message #62098 is a reply to message #62097] Fri, 22 August 2008 20:48 Go to previous message
David Fanning is currently offline  David Fanning
Messages: 11724
Registered: August 2001
Senior Member
Jeremy Bailin writes:

> The probelm is that it keeps going through the loop over and over
> again waiting for count to no longer be greater than zero... but count
> never changes within the loop, so "count gt 0" is always true.

Well, that, too. :-)

Cheers,

David
--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
Re: Loop breaks IDL [message #62099 is a reply to message #62098] Fri, 22 August 2008 20:47 Go to previous message
David Fanning is currently offline  David Fanning
Messages: 11724
Registered: August 2001
Senior Member
mbweller@gmail.com writes:

> I beginning to feel like I'm inundating this board :)
>
> Is this the best way to do this, I 'm beginning to think not since IDL
> (in windows) starts to use up all my cpu cycles for more than 10
> minutes.
>
> ------------------------------------------------------------ -----------------------------
> ind_e= where (array[1,*] eq 2,count)
> if count eq 0 then tl_small=0 else ext=array[*,ind_e]
> while count gt 0 do begin
> ext_ = where(ext[2,*] lt 2*x1) ; select faults such that L < 2x
> ext_small = ext[*,ext_] ; place in matrice with identifer
> lc_small= ext_small[2,*] ; select only lengths to sum for
> small faults
> tl_small = total(lc_small^3) ; sum lengths according to
> kostrov summation, small faults
> endwhile
> ------------------------------------------------------------ ------------------------------------------------------------ -------------------
>
> Essentially there are 2 divisions, column 2 (with values of 1 or 2)
> and fault size (large or small) of the data.
> In case it's not obvious, the first two lines are saying that if there
> is no data then tl_small = 0. If however, there is data do everything
> below it to get some non 0 value of tl_small.
> It seems like IDL just hangs up on the loop. Maybe this has something
> to do with the embedded where statements?
>
> As always thanks in advance and any help would be appreciated

I would try transposing your array so you can access the
data in memory order. That should help a LOT.

Cheers,

David

--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
Re: Loop breaks IDL [message #62100 is a reply to message #62099] Fri, 22 August 2008 20:42 Go to previous message
Jeremy Bailin is currently offline  Jeremy Bailin
Messages: 618
Registered: April 2008
Senior Member
On Aug 22, 11:23 pm, mbwel...@gmail.com wrote:
> I beginning to feel like I'm inundating this board :)
>
> Is this the best way to do this, I 'm beginning to think not since IDL
> (in windows) starts to use up all my cpu cycles for more than 10
> minutes.
>
> ------------------------------------------------------------ -----------------------------
> ind_e= where (array[1,*] eq 2,count)
> if count eq 0 then tl_small=0 else ext=array[*,ind_e]
> while count gt 0 do begin
> ext_ = where(ext[2,*] lt 2*x1)    ; select faults such that L < 2x
> ext_small = ext[*,ext_]       ; place in matrice with identifer
> lc_small= ext_small[2,*]          ; select only lengths to sum for
> small faults
> tl_small = total(lc_small^3)         ; sum lengths according to
> kostrov summation, small faults
> endwhile
> ------------------------------------------------------------ ------------------------------------------------------------ -------------------
>
> Essentially there are 2 divisions, column 2 (with values of 1 or 2)
> and fault size (large or small) of the data.
> In case it's not obvious, the first two lines are saying that if there
> is no data then tl_small = 0. If however, there is data do everything
> below it to get some non 0 value of tl_small.
> It seems like IDL just hangs up on the loop. Maybe this has something
> to do with the embedded where statements?
>
> As always thanks in advance and any help would be appreciated
>
> ~Matt.

The probelm is that it keeps going through the loop over and over
again waiting for count to no longer be greater than zero... but count
never changes within the loop, so "count gt 0" is always true.

-Jeremy.
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Shape file to EVF file Programatically ...
Next Topic: FOR loops removal

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 03:29:47 PDT 2025

Total time taken to generate the page: 1.41012 seconds