~javier-lopez/ubuntu/quantal/cdo/sru-1023329

« back to all changes in this revision

Viewing changes to src/griddes_nc.c

  • Committer: Bazaar Package Importer
  • Author(s): Alastair McKinstry
  • Date: 2010-09-22 15:58:09 UTC
  • mfrom: (1.2.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20100922155809-u1d3vlmlqj02uxjt
Tags: 1.4.6.dfsg.1-1
New upstream release. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
#include <stdio.h>
10
10
 
11
 
#include "cdi.h"
 
11
#include <cdi.h>
12
12
#include "cdo.h"
13
13
#include "cdo_int.h"
14
14
#include "griddes.h"
45
45
 
46
46
int gridFromNCfile(const char *gridfile)
47
47
{
48
 
  static char func[] = "gridFromNCfile";
 
48
  static const char *func = "gridFromNCfile";
49
49
  int gridID = -1;
50
50
#if  defined  (HAVE_LIBNETCDF)
51
51
  int nc_file_id;      /* netCDF grid file id           */
57
57
  int nc_gridclon_id;  /* netCDF grid corner lon var id */
58
58
  int nc_gridlat_id;   /* netCDF grid center lat var id */
59
59
  int nc_gridlon_id;   /* netCDF grid center lon var id */
 
60
  int nc_gridmask_id;  /* netCDF grid mask id           */
60
61
 
61
62
  nc_type xtype;
62
63
  size_t attlen;
86
87
           nc_inq_varid(nc_file_id, "grid_corner_lat", &nc_gridclat_id) != NC_NOERR || 
87
88
           nc_inq_varid(nc_file_id, "grid_corner_lon", &nc_gridclon_id) != NC_NOERR ) return (gridID);
88
89
 
89
 
      nce(nc_inq_varid(nc_file_id, "grid_dims", &nc_griddims_id));
90
90
      nce(nc_get_var_int(nc_file_id, nc_griddims_id, grid_dims));
91
91
 
92
92
      if ( grid_rank == 1 )
93
93
        {
94
94
          grid.type = GRID_CELL;
 
95
          if ( (size_t)grid_dims[0] != grid_size ) return(gridID);
95
96
        }
96
97
      else
97
98
        {
101
102
 
102
103
          grid.xsize = grid_dims[0];
103
104
          grid.ysize = grid_dims[1];
 
105
          if ( (size_t)grid_dims[0]*grid_dims[1] != grid_size ) return(gridID);
104
106
        }
105
107
 
106
108
      /* allocate grid coordinates and read data */
110
112
      grid.xbounds = (double *) malloc(grid.nvertex*grid.size*sizeof(double));
111
113
      grid.ybounds = (double *) malloc(grid.nvertex*grid.size*sizeof(double));
112
114
 
113
 
      nce(nc_inq_varid(nc_file_id, "grid_center_lat", &nc_gridlat_id));
114
 
      nce(nc_inq_varid(nc_file_id, "grid_center_lon", &nc_gridlon_id));
115
 
      nce(nc_inq_varid(nc_file_id, "grid_corner_lat", &nc_gridclat_id));
116
 
      nce(nc_inq_varid(nc_file_id, "grid_corner_lon", &nc_gridclon_id));
117
 
 
118
115
      nce(nc_inq_vartype(nc_file_id, nc_gridlat_id, &xtype));
119
116
      if ( xtype == NC_FLOAT )  grid.prec = DATATYPE_FLT32;
120
117
      else                      grid.prec = DATATYPE_FLT64;
131
128
      nce(nc_get_att_text(nc_file_id, nc_gridlat_id, "units", grid.yunits));
132
129
      grid.yunits[attlen] = 0;
133
130
 
 
131
      if ( nc_inq_varid(nc_file_id, "grid_imask", &nc_gridmask_id) == NC_NOERR )
 
132
        {
 
133
          int i;
 
134
          grid.mask = (int *) malloc(grid.size*sizeof(int));
 
135
          nce(nc_get_var_int(nc_file_id, nc_gridmask_id, grid.mask));
 
136
          for ( i = 0; i < grid.size; ++i )
 
137
            if ( grid.mask[i] != 1 ) break;
 
138
 
 
139
          if ( i == grid.size )
 
140
            {
 
141
              free(grid.mask);
 
142
              grid.mask = NULL;
 
143
            }
 
144
        }
 
145
 
134
146
      gridID = gridDefine(grid);
135
147
    }
136
148
 
146
158
 
147
159
void writeNCgrid(const char *gridfile, int gridID, int *grid_imask)
148
160
{
149
 
  static char func[] = "writeNCgrid";
 
161
  static const char *func = "writeNCgrid";
150
162
#if  defined  (HAVE_LIBNETCDF)
151
163
  int nc_file_id;      /* netCDF grid file id           */
152
164
  int nc_gridsize_id;  /* netCDF grid size dim id       */