21 #ifndef __SOLVER_VARIABLE_AREA_HXX__
22 #define __SOLVER_VARIABLE_AREA_HXX__
24 #include <antares/study/filter.h>
25 #include "antares/solver/variable/economy/dispatchable-generation-margin.h"
27 namespace Antares::Solver::Variable
49 inline void Areas<NextT>::initializeFromThermalCluster(
Data::Study*,
57 void Areas<NextT>::buildSurveyReport(SurveyResults& results,
62 int count_int = count;
63 bool linkDataLevel = dataLevel & Category::DataLevel::link;
64 bool areaDataLevel = dataLevel & Category::DataLevel::area;
65 bool thermalAggregateDataLevel = dataLevel & Category::DataLevel::thermalAggregate;
66 if (count_int && (linkDataLevel || areaDataLevel || thermalAggregateDataLevel))
68 assert(results.data.area != NULL
69 &&
"The area must not be null to generate a survey report");
72 auto& area = *results.data.area;
75 if (0 == (dataLevel & Category::DataLevel::link))
79 case Category::hourly:
80 if (not(area.filterSynthesis & Data::filterHourly))
86 if (not(area.filterSynthesis & Data::filterDaily))
91 case Category::weekly:
92 if (not(area.filterSynthesis & Data::filterWeekly))
97 case Category::monthly:
98 if (not(area.filterSynthesis & Data::filterMonthly))
103 case Category::annual:
104 if (not(area.filterSynthesis & Data::filterAnnual))
113 pAreas[area.index].buildSurveyReport(results, dataLevel, fileLevel, precision);
117 template<
class NextT>
118 void Areas<NextT>::buildAnnualSurveyReport(SurveyResults& results,
124 int count_int = count;
125 bool linkDataLevel = dataLevel & Category::DataLevel::link;
126 bool areaDataLevel = dataLevel & Category::DataLevel::area;
127 bool thermalAggregateDataLevel = dataLevel & Category::DataLevel::thermalAggregate;
128 if (count_int && (linkDataLevel || areaDataLevel || thermalAggregateDataLevel))
130 assert(results.data.area != NULL
131 &&
"The area must not be null to generate a survey report");
133 auto& area = *results.data.area;
136 if (0 == (dataLevel & Category::DataLevel::link))
140 case Category::hourly:
141 if (!(area.filterYearByYear & Data::filterHourly))
146 case Category::daily:
147 if (!(area.filterYearByYear & Data::filterDaily))
152 case Category::weekly:
153 if (!(area.filterYearByYear & Data::filterWeekly))
158 case Category::monthly:
159 if (!(area.filterYearByYear & Data::filterMonthly))
164 case Category::annual:
165 if (!(area.filterYearByYear & Data::filterAnnual))
176 pAreas[area.index].buildAnnualSurveyReport(results,
184 template<
class NextT>
185 void Areas<NextT>::buildDigest(SurveyResults& results,
int digestLevel,
int dataLevel)
const
187 int count_int = count;
190 if (dataLevel & Category::DataLevel::area)
192 assert(pAreaCount == results.data.study.areas.size());
195 results.data.rowCaptions.clear();
196 results.data.rowCaptions.resize(pAreaCount);
200 for (uint i = 0; i != pAreaCount; ++i)
202 results.data.area = results.data.study.areas[i];
203 uint index = results.data.area->index;
204 results.data.rowIndex = index;
205 results.data.rowCaptions[index] = results.data.area->id;
206 results.data.columnIndex = 0;
207 results.resetValuesAtLine(i);
208 pAreas[i].buildDigest(results, digestLevel, dataLevel);
214 template<
class NextT>
215 template<
class PredicateT>
218 NextType::RetrieveVariableList(predicate);
221 template<
class NextT>
226 if (VCardType::nodeDepthForGUI)
228 infos.template beginNode<VCardType>();
230 NextType::template provideInformations<I>(infos);
237 infos.template addVCard<VCardType>();
239 NextType::template provideInformations<I>(infos);
243 template<
class NextT>
244 template<
class SearchVCardT,
class O>
245 inline void Areas<NextT>::computeSpatialAggregateWith(O&)
250 template<
class NextT>
251 template<
class SearchVCardT,
class O>
252 inline void Areas<NextT>::computeSpatialAggregateWith(O& out,
const Data::Area* area, uint numSpace)
254 assert(NULL != area);
255 pAreas[area->index].template computeSpatialAggregateWith<SearchVCardT, O>(out, numSpace);
258 template<
class NextT>
259 template<
class VCardToFindT>
260 const double* Areas<NextT>::retrieveHourlyResultsForCurrentYear()
const
265 template<
class NextT>
266 template<
class VCardToFindT>
267 inline void Areas<NextT>::retrieveResultsForArea(
271 pAreas[area->index].template retrieveResultsForArea<VCardToFindT>(result, area);
274 template<
class NextT>
275 template<
class VCardToFindT>
276 inline void Areas<NextT>::retrieveResultsForThermalCluster(
281 .template retrieveResultsForThermalCluster<VCardToFindT>(result, cluster);
284 template<
class NextT>
285 template<
class VCardToFindT>
286 inline void Areas<NextT>::retrieveResultsForLink(
290 pAreas[link->from->index].template retrieveResultsForLink<VCardToFindT>(result, link);
293 template<
class NextT>
300 template<
class NextT>
304 pAreaCount = study.areas.size();
307 pAreas =
new NextType[pAreaCount];
312 for (uint i = 0; i != pAreaCount; ++i)
315 auto* currentArea = study.areas.byIndex[i];
318 uint newPercent = ((i * 100u) / pAreaCount);
319 if (newPercent != oldPercent)
321 logs.info() <<
"Allocating resources " << ((i * 100u) / pAreaCount) <<
"%";
322 oldPercent = newPercent;
330 pAreas[i].initializeFromStudy(study);
332 pAreas[i].initializeFromArea(&study, currentArea);
335 pAreas[i].broadcastNonApplicability(not currentArea->hydro.reservoirManagement);
339 pAreas[i].getPrintStatusFromStudy(study);
341 pAreas[i].supplyMaxNumberOfColumns(study);
345 template<
class NextT>
346 void Areas<NextT>::simulationBegin()
348 for (uint i = 0; i != pAreaCount; ++i)
350 pAreas[i].simulationBegin();
354 template<
class NextT>
355 void Areas<NextT>::simulationEnd()
357 for (uint i = 0; i != pAreaCount; ++i)
359 pAreas[i].simulationEnd();
363 template<
class NextT>
364 void Areas<NextT>::hourForEachArea(
State& state, uint numSpace)
367 state.study.areas.each(
373 state.initFromAreaIndex(area.index, numSpace);
375 for (
const auto& cluster: area.thermal.list.each_enabled())
378 state.initFromThermalClusterIndex(cluster->enabledIndex);
382 auto& variablesForArea = pAreas[area.index];
383 variablesForArea.hourForEachArea(state, numSpace);
386 auto end = area.links.end();
387 for (
auto i = area.links.begin(); i != end; ++i)
389 state.link = i->second;
391 variablesForArea.hourForEachLink(state, numSpace);
396 template<
class NextT>
397 void Areas<NextT>::weekForEachArea(
State& state, uint numSpace)
400 state.study.areas.each(
406 state.initFromAreaIndex(area.index, numSpace);
408 auto& variablesForArea = pAreas[area.index];
411 state.dispatchableMargin = variablesForArea.template retrieveHourlyResultsForCurrentYear<
412 Economy::VCardDispatchableGenMargin>(numSpace);
414 variablesForArea.weekForEachArea(state, numSpace);
422 template<
class NextT>
423 void Areas<NextT>::yearBegin(uint year, uint numSpace)
425 for (uint i = 0; i != pAreaCount; ++i)
427 pAreas[i].yearBegin(year, numSpace);
431 template<
class NextT>
432 void Areas<NextT>::yearEndBuild(
State& state, uint year, uint numSpace)
435 state.study.areas.each(
436 [
this, &state, &year, &numSpace](
Data::Area& area)
441 state.initFromAreaIndex(area.index, numSpace);
444 auto& variablesForArea = pAreas[area.index];
446 for (
const auto& cluster: area.thermal.list.each_enabled())
448 state.thermalCluster = cluster.get();
449 state.yearEndResetThermal();
452 variablesForArea.yearEndBuildPrepareDataForEachThermalCluster(state, year, numSpace);
455 state.yearEndBuildFromThermalClusterIndex(cluster->enabledIndex);
458 variablesForArea.yearEndBuildForEachThermalCluster(state, year, numSpace);
463 template<
class NextT>
464 void Areas<NextT>::yearEnd(uint year, uint numSpace)
466 for (uint i = 0; i != pAreaCount; ++i)
469 pAreas[i].yearEnd(year, numSpace);
473 template<
class NextT>
474 void Areas<NextT>::computeSummary(
unsigned int year,
unsigned int numSpace)
476 for (uint i = 0; i != pAreaCount; ++i)
479 pAreas[i].computeSummary(year, numSpace);
483 template<
class NextT>
484 void Areas<NextT>::weekBegin(
State& state)
486 for (uint i = 0; i != pAreaCount; ++i)
488 pAreas[i].weekBegin(state);
492 template<
class NextT>
493 void Areas<NextT>::weekEnd(
State& state)
495 for (uint i = 0; i != pAreaCount; ++i)
497 pAreas[i].weekEnd(state);
501 template<
class NextT>
502 void Areas<NextT>::hourBegin(uint hourInTheYear)
504 for (uint i = 0; i != pAreaCount; ++i)
506 pAreas[i].hourBegin(hourInTheYear);
510 template<
class NextT>
511 void Areas<NextT>::hourForEachLink(
State& state, uint numSpace)
513 for (uint i = 0; i != pAreaCount; ++i)
515 pAreas[i].hourForEachLink(state, numSpace);
519 template<
class NextT>
520 void Areas<NextT>::hourEnd(
State& state, uint hourInTheYear)
522 for (uint i = 0; i != pAreaCount; ++i)
524 pAreas[i].hourEnd(state, hourInTheYear);
528 template<
class NextT>
529 void Areas<NextT>::beforeYearByYearExport(uint year, uint numSpace)
531 for (uint i = 0; i != pAreaCount; ++i)
533 pAreas[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
uint index
Index of the area - only valid when already added to an area list.
Definition: area.h:216
Area * parentArea
The associate area (alias)
Definition: cluster.h:111
A single thermal cluster.
Definition: cluster.h:76
Areas()
Default Constructor.
Definition: area.hxx:30
static void RetrieveVariableList(PredicateT &predicate)
Retrieve the list of all individual variables.
Definition: area.hxx:216
~Areas()
Destructor.
Definition: area.hxx:294
Definition: cbuilder.h:120
VariableAccessor< typename VCardT::ResultsType, VCardT::columnCount >::Type ResultsType
The true type used for the results.
Definition: info.h:760