diff --git a/src/solver/aleatoire/alea_tirage_au_sort_chroniques.cpp b/src/solver/aleatoire/alea_tirage_au_sort_chroniques.cpp index 432fbfe1a5..d4b5cb9978 100644 --- a/src/solver/aleatoire/alea_tirage_au_sort_chroniques.cpp +++ b/src/solver/aleatoire/alea_tirage_au_sort_chroniques.cpp @@ -53,16 +53,14 @@ static void InitializeTimeSeriesNumbers_And_ThermalClusterProductionCost( uint year = runtime.timeseriesNumberYear[numSpace]; - const size_t nbDaysPerYearDouble = runtime.nbDaysPerYear * sizeof(double); - // each area const unsigned int count = study.areas.size(); for (unsigned int i = 0; i != count; ++i) { // Variables - the current area - NUMERO_CHRONIQUES_TIREES_PAR_PAYS& ptchro = *NumeroChroniquesTireesParPays[numSpace][i]; + NUMERO_CHRONIQUES_TIREES_PAR_PAYS& ptchro = NumeroChroniquesTireesParPays[numSpace][i]; auto& area = *(study.areas.byIndex[i]); - VALEURS_GENEREES_PAR_PAYS& ptvalgen = *(ValeursGenereesParPays[numSpace][i]); + VALEURS_GENEREES_PAR_PAYS& ptvalgen = ValeursGenereesParPays[numSpace][i]; // Load { @@ -85,7 +83,8 @@ static void InitializeTimeSeriesNumbers_And_ThermalClusterProductionCost( ptchro.Hydraulique = (data.count != 1) ? (long)data.timeseriesNumbers[0][year] : 0; // zero-based // Hydro - mod - memset(ptvalgen.HydrauliqueModulableQuotidien, 0, nbDaysPerYearDouble); + std::fill(ptvalgen.HydrauliqueModulableQuotidien.begin(), + ptvalgen.HydrauliqueModulableQuotidien.end(),0); } // Wind { diff --git a/src/solver/application.cpp b/src/solver/application.cpp index 256bd264f6..f2759d099a 100644 --- a/src/solver/application.cpp +++ b/src/solver/application.cpp @@ -568,9 +568,6 @@ Application::~Application() if (!pStudy->parameters.noOutput) pStudy->importLogsToOutputFolder(); - // simulation - SIM_DesallocationTableaux(); - // release all reference to the current study held by this class pStudy->clear(); pStudy = nullptr; diff --git a/src/solver/hydro/management/daily.cpp b/src/solver/hydro/management/daily.cpp index f81080069a..313f2f9bd2 100644 --- a/src/solver/hydro/management/daily.cpp +++ b/src/solver/hydro/management/daily.cpp @@ -211,7 +211,7 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St uint z = area.index; assert(z < study.areas.size()); - auto& ptchro = *NumeroChroniquesTireesParPays[numSpace][z]; + auto& ptchro = NumeroChroniquesTireesParPays[numSpace][z]; auto& inflowsmatrix = area.hydro.series->storage; @@ -237,7 +237,7 @@ inline void HydroManagement::prepareDailyOptimalGenerations(Solver::Variable::St auto const& maxP = maxPower[Data::PartHydro::genMaxP]; auto const& maxE = maxPower[Data::PartHydro::genMaxE]; - auto const& valgen = *ValeursGenereesParPays[numSpace][z]; + auto& valgen = ValeursGenereesParPays[numSpace][z]; std::shared_ptr debugData(nullptr); diff --git a/src/solver/hydro/management/management.cpp b/src/solver/hydro/management/management.cpp index 63fb81a097..9576c3515b 100644 --- a/src/solver/hydro/management/management.cpp +++ b/src/solver/hydro/management/management.cpp @@ -103,7 +103,7 @@ void HydroManagement::prepareInflowsScaling(uint numSpace) { uint z = area.index; - auto& ptchro = *NumeroChroniquesTireesParPays[numSpace][z]; + auto& ptchro = NumeroChroniquesTireesParPays[numSpace][z]; auto& inflowsmatrix = area.hydro.series->storage; assert(inflowsmatrix.width && inflowsmatrix.height); @@ -159,7 +159,7 @@ void HydroManagement::minGenerationScaling(uint numSpace) { uint z = area.index; - const auto& ptchro = *NumeroChroniquesTireesParPays[numSpace][z]; + const auto& ptchro = NumeroChroniquesTireesParPays[numSpace][z]; auto& mingenmatrix = area.hydro.series->mingen; auto tsIndex = (uint)ptchro.Hydraulique; auto const& srcmingen = mingenmatrix[tsIndex < mingenmatrix.width ? tsIndex : 0]; @@ -336,7 +336,7 @@ bool HydroManagement::checkMinGeneration(uint numSpace) study.areas.each([this, &numSpace, &ret](Data::Area& area) { uint z = area.index; - const auto& ptchro = *NumeroChroniquesTireesParPays[numSpace][z]; + const auto& ptchro = NumeroChroniquesTireesParPays[numSpace][z]; auto tsIndex = (uint)ptchro.Hydraulique; if (area.hydro.useHeuristicTarget) @@ -359,7 +359,7 @@ void HydroManagement::prepareNetDemand(uint numSpace) auto& scratchpad = area.scratchpad[numSpace]; - auto& ptchro = *NumeroChroniquesTireesParPays[numSpace][z]; + auto& ptchro = NumeroChroniquesTireesParPays[numSpace][z]; auto& rormatrix = area.hydro.series->ror; auto tsIndex = (uint)ptchro.Hydraulique; diff --git a/src/solver/optimisation/adequacy_patch_csr/solve_problem.cpp b/src/solver/optimisation/adequacy_patch_csr/solve_problem.cpp index ebfbecc290..067befa41c 100644 --- a/src/solver/optimisation/adequacy_patch_csr/solve_problem.cpp +++ b/src/solver/optimisation/adequacy_patch_csr/solve_problem.cpp @@ -72,12 +72,12 @@ std::unique_ptr buildInteriorPointProblem( Probleme->VariableBinaire = (char*)ProblemeAResoudre.CoutsReduits; Probleme->NombreDeContraintes = ProblemeAResoudre.NombreDeContraintes; - Probleme->IndicesDebutDeLigne = ProblemeAResoudre.IndicesDebutDeLigne; - Probleme->NombreDeTermesDesLignes = ProblemeAResoudre.NombreDeTermesDesLignes; + Probleme->IndicesDebutDeLigne = ProblemeAResoudre.IndicesDebutDeLigne.data(); + Probleme->NombreDeTermesDesLignes = ProblemeAResoudre.NombreDeTermesDesLignes.data(); Probleme->IndicesColonnes = ProblemeAResoudre.IndicesColonnes; Probleme->CoefficientsDeLaMatriceDesContraintes = ProblemeAResoudre.CoefficientsDeLaMatriceDesContraintes; - Probleme->Sens = ProblemeAResoudre.Sens; + Probleme->Sens = ProblemeAResoudre.Sens.data(); Probleme->SecondMembre = ProblemeAResoudre.SecondMembre; Probleme->AffichageDesTraces = NON_PI; diff --git a/src/solver/optimisation/opt_alloc_probleme_a_optimiser.cpp b/src/solver/optimisation/opt_alloc_probleme_a_optimiser.cpp index 3f9217243b..d12d83e94a 100644 --- a/src/solver/optimisation/opt_alloc_probleme_a_optimiser.cpp +++ b/src/solver/optimisation/opt_alloc_probleme_a_optimiser.cpp @@ -59,10 +59,9 @@ void OPT_AllocateFromNumberOfVariableConstraints(PROBLEME_ANTARES_A_RESOUDRE* Pr const size_t szNbVarsint = ProblemeAResoudre->NombreDeVariables * sizeof(int); const size_t szNbContint = ProblemeAResoudre->NombreDeContraintes * sizeof(int); - ProblemeAResoudre->Sens - = (char*)MemAlloc(ProblemeAResoudre->NombreDeContraintes * sizeof(char)); - ProblemeAResoudre->IndicesDebutDeLigne = (int*)MemAlloc(szNbContint); - ProblemeAResoudre->NombreDeTermesDesLignes = (int*)MemAlloc(szNbContint); + ProblemeAResoudre->Sens.resize(ProblemeAResoudre->NombreDeContraintes); + ProblemeAResoudre->IndicesDebutDeLigne.resize(szNbContint); + ProblemeAResoudre->NombreDeTermesDesLignes.resize(szNbContint); ProblemeAResoudre->CoefficientsDeLaMatriceDesContraintes = (double*)MemAlloc(NbTermes * sizeof(double)); @@ -107,9 +106,6 @@ void OPT_AllocateFromNumberOfVariableConstraints(PROBLEME_ANTARES_A_RESOUDRE* Pr void OPT_FreeOptimizationData(PROBLEME_ANTARES_A_RESOUDRE* ProblemeAResoudre) { - MemFree(ProblemeAResoudre->Sens); - MemFree(ProblemeAResoudre->IndicesDebutDeLigne); - MemFree(ProblemeAResoudre->NombreDeTermesDesLignes); MemFree(ProblemeAResoudre->CoefficientsDeLaMatriceDesContraintes); MemFree(ProblemeAResoudre->IndicesColonnes); MemFree(ProblemeAResoudre->CoutQuadratique); diff --git a/src/solver/optimisation/opt_appel_solveur_lineaire.cpp b/src/solver/optimisation/opt_appel_solveur_lineaire.cpp index 6744476069..c13c234ac8 100644 --- a/src/solver/optimisation/opt_appel_solveur_lineaire.cpp +++ b/src/solver/optimisation/opt_appel_solveur_lineaire.cpp @@ -155,7 +155,7 @@ bool OPT_AppelDuSimplexe(PROBLEME_HEBDO* problemeHebdo, solver, ProblemeAResoudre->CoutLineaire, ProblemeAResoudre->NombreDeVariables); ORTOOLS_ModifierLeVecteurSecondMembre(solver, ProblemeAResoudre->SecondMembre, - ProblemeAResoudre->Sens, + ProblemeAResoudre->Sens.data(), ProblemeAResoudre->NombreDeContraintes); ORTOOLS_CorrigerLesBornes(solver, ProblemeAResoudre->Xmin, @@ -169,7 +169,7 @@ bool OPT_AppelDuSimplexe(PROBLEME_HEBDO* problemeHebdo, ProbSpx, ProblemeAResoudre->CoutLineaire, ProblemeAResoudre->NombreDeVariables); SPX_ModifierLeVecteurSecondMembre(ProbSpx, ProblemeAResoudre->SecondMembre, - ProblemeAResoudre->Sens, + ProblemeAResoudre->Sens.data(), ProblemeAResoudre->NombreDeContraintes); } measure.tick(); @@ -188,12 +188,12 @@ bool OPT_AppelDuSimplexe(PROBLEME_HEBDO* problemeHebdo, Probleme.TypeDeVariable = ProblemeAResoudre->TypeDeVariable; Probleme.NombreDeContraintes = ProblemeAResoudre->NombreDeContraintes; - Probleme.IndicesDebutDeLigne = ProblemeAResoudre->IndicesDebutDeLigne; - Probleme.NombreDeTermesDesLignes = ProblemeAResoudre->NombreDeTermesDesLignes; + Probleme.IndicesDebutDeLigne = ProblemeAResoudre->IndicesDebutDeLigne.data(); + Probleme.NombreDeTermesDesLignes = ProblemeAResoudre->NombreDeTermesDesLignes.data(); Probleme.IndicesColonnes = ProblemeAResoudre->IndicesColonnes; Probleme.CoefficientsDeLaMatriceDesContraintes = ProblemeAResoudre->CoefficientsDeLaMatriceDesContraintes; - Probleme.Sens = ProblemeAResoudre->Sens; + Probleme.Sens = ProblemeAResoudre->Sens.data(); Probleme.SecondMembre = ProblemeAResoudre->SecondMembre; Probleme.ChoixDeLAlgorithme = SPX_DUAL; diff --git a/src/solver/optimisation/opt_appel_solveur_quadratique.cpp b/src/solver/optimisation/opt_appel_solveur_quadratique.cpp index 5fa0a444bf..233aa793f7 100644 --- a/src/solver/optimisation/opt_appel_solveur_quadratique.cpp +++ b/src/solver/optimisation/opt_appel_solveur_quadratique.cpp @@ -81,12 +81,12 @@ bool OPT_AppelDuSolveurQuadratique(PROBLEME_ANTARES_A_RESOUDRE* ProblemeAResoudr Probleme.VariableBinaire = (char*)ProblemeAResoudre->CoutsReduits; Probleme.NombreDeContraintes = ProblemeAResoudre->NombreDeContraintes; - Probleme.IndicesDebutDeLigne = ProblemeAResoudre->IndicesDebutDeLigne; - Probleme.NombreDeTermesDesLignes = ProblemeAResoudre->NombreDeTermesDesLignes; + Probleme.IndicesDebutDeLigne = ProblemeAResoudre->IndicesDebutDeLigne.data(); + Probleme.NombreDeTermesDesLignes = ProblemeAResoudre->NombreDeTermesDesLignes.data(); Probleme.IndicesColonnes = ProblemeAResoudre->IndicesColonnes; Probleme.CoefficientsDeLaMatriceDesContraintes = ProblemeAResoudre->CoefficientsDeLaMatriceDesContraintes; - Probleme.Sens = ProblemeAResoudre->Sens; + Probleme.Sens = ProblemeAResoudre->Sens.data(); Probleme.SecondMembre = ProblemeAResoudre->SecondMembre; Probleme.AffichageDesTraces = NON_PI; @@ -173,4 +173,4 @@ bool OPT_AppelDuSolveurQuadratique(PROBLEME_ANTARES_A_RESOUDRE* ProblemeAResoudr return false; } -} \ No newline at end of file +} diff --git a/src/solver/optimisation/opt_structure_probleme_a_resoudre.h b/src/solver/optimisation/opt_structure_probleme_a_resoudre.h index 6a3285c7fd..15a65c964d 100644 --- a/src/solver/optimisation/opt_structure_probleme_a_resoudre.h +++ b/src/solver/optimisation/opt_structure_probleme_a_resoudre.h @@ -50,9 +50,9 @@ typedef struct + NombreDeContraintesCouplantes )* NombreDePasDeTempsDUneJournee + NombreDePays contraintes de turbine */ - char* Sens; - int* IndicesDebutDeLigne; - int* NombreDeTermesDesLignes; + std::string Sens; + std::vector IndicesDebutDeLigne; + std::vector NombreDeTermesDesLignes; double* CoefficientsDeLaMatriceDesContraintes; int* IndicesColonnes; int NombreDeTermesAllouesDansLaMatriceDesContraintes; diff --git a/src/solver/optimisation/post_process_commands.cpp b/src/solver/optimisation/post_process_commands.cpp index ea64b9c55c..1f2e3b6892 100644 --- a/src/solver/optimisation/post_process_commands.cpp +++ b/src/solver/optimisation/post_process_commands.cpp @@ -36,7 +36,7 @@ void DispatchableMarginPostProcessCmd::execute(const optRuntimeData& opt_runtime { auto& cluster = *(i->second); uint chro = NumeroChroniquesTireesParPays[thread_number_][area.index] - ->ThermiqueParPalier[cluster.areaWideIndex]; + .ThermiqueParPalier[cluster.areaWideIndex]; auto& matrix = cluster.series->timeSeries; assert(chro < matrix.width); auto& column = matrix.entry[chro]; diff --git a/src/solver/simulation/adequacy.cpp b/src/solver/simulation/adequacy.cpp index 04abcd5d5a..4552935ef7 100644 --- a/src/solver/simulation/adequacy.cpp +++ b/src/solver/simulation/adequacy.cpp @@ -95,8 +95,6 @@ bool Adequacy::simulationBegin() return false; } } - - SIM_InitialisationResultats(); } if (pProblemesHebdo) @@ -121,7 +119,7 @@ bool Adequacy::simplexIsRequired(uint hourInTheYear, uint numSpace) const for (uint k = 0; k != areaCount; ++k) { - auto& valgen = *ValeursGenereesParPays[numSpace][k]; + auto& valgen = ValeursGenereesParPays[numSpace][k]; double quantity = pProblemesHebdo[numSpace]->ConsommationsAbattues[j].ConsommationAbattueDuPays[k] @@ -308,7 +306,7 @@ bool Adequacy::year(Progression::Task& progression, { assert(k < state.resSpilled.width); assert(j < state.resSpilled.height); - auto& valgen = *ValeursGenereesParPays[numSpace][k]; + auto& valgen = ValeursGenereesParPays[numSpace][k]; auto& hourlyResults = pProblemesHebdo[numSpace]->ResultatsHoraires[k]; hourlyResults.TurbinageHoraire[j] diff --git a/src/solver/simulation/common-eco-adq.cpp b/src/solver/simulation/common-eco-adq.cpp index a8b3f8f062..a0d9655ce9 100644 --- a/src/solver/simulation/common-eco-adq.cpp +++ b/src/solver/simulation/common-eco-adq.cpp @@ -111,7 +111,7 @@ static void RecalculDesEchangesMoyens(Data::Study& study, for (uint j = 0; j < study.runtime->interconnectionsCount(); ++j) { - ResultatsParInterconnexion[j]->TransitMoyenRecalculQuadratique[indx] + transitMoyenInterconnexionsRecalculQuadratique[j][indx] = ntcValues.ValeurDuFlux[j]; } } @@ -130,7 +130,7 @@ void PrepareDataFromClustersInMustrunMode(Data::Study& study, uint numSpace) if (inAdequacy) memset(scratchpad.originalMustrunSum, 0, sizeof(double) * HOURS_PER_YEAR); - auto& PtChro = *(NumeroChroniquesTireesParPays[numSpace][i]); + auto& PtChro = NumeroChroniquesTireesParPays[numSpace][i]; double* mrs = scratchpad.mustrunSum; double* adq = scratchpad.originalMustrunSum; @@ -239,9 +239,7 @@ void ComputeFlowQuad(Data::Study& study, for (uint i = 0; i < (uint)problem.NombreDePasDeTemps; ++i) { const uint indx = i + PasDeTempsDebut; - assert(ResultatsParInterconnexion[j]); - ResultatsParInterconnexion[j]->TransitMoyenRecalculQuadratique[indx] = 0; - ; + transitMoyenInterconnexionsRecalculQuadratique[j][indx] = 0; } } } diff --git a/src/solver/simulation/common-hydro-remix.cpp b/src/solver/simulation/common-hydro-remix.cpp index a69f4e34c9..e2d4ebb574 100644 --- a/src/solver/simulation/common-hydro-remix.cpp +++ b/src/solver/simulation/common-hydro-remix.cpp @@ -97,7 +97,7 @@ static bool Remix(const Data::AreaList& areas, PROBLEME_HEBDO& problem, uint num double bottom = std::numeric_limits::max(); double top = 0; - uint loadTS = NumeroChroniquesTireesParPays[numSpace][index]->Consommation; + uint loadTS = NumeroChroniquesTireesParPays[numSpace][index].Consommation; auto& load = area.load.series->timeSeries; assert(load.width > 0); diff --git a/src/solver/simulation/economy.cpp b/src/solver/simulation/economy.cpp index 1efcde2626..1048fb99bf 100644 --- a/src/solver/simulation/economy.cpp +++ b/src/solver/simulation/economy.cpp @@ -113,8 +113,6 @@ bool Economy::simulationBegin() study.parameters.simplexOptimizationRange, study.calendar); } - - SIM_InitialisationResultats(); } if (pProblemesHebdo) diff --git a/src/solver/simulation/sim_alloc_probleme_hebdo.cpp b/src/solver/simulation/sim_alloc_probleme_hebdo.cpp index 6611944d15..73b4f293f9 100644 --- a/src/solver/simulation/sim_alloc_probleme_hebdo.cpp +++ b/src/solver/simulation/sim_alloc_probleme_hebdo.cpp @@ -509,8 +509,6 @@ void SIM_AllocationProblemeHebdo(PROBLEME_HEBDO& problem, unsigned NombreDePasDe void SIM_DesallocationProblemeHebdo(PROBLEME_HEBDO& problem) { - auto& study = *Data::Study::Current::Get(); - for (uint k = 0; k < problem.NombreDePasDeTemps; k++) { delete problem.CorrespondanceVarNativesVarOptim[k]; diff --git a/src/solver/simulation/sim_allocation_tableaux.cpp b/src/solver/simulation/sim_allocation_tableaux.cpp index c1cf0583a2..0ec5559ec5 100644 --- a/src/solver/simulation/sim_allocation_tableaux.cpp +++ b/src/solver/simulation/sim_allocation_tableaux.cpp @@ -38,163 +38,52 @@ using namespace Antares; static void AllocateResultsForEconomicMode(void) { auto& study = *Data::Study::Current::Get(); - const size_t sizeOfLongHours = study.runtime->nbHoursPerYear * sizeof(int); - const size_t sizeOfDoubleHours = study.runtime->nbHoursPerYear * sizeof(double); - RESULTATS_PAR_INTERCONNEXION* rpNtc; - ResultatsParInterconnexion = (RESULTATS_PAR_INTERCONNEXION**)MemAlloc( - (1 + study.runtime->interconnectionsCount()) * sizeof(void*)); - for (uint i = 0; i != study.runtime->interconnectionsCount(); i++) - { - rpNtc = (RESULTATS_PAR_INTERCONNEXION*)MemAlloc(sizeof(RESULTATS_PAR_INTERCONNEXION)); - ResultatsParInterconnexion[i] = rpNtc; - - rpNtc->TransitMoyen = (double*)MemAlloc(sizeOfDoubleHours); - rpNtc->TransitMinimum = (double*)MemAlloc(sizeOfDoubleHours); - rpNtc->TransitMinimumNo = (int*)MemAlloc(sizeOfLongHours); - rpNtc->TransitMaximum = (double*)MemAlloc(sizeOfDoubleHours); - rpNtc->TransitMaximumNo = (int*)MemAlloc(sizeOfLongHours); - rpNtc->TransitStdDev = (double*)MemAlloc(sizeOfDoubleHours); - rpNtc->TransitAnnuel = (double*)MemAlloc(study.runtime->nbYears * sizeof(double)); - rpNtc->TransitMoyenRecalculQuadratique = (double*)MemAlloc(sizeOfDoubleHours); - rpNtc->VariablesDualesMoyennes = (double*)MemAlloc(sizeOfDoubleHours); - rpNtc->RenteHoraire = (double*)MemAlloc(sizeOfDoubleHours); - } -} - -static void DeallocateResultsForEconomicMode(void) -{ - auto& study = *Data::Study::Current::Get(); - RESULTATS_PAR_INTERCONNEXION* rpNtc; + transitMoyenInterconnexionsRecalculQuadratique.resize(study.runtime->interconnectionsCount()); for (uint i = 0; i != study.runtime->interconnectionsCount(); i++) - { - rpNtc = ResultatsParInterconnexion[i]; - - MemFree(rpNtc->TransitMoyen); - MemFree(rpNtc->TransitMinimum); - MemFree(rpNtc->TransitMinimumNo); - MemFree(rpNtc->TransitMaximum); - MemFree(rpNtc->TransitMaximumNo); - MemFree(rpNtc->TransitStdDev); - MemFree(rpNtc->TransitAnnuel); - MemFree(rpNtc->TransitMoyenRecalculQuadratique); - MemFree(rpNtc->VariablesDualesMoyennes); - MemFree(rpNtc->RenteHoraire); - - MemFree(rpNtc); - } - MemFree(ResultatsParInterconnexion); - ResultatsParInterconnexion = NULL; + transitMoyenInterconnexionsRecalculQuadratique[i] + .assign(study.runtime->nbHoursPerYear , 0.); } void SIM_AllocationTableaux() { auto& study = *Data::Study::Current::Get(); - DonneesParPays = (DONNEES_PAR_PAYS**)MemAlloc(study.areas.size() * sizeof(DONNEES_PAR_PAYS*)); - for (uint i = 0; i < study.areas.size(); ++i) - DonneesParPays[i] = (DONNEES_PAR_PAYS*)MemAlloc(sizeof(DONNEES_PAR_PAYS)); - - ValeursGenereesParPays - = (VALEURS_GENEREES_PAR_PAYS***)MemAlloc(study.maxNbYearsInParallel * sizeof(void*)); - NumeroChroniquesTireesParPays - = (NUMERO_CHRONIQUES_TIREES_PAR_PAYS***)MemAlloc(study.maxNbYearsInParallel * sizeof(void*)); + ValeursGenereesParPays.resize(study.maxNbYearsInParallel); + NumeroChroniquesTireesParPays.resize(study.maxNbYearsInParallel); for (uint numSpace = 0; numSpace < study.maxNbYearsInParallel; numSpace++) { - ValeursGenereesParPays[numSpace] - = (VALEURS_GENEREES_PAR_PAYS**)MemAlloc(study.areas.size() * sizeof(void*)); - NumeroChroniquesTireesParPays[numSpace] - = (NUMERO_CHRONIQUES_TIREES_PAR_PAYS**)MemAlloc(study.areas.size() * sizeof(void*)); + ValeursGenereesParPays[numSpace].resize(study.areas.size()); + NumeroChroniquesTireesParPays[numSpace].resize(study.areas.size()); for (uint i = 0; i < study.areas.size(); ++i) { auto& area = *study.areas.byIndex[i]; - NumeroChroniquesTireesParPays[numSpace][i] - = (NUMERO_CHRONIQUES_TIREES_PAR_PAYS*)MemAlloc( - sizeof(NUMERO_CHRONIQUES_TIREES_PAR_PAYS)); - ValeursGenereesParPays[numSpace][i] - = (VALEURS_GENEREES_PAR_PAYS*)MemAlloc(sizeof(VALEURS_GENEREES_PAR_PAYS)); - - NumeroChroniquesTireesParPays[numSpace][i]->ThermiqueParPalier - = (int*)MemAlloc(area.thermal.clusterCount() * sizeof(int)); - NumeroChroniquesTireesParPays[numSpace][i]->RenouvelableParPalier - = (int*)MemAlloc(area.renewable.clusterCount() * sizeof(int)); - ValeursGenereesParPays[numSpace][i]->HydrauliqueModulableQuotidien - = (double*)MemAlloc(study.runtime->nbDaysPerYear * sizeof(double)); - ValeursGenereesParPays[numSpace][i]->AleaCoutDeProductionParPalier - = (double*)MemAlloc(area.thermal.clusterCount() * sizeof(double)); + NumeroChroniquesTireesParPays[numSpace][i].ThermiqueParPalier + .assign(area.thermal.clusterCount(), 0); + NumeroChroniquesTireesParPays[numSpace][i].RenouvelableParPalier + .assign(area.renewable.clusterCount(), 0); + ValeursGenereesParPays[numSpace][i].HydrauliqueModulableQuotidien + .assign(study.runtime->nbDaysPerYear,0 ); + ValeursGenereesParPays[numSpace][i].AleaCoutDeProductionParPalier + .assign(area.thermal.clusterCount(), 0.); if (area.hydro.reservoirManagement) { - ValeursGenereesParPays[numSpace][i]->NiveauxReservoirsDebutJours - = (double*)MemAlloc(study.runtime->nbDaysPerYear * sizeof(double)); - ValeursGenereesParPays[numSpace][i]->NiveauxReservoirsFinJours - = (double*)MemAlloc(study.runtime->nbDaysPerYear * sizeof(double)); + ValeursGenereesParPays[numSpace][i].NiveauxReservoirsDebutJours + .assign(study.runtime->nbDaysPerYear, 0.); + ValeursGenereesParPays[numSpace][i].NiveauxReservoirsFinJours + .assign(study.runtime->nbDaysPerYear, 0.); } } } - NumeroChroniquesTireesParInterconnexion - = (NUMERO_CHRONIQUES_TIREES_PAR_INTERCONNEXION**)MemAlloc(study.maxNbYearsInParallel - * sizeof(void*)); + NumeroChroniquesTireesParInterconnexion.resize(study.maxNbYearsInParallel); + const uint intercoCount = study.areas.areaLinkCount(); for (uint numSpace = 0; numSpace < study.maxNbYearsInParallel; numSpace++) - { - NumeroChroniquesTireesParInterconnexion[numSpace] - = (NUMERO_CHRONIQUES_TIREES_PAR_INTERCONNEXION*)MemAlloc( - intercoCount * sizeof(NUMERO_CHRONIQUES_TIREES_PAR_INTERCONNEXION*)); - } + NumeroChroniquesTireesParInterconnexion[numSpace].resize(intercoCount); NumeroChroniquesTireesParGroup.resize(study.maxNbYearsInParallel); AllocateResultsForEconomicMode(); } - -void SIM_DesallocationTableaux() -{ - if (Data::Study::Current::Valid()) - { - const auto& study = *Data::Study::Current::Get(); - for (uint i = 0; i < study.areas.size(); ++i) - MemFree(DonneesParPays[i]); - - for (uint numSpace = 0; numSpace < study.maxNbYearsInParallel; numSpace++) - { - for (uint i = 0; i < study.areas.size(); ++i) - { - auto& area = *study.areas.byIndex[i]; - - MemFree(NumeroChroniquesTireesParPays[numSpace][i]->ThermiqueParPalier); - MemFree(NumeroChroniquesTireesParPays[numSpace][i]->RenouvelableParPalier); - MemFree(NumeroChroniquesTireesParPays[numSpace][i]); - MemFree(ValeursGenereesParPays[numSpace][i]->HydrauliqueModulableQuotidien); - MemFree(ValeursGenereesParPays[numSpace][i]->AleaCoutDeProductionParPalier); - - if (area.hydro.reservoirManagement) - { - MemFree(ValeursGenereesParPays[numSpace][i]->NiveauxReservoirsDebutJours); - MemFree(ValeursGenereesParPays[numSpace][i]->NiveauxReservoirsFinJours); - } - - MemFree(ValeursGenereesParPays[numSpace][i]); - } - MemFree(ValeursGenereesParPays[numSpace]); - MemFree(NumeroChroniquesTireesParPays[numSpace]); - } - for (uint numSpace = 0; numSpace < study.maxNbYearsInParallel; numSpace++) - { - MemFree(NumeroChroniquesTireesParInterconnexion[numSpace]); - } - } - MemFree(NumeroChroniquesTireesParPays); - MemFree(ValeursGenereesParPays); - MemFree(NumeroChroniquesTireesParInterconnexion); - NumeroChroniquesTireesParPays = NULL; - ValeursGenereesParPays = NULL; - NumeroChroniquesTireesParInterconnexion = nullptr; - - MemFree(DonneesParPays); - DonneesParPays = NULL; - - NumeroChroniquesTireesParGroup.clear(); - DeallocateResultsForEconomicMode(); -} diff --git a/src/solver/simulation/sim_calcul_economique.cpp b/src/solver/simulation/sim_calcul_economique.cpp index b2fae1a178..ec51bb8012 100644 --- a/src/solver/simulation/sim_calcul_economique.cpp +++ b/src/solver/simulation/sim_calcul_economique.cpp @@ -304,30 +304,6 @@ void SIM_InitialisationProblemeHebdo(Data::Study& study, problem.LeProblemeADejaEteInstancie = false; } -void SIM_InitialisationResultats() -{ - auto& study = *Data::Study::Current::Get(); - const size_t sizeOfNbHoursDouble = study.runtime->nbHoursPerYear * sizeof(double); - const size_t sizeOfNbHoursLong = study.runtime->nbHoursPerYear * sizeof(int); - - for (uint i = 0; i < study.runtime->interconnectionsCount(); ++i) - { - auto& interconnexion = *ResultatsParInterconnexion[i]; - memset(interconnexion.VariablesDualesMoyennes, 0, sizeOfNbHoursDouble); - memset(interconnexion.TransitMoyen, 0, sizeOfNbHoursDouble); - memset(interconnexion.TransitStdDev, 0, sizeOfNbHoursDouble); - memset(interconnexion.TransitMinimumNo, 0, sizeOfNbHoursLong); - memset(interconnexion.TransitMaximumNo, 0, sizeOfNbHoursLong); - memset(interconnexion.RenteHoraire, 0, sizeOfNbHoursDouble); - memset(interconnexion.TransitAnnuel, 0, study.runtime->nbYears * sizeof(double)); - for (uint j = 0; j < study.runtime->nbHoursPerYear; j++) - { - interconnexion.TransitMinimum[j] = (double)LINFINI_ENTIER; - interconnexion.TransitMaximum[j] = (double)-LINFINI_ENTIER; - } - } -} - void preparerBindingConstraint(const PROBLEME_HEBDO &problem, uint numSpace, int PasDeTempsDebut, const BindingConstraintsRepository &bindingConstraints, const uint weekFirstDay, int pasDeTemps) { auto enabledConstraints = bindingConstraints.enabled(); @@ -595,7 +571,7 @@ void SIM_RenseignementProblemeHebdo(PROBLEME_HEBDO& problem, for (uint k = 0; k < nbPays; ++k) { - auto& tsIndex = *NumeroChroniquesTireesParPays[numSpace][k]; + auto& tsIndex = NumeroChroniquesTireesParPays[numSpace][k]; auto& area = *(study.areas.byIndex[k]); auto& scratchpad = area.scratchpad[numSpace]; auto& ror = area.hydro.series->ror; @@ -650,7 +626,7 @@ void SIM_RenseignementProblemeHebdo(PROBLEME_HEBDO& problem, auto& Pt = problem.PaliersThermiquesDuPays[k].PuissanceDisponibleEtCout[cluster.index]; - auto& PtValGen = *ValeursGenereesParPays[numSpace][k]; + auto& PtValGen = ValeursGenereesParPays[numSpace][k]; Pt.PuissanceDisponibleDuPalierThermique[j] = cluster.series @@ -692,7 +668,7 @@ void SIM_RenseignementProblemeHebdo(PROBLEME_HEBDO& problem, if (problem.CaracteristiquesHydrauliques[k].PresenceDHydrauliqueModulable > 0) { auto& area = *study.areas.byIndex[k]; - uint tsIndex = (*NumeroChroniquesTireesParPays[numSpace][k]).Hydraulique; + uint tsIndex = (NumeroChroniquesTireesParPays[numSpace][k]).Hydraulique; auto& inflowsmatrix = area.hydro.series->storage; auto const& srcinflows = inflowsmatrix[tsIndex < inflowsmatrix.width ? tsIndex : 0]; { @@ -739,8 +715,8 @@ void SIM_RenseignementProblemeHebdo(PROBLEME_HEBDO& problem, std::vector& DGL = problem.CaracteristiquesHydrauliques[k] .MinEnergieHydrauParIntervalleOptimise; - double* DNT - = ValeursGenereesParPays[numSpace][k]->HydrauliqueModulableQuotidien; + std::vector& DNT + = ValeursGenereesParPays[numSpace][k].HydrauliqueModulableQuotidien; double WSL = problem.CaracteristiquesHydrauliques[k].NiveauInitialReservoir; @@ -830,7 +806,7 @@ void SIM_RenseignementProblemeHebdo(PROBLEME_HEBDO& problem, { uint day = study.calendar.hours[PasDeTempsDebut + j * 24].dayYear; weekTarget_tmp += ValeursGenereesParPays[numSpace][k] - ->HydrauliqueModulableQuotidien[day]; + .HydrauliqueModulableQuotidien[day]; } if (weekTarget_tmp != 0.) @@ -850,7 +826,7 @@ void SIM_RenseignementProblemeHebdo(PROBLEME_HEBDO& problem, uint day = study.calendar.hours[PasDeTempsDebut + j * 24].dayYear; problem.CaracteristiquesHydrauliques[k] .CntEnergieH2OParIntervalleOptimise[j] - = ValeursGenereesParPays[numSpace][k]->HydrauliqueModulableQuotidien[day] + = ValeursGenereesParPays[numSpace][k].HydrauliqueModulableQuotidien[day] * problem.CaracteristiquesHydrauliques[k].WeeklyGeneratingModulation * marginGen / weekGenerationTarget; } diff --git a/src/solver/simulation/sim_extern_variables_globales.h b/src/solver/simulation/sim_extern_variables_globales.h index b33d646312..bb208f34d9 100644 --- a/src/solver/simulation/sim_extern_variables_globales.h +++ b/src/solver/simulation/sim_extern_variables_globales.h @@ -31,13 +31,10 @@ #include "sim_structure_probleme_adequation.h" #include "sim_structure_probleme_economique.h" -/* Structures Donnees lues a partir de fichiers */ -extern DONNEES_PAR_PAYS** DonneesParPays; - /* Valeurs generees de maniere aleatoire */ -extern VALEURS_GENEREES_PAR_PAYS*** ValeursGenereesParPays; -extern NUMERO_CHRONIQUES_TIREES_PAR_PAYS*** NumeroChroniquesTireesParPays; -extern NUMERO_CHRONIQUES_TIREES_PAR_INTERCONNEXION** NumeroChroniquesTireesParInterconnexion; +extern std::vector> ValeursGenereesParPays; +extern std::vector> NumeroChroniquesTireesParPays; +extern std::vector> NumeroChroniquesTireesParInterconnexion; extern std::vector> NumeroChroniquesTireesParGroup; /* Optimisation */ @@ -49,6 +46,6 @@ extern VALEURS_ANNUELLES** ValeursAnnuellesAdequation; /* Resultats */ /*-Economique-*/ -extern RESULTATS_PAR_INTERCONNEXION** ResultatsParInterconnexion; +extern std::vector> transitMoyenInterconnexionsRecalculQuadratique; #endif /* __SOLVER_SIMULATION_EXTERN_H__ */ diff --git a/src/solver/simulation/sim_structure_donnees.h b/src/solver/simulation/sim_structure_donnees.h index 74489347ee..76c7cd51fa 100644 --- a/src/solver/simulation/sim_structure_donnees.h +++ b/src/solver/simulation/sim_structure_donnees.h @@ -27,21 +27,12 @@ #ifndef __SOLVER_SIMULATION_DATA_STRUCTS_H__ #define __SOLVER_SIMULATION_DATA_STRUCTS_H__ -typedef struct -{ - /* donnees communes adequation et economie */ - /*-----------------------------------------*/ - /* hydraulique si generation en ligne */ - double* PuissanceHydrauliqueFilMoyenne; - double* PuissanceHydrauliqueFilVariance; - double* CoefficientHydraulicite; - double* ProbabiliteHydraulicite; -} DONNEES_PAR_PAYS; +#include typedef struct { - int* ThermiqueParPalier; - int* RenouvelableParPalier; + std::vector ThermiqueParPalier; + std::vector RenouvelableParPalier; int Hydraulique; int Eolien; int Consommation; @@ -55,12 +46,12 @@ typedef struct typedef struct { - double* HydrauliqueModulableQuotidien; /* indice par jour */ - double* AleaCoutDeProductionParPalier; /* epsilon sur le cout de production */ - double* NiveauxReservoirsDebutJours; // Niveaux (quotidiens) du reservoir de début de jour (en - // cas de gestion des reservoirs). - double* NiveauxReservoirsFinJours; // Niveaux (quotidiens) du reservoir de fin de jour (en cas - // de gestion des reservoirs). + std::vector HydrauliqueModulableQuotidien; /* indice par jour */ + std::vector AleaCoutDeProductionParPalier; /* epsilon sur le cout de production */ + std::vector NiveauxReservoirsDebutJours; //Niveaux (quotidiens) du reservoir de dĂ©but + //de jour (en cas de gestion des reservoirs). + std::vector NiveauxReservoirsFinJours; //Niveaux (quotidiens) du reservoir de fin + //de jour (en cas de gestion des reservoirs). } VALEURS_GENEREES_PAR_PAYS; typedef struct @@ -68,20 +59,6 @@ typedef struct double* Horaire; } PRODUCTION_THERMIQUE; -typedef struct -{ - double* TransitMoyen; // UNUSED - double* TransitMinimum; // UNUSED - int* TransitMinimumNo; // UNUSED - double* TransitMaximum; // UNUSED - int* TransitMaximumNo; // UNUSED - double* TransitStdDev; // UNUSED - double* TransitMoyenRecalculQuadratique; - double* VariablesDualesMoyennes; // UNUSED - double* TransitAnnuel; // UNUSED - double* RenteHoraire; // UNUSED -} RESULTATS_PAR_INTERCONNEXION; - typedef struct { double* ParLigne; diff --git a/src/solver/simulation/sim_structure_probleme_adequation.h b/src/solver/simulation/sim_structure_probleme_adequation.h index 38830ef88e..a7021099c2 100644 --- a/src/solver/simulation/sim_structure_probleme_adequation.h +++ b/src/solver/simulation/sim_structure_probleme_adequation.h @@ -38,14 +38,6 @@ typedef struct typedef struct { - double PuissanceThermiqueCumulee; - double Consommation; - double Reserve; -} DONNEES_ADEQUATION; - -typedef struct -{ - DONNEES_ADEQUATION** DonneesParPays; RESULTATS_HORAIRES_ADEQUATION** ResultatsParPays; char DefaillanceEuropeenneHorsReseau; /* vaut OUI_SIM ou NON_SIM */ char DefaillanceEuropeenneAvecReseau; /* vaut OUI_SIM ou NON_SIM */ diff --git a/src/solver/simulation/sim_variables_globales.cpp b/src/solver/simulation/sim_variables_globales.cpp index 2cd2ebea15..5584e31f29 100644 --- a/src/solver/simulation/sim_variables_globales.cpp +++ b/src/solver/simulation/sim_variables_globales.cpp @@ -29,15 +29,13 @@ #include "sim_structure_probleme_economique.h" #include "sim_structure_probleme_adequation.h" -DONNEES_PAR_PAYS** DonneesParPays; - -VALEURS_GENEREES_PAR_PAYS*** ValeursGenereesParPays; -NUMERO_CHRONIQUES_TIREES_PAR_PAYS*** NumeroChroniquesTireesParPays; -NUMERO_CHRONIQUES_TIREES_PAR_INTERCONNEXION** NumeroChroniquesTireesParInterconnexion; +std::vector> ValeursGenereesParPays; +std::vector> NumeroChroniquesTireesParPays; +std::vector> NumeroChroniquesTireesParInterconnexion; PROBLEME_HORAIRE_ADEQUATION ProblemeHoraireAdequation; VALEURS_ANNUELLES** ValeursAnnuellesAdequation; -RESULTATS_PAR_INTERCONNEXION** ResultatsParInterconnexion; +std::vector> transitMoyenInterconnexionsRecalculQuadratique; std::vector> NumeroChroniquesTireesParGroup; //Vector size = num_parallel_year diff --git a/src/solver/simulation/simulation.h b/src/solver/simulation/simulation.h index 77b230ac9a..3cf542f8ff 100644 --- a/src/solver/simulation/simulation.h +++ b/src/solver/simulation/simulation.h @@ -66,10 +66,6 @@ void SIM_InitialisationChainagePourAdequation(void); void SIM_DesallocationProblemeHoraireAdequation(void); -void SIM_DesallocationTableaux(void); - void SIM_DesallocationProblemeHebdo(PROBLEME_HEBDO& problem); -void SIM_InitialisationResultats(void); - #endif /* __SOLVER_SIMULATION_H__ */ diff --git a/src/solver/variable/commons/hydro.h b/src/solver/variable/commons/hydro.h index 5355cb48c1..dd09e69b6d 100644 --- a/src/solver/variable/commons/hydro.h +++ b/src/solver/variable/commons/hydro.h @@ -200,7 +200,7 @@ class TimeSeriesValuesHydro // The current time-series auto& ror = pArea->hydro.series->ror; const unsigned int nbchro - = NumeroChroniquesTireesParPays[numSpace][pArea->index]->Hydraulique; + = NumeroChroniquesTireesParPays[numSpace][pArea->index].Hydraulique; pFatalValues[numSpace] = &(ror.entry[(nbchro < ror.width ? nbchro : 0)]); // Next variable diff --git a/src/solver/variable/commons/load.h b/src/solver/variable/commons/load.h index 940a8ae03e..e4f5edee1e 100644 --- a/src/solver/variable/commons/load.h +++ b/src/solver/variable/commons/load.h @@ -202,7 +202,7 @@ class TimeSeriesValuesLoad (void)::memcpy( pValuesForTheCurrentYear[numSpace].hour, pArea->load.series - ->timeSeries[NumeroChroniquesTireesParPays[numSpace][pArea->index]->Consommation], + ->timeSeries[NumeroChroniquesTireesParPays[numSpace][pArea->index].Consommation], sizeof(double) * pArea->load.series->timeSeries.height); // Next variable diff --git a/src/solver/variable/commons/solar.h b/src/solver/variable/commons/solar.h index 6e479a25f0..01cd4227b2 100644 --- a/src/solver/variable/commons/solar.h +++ b/src/solver/variable/commons/solar.h @@ -200,7 +200,7 @@ class TimeSeriesValuesSolar // The current solar time-series (void)::memcpy(pValuesForTheCurrentYear[numSpace].hour, pArea->solar.series->timeSeries - .entry[NumeroChroniquesTireesParPays[numSpace][pArea->index]->Solar], + .entry[NumeroChroniquesTireesParPays[numSpace][pArea->index].Solar], sizeof(double) * pArea->solar.series->timeSeries.height); } diff --git a/src/solver/variable/commons/wind.h b/src/solver/variable/commons/wind.h index 5a7900c444..256ce65e63 100644 --- a/src/solver/variable/commons/wind.h +++ b/src/solver/variable/commons/wind.h @@ -199,7 +199,7 @@ class TimeSeriesValuesWind // The current wind time-series (void)::memcpy(pValuesForTheCurrentYear[numSpace].hour, pArea->wind.series->timeSeries - .entry[NumeroChroniquesTireesParPays[numSpace][pArea->index]->Eolien], + .entry[NumeroChroniquesTireesParPays[numSpace][pArea->index].Eolien], sizeof(double) * pArea->wind.series->timeSeries.height); } diff --git a/src/solver/variable/economy/avail-dispatchable-generation.h b/src/solver/variable/economy/avail-dispatchable-generation.h index b56336718e..6a25c3a5a6 100644 --- a/src/solver/variable/economy/avail-dispatchable-generation.h +++ b/src/solver/variable/economy/avail-dispatchable-generation.h @@ -201,7 +201,7 @@ class AvailableDispatchGen { Data::ThermalCluster& cluster = *(i->second); unsigned int chro = NumeroChroniquesTireesParPays[numSpace][pArea->index] - ->ThermiqueParPalier[cluster.areaWideIndex]; + .ThermiqueParPalier[cluster.areaWideIndex]; const MatrixType& matrix = cluster.series->timeSeries; assert(chro < matrix.width); const MatrixType::ColumnType& column = matrix.entry[chro]; diff --git a/src/solver/variable/economy/links/flowQuad.h b/src/solver/variable/economy/links/flowQuad.h index e150e137c1..135b6364ca 100644 --- a/src/solver/variable/economy/links/flowQuad.h +++ b/src/solver/variable/economy/links/flowQuad.h @@ -173,7 +173,7 @@ class FlowQuad : public Variable::IVariable, NextT, VCardFlowQua // Flow assessed over all MC years (linear) (void)::memcpy( pValuesForTheCurrentYear.hour, - ResultatsParInterconnexion[pLinkGlobalIndex]->TransitMoyenRecalculQuadratique, + transitMoyenInterconnexionsRecalculQuadratique[pLinkGlobalIndex].data(), sizeof(double) * pNbHours); // Compute all statistics for the current year (daily,weekly,monthly) diff --git a/src/solver/variable/state.hxx b/src/solver/variable/state.hxx index 20cc877b11..69645d0af5 100644 --- a/src/solver/variable/state.hxx +++ b/src/solver/variable/state.hxx @@ -73,7 +73,7 @@ inline void State::initFromAreaIndex(const unsigned int areaIndex, uint numSpace area = study.areas[areaIndex]; scratchpad = &area->scratchpad[numSpace]; thermalCluster = nullptr; - timeseriesIndex = NumeroChroniquesTireesParPays[numSpace][areaIndex]; + timeseriesIndex = &NumeroChroniquesTireesParPays[numSpace][areaIndex]; switch (studyMode) { diff --git a/src/tests/end-to-end/binding_constraints/test_binding_constraints.cpp b/src/tests/end-to-end/binding_constraints/test_binding_constraints.cpp index a5be1d0ca7..cc4a7f5573 100644 --- a/src/tests/end-to-end/binding_constraints/test_binding_constraints.cpp +++ b/src/tests/end-to-end/binding_constraints/test_binding_constraints.cpp @@ -270,7 +270,6 @@ void SimulationHandler::create() SimulationHandler::~SimulationHandler() { - SIM_DesallocationTableaux(); } // =============== diff --git a/src/tests/end-to-end/utils/utils.cpp b/src/tests/end-to-end/utils/utils.cpp index 8b37d1c4b8..f636686d7e 100644 --- a/src/tests/end-to-end/utils/utils.cpp +++ b/src/tests/end-to-end/utils/utils.cpp @@ -61,8 +61,6 @@ float defineYearsWeight(Study::Ptr pStudy, const std::vector& yearsWeight void cleanSimulation(Solver::Simulation::ISimulation< Solver::Simulation::Economy >* simulation) { - SIM_DesallocationTableaux(); - delete simulation; }