Hi Michel
Just as Jamie Scott suggested ... . addfiles is the "NCL way"
Something like:
fils_u = systemfunc ("ls u*.nc")
fils_v = systemfunc ("ls v*.nc")
fu = addfiles (fils_u, "r")
fv = addfiles (fils_v, "r")
ListSetType (f, "cat") ; concatenate (=default) no need to do
this
u = fu[:]->U ; read U from all files
v = fv[:]->V ; read V from all files
printVarSummary(u) ; assuming (time,lat,lon) or (time,lev,lat,lon)
printVarSummary(v)
;************************************************
; error checks: make sure sizes and times 'match'
;************************************************
dims_u = dimsizes(u)
dims_v = dimsizes(v)
rank_u = dimsizes(dims_u)
rank_v = dimsizes(dims_v)
if (rank_u.ne.rank_v) then
print("rank mismatch: rank_u="+rank_u+" rank_v="+rank_v)
exit
end if
if (.not.all(dims_u.eq.dims_v)) then
print("dimsizes mismatch: ")
print(dims_u+" "+dims_v)
exit
end if
if (.not.all(u&time .eq. v&time)) then
print("times do not match: ")
print(u&time+" "+v&time)
exit
end if
ntim = dim_u(0) ; total number of times
;***************************************************
; Compute speed
;***************************************************
spd = sqrt(u^2 + v^2) ; speed
copy_VarCoords(u, spd) ; contributed.ncl
spd_at_long_name = "speed"
spd_at_units = u_at_units
printVarSummary( spd )
;***************************************************
; Compute thresh hold countr at each grid point
;***************************************************
spd_lo =
spd_hi =
if (rank_u.eq.3) then
work = spd(lat|:,lon|:,time|:) ; dim_num works on the
right dimension
else
work = spd(lev|:,lat|:,lon|:,time|:)
end if
kspd = dim_num( work.ge.spd_lo .and. work.le.spd_hi ) ; type imteger
or
kspd = 1.0*dim_num( work.ge.spd_lo .and. work.le.spd_hi ) ; type
float
copy_VarCoords(work, kspd)
kspd_at_long_name = "range count: lo="+spd_lo+" ; hi="+spd_hi
kspd_at_units = "count: max would ne "+ntim
or, if type float and you want %
kspd = (kspd/ntim)*100.
kspd_at_units = "%"
Michel.Mesquita_at_bjerknes.uib.no wrote:
> Hi,
>
> I have a question about reading multiple files. From a list of 100
> netcdf files (50 U
> wind and 50 V wind) I need to calculate the wind speed. Each of my
> files refers to a year
> of data (4x daily), for example, uwind.1950.nc, vwind.1950.nc and so on...
>
> After I compute the windspeed (sqrt(u2+v2)) for all years and for each
> timestep, I need
> to compute, per grid point, the number of 'events' in which the wind
> speed was between
> certain thresholds.
>
> This means that I need to calculate the wind speed and then
> concatenate/append each time
> step for all years. What is the 'NCL' way of doing that?
>
> Let's suppose I try the sequence:
>
> fili = systemfunc("ls *.nc")
> print(fili)
> nfili = dimsizes(fili)
> (A) emptymatrix = ??????
> do i=0,nfili-1
> (B) emptymatrix = ???? CONCATENATE/APPEND VALUES ????
> end do
>
> One way of doing that would be to create an empty matrix (as shown in
> A) and then to
> concatenate the new values (as shown in B). This way, I would have a
> new matrix which
> would contain wind speed data for all years (4x daily).
>
> Which would be the optimal procedure to do that in NCL?
>
> I thank you so much in advance!
>
> Regards,
>
> Michel
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
-- ====================================================== Dennis J. Shea tel: 303-497-1361 | P.O. Box 3000 fax: 303-497-1333 | Climate Analysis Section | Climate & Global Dynamics Div. | National Center for Atmospheric Research | Boulder, CO 80307 | USA email: shea 'at' ucar.edu | ====================================================== _______________________________________________ ncl-talk mailing list List instructions, subscriber options, unsubscribe: http://mailman.ucar.edu/mailman/listinfo/ncl-talkReceived on Mon Mar 30 2009 - 14:36:21 MDT
This archive was generated by hypermail 2.2.0 : Mon Apr 06 2009 - 14:56:31 MDT