Re: [netcdfgroup] put_vara_float error NETCDF 4.0.1

Hi Cedric,

thanks for replying with the hints. Indeed the main problem was in

count[0] = nx+1;
count[1] = ny+1;

I canceled the call to redef given the call to nc_create

Thanks again for helping,
All the best
S



On Mon, Jun 21, 2010 at 9:47 AM, Cedric Roux <cedric.roux@xxxxxxxxxx> wrote:
> Simone Marras wrote:
>>
>> #include<stdio.h>
>> #include<netcdf.h>
>>
>> #define DIMENSIONS 2
>>
>> int wrt2NCDF(int nx, int ny)
>> {
>>  int i,j,k;
>>
>>  int status;            //Error status
>>  int ncid;            //NetCDF ID
>>
>>  int xdim, ydim;               //dimensions in X and Y
>>  int theta_id;                 //id of variable Theta
>>  int vars_dimids[DIMENSIONS];  //id of the variable dimensions
>>
>>  static size_t start[DIMENSIONS];//Start at first value
>>  static size_t count[DIMENSIONS];
>>
>>  float theta[nx*ny];
>>
>> /***********************************************************/
>> /*Preliminary computations to prepare some strings**********/
>> /***********************************************************/
>>
>>  start[0] = 0;
>>  start[1] = 0;
>>  count[0] = nx+1;
>>  count[1] = ny+1;
>
> should be:
>  count[0] = nx;
>  count[1] = ny;
>
>>
>>  //Create/open dataset:
>>  status = nc_create("test.nc", 0, &ncid);
>>      if(status != NC_NOERR)
>>    printf(" # Error in Creating file %d %d\n", status, NC_NOERR);
>>  else printf("\n # OK - File 'mbm.nc' created with ID: %d\n\n", ncid);
>>
>>  // ERROR HERE Put the netCDF file in define mode so that variables can be
>> added:
>>  !!!!!! status = nc_redef(ncid);
>>  !!!!!! if(status != NC_NOERR)
>>  !!!!!!  printf(" # Error in setting the file in Define Mode\n");
>
> no need to call nc_redef here
>
>>  //Create dimensions:
>>  status = nc_def_dim(ncid, "X", nx, &xdim);
>>  status = nc_def_dim(ncid, "Y", ny, &ydim);
>
> (side note: you should check status twice here)
>
>>
>>  //Create variables: THETA, MIXRA
>>  vars_dimids[0] = xdim;
>>  vars_dimids[1] = ydim;
>>
>>  status = nc_def_var(ncid, "THETA", NC_FLOAT, 2, vars_dimids, &theta_id);
>>  status = nc_def_var(ncid, "MIXRA", NC_FLOAT, 2, vars_dimids, &mixra_id);
>
> you must call nc_enddef at that point
>
>>  //Write the array to the nc file:
>>  for(i = 0; i < nx*ny; i++){
>>    theta[i] = 0.5;
>>    mixra[i] = 1.0;
>>  }
>>
>>  !!!! ERROR HERE
>>  status = nc_put_vara_float(ncid, theta_id, start, count, theta);
>>  if (status != NC_NOERR)
>>    printf(" # Error in writing THETA values into the nc file\n");
>
> you must call nc_close at that point
>
>>  return;
>
> maybe you should return something, your function
> is defined as returning an int
>
>> }
>
> Hope that helps.
>



-- 
Simone Marras, Ph.D. candidate
Barcelona Supercomputing Center
Universitat Politecnica de Catalunya
Avd. Diagonal 647,
Edificio H, planta 10
Barcelona, 08028
SPAIN
Tel.: (+34) 93 4011744
web: www.cranfield.ac.uk/~c086030



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