146 template<
int CDataLevel,
int CFile>
163 pNbYearsParallel = study->maxNbYearsInParallel;
164 pValuesForTheCurrentYear.resize(pNbYearsParallel);
167 groupNames_ = sortedUniqueGroups(area->shortTermStorage.storagesByIndex);
168 groupToNumbers_ = giveNumbersToGroups(groupNames_);
170 nbColumns_ = groupNames_.size() * NB_COLS_PER_GROUP;
176 for (
unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
178 pValuesForTheCurrentYear[numSpace].resize(nbColumns_);
181 for (
unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
183 for (
unsigned int i = 0; i != nbColumns_; ++i)
185 pValuesForTheCurrentYear[numSpace][i].initializeFromStudy(*study);
189 for (
unsigned int i = 0; i != nbColumns_; ++i)
200 NextType::initializeFromArea(study, area);
203 size_t getMaxNumberColumns()
const
208 void yearBegin(
unsigned int year,
unsigned int numSpace)
211 for (
unsigned int i = 0; i != nbColumns_; ++i)
213 pValuesForTheCurrentYear[numSpace][i].reset();
216 NextType::yearBegin(year, numSpace);
219 void yearEnd(
unsigned int year,
unsigned int numSpace)
232 for (
unsigned int column = 0; column < nbColumns_; column++)
234 switch (column % NB_COLS_PER_GROUP)
236 case VariableType::level:
237 pValuesForTheCurrentYear[numSpace][column]
238 .computeAveragesForCurrentYearFromHourlyResults();
240 case VariableType::injection:
241 case VariableType::withdrawal:
242 pValuesForTheCurrentYear[numSpace][column].computeStatisticsForTheCurrentYear();
247 NextType::yearEnd(year, numSpace);
250 void computeSummary(std::map<unsigned int, unsigned int>& numSpaceToYear,
251 unsigned int nbYearsForCurrentSummary)
259 for (
unsigned int numSpace = 0; numSpace < nbYearsForCurrentSummary; ++numSpace)
261 VariableAccessorType::ComputeSummary(pValuesForTheCurrentYear[numSpace],
263 numSpaceToYear[numSpace]);
267 NextType::computeSummary(numSpaceToYear, nbYearsForCurrentSummary);
270 void hourBegin(
unsigned int hourInTheYear)
272 NextType::hourBegin(hourInTheYear);
275 void hourForEachArea(
State& state,
unsigned int numSpace)
277 using namespace Antares::Data::ShortTermStorage;
278 const auto& shortTermStorage = state.area->shortTermStorage;
280 uint clusterIndex = 0;
281 for (
const auto& cluster: shortTermStorage.storagesByIndex)
283 unsigned int groupNumber = groupToNumbers_[cluster.properties.groupName];
284 const auto& result = state.hourlyResults->ShortTermStorage[state.hourInTheWeek];
286 pValuesForTheCurrentYear[numSpace][NB_COLS_PER_GROUP * groupNumber
287 + VariableType::injection][state.hourInTheYear]
288 += result.injection[clusterIndex];
291 pValuesForTheCurrentYear[numSpace][NB_COLS_PER_GROUP * groupNumber
292 + VariableType::withdrawal][state.hourInTheYear]
293 += result.withdrawal[clusterIndex];
296 pValuesForTheCurrentYear[numSpace][NB_COLS_PER_GROUP * groupNumber
297 + VariableType::level][state.hourInTheYear]
298 += result.level[clusterIndex];
304 NextType::hourForEachArea(state, numSpace);
307 inline void buildDigest(SurveyResults&
results,
int digestLevel,
int dataLevel)
const
310 NextType::buildDigest(
results, digestLevel, dataLevel);
313 Antares::Memory::Stored<double>::ConstReturnType retrieveRawHourlyValuesForCurrentYear(
315 unsigned int numSpace)
const
317 return pValuesForTheCurrentYear[numSpace][column].hour;
320 std::string caption(
unsigned int column)
const
322 static const std::vector<std::string> VAR_POSSIBLE_KINDS = {
"INJECTION",
325 const std::string& groupName = groupNames_[column / NB_COLS_PER_GROUP];
326 const std::string& variableKind = VAR_POSSIBLE_KINDS[column % NB_COLS_PER_GROUP];
327 return groupName +
"_" + variableKind;
330 std::string unit(
unsigned int column)
const
332 switch (column % NB_COLS_PER_GROUP)
334 case VariableType::level:
336 case VariableType::injection:
337 case VariableType::withdrawal:
344 void localBuildAnnualSurveyReport(SurveyResults&
results,
347 unsigned int numSpace)
const
350 results.isCurrentVarNA = AncestorType::isNonApplicable;
352 if (!AncestorType::isPrinted[0])
357 for (
unsigned int column = 0; column < nbColumns_; column++)
359 results.variableCaption = caption(column);
360 results.variableUnit = unit(column);
361 pValuesForTheCurrentYear[numSpace][column]
362 .template buildAnnualSurveyReport<VCardType>(
results, fileLevel, precision);
366 void buildSurveyReport(SurveyResults&
results,
374 if (AncestorType::isPrinted[0])
380 results.isCurrentVarNA[0] = AncestorType::isNonApplicable[0];
382 for (
unsigned int column = 0; column < nbColumns_; column++)
384 results.variableCaption = caption(column);
385 results.variableUnit = unit(column);
387 .template buildSurveyReport<ResultsType, VCardType>(
397 NextType::buildSurveyReport(
results, dataLevel, fileLevel, precision);
402 typename VCardType::IntermediateValuesType pValuesForTheCurrentYear;
403 size_t nbColumns_ = 0;
404 std::vector<std::string> groupNames_;
405 std::map<std::string, unsigned int> groupToNumbers_;
406 const int NB_COLS_PER_GROUP = 3;
407 unsigned int pNbYearsParallel;