Hi Arturo,
If your data has NaN at land locations then for ASCII data you should
just edit that or use your C program to change those values to some
known value out of the valid range of the data, and then after reading
the data do,
SET VAR/BAD=99999 sst
or whatever the variable name is. (Use the same kind of syntax to set
units for variables: SET VAR/UNITS="deg C" sst)
0.2 minute resolution is very high resolution! There is the etopo02
dataset which is 2 minutes' resolution.
Ansley
Arturo Avila Rosas wrote:
Hi Ansley,
Thanks a lot, it works fine! Now,
some data are over land and they are NaN values indeed. According to
"Setting a missing value" at Ferret FAQ having an ocean mask with
earth's surface may help to get only data over ocean, Where could I
find an ocean mask with earth's
surface at 0.2 minute resolution?
Cheers
Arturo
-----
Original Message -----
Sent:
Tuesday, February 16, 2010 1:29 PM
Subject:
Re: [ferret_users] Reading variables from an ascii file
Hi Arturo-
It might be helpful for your C program to add the longitude and
latitude values in each line so it's easier to see what you're doing,
but that's not strictly necessary. So, the second and third columns
would be lat and lon - but read on and see if you think this is
necessary -
19600101000000 18.05000 271.94998 7.2 278. 0.26 1.34 0.72 0.88 5.73
4.50 3.99 3.64 255. 26. ...
19600101010000 18.05000 271.94998 7.2 278. 0.26 1.34 0.72 0.88 5.73
4.50 3.99 3.64 255. 26.
...
19601231230000 18.05000 271.94998 7.2 278. 0.26 1.34 0.72 0.88 5.73
4.50 3.99 3.64 255. 26.
19600101000000 18.05000 272.1500 7.2 278. 0.26 1.34 0.72 0.88 5.73
4.50 3.99 3.64 255. 26.
19600101010000 18.05000 272.1500 7.2 278. 0.26 1.34 0.72 0.88 5.73
4.50 3.99 3.64 255. 26.
...
19601231230000 18.05000 272.1500 7.2 278. 0.26 1.34 0.72 0.88 5.73
4.50 3.99 3.64 255. 26.
Is time listed as each hour of the year? If so you should be able to
read the data in a way similar to the ASCII reading Examples 6 and 7
(see "ASCII data, reading, examples" in the Users Guide Index). Time
is varying fastest, then Longitude, then Latitude, correct?
So, first just learning how to read one variable. I'll just make up
some example longitude and latitude axes; you'll adjust these to match
your data. They don't have to be regularly spaced, but we are assuming
they're on a grid.
There are several ways to define coordinate axes - see the
documentation.
DEFINE AXIS/X=271.95:279.0:0.2/UNITS=degrees_lon
xaxis
DEFINE AXIS/Y=18.05:19.0:0.05/UNITS=degrees_lat yaxis
DEFINE AXIS/T="1-jan-1960:00:00":"31-Dec-1960:23:00":1/UNITS=hours taxis
DEFINE GRID/X=xaxis/Y=yaxis/T=taxis xytgrid
FILE/var="tvar,v1"/grid=xytgrid/order=txy file.dat
I'm assuming the data looks like this - without the lon and lat
variables I talked about at the start of this message.
19600101000000 7.2 278. 0.26 1.34 0.72 0.88 5.73 4.50
3.99 3.64 255. 26. 0.67 4.74 3.68 3.34 3.09 271. 21. 0.58
5.73 5.59 5.38 5.22 236. 19.
19600101010000 7.2 278. 0.26 1.34 0.72 0.88 5.73 4.50 3.99 3.64
255. 26. 0.67 4.74 3.68 3.34 3.09 271. 21. 0.58 5.73 5.59
5.38 5.22 236. 19.
...
19601231230000 7.2 278. 0.26 1.34 0.72 0.88 5.73 4.50 3.99 3.64
255. 26. 0.67 4.74 3.68 3.34 3.09 271. 21. 0.58 5.73 5.59
5.38 5.22 236. 19.
If you do put the lon and lat data into the file, then you'd read it
with FILE/var="tvar,xvar,yvar,v1"/...
This will read the time variable into "tvar" which you can just ignore,
because it contains information that's already captured in the
definition of the time axis. Then the variable whose value as listed in
your examples as 7.2 will be v1. Try this, and look at your variable
in Ferret (do some commands like SHADE at a particular time, or plot a
time series at a single XY location and see if it looks correct.)
Now you can read more variables. A detail here is that Ferret will
only read 20 variables from an ASCII file. I count 26 in your
example. So if you try
yes?
file/var="tvar,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26"/grid=xytgrid
file.dat
you'll get an error message. To get around that you might do this -
probably naming your variables with meaningful names -
yes?
file/var="tvar,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15"/grid=xytgrid
file.dat
yes? save/clobber/file=my_data.nc
v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19
yes? cancel data file.dat
yes?
file/var="v20,v21,v22,v23,v24,v25,v26"/grid=xytgrid/format=(99x,F6.2,...)
file.dat
yes? save/append/file=my_data.nc 20,v21,v22,v23,v24,v25,v26
where the FORMAT statement would specify the Fortran format for the
remaining variables to be read in.
Hope this gets you started!
Ansley
|