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"
27 namespace Antares::Solver::Variable
30 template<
class VariablePerLink>
36 template<
class VariablePerLink>
42 template<
class VariablePerLink>
48 template<
class VariablePerLink>
49 inline void Links<VariablePerLink>::initializeFromThermalCluster(
Data::Study*,
56 template<
class VariablePerLink>
57 inline void Links<VariablePerLink>::broadcastNonApplicability(
bool applyNonApplicable)
59 for (uint i = 0; i != pLinkCount; ++i)
61 pLinks[i].broadcastNonApplicability(applyNonApplicable);
65 template<
class VariablePerLink>
66 inline void Links<VariablePerLink>::getPrintStatusFromStudy(
Data::Study& study)
68 for (uint i = 0; i != pLinkCount; ++i)
70 pLinks[i].getPrintStatusFromStudy(study);
74 template<
class VariablePerLink>
75 inline void Links<VariablePerLink>::supplyMaxNumberOfColumns(
Data::Study& study)
77 for (uint i = 0; i != pLinkCount; ++i)
79 pLinks[i].supplyMaxNumberOfColumns(study);
83 template<
class VariablePerLink>
84 inline void Links<VariablePerLink>::yearBegin(uint year,
unsigned int numSpace)
86 for (uint i = 0; i != pLinkCount; ++i)
88 pLinks[i].yearBegin(year, numSpace);
92 template<
class VariablePerLink>
93 inline void Links<VariablePerLink>::yearEndBuildPrepareDataForEachThermalCluster(
96 unsigned int numSpace)
98 for (uint i = 0; i != pLinkCount; ++i)
100 pLinks[i].yearEndBuildPrepareDataForEachThermalCluster(state, year, numSpace);
104 template<
class VariablePerLink>
105 inline void Links<VariablePerLink>::yearEndBuildForEachThermalCluster(
State& state,
107 unsigned int numSpace)
109 for (uint i = 0; i != pLinkCount; ++i)
111 pLinks[i].yearEndBuildForEachThermalCluster(state, year, numSpace);
115 template<
class VariablePerLink>
116 inline void Links<VariablePerLink>::yearEndBuild(
State& state, uint year)
118 for (uint i = 0; i != pLinkCount; ++i)
120 pLinks[i].yearEndBuild(state, year);
124 template<
class VariablePerLink>
125 inline void Links<VariablePerLink>::yearEnd(uint year, uint numSpace)
127 for (uint i = 0; i != pLinkCount; ++i)
129 pLinks[i].yearEnd(year, numSpace);
133 template<
class VariablePerLink>
134 inline void Links<VariablePerLink>::computeSummary(
unsigned int year,
unsigned int numSpace)
136 for (uint i = 0; i != pLinkCount; ++i)
138 pLinks[i].computeSummary(year, numSpace);
142 template<
class VariablePerLink>
143 inline void Links<VariablePerLink>::weekBegin(
State& state)
145 for (uint i = 0; i != pLinkCount; ++i)
147 pLinks[i].weekBegin(state);
151 template<
class VariablePerLink>
152 inline void Links<VariablePerLink>::weekForEachArea(
State&, uint numSpace)
155 UNUSED_VARIABLE(numSpace);
158 template<
class VariablePerLink>
159 inline void Links<VariablePerLink>::weekEnd(
State& state)
161 for (uint i = 0; i != pLinkCount; ++i)
163 pLinks[i].weekEnd(state);
167 template<
class VariablePerLink>
168 inline void Links<VariablePerLink>::hourBegin(uint hourInTheYear)
170 for (uint i = 0; i != pLinkCount; ++i)
172 pLinks[i].hourBegin(hourInTheYear);
176 template<
class VariablePerLink>
177 inline void Links<VariablePerLink>::hourForEachArea(
State& state,
unsigned int numSpace)
179 for (uint i = 0; i != pLinkCount; ++i)
181 pLinks[i].hourForEachArea(state, numSpace);
185 template<
class VariablePerLink>
186 inline void Links<VariablePerLink>::hourForEachLink(
State& state,
unsigned int numSpace)
188 pLinks[state.link->indexForArea].hourForEachLink(state, numSpace);
191 template<
class VariablePerLink>
192 inline void Links<VariablePerLink>::hourEnd(
State& state, uint hourInTheYear)
194 for (uint i = 0; i != pLinkCount; ++i)
196 pLinks[i].hourEnd(state, hourInTheYear);
200 template<
class VariablePerLink>
201 inline void Links<VariablePerLink>::buildSurveyReport(SurveyResults& results,
206 int count_int = count;
207 bool link_dataLevel = (dataLevel & Category::DataLevel::link);
208 if (count_int && link_dataLevel)
210 assert(results.data.link != NULL
211 &&
"The link must not be null to generate a survey report");
214 auto& link = *results.data.link;
219 case Category::hourly:
220 if (!(link.filterSynthesis & Data::filterHourly))
225 case Category::daily:
226 if (!(link.filterSynthesis & Data::filterDaily))
231 case Category::weekly:
232 if (!(link.filterSynthesis & Data::filterWeekly))
237 case Category::monthly:
238 if (!(link.filterSynthesis & Data::filterMonthly))
243 case Category::annual:
244 if (!(link.filterSynthesis & Data::filterAnnual))
252 auto& linkOutputData = pLinks[link.indexForArea];
253 linkOutputData.buildSurveyReport(results, dataLevel, fileLevel, precision);
257 template<
class VariablePerLink>
258 inline void Links<VariablePerLink>::buildAnnualSurveyReport(SurveyResults& results,
264 int count_int = count;
265 bool link_dataLevel = (dataLevel & Category::DataLevel::link);
266 if (count_int && link_dataLevel)
268 assert(results.data.link != NULL
269 &&
"The link must not be null to generate a survey report");
271 auto& link = *results.data.link;
276 case Category::hourly:
277 if (not(link.filterYearByYear & Data::filterHourly))
282 case Category::daily:
283 if (not(link.filterYearByYear & Data::filterDaily))
288 case Category::weekly:
289 if (not(link.filterYearByYear & Data::filterWeekly))
294 case Category::monthly:
295 if (not(link.filterYearByYear & Data::filterMonthly))
300 case Category::annual:
301 if (not(link.filterYearByYear & Data::filterAnnual))
311 auto& linkOutputData = pLinks[results.data.link->indexForArea];
312 linkOutputData.buildAnnualSurveyReport(results, dataLevel, fileLevel, precision, numSpace);
316 template<
class VariablePerLink>
318 inline void Links<VariablePerLink>::provideInformations(I& infos)
321 if (VCardType::nodeDepthForGUI)
323 infos.template beginNode<VCardType>();
325 NextType::template provideInformations<I>(infos);
332 infos.template addVCard<VCardType>();
334 NextType::template provideInformations<I>(infos);
338 template<
class VariablePerLink>
339 template<
class PredicateT>
342 NextType::RetrieveVariableList(predicate);
345 template<
class VariablePerLink>
352 template<
class VariablePerLink>
356 assert(study &&
"A study pointer must not be null");
357 assert(area &&
"An area pointer must not be null");
359 pLinkCount = (uint)area->links.size();
362 pLinks =
new NextType[pLinkCount];
366 auto end = area->links.end();
367 for (
auto i = area->links.begin(); i != end; ++i, ++lnkIndex)
370 NextType& n = pLinks[lnkIndex];
374 n.initializeFromStudy(*study);
376 n.initializeFromArea(study, area);
378 n.initializeFromAreaLink(study, i->second);
387 template<
class VariablePerLink>
388 void Links<VariablePerLink>::simulationBegin()
390 for (uint i = 0; i != pLinkCount; ++i)
392 pLinks[i].simulationBegin();
396 template<
class VariablePerLink>
397 void Links<VariablePerLink>::simulationEnd()
399 for (uint i = 0; i != pLinkCount; ++i)
401 pLinks[i].simulationEnd();
405 template<
class VariablePerLink>
406 void Links<VariablePerLink>::buildDigest(SurveyResults& results,
410 int count_int = count;
411 bool linkDataLevel = dataLevel & Category::DataLevel::link;
412 bool areaDataLevel = dataLevel & Category::DataLevel::area;
413 if (count_int && (linkDataLevel || areaDataLevel))
415 if (not results.data.area->links.empty())
417 auto end = results.data.area->links.cend();
418 for (
auto i = results.data.area->links.cbegin(); i != end; ++i)
420 results.data.link = i->second;
421 pLinks[results.data.link->indexForArea].buildDigest(results,
423 Category::DataLevel::link);
429 template<
class VariablePerLink>
430 void Links<VariablePerLink>::beforeYearByYearExport(uint year, uint numSpace)
432 for (uint i = 0; i != pLinkCount; ++i)
434 pLinks[i].beforeYearByYearExport(year, numSpace);
Definition of a link between two areas (Interconnection)
Definition: links.h:58
Definition for a single area.
Definition: area.h:51
A single thermal cluster.
Definition: cluster.h:76
static void RetrieveVariableList(PredicateT &predicate)
Retrieve the list of all individual variables.
Definition: links.hxx:340
~Links()
Destructor.
Definition: links.hxx:346
Links()
Default constructor.
Definition: links.hxx:31
Definition: cbuilder.h:120