[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: (Fwd) Simple question WRT netCDF
- Subject: Re: (Fwd) Simple question WRT netCDF
- Date: Mon, 13 Mar 1995 17:09:24 -0700
Bill,
> -> > Can you tell me the data type of the netCDF variable "rh"
> -> > referenced in the example on page 95 of the "NetCDF User's
> -> > Guide", Vers. 2.3, February 1993?
> -> > I'd like to write an array of structures into a netCDF file
> -> > but don't understand what data type to use for the value argument
> -> > to ncvarputg().
> ->
> -> The example opens a previously created netCDF file, so the original
> -> NCVDEF call that defined the RH variable was presumably in a previously
> -> run program. However from the example it can be inferred that RH was
> -> defined as type NCDOUBLE, corresponding to double precision, since an
> -> array of data of type DOUBLE is being used to overwrite every other
> -> value of RH in the example
>
> I'm confused because I see an ARRAY of STRUCTURES of type "struct datum"
> being written (i.e. the "value" argument to ncvarputg()) NOT an array of
> type DOUBLE.
I was confused, because you referred to the example on page *95* of the
User's Guide, which is a FORTRAN example using NCVPTG. That's why I used
all the references to the FORTRAN interfaces in my previous reply.
Apparently you want to know about the C example on page *93*. I should have
figured this out, because your question asked about ncvarputg() instead of
NCVPTG. Sorry, I'm in context now.
> Yes. I gather that one needs to pass the appropriate type of data.
> And that's why I am confused as I don't see, in the example, that the
> variable is of any netCDF data type.
The example in the printed copy is garbled, and was corrected in a later
update. It should be right in your on-line version, and in the on-line
NetCDF User's Guide at
http://www.unidata.ucar.edu/packages/netcdf/guide.txn_9.html#SEC90
The corrected version looks like this:
/* write generalized hyperslab of values into netCDF variable */
ncvarputg(ncid, rh_id, start, count, stride, imap,
(void*)&data[0][0][0].rh_val);
so the type of the data is supposed to be "double". If you have further
questions about this example, you should ask its author, Steve Emmerson
(address@hidden). I've CC:ed him on this response, in case he has
corrections to any of this.
> ... Perhaps if I
> describe what I'm trying to do you can give me a short answer: YES, NO,
> or MAYBE... ;-)
> I have an array of what I call HYPERSLAB structures defined as:
>
> struct HYPERSLB {
> struct GlobalObs glbobs;
> struct GlobalCalc glbclc;
> struct dsrc Data[lat][lon];
> } AMIE[Ntotal];
>
> where:
>
> struct GlobalObs {
> int Plck;
> float IMF, AE, DST;
> }
>
> struct GlobalCalc {
> float PPP, HemPwr, PhiMax;
> float PhiMin, PhiDelta;
> }
>
> struct data_src {
> char *name;
> int IPC;
> float angc, Ped, Hall;
> }
>
> I would like to be able to write a generalized hyperslab for each element
> of the AMIE array.
> Am I trying to do the impossible or can netCDF support this level of
> abstraction? I'll have a look at the ncputrec, etc routines.
Maybe. ncvarputg() is only capable of writing a block of data values of a
single type, so you will either have to make multiple calls or use
ncrecput(). I believe you can only use ncrecput() for this if Ntotal is the
unlimited dimension in your netCDF file.
--Russ
______________________________________________________________________________
Russ Rew UCAR Unidata Program
address@hidden P.O. Box 3000
http://www.unidata.ucar.edu/ Boulder, CO 80307-3000
______________________________________________________________________________