From 1f75cbe27afbd1236579fc37939fa7cf02740c28 Mon Sep 17 00:00:00 2001 From: Julian Straus Date: Tue, 14 Apr 2026 13:26:11 +0200 Subject: [PATCH 1/2] Minor updates to the documentation --- docs/src/library/internals/methods-EMB.md | 20 +++---- docs/src/library/internals/methods-EMH.md | 36 ++++++------- docs/src/library/internals/methods-fields.md | 56 ++++++++++---------- docs/src/library/internals/types-EMH.md | 16 +++--- docs/src/nodes/electrolyzer.md | 4 +- docs/src/nodes/h2_storage.md | 4 +- docs/src/nodes/reformer.md | 4 +- 7 files changed, 70 insertions(+), 70 deletions(-) diff --git a/docs/src/library/internals/methods-EMB.md b/docs/src/library/internals/methods-EMB.md index 878ab41..9b07f3d 100644 --- a/docs/src/library/internals/methods-EMB.md +++ b/docs/src/library/internals/methods-EMB.md @@ -9,29 +9,29 @@ Pages = ["methods-EMB.md"] ## [Extension methods](@id lib-int-met_emb-ext) ```@docs -EnergyModelsBase.variables_node -EnergyModelsBase.create_node +EMB.variables_node +EMB.create_node ``` ## [Constraint methods](@id lib-int-met_emb-con) ```@docs -EnergyModelsBase.constraints_capacity -EnergyModelsBase.constraints_flow_in -EnergyModelsBase.constraints_flow_out -EnergyModelsBase.constraints_opex_var +EMB.constraints_capacity +EMB.constraints_flow_in +EMB.constraints_flow_out +EMB.constraints_opex_var ``` ## [Check methods](@id lib-int-met_emb-check) ```@docs -EnergyModelsBase.check_node -EnergyModelsBase.check_node_data +EMB.check_node +EMB.check_node_data ``` ## [Field extraction methods](@id lib-int-met_emb-field) ```@docs -EnergyModelsBase.inputs -EnergyModelsBase.outputs +EMB.inputs +EMB.outputs ``` diff --git a/docs/src/library/internals/methods-EMH.md b/docs/src/library/internals/methods-EMH.md index 042ab0b..f73a38f 100644 --- a/docs/src/library/internals/methods-EMH.md +++ b/docs/src/library/internals/methods-EMH.md @@ -9,32 +9,32 @@ Pages = ["methods-EMH.md"] ## [Constraint methods](@id lib-int-met-con) ```@docs -EnergyModelsHydrogen.constraints_usage -EnergyModelsHydrogen.constraints_usage_sp -EnergyModelsHydrogen.constraints_usage_iterate -EnergyModelsHydrogen.constraints_previous_usage -EnergyModelsHydrogen.constraints_rate_of_change_iterate -EnergyModelsHydrogen.constraints_rate_of_change -EnergyModelsHydrogen.constraints_state_seq_iter -EnergyModelsHydrogen.constraints_state_seq -EnergyModelsHydrogen.constraints_state_time_iter +EMH.constraints_usage +EMH.constraints_usage_sp +EMH.constraints_usage_iterate +EMH.constraints_previous_usage +EMH.constraints_rate_of_change_iterate +EMH.constraints_rate_of_change +EMH.constraints_state_seq_iter +EMH.constraints_state_seq +EMH.constraints_state_time_iter ``` ## [Check methods](@id lib-int-met-check) ```@docs -EnergyModelsHydrogen.check_load_lim -EnergyModelsHydrogen.check_commitment_profile +EMH.check_load_lim +EMH.check_commitment_profile ``` ## [Utility methods](@id lib-int-met-util) ```@docs -EnergyModelsHydrogen.capacity_max -EnergyModelsHydrogen.linear_reformulation -EnergyModelsHydrogen.multiplication_variables -EnergyModelsHydrogen.fix_elect_on_b -EnergyModelsHydrogen.ramp_disjunct -EnergyModelsHydrogen.compression_energy -EnergyModelsHydrogen.energy_curve +EMH.capacity_max +EMH.linear_reformulation +EMH.multiplication_variables +EMH.fix_elect_on_b +EMH.ramp_disjunct +EMH.compression_energy +EMH.energy_curve ``` diff --git a/docs/src/library/internals/methods-fields.md b/docs/src/library/internals/methods-fields.md index 1533ca0..dc1b28c 100644 --- a/docs/src/library/internals/methods-fields.md +++ b/docs/src/library/internals/methods-fields.md @@ -10,73 +10,73 @@ Pages = ["methods-fields.md"] ## [`AbstractElectrolyzer` types](@id lib-int-met_field-elec) ```@docs -EnergyModelsHydrogen.degradation_rate -EnergyModelsHydrogen.stack_replacement_cost -EnergyModelsHydrogen.stack_lifetime +EMH.degradation_rate +EMH.stack_replacement_cost +EMH.stack_lifetime ``` ## [`AbstractReformer` types](@id lib-int-met_field-ref) ```@docs -EnergyModelsHydrogen.opex_startup -EnergyModelsHydrogen.opex_shutdown -EnergyModelsHydrogen.opex_off -EnergyModelsHydrogen.time_startup -EnergyModelsHydrogen.time_shutdown -EnergyModelsHydrogen.time_off -EnergyModelsHydrogen.ramp_limit +EMH.opex_startup +EMH.opex_shutdown +EMH.opex_off +EMH.time_startup +EMH.time_shutdown +EMH.time_off +EMH.ramp_limit ``` ## [`AbstractH2Storage` types](@id lib-int-met_field-abst_h2_stor) ```@docs -EnergyModelsHydrogen.discharge_charge -EnergyModelsHydrogen.level_charge +EMH.discharge_charge +EMH.level_charge ``` ## [`HydrogenStorage` types](@id lib-int-met_field-h2_stor) ```@docs -EnergyModelsHydrogen.p_charge -EnergyModelsHydrogen.p_min -EnergyModelsHydrogen.p_max -EnergyModelsHydrogen.electricity_resource +EMH.p_charge +EMH.p_min +EMH.p_max +EMH.electricity_resource ``` ## [`LoadLimit` and `Node` types](@id lib-int-met_field-loadlim) ```@docs -EnergyModelsHydrogen.min_load -EnergyModelsHydrogen.max_load +EMH.min_load +EMH.max_load ``` ## [`AbstractRampParameters` and `AbstractReformer` types](@id lib-int-met_field-ramp) ```@docs -EnergyModelsHydrogen.ramp_up -EnergyModelsHydrogen.ramp_down +EMH.ramp_up +EMH.ramp_down ``` ## [`CommitParameters` types](@id lib-int-met_field-commit) ```@docs -EnergyModelsHydrogen.opex_state -EnergyModelsHydrogen.time_state +EMH.opex_state +EMH.time_state ``` ## [`ElecPeriods` types](@id lib-int-met_field-elec_per) ```@docs TimeStruct.strat_periods -EnergyModelsHydrogen.strat_per -EnergyModelsHydrogen.op_per -EnergyModelsHydrogen.is_last +EMH.strat_per +EMH.op_per +EMH.is_last ``` ## [`RefPeriods` types](@id lib-int-met_field-ref_per) ```@docs -EnergyModelsHydrogen.prev_op -EnergyModelsHydrogen.current_op -EnergyModelsHydrogen.last_op +EMH.prev_op +EMH.current_op +EMH.last_op ``` diff --git a/docs/src/library/internals/types-EMH.md b/docs/src/library/internals/types-EMH.md index 8c6ed03..841aa7e 100644 --- a/docs/src/library/internals/types-EMH.md +++ b/docs/src/library/internals/types-EMH.md @@ -10,22 +10,22 @@ Pages = ["types-EMH.md"] ## [Nodal supertypes](@id lib-int-types-node) ```@docs -EnergyModelsHydrogen.AbstractHydrogenNetworkNode -EnergyModelsHydrogen.AbstractElectrolyzer -EnergyModelsHydrogen.AbstractReformer -EnergyModelsHydrogen.AbstractH2Storage +EMH.AbstractHydrogenNetworkNode +EMH.AbstractElectrolyzer +EMH.AbstractReformer +EMH.AbstractH2Storage ``` ## [Parameter supertypes](@id lib-int-types-para) ```@docs -EnergyModelsHydrogen.AbstractLoadLimits -EnergyModelsHydrogen.AbstractRampParameters +EMH.AbstractLoadLimits +EMH.AbstractRampParameters ``` ## [Auxiliary types](@id lib-int-types-aux) ```@docs -EnergyModelsHydrogen.ElecPeriods -EnergyModelsHydrogen.RefPeriods +EMH.ElecPeriods +EMH.RefPeriods ``` diff --git a/docs/src/nodes/electrolyzer.md b/docs/src/nodes/electrolyzer.md index 0e55274..453bae9 100644 --- a/docs/src/nodes/electrolyzer.md +++ b/docs/src/nodes/electrolyzer.md @@ -32,7 +32,7 @@ The standard fields are given as: If the node should contain investments through the application of [`EnergyModelsInvestments`](https://energymodelsx.github.io/EnergyModelsInvestments.jl/stable/), it is important to note that you can only use `FixedProfile` or `StrategicProfile` for the capacity, but not `RepresentativeProfile` or `OperationalProfile`. In addition, all values have to be non-negative. - **`opex_var::TimeProfile`**:\ - The variable operational expenses of an electrolysis node are based on the capacity utilization through the variable [`:cap_use`](@extref EnergyModelsBase man-opt_var-cap). + The variable operating expenses of an electrolysis node are based on the capacity utilization through the variable [`:cap_use`](@extref EnergyModelsBase man-opt_var-cap). Hence, it is directly related to the specified `input` and `output` ratios. The variable operating expenses can be provided as `OperationalProfile` as well. - **`opex_fixed::TimeProfile`**:\ @@ -96,7 +96,7 @@ with square brackets, while functions are represented as ``func\_example(index_1, index_2)`` -with paranthesis. +with parantheses. ### [Variables](@id nodes-elec-math-var) diff --git a/docs/src/nodes/h2_storage.md b/docs/src/nodes/h2_storage.md index 9e20e5b..ea66207 100644 --- a/docs/src/nodes/h2_storage.md +++ b/docs/src/nodes/h2_storage.md @@ -122,7 +122,7 @@ with square brackets, while functions are represented as ``func\_example(index_1, index_2)`` -with paranthesis. +with parantheses. ### [Variables](@id nodes-h2_storage-math-var) @@ -362,7 +362,7 @@ The non-linear compression curve is implemented using a piecewise linear approac ``` Given the formulation, it is possible that some pressures are included twice and that the pressures are not sorted. -Hence, the ``\hat{\textbef{p}}`` is sorted and all duplicates are removed resulting in ``n_p`` break points. +Hence, the ``\hat{\textbf{p}}`` is sorted and all duplicates are removed resulting in ``n_p`` break points. The required relative compression energy at each breakpoint ``\hat{W}_p`` is then calculated using the function [`energy_curve`](@ref EnergyModelsHydrogen.energy_curve) as described on *[Compression train](@ref aux-p_calc-train)*. diff --git a/docs/src/nodes/reformer.md b/docs/src/nodes/reformer.md index 4958a38..6a7ecd0 100644 --- a/docs/src/nodes/reformer.md +++ b/docs/src/nodes/reformer.md @@ -35,7 +35,7 @@ The standard fields are given as: If the node should contain investments through the application of [`EnergyModelsInvestments`](https://energymodelsx.github.io/EnergyModelsInvestments.jl/stable/), it is important to note that you can only use `FixedProfile` or `StrategicProfile` for the capacity, but not `RepresentativeProfile` or `OperationalProfile`. In addition, all values have to be non-negative. - **`opex_var::TimeProfile`**:\ - The variable operational expenses are based on the capacity utilization through the variable [`:cap_use`](@extref EnergyModelsBase man-opt_var-cap). + The variable operating expenses are based on the capacity utilization through the variable [`:cap_use`](@extref EnergyModelsBase man-opt_var-cap). Hence, it is directly related to the specified `input` and `output` ratios. The variable operating expenses can be provided as `OperationalProfile` as well. - **`opex_fixed::TimeProfile`**:\ @@ -83,7 +83,7 @@ with square brackets, while functions are represented as ``func\_example(index_1, index_2)`` -with paranthesis. +with parantheses. ### [Variables](@id nodes-ref-math-var) From 7e2257250318a165a7f0762d48d3070d0891cde0 Mon Sep 17 00:00:00 2001 From: Julian Straus Date: Tue, 14 Apr 2026 16:57:52 +0200 Subject: [PATCH 2/2] Updated docstrings --- NEWS.md | 4 ++++ src/checks.jl | 4 +--- src/constraints/electrolyzer.jl | 11 ++++++----- src/constraints/general.jl | 18 +++++++++--------- src/model.jl | 4 ++-- src/structures/misc.jl | 9 +++++---- src/structures/node.jl | 32 +++++++++++++++++++++----------- test/test_checks.jl | 2 +- 8 files changed, 49 insertions(+), 35 deletions(-) diff --git a/NEWS.md b/NEWS.md index 7a939f2..2f72ca8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -8,6 +8,10 @@ * Breaking change required as early retirement is now allowed. * Early retirement can change the model behavior. +### Other + +* Minor updates to the documentation. + ## Version 0.8.3 (2025-08-17) ### Bugfix diff --git a/src/checks.jl b/src/checks.jl index c50705c..4d50c9c 100644 --- a/src/checks.jl +++ b/src/checks.jl @@ -15,10 +15,9 @@ additional check on the data. - The values of the dictionary `input` are required to be non-negative. - The values of the dictionary `output` are required to be non-negative. - - The lower limit on capacity utilization is required ot be non-negative while the upper +- The lower limit on capacity utilization is required to be non-negative while the upper limit is required to be larger or equal than the lower limit as described in the [`check_load_lim()`](@ref) - - The field `degradation_rate` is required to be in the range [0,1). - The `TimeProfile` of the field `stack_replacement` is required to be non-negative and accessible through a `StrategicPeriod` as outlined in the function @@ -83,7 +82,6 @@ additional check on the data. - The lower limit on capacity utilization is required ot be non-negative while the upper limit is required to be larger or equal than the lower limit as described in the [`check_load_lim()`](@ref) - - The field `opex` of the `CommitParameters` of the fields `startup`, `shutdown`, and `off` is required to be non-negative. - The field `time` of the `CommitParameters` of the fields `startup`, `shutdown`, and `off` diff --git a/src/constraints/electrolyzer.jl b/src/constraints/electrolyzer.jl index b3a04c1..cf01083 100644 --- a/src/constraints/electrolyzer.jl +++ b/src/constraints/electrolyzer.jl @@ -1,9 +1,10 @@ """ constraints_usage(m, n::AbstractElectrolyzer, 𝒯ᴵⁿᵛ, modeltype::EnergyModel) -Function for creating the usage constraints for an AbstractElectrolyzer. These constraints -calculate the usage of the electrolyzer up to each time step for both the lifetime and the -degradation calculations. +Function for creating the usage constraints for an [`AbstractElectrolyzer`](@ref). + +These constraints calculate the usage of the electrolyzer up to each time step for both the +lifetime and the degradation calculations. """ function constraints_usage(m, n::AbstractElectrolyzer, 𝒯ᴵⁿᵛ, modeltype::EnergyModel) # Mass/energy balance constraints for stored energy carrier. @@ -204,8 +205,8 @@ end modeltype::EnergyModel, ) -Returns the previous usage of an `AbstractElectrolyzer` node depending on the type of -[`PreviousPeriods`](@extref EnergyModelsBase.PreviousPeriods). +Function for creating the previous usage of an [`AbstractElectrolyzer`](@ref) node depending +on the type of [`PreviousPeriods`](@extref EnergyModelsBase.PreviousPeriods). The basic functionality is used in the case when the previous operational period is a `TimePeriod`, in which case it just returns the previous operational period. diff --git a/src/constraints/general.jl b/src/constraints/general.jl index b592ea7..ee83175 100644 --- a/src/constraints/general.jl +++ b/src/constraints/general.jl @@ -7,7 +7,7 @@ modeltype::EnergyModel ) -Function for creating operational limits of an `AbstractHydrogenNetworkNode`. +Function for creating operational limits of an [`AbstractHydrogenNetworkNode`](@ref). The operational limits limit the capacity usage of the electrolyzer node between a minimimum and maximum load based on the installed capacity. @@ -43,7 +43,7 @@ end modeltype::EnergyModel ) -Function for creating the constraints on the `:stor_level`, `:stor_charge_use`, and +Method for creating the constraints on the `:stor_level`, `:stor_charge_use`, and `:stor_discharge_use` variables for a [`AbstractH2Storage`](@ref) node. The discharge `:stor_discharge_use` is limited by the installed charging capacity @@ -80,13 +80,11 @@ end """ EMB.constraints_flow_in(m, n::HydrogenStorage, 𝒯::TimeStructure, modeltype::EnergyModel) -Function for creating the constraint on the inlet flow to a [`HydrogenStorage`](@ref) node. +Method for creating the constraint on the inlet flow to a [`HydrogenStorage`](@ref) node. It differs from the reference description by considering the dependency of the compression -power on the storage level. - -This is achieved through calling the subfunction [`energy_curve`](@ref) for the different -breakpoints in the compression curve. +power on the storage level. This is achieved through calling the subfunction +[`energy_curve`](@ref) for the different breakpoints in the compression curve. """ function EMB.constraints_flow_in(m, n::HydrogenStorage, 𝒯::TimeStructure, modeltype::EnergyModel) # Declaration of the required subsets @@ -154,7 +152,8 @@ end """ EMB.constraints_flow_out(m, n::Electrolyzer, 𝒯::TimeStructure, modeltype::EnergyModel) -Function for creating the constraint on the outlet flow from an `Electrolyzer` node. +Method for creating the constraint on the outlet flow from an [`Electrolyzer`](@ref) node. + It differs from the reference description by taking into account stack degradation through the variable `:elect_efficiency_penalty`. """ @@ -172,7 +171,8 @@ end """ EMB.constraints_opex_var(m, n::Reformer, 𝒯ᴵⁿᵛ, modeltype::EnergyModel) -Function for creating the constraint on the variable OPEX of a `Reformer` node. +Method for creating the constraint on the variable OPEX of a [`Reformer`](@ref) node. + It differs from the reference description through the incorporation of additional costs in each state of the node. """ diff --git a/src/model.jl b/src/model.jl index f47d293..b7901c0 100644 --- a/src/model.jl +++ b/src/model.jl @@ -45,8 +45,8 @@ end """ EMB.create_node(m, n::AbstractElectrolyzer, 𝒯, 𝒫, modeltype::EnergyModel) -Set all constraints for an `AbstractElectrolyzer`. Can serve as fallback option for all -unspecified subtypes of `AbstractElectrolyzer`. +Set all constraints for an [`AbstractElectrolyzer`](@ref). Can serve as fallback option for +all unspecified subtypes of `AbstractElectrolyzer`. It differs from the function for a standard [`RefNetworkNode`](@extref EnergyModelsBase.RefNetworkNode) node through both calling additional functions as well as for calculations within the function. diff --git a/src/structures/misc.jl b/src/structures/misc.jl index a740d17..5b0ab46 100644 --- a/src/structures/misc.jl +++ b/src/structures/misc.jl @@ -1,7 +1,8 @@ """ - ElecPeriods + mutable struct ElecPeriods -Contains information for calculating the constraints for `AbstractElectrolyzer` node types. +Contains information for calculating the constraints for [`AbstractElectrolyzer`](@ref) node +types. # Fields - **`sps::TS.AbstractStratPers`** are the strategic periods of the `TimeStructure`. @@ -47,9 +48,9 @@ within a strategic period of an [`ElecPeriods`](@ref) `pers`. is_last(pers::ElecPeriods) = pers.last """ - RefPeriods{S<:Union{TS.OperationalPeriod, Nothing}} + mutable struct RefPeriods{S<:Union{TS.OperationalPeriod, Nothing}} -Contains information for calculating the constraints for `Reformer` node types. +Contains information for calculating the constraints for [`Reformer`](@ref) node types. # Fields - **`previous::S`** is the previous operational period received from the diff --git a/src/structures/node.jl b/src/structures/node.jl index d4bbf23..04b8143 100644 --- a/src/structures/node.jl +++ b/src/structures/node.jl @@ -1,8 +1,12 @@ -""" Abstract supertype for all hydrogen network nodes.""" +""" + abstract type AbstractHydrogenNetworkNode <: NetworkNode + +Abstract supertype for all hydrogen network nodes. +""" abstract type AbstractHydrogenNetworkNode <: NetworkNode end """ - AbstractLoadLimits{T} + abstract type AbstractLoadLimits{T} Abstract type for the load limits. This type can be used to incorporate other types for the load limit. @@ -10,7 +14,7 @@ load limit. abstract type AbstractLoadLimits{T} end """ - LoadLimits{T<:Real} <: AbstractLoadLimits{T} + struct LoadLimits{T<:Real} <: AbstractLoadLimits{T} Type for the incorporation of limits on the capacity utilization of the node through constraining the variable [`:cap_use`](@extref EnergyModelsBase man-opt_var-cap). @@ -69,14 +73,14 @@ max_load(n::EMB.Node) = max_load(n.load_limits) max_load(n::EMB.Node, t) = max_load(n.load_limits, t) """ - AbstractElectrolyzer <: AbstractHydrogenNetworkNode + abstract type AbstractElectrolyzer <: AbstractHydrogenNetworkNode Abstract supertype for all electrolyzer nodes. """ abstract type AbstractElectrolyzer <: AbstractHydrogenNetworkNode end """ - Electrolyzer <: AbstractElectrolyzer + struct Electrolyzer <: AbstractElectrolyzer Description of an electrolyzer node with minimum and maximum load as well as degredation and stack replacement. @@ -127,7 +131,7 @@ struct Electrolyzer <: AbstractElectrolyzer end """ - SimpleElectrolyzer <: AbstractElectrolyzer + stuct SimpleElectrolyzer <: AbstractElectrolyzer Description of a simple electrolyzer node with minimum and maximum load as well as stack replacement. Degradation is calculated, but not used for the efficiency calculations. @@ -194,6 +198,7 @@ stack_replacement_cost(n::AbstractElectrolyzer, t_inv) = n.stack_replacement_cos """ stack_lifetime(n::Electrolyzer) + Returns the stack lfetime of electrolyzer `n`. """ stack_lifetime(n::AbstractElectrolyzer) = n.stack_lifetime @@ -283,6 +288,7 @@ ramp_down(ramp_param::UnionRampDown) = ramp_param.down ramp_down(ramp_param::UnionRampDown, t) = ramp_param.down[t] UnionRampUp = Union{RampBi, RampUp} + """ ramp_up(ramp_param::UnionRampUp) ramp_up(ramp_param::UnionRampUp, t) @@ -311,11 +317,15 @@ Returns the minimum time in the state as `TimeProfile` *or* in operational perio time_state(com_par::CommitParameters) = com_par.time time_state(com_par::CommitParameters, t) = com_par.time[t] -""" Abstract supertype for all reformer nodes.""" +""" + abstract type AbstractReformer <: AbstractHydrogenNetworkNode + +Abstract supertype for all reformer nodes. +""" abstract type AbstractReformer <: AbstractHydrogenNetworkNode end """ - Reformer <: AbstractReformer + struct Reformer <: AbstractReformer A network node with start-up and shut-down time and costs that should be used for reformer technology descriptions. @@ -457,14 +467,14 @@ ramp_down(n::AbstractReformer) = ramp_down(ramp_limit(n)) ramp_down(n::AbstractReformer, t) = ramp_down(ramp_limit(n), t) """ - AbstractH2Storage{T} <: Storage{T} + abstract type AbstractH2Storage{T} <: Storage{T} Abstract type for different implementations of hydrogen storage nodes. """ abstract type AbstractH2Storage{T} <: Storage{T} end """ - SimpleHydrogenStorage{T} <: AbstractH2Storage{T} + struct SimpleHydrogenStorage{T} <: AbstractH2Storage{T} `Storage` node in which the maximum discharge usage is directly linked to the charge capacity, that is it is not possbible to have a larger discharge usage than the charge @@ -528,7 +538,7 @@ function SimpleHydrogenStorage{T}( end """ - HydrogenStorage{T} <: AbstractH2Storage{T} + struct HydrogenStorage{T} <: AbstractH2Storage{T} `Storage` node in which the maximum discharge usage is directly linked to the charge capacity, that is it is not possbible to have a larger discharge usage than the charge diff --git a/test/test_checks.jl b/test/test_checks.jl index 7e77f5b..873c46f 100644 --- a/test/test_checks.jl +++ b/test/test_checks.jl @@ -68,7 +68,7 @@ function simple_graph_elec(; return create_model(case, model), case, model end -# Test that the fields of a `AbstractElectrolyzenr` are correctly checked +# Test that the fields of a `AbstractElectrolyzer` are correctly checked # - EMB.check_node(n::AbstractElectrolyzer, 𝒯, modeltype::EnergyModel, check_timeprofiles::Bool) @testset "Test checks - AbstractElectrolyzer" begin