21#ifndef __SOLVER_VARIABLE_INC_LINK_HXX__
22#define __SOLVER_VARIABLE_INC_LINK_HXX__
24#include <antares/study/filter.h>
25#include "antares/solver/variable/endoflist.h"
34template<
class VariablePerLink>
40template<
class VariablePerLink>
46template<
class VariablePerLink>
52template<
class VariablePerLink>
53inline void Links<VariablePerLink>::initializeFromThermalCluster(
Data::Study*,
60template<
class VariablePerLink>
61inline void Links<VariablePerLink>::broadcastNonApplicability(
bool applyNonApplicable)
63 for (uint i = 0; i != pLinkCount; ++i)
65 pLinks[i].broadcastNonApplicability(applyNonApplicable);
69template<
class VariablePerLink>
70inline void Links<VariablePerLink>::getPrintStatusFromStudy(
Data::Study& study)
72 for (uint i = 0; i != pLinkCount; ++i)
74 pLinks[i].getPrintStatusFromStudy(study);
78template<
class VariablePerLink>
79inline void Links<VariablePerLink>::supplyMaxNumberOfColumns(
Data::Study& study)
81 for (uint i = 0; i != pLinkCount; ++i)
83 pLinks[i].supplyMaxNumberOfColumns(study);
87template<
class VariablePerLink>
88inline void Links<VariablePerLink>::yearBegin(uint year,
unsigned int numSpace)
90 for (uint i = 0; i != pLinkCount; ++i)
92 pLinks[i].yearBegin(year, numSpace);
96template<
class VariablePerLink>
97inline void Links<VariablePerLink>::yearEndBuildPrepareDataForEachThermalCluster(
100 unsigned int numSpace)
102 for (uint i = 0; i != pLinkCount; ++i)
104 pLinks[i].yearEndBuildPrepareDataForEachThermalCluster(state, year, numSpace);
108template<
class VariablePerLink>
109inline void Links<VariablePerLink>::yearEndBuildForEachThermalCluster(
State& state,
111 unsigned int numSpace)
113 for (uint i = 0; i != pLinkCount; ++i)
115 pLinks[i].yearEndBuildForEachThermalCluster(state, year, numSpace);
119template<
class VariablePerLink>
120inline void Links<VariablePerLink>::yearEndBuild(
State& state, uint year)
122 for (uint i = 0; i != pLinkCount; ++i)
124 pLinks[i].yearEndBuild(state, year);
128template<
class VariablePerLink>
129inline void Links<VariablePerLink>::yearEnd(uint year, uint numSpace)
131 for (uint i = 0; i != pLinkCount; ++i)
133 pLinks[i].yearEnd(year, numSpace);
137template<
class VariablePerLink>
138inline void Links<VariablePerLink>::computeSummary(
139 std::map<unsigned int, unsigned int>& numSpaceToYear,
140 unsigned int nbYearsForCurrentSummary)
142 for (uint i = 0; i != pLinkCount; ++i)
144 pLinks[i].computeSummary(numSpaceToYear, nbYearsForCurrentSummary);
148template<
class VariablePerLink>
149inline void Links<VariablePerLink>::weekBegin(
State& state)
151 for (uint i = 0; i != pLinkCount; ++i)
153 pLinks[i].weekBegin(state);
157template<
class VariablePerLink>
158inline void Links<VariablePerLink>::weekForEachArea(
State&, uint numSpace)
161 UNUSED_VARIABLE(numSpace);
164template<
class VariablePerLink>
165inline void Links<VariablePerLink>::weekEnd(
State& state)
167 for (uint i = 0; i != pLinkCount; ++i)
169 pLinks[i].weekEnd(state);
173template<
class VariablePerLink>
174inline void Links<VariablePerLink>::hourBegin(uint hourInTheYear)
176 for (uint i = 0; i != pLinkCount; ++i)
178 pLinks[i].hourBegin(hourInTheYear);
182template<
class VariablePerLink>
183inline void Links<VariablePerLink>::hourForEachArea(
State& state,
unsigned int numSpace)
185 for (uint i = 0; i != pLinkCount; ++i)
187 pLinks[i].hourForEachArea(state, numSpace);
191template<
class VariablePerLink>
192inline void Links<VariablePerLink>::hourForEachLink(
State& state,
unsigned int numSpace)
194 pLinks[state.link->indexForArea].hourForEachLink(state, numSpace);
197template<
class VariablePerLink>
198inline void Links<VariablePerLink>::hourEnd(
State& state, uint hourInTheYear)
200 for (uint i = 0; i != pLinkCount; ++i)
202 pLinks[i].hourEnd(state, hourInTheYear);
206template<
class VariablePerLink>
207inline void Links<VariablePerLink>::buildSurveyReport(SurveyResults& results,
212 int count_int = count;
213 bool link_dataLevel = (dataLevel & Category::DataLevel::link);
214 if (count_int && link_dataLevel)
216 assert(results.data.link != NULL
217 &&
"The link must not be null to generate a survey report");
220 auto& link = *results.data.link;
225 case Category::hourly:
226 if (!(link.filterSynthesis & Data::filterHourly))
231 case Category::daily:
232 if (!(link.filterSynthesis & Data::filterDaily))
237 case Category::weekly:
238 if (!(link.filterSynthesis & Data::filterWeekly))
243 case Category::monthly:
244 if (!(link.filterSynthesis & Data::filterMonthly))
249 case Category::annual:
250 if (!(link.filterSynthesis & Data::filterAnnual))
258 auto& linkOutputData = pLinks[link.indexForArea];
259 linkOutputData.buildSurveyReport(results, dataLevel, fileLevel, precision);
263template<
class VariablePerLink>
264inline void Links<VariablePerLink>::buildAnnualSurveyReport(SurveyResults& results,
270 int count_int = count;
271 bool link_dataLevel = (dataLevel & Category::DataLevel::link);
272 if (count_int && link_dataLevel)
274 assert(results.data.link != NULL
275 &&
"The link must not be null to generate a survey report");
277 auto& link = *results.data.link;
282 case Category::hourly:
283 if (not(link.filterYearByYear & Data::filterHourly))
288 case Category::daily:
289 if (not(link.filterYearByYear & Data::filterDaily))
294 case Category::weekly:
295 if (not(link.filterYearByYear & Data::filterWeekly))
300 case Category::monthly:
301 if (not(link.filterYearByYear & Data::filterMonthly))
306 case Category::annual:
307 if (not(link.filterYearByYear & Data::filterAnnual))
317 auto& linkOutputData = pLinks[results.data.link->indexForArea];
318 linkOutputData.buildAnnualSurveyReport(results, dataLevel, fileLevel, precision, numSpace);
322template<
class VariablePerLink>
324inline void Links<VariablePerLink>::provideInformations(I& infos)
327 if (VCardType::nodeDepthForGUI)
329 infos.template beginNode<VCardType>();
331 NextType::template provideInformations<I>(infos);
338 infos.template addVCard<VCardType>();
340 NextType::template provideInformations<I>(infos);
344template<
class VariablePerLink>
345template<
class PredicateT>
348 NextType::RetrieveVariableList(predicate);
351template<
class VariablePerLink>
358template<
class VariablePerLink>
362 assert(study &&
"A study pointer must not be null");
363 assert(area &&
"An area pointer must not be null");
365 pLinkCount = (uint)area->links.size();
368 pLinks =
new NextType[pLinkCount];
372 auto end = area->links.end();
373 for (
auto i = area->links.begin(); i != end; ++i, ++lnkIndex)
376 NextType& n = pLinks[lnkIndex];
380 n.initializeFromStudy(*study);
382 n.initializeFromArea(study, area);
384 n.initializeFromAreaLink(study, i->second);
393template<
class VariablePerLink>
394void Links<VariablePerLink>::simulationBegin()
396 for (uint i = 0; i != pLinkCount; ++i)
398 pLinks[i].simulationBegin();
402template<
class VariablePerLink>
403void Links<VariablePerLink>::simulationEnd()
405 for (uint i = 0; i != pLinkCount; ++i)
407 pLinks[i].simulationEnd();
411template<
class VariablePerLink>
412void Links<VariablePerLink>::buildDigest(SurveyResults& results,
416 int count_int = count;
417 bool linkDataLevel = dataLevel & Category::DataLevel::link;
418 bool areaDataLevel = dataLevel & Category::DataLevel::area;
419 if (count_int && (linkDataLevel || areaDataLevel))
421 if (not results.data.area->links.empty())
423 auto end = results.data.area->links.cend();
424 for (
auto i = results.data.area->links.cbegin(); i != end; ++i)
426 results.data.link = i->second;
427 pLinks[results.data.link->indexForArea].buildDigest(results,
429 Category::DataLevel::link);
435template<
class VariablePerLink>
436void Links<VariablePerLink>::beforeYearByYearExport(uint year, uint numSpace)
438 for (uint i = 0; i != pLinkCount; ++i)
440 pLinks[i].beforeYearByYearExport(year, numSpace);
Definition of a link between two areas (Interconnection)
Definition links.h:50
Definition for a single area.
Definition area.h:52
A single thermal cluster.
Definition cluster.h:78
static void RetrieveVariableList(PredicateT &predicate)
Retrieve the list of all individual variables.
Definition links.hxx:346
~Links()
Destructor.
Definition links.hxx:352
Links()
Default constructor.
Definition links.hxx:35
Definition cbuilder.h:120