write_netcdf_dims_3d.c File Reference

Write NetCDF dimensions and create output file. More...

#include <io.h>
Include dependency graph for write_netcdf_dims_3d.c:

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.

Detailed Description

Write NetCDF dimensions and create output file.

Definition in file write_netcdf_dims_3d.c.


Function Documentation

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.

Parameters:
[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
Returns:
Status.

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 }


Generated on 12 May 2016 for DSCLIM by  doxygen 1.6.1