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

Home » Public Forums » archive » Simplify if statements and for loops inside for loops
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Simplify if statements and for loops inside for loops [message #83677] Fri, 29 March 2013 09:07 Go to previous message
morganlsilverman is currently offline  morganlsilverman
Messages: 46
Registered: February 2013
Member
Hello,

I'm going for loop crazy and can't figure out how to simplify. It just keeps getting longer and more complicated. The gist of what I'm trying to do is match each element of mdate = string[14] to array adatea=string[74] (find matching dates). Once I know where if any place it matches I want to see if criteria are met to actually use that profile. This is where I go crazy. In some cases because there could be more than one profile on a single day, index might equal more than one location. For each of those locations I need to make sure there are at least 15 non-NaN values in the array and if so, calculate the difference between each altitude level and then if those differences do not exceed 500m I can use the profile do more calculations but if not then I just want to move onto the next matching date. Is there anyway to simplify this? Thank you.

Sincerely,
Morgan

for k=2,2 do begin
indexa = where(strmatch(strmid(adatea,0,8),strmid(mdate(k),0,8)) eq 1,num)
s = size(adatea)
ncol = s(1)
col = indexa mod ncol
row = indexa/ncol
if num eq 1 then begin ; If matches then go through profile critera
inda = where(finite(aalta(col,row,*)), count) ; Count number of non-NaN altitudes
l = 0
endif else begin
if num gt 1 then begin
for l=0,n_elements(num)-1 do begin
inda(l) = where(finite(aalta(col(l),row(l),*)), count)
endfor
if (n_elements(inda(l)) ge 15 ) then begin
dcount=0
diffa = fltarr(50)
for k=0,count-2 do begin ; Calculate difference between altitude levels
diffa(k) = aalta(col,row,inda(k+1))-aalta(col,row,inda(k))
dcount = dcount+1
endfor
diffa = diffa(0:dcount-1)
; Only interested in profiles with altitude differences less than 500 m
if (max(abs(diffa)) lt 500.0) then begin
; Calculate potential temperature for ACARS
for m=0,49 do begin
aThetaa(icount,jcount,m) = PotentialTemperature(apresa(col,row,m), atempa(col,row,m))
endfor
icount = icount + 1
endif
endif
endif
endfor
[Message index]
 
Read Message
Read Message
Previous Topic: Re: Rotating Tickmark labels
Next Topic: Re: Regression fit and random noise

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

Current Time: Sat Oct 11 02:08:28 PDT 2025

Total time taken to generate the page: 0.23958 seconds