merge_seasons.c File Reference

Merge seasonal analog date data. More...

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

Go to the source code of this file.

Functions

int merge_seasons (analog_day_struct analog_days_merged, analog_day_struct analog_days, int *merged_itimes, int ntimes_merged, int ntimes)
 Merge seasonal analog date data.

Detailed Description

Merge seasonal analog date data.

Definition in file merge_seasons.c.


Function Documentation

int merge_seasons ( analog_day_struct  analog_days_merged,
analog_day_struct  analog_days,
int *  merged_itimes,
int  ntimes_merged,
int  ntimes 
)

Merge seasonal analog date data.

Parameters:
[out] analog_days_merged Analog days time indexes and dates with corresponding dates being downscaled, all seasons merged
[in] analog_days Analog days time indexes and dates with corresponding dates being downscaled
[in] merged_itimes Time index of total time vector against current merged time vector that could span less than the whole year
[in] ntimes_merged Number of times of days to downscale for this period, all seasons merged
[in] ntimes Number of times of days to downscale for this period

Definition at line 58 of file merge_seasons.c.

References alloc_error(), analog_day_struct::analog_dayschoice, tstruct::day, analog_day_struct::day, analog_day_struct::day_s, tstruct::hour, analog_day_struct::metric_norm, tstruct::min, tstruct::month, analog_day_struct::month, analog_day_struct::month_s, analog_day_struct::ndayschoice, tstruct::sec, analog_day_struct::time, analog_day_struct::tindex_all, analog_day_struct::tindex_s_all, tstruct::year, analog_day_struct::year, and analog_day_struct::year_s.

Referenced by wt_downscaling().

00058                                                                                                                                       {
00067   int t; /* Time loop counter */
00068   int i; /* Loop counter */
00069   int curindex; /* Current index in the merged times vector */
00070   int index_all; /* Current index in the whole time vector */
00071 
00072   /* Process each downscaled day for a specific season subperiod */
00073   for (t=0; t<ntimes; t++) {
00074     /* Index of season-specific time into ntime_ls whole time vector */
00075     index_all = analog_days.tindex_s_all[t];
00076     /* Retrieve index in merge time vector from index of whole time vector ntime_ls */
00077     curindex = merged_itimes[index_all];
00078     /* Retrieve values */
00079     analog_days_merged.tindex_all[curindex] = analog_days.tindex_all[t];
00080     analog_days_merged.time[curindex] = analog_days.time[t];
00081     analog_days_merged.year[curindex] = analog_days.year[t];
00082     analog_days_merged.month[curindex] = analog_days.month[t];
00083     analog_days_merged.day[curindex] = analog_days.day[t];
00084 
00085     analog_days_merged.tindex_s_all[curindex] = analog_days.tindex_s_all[t];
00086     analog_days_merged.year_s[curindex] = analog_days.year_s[t];
00087     analog_days_merged.month_s[curindex] = analog_days.month_s[t];
00088     analog_days_merged.day_s[curindex] = analog_days.day_s[t];
00089     //    printf("IDM %d %d %d\n",t,curindex,index_all);
00090     analog_days_merged.ndayschoice[curindex] = analog_days.ndayschoice[t];
00091     //    printf("%d %d\n",analog_days_merged.ndayschoice[curindex],analog_days.ndayschoice[t]);
00092     if (analog_days_merged.analog_dayschoice[curindex] == NULL) {
00093       analog_days_merged.analog_dayschoice[curindex] =
00094         (tstruct *) malloc(analog_days_merged.ndayschoice[curindex] * sizeof(tstruct));
00095     //    printf("%d %d\n",analog_days_merged.ndayschoice[curindex],analog_days.ndayschoice[t]);
00096       if (analog_days_merged.analog_dayschoice[curindex] == NULL) alloc_error(__FILE__, __LINE__);
00097     }
00098     //    printf("%d %d\n",analog_days_merged.ndayschoice[curindex],analog_days.ndayschoice[t]);
00099     if (analog_days_merged.metric_norm[curindex] == NULL) {
00100       analog_days_merged.metric_norm[curindex] = (float *) malloc(analog_days_merged.ndayschoice[curindex] * sizeof(float));
00101     //    printf("%d %d\n",analog_days_merged.ndayschoice[curindex],analog_days.ndayschoice[t]);
00102       if (analog_days_merged.metric_norm[curindex] == NULL) alloc_error(__FILE__, __LINE__);
00103     }
00104     //    printf("%d %d\n",analog_days_merged.ndayschoice[curindex],analog_days.ndayschoice[t]);
00105     for (i=0; i<analog_days_merged.ndayschoice[curindex]; i++) {
00106       analog_days_merged.metric_norm[curindex][i] = analog_days.metric_norm[t][i];
00107       analog_days_merged.analog_dayschoice[curindex][i].year = analog_days.analog_dayschoice[t][i].year;
00108       analog_days_merged.analog_dayschoice[curindex][i].month = analog_days.analog_dayschoice[t][i].month;
00109       analog_days_merged.analog_dayschoice[curindex][i].day = analog_days.analog_dayschoice[t][i].day;
00110       analog_days_merged.analog_dayschoice[curindex][i].hour = analog_days.analog_dayschoice[t][i].hour;
00111       analog_days_merged.analog_dayschoice[curindex][i].min = analog_days.analog_dayschoice[t][i].min;
00112       analog_days_merged.analog_dayschoice[curindex][i].sec = analog_days.analog_dayschoice[t][i].sec;
00113     }      
00114 
00115   }
00116 
00117   /* Success status */
00118   return 0;
00119 }


Generated on 12 May 2016 for DSCLIM by  doxygen 1.6.1