>I am having problems with the ability to neglect values at a particular
>index. I have a 1-D array containing 20 values. If any index (i) of that
>array corresponds to a missing/fill value (-999), I do not want to use that
>index in furture calculations. Any thoughts on how this may be accomplished?
>Below is a subsection of my script. Thanks!
Yes the "ind" and "ismissing" functions can readily be used.
http://ngwww.ucar.edu/ngdoc/ng/ref/ncl/functions/ind.html
http://ngwww.ucar.edu/ngdoc/ng/ref/ncl/functions/ismissing.html
Let x be a 1D array
ii = ind(.not.ismissing(x)) ; subscripts where x.ne.x@_FillValue
>
>
> angle = new((/20/),float)
> azAngle = new((/20/),float)
> vel_circle = new((/20/),float)
> alpha = new((/20/),float)
> aVec = new((/20/),float)
> bVec = new((/20/),float)
> cVec = new((/20/),float)
> aVecSq = new((/20/),float)
> bVecSq = new((/20/),float)
>
> vel_circle@_FillValue = -999
When using "new", a default _FillValue is assigned if one
is not explicitly provided via the optional 3rd argument.
For type float, the default is -999.
>
> do i=0,19
>
> angle(i) = (2*3.14*(i))/20
> rr(i) = dim_rMid+RR*sin(angle(i))
> az(i) = dim_azMid+RAZ*cos(angle(i))
>
> azAngle(i) = az(floattoint(az(i)))
> azAngle(i) = azAngle(i)*(3.14/180)
>
> vel_circle(i) = vel(floattoint(az(i)),floattoint(rr(i)))*.01
>
> if (vel_circle(i).neq.-999) then
>
> aVec(i) = sin(angle(i)-azAngle(i))
> bVec(i) = cos(angle(i)-azAngle(i))
> cVec(i) = vel_circle(i)-15*cos(1.4-azAngle(i))
>
> aVecSq(i) = (aVec(i))^2
> bVecSq(i) = (bVec(i))^2
>
> end if
>
> end do
>
[1] Use array syntax, operations and built-in functions.
This results in *much* faster code. This pertains to
*any* interpreted language ... eg NCL, matlab, IDL
N = 20
pi = 4.*atan(1.)
rad = pi/180.
angle = 2.*ispan(0,N-1,1)/pi
rr = dim_rMid+RR*sin(angle)
az = dim_azMid+RAZ*cos(angle)
azAngle = az(floattoint(az))
azAngle = azAngle*rad
vel_circle = vel(floattoint(az),floattoint(rr))*.01
vel_circle@_FillValue = -999.
; maybe better
; imsg = ind(vel_circle.lt.-900)
; vel_circle(imsg) = -999.
; vel_circle@_FillValue = -999.
ii = ind(.not.ismissing(val_circle)) ; indices with valid values
aVec(ii) = sin(angle(ii)-azAngle(ii))
bVec(ii) = cos(angle(ii)-azAngle(ii))
cVec(ii) = vel_circle(ii)-15*cos(1.4-azAngle(ii))
aVecSq(ii) = (aVec(ii))^2
bVecSq(ii) = (bVec(ii))^2
--- Tip: Learn to use ind and the ndtooned and onedtond functions.good luck D
_______________________________________________ ncl-talk mailing list ncl-talk@ucar.edu http://mailman.ucar.edu/mailman/listinfo/ncl-talk
This archive was generated by hypermail 2b29 : Fri Feb 11 2005 - 09:18:18 MST