Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d8d1813
add new inputs
adfarth Mar 20, 2025
bad79cc
changelog and all_inputs test
adfarth Apr 15, 2025
18e58c5
testing ghp inputs
Apr 22, 2025
796ea99
debugging test
Apr 22, 2025
e3011e1
update manifest.toml
Apr 23, 2025
53d3f8e
Merge develop into add-ghp-inputs april 23
Bill-Becker Apr 23, 2025
f523baa
Merge migration after merging develop
Bill-Becker Apr 23, 2025
cc225e8
adding ghp outputs
Apr 24, 2025
7e69a21
Merge branch 'develop' into add-capex-constraint
adfarth May 6, 2025
54f1fbc
point to develop
adfarth May 8, 2025
43740b3
Create 0085_financialinputs_max_initial_capital_costs_before_incentiv…
adfarth May 8, 2025
4dd7510
add chp output
adfarth May 8, 2025
f66cab9
update help text to include units for min, max capital costs
zolanaj May 9, 2025
5b1c315
updt to REopt052
adfarth May 9, 2025
904be58
Merge branch 'add-capex-constraint' of https://github.com/NREL/REopt_…
zolanaj May 9, 2025
e989a28
Add battery cost constant terms and use branch of REopt.jl
Bill-Becker May 19, 2025
3a8a85f
updating REopt.jl branch to develop
May 21, 2025
47c2679
Update defaults and add O&M term for ElectricStorage
Bill-Becker Jun 4, 2025
92796f3
Temp update to branch of REopt.jl with storage constant and O&M
Bill-Becker Jun 4, 2025
730ed25
Add new ElectricStorage inputs to all_inputs_test.json
Bill-Becker Jun 4, 2025
fc14904
Merge branch 'add-capex-constraint' into battery-cost
Bill-Becker Jun 4, 2025
3c950d7
Merge migrations after merging add-capex-constraint
Bill-Becker Jun 4, 2025
5cbf872
Add new BAU CapEx outputs fields to models
Bill-Becker Jun 4, 2025
ddb81dc
Update default ElectricStorage costs to be in 2024 dollars
Bill-Becker Jun 4, 2025
264b44b
Add new Existing Boiler/Chiller inputs and outputs
Bill-Becker Jun 4, 2025
73d5453
Update REopt.jl branch for latest battery C and OM costs
Bill-Becker Jun 4, 2025
9fc06d6
Merge branch 'add-ghp-inputs' into battery-cost
Bill-Becker Jun 4, 2025
5a3a21e
Merge migrations after merging add-ghp-inputs branch
Bill-Becker Jun 4, 2025
04ff6aa
Hard-code old ElectricStorage defaults for tests with LCC/NPV checks
Bill-Becker Jun 4, 2025
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
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ Classify the change according to the following categories:
##### Removed
### Patches

## add-capex-constraint
### Minor Updates
#### Added
- Add **Financial** inputs **min_initial_capital_costs_before_incentives** and **max_initial_capital_costs_before_incentives**
- Add **CHP** output **initial_capital_costs**

## v3.12.3
### Minor Updates
### Added
Expand All @@ -49,7 +55,7 @@ Classify the change according to the following categories:

## v3.12.0
### Major Updates
### Added
#### Added
- Add inputs:
- **ElectricUtility.cambium_cef_metric** to utilize clean energy data from NREL's Cambium database
- **ElectricUtility.renewable_energy_fraction_series** to supply a custom grid clean or renewable energy scalar or series
Expand Down
6 changes: 4 additions & 2 deletions julia_src/Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -922,9 +922,11 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"

[[deps.REopt]]
deps = ["ArchGDAL", "CSV", "CoolProp", "DataFrames", "Dates", "DelimitedFiles", "HTTP", "JLD", "JSON", "JuMP", "LinDistFlow", "LinearAlgebra", "Logging", "MathOptInterface", "Requires", "Roots", "Statistics", "TestEnv"]
git-tree-sha1 = "9946abe774e30d82f786e68296ad1fdf8bb7dba4"
git-tree-sha1 = "7f41842737ce902942d5b1291f777ce55ef9adec"
repo-rev = "storage-cost-constraints-version2"
repo-url = "https://github.com/NREL/REopt.jl.git"
uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6"
version = "0.51.1"
version = "0.52.0"

[[deps.Random]]
deps = ["SHA"]
Expand Down
29 changes: 29 additions & 0 deletions reoptjl/migrations/0081_ghpinputs_load_served_by_ghp_and_more.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Generated by Django 4.0.7 on 2025-04-22 16:44

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0080_electricloadoutputs_annual_electric_load_with_thermal_conversions_kwh_and_more'),
]

operations = [
migrations.AddField(
model_name='ghpinputs',
name='load_served_by_ghp',
field=models.TextField(blank=True, default='nonpeak', help_text='How to split between load served by GHP and load served by backup system'),
),
migrations.AddField(
model_name='ghpinputs',
name='max_number_of_boreholes',
field=models.FloatField(blank=True, help_text='Maximum number of boreholes for GHX', null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100000000.0)]),
),
migrations.AddField(
model_name='ghpinputs',
name='max_ton',
field=models.FloatField(blank=True, help_text='Maximum thermal power size constraint for GHP [ton]', null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100000000.0)]),
),
]
14 changes: 14 additions & 0 deletions reoptjl/migrations/0084_merge_20250423_2110.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 4.0.7 on 2025-04-23 21:10

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0081_ghpinputs_load_served_by_ghp_and_more'),
('reoptjl', '0083_electricutilityoutputs_peak_grid_demand_kw_and_more'),
]

operations = [
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Generated by Django 4.0.7 on 2025-05-19 20:33

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0084_merge_20250424_1814'),
]

operations = [
migrations.AddField(
model_name='electricstorageinputs',
name='cost_constant_replacement_year',
field=models.IntegerField(blank=True, default=10, help_text='Number of years from start of analysis period to apply replace_cost_constant.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(75)]),
),
migrations.AddField(
model_name='electricstorageinputs',
name='installed_cost_constant',
field=models.FloatField(blank=True, default=0.0, help_text='Fixed upfront cost for battery installation, independent of size.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1000000000.0)]),
),
migrations.AddField(
model_name='electricstorageinputs',
name='replace_cost_constant',
field=models.FloatField(blank=True, default=0.0, help_text='Fixed replacement cost for battery, independent of size.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1000000000.0)]),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.0.7 on 2025-05-08 04:49

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0084_merge_20250424_1814'),
]

operations = [
migrations.AddField(
model_name='financialinputs',
name='max_initial_capital_costs_before_incentives',
field=models.FloatField(blank=True, help_text='Maximum up-front capital cost for all technologies, excluding replacement costs and incentives [\$].', null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1000000000000.0)]),
),
migrations.AddField(
model_name='financialinputs',
name='min_initial_capital_costs_before_incentives',
field=models.FloatField(blank=True, help_text='Minimum up-front capital cost for all technologies, excluding replacement costs and incentives [\$].', null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1000000000000.0)]),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.0.7 on 2025-04-24 14:32

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0084_merge_20250423_2110'),
]

operations = [
migrations.AddField(
model_name='ghpoutputs',
name='annual_thermal_production_mmbtu',
field=models.FloatField(blank=True, null=True),
),
migrations.AddField(
model_name='ghpoutputs',
name='annual_thermal_production_tonhour',
field=models.FloatField(blank=True, null=True),
),
]
18 changes: 18 additions & 0 deletions reoptjl/migrations/0086_chpoutputs_initial_capital_costs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0.7 on 2025-05-08 18:51

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0085_financialinputs_max_initial_capital_costs_before_incentives_and_more'),
]

operations = [
migrations.AddField(
model_name='chpoutputs',
name='initial_capital_costs',
field=models.FloatField(blank=True, help_text='Initial capital costs of the CHP system, before incentives [\\$]', null=True),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Generated by Django 4.0.7 on 2025-06-04 00:05

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0085_electricstorageinputs_cost_constant_replacement_year_and_more'),
]

operations = [
migrations.AddField(
model_name='electricstorageinputs',
name='om_cost_fraction_of_installed_cost',
field=models.FloatField(blank=True, default=0.025, help_text='Annual O&M cost as a fraction of installed cost.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1.0)]),
),
migrations.AlterField(
model_name='electricstorageinputs',
name='installed_cost_constant',
field=models.FloatField(blank=True, default=222115.0, help_text='Fixed upfront cost for battery installation, independent of size.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(1000000000.0)]),
),
migrations.AlterField(
model_name='electricstorageinputs',
name='installed_cost_per_kw',
field=models.FloatField(blank=True, default=905.0, help_text='Total upfront battery power capacity costs (e.g. inverter and balance of power systems)', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10000.0)]),
),
migrations.AlterField(
model_name='electricstorageinputs',
name='installed_cost_per_kwh',
field=models.FloatField(blank=True, default=237.0, help_text='Total upfront battery costs', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10000.0)]),
),
migrations.AlterField(
model_name='electricstorageinputs',
name='replace_cost_per_kw',
field=models.FloatField(blank=True, default=0.0, help_text='Battery power capacity replacement cost at time of replacement year', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10000.0)]),
),
migrations.AlterField(
model_name='electricstorageinputs',
name='replace_cost_per_kwh',
field=models.FloatField(blank=True, default=0.0, help_text='Battery energy capacity replacement cost at time of replacement year', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10000.0)]),
),
]
14 changes: 14 additions & 0 deletions reoptjl/migrations/0087_merge_20250604_0342.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 4.0.7 on 2025-06-04 03:42

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0086_chpoutputs_initial_capital_costs'),
('reoptjl', '0086_electricstorageinputs_om_cost_fraction_of_installed_cost_and_more'),
]

operations = [
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.0.7 on 2025-06-04 04:00

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0087_merge_20250604_0342'),
]

operations = [
migrations.AddField(
model_name='financialoutputs',
name='initial_capital_costs_after_incentives_bau',
field=models.FloatField(blank=True, help_text='Up-front capital costs for BAU technologies such as ExistingBoiler and ExistingChiller, in present value.', null=True),
),
migrations.AddField(
model_name='financialoutputs',
name='lifecycle_capital_costs_bau',
field=models.FloatField(blank=True, help_text='Net capital costs for BAU technologies such as ExistingBoiler and ExistingChiller, in present value.', null=True),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.0.7 on 2025-06-04 16:59

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0088_financialoutputs_initial_capital_costs_after_incentives_bau_and_more'),
]

operations = [
migrations.AlterField(
model_name='electricstorageinputs',
name='installed_cost_per_kw',
field=models.FloatField(blank=True, default=968.0, help_text='Total upfront battery power capacity costs (e.g. inverter and balance of power systems)', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10000.0)]),
),
migrations.AlterField(
model_name='electricstorageinputs',
name='installed_cost_per_kwh',
field=models.FloatField(blank=True, default=253.0, help_text='Total upfront battery costs', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(10000.0)]),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Generated by Django 4.0.7 on 2025-06-04 19:28

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0089_alter_electricstorageinputs_installed_cost_per_kw_and_more'),
]

operations = [
migrations.AddField(
model_name='existingboilerinputs',
name='installed_cost_dollars',
field=models.FloatField(blank=True, default=0.0, help_text='Cost incurred in BAU scenario, as well as Optimal if needed still, in dollars', null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100000000.0)]),
),
migrations.AddField(
model_name='existingboilerinputs',
name='installed_cost_per_mmbtu_per_hour',
field=models.FloatField(blank=True, default=0.0, help_text="Thermal power capacity-based cost incurred in BAU and only based on what's needed in Optimal scenario", null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100000000.0)]),
),
migrations.AddField(
model_name='existingboileroutputs',
name='size_mmbtu_per_hour_bau',
field=models.FloatField(blank=True, null=True),
),
migrations.AddField(
model_name='existingchillerinputs',
name='installed_cost_dollars',
field=models.FloatField(blank=True, default=0.0, help_text='Cost incurred in BAU scenario, as well as Optimal if needed still, in dollars', null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100000000.0)]),
),
migrations.AddField(
model_name='existingchillerinputs',
name='installed_cost_per_ton',
field=models.FloatField(blank=True, default=0.0, help_text="Thermal power capacity-based cost incurred in BAU and only based on what's needed in Optimal scenario", null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100000000.0)]),
),
migrations.AddField(
model_name='existingchilleroutputs',
name='size_ton',
field=models.FloatField(blank=True, null=True),
),
migrations.AddField(
model_name='existingchilleroutputs',
name='size_ton_bau',
field=models.FloatField(blank=True, null=True),
),
]
14 changes: 14 additions & 0 deletions reoptjl/migrations/0091_merge_20250604_2023.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 4.0.7 on 2025-06-04 20:23

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('reoptjl', '0085_ghpoutputs_annual_thermal_production_mmbtu_and_more'),
('reoptjl', '0090_existingboilerinputs_installed_cost_dollars_and_more'),
]

operations = [
]
Loading