Skip to content

Commit

Permalink
Fix/global var hydro modulable (#1614)
Browse files Browse the repository at this point in the history
* Global vars - try remove HydrauliqueModulableQuotidien : simple renaming

* Global vars - try remove HydrauliqueModulableQuotidien : cleaning n class HydroManagement

* Global vars : rename and move down struct VALEURS_GENEREES_PAR_PAYS

* [skip ci] Global vars : small simplification

* remove TS number global var : we don't need timeseriesNumberYear in StudyRuntimeInfos (#1618)

* [skip ci] remove TS number global var : correction after review
  • Loading branch information
guilpier-code authored Sep 18, 2023
1 parent bb2603d commit 2faa11f
Show file tree
Hide file tree
Showing 25 changed files with 278 additions and 314 deletions.
19 changes: 5 additions & 14 deletions src/libs/antares/study/runtime/runtime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,19 +246,12 @@ void StudyRuntimeInfos::initializeRangeLimits(const Study& study, StudyRangeLimi
}

StudyRuntimeInfos::StudyRuntimeInfos(uint nbYearsParallel) :
nbYears(0),
parameters(nullptr),
timeseriesNumberYear(nullptr),
thermalPlantTotalCount(0),
thermalPlantTotalCountMustRun(0),
quadraticOptimizationHasFailed(false)
nbYears(0),
parameters(nullptr),
thermalPlantTotalCount(0),
thermalPlantTotalCountMustRun(0),
quadraticOptimizationHasFailed(false)
{
// Evite les confusions de numeros de TS entre AMC
timeseriesNumberYear = new uint[nbYearsParallel];
for (uint numSpace = 0; numSpace < nbYearsParallel; numSpace++)
{
timeseriesNumberYear[numSpace] = 999999;
}
}

void StudyRuntimeInfos::checkThermalTSGeneration(Study& study)
Expand Down Expand Up @@ -447,8 +440,6 @@ void StudyRuntimeInfos::removeAllRenewableClustersFromSolverComputations(Study&
StudyRuntimeInfos::~StudyRuntimeInfos()
{
logs.debug() << "Releasing runtime data";

delete[] timeseriesNumberYear;
}

#ifndef NDEBUG
Expand Down
8 changes: 0 additions & 8 deletions src/libs/antares/study/runtime/runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,14 +109,6 @@ class StudyRuntimeInfos
//! Random numbers generators
MersenneTwister random[seedMax];

/*!
** \brief The index to use when retrieving the time-series numbers
**
** To allow the drop of the years with no solution, we can not fully rely
** on the current year. So we have to maintain a rotating index (0..nbYears)
*/
uint* timeseriesNumberYear;

//! Total
uint thermalPlantTotalCount;
uint thermalPlantTotalCountMustRun;
Expand Down
1 change: 1 addition & 0 deletions src/solver/aleatoire/alea_fonctions.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@
#include "antares/study/study.h"

void ApplyRandomTSnumbers(const Antares::Data::Study& study,
unsigned int year,
uint numSpace);
9 changes: 3 additions & 6 deletions src/solver/aleatoire/alea_tirage_au_sort_chroniques.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,9 @@ using namespace Antares;
using namespace Antares::Data;

void ApplyRandomTSnumbers(const Study& study,
unsigned int year,
uint numSpace)
{
auto& runtime = *study.runtime;

uint year = runtime.timeseriesNumberYear[numSpace];

// each area
const unsigned int count = study.areas.size();
for (unsigned int areaIndex = 0; areaIndex != count; ++areaIndex)
Expand Down Expand Up @@ -126,9 +123,9 @@ void ApplyRandomTSnumbers(const Study& study,
// Transmission capacities
// ------------------------------
// each link
for (unsigned int linkIndex = 0; linkIndex < runtime.interconnectionsCount(); ++linkIndex)
for (unsigned int linkIndex = 0; linkIndex < study.runtime->interconnectionsCount(); ++linkIndex)
{
AreaLink* link = runtime.areaLink[linkIndex];
AreaLink* link = study.runtime->areaLink[linkIndex];
assert(year < link->timeseriesNumbers.height);
NUMERO_CHRONIQUES_TIREES_PAR_INTERCONNEXION& ptchro
= NumeroChroniquesTireesParInterconnexion[numSpace][linkIndex];
Expand Down
2 changes: 1 addition & 1 deletion src/solver/hydro/daily2/h2o2_j_donnees_optimisation.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ constexpr unsigned int seed = 0x79683264; // "hyd2" in hexa
class Hydro_problem_costs
{
public:
Hydro_problem_costs(const Data::Study& study);
Hydro_problem_costs(const Data::Parameters& parameters);

inline double get_end_days_levels_cost() const
{
Expand Down
4 changes: 2 additions & 2 deletions src/solver/hydro/daily2/h2o2_j_optim_costs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@
#include "h2o2_j_donnees_optimisation.h"
#include "antares/study/fwd.h"

Hydro_problem_costs::Hydro_problem_costs(const Data::Study& study)
Hydro_problem_costs::Hydro_problem_costs(const Data::Parameters& parameters)
{
noiseGenerator.reset(Constants::seed);
end_days_levels = -1. / 32.;
overflow = 32 * 68. + 1.;
deviations = 1.;
violations = 68.;

switch (study.parameters.hydroHeuristicPolicy.hhPolicy)
switch (parameters.hydroHeuristicPolicy.hhPolicy)
{
case Data::hhpMaximizeGeneration:
waste = 33 * 68.;
Expand Down
89 changes: 43 additions & 46 deletions src/solver/hydro/management/daily.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ enum

struct DebugData
{
using PerArea = HydroManagement::PerArea;
using InflowsType = Matrix<double, Yuni::sint32>::ColumnType;
using MaxPowerType = Matrix<double, double>::ColumnType;
using ReservoirLevelType = Matrix<double>::ColumnType;
Expand All @@ -99,8 +98,8 @@ struct DebugData
std::array<double, 12> previousMonthWaste{0};

Solver::IResultWriter::Ptr pWriter;
const PerArea& data;
const VALEURS_GENEREES_PAR_PAYS& valgen;
const TmpDataByArea& data;
const VENTILATION_HYDRO_RESULTS_BY_AREA& ventilationResults;
const InflowsType& srcinflows;
const MaxPowerType& maxP;
const MaxPowerType& maxE;
Expand All @@ -109,8 +108,8 @@ struct DebugData
const double reservoirCapacity;

DebugData(Solver::IResultWriter::Ptr writer,
const PerArea& data,
const VALEURS_GENEREES_PAR_PAYS& valgen,
const TmpDataByArea& data,
const VENTILATION_HYDRO_RESULTS_BY_AREA& ventilationResults,
const InflowsType& srcinflows,
const MaxPowerType& maxP,
const MaxPowerType& maxE,
Expand All @@ -119,7 +118,7 @@ struct DebugData
double reservoirCapacity) :
pWriter(writer),
data(data),
valgen(valgen),
ventilationResults(ventilationResults),
srcinflows(srcinflows),
maxP(maxP),
maxE(maxE),
Expand All @@ -145,7 +144,7 @@ struct DebugData
buffer << "\tTurbine\t\t\tOPP\t\t\t\tTurbine Cible\tDLE\t\t\t\tDLN\n";
for (uint day = 0; day != 365; ++day)
{
double value = valgen.HydrauliqueModulableQuotidien[day];
double value = ventilationResults.HydrauliqueModulableQuotidien[day];
buffer << day << '\t' << value << '\t' << OPP[day] << '\t' << DailyTargetGen[day]
<< '\t' << data.DLE[day] << '\t' << data.DLN[day];
buffer << '\n';
Expand Down Expand Up @@ -189,9 +188,9 @@ struct DebugData
uint dayMonth = 1;
for (uint day = firstDay; day != endDay; ++day)
{
double turbines = valgen.HydrauliqueModulableQuotidien[day] / reservoirCapacity;
double niveauDeb = valgen.NiveauxReservoirsDebutJours[day];
double niveauFin = valgen.NiveauxReservoirsFinJours[day];
double turbines = ventilationResults.HydrauliqueModulableQuotidien[day] / reservoirCapacity;
double niveauDeb = ventilationResults.NiveauxReservoirsDebutJours[day];
double niveauFin = ventilationResults.NiveauxReservoirsFinJours[day];
double apports = srcinflows[day] / reservoirCapacity;
double turbMax = maxP[day] * maxE[day] / reservoirCapacity;
double turbCible = dailyTargetGen[day] / reservoirCapacity;
Expand Down Expand Up @@ -226,11 +225,10 @@ struct DebugData
inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::State& state,
Data::Area& area,
uint y,
uint numSpace,
VAL_GEN_PAR_PAYS& valeursGenereesParPays)
uint numSpace)
{
uint z = area.index;
assert(z < study.areas.size());
assert(z < areas_.size());

auto& ptchro = NumeroChroniquesTireesParPays[numSpace][z];

Expand All @@ -239,7 +237,7 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
auto tsIndex = (uint)ptchro.Hydraulique;
auto const& srcinflows = inflowsmatrix[tsIndex < inflowsmatrix.width ? tsIndex : 0];

auto& data = pAreas[numSpace][z];
auto& data = tmpDataByArea_[numSpace][z];

auto& scratchpad = area.scratchpad[numSpace];

Expand All @@ -258,15 +256,15 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
auto const& maxP = maxPower[Data::PartHydro::genMaxP];
auto const& maxE = maxPower[Data::PartHydro::genMaxE];

auto& valgen = valeursGenereesParPays[numSpace][z];

auto& ventilationResults = ventilationResults_[numSpace][z];
std::shared_ptr<DebugData> debugData(nullptr);

if (study.parameters.hydroDebug && study.resultWriter)
if (parameters_.hydroDebug && resultWriter_)
{
debugData = std::make_shared<DebugData>(study.resultWriter,
debugData = std::make_shared<DebugData>(resultWriter_,
data,
valgen,
ventilationResults,
srcinflows,
maxP,
maxE,
Expand All @@ -277,7 +275,7 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St

for (uint month = 0; month != 12; ++month)
{
auto daysPerMonth = study.calendar.months[month].days;
auto daysPerMonth = calendar_.months[month].days;
assert(daysPerMonth <= maxOPP);
assert(daysPerMonth <= maxDailyTargetGen);
assert(daysPerMonth + dayYear - 1 < maxPower.height);
Expand All @@ -302,7 +300,7 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
dayYear = 0;
for (uint month = 0; month != 12; ++month)
{
auto daysPerMonth = study.calendar.months[month].days;
auto daysPerMonth = calendar_.months[month].days;
for (uint day = 0; day != daysPerMonth; ++day)
{
dailyTargetGen[dayYear + day] = srcinflows[dayYear + day];
Expand All @@ -317,8 +315,8 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
dayYear = 0;
for (uint month = 0; month != 12; ++month)
{
uint realmonth = study.calendar.months[month].realmonth;
auto daysPerMonth = study.calendar.months[month].days;
uint realmonth = calendar_.months[month].realmonth;
auto daysPerMonth = calendar_.months[month].days;

if (area.hydro.followLoadModulations)
{
Expand Down Expand Up @@ -369,7 +367,7 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
{
for (uint month = 0; month != 12; ++month)
{
auto daysPerMonth = study.calendar.months[month].days;
auto daysPerMonth = calendar_.months[month].days;

for (uint day = 0; day != daysPerMonth; ++day)
{
Expand All @@ -384,11 +382,11 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
for (uint month = 0; month != 12; ++month)
{
uint realmonth = (initReservoirLvlMonth + month) % 12;
uint simulationMonth = study.calendar.mapping.months[realmonth];
uint simulationMonth = calendar_.mapping.months[realmonth];

auto daysPerMonth = study.calendar.months[simulationMonth].days;
auto daysPerMonth = calendar_.months[simulationMonth].days;

uint firstDay = study.calendar.months[simulationMonth].daysYear.first;
uint firstDay = calendar_.months[simulationMonth].daysYear.first;
uint endDay = firstDay + daysPerMonth;

DONNEES_MENSUELLES& problem = *H2O_J_Instanciation();
Expand All @@ -412,7 +410,7 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
dayMonth = 0;
for (uint day = firstDay; day != endDay; ++day)
{
valgen.HydrauliqueModulableQuotidien[day] = problem.Turbine[dayMonth];
ventilationResults.HydrauliqueModulableQuotidien[day] = problem.Turbine[dayMonth];
dayMonth++;
}
break;
Expand All @@ -429,8 +427,8 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
#ifndef NDEBUG
for (uint day = firstDay; day != endDay; ++day)
{
assert(!Math::NaN(valgen.HydrauliqueModulableQuotidien[day]));
assert(!Math::Infinite(valgen.HydrauliqueModulableQuotidien[day]));
assert(!Math::NaN(ventilationResults.HydrauliqueModulableQuotidien[day]));
assert(!Math::Infinite(ventilationResults.HydrauliqueModulableQuotidien[day]));
}
#endif
}
Expand All @@ -447,16 +445,16 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
double monthInitialLevel = data.MOL[initReservoirLvlMonth];
double wasteFromPreviousMonth = 0.;

Hydro_problem_costs h2o2_optim_costs(study);
Hydro_problem_costs h2o2_optim_costs(parameters_);

for (uint month = 0; month != 12; ++month)
{
uint realmonth = (initReservoirLvlMonth + month) % 12;
uint simulationMonth = study.calendar.mapping.months[realmonth];
uint simulationMonth = calendar_.mapping.months[realmonth];

auto daysPerMonth = study.calendar.months[simulationMonth].days;
auto daysPerMonth = calendar_.months[simulationMonth].days;

uint firstDay = study.calendar.months[simulationMonth].daysYear.first;
uint firstDay = calendar_.months[simulationMonth].daysYear.first;
uint endDay = firstDay + daysPerMonth;

DONNEES_MENSUELLES_ETENDUES& problem = *H2O2_J_Instanciation();
Expand Down Expand Up @@ -506,10 +504,10 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
dayMonth = 0;
for (uint day = firstDay; day != endDay; ++day)
{
valgen.HydrauliqueModulableQuotidien[day]
ventilationResults.HydrauliqueModulableQuotidien[day]
= problem.Turbine[dayMonth] * reservoirCapacity;

valgen.NiveauxReservoirsFinJours[day] = problem.niveauxFinJours[dayMonth];
ventilationResults.NiveauxReservoirsFinJours[day] = problem.niveauxFinJours[dayMonth];

if (debugData)
{
Expand All @@ -521,10 +519,10 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
dayMonth++;
}

valgen.NiveauxReservoirsDebutJours[firstDay] = monthInitialLevel;
ventilationResults.NiveauxReservoirsDebutJours[firstDay] = monthInitialLevel;
for (uint day = firstDay + 1; day != endDay; ++day)
valgen.NiveauxReservoirsDebutJours[day]
= valgen.NiveauxReservoirsFinJours[day - 1];
ventilationResults.NiveauxReservoirsDebutJours[day]
= ventilationResults.NiveauxReservoirsFinJours[day - 1];

monthInitialLevel = problem.niveauxFinJours[dayMonth - 1];

Expand All @@ -542,25 +540,24 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St
H2O2_J_Free(&problem);
}

uint firstDaySimu = study.parameters.simulationDays.first;
uint firstDaySimu = parameters_.simulationDays.first;
state.problemeHebdo->previousSimulationFinalLevel[z]
= valgen.NiveauxReservoirsDebutJours[firstDaySimu] * reservoirCapacity;
= ventilationResults.NiveauxReservoirsDebutJours[firstDaySimu] * reservoirCapacity;

if (debugData)
{
debugData->writeDailyDebugData(study.calendar, initReservoirLvlMonth, y, area.name);
debugData->writeDailyDebugData(calendar_, initReservoirLvlMonth, y, area.name);
}
}
}

void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::State& state,
uint y,
uint numSpace,
VAL_GEN_PAR_PAYS& valeursGenereesParPays)
uint numSpace)
{
study.areas.each(
areas_.each(
[&](Data::Area& area) {
prepareDailyOptimalGenerations(state, area, y, numSpace, valeursGenereesParPays);
prepareDailyOptimalGenerations(state, area, y, numSpace);
});
}

Expand Down
Loading

0 comments on commit 2faa11f

Please sign in to comment.