00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 #include <dsclim.h>
00063
00065 void
00066 read_analog_data(analog_day_struct *analog_days, double **delta, double **time_ls,
00067 char *filename, char *timename) {
00076 int istat;
00077
00078 int ncinid;
00079 int timediminid;
00080 int timeinid;
00081 int atimeinid;
00082 int ayearinid;
00083 int amonthinid;
00084 int adayinid;
00085 int dyearinid;
00086 int dmonthinid;
00087 int ddayinid;
00088 int deltatinid;
00089
00090 size_t start[1];
00091 size_t count[1];
00092 size_t ntime;
00093
00094 istat = nc_open(filename, NC_NOWRITE, &ncinid);
00095 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00096
00097 istat = nc_inq_dimid(ncinid, timename, &timediminid);
00098 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00099 istat = nc_inq_dimlen(ncinid, timediminid, &ntime);
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);
00104 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00105
00106 istat = nc_inq_varid(ncinid, "downscaled_date_year", &dyearinid);
00107 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00108 istat = nc_inq_varid(ncinid, "downscaled_date_month", &dmonthinid);
00109 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00110 istat = nc_inq_varid(ncinid, "downscaled_date_day", &ddayinid);
00111 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00112
00113 istat = nc_inq_varid(ncinid, "analog_date", &atimeinid);
00114 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00115 istat = nc_inq_varid(ncinid, "analog_date_year", &ayearinid);
00116 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00117 istat = nc_inq_varid(ncinid, "analog_date_month", &amonthinid);
00118 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00119 istat = nc_inq_varid(ncinid, "analog_date_day", &adayinid);
00120 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00121
00122 istat = nc_inq_varid(ncinid, "analog_delta_t", &deltatinid);
00123 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00124
00125
00126 start[0] = 0;
00127 count[0] = (size_t) analog_days->ntime;
00128
00129
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
00172 istat = ncclose(ncinid);
00173 if (istat != NC_NOERR) handle_netcdf_error(istat, __FILE__, __LINE__);
00174 }