NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Re: [netcdfgroup] put_vara_float error NETCDF 4.0.1

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.



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