Re: [netcdfgroup] Fw: NcVar put method

Oh OK.  I guess you need to change
   int *dim;
   dim = new int[2];

to match the type expected by the second style of put(),

   long *dim;
   dim = new long[2];
   ...
   data->put( &dataOut[0], dim );       // definitely "dim" not "*dim"
                                        // so as to pass the address of the dim 
array,
                                        // not the value (6) of its first 
element

I expect that put() assumes it knows the length of dim[]:
it's equal to the rank of the netcdf variable.


On Tue, Nov 09, 2010 at 04:41:48PM -0800, salah jubeh wrote:
> I am not very good with pointers some times it confuses me. The dim variable 
> is 
> a pointer to an array of integer. 
> 
> int *dim;
> dim = new int[2];
> dim[0] = 6;
> dim[1] = 12;
> 
> 
> and in this case it points to the address of the first element. Please 
> correct 
> me if I am wrong.
> data->put(&dataOut[0], *dim); 
> 
> I find this signature strange because how the put method can determine the 
> length of the counts variable. Any way If I change the method as you suggest 
> I 
> will get compilation error
> simple_xy_wr2.cpp:60: error: call of overloaded ‘put(int*, int*&)’ is 
> ambiguous
> /usr/include/netcdfcpp.h:239: note: candidates are: NcBool NcVar::put(const 
> int*, long int, long int, long int, long int, long int) <near match>
> /usr/include/netcdfcpp.h:241: note:                 NcBool NcVar::put(const 
> long 
> int*, long int, long int, long int, long int, long int) <near match>
> /usr/include/netcdfcpp.h:253: note:                 NcBool NcVar::put(const 
> int*, const long int*) <near match>
> /usr/include/netcdfcpp.h:254: note:                 NcBool NcVar::put(const 
> long 
> int*, const long int*) <near match>
> 
> 
> Regards
> 
> 
> 
> ________________________________
> From: Stuart Levy <slevy@xxxxxxxxxxxxxxxxx>
> To: salah jubeh <s_jubeh@xxxxxxxxx>
> Cc: "netcdfgroup@xxxxxxxxxxxxxxxx" <netcdfgroup@xxxxxxxxxxxxxxxx>
> Sent: Wed, November 10, 2010 12:40:07 AM
> Subject: Re: [netcdfgroup] Fw: NcVar put method
> 
> One thing: you mention you intend to use the signature
>    NcBool put(const ....* vals, const long* counts)
> 
> but when you call 
>    data->put(&dataOut[0], *dim);
> 
> (note the "*dim" which dereferences to a long, rather than long *)
> it'll call a different member function, namely
>    NcBool put( const int* vals, long c0=0, long c1=0, ... )
> 
> Instead you'd probably want
>    data->put(&dataOut[0], dim);
> Right?
> 
> 
> On Tue, Nov 09, 2010 at 03:14:36PM -0800, salah jubeh wrote:
> > Hello Sjur,
> > 
> > I used set_cur(), but there is no effect. and I checked the return value of 
> > the 
> >
> > put method and it was true which means data is written but it is not.
> > 
> > Regards
> > 
> > 
> > ________________________________
> > From: Sjur Kolberg <Sjur.A.Kolberg@xxxxxxxxx>
> > To: salah jubeh <s_jubeh@xxxxxxxxx>; "netcdfgroup@xxxxxxxxxxxxxxxx" 
> > <netcdfgroup@xxxxxxxxxxxxxxxx>
> > Sent: Tue, November 9, 2010 8:17:58 PM
> > Subject: RE: [netcdfgroup] Fw: NcVar put method
> > 
> >  
> > Salah,
> >  
> > I think you might have to use set_cur() before the second call to put(), 
> > which 
> >I 
> >
> > believe now tries to continue adding values after the ones you already 
> > stored 
> > with the first put(). Set_cur() with empty brackets sets the file pointer 
> > back 
> 
> > to 0. If I’m correct, the second put() will also work if you comment out 
> > the 
> > first...
> >  
> > Hope this helps,
> >  
> > Sjur K :-)
> >  
> >  
> > From:netcdfgroup-bounces@xxxxxxxxxxxxxxxx 
> > [mailto:netcdfgroup-bounces@xxxxxxxxxxxxxxxx] On Behalf Of salah jubeh
> > Sent: 9. november 2010 16:49
> > To: netcdfgroup@xxxxxxxxxxxxxxxx
> > Subject: [netcdfgroup] Fw: NcVar put method
> >  
> > Sorry for sending this a gain
> > 
> > ----- Forwarded Message ----
> > From:salah jubeh <s_jubeh@xxxxxxxxx>
> > To: support-netcdf@xxxxxxxxxxxxxxxx
> > Sent: Mon, November 8, 2010 12:58:41 PM
> > Subject: NcVar put method
> > I am trying to use this method signature -NcBool put(const ....* vals, 
> > const 
> > long* counts)-; but I have a problem  , can some one please tell me what is 
> > my 
> 
> > mistake .
> > 
> > Why - data->put(&dataOut[0], *dim);-  is not working. Please see the code.
> > 
> > 
> > #include <iostream>
> > #include <netcdfcpp.h>
> > 
> > using namespace std;
> > 
> > // We are writing 2D data, a 6 x 12 grid. 
> > static const int NDIMS = 2;
> > static const int NX = 6;
> > static const int NY = 12;
> > 
> > // Return this in event of a problem.
> > static const int NC_ERR = 2;
> > 
> > int main(void)
> > {
> >    // Different ways to write arrays
> > 
> >    int dataOut[NX * NY];
> >    int dataOut2[NX] [NY];
> >  
> >    // Create some pretend data. Note that dataOut and dataOut2 are 
> > identical...!!!
> >    for(int i = 0; i < NX; i++) 
> >       for(int j = 0; j < NY; j++){
> >      dataOut[i * NY +j] = (i+1) * (j+1);
> >      dataOut2[i][j] = (i+1) * (j+1);    
> >     }
> > 
> > 
> >    // Create the file.
> >    NcFile dataFile("simple_xy.nc", NcFile::Replace);
> > 
> >    if (!dataFile.is_valid())
> >    {
> >       cout << "Couldn't open file!\n";
> >       return NC_ERR;
> >    }
> >  
> >    NcDim* xDim = dataFile.add_dim("x", NX);
> >    NcDim* yDim = dataFile.add_dim("y", NY);
> >  
> >    
> >   const NcDim* all[2] ;
> >    all[0] = xDim;
> >    all[1] = yDim;
> > 
> >    int *dim;
> >    dim = new int[2];
> >    dim[0] = 6;
> >    dim[1] = 12;
> >    
> >    NcVar *data = dataFile.add_var("data", ncInt, 2, all);
> >    NcVar *data2 = dataFile.add_var("data2", ncInt, 2, all);
> > 
> >    // This works fine and data and data2 are identical
> >    // data->put(&dataOut[0],NX, NY);
> >    data2->put(&dataOut2[0][0], NX, NY);
> >    
> >   // try to use another signature
> > 
> >    data->put(&dataOut[0], *dim); //nothing is written
> >    
> >  cout << "*** SUCCESS writing example file simple_xy.nc!" << endl;
> > 
> >    return 0;
> > }
> > 
> > 
> >      
> > _______________________________________________
> > netcdfgroup mailing list
> > netcdfgroup@xxxxxxxxxxxxxxxx
> > For list information or to unsubscribe,  visit: 
> >http://www.unidata.ucar.edu/mailing_lists/ 
> >
> 
> 
> 
>       
> _______________________________________________
> netcdfgroup mailing list
> netcdfgroup@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe,  visit: 
> http://www.unidata.ucar.edu/mailing_lists/ 



  • 2010 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: