Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/clearing_utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,23 @@ function is_ex_ante_problem(run_time_options::RunTimeOptions)
run_time_options.clearing_model_subproblem == RunTime_ClearingSubproblem.EX_ANTE_COMMERCIAL
end

"""
ignore_renewable_generation_scenario(inputs::Inputs, run_time_options::RunTimeOptions)

Check if the renewable generation scenario should be ignored, i.e. treated as full availability.

This happens in ex-ante hybrid problems whenever at least one ex-post problem is not skipped,
because in that case the renewable availability is settled in the ex-post problem.
"""
function ignore_renewable_generation_scenario(inputs::Inputs, run_time_options::RunTimeOptions)
return is_ex_ante_problem(run_time_options) &&
construction_type(inputs, run_time_options) == Configurations_ConstructionType.HYBRID &&
(
construction_type_ex_post_physical(inputs) != Configurations_ConstructionType.SKIP ||
construction_type_ex_post_commercial(inputs) != Configurations_ConstructionType.SKIP
)
end

"""
is_commercial_problem(run_time_options::RunTimeOptions)

Expand Down
11 changes: 10 additions & 1 deletion src/model_constraints/renewable_balance.jl
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,22 @@ function renewable_balance!(
# Model parameters
renewable_generation_scenario = get_model_object(model, :renewable_generation_scenario)

# In ex-ante hybrid problems with at least one ex-post problem, the renewable availability is
# settled in the ex-post problem, so full availability is assumed here.
generation_scenario =
if ignore_renewable_generation_scenario(inputs, run_time_options)
(b, r) -> 1.0
else
(b, r) -> renewable_generation_scenario[b, r]
end

# Constraints
@constraint(
model.jump_model,
renewable_balance[b in subperiods(inputs), r in renewable_units],
renewable_generation[b, r] + renewable_curtailment[b, r] ==
renewable_unit_max_generation(inputs, r) * subperiod_duration_in_hours(inputs, b) *
renewable_generation_scenario[b, r]
generation_scenario(b, r)
)

return nothing
Expand Down
15 changes: 15 additions & 0 deletions test/case_23/case_summary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Case 23:
- 8 agents, thermal only, 2 agent types.
- IARA-UI case.
- No expected outputs.

## Variations:
- virtual_reservoir_case:
- from base_case.
- 1 subscenario, adds one virtual reservoir to each agent.
- multiple_subscenarios_case:
- from virtual_reservoir_case.
- modifies the case to have 3 subscenarios.
- renewables_case:
- from base_case.
- removes two of each thermal agent type, replaces with two pairs of renewables.
Loading
Loading