21#ifndef __ANTARES_SOLVER_timeSeries_GENERATOR_HXX__
22#define __ANTARES_SOLVER_timeSeries_GENERATOR_HXX__
24#include <antares/logs/logs.h>
26namespace Antares::TSGenerator
31bool GenerateHydroTimeSeries(Data::Study& study, uint year, IResultWriter& writer);
34inline bool GenerateTimeSeries<Data::timeSeriesHydro>(Data::Study& study,
36 IResultWriter& writer)
38 return GenerateHydroTimeSeries(study, year, writer);
42template<enum Data::TimeSeriesType T>
43bool GenerateTimeSeries(Data::Study& study, uint year, IResultWriter& writer)
45 auto* xcast =
reinterpret_cast<XCast::XCast*
>(
46 study.cacheTSGenerator[Data::TimeSeriesBitPatternIntoIndex<T>::value]);
50 logs.debug() <<
"Preparing the " << Data::TimeSeriesToCStr<T>::Value() <<
" TS Generator";
51 xcast =
new XCast::XCast(study, T, writer);
52 study.cacheTSGenerator[Data::TimeSeriesBitPatternIntoIndex<T>::value] = xcast;
60 case Data::timeSeriesLoad:
61 xcast->random = &(study.runtime.random[Data::seedTsGenLoad]);
63 case Data::timeSeriesSolar:
64 xcast->random = &(study.runtime.random[Data::seedTsGenSolar]);
66 case Data::timeSeriesWind:
67 xcast->random = &(study.runtime.random[Data::seedTsGenWind]);
69 case Data::timeSeriesHydro:
70 xcast->random = &(study.runtime.random[Data::seedTsGenHydro]);
73 xcast->random =
nullptr;
74 assert(
false and
"invalid ts type");
78 bool r = xcast->run();
80 Destroy<T>(study, year);
84template<enum Data::TimeSeriesType T>
85void Destroy(Data::Study& study, uint year)
87 auto* xcast =
reinterpret_cast<XCast::XCast*
>(
88 study.cacheTSGenerator[Data::TimeSeriesBitPatternIntoIndex<T>::value]);
95 auto& parameters = study.parameters;
100 case Data::timeSeriesLoad:
102 shouldDestroy = (parameters.refreshIntervalLoad > parameters.nbYears)
103 || year + parameters.refreshIntervalLoad > parameters.nbYears;
106 case Data::timeSeriesSolar:
108 shouldDestroy = (parameters.refreshIntervalSolar > parameters.nbYears)
109 || year + parameters.refreshIntervalSolar > parameters.nbYears;
112 case Data::timeSeriesHydro:
114 shouldDestroy = (parameters.refreshIntervalHydro > parameters.nbYears)
115 || year + parameters.refreshIntervalHydro > parameters.nbYears;
118 case Data::timeSeriesWind:
120 shouldDestroy = (parameters.refreshIntervalWind > parameters.nbYears)
121 || year + parameters.refreshIntervalWind > parameters.nbYears;
124 case Data::timeSeriesThermal:
126 shouldDestroy = (parameters.refreshIntervalThermal > parameters.nbYears)
127 || year + parameters.refreshIntervalThermal > parameters.nbYears;
131 shouldDestroy =
true;
136 logs.info() <<
" Releasing the " << Data::TimeSeriesToCStr<T>::Value() <<
" TS Generator";
137 study.cacheTSGenerator[Data::TimeSeriesBitPatternIntoIndex<T>::value] =
nullptr;
138 study.destroyTSGeneratorData<T>();