[ncl-talk] total number of times in files opened with addfiles

Zilore Mumba zmumba at gmail.com
Mon Apr 4 15:25:30 MDT 2022


Thank you all who looked at my code, and thanks Dave. I figured out it
should be "files_all[it]" and my code now works.

<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
Virus-free.
www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

On Mon, Apr 4, 2022 at 9:53 PM Zilore Mumba <zmumba at gmail.com> wrote:

> Thanks again Dave for your help. I did note that you gave me two ways of
> getting ntimes. I kept both ( just for my learning) but commented out one.
> My understanding is that   tc = wrf_user_getvar (files_all, "tc", it) is
> to get tc in all the files, in other words, the same as tc =
> wrf_user_getvar (files_all[:], "tc", it) is that correct?
> Now my problem is on contour_tc = wrf_contour(files_all,wks,tc_plane,opts).
> I think this has to take one file to plot at time it, out of
> files_all.contour_tc = wrf_contour(files_all,wks,tc_plane,opts)
> Whether I put contour_tc = wrf_contour(files_all,wks,tc_plane,opts),
> contour_tc = wrf_contour(files_all(0),wks,tc_plane,opts) or contour_tc =
> wrf_contour(files_all[0],wks,tc_plane,opts) I get "fatal:Argument type
> mismatch on argument (0) of (wrf_contour) can not coerce".
> So my problem is how do I specify the file from which to plot on that line?
> I am trying to go through the documentation on subscripting, but ncl is
> such a vast library that I need time.
>
>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Virus-free.
> www.avast.com
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
> <#m_5770547303678038220_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>
> On Mon, Apr 4, 2022 at 8:11 PM Dave Allured - NOAA Affiliate <
> dave.allured at noaa.gov> wrote:
>
>> Zilore, I showed you two different ways to get ntimes.  Please choose
>> only one or the other.  Do not put both in your program, it makes it hard
>> to understand.  Also ntimes is a nice scalar, not an array.  So only use
>> ntimes, not ntimes(0) or dims(0).
>>
>> I think you want times_to_use, not times, to display time strings:
>>
>>     print ("Working on time: " + times_to_use(it) )
>>     res at TimeLabel = times_to_use(it)
>>
>> There are two different ways to do time indexing with wrf_user_getvar.
>> See the function documentation, and the examples at the end of that page.
>> The way you have it now looks like one of the correct ways.
>>
>>     tc = wrf_user_getvar (files_all, "tc", it)
>>
>>
>> On Sat, Apr 2, 2022 at 2:24 PM Zilore Mumba <zmumba at gmail.com> wrote:
>>
>>> Thanks Dave for the assistance. I have made some progress. While I know
>>> that I need time to learn ncl subscripting, perhaps I could be helped to
>>> make the script work. This script is an adaptation of one of the provided
>>> wrf-ncl scripts. The script plots several variables at different levels. I
>>> have reproduced below, parts of the script which plot temperature. I have
>>> marked in
>>> 1. yellow, some guidance I got from Dave
>>> 2. blue some changes I made to getting the times
>>> 3. purple, getting the variables, with files_all (I assume it is
>>> equivalent to files_all[:] and gets variables from all files)
>>> 4. red I have to specify from which file to plot. This is where I have a
>>> problem, how to index files_all.
>>> I hope I can be assisted.
>>>
>>>   files_all = addfiles(FILES+".nc","r")
>>>
>>> ; get time information
>>>   times_in_file = files_all[:]->Times
>>>
>>> * dims = dimsizes (times)  ntimes = dimsizes (times(:,0))*
>>>
>>> ; strip out the day and hour
>>>   times_to_use = new(dims(0),string)
>>>
>>>   do i=0,dims(0)-1
>>>     times_to_use(i) = chartostring(times_in_file(i,8:12))
>>>   end do
>>>
>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>>   do it = 0,ntimes(0)-1,2             ; TIME LOOP
>>>
>>>     print("Working on time: " + times(it,0) )
>>>     res at TimeLabel = times(it,0)   ; Set Valid time to use on plots
>>>
>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>> ; First get the variables we will need
>>>     tc = wrf_user_getvar(*files_all**,*"tc",it)        ; T in C
>>>     u  = wrf_user_getvar(files_all,"ua",it)        ; u averaged to mass
>>> points
>>>     v  = wrf_user_getvar(files_all,"va",it)        ; v averaged to mass
>>> points
>>>     p  = wrf_user_getvar(files_all, "pressure",it) ; pressure is our
>>> vertical coordinate
>>>     z  = wrf_user_getvar(files_all, "z",it)        ; grid point height
>>>     rh = wrf_user_getvar(files_all,"rh",it)        ; relative humidity
>>>
>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>>     do level = 0,nlevels-1                 ; LOOP OVER LEVELS
>>>
>>>       pressure = pressure_levels(level)
>>>       tc_plane = wrf_user_intrp3d(tc,p,"h",pressure,0.,False)
>>>       z_plane  = wrf_user_intrp3d( z,p,"h",pressure,0.,False)
>>>       rh_plane = wrf_user_intrp3d(rh,p,"h",pressure,0.,False)
>>>       u_plane  = wrf_user_intrp3d( u,p,"h",pressure,0.,False)
>>>       v_plane  = wrf_user_intrp3d( v,p,"h",pressure,0.,False)
>>>
>>>       spd     = (u_plane*u_plane + v_plane*v_plane)^(0.5) ; m/sec
>>>       spd at description = "Wind Speed"
>>>       spd at units = "m/s"
>>>       u_plane = u_plane*1.94386     ; kts
>>>       v_plane = v_plane*1.94386     ; kts
>>>       u_plane at units = "kts"
>>>       v_plane at units = "kts"
>>>
>>>       wks = gsn_open_wks(type,"Plots00-" + "P" + pressure_levels(level)
>>> + "_" + times_to_use(it) + "Z")
>>>
>>>       ; Plotting options for T
>>>         opts = res
>>>         opts at cnLineColor = "Red"
>>>         opts at ContourParameters = (/ 5.0 /)
>>>         opts at cnInfoLabelOrthogonalPosF = 0.07  ; offset second label
>>> information
>>>         opts at gsnContourLineThicknessesScale = 2.0
>>>         contour_tc = wrf_contour(*files_all*,wks,tc_plane,opts)
>>>         delete(opts)
>>>
>>>     end do      ; END OF LEVEL LOOP
>>>
>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>>   end do        ; END OF TIME LOOP
>>>
>>>
>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Virus-free.
>>> www.avast.com
>>> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>>> <#m_5770547303678038220_m_-2706776208549386084_m_-355677814135215976_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>>>
>>> On Sat, Apr 2, 2022 at 5:06 PM Dave Allured - NOAA Affiliate <
>>> dave.allured at noaa.gov> wrote:
>>>
>>>> Here are two different ways to get the size of the time dimension.  The
>>>> second method uses dimension reduction to find the size of only one slice
>>>> of the 2-D character array.
>>>>
>>>> dims = dimsizes (times)
>>>> ntimes = dims(0)
>>>>
>>>> ntimes = dimsizes (times(:,0))
>>>>
>>>>
>>>> On Fri, Apr 1, 2022 at 11:04 PM Zilore Mumba <zmumba at gmail.com> wrote:
>>>>
>>>>> I have 13 files, i.e. analysis plus 12 hourly files of forecasts.
>>>>> print (files_all[0]->Times) and printVarSummary(times) give the following
>>>>> output:
>>>>> Variable: Times (file variable)
>>>>> Type: character
>>>>> Total Size: 19 bytes
>>>>>             19 values
>>>>> Number of Dimensions: 2
>>>>> Dimensions and sizes: [Time | 1] x [DateStrLen | 19]
>>>>> Coordinates:
>>>>> (0,0) 2
>>>>> (0,1) 0
>>>>> (0,2) 2
>>>>> (0,3) 2
>>>>> (0,4) -
>>>>> (0,5) 0
>>>>> (0,6) 3
>>>>> (0,7) -
>>>>> (0,8) 2
>>>>> (0,9) 8
>>>>> (0,10) _
>>>>> (0,11) 0
>>>>> (0,12) 0
>>>>> (0,13) :
>>>>> (0,14) 0
>>>>> (0,15) 0
>>>>> (0,16) :
>>>>> (0,17) 0
>>>>> (0,18) 0
>>>>>
>>>>> Variable: times
>>>>> Type: character
>>>>> Total Size: 247 bytes
>>>>>             247 values
>>>>> Number of Dimensions: 2
>>>>> Dimensions and sizes: [Time | 13] x [DateStrLen | 19]
>>>>> Coordinates:
>>>>>
>>>>>
>>>>> On Fri, Apr 1, 2022 at 11:53 PM Dave Allured - NOAA Affiliate <
>>>>> dave.allured at noaa.gov> wrote:
>>>>>
>>>>>> Please show print (files_all[0]->Times) and printVarSummary(times).
>>>>>>
>>>>>>
>>>>>> On Fri, Apr 1, 2022 at 3:42 PM Zilore Mumba via ncl-talk <
>>>>>> ncl-talk at mailman.ucar.edu> wrote:
>>>>>>
>>>>>>> I have a number of WRF output files, one file per hour, which I open
>>>>>>> with
>>>>>>> files_all = addfiles(FILES+".nc","r")
>>>>>>>
>>>>>>> I then get the times and the total number with.
>>>>>>>   times = files_all[:]->Times      ; get all times in the file
>>>>>>>   ntimes = dimsizes(times)         ; number of times in the file
>>>>>>>
>>>>>>> I think I am missing something here because  with print(ntimes) I
>>>>>>> see two numbers.
>>>>>>> I want to use ntimes in a loop: do it = 0,ntimes-1,2
>>>>>>>
>>>>>>> This gives me the error: fatal:Loop end must be scalar, can't
>>>>>>> execute loop.
>>>>>>> How do I get the times from files opened with addfiles. I will
>>>>>>> appreciate any assistance.
>>>>>>>
>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20220404/f9f510bb/attachment.html>


More information about the ncl-talk mailing list