23 #include <antares/utils/utils.h>
24 #include "antares/solver/variable/variable.h"
28 inline std::vector<std::string> sortedUniqueGroups(
29 const std::vector<Antares::Data::ShortTermStorage::STStorageCluster>& storages)
31 std::set<std::string> names;
32 for (
const auto& cluster: storages)
34 names.insert(cluster.properties.groupName);
36 return {names.begin(), names.end()};
40 namespace Antares::Solver::Variable::Economy
47 return "STS by group";
59 return "STS injections, withdrawals and levels";
77 & (Category::FileLevel::id
78 | Category::FileLevel::va);
86 static constexpr
int columnCount = Category::dynamicColumns;
89 static constexpr uint8_t spatialAggregateMode = Category::spatialAggregateEachYear;
90 static constexpr uint8_t spatialAggregatePostProcessing = 0;
97 typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
98 typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
105 template<
class NextT = Container::EndOfList>
135 template<
int CDataLevel,
int CFile>
152 pNbYearsParallel = study->maxNbYearsInParallel;
153 pValuesForTheCurrentYear.resize(pNbYearsParallel);
156 groupNames_ = sortedUniqueGroups(area->shortTermStorage.storagesByIndex);
157 groupToNumbers_ = Utils::giveNumbersToStrings(groupNames_);
159 nbColumns_ = groupNames_.size() * NB_COLS_PER_GROUP;
165 for (
unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
167 pValuesForTheCurrentYear[numSpace].resize(nbColumns_);
170 for (
unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
172 for (
unsigned int i = 0; i != nbColumns_; ++i)
174 pValuesForTheCurrentYear[numSpace][i].initializeFromStudy(*study);
178 for (
unsigned int i = 0; i != nbColumns_; ++i)
189 NextType::initializeFromArea(study, area);
192 size_t getMaxNumberColumns()
const
197 void yearBegin(
unsigned int year,
unsigned int numSpace)
200 for (
unsigned int i = 0; i != nbColumns_; ++i)
202 pValuesForTheCurrentYear[numSpace][i].reset();
205 NextType::yearBegin(year, numSpace);
208 void yearEnd(
unsigned int year,
unsigned int numSpace)
221 for (
unsigned int column = 0; column < nbColumns_; column++)
223 switch (column % NB_COLS_PER_GROUP)
225 case VariableType::level:
226 pValuesForTheCurrentYear[numSpace][column]
227 .computeAveragesForCurrentYearFromHourlyResults();
229 case VariableType::injection:
230 case VariableType::withdrawal:
231 pValuesForTheCurrentYear[numSpace][column].computeStatisticsForTheCurrentYear();
236 NextType::yearEnd(year, numSpace);
239 void computeSummary(
unsigned int year,
unsigned int numSpace)
242 VariableAccessorType::ComputeSummary(pValuesForTheCurrentYear[numSpace],
247 NextType::computeSummary(year, numSpace);
250 void hourBegin(
unsigned int hourInTheYear)
252 NextType::hourBegin(hourInTheYear);
255 void hourForEachArea(
State& state,
unsigned int numSpace)
257 using namespace Antares::Data::ShortTermStorage;
258 const auto& shortTermStorage = state.area->shortTermStorage;
260 uint clusterIndex = 0;
261 for (
const auto& sts: shortTermStorage.storagesByIndex)
263 unsigned int groupNumber = groupToNumbers_[sts.properties.groupName];
264 const auto& result = state.hourlyResults->ShortTermStorage[clusterIndex];
266 pValuesForTheCurrentYear[numSpace][NB_COLS_PER_GROUP * groupNumber
267 + VariableType::injection][state.hourInTheYear]
268 += result.injection[state.hourInTheWeek];
271 pValuesForTheCurrentYear[numSpace][NB_COLS_PER_GROUP * groupNumber
272 + VariableType::withdrawal][state.hourInTheYear]
273 += result.withdrawal[state.hourInTheWeek];
276 pValuesForTheCurrentYear[numSpace][NB_COLS_PER_GROUP * groupNumber
277 + VariableType::level][state.hourInTheYear]
278 += result.level[state.hourInTheWeek];
284 NextType::hourForEachArea(state, numSpace);
287 inline void buildDigest(SurveyResults&
results,
int digestLevel,
int dataLevel)
const
290 NextType::buildDigest(
results, digestLevel, dataLevel);
293 Antares::Memory::Stored<double>::ConstReturnType retrieveRawHourlyValuesForCurrentYear(
295 unsigned int numSpace)
const
297 return pValuesForTheCurrentYear[numSpace][column].hour;
300 std::string caption(
unsigned int column)
const
302 static const std::vector<std::string> VAR_POSSIBLE_KINDS = {
"INJECTION",
305 const std::string& groupName = groupNames_[column / NB_COLS_PER_GROUP];
306 const std::string& variableKind = VAR_POSSIBLE_KINDS[column % NB_COLS_PER_GROUP];
307 return groupName +
"_" + variableKind;
310 std::string unit(
unsigned int column)
const
312 switch (column % NB_COLS_PER_GROUP)
314 case VariableType::level:
316 case VariableType::injection:
317 case VariableType::withdrawal:
324 void localBuildAnnualSurveyReport(SurveyResults&
results,
327 unsigned int numSpace)
const
330 results.isCurrentVarNA = AncestorType::isNonApplicable;
332 if (!AncestorType::isPrinted[0])
337 for (
unsigned int column = 0; column < nbColumns_; column++)
339 results.variableCaption = caption(column);
340 results.variableUnit = unit(column);
341 pValuesForTheCurrentYear[numSpace][column]
342 .template buildAnnualSurveyReport<VCardType>(
results, fileLevel, precision);
346 void buildSurveyReport(SurveyResults&
results,
354 if (AncestorType::isPrinted[0])
360 results.isCurrentVarNA[0] = AncestorType::isNonApplicable[0];
362 for (
unsigned int column = 0; column < nbColumns_; column++)
364 results.variableCaption = caption(column);
365 results.variableUnit = unit(column);
367 .template buildSurveyReport<ResultsType, VCardType>(
377 NextType::buildSurveyReport(
results, dataLevel, fileLevel, precision);
382 typename VCardType::IntermediateValuesType pValuesForTheCurrentYear;
383 size_t nbColumns_ = 0;
384 std::vector<std::string> groupNames_;
385 std::map<std::string, unsigned int> groupToNumbers_;
386 const int NB_COLS_PER_GROUP = 3;
387 unsigned int pNbYearsParallel;
Definition for a single area.
Definition: area.h:51
Variables related to short term storage groups.
Definition: STSbyGroup.h:107
VCardSTSbyGroup VCardType
VCard.
Definition: STSbyGroup.h:120
@ count
How many items have we got.
Definition: STSbyGroup.h:132
VCardType::ResultsType ResultsType
List of expected results.
Definition: STSbyGroup.h:125
Variable::IVariable< STSbyGroup< NextT >, NextT, VCardType > AncestorType
Ancestor.
Definition: STSbyGroup.h:122
NextT NextType
Type of the next static variable.
Definition: STSbyGroup.h:118
Interface for any variable.
Definition: variable.h:47
const StoredResultType & results() const
The results.
Definition: variable.hxx:544
StoredResultType pResults
All the results about this variable.
Definition: variable.h:323
@ count
The count if item in the list.
Definition: results.h:52
Definition: cbuilder.h:120
Definition: STSbyGroup.h:137
Definition: STSbyGroup.h:43
static constexpr uint8_t spatialAggregate
The Spatial aggregation.
Definition: STSbyGroup.h:88
static constexpr uint8_t decimal
Decimal precision.
Definition: STSbyGroup.h:84
static constexpr uint8_t nodeDepthForGUI
Indentation (GUI)
Definition: STSbyGroup.h:82
static constexpr uint8_t categoryFileLevel
File level (provided by the type of the results)
Definition: STSbyGroup.h:76
VCardSTSbyGroup VCardForSpatialAggregate
The VCard to look for for calculating spatial aggregates.
Definition: STSbyGroup.h:71
static constexpr uint8_t precision
Precision (views)
Definition: STSbyGroup.h:80
static constexpr uint8_t categoryDataLevel
Data Level.
Definition: STSbyGroup.h:74
static constexpr uint8_t hasIntermediateValues
Intermediate values.
Definition: STSbyGroup.h:92
Results< R::AllYears::Average< R::AllYears::StdDeviation< R::AllYears::Min< R::AllYears::Max< > > > > > ResultsType
The synhesis results.
Definition: STSbyGroup.h:68
static std::string Unit()
Unit.
Definition: STSbyGroup.h:51
static std::string Description()
The short description of the variable.
Definition: STSbyGroup.h:57
static std::string Caption()
Caption.
Definition: STSbyGroup.h:45
static constexpr uint8_t isPossiblyNonApplicable
Can this variable be non applicable (0 : no, 1 : yes)
Definition: STSbyGroup.h:94
Definition: stdDeviation.h:33