Write NetCDF dimensions and create output file. More...
#include <io.h>
Go to the source code of this file.
Functions | |
int | write_netcdf_dims_3d (double *lon, double *lat, double *x, double *y, double *alt, double *timein, char *cal_type, char *time_units, int nlon, int nlat, int ntime, char *timestep, char *gridname, char *coords, char *grid_mapping_name, double latin1, double latin2, double lonc, double lat0, double false_easting, double false_northing, double lonpole, double latpole, char *lonname, char *latname, char *timename, char *filename, int outinfo) |
Write NetCDF dimensions and create output file. |
Write NetCDF dimensions and create output file.
Definition in file write_netcdf_dims_3d.c.
int write_netcdf_dims_3d | ( | double * | lon, | |
double * | lat, | |||
double * | x, | |||
double * | y, | |||
double * | alt, | |||
double * | timein, | |||
char * | cal_type, | |||
char * | time_units, | |||
int | nlon, | |||
int | nlat, | |||
int | ntime, | |||
char * | timestep, | |||
char * | gridname, | |||
char * | coords, | |||
char * | grid_mapping_name, | |||
double | latin1, | |||
double | latin2, | |||
double | lonc, | |||
double | lat0, | |||
double | false_easting, | |||
double | false_northing, | |||
double | lonpole, | |||
double | latpole, | |||
char * | lonname, | |||
char * | latname, | |||
char * | timename, | |||
char * | filename, | |||
int | outinfo | |||
) |
Write NetCDF dimensions and create output file.
[in] | lon | Longitude field |
[in] | lat | Latitude field |
[in] | x | X field |
[in] | y | Y field |
[in] | alt | Altitude field |
[in] | timein | Time field |
[in] | cal_type | Calendar-type (udunits) |
[in] | time_units | Time units (udunits) |
[in] | nlon | Longitude dimension |
[in] | nlat | Latitude dimension |
[in] | ntime | Time dimension |
[in] | timestep | Timestep string (NetCDF attribute) |
[in] | gridname | Grid type name in the NetCDF file (NetCDF attribute) |
[in] | coords | Coordinates type (NetCDF attribute) |
[in] | grid_mapping_name | Grid mapping name in the NetCDF file (CF-1.0 compliant) |
[in] | latin1 | Latin1 projection parameter |
[in] | latin2 | Latin2 projection parameter |
[in] | lonc | Lonc center longitude projection parameter |
[in] | lat0 | Lat0 first latitude projection parameter |
[in] | false_easting | False_easting projection parameter |
[in] | false_northing | False_northing projection parameter |
[in] | filename | Output NetCDF filename |
[in] | lonname | Longitude name dimension in the NetCDF file |
[in] | latname | Latitude name dimension in the NetCDF file |
[in] | timename | Time name dimension in the NetCDF file |
[in] | outinfo | TRUE if we want information output, FALSE if not |
Definition at line 68 of file write_netcdf_dims_3d.c.
References alloc_error(), handle_netcdf_error(), MAXPATH, and TRUE.
Referenced by output_downscaled_analog(), and remove_clim().
00074 { 00106 int istat; 00107 00108 int ncoutid; 00109 int timedimoutid, xdimoutid, ydimoutid; 00110 int timeoutid, latoutid, lonoutid, xoutid, youtid, projoutid, altoutid; 00111 int vardimids[NC_MAX_VAR_DIMS]; /* dimension ids */ 00112 00113 short int *alts = NULL; 00114 00115 size_t start[3]; 00116 size_t count[3]; 00117 00118 int vali; 00119 int i; 00120 00121 float *proj_latin = NULL; 00122 00123 char *tmpstr = NULL; 00124 double *tmpd = NULL; 00125 int *tmpi = NULL; 00126 00127 double minlat; 00128 double maxlat; 00129 double minlon; 00130 double maxlon; 00131 00132 short int fillvalue = -99; 00133 00134 /* Change directory to output directory for autofs notification */ 00135 tmpstr = strdup(filename); 00136 istat = chdir(dirname(tmpstr)); 00137 (void) free(tmpstr); 00138 00139 tmpstr = (char *) malloc(MAXPATH * sizeof(char)); 00140 if (tmpstr == NULL) alloc_error(__FILE__, __LINE__); 00141 00142 /* Open NetCDF file */ 00143 if (outinfo == TRUE) 00144 printf("%s: Writing info from NetCDF output file %s\n", __FILE__, filename); 00145 istat = nc_open(filename, NC_WRITE, &ncoutid); /* open NetCDF file */ 00146 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00147 00148 istat = nc_redef(ncoutid); 00149 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00150 00151 /* Set dimensions */ 00152 istat = nc_def_dim(ncoutid, timename, NC_UNLIMITED, &timedimoutid); 00153 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00154 if ( !strcmp(gridname, "Latitude_Longitude")) { 00155 istat = nc_def_dim(ncoutid, lonname, nlon, &xdimoutid); 00156 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00157 istat = nc_def_dim(ncoutid, latname, nlat, &ydimoutid); 00158 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00159 } 00160 else if ( !strcmp(gridname, "list")) { 00161 istat = nc_def_dim(ncoutid, lonname, nlon, &xdimoutid); 00162 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00163 istat = nc_def_dim(ncoutid, latname, nlon, &ydimoutid); 00164 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00165 } 00166 else { 00167 istat = nc_def_dim(ncoutid, "x", nlon, &xdimoutid); 00168 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00169 istat = nc_def_dim(ncoutid, "y", nlat, &ydimoutid); 00170 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00171 } 00172 00173 /* Define dimensions variables */ 00174 vardimids[0] = timedimoutid; 00175 vardimids[1] = 0; 00176 istat = nc_def_var(ncoutid, timename, NC_INT, 1, vardimids, &timeoutid); 00177 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00178 00179 if ( !strcmp(coords, "1D") ) { 00180 vardimids[0] = xdimoutid; 00181 vardimids[1] = 0; 00182 istat = nc_def_var(ncoutid, lonname, NC_DOUBLE, 1, vardimids, &lonoutid); 00183 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00184 vardimids[0] = ydimoutid; 00185 vardimids[1] = 0; 00186 istat = nc_def_var(ncoutid, latname, NC_DOUBLE, 1, vardimids, &latoutid); 00187 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00188 } 00189 else if ( !strcmp(gridname, "Latitude_Longitude") && !strcmp(coords, "2D") ) { 00190 vardimids[0] = ydimoutid; 00191 vardimids[1] = xdimoutid; 00192 istat = nc_def_var(ncoutid, lonname, NC_DOUBLE, 2, vardimids, &lonoutid); 00193 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00194 vardimids[0] = ydimoutid; 00195 vardimids[1] = xdimoutid; 00196 istat = nc_def_var(ncoutid, latname, NC_DOUBLE, 2, vardimids, &latoutid); 00197 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00198 } 00199 else { 00200 vardimids[0] = ydimoutid; 00201 vardimids[1] = xdimoutid; 00202 istat = nc_def_var(ncoutid, lonname, NC_DOUBLE, 2, vardimids, &lonoutid); 00203 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00204 vardimids[0] = xdimoutid; 00205 vardimids[1] = 0; 00206 istat = nc_def_var(ncoutid, "x", NC_INT, 1, vardimids, &xoutid); 00207 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00208 vardimids[0] = ydimoutid; 00209 vardimids[1] = xdimoutid; 00210 istat = nc_def_var(ncoutid, latname, NC_DOUBLE, 2, vardimids, &latoutid); 00211 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00212 vardimids[0] = ydimoutid; 00213 vardimids[1] = 0; 00214 istat = nc_def_var(ncoutid, "y", NC_INT, 1, vardimids, &youtid); 00215 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00216 } 00217 00218 /* Define projection variable */ 00219 if ( !strcmp(gridname, "Lambert_Conformal")) { 00220 istat = nc_def_var(ncoutid, gridname, NC_INT, 0, 0, &projoutid); 00221 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00222 } 00223 else if ( !strcmp(gridname, "rotated_pole")) { 00224 istat = nc_def_var(ncoutid, gridname, NC_INT, 0, 0, &projoutid); 00225 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00226 } 00227 00228 if (alt != NULL) { 00229 /* Define Altitude variable */ 00230 vardimids[0] = ydimoutid; 00231 vardimids[1] = xdimoutid; 00232 istat = nc_def_var(ncoutid, "Altitude", NC_SHORT, 2, vardimids, &altoutid); 00233 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00234 } 00235 00236 /* Set time attributes */ 00237 istat = nc_put_att_text(ncoutid, timeoutid, "units", strlen(time_units), time_units); 00238 istat = nc_put_att_text(ncoutid, timeoutid, "calendar", strlen(cal_type), cal_type); 00239 (void) sprintf(tmpstr, "time in %s", time_units); 00240 istat = nc_put_att_text(ncoutid, timeoutid, "long_name", strlen(tmpstr), tmpstr); 00241 00242 istat = nc_put_att_text(ncoutid, NC_GLOBAL, "timestep", strlen(timestep), timestep); 00243 00244 /* Set longitude attributes */ 00245 (void) strcpy(tmpstr, "degrees_east"); 00246 istat = nc_put_att_text(ncoutid, lonoutid, "units", strlen(tmpstr), tmpstr); 00247 (void) strcpy(tmpstr, "longitude coordinate"); 00248 istat = nc_put_att_text(ncoutid, lonoutid, "long_name", strlen(tmpstr), tmpstr); 00249 (void) strcpy(tmpstr, "longitude"); 00250 istat = nc_put_att_text(ncoutid, lonoutid, "standard_name", strlen(tmpstr), tmpstr); 00251 00252 /* Set latitude attributes */ 00253 (void) strcpy(tmpstr, "degrees_north"); 00254 istat = nc_put_att_text(ncoutid, latoutid, "units", strlen(tmpstr), tmpstr); 00255 (void) strcpy(tmpstr, "latitude coordinate"); 00256 istat = nc_put_att_text(ncoutid, latoutid, "long_name", strlen(tmpstr), tmpstr); 00257 (void) strcpy(tmpstr, "latitude"); 00258 istat = nc_put_att_text(ncoutid, latoutid, "standard_name", strlen(tmpstr), tmpstr); 00259 00260 if (alt != NULL) { 00261 /* Set altitude attributes */ 00262 (void) strcpy(tmpstr, "meters"); 00263 istat = nc_put_att_text(ncoutid, altoutid, "units", strlen(tmpstr), tmpstr); 00264 (void) strcpy(tmpstr, "Altitude"); 00265 istat = nc_put_att_text(ncoutid, altoutid, "long_name", strlen(tmpstr), tmpstr); 00266 (void) strcpy(tmpstr, "Altitude"); 00267 istat = nc_put_att_text(ncoutid, altoutid, "standard_name", strlen(tmpstr), tmpstr); 00268 (void) strcpy(tmpstr, "lon lat"); 00269 istat = nc_put_att_text(ncoutid, altoutid, "coordinates", strlen(tmpstr), tmpstr); 00270 fillvalue = -99; 00271 istat = nc_put_att_short(ncoutid, altoutid, "_FillValue", NC_SHORT, 1, &fillvalue); 00272 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00273 istat = nc_put_att_short(ncoutid, altoutid, "missing_value", NC_SHORT, 1, &fillvalue); 00274 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00275 } 00276 00277 if ( strcmp(gridname, "Latitude_Longitude") && strcmp(gridname, "list")) { 00278 /* Set x attributes */ 00279 /* int x(x) ; 00280 x:units = "m" ; 00281 x:long_name = "x coordinate of projection" ; 00282 x:standard_name = "projection_x_coordinate" ;*/ 00283 (void) strcpy(tmpstr, "m"); 00284 istat = nc_put_att_text(ncoutid, xoutid, "units", strlen(tmpstr), tmpstr); 00285 (void) strcpy(tmpstr, "x coordinate of projection"); 00286 istat = nc_put_att_text(ncoutid, xoutid, "long_name", strlen(tmpstr), tmpstr); 00287 (void) strcpy(tmpstr, "projection_x_coordinate"); 00288 istat = nc_put_att_text(ncoutid, xoutid, "standard_name", strlen(tmpstr), tmpstr); 00289 00290 /* Set y attributes */ 00291 /* int y(y) ; 00292 y:units = "m" ; 00293 y:long_name = "y coordinate of projection" ; 00294 y:standard_name = "projection_y_coordinate" ;*/ 00295 (void) strcpy(tmpstr, "m"); 00296 istat = nc_put_att_text(ncoutid, youtid, "units", strlen(tmpstr), tmpstr); 00297 (void) strcpy(tmpstr, "y coordinate of projection"); 00298 istat = nc_put_att_text(ncoutid, youtid, "long_name", strlen(tmpstr), tmpstr); 00299 (void) strcpy(tmpstr, "projection_y_coordinate"); 00300 istat = nc_put_att_text(ncoutid, youtid, "standard_name", strlen(tmpstr), tmpstr); 00301 00302 /* Set projection attributes */ 00303 /* int Lambert_Conformal ; 00304 Lambert_Conformal:grid_mapping_name = "lambert_conformal_conic" ; 00305 Lambert_Conformal:standard_parallel = 45.89892f, 47.69601f ; 00306 Lambert_Conformal:longitude_of_central_meridian = 2.337229f ; 00307 Lambert_Conformal:latitude_of_projection_origin = 46.8f ; 00308 Lambert_Conformal:false_easting = 600000.f ; 00309 Lambert_Conformal:false_northing = 2200000.f ; 00310 */ 00311 /* 00312 int rotated_pole ; 00313 rotated_pole:grid_mapping_name = "rotated_latitude_longitude" ; 00314 rotated_pole:grid_north_pole_latitude = 39.25 ; 00315 rotated_pole:grid_north_pole_longitude = -162. ; 00316 */ 00317 } 00318 00319 if ( !strcmp(gridname, "Lambert_Conformal")) { 00320 00321 istat = nc_put_att_text(ncoutid, projoutid, "grid_mapping_name", strlen(grid_mapping_name), grid_mapping_name); 00322 if (alt != NULL) 00323 istat = nc_put_att_text(ncoutid, altoutid, "grid_mapping_name", strlen(grid_mapping_name), grid_mapping_name); 00324 00325 proj_latin = (float *) malloc(2 * sizeof(float)); 00326 if (proj_latin == NULL) alloc_error(__FILE__, __LINE__); 00327 proj_latin[0] = (float) latin1; 00328 proj_latin[1] = (float) latin2; 00329 istat = nc_put_att_float(ncoutid, projoutid, "standard_parallel", NC_FLOAT, 2, proj_latin); 00330 (void) free(proj_latin); 00331 00332 istat = nc_put_att_double(ncoutid, projoutid, "longitude_of_central_meridian", NC_FLOAT, 1, &lonc); 00333 istat = nc_put_att_double(ncoutid, projoutid, "latitude_of_projection_origin", NC_FLOAT, 1, &lat0); 00334 istat = nc_put_att_double(ncoutid, projoutid, "false_easting", NC_FLOAT, 1, &false_easting); 00335 istat = nc_put_att_double(ncoutid, projoutid, "false_northing", NC_FLOAT, 1, &false_northing); 00336 } 00337 else if ( !strcmp(gridname, "rotated_pole")) { 00338 00339 istat = nc_put_att_text(ncoutid, projoutid, "grid_mapping_name", strlen(grid_mapping_name), grid_mapping_name); 00340 if (alt != NULL) 00341 istat = nc_put_att_text(ncoutid, altoutid, "grid_mapping_name", strlen(grid_mapping_name), grid_mapping_name); 00342 00343 istat = nc_put_att_double(ncoutid, projoutid, "grid_north_pole_latitude", NC_FLOAT, 1, &latpole); 00344 istat = nc_put_att_double(ncoutid, projoutid, "grid_north_pole_longitude", NC_FLOAT, 1, &lonpole); 00345 } 00346 00347 (void) strcpy(tmpstr, "Grid"); 00348 istat = nc_put_att_text(ncoutid, NC_GLOBAL, "cdm_datatype", strlen(tmpstr), tmpstr); 00349 00350 /* Geographic global attributes */ 00351 maxlat = -9999.9; 00352 minlat = 9999.9; 00353 maxlon = -9999.9; 00354 minlon = 9999.9; 00355 if ( !strcmp(gridname, "list") ) { 00356 for (i=0; i<(nlon); i++) { 00357 if (lat[i] > maxlat) maxlat = lat[i]; 00358 if (lat[i] < minlat) minlat = lat[i]; 00359 } 00360 for (i=0; i<(nlon); i++) { 00361 if (lon[i] > maxlon) maxlon = lon[i]; 00362 if (lon[i] < minlon) minlon = lon[i]; 00363 } 00364 } 00365 else { 00366 for (i=0; i<(nlat*nlon); i++) { 00367 if (lat[i] > maxlat) maxlat = lat[i]; 00368 if (lat[i] < minlat) minlat = lat[i]; 00369 } 00370 for (i=0; i<(nlat*nlon); i++) { 00371 if (lon[i] > maxlon) maxlon = lon[i]; 00372 if (lon[i] < minlon) minlon = lon[i]; 00373 } 00374 } 00375 istat = nc_put_att_double(ncoutid, NC_GLOBAL, "geospatial_lat_max", NC_DOUBLE, 1, &maxlat); 00376 istat = nc_put_att_double(ncoutid, NC_GLOBAL, "geospatial_lat_min", NC_DOUBLE, 1, &minlat); 00377 istat = nc_put_att_double(ncoutid, NC_GLOBAL, "geospatial_lon_max", NC_DOUBLE, 1, &maxlon); 00378 istat = nc_put_att_double(ncoutid, NC_GLOBAL, "geospatial_lon_min", NC_DOUBLE, 1, &minlon); 00379 00380 /* End definition mode */ 00381 istat = nc_enddef(ncoutid); 00382 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00383 00384 if ( !strcmp(gridname, "Lambert_Conformal") || !strcmp(gridname, "rotated_pole") ) { 00385 /* Write projection variable */ 00386 vali = 1; 00387 istat = nc_put_var1_int(ncoutid, projoutid, 0, &vali); 00388 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00389 } 00390 00391 /* Write dimensions variables to NetCDF output file */ 00392 if (ntime > 0) { 00393 start[0] = 0; 00394 count[0] = (size_t) ntime; 00395 count[1] = 0; 00396 count[2] = 0; 00397 istat = nc_put_vara_double(ncoutid, timeoutid, start, count, timein); 00398 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00399 } 00400 00401 if ( !strcmp(gridname, "list") ) { 00402 start[0] = 0; 00403 start[1] = 0; 00404 start[2] = 0; 00405 count[0] = (size_t) nlon; 00406 count[1] = 0; 00407 count[2] = 0; 00408 istat = nc_put_vara_double(ncoutid, latoutid, start, count, lat); 00409 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00410 00411 start[0] = 0; 00412 start[1] = 0; 00413 start[2] = 0; 00414 count[0] = (size_t) nlon; 00415 count[1] = 0; 00416 count[2] = 0; 00417 istat = nc_put_vara_double(ncoutid, lonoutid, start, count, lon); 00418 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00419 } 00420 else if ( !strcmp(coords, "1D") ) { 00421 start[0] = 0; 00422 start[1] = 0; 00423 start[2] = 0; 00424 count[0] = (size_t) nlat; 00425 count[1] = 0; 00426 count[2] = 0; 00427 tmpd = (double *) malloc(nlat * sizeof(double)); 00428 if (tmpd == NULL) alloc_error(__FILE__, __LINE__); 00429 for (i=0; i<nlat; i++) 00430 tmpd[i] = lat[i*nlon]; 00431 istat = nc_put_vara_double(ncoutid, latoutid, start, count, tmpd); 00432 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00433 00434 start[0] = 0; 00435 start[1] = 0; 00436 start[2] = 0; 00437 count[0] = (size_t) nlon; 00438 count[1] = 0; 00439 count[2] = 0; 00440 tmpd = (double *) realloc(tmpd, nlon * sizeof(double)); 00441 if (tmpd == NULL) alloc_error(__FILE__, __LINE__); 00442 for (i=0; i<nlon; i++) 00443 tmpd[i] = lon[i]; 00444 istat = nc_put_vara_double(ncoutid, lonoutid, start, count, tmpd); 00445 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00446 (void) free(tmpd); 00447 } 00448 else { 00449 start[0] = 0; 00450 start[1] = 0; 00451 start[2] = 0; 00452 count[0] = (size_t) nlat; 00453 count[1] = (size_t) nlon; 00454 count[2] = 0; 00455 istat = nc_put_vara_double(ncoutid, latoutid, start, count, lat); 00456 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00457 00458 start[0] = 0; 00459 start[1] = 0; 00460 start[2] = 0; 00461 count[0] = (size_t) nlat; 00462 count[1] = (size_t) nlon; 00463 count[2] = 0; 00464 istat = nc_put_vara_double(ncoutid, lonoutid, start, count, lon); 00465 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00466 } 00467 00468 if ( (!strcmp(gridname, "Lambert_Conformal")||!strcmp(gridname, "rotated_pole")) && x != NULL && y != NULL) { 00469 start[0] = 0; 00470 start[1] = 0; 00471 start[2] = 0; 00472 count[0] = (size_t) nlon; 00473 count[1] = 0; 00474 count[2] = 0; 00475 tmpi = (int *) realloc(tmpi, nlon * sizeof(int)); 00476 if (tmpi == NULL) alloc_error(__FILE__, __LINE__); 00477 for (i=0; i<nlon; i++) 00478 tmpi[i] = x[i]; 00479 00480 istat = nc_put_vara_int(ncoutid, xoutid, start, count, tmpi); 00481 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00482 start[0] = 0; 00483 start[1] = 0; 00484 start[2] = 0; 00485 count[0] = (size_t) nlat; 00486 count[1] = 0; 00487 count[2] = 0; 00488 tmpi = (int *) realloc(tmpi, nlat * sizeof(int)); 00489 if (tmpi == NULL) alloc_error(__FILE__, __LINE__); 00490 for (i=0; i<nlat; i++) 00491 tmpi[i] = y[i]; 00492 istat = nc_put_vara_int(ncoutid, youtid, start, count, tmpi); 00493 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00494 (void) free(tmpi); 00495 } 00496 00497 if (alt != NULL) { 00498 alts = (short int *) malloc(nlat*nlon * sizeof(short int)); 00499 if (alts == NULL) alloc_error(__FILE__, __LINE__); 00500 for (i=0; i<(nlat*nlon); i++) 00501 alts[i] = (short int) alt[i]; 00502 start[0] = 0; 00503 start[1] = 0; 00504 start[2] = 0; 00505 count[0] = (size_t) nlat; 00506 count[1] = (size_t) nlon; 00507 count[2] = 0; 00508 istat = nc_put_vara_short(ncoutid, altoutid, start, count, alts); 00509 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00510 (void) free(alts); 00511 } 00512 00513 /* Close the output netCDF file. */ 00514 istat = ncclose(ncoutid); 00515 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__); 00516 00517 (void) free(tmpstr); 00518 00519 return 0; 00520 }