[ncl-talk] Adding time coordinate

Vanúcia Schumacher vanucia-schumacher at hotmail.com
Wed Jan 13 06:44:35 MST 2021


I detailed the attached script better with comments on each step.
The script's job is to take the data from the ascii file and create a regular grid with 1 km of spatial resolution.
The variable (new_data) varies with values above 1 at some grid points.
However, what I need to include in this script and I am not succeeding, is to include the hh and mn information for each variable in the grid point, when there are no missing values. If I have a value above 1 at the grid point, I want to know the hour and minute of that information.

I made the corrections that Dennis suggested (attachment)

I appreciate the progress
Thanks
________________________________
De: Dennis Shea <shea at ucar.edu>
Enviado: quarta-feira, 13 de janeiro de 2021 02:14
Para: Dave Allured - NOAA Affiliate <dave.allured at noaa.gov>
Cc: Vanúcia Schumacher <vanucia-schumacher at hotmail.com>; Ncl-talk <ncl-talk at ucar.edu>
Assunto: Re: [ncl-talk] Adding time coordinate

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<mailto: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<mailto: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<mailto: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<mailto:vanucia-schumacher at hotmail.com>>
Cc: ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu> <ncl-talk at ucar.edu<mailto: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<mailto: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<mailto:dave.allured at noaa.gov>>
Enviado: segunda-feira, 11 de janeiro de 2021 22:55
Para: Vanúcia Schumacher <vanucia-schumacher at hotmail.com<mailto:vanucia-schumacher at hotmail.com>>
Cc: ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu> <ncl-talk at ucar.edu<mailto: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<mailto: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<mailto:dave.allured at noaa.gov>>
Enviado: segunda-feira, 11 de janeiro de 2021 20:27
Para: Vanúcia Schumacher <vanucia-schumacher at hotmail.com<mailto:vanucia-schumacher at hotmail.com>>
Cc: ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu> <ncl-talk at ucar.edu<mailto: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<mailto: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<mailto: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/20210113/1d1d0ddb/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.ncl
Type: application/octet-stream
Size: 3775 bytes
Desc: test.ncl
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210113/1d1d0ddb/attachment-0001.obj>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 2015-02-19.txt
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210113/1d1d0ddb/attachment-0002.txt>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 2015-01-25.txt
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210113/1d1d0ddb/attachment-0003.txt>


More information about the ncl-talk mailing list