read_analog_data.c File Reference

Read analog data from input NetCDF file. More...

#include <dsclim.h>
Include dependency graph for read_analog_data.c:

Go to the source code of this file.

Functions

void read_analog_data (analog_day_struct *analog_days, double **delta, double **time_ls, char *filename, char *timename)
 Read analog data from NetCDF input file.

Detailed Description

Read analog data from input NetCDF file.

Definition in file read_analog_data.c.


Function Documentation

void read_analog_data ( analog_day_struct analog_days,
double **  delta,
double **  time_ls,
char *  filename,
char *  timename 
)

Read analog data from NetCDF input file.

Parameters:
[out] analog_days Analog days time indexes and dates with corresponding dates being downscaled.
[out] delta Temperature difference to apply to analog day data.
[out] time_ls Time values in udunit.
[in] filename Analog days output filename.
[in] timename Time dimension name in NetCDF file.

Definition at line 66 of file read_analog_data.c.

References alloc_error(), analog_day_struct::day, analog_day_struct::day_s, handle_netcdf_error(), analog_day_struct::month, analog_day_struct::month_s, analog_day_struct::ntime, analog_day_struct::year, and analog_day_struct::year_s.

Referenced by wt_downscaling().

00067                                                  {
00076   int istat; /* Diagnostic status */
00077 
00078   int ncinid; /* NetCDF input file handle ID */
00079   int timediminid; /* NetCDF time dimension output ID */
00080   int timeinid; /* NetCDF time variable ID */
00081   int atimeinid; /* NetCDF analog dates variable ID */
00082   int ayearinid; /* NetCDF analog dates variable ID */
00083   int amonthinid; /* NetCDF analog dates variable ID */
00084   int adayinid; /* NetCDF analog dates variable ID */
00085   int dyearinid; /* NetCDF downscaled dates variable ID */
00086   int dmonthinid; /* NetCDF downscaled dates variable ID */
00087   int ddayinid; /* NetCDF downscaled dates variable ID */
00088   int deltatinid; /* NetCDF delta T variable ID */
00089     
00090   size_t start[1]; /* Start element when reading */
00091   size_t count[1]; /* Count of elements to read */
00092   size_t ntime; /* Time dimension length */
00093 
00094   istat = nc_open(filename, NC_NOWRITE, &ncinid);  /* open for reading */
00095   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00096 
00097   istat = nc_inq_dimid(ncinid, timename, &timediminid);  /* get ID for time dimension */
00098   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00099   istat = nc_inq_dimlen(ncinid, timediminid, &ntime); /* get time dimension length */
00100   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00101   analog_days->ntime = ntime;
00102 
00103   istat = nc_inq_varid(ncinid, timename, &timeinid); /* get time variable ID */
00104   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00105 
00106   istat = nc_inq_varid(ncinid, "downscaled_date_year", &dyearinid); /* get variable ID */
00107   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00108   istat = nc_inq_varid(ncinid, "downscaled_date_month", &dmonthinid); /* get variable ID */
00109   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00110   istat = nc_inq_varid(ncinid, "downscaled_date_day", &ddayinid); /* get variable ID */
00111   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00112 
00113   istat = nc_inq_varid(ncinid, "analog_date", &atimeinid); /* get variable ID */
00114   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00115   istat = nc_inq_varid(ncinid, "analog_date_year", &ayearinid); /* get variable ID */
00116   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00117   istat = nc_inq_varid(ncinid, "analog_date_month", &amonthinid); /* get variable ID */
00118   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00119   istat = nc_inq_varid(ncinid, "analog_date_day", &adayinid); /* get variable ID */
00120   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00121 
00122   istat = nc_inq_varid(ncinid, "analog_delta_t", &deltatinid); /* get variable ID */
00123   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00124 
00125   /* Allocate memory and set start and count */
00126   start[0] = 0;
00127   count[0] = (size_t) analog_days->ntime;
00128 
00129   /* Read values from netCDF variables */
00130 
00131   analog_days->year_s = (int *) malloc(analog_days->ntime * sizeof(int));
00132   if (analog_days->year_s == NULL) alloc_error(__FILE__, __LINE__);
00133   istat = nc_get_vara_int(ncinid, dyearinid, start, count, analog_days->year_s);
00134   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00135 
00136   analog_days->month_s = (int *) malloc(analog_days->ntime * sizeof(int));
00137   if (analog_days->month_s == NULL) alloc_error(__FILE__, __LINE__);
00138   istat = nc_get_vara_int(ncinid, dmonthinid, start, count, analog_days->month_s);
00139   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00140 
00141   analog_days->day_s = (int *) malloc(analog_days->ntime * sizeof(int));
00142   if (analog_days->day_s == NULL) alloc_error(__FILE__, __LINE__);
00143   istat = nc_get_vara_int(ncinid, ddayinid, start, count, analog_days->day_s);
00144   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00145 
00146   analog_days->year = (int *) malloc(analog_days->ntime * sizeof(int));
00147   if (analog_days->year == NULL) alloc_error(__FILE__, __LINE__);
00148   istat = nc_get_vara_int(ncinid, ayearinid, start, count, analog_days->year);
00149   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00150 
00151   analog_days->month = (int *) malloc(analog_days->ntime * sizeof(int));
00152   if (analog_days->month == NULL) alloc_error(__FILE__, __LINE__);
00153   istat = nc_get_vara_int(ncinid, amonthinid, start, count, analog_days->month);
00154   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00155 
00156   analog_days->day = (int *) malloc(analog_days->ntime * sizeof(int));
00157   if (analog_days->day == NULL) alloc_error(__FILE__, __LINE__);
00158   istat = nc_get_vara_int(ncinid, adayinid, start, count, analog_days->day);
00159   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00160 
00161   (*delta) = (double *) malloc(analog_days->ntime * sizeof(double));
00162   if ((*delta) == NULL) alloc_error(__FILE__, __LINE__);
00163   istat = nc_get_vara_double(ncinid, deltatinid, start, count, *delta);
00164   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00165 
00166   (*time_ls) = (double *) malloc(analog_days->ntime * sizeof(double));
00167   if ((*time_ls) == NULL) alloc_error(__FILE__, __LINE__);
00168   istat = nc_get_vara_double(ncinid, timeinid, start, count, *time_ls);
00169   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00170 
00171   /* Close the input netCDF file. */
00172   istat = ncclose(ncinid);
00173   if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00174 }


Generated on 12 May 2016 for DSCLIM by  doxygen 1.6.1