You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,7 +27,7 @@ Classify the change according to the following categories:
27
27
28
28
## fixed-bess-soc
29
29
### Added
30
-
- Add **ElectricStorage**input field `fixed_soc_series_fraction`to allow users to fix the SOC timeseries
30
+
- Add **ElectricStorage**inputs field **fixed_soc_series_fraction** and **fixed_soc_series_fraction_tolerance**to allow users to fix the SOC timeseries within a chosen absolute tolerance
Copy file name to clipboardExpand all lines: src/core/electric_tariff.jl
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -49,7 +49,7 @@ end
49
49
urdb_utility_name::String="",
50
50
urdb_rate_name::String="",
51
51
urdb_metadata::Dict=Dict(), # Meta data about the URDB rate, from the URDB API response
52
-
wholesale_rate::T1=nothing, # Price of electricity sold back to the grid in absence of net metering. Can be a scalar value, which applies for all-time, or an array with time-sensitive values. If an array is input then it must have a length of 8760, 17520, or 35040. The inputed array values are up/down-sampled using mean values to match the Settings.time_steps_per_hour.
52
+
wholesale_rate::T1=nothing, # Price of electricity [\$ per kWh] sold back to the grid in absence of net metering. Can be a scalar value, which applies for all-time, or an array with time-sensitive values. If an array is input then it must have a length of 8760, 17520, or 35040. The inputed array values are up/down-sampled using mean values to match the Settings.time_steps_per_hour.
53
53
export_rate_beyond_net_metering_limit::T2=nothing, # Price of electricity sold back to the grid beyond total annual grid purchases, regardless of net metering. Can be a scalar value, which applies for all-time, or an array with time-sensitive values. If an array is input then it must have a length of 8760, 17520, or 35040. The inputed array values are up/down-sampled using mean values to match the Settings.time_steps_per_hour
54
54
monthly_energy_rates::Array=[], # Array (length of 12) of blended energy rates in dollars per kWh
55
55
monthly_demand_rates::Array=[], # Array (length of 12) of blended demand charges in dollars per kW
Copy file name to clipboardExpand all lines: src/core/energy_storage/electric_storage.jl
+12-4Lines changed: 12 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -162,7 +162,7 @@ end
162
162
163
163
164
164
"""
165
-
`ElectricStorage` is an optional optional REopt input with the following keys and default values:
165
+
`ElectricStorage` is an optional REopt input with the following keys and default values:
166
166
167
167
```julia
168
168
min_kw::Real = 0.0
@@ -199,7 +199,8 @@ end
199
199
degradation::Dict = Dict()
200
200
minimum_avg_soc_fraction::Float64 = 0.0
201
201
optimize_soc_init_fraction::Bool = false # If true, soc_init_fraction will not apply. Model will optimize initial SOC and constrain initial SOC = final SOC.
202
-
fixed_soc_series_fraction::Union{Nothing, Array{<:Real,1}} = nothing # If provided, SOC (as fraction of total energy capacity) will not be optimized and will instead be fixed to the values provided here +- 0.02 (this buffer is to avoid infeasible solutions)
202
+
fixed_soc_series_fraction::Union{Nothing, Array{<:Real,1}} = nothing # If provided, SOC (as fraction of total energy capacity) will not be optimized and will instead be fixed to the values provided here +- the absolute fixed_soc_series_fraction_tolerance (this buffer is to avoid infeasible solutions)
203
+
fixed_soc_series_fraction_tolerance::Real = !isnothing(fixed_soc_series_fraction) ? 0.02 : nothing # Absolute tolerance on fixed_soc_series_fraction to avoid infeasible solutions when fixed_soc_series_fraction is provided.
203
204
min_duration_hours::Real = 0.0 # Minimum amount of time storage can discharge at its rated power capacity
204
205
max_duration_hours::Real = 100000.0 # Maximum amount of time storage can discharge at its rated power capacity (ratio of ElectricStorage size_kwh to size_kw)
205
206
dispatch_strategy::String = "cost_optimal" # Available dispatch strategies include "cost_optimal", "peak_shaving", and "self_consumption". To select, "peak_shaving" and "self_consumption," the user must enter a fixed battery size (min_kw == max_kw, min_kwh == max_kwh).
@@ -421,7 +421,7 @@ function build_reopt!(m::JuMP.AbstractModel, p::REoptInputs)
421
421
422
422
degr_bool = p.s.storage.attr[b].model_degradation
423
423
if degr_bool
424
-
@info"Battery energy capacity degradation costs for $b are being modeled using REopt's Degradation model. ElectricStorageOMCost will include costs to be incurred for power electronics and the cost constant."
424
+
@info"Battery energy capacity degradation costs for $b are being modeled using REopt's Degradation model. ElectricStorageOMCost will include costs incurred for power electronics [per kW] and the cost constant, but not for the per kWh components."
0 commit comments