[ncl-talk] Adding time coordinate
Dennis Shea
shea at ucar.edu
Tue Jan 12 22:14:45 MST 2021
I agree with DaveA.
I , also, do not understand your code. You must do a better job of
explaining the objective.
[1] Do you just want to convert the text file to a netCDF file?
[2] Some sort of grid???
You define a grid style variable "new_data"
new_data = new((/nlat,mlon,ntimes/),"float")
new_data!0 = "lat2"
new_data!1 = "lon2"
new_data!2 = "time"
new_data&lat2 = lat2
new_data&lon2 = lon2
new_data&time = time
To me, it looks like you are trying to directly place the raw values into
the 'new_data' array.
In fact, because each time is unique, there will be ntime=dimsizes(time)=
*6024 * grids with one value per grid.
;;;;new_data({lat(i)},{lon(i)},{time(i)}) =
new_data({LAT(i)},{LON(i)},{time(i)})+(/var(i)/)
---
Also, the way you are accessing the various fields is wrong.
NCL is confusing the - delimeter embedded with thh yyyy-mm-dd with a
numeric minus sign.
2015-02-19 00:01:27;733939380;-18.4340369;-56.829563;-28
^ ^
===================================================
datas := asciiread(pthasc(j),-1,"string")
nline = dimsizes(datas)
print("nline="+nline)
; NCL code is confusing the - delimeter with a minus sign
; Change delimeter embedded with yyyy-mm-dd to yyyy mm dd
; There may be better ways but (1) converting string to character
; (2) converting - character to : character
; (3) change : character to : string
datac := tochar(datas) ; (nline,:)
datac(:,4) = tochar(":")
datac(:,7) = tochar(":")
datas = tostring(datac) ; overwrite original
;;print(datas)
nfld = str_fields_count(datas(0), delim) ; look at 1st line only
print("nfld="+nfld)
yyyy := toint(str_get_field(datas, 1, delim) )
mm := toint(str_get_field(datas, 2, delim) )
dd := toint(str_get_field(datas, 3, delim) )
hh := toint(str_get_field(datas, 4, delim) )
mn := toint(str_get_field(datas, 5, delim) )
sc := toint(str_get_field(datas, 6, delim) )
time := cd_inv_calendar(yyyy,mm,dd,hh,mn,sc,tunits, 0)
time!0 = "time"
ntimes = dimsizes(time)
printVarSummary(time)
LAT := todouble( str_get_field(datas, 8, delin) ) ; fields
count starts at 1
LON := todouble( str_get_field(datas, 9, delim) )
VAL := todouble( str_get_field(datas,10, delim) )
print("time="+time+" yyyy="+yyyy+" mm="+mm+" dd="+dd+" hh="+hh \
+" mn="+mn+" sc="+sc+" LAT="+LAT+" LON="+LON+" VAL="+VAL)
On Tue, Jan 12, 2021 at 7:58 PM Dave Allured - NOAA Affiliate via ncl-talk <
ncl-talk at mailman.ucar.edu> wrote:
> Sure, one netcdf file per day, 1 km grid. But simple application of the
> cd_inv_calendar function only gets you a long 1-D array of exact times. It
> is not sufficient to determine the structure of the desired result file.
>
> This still leaves the question of how you want to carry the time-of-day
> information inside that one file. The related questions are, do you want a
> 2-D or 3-D array in the file, and what are the times of day on the third
> dimension. If the array is 3-D, then that means multiple grids within a
> single day. There are many examples of multiple grids per day in other
> data sets, and they are almost always regularly spaced over time, such as
> one grid per hour.
>
> It is even possible to have a single data grid, and a companion grid that
> has exact time of day at each grid point. This would be unusual, but not
> difficult. Also, for this you would need to decide what to do about
> multiple obs at the same grid point.
>
> So forget the details of NCL for a minute. Please describe specifically
> the grid or grids that you would like, and their spacing across time of
> day. This will work any way you like, as long as you can fully describe
> the shape of the desired end product.
>
>
> On Tue, Jan 12, 2021 at 4:17 PM Vanúcia Schumacher <
> vanucia-schumacher at hotmail.com> wrote:
>
>> So, in fact what I need is just the hour and minute information, but the
>> easiest way I found was to use the cd_inv_calendar function.
>> How do you suggest that I can attach this information to the new_data
>> variable?
>> The purpose of the script is to spatialize the input data to a regular
>> 1km grid.
>> The input data is just one example of several data in which I use to
>> generate a netcdf file per day with this script.
>>
>>
>> ------------------------------
>> *De:* Dave Allured - NOAA Affiliate <dave.allured at noaa.gov>
>> *Enviado:* terça-feira, 12 de janeiro de 2021 16:39
>> *Para:* Vanúcia Schumacher <vanucia-schumacher at hotmail.com>
>> *Cc:* ncl-talk at ucar.edu <ncl-talk at ucar.edu>
>> *Assunto:* Re: [ncl-talk] Adding time coordinate
>>
>> Okay. It looks like your original dates and times are not regularly
>> spaced, and you are trying to make a new set of time coordinates by setting
>> seconds = 0. This results in more irregular time values with some
>> duplicate values, which are not legal for coordinate subscripting. This is
>> the error "Non-monotonic coordinate value".
>>
>> It looks like your input file spans all 24 hours in one day. Can you
>> please explain exactly what you want the new time coordinates to look
>> like? Are they regularly spaced or irregular? Start and end times?
>>
>>
>> On Tue, Jan 12, 2021 at 4:51 AM Vanúcia Schumacher <
>> vanucia-schumacher at hotmail.com> wrote:
>>
>> Using your sugestion:
>> ntimes = dimsizes(time)
>> new_data = new((/nlat,mlon,ntimes/),"float")
>> I got this error:
>> fatal:NclOneDValGetClosestIndex: Non-monotonic coordinate value being
>> used, can't complete coordinate subscript
>> fatal:Could not obtain coordinate indexes, unable to perform subscript
>> fatal:["Execute.c":8640]:Execute: Error occurred at or near line 89 in
>> file test.ncl
>> The line 89: new_data({lat(i)},{lon(i)},{time(i)}) =
>> new_data({lat(i)},{lon(i)},{time(i)})+(/var(i)/)
>>
>> Using this:
>> ntimes = dimsizes(time(1))
>> new_data = new((/nlat,mlon,ntimes/),"float")
>> I got this error:
>> fatal:Coordinate variables must be the same dimension as their dimension
>> fatal:No coordinate variable exists for dimension (time) in variable
>> (new_data)
>> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 86 in
>> file test.ncl
>> The line 86: new_data&time = time
>>
>> Attached is the script and a test data.
>> Thanks
>> ------------------------------
>> *De:* Dave Allured - NOAA Affiliate <dave.allured at noaa.gov>
>> *Enviado:* segunda-feira, 11 de janeiro de 2021 22:55
>> *Para:* Vanúcia Schumacher <vanucia-schumacher at hotmail.com>
>> *Cc:* ncl-talk at ucar.edu <ncl-talk at ucar.edu>
>> *Assunto:* Re: [ncl-talk] Adding time coordinate
>>
>> Please show the complete text for line 75, the complete error message,
>> and printVarSummary for the array new_data, just before line 75 is
>> executed. Also please attach the current version of your script. Thank
>> you.
>>
>>
>> On Mon, Jan 11, 2021 at 5:39 PM Vanúcia Schumacher <
>> vanucia-schumacher at hotmail.com> wrote:
>>
>> Thanks for the help, but the error persists in the line 75
>>
>> PrintVarSummary:
>>
>> Variable: nlat
>> Type: integer
>> Total Size: 4 bytes
>> 1 values
>> Number of Dimensions: 1
>> Dimensions and sizes: [1]
>> Coordinates:
>>
>> Variable: mlon
>> Type: integer
>> Total Size: 4 bytes
>> 1 values
>> Number of Dimensions: 1
>> Dimensions and sizes: [1]
>> Coordinates:
>>
>> Variable: ntimes
>> Type: integer
>> Total Size: 4 bytes
>> 1 values
>> Number of Dimensions: 1
>> Dimensions and sizes: [1]
>> Coordinates:
>> (0) 6024
>>
>> *De:* Dave Allured - NOAA Affiliate <dave.allured at noaa.gov>
>> *Enviado:* segunda-feira, 11 de janeiro de 2021 20:27
>> *Para:* Vanúcia Schumacher <vanucia-schumacher at hotmail.com>
>> *Cc:* ncl-talk at ucar.edu <ncl-talk at ucar.edu>
>> *Assunto:* Re: [ncl-talk] Adding time coordinate
>>
>> Your script looks pretty good so far. This does not look right:
>> new_data = new((/nlat,mlon,toint(time(1))/),"float")
>>
>> Try this:
>> ntimes = dimsizes (time)
>> new_data = new((/nlat,mlon,ntimes/),"float")
>>
>> Always use printVarSummary when you are having problems with arrays; and
>> look at dimensions, coordinates, attributes, and such.
>>
>> Also, in the future, please show the *first* error received, and be sure
>> to show exactly which line it occurs on. Usually the first error causes
>> more problems later, and it is harder to sort out. I am not sure what
>> happened this time, but that does not matter now. Good luck.
>>
>>
>> On Mon, Jan 11, 2021 at 2:51 PM Vanúcia Schumacher via ncl-talk <
>> ncl-talk at mailman.ucar.edu> wrote:
>>
>> Hi users,
>>
>> I need to add the time information (preference in hh and mn) extracted
>> from an ascii file to a new variable (new_data from script), but I am not
>> having success.
>> Attached is the script I am trying using the function cd_inv_calendar and
>> the error obtained:
>> fatal:No coordinate variable exists for dimension (time) in variable
>> (new_data)
>>
>> I appreciate some help to attach this information to my new variable
>>
>> _______________________________________________
> ncl-talk mailing list
> ncl-talk at mailman.ucar.edu
> List instructions, subscriber options, unsubscribe:
> https://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210112/5c0b5fbe/attachment.html>
More information about the ncl-talk
mailing list