Antares Simulator
Power System Simulator
fwd.h
1 /*
2 ** Copyright 2007-2025, RTE (https://www.rte-france.com)
3 ** See AUTHORS.txt
4 ** SPDX-License-Identifier: MPL-2.0
5 ** This file is part of Antares-Simulator,
6 ** Adequacy and Performance assessment for interconnected energy networks.
7 **
8 ** Antares_Simulator is free software: you can redistribute it and/or modify
9 ** it under the terms of the Mozilla Public Licence 2.0 as published by
10 ** the Mozilla Foundation, either version 2 of the License, or
11 ** (at your option) any later version.
12 **
13 ** Antares_Simulator is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** Mozilla Public Licence 2.0 for more details.
17 **
18 ** You should have received a copy of the Mozilla Public Licence 2.0
19 ** along with Antares_Simulator. If not, see <https://opensource.org/license/mpl-2-0/>.
20 */
21 #ifndef __ANTARES_LIBS_STUDY_FWD_H__
22 #define __ANTARES_LIBS_STUDY_FWD_H__
23 
24 #include <bit>
25 #include <map>
26 
27 #include <yuni/yuni.h>
28 #include <yuni/core/string.h>
29 
30 #include "antares/antares/constants.h"
31 #include "antares/enums/Enum.hpp"
32 
33 namespace Antares
34 {
35 class IniFile;
36 
37 namespace Data
38 {
39 // Forward declarations
40 class Study;
41 class StudyLoadOptions;
42 class Area;
43 class AreaLink;
44 class AreaList;
45 class AreaUI;
46 class ThermalCluster;
47 class RenewableCluster;
48 
49 class AreaScratchpad;
50 
51 class Parameters;
52 
53 class BindingConstraint;
54 class BindingConstraintsRepository;
55 
56 class StudyRuntimeInfos;
57 
58 class UIRuntimeInfo;
59 
60 class Correlation;
61 
63 using AreaName = Yuni::CString<ant_k_area_name_max_length, false>;
65 using AreaLinkName = Yuni::CString<ant_k_area_name_max_length * 2 + 1, false>;
66 
67 using ConstraintName = Yuni::CString<ant_k_constraint_name_max_length, false>;
68 
69 using RulesScenarioName = Yuni::CString<64, false>;
70 
72 using AreaNameMapping = std::map<AreaName, AreaName>;
73 
77 enum StudyError
78 {
79  stErrNone = 0,
81  stErrHourOutOfBounds = 1,
83  stErrFinalHourMustBeAMultipleOf168,
85  stErrInvalidDayOfWeek,
87  stErrTooMuchAreas,
89  stErrTooMuchInterconnections,
91  stErrTooMuchBindingConstraints,
92 
93 };
94 
98 enum class SimulationMode
99 {
101  Economy,
103  Adequacy,
105  Expansion,
107  Unknown
108 };
109 
110 /*
111 ** \brief Simplex optimizations
112 */
113 enum SimplexOptimization
114 {
115  sorUnknown = 0,
116  sorDay,
117  sorWeek,
118 
119 }; // enum SimplexOptimization
120 
124 enum class GlobalTransmissionCapacities
125 {
127  localValuesForAllLinks = 0,
129  nullForAllLinks,
131  infiniteForAllLinks,
134  nullForPhysicalLinks,
137  infiniteForPhysicalLinks
138 }; // enum TransmissionCapacities
139 
140 std::string GlobalTransmissionCapacitiesToString(
141  GlobalTransmissionCapacities transmissionCapacities);
142 std::string GlobalTransmissionCapacitiesToString_Display(
143  GlobalTransmissionCapacities transmissionCapacities);
144 bool stringToGlobalTransmissionCapacities(const AnyString& value,
145  GlobalTransmissionCapacities& out);
146 
150 enum class LocalTransmissionCapacities
151 {
152  enabled,
153  null,
154  infinite
155 };
156 
157 std::string transmissionCapacitiesToString(const LocalTransmissionCapacities& tc);
158 
162 enum AssetType
163 {
165  atAC = 0,
167  atDC,
169  atGas,
171  atVirt,
173  atOther,
174 
175 }; // enum AssetType
176 
177 std::string assetTypeToString(const AssetType& assetType);
178 
182 enum StyleType
183 {
185  stPlain = 0,
187  stDot,
189  stDash,
191  stDotDash,
192 
193 }; // enum StyleType
194 
195 std::string styleToString(const StyleType& style);
196 
197 enum TimeSeriesType : unsigned int
198 {
200  timeSeriesLoad = 1u << 0,
202  timeSeriesHydro = 1u << 1,
204  timeSeriesWind = 1u << 2,
206  timeSeriesThermal = 1u << 3,
208  timeSeriesSolar = 1u << 4,
210  timeSeriesRenewable = 1u << 5,
212  timeSeriesTransmissionCapacities = 1u << 6,
214  timeSeriesShortTermInflows = 1u << 7,
216  timeSeriesShortTermAdditionalConstraints = 1u << 8,
217  // ***********************************************************************
218  // Please update the constant allTimeSeriesMask if you add / remove an item
219  // ***********************************************************************
220 }; // enum TimeSeries
221 
222 // Automatically count the number of time series by OR-ing them together:
223 constexpr unsigned int allTimeSeriesMask = static_cast<unsigned int>(timeSeriesLoad)
224  | static_cast<unsigned int>(timeSeriesHydro)
225  | static_cast<unsigned int>(timeSeriesWind)
226  | static_cast<unsigned int>(timeSeriesThermal)
227  | static_cast<unsigned int>(timeSeriesSolar)
228  | static_cast<unsigned int>(timeSeriesRenewable)
229  | static_cast<unsigned int>(
230  timeSeriesTransmissionCapacities)
231  | static_cast<unsigned int>(timeSeriesShortTermInflows)
232  | static_cast<unsigned int>(
233  timeSeriesShortTermAdditionalConstraints);
239 constexpr unsigned int timeSeriesCount = std::popcount(allTimeSeriesMask);
240 
241 template<unsigned int T>
242 requires(T > 0 && (T & (T - 1)) == 0) // T must be power of two
243 struct TimeSeriesBitPatternIntoIndex
244 {
245  static constexpr int value = std::countr_zero(T);
246 };
247 
248 template<int T>
250 
251 template<>
253 {
254  static const char* Value()
255  {
256  return "load";
257  }
258 };
259 
260 template<>
262 {
263  static const char* Value()
264  {
265  return "hydro";
266  }
267 };
268 
269 template<>
271 {
272  static const char* Value()
273  {
274  return "wind";
275  }
276 };
277 
278 template<>
280 {
281  static const char* Value()
282  {
283  return "thermal";
284  }
285 };
286 
287 template<>
289 {
290  static const char* Value()
291  {
292  return "solar";
293  }
294 };
295 
296 template<>
298 {
299  static const char* Value()
300  {
301  return "renewable";
302  }
303 };
304 
305 enum SeedIndex
306 {
308  seedTsGenWind = 0,
310  seedTsGenLoad,
312  seedTsGenHydro,
314  seedTsGenThermal,
316  seedTsGenSolar,
318  seedTimeseriesNumbers,
320  seedUnsuppliedEnergyCosts,
322  seedSpilledEnergyCosts,
324  seedThermalCosts,
326  seedHydroCosts,
328  seedHydroManagement,
330  seedMax,
331 };
332 
334 constexpr unsigned antaresSeedDefaultValue = 5489;
336 constexpr unsigned antaresSeedIncrement = 1000000; // arbitrary value
337 
341 const char* SeedToCString(SeedIndex seed);
342 
348 const char* SeedToID(SeedIndex seed);
349 
350 // ... Hydro heuristic policy ...
351 enum HydroHeuristicPolicy
352 {
353  hhpAccommodateRuleCurves = 0,
354  hhpMaximizeGeneration,
355  hhpUnknown,
356 };
357 
358 HydroHeuristicPolicy StringToHydroHeuristicPolicy(const AnyString& text);
359 
360 const char* HydroHeuristicPolicyToCString(HydroHeuristicPolicy hhPolicy);
361 
362 // ... Hydro Pricing ...
363 enum HydroPricingMode
364 {
365  hpHeuristic = 0,
366  hpMILP, // mixed integer linear problem
367  hpUnknown,
368 };
369 
373 const char* HydroPricingModeToCString(HydroPricingMode hpm);
374 
378 HydroPricingMode StringToHydroPricingMode(const AnyString& text);
379 
380 // ... Power fluctuations ...
381 enum PowerFluctuations
382 {
383  lssFreeModulations = 0,
384  lssMinimizeRamping,
385  lssMinimizeExcursions,
386  lssUnknown,
387 };
388 
392 const char* PowerFluctuationsToCString(PowerFluctuations fluctuations);
393 
397 PowerFluctuations StringToPowerFluctuations(const AnyString& text);
398 
399 enum SheddingPolicy
400 {
401  shpShavePeaks = 0,
402  shpAccurateShavePeaks,
403  shpMinimizeDuration,
404  shpUnknown,
405 };
406 
410 const char* SheddingPolicyToCString(SheddingPolicy strategy);
411 
415 SheddingPolicy StringToSheddingPolicy(const AnyString& text);
416 
417 enum UnitCommitmentMode
418 {
421  ucHeuristicFast = 0,
424  ucHeuristicAccurate,
427  ucMILP,
429  ucUnknown,
430 };
431 
435 const char* UnitCommitmentModeToCString(UnitCommitmentMode ucommitment);
436 
440 UnitCommitmentMode StringToUnitCommitmentMode(const AnyString& text);
441 
442 enum NumberOfCoresMode
443 {
444  ncMin = 0,
445  ncLow,
446  ncAvg,
447  ncHigh,
448  ncMax,
449  ncUnknown
450 };
451 
455 const char* NumberOfCoresModeToCString(NumberOfCoresMode ncores);
456 
460 NumberOfCoresMode StringToNumberOfCoresMode(const AnyString& text);
461 
462 /*
463  * Renewable generation modelling
464  */
465 enum RenewableGenerationModelling
466 {
467  rgAggregated = 0, // Default
468  rgClusters, // Using renewable clusters
469  rgUnknown,
470 };
471 
475 const char* RenewableGenerationModellingToCString(RenewableGenerationModelling rgModelling);
476 
480 RenewableGenerationModelling StringToRenewableGenerationModelling(const AnyString& text);
481 
482 // ------------------------
483 // MPS export status
484 // ------------------------
485 enum class mpsExportStatus : int
486 {
487  NO_EXPORT = 0,
488  EXPORT_FIRST_OPTIM = 1,
489  EXPORT_SECOND_OPTIM = 2,
490  EXPORT_BOTH_OPTIMS = 3,
491  UNKNOWN_EXPORT = 4
492 };
493 
494 std::string mpsExportStatusToString(const mpsExportStatus& mps_export_status);
495 mpsExportStatus stringToMPSexportStatus(const AnyString& value);
496 } // namespace Data
497 } // namespace Antares
498 
499 namespace Antares::Data::ScenarioBuilder
500 {
501 class Rules;
502 class TSNumberRules;
503 class Sets;
504 
505 } // namespace Antares::Data::ScenarioBuilder
506 
507 namespace Benchmarking
508 {
509 class DurationCollector;
510 }
511 
512 #endif // __ANTARES_LIBS_STUDY_FWD_H__
Definition: fwd.h:249