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"
53inline void Areas<NextT>::initializeFromThermalCluster(
Data::Study*,
61void Areas<NextT>::buildSurveyReport(SurveyResults& results,
66 int count_int = count;
67 bool linkDataLevel = dataLevel & Category::DataLevel::link;
68 bool areaDataLevel = dataLevel & Category::DataLevel::area;
69 bool thermalAggregateDataLevel = dataLevel & Category::DataLevel::thermalAggregate;
70 if (count_int && (linkDataLevel || areaDataLevel || thermalAggregateDataLevel))
72 assert(results.data.area != NULL
73 &&
"The area must not be null to generate a survey report");
76 auto& area = *results.data.area;
79 if (0 == (dataLevel & Category::DataLevel::link))
83 case Category::hourly:
84 if (not(area.filterSynthesis & Data::filterHourly))
90 if (not(area.filterSynthesis & Data::filterDaily))
95 case Category::weekly:
96 if (not(area.filterSynthesis & Data::filterWeekly))
101 case Category::monthly:
102 if (not(area.filterSynthesis & Data::filterMonthly))
107 case Category::annual:
108 if (not(area.filterSynthesis & Data::filterAnnual))
117 pAreas[area.index].buildSurveyReport(results, dataLevel, fileLevel, precision);
122void Areas<NextT>::buildAnnualSurveyReport(SurveyResults& results,
128 int count_int = count;
129 bool linkDataLevel = dataLevel & Category::DataLevel::link;
130 bool areaDataLevel = dataLevel & Category::DataLevel::area;
131 bool thermalAggregateDataLevel = dataLevel & Category::DataLevel::thermalAggregate;
132 if (count_int && (linkDataLevel || areaDataLevel || thermalAggregateDataLevel))
134 assert(results.data.area != NULL
135 &&
"The area must not be null to generate a survey report");
137 auto& area = *results.data.area;
140 if (0 == (dataLevel & Category::DataLevel::link))
144 case Category::hourly:
145 if (!(area.filterYearByYear & Data::filterHourly))
150 case Category::daily:
151 if (!(area.filterYearByYear & Data::filterDaily))
156 case Category::weekly:
157 if (!(area.filterYearByYear & Data::filterWeekly))
162 case Category::monthly:
163 if (!(area.filterYearByYear & Data::filterMonthly))
168 case Category::annual:
169 if (!(area.filterYearByYear & Data::filterAnnual))
180 pAreas[area.index].buildAnnualSurveyReport(results,
189void Areas<NextT>::buildDigest(SurveyResults& results,
int digestLevel,
int dataLevel)
const
191 int count_int = count;
194 if (dataLevel & Category::DataLevel::area)
196 assert(pAreaCount == results.data.study.areas.size());
199 results.data.rowCaptions.clear();
200 results.data.rowCaptions.resize(pAreaCount);
204 for (uint i = 0; i != pAreaCount; ++i)
206 results.data.area = results.data.study.areas[i];
207 uint index = results.data.area->index;
208 results.data.rowIndex = index;
209 results.data.rowCaptions[index] = results.data.area->id;
210 results.data.columnIndex = 0;
211 results.resetValuesAtLine(i);
212 pAreas[i].buildDigest(results, digestLevel, dataLevel);
219template<
class PredicateT>
222 NextType::RetrieveVariableList(predicate);
230 if (VCardType::nodeDepthForGUI)
232 infos.template beginNode<VCardType>();
234 NextType::template provideInformations<I>(infos);
241 infos.template addVCard<VCardType>();
243 NextType::template provideInformations<I>(infos);
248template<
class SearchVCardT,
class O>
249inline void Areas<NextT>::computeSpatialAggregateWith(O&)
255template<
class SearchVCardT,
class O>
256inline void Areas<NextT>::computeSpatialAggregateWith(O& out,
const Data::Area* area, uint numSpace)
258 assert(NULL != area);
259 pAreas[area->index].template computeSpatialAggregateWith<SearchVCardT, O>(out, numSpace);
263template<
class VCardToFindT>
264const double* Areas<NextT>::retrieveHourlyResultsForCurrentYear()
const
270template<
class VCardToFindT>
271inline void Areas<NextT>::retrieveResultsForArea(
275 pAreas[area->index].template retrieveResultsForArea<VCardToFindT>(result, area);
279template<
class VCardToFindT>
280inline void Areas<NextT>::retrieveResultsForThermalCluster(
285 .template retrieveResultsForThermalCluster<VCardToFindT>(result, cluster);
289template<
class VCardToFindT>
290inline void Areas<NextT>::retrieveResultsForLink(
294 pAreas[link->from->index].template retrieveResultsForLink<VCardToFindT>(result, link);
308 pAreaCount = study.areas.size();
311 pAreas =
new NextType[pAreaCount];
316 for (uint i = 0; i != pAreaCount; ++i)
319 auto* currentArea = study.areas.byIndex[i];
322 uint newPercent = ((i * 100u) / pAreaCount);
323 if (newPercent != oldPercent)
325 logs.info() <<
"Allocating resources " << ((i * 100u) / pAreaCount) <<
"%";
326 oldPercent = newPercent;
334 pAreas[i].initializeFromStudy(study);
336 pAreas[i].initializeFromArea(&study, currentArea);
339 pAreas[i].broadcastNonApplicability(not currentArea->hydro.reservoirManagement);
343 pAreas[i].getPrintStatusFromStudy(study);
345 pAreas[i].supplyMaxNumberOfColumns(study);
350void Areas<NextT>::simulationBegin()
352 for (uint i = 0; i != pAreaCount; ++i)
354 pAreas[i].simulationBegin();
359void Areas<NextT>::simulationEnd()
361 for (uint i = 0; i != pAreaCount; ++i)
363 pAreas[i].simulationEnd();
368void Areas<NextT>::hourForEachArea(
State& state, uint numSpace)
371 state.study.areas.each(
377 state.initFromAreaIndex(area.index, numSpace);
379 for (
const auto& cluster: area.thermal.list.each_enabled())
382 state.initFromThermalClusterIndex(cluster->enabledIndex);
386 auto& variablesForArea = pAreas[area.index];
387 variablesForArea.hourForEachArea(state, numSpace);
390 auto end = area.links.end();
391 for (
auto i = area.links.begin(); i != end; ++i)
393 state.link = i->second;
395 variablesForArea.hourForEachLink(state, numSpace);
401void Areas<NextT>::weekForEachArea(
State& state, uint numSpace)
404 state.study.areas.each(
410 state.initFromAreaIndex(area.index, numSpace);
412 auto& variablesForArea = pAreas[area.index];
415 state.dispatchableMargin = variablesForArea.template retrieveHourlyResultsForCurrentYear<
416 Economy::VCardDispatchableGenMargin>(numSpace);
418 variablesForArea.weekForEachArea(state, numSpace);
427void Areas<NextT>::yearBegin(uint year, uint numSpace)
429 for (uint i = 0; i != pAreaCount; ++i)
431 pAreas[i].yearBegin(year, numSpace);
436void Areas<NextT>::yearEndBuild(
State& state, uint year, uint numSpace)
439 state.study.areas.each(
440 [
this, &state, &year, &numSpace](
Data::Area& area)
445 state.initFromAreaIndex(area.index, numSpace);
448 auto& variablesForArea = pAreas[area.index];
450 for (
const auto& cluster: area.thermal.list.each_enabled())
452 state.thermalCluster = cluster.get();
453 state.yearEndResetThermal();
456 variablesForArea.yearEndBuildPrepareDataForEachThermalCluster(state, year, numSpace);
459 state.yearEndBuildFromThermalClusterIndex(cluster->enabledIndex);
462 variablesForArea.yearEndBuildForEachThermalCluster(state, year, numSpace);
468void Areas<NextT>::yearEnd(uint year, uint numSpace)
470 for (uint i = 0; i != pAreaCount; ++i)
473 pAreas[i].yearEnd(year, numSpace);
478void Areas<NextT>::computeSummary(std::map<unsigned int, unsigned int>& numSpaceToYear,
479 unsigned int nbYearsForCurrentSummary)
481 for (uint i = 0; i != pAreaCount; ++i)
484 pAreas[i].computeSummary(numSpaceToYear, nbYearsForCurrentSummary);
489void Areas<NextT>::weekBegin(
State& state)
491 for (uint i = 0; i != pAreaCount; ++i)
493 pAreas[i].weekBegin(state);
498void Areas<NextT>::weekEnd(
State& state)
500 for (uint i = 0; i != pAreaCount; ++i)
502 pAreas[i].weekEnd(state);
507void Areas<NextT>::hourBegin(uint hourInTheYear)
509 for (uint i = 0; i != pAreaCount; ++i)
511 pAreas[i].hourBegin(hourInTheYear);
516void Areas<NextT>::hourForEachLink(
State& state, uint numSpace)
518 for (uint i = 0; i != pAreaCount; ++i)
520 pAreas[i].hourForEachLink(state, numSpace);
525void Areas<NextT>::hourEnd(
State& state, uint hourInTheYear)
527 for (uint i = 0; i != pAreaCount; ++i)
529 pAreas[i].hourEnd(state, hourInTheYear);
534void Areas<NextT>::beforeYearByYearExport(uint year, uint numSpace)
536 for (uint i = 0; i != pAreaCount; ++i)
538 pAreas[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
uint index
Index of the area - only valid when already added to an area list.
Definition area.h:217
Area * parentArea
The associate area (alias)
Definition cluster.h:114
A single thermal cluster.
Definition cluster.h:78
Areas()
Default Constructor.
Definition area.hxx:34
static void RetrieveVariableList(PredicateT &predicate)
Retrieve the list of all individual variables.
Definition area.hxx:220
~Areas()
Destructor.
Definition area.hxx:298
Definition cbuilder.h:120
VariableAccessor< typenameVCardT::ResultsType, VCardT::columnCount >::Type ResultsType
The true type used for the results.
Definition info.h:764