- Created function
check_node_default()
. - The function can be called from other
check_node
to include all default checks
- Restructured function flow for variable and constraint.
- Allows extension with new types that we have not yet considered for the cost function and the emissions.
- Allow (in theory) for nodes and links with bidirectional flow through avoiding hard-coding a lower bound on flow variables.
- No existing links and nodes allow for bidirectional flow.
- Bidirectional flow requires new links and nodes with new methods for the function
is_unidirectional
.
- Extended the functionality of links significantly.
- Allow for
- differing input and output resources of links as well as specifying these directly,
- emissions of links,
- OPEX of links (with both fixed and variable OPEX created at the same time),
- capacity of links,
- inclusion of specific link variables, and
- investments in links if the links have a capacity.
- The majority of changes are incorporated through filter functions and require the user to define new methods for the included functions (i.e.,
has_opex
,has_emissions
, andhas_capacity
) - Inclusion of variables follows principle of additional node variables.
- Updated som docstrings.
- Updated some minor changes in the documentation.
- Fixed a bug in which it was possible to have wrong profiles if it must be indexed over an operational scenario or representative period.
- Adjusted the investment data checks.
- Provided legacy constructors for the previous usage of
SingleInvData
. - Introduced the investment examples to the example sections.
- Added investment options tests.
- The documentation received a significant rework.
The rework consists of:
- Providing webpages for the individual nodal descriptions in which the fields are described more in detail as well as a description of the constraints of the individual nodes.
- Restructured both the public and internal libraries
- Included an option to deactive the checks entirely with printing a warning.
- Introduced the variable
\texttt{stor\_level\_Δ\_sp}
usingSparseVariables
to simplify the extension in otherStorage
nodes. - Replaced the function
EMB.multiple
with the functionscale_op_sp
to avoid issues with respect to a function of the same name inTimeStruct
.- This type is now exported, simplifying its application in other packages.
EMB.multiple
is still included through a deprecation notice. It is however advisable to switch to the new function.
EnergyModelsInvestments
was switched to be an independent package in PR #28.- This approach required
EnergyModelsBase
to include all functions and type declarations internally. - An extension was introduced to handle these problems.
- Updated minor issues in the documentation (docstrings, indices, and quick start).
- Use dev version of EMB for examples when running as part of tests, solving Issue #17.
- Naming of the total emission constraint to allow for updates in the coefficients in other packages.
- Introduced a
:discharge
capacity forStorage
nodes in addition to the existing capacities. AbstractStorageParameters
type allows forStorage
capacities (:charge
,:level
, and:discharge
) to include a capacity, variable OPEX, and or fixed OPEX.- This increases the flexibility for
Storage
node utilization.
- Introduction of
CyclicRepresentative
behavior with support forOperationalScenarios
. In thisStorageBehavior
, the accumulation within a representative period is set to 0. - Change in
Storage{AccumulatingEmissions}
to avoid requiring a capacity when only emissions are present.
- Do not print a warning, when using
OperationalProfile
with a time structure containingRepresentativePeriods
.
- Added potential for negative emissions.
This change requires the user to always constrain the variable
emissions_node
, if it is defined by the user. By default, this is achieved in the developed packages throughEmissionsData
or the addition of additional bounds on the variable:emissions_node
through the JuMP functionset_lower_bound
. - Provided a contribution section in the documentation.
- Minor changes in the naming convention in the documentation.
- Removed
\texttt{}
from docstrings.
- Allow for deactivation of timeprofile checks while printing a warning in this case.
- Fixed a bug for a too short
StrategicProfile
in the checks. - Added checks for the case dictionary.
- Extended checks for the modeltype.
- Added functions that can be used to check whether a
TimeProfile
can be indexed overStrategicPeriod
s,RepresentativePeriod
s, orOperationalScenario
s.
- Fixed a bug when running the examples from a non-cloned version of
EnergyModelsBase
. - This is achieved through a separate Project.toml in the examples folder.
- Fixed the bug preventing the time profile checks to run.
- Included checks of the input data and for all nodes.
- Included tests for checks.
- Added functions
inputs
,outputs
, anddata_nodes
forAvailability
andoutputs
forSource
nodes. - Allow availability to not require all resources in the the
input
andoutput
field. - Moved all files declaring structures to a separate folder for improved readability.
- Reworked the structure of the test folder.
- Updated the restrictions on the fields of individual types to be consistent.
- Minor modification to the
EmissionsData
allowing now also time dependent process emissions. - This is achieved through switching to a parametric type.
- Changed name of
constraints_level
toconstraints_level_sp
when the time input is given as aStrategicPeriod
to improve understandability. - Add
modeltype::EnergyModel
as an argument to the methodsconstraints_level_sp
(see above) andconstraints_level_aux
.
- When variables are created with the method
variables_nodes
, it will lead to anErrorException
when the method tries to create a variable that has already been created. This is ok, and this error should be ignored. This change specifies exactly what error should be ignored, to avoid that other types of errors are also ignored.
- Fix: add missing parenthesis in the objective function.
- Switched fields
Input
andOutput
ofAvailability
nodes fromDict{Resource, Real}
toArray{<:Resource}
. The former is still available as a constructor, while a new constructor is introduced which requires the input only once. - All fields in composite types are now lower case.
- Renamed
Network
toNetworkNode
.NetworkNode
can be considered to be replaced in a later iterations as it is not really needed. - Added functions for extracting the fields of
Node
s,Resource
s, andEnergyModel
s to allow for extensions. - Added export of functions that are frequently used in other packages.
- Moved the emissions to a
Data
type on which we can dispatch, depending on the chosen approach for capture and process emissions. - Redesigned storage as parametric type to dispatch on the level balance. This includes as well the introduction of a new variable.
- Included potential for different durations of operational periods.
- Included representative periods. These do only affect a
Storage
node as these are the only time dependent nodes. - Added emission prices to
OperationalModel
.
- Introduced method
create_model
that can take aJuMP.Model
as input to simplify potential use of other type of models - Fixed the documentation to avoid errors
- Updated the documentation based on the new format
- Switched the time structure representation to TimeStruct.jl
- TimeStruct.jl is implemented with only the basis features that were available in TimesStructures.jl. This implies that neither operational nor strategic uncertainty is included in the model
- Changed the structure in which the extra field
Data
is included in the nodes - It is changed from
Dict{String, Data}
toArray{Data}
- Changed where storage variables are declared to avoid potential method ambiguity through new storage variables when using
EnergyModelsInvestments
- Generalized the function names for identifying and sorting the individual introduced types.
- Take the examples out to the directory
examples
- Removal of all process emissions and CO₂ capture from reference types to avoid having to include them as well in all subtypes defined later to keep the fallback option. This requires in the future toremove CO₂ as output when using CO₂ capture as it was previously the case. The original types are retained so that they can still be used
- Introduction of a type
RefStorageEmissions
to account for a storage unit that can be used for storingResourceEmit
- Substitution of variable and fixed OPEX calculations as well as capacity and flow constraints through functions which utilize dispatching on
node
types
- Removal of the type
AbstractGlobalData
and all subtypes and substitution throughEnergyModel
and the corresponding subtypes - Addition of the field
CO2_instance
in the typeOperationalModel
- Addition of
ModelType
to the functioncreate_node
to be able to use different ids for the CO₂ resource
- Redefining
CO2Int
in fields of typeResource
toCO2_int
to be consistent with the other types - Minor changes in constraint description that do not break previous code
- Changed the input to the function
variables_node
to simplify the generation of variables for a specificnode
type
- Renamed packages to use common prefix
- Updated README
- Inclusion of time dependent profiles for surplus and deficit of sinks
- Inclusion of parameter checks for surplus and deficit of sinks
- Export of all reference nodes for easier identification of the nodes
- Changes in the test structure with improved testing of variables
- Changes in doc strings for individual functions/types
- Major changes in both variable and parameter naming, check the commit message for an overview
- Change of Availability to abstract type and introduction of GenAvailability as composite type to be able to use multiple dispatch on the availability nodes
- Inclusion of the entry fixed OPEX to the node composite types
- Inclusion of the entry data to the node composite types to provide input required for certain additional packages like investments
- New function for checks of node data so that we have an a priori check of all model data
- Introduce the optimization variables stor_level and stor_max for storages, and use these instead of cap_usage and cap_max for the constraints on Storage.
- Use the new variable cap_storage in Storage nodes for the installed storage capacity.
- Reduction in variables through introduction of input/output (#2) dictionaries for all nodes that only include necessary components
- Improvement related to emissions to avoid wrong accounting when other emission carriers than CO₂ are present (#2)
- Link resources generated automatically from input (#2)
- Removal of prefix "create" before "constraints" and "variables"
- "create_module" switched to "create_node"
- Inclusion of abstract type and structures for both resources and (#1) differentiation in nodes
- Development of new functions for the given data structures to obtain (#1) subsets of the system
- Development of the core structure in model.jl for allowing variations (#1) in the different nodes
- Implementation of fallback solutions for source, network, storage, and sink (#1)
- Inclusion of availability node for easier distribution of energy in a single geographical node and transfer from one geographical node to the next (#1)
- Providing a test case that can be used for playing around with the simple system (#1)
- Initial (skeleton) version