Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

September 2024 Updates #431

Merged
merged 293 commits into from
Sep 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
293 commits
Select commit Hold shift + click to select a range
2b34fe9
check for "ElectricHeater" before generating electric heater results
zolanaj Apr 26, 2024
6069afb
fix cooling_cop references
zolanaj Apr 27, 2024
4b4cd53
add cooling results for ASHP
zolanaj Apr 27, 2024
df121ce
update ASHP test JSON
zolanaj Apr 27, 2024
8b5835b
Add symbolic names to constraints (similar to other parts of formulat…
zolanaj Apr 28, 2024
378f38b
Update ASHP tests and add new test case
zolanaj Apr 28, 2024
dac9b34
Revert "Add symbolic names to constraints (similar to other parts of …
zolanaj Apr 28, 2024
1d2e98a
fixes for ASHP results
zolanaj Apr 28, 2024
e7b92b5
update ASHP tests
zolanaj Apr 28, 2024
f71b5b5
fix ExistingChiller default COP assignment
zolanaj Apr 29, 2024
6347211
update sets for ASHP constraints to exclude GHP
zolanaj Apr 29, 2024
04de091
default cooling and heating COPs for GHP formulation
zolanaj Apr 29, 2024
3c23e46
minor clean up
atpham88 Apr 30, 2024
3391569
Merge branch 'add-ASHP' of https://github.com/NREL/REopt.jl into add-…
atpham88 Apr 30, 2024
21750e0
Revert "Merge branch 'add-ASHP' of https://github.com/NREL/REopt.jl i…
atpham88 Apr 30, 2024
22c0a57
cooling_cop, heating_cop for GHP
zolanaj Apr 30, 2024
2c12c6b
update sets for add_ashp_heating_cooling_constraints
zolanaj Apr 30, 2024
d21b6d7
Add ASHP docs
zolanaj Apr 30, 2024
61b70ed
Merge branch 'develop' into add-ASHP
zolanaj May 10, 2024
1bba5dd
update tech max sizes to use time-series COPs
zolanaj May 13, 2024
0c763e6
rm note on process heat loads (which are now in fuel input)
zolanaj May 13, 2024
0b1683e
update notes for heating loads in documentation
zolanaj May 13, 2024
05bcdc0
rm tests for ASHP in cplex and xpress
zolanaj May 14, 2024
dc8d326
add todo for cooling COP review
zolanaj May 14, 2024
032e0d6
convert ASHP size from mmbtu to ton
atpham88 May 23, 2024
2e7b6c4
updated ashp test
atpham88 May 24, 2024
03f7172
ren ton_per_hour ton (which is a rate)
zolanaj May 24, 2024
4b3d670
convert cost conversions to reflect ASHP size in tons
zolanaj May 24, 2024
2ee2645
update ASHP test units
zolanaj May 24, 2024
55f5dc5
add get_electric_heater_defaults and get_ashp_defaults to exported fu…
zolanaj May 24, 2024
ab0d73c
docstrings update for ASHP
zolanaj May 24, 2024
3ea9714
update units in ashp test
zolanaj May 25, 2024
012cc40
fixed ASHP size conversion
atpham88 May 28, 2024
a485738
add attribute retire_in_optimal to ExistingChiller
zolanaj May 29, 2024
cef75a6
add function no_existing_chiller_production when ExistingChiller is r…
zolanaj May 29, 2024
cd4a91c
use set of heating techs to check for retiring boiler
zolanaj May 29, 2024
40ffa23
update ASHP tests and add case for retired chiller, boiler
zolanaj May 29, 2024
78c1a05
add warnings when new heating techs can't serve all heating loads wit…
zolanaj May 29, 2024
13c4927
fix no_existing_chiller_production
zolanaj May 29, 2024
bf1191b
Merge branch 'develop' into add-ASHP
zolanaj May 29, 2024
efc94a2
Update CHANGELOG.md
zolanaj May 29, 2024
0285146
change warning to throw an error if additional technology sets aren't…
zolanaj May 30, 2024
cc80256
move errors to when techs are built (catches error earlier)
zolanaj May 30, 2024
b5b0eac
throw error when new techs cannot meet cooling load and existing chil…
zolanaj May 30, 2024
19575a9
fix error throwing syntax
zolanaj May 30, 2024
525cd85
Merge branch 'add-ASHP' of https://github.com/NREL/REopt.jl into add-…
zolanaj May 30, 2024
b3f3971
restore setdiff check before no_existing_boiler_production
zolanaj May 30, 2024
2a77f89
update heating and cooling cops w/ curves in design document
atpham88 May 30, 2024
ab4b107
distinguish between heating and cooling thermal production
atpham88 May 30, 2024
0ee336c
define capacity factor curves
atpham88 May 31, 2024
3d73165
added capacity factor curves formulas
atpham88 May 31, 2024
68c114e
define capacity factor curves as reopt inputs
atpham88 May 31, 2024
51460a0
Update ashp.jl
atpham88 May 31, 2024
5b25cf3
add capacity factor to tech constraints
atpham88 May 31, 2024
2fcea87
set capacity factors of other technologies to default of one
zolanaj Jun 3, 2024
b9ab386
add heating_cf and cooling_cf to tech-specific input functions
zolanaj Jun 3, 2024
8cdc86d
finish setup of capacity factors
zolanaj Jun 4, 2024
0e71126
Update ashp.json
zolanaj Jun 4, 2024
64e2f20
include capacity factor in BAU inputs
zolanaj Jun 4, 2024
f565ad4
update ASHP tests to account for CF's
zolanaj Jun 4, 2024
11cf9ed
Update ASHP test value
zolanaj Jun 4, 2024
80fca36
Merge branch 'develop' into add-ASHP
zolanaj Jun 4, 2024
62debc5
Update REopt.jl
atpham88 Jun 4, 2024
2a6809e
Added ashp_wh.jl
atpham88 Jun 4, 2024
f45924d
added ASHP WH inputs
atpham88 Jun 4, 2024
d8b0688
Update scenario.jl
atpham88 Jun 4, 2024
43db840
Update techs.jl
atpham88 Jun 4, 2024
df83ca4
resolve conflicts
atpham88 Jun 4, 2024
56f2a30
ASHP WH tests
atpham88 Jun 4, 2024
747d2a1
resolve conflicts
atpham88 Jun 4, 2024
e35f36d
resolve conflicts
atpham88 Jun 4, 2024
72d1b0f
added ASHP Water Heater & resolved conflicts
atpham88 Jun 4, 2024
cfde553
print results for both ASHP and ASHP_WH
atpham88 Jun 5, 2024
2a8a903
update ASHP WH docstrings
zolanaj Jun 5, 2024
706248f
update tech sets for ASHP WH
zolanaj Jun 5, 2024
59417cf
update ASHP WH test suite
zolanaj Jun 5, 2024
5a28fbf
update results population logic for ASHP WH
zolanaj Jun 5, 2024
fe2c8ef
make ASHP defaults a single file
zolanaj Jun 13, 2024
fa98a0c
ren ASHP ASHP_SpaceHeater and fix heat loads served
zolanaj Jun 13, 2024
7028b4c
merge ASHP_WH as ASHP_WaterHeater
zolanaj Jun 13, 2024
73fc490
merge ASHP results and remove unused results
zolanaj Jun 13, 2024
60dbab1
migrate renaming of ASHP through code
zolanaj Jun 13, 2024
4c2a46e
refactor inputs function for ASHP
zolanaj Jun 14, 2024
2272626
bugfix - reorder sets of heating loads served
zolanaj Jun 14, 2024
7ce8fbb
update ASHP results to remove unserved loads
zolanaj Jun 14, 2024
1d34879
Update ashp.json
zolanaj Jun 14, 2024
b32b35a
Update ASHP Space Heater test
zolanaj Jun 14, 2024
9e611ec
Add ability to force ASHP techs into system
zolanaj Jun 15, 2024
59eac0e
group ASHP tests and add force-in tests
zolanaj Jun 15, 2024
bb7361c
ren ASHP cf and cop attributes
zolanaj Jun 15, 2024
b9cdcad
load REoptInputs in ASHP tests for test values
zolanaj Jun 15, 2024
ae57774
updated ashp cost defaults
atpham88 Jun 18, 2024
bb4f384
add force_into_system to defaults, allow nothing as input
zolanaj Jun 24, 2024
f532d7f
rm unused results from ASHP docstrings
zolanaj Jun 24, 2024
98ed62c
bug fix in ASHP_WH constraints
zolanaj Jun 24, 2024
975a971
add more tests to force-in-ASHP testset
zolanaj Jun 24, 2024
9660a42
check for nothing, add defaults for force_in_system
zolanaj Jun 24, 2024
6cdc801
add ASHP_WaterHeater to techs.ashp
zolanaj Jun 25, 2024
a005cae
separate force-in constraints from heat+cool sizing
zolanaj Jun 25, 2024
a3f28a6
updated cf to reflect backup resistive heaters performance
atpham88 Jun 26, 2024
6f875f8
removed cooling cf constraint for cooling cop = 1
atpham88 Jun 26, 2024
ffbcefc
set temperature threshold for ASHP-SH to switch to backup
atpham88 Jul 1, 2024
c79c4c7
update error text for BuiltInProcessHeatLoad
zolanaj Jul 2, 2024
51f0d84
fixed typo
atpham88 Jul 3, 2024
a31cc12
added back_up_temp_threshold to ASHP-SH
atpham88 Jul 8, 2024
7297d80
set default o&m to configs 1 & 3 and to 0 when force_into_system (con…
atpham88 Jul 14, 2024
262bb1a
Merge branch 'develop' into add-ASHP
atpham88 Jul 14, 2024
b76fea8
updated changelog to resolve conflict
atpham88 Jul 14, 2024
ce7b682
added _degF to back_up_temp_threshold
atpham88 Jul 23, 2024
06b938f
Update macOS to 13, from 11 which is deprecated by Actions
Bill-Becker Jul 24, 2024
4c63d76
Add back Ubuntu OS for GitHub Actions tests (API uses this)
Bill-Becker Jul 24, 2024
decb0ea
Skip this test due to JuMP warning flood: Custom URDB with Sub-Hourly
Bill-Becker Jul 24, 2024
a1ae11c
Use local logger to suppress excessive JuMP warning for += expressions
Bill-Becker Jul 24, 2024
7e9bc86
Suppress JuMP warnings for multiple PVs test
Bill-Becker Jul 24, 2024
44afc8a
Remove Ubuntu OS from Git Actions runner list
Bill-Becker Jul 25, 2024
1d3ced1
Remove MacOS from GitHub Actions runner list for CI testing
Bill-Becker Jul 26, 2024
697e3b0
Add header User-Agent=REopt.jl to PVWatts API request
Bill-Becker Jul 29, 2024
1cefd80
Add header User-Agent=REopt.jl to Wind Toolkit API request
Bill-Becker Jul 29, 2024
ef03f6f
add COP, CF calculation using temperature tables
zolanaj Jul 30, 2024
1ff84ac
migrate COP, CF calcs from scenario to ASHP
zolanaj Aug 2, 2024
3b776d7
add new ASHP attribute min_allowable_kw (given via min_allowable_ton)
zolanaj Aug 2, 2024
2f52f6d
set default max_ton to big number
atpham88 Aug 5, 2024
0ba60f2
add CF override to 1.0 under backup threshold when calculating defaul…
zolanaj Aug 5, 2024
e40c540
add CF override to 1.0 under backup threshold when calculating defaul…
zolanaj Aug 5, 2024
1fe85ed
allow back_up_temp_threshold = nothing for ASHP
zolanaj Aug 5, 2024
bca9218
Merge branch 'add-ASHP' of https://github.com/NREL/REopt.jl into add-…
zolanaj Aug 5, 2024
4ab937a
Update ashp.jl
zolanaj Aug 5, 2024
bb9aa5b
include min_allowable_ton in ASHP tests
zolanaj Aug 5, 2024
8bb555d
set up min_allowable_kw for ASHP in REoptInputs
zolanaj Aug 6, 2024
b107a90
add testset for heating and cooling COP, CF profiles
zolanaj Aug 6, 2024
bc0e349
Update runtests.jl
zolanaj Aug 6, 2024
e9c86fc
fix ASHP performance tests
zolanaj Aug 6, 2024
8db09cd
Update CHANGELOG.md
Bill-Becker Aug 9, 2024
b72af8f
Merge pull request #424 from NREL/fix-actions
Bill-Becker Aug 9, 2024
ea662fa
Merge pull request #428 from NREL/api-track
Bill-Becker Aug 9, 2024
1e1362e
Update CHANGELOG.md
Bill-Becker Aug 9, 2024
1307ec6
Wrap all tests in an @testset to avoid "failfast" behavior unintentio…
Bill-Becker Aug 10, 2024
e0dbac9
Fix wrapper @testset call
Bill-Becker Aug 10, 2024
a898637
Add more verbose=true to @testset supersets
Bill-Becker Aug 13, 2024
de8d85b
Fix proforma calcs for CHP, ExistingBoiler, and other thermal techs
Bill-Becker Aug 13, 2024
b5e820f
Apply depreciation function to Storage too
Bill-Becker Aug 13, 2024
4409a11
Add CHP proforma test with known value from external proforma spreads…
Bill-Becker Aug 13, 2024
f76bce9
Merge branch 'verbose-testsets' into fix-proforma-thermal
Bill-Becker Aug 13, 2024
14eb79d
Update CHANGELOG.md
Bill-Becker Aug 13, 2024
5084565
Merge pull request #433 from NREL/verbose-testsets
Bill-Becker Aug 13, 2024
f5b2c5f
Update GHP proforma tests after adding ExistingBoiler operating/fuel …
Bill-Becker Aug 14, 2024
aa918f1
Fix issue with (new) Boiler proforma metrics
Bill-Becker Aug 14, 2024
ded5562
Replace generic "tech" reference with specific tech object
Bill-Becker Aug 14, 2024
900a3a6
Add SteamTurbine to initial_capex
Bill-Becker Aug 14, 2024
e402a3e
More proforma tech/name reference fixes
Bill-Becker Aug 14, 2024
f6524bd
Update expected indicator constraint error message
Bill-Becker Aug 14, 2024
09292b1
Simplify CHP sizing test to speed up
Bill-Becker Aug 14, 2024
ee9acf6
Merge branch 'develop' into fix-proforma-thermal
Bill-Becker Aug 14, 2024
e319a3c
added avoided HVAC upgrade costs for ASHP
atpham88 Aug 14, 2024
aa7a868
Handle different versions of JuMP/HiGHS with different indicator erro…
Bill-Becker Aug 14, 2024
2174ecc
Update CHANGELOG.md
Bill-Becker Aug 14, 2024
4f813d6
Merge branch 'develop' into add-ASHP
zolanaj Aug 19, 2024
6e16b03
docstrings for default COP, CF functions
zolanaj Aug 19, 2024
f3e5549
add function get_ashp_default_min_allowable_size
zolanaj Aug 19, 2024
cc5d7ac
add test for min allowable size
zolanaj Aug 19, 2024
d510dc5
update scenario loading in ASHP test suite
zolanaj Aug 20, 2024
77755e3
fix types and inputs to ASHP systems for min allowable size
zolanaj Aug 20, 2024
b28ca13
update ashp inputs tests
zolanaj Aug 20, 2024
b4e5f8a
fix ashp docstrings
zolanaj Aug 20, 2024
20c9f1e
generalize type definitions to Real in ASHP structs and functions
zolanaj Aug 20, 2024
d623ffc
add cooling- and heating-specific electric consumption in ASHP results
zolanaj Aug 22, 2024
a01cf84
add time series COPs to ASHP results
zolanaj Aug 22, 2024
a98a645
add CFs to ASHP tech results, COP to water heater
zolanaj Aug 22, 2024
723c55f
add annual kWh consumed for heating/cooling for ASHP
zolanaj Aug 22, 2024
6f5a032
Fix Generator fuel cost escalation in proforma calcs
Bill-Becker Aug 23, 2024
000c19b
Merge branch 'fix-proforma-thermal' of https://github.com/NREL/REopt.…
Bill-Becker Aug 23, 2024
7f50590
move comment
adfarth Aug 23, 2024
5b00334
add inputs min_allowable_peak_load_fraction,
zolanaj Aug 28, 2024
6b072bd
update error handling, use min_allowable_peak_load_fraction if provided
zolanaj Aug 28, 2024
6dea77c
use ashp sizing factor in results
zolanaj Aug 28, 2024
eae43c1
add min_allowable_peak_load_fraction and sizing_factor to ASHP_WaterH…
zolanaj Aug 28, 2024
b2b6f33
add default sizing factor
zolanaj Aug 28, 2024
fe46361
use default references instead of lone default curve
zolanaj Aug 28, 2024
cead7f1
ren ASHP_SpaceHeater ASHPSpaceHeater, ren ASHP_WaterHeater ASHPWaterH…
zolanaj Aug 28, 2024
5ce934f
fix ASHPWaterHeater min allowable size calculation
zolanaj Aug 28, 2024
0599b64
update ASHP test values to reflect sizing factor
zolanaj Aug 28, 2024
9cbefab
update ASHP test values to reflect sizing factor
zolanaj Aug 28, 2024
68de7ef
remove default COP, CF curves (replaced by values for performance fun…
zolanaj Aug 28, 2024
284f9a1
set sizing_factor = 1 for configs 1 and 3
atpham88 Aug 29, 2024
4a85145
update ashp docstrings
zolanaj Aug 29, 2024
797577f
revert test values for sizing_factor=1.0
zolanaj Aug 29, 2024
8ce8ebd
ren *_reference_temps *_reference_temps_degF
zolanaj Aug 29, 2024
8c527ec
update test values for sizing_factor=1.0
zolanaj Aug 29, 2024
4666d61
update default reference cop, cf curves
zolanaj Aug 29, 2024
3738960
fix formatting in ASHP defaults JSON
zolanaj Aug 30, 2024
0e2759b
rm superfluous end in test suite
zolanaj Aug 30, 2024
46a2848
update default and specific types for ASHPSpaceHeater
zolanaj Sep 3, 2024
9f46571
more permissive type defs for ASHP techs for API inputs
zolanaj Sep 4, 2024
893c896
Revert "more permissive type defs for ASHP techs for API inputs"
zolanaj Sep 4, 2024
5300799
add cop and cf references to vector type conversions
zolanaj Sep 4, 2024
1cf63cb
update ASHP default COP ad CF curves
zolanaj Sep 4, 2024
8871d47
ren min_allowable_peak_load_fraction min_allowable_peak_capacity_frac…
zolanaj Sep 4, 2024
b5819ce
ren min_allowable_peak_load_fraction min_allowable_peak_capacity_frac…
zolanaj Sep 4, 2024
8f3d1af
error string correction
zolanaj Sep 5, 2024
45d43ba
fix set in expression ASHPColdElectricConsumptionSeries
zolanaj Sep 5, 2024
e1de07c
remove non-electric segmented techs from microgrid outage constraints
zolanaj Sep 5, 2024
50e3e4e
fix default calculation of ASHP allowable size, and throw error when …
zolanaj Sep 5, 2024
bdff1fe
Update comments in code to be more accurate, remove done TODO
Bill-Becker Sep 6, 2024
504f3ab
Update more comments and docstrings
Bill-Becker Sep 6, 2024
facb0a0
Fuel costs are all paid for by offtaker for 3rd party in proforma.jl
Bill-Becker Sep 6, 2024
0c60b7f
Update CHANGELOG.md
Bill-Becker Sep 7, 2024
9a2e96a
Add GHP-to-load outputs
Bill-Becker Sep 9, 2024
5ef48b3
Move heat_cooling_load.jl up in code loading order
Bill-Becker Sep 9, 2024
5e269b8
Reduce GHP thermal produced by the thermal efficiency reductions
Bill-Becker Sep 9, 2024
aceecf3
Add site.outdoor_air_temp_degF to Site struct
Bill-Becker Sep 9, 2024
2aeffe3
Fix change temp to temperature in reference to Site field name
Bill-Becker Sep 9, 2024
f774972
Make Generator O&M and fuel cashflows consistent between third party …
Bill-Becker Sep 11, 2024
2c40d69
Remove unused proforma code
Bill-Becker Sep 11, 2024
cbafc81
Merge branch 'fix-proforma-thermal' of https://github.com/NREL/REopt.…
Bill-Becker Sep 11, 2024
885783c
Merge branch 'fix-proforma-thermal' into add-ASHP
Bill-Becker Sep 13, 2024
e97373d
Update expected Solar dataset test from updated NSRDB
Bill-Becker Sep 13, 2024
f8829a1
Add CapEx and OpEx for ASHP for proforma results metrics
Bill-Becker Sep 13, 2024
8f948c7
bring back net cooling load impact on electric load
zolanaj Sep 17, 2024
d65f199
update cop to cooling_cop in MPCInputs
zolanaj Sep 17, 2024
0a21a31
incorporate waste heat in calculation of ASHP results
zolanaj Sep 17, 2024
93d70c7
incorporate waste heat in electric heater results
zolanaj Sep 17, 2024
e65383c
Enforce no waste heat for any technology that isn't both electricity-…
zolanaj Sep 18, 2024
77773d6
update tech set for no waste heat
zolanaj Sep 18, 2024
8f16733
Remove BAU/existing Generator O&M from Developer/Owner in 3rd Party p…
Bill-Becker Sep 19, 2024
b3fd4bf
Add net_capital_cost_without_macrs to enable easier "more simple" pay…
Bill-Becker Sep 19, 2024
3c449f5
Update expected Solar dataset test from updated NSRDB
Bill-Becker Sep 13, 2024
f0dbd1b
Update CHANGELOG.md
Bill-Becker Sep 20, 2024
ae617e5
update help text
adfarth Sep 20, 2024
f8b7254
Only remove BAU/Existing Generator O&M from optimal cash flow for thi…
Bill-Becker Sep 21, 2024
9eea0a7
Update CHANGELOG.md
adfarth Sep 22, 2024
107c118
Add unaddressable heating load and emissions to outputs
Bill-Becker Sep 22, 2024
d25ba18
Update expected Solar dataset test from updated NSRDB
Bill-Becker Sep 13, 2024
ded48a9
Avoid heating results with no heating input
Bill-Becker Sep 23, 2024
2dfd431
Merge pull request #434 from NREL/fix-proforma-thermal
Bill-Becker Sep 23, 2024
059add5
Merge branch 'develop' into add-unaddressable-outputs
Bill-Becker Sep 23, 2024
98842e2
Merge branch 'develop' into add-ASHP
Bill-Becker Sep 23, 2024
ad92f3f
Merge branch 'add-unaddressable-outputs' into add-ASHP
Bill-Becker Sep 23, 2024
fd40567
Merge pull request #445 from NREL/add-unaddressable-outputs
Bill-Becker Sep 23, 2024
8ef48e4
Change net_capital_costs_without_macrs to initial_capital_costs_after…
Bill-Becker Sep 23, 2024
9d3c906
Change net_capital_costs_without_macrs to initial_capital_costs_after…
Bill-Becker Sep 23, 2024
78b0429
Fix units for unaddressable heating emissions
Bill-Becker Sep 23, 2024
f7534f1
include force_into_system as input to get_ashp_defaults
zolanaj Sep 25, 2024
d63f27a
update ASHP docstrings
zolanaj Sep 25, 2024
af19daf
add fields to ASHP that have defaults for API access
zolanaj Sep 25, 2024
0cf2c1e
add reference temps to ASHP object for defaults updates
zolanaj Sep 25, 2024
a4c7759
convert ashp reference vectors to Float64 when querying defaults
zolanaj Sep 25, 2024
876c7a6
Merge branch 'master' into develop
hdunham Sep 25, 2024
caff795
Merge pull request #372 from NREL/add-ASHP
zolanaj Sep 26, 2024
2f882bf
Update CHANGELOG.md header to v0.48.0
zolanaj Sep 26, 2024
c30ff01
Update Project.toml
zolanaj Sep 26, 2024
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
5 changes: 2 additions & 3 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ jobs:
matrix:
julia-version: ['1.8']
julia-arch: [x64]
# os: [ubuntu-latest, windows-latest, macOS-11]
os: [windows-latest, macOS-11]
os: [windows-latest]

steps:
- uses: actions/checkout@v2
Expand All @@ -24,4 +23,4 @@ jobs:
- uses: julia-actions/julia-buildpkg@latest
# - uses: mxschmitt/action-tmate@v3 # for interactive debugging
- run: julia --project=. -e 'using Pkg; Pkg.activate("test"); Pkg.rm("Xpress"); Pkg.activate("."); using TestEnv; TestEnv.activate(); cd("test"); include("runtests.jl")'
shell: bash
shell: bash
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,27 @@ Classify the change according to the following categories:
### Deprecated
### Removed

## v0.48.0
### Added
- Added new file `src/core/ASHP.jl` with new technology **ASHP**, which uses electricity as input and provides heating and/or cooling as output; load balancing and technology-specific constraints have been updated and added accordingly
- In `src/core/existing_chiller.jl`, Added new atttribute **retire_in_optimal** to the **ExistingChiller** struct
- Financial output **initial_capital_costs_after_incentives_without_macrs** which has "net year one" CapEx after incentives except for MACRS, which helps with users defining their own "simple payback period"
### Changed
- Improve the full test suite reporting with a verbose summary table, and update the structure to reflect long-term open-source solver usage.
- Removed MacOS from the runner list and just run with Windows OS, since MacOS commonly freezes and gets cancelled. We have not seen Windows OS pass while other OS's fail.
- Suppress JuMP warning messages from 15-minute and multiple PVs test scenarios to avoid flooding the test logs with those warnings.
- Updated/specified User-Agent header of "REopt.jl" for PVWatts and Wind Toolkit API requests; default before was "HTTP.jl"; this allows specific tracking of REopt.jl usage which call PVWatts and Wind Toolkit through api.data.gov.
- Improves DRY coding by replacing multiple instances of the same chunks of code for MACRS deprecation and CHP capital cost into functions that are now in financial.jl.
- Simplifies the CHP sizing test to avoid a ~30 minute solve time, by avoiding the fuel burn y-intercept binaries which come with differences between full-load and part-load efficiency.
- For third party analysis proforma.jl metrics, O&M cost for existing Generator is now kept with offtaker, not the owner/developer
### Fixed
- Proforma calcs including "simple" payback and IRR for thermal techs/scenarios.
- The operating costs of fuel and O&M were missing for all thermal techs such as ExistingBoiler, CHP, and others; this adds those sections of code to properly calculate the operating costs.
- Added a test to validate the simple payback calculation with CHP (and ExistingBoiler) and checks the REopt result value against a spreadsheet proforma calculation (see Bill's spreadsheet).
- Added a couple of missing techs for the initial capital cost calculation in financial.jl.
- An issue with setup_boiler_inputs in reopt_inputs.jl.
- Fuel costs in proforma.jl were not consistent with the optimization costs, so that was corrected so that they are only added to the offtaker cashflows and not the owner/developer cashflows for third party.

## v0.47.2
### Fixed
- Increased the big-M bound on maximum net metering benefit to prevent artificially low export benefits.
Expand Down
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "REopt"
uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6"
authors = ["Nick Laws", "Hallie Dunham <[email protected]>", "Bill Becker <[email protected]>", "Bhavesh Rathod <[email protected]>", "Alex Zolan <[email protected]>", "Amanda Farthing <[email protected]>"]
version = "0.47.2"
version = "0.48.0"

[deps]
ArchGDAL = "c9ce4bd3-c3d5-55b8-8973-c0e20141b8c3"
Expand Down
41 changes: 41 additions & 0 deletions data/ashp/ashp_defaults.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"SpaceHeating":
{
"max_ton": 99999999,
"installed_cost_per_ton": 2250,
"om_cost_per_ton": 40,
"macrs_option_years": 0,
"macrs_bonus_fraction": 0.0,
"can_supply_steam_turbine": false,
"can_serve_process_heat": false,
"can_serve_dhw": false,
"can_serve_space_heating": true,
"can_serve_cooling": true,
"back_up_temp_threshold_degF": 10.0,
"sizing_factor": 1.0,
"heating_cop_reference": [1.5,2.3,3.3,4.5],
"heating_cf_reference": [0.38,0.64,1.0,1.4],
"heating_reference_temps_degF": [-5,17,47,80],
"cooling_cop_reference": [4.0, 3.5, 2.9, 2.2],
"cooling_cf_reference": [1.03, 0.98, 0.93, 0.87],
"cooling_reference_temps_degF": [70, 82, 95, 110]
},
"DomesticHotWater":
{
"max_ton": 99999999,
"installed_cost_per_ton": 2250,
"om_cost_per_ton": 40,
"macrs_option_years": 0,
"macrs_bonus_fraction": 0.0,
"can_supply_steam_turbine": false,
"can_serve_process_heat": false,
"can_serve_dhw": true,
"can_serve_space_heating": false,
"can_serve_cooling": false,
"back_up_temp_threshold_degF": 10.0,
"sizing_factor": 1.0,
"heating_cop_reference": [1.5,2.3,3.3,4.5],
"heating_cf_reference": [0.38,0.64,1.0,1.4],
"heating_reference_temps_degF": [-5,17,47,80]
}
}
5 changes: 5 additions & 0 deletions docs/src/reopt/inputs.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,8 @@ REopt.SteamTurbine
```@docs
REopt.ElectricHeater
```

## ASHP
```@docs
REopt.ASHP
```
8 changes: 6 additions & 2 deletions src/REopt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ export
avert_emissions_profiles,
cambium_emissions_profile,
easiur_data,
get_existing_chiller_default_cop
get_existing_chiller_default_cop,
get_electric_heater_defaults,
get_ashp_defaults

import HTTP
import JSON
Expand Down Expand Up @@ -135,6 +137,7 @@ include("core/chp.jl")
include("core/ghp.jl")
include("core/steam_turbine.jl")
include("core/electric_heater.jl")
include("core/ashp.jl")
include("core/scenario.jl")
include("core/bau_scenario.jl")
include("core/reopt_inputs.jl")
Expand Down Expand Up @@ -179,6 +182,7 @@ include("results/thermal_storage.jl")
include("results/outages.jl")
include("results/wind.jl")
include("results/electric_load.jl")
include("results/heating_cooling_load.jl")
include("results/existing_boiler.jl")
include("results/boiler.jl")
include("results/existing_chiller.jl")
Expand All @@ -188,7 +192,7 @@ include("results/flexible_hvac.jl")
include("results/ghp.jl")
include("results/steam_turbine.jl")
include("results/electric_heater.jl")
include("results/heating_cooling_load.jl")
include("results/ashp.jl")

include("core/reopt.jl")
include("core/reopt_multinode.jl")
Expand Down
2 changes: 1 addition & 1 deletion src/constraints/electric_utility_constraints.jl
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ function add_export_constraints(m, p; _n="")
sum(p.max_sizes[t] for t in NEM_techs),
p.hours_per_time_step * maximum([sum((
p.s.electric_load.loads_kw[ts] +
p.s.cooling_load.loads_kw_thermal[ts]/p.cop["ExistingChiller"] +
p.s.cooling_load.loads_kw_thermal[ts]/p.cooling_cop["ExistingChiller"][ts] +
(p.s.space_heating_load.loads_kw[ts] + p.s.dhw_load.loads_kw[ts] + p.s.process_heat_load.loads_kw[ts])
) for ts in p.s.electric_tariff.time_steps_monthly[m]) for m in p.months
])
Expand Down
12 changes: 6 additions & 6 deletions src/constraints/load_balance.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ function add_elec_load_balance_constraints(m, p; _n="")
sum(sum(m[Symbol("dvProductionToStorage"*_n)][b, t, ts] for b in p.s.storage.types.elec)
+ m[Symbol("dvCurtail"*_n)][t, ts] for t in p.techs.elec)
+ sum(m[Symbol("dvGridToStorage"*_n)][b, ts] for b in p.s.storage.types.elec)
+ sum(m[Symbol("dvCoolingProduction"*_n)][t, ts] / p.cop[t] for t in setdiff(p.techs.cooling,p.techs.ghp))
+ sum(m[Symbol("dvHeatingProduction"*_n)][t, q, ts] / p.heating_cop[t] for q in p.heating_loads, t in p.techs.electric_heater)
+ sum(m[Symbol("dvCoolingProduction"*_n)][t, ts] / p.cooling_cop[t][ts] for t in setdiff(p.techs.cooling,p.techs.ghp))
+ sum(m[Symbol("dvHeatingProduction"*_n)][t, q, ts] / p.heating_cop[t][ts] for q in p.heating_loads, t in p.techs.electric_heater)
+ p.s.electric_load.loads_kw[ts]
- p.s.cooling_load.loads_kw_thermal[ts] / p.cop["ExistingChiller"]
- p.s.cooling_load.loads_kw_thermal[ts] / p.cooling_cop["ExistingChiller"][ts]
+ sum(p.ghp_electric_consumption_kw[g,ts] * m[Symbol("binGHP"*_n)][g] for g in p.ghp_options)
)
else
Expand All @@ -28,10 +28,10 @@ function add_elec_load_balance_constraints(m, p; _n="")
+ sum(m[Symbol("dvProductionToGrid"*_n)][t, u, ts] for u in p.export_bins_by_tech[t])
+ m[Symbol("dvCurtail"*_n)][t, ts] for t in p.techs.elec)
+ sum(m[Symbol("dvGridToStorage"*_n)][b, ts] for b in p.s.storage.types.elec)
+ sum(m[Symbol("dvCoolingProduction"*_n)][t, ts] / p.cop[t] for t in setdiff(p.techs.cooling,p.techs.ghp))
+ sum(m[Symbol("dvHeatingProduction"*_n)][t, q, ts] / p.heating_cop[t] for q in p.heating_loads, t in p.techs.electric_heater)
+ sum(m[Symbol("dvCoolingProduction"*_n)][t, ts] / p.cooling_cop[t][ts] for t in setdiff(p.techs.cooling,p.techs.ghp))
+ sum(m[Symbol("dvHeatingProduction"*_n)][t, q, ts] / p.heating_cop[t][ts] for q in p.heating_loads, t in p.techs.electric_heater)
+ p.s.electric_load.loads_kw[ts]
- p.s.cooling_load.loads_kw_thermal[ts] / p.cop["ExistingChiller"]
- p.s.cooling_load.loads_kw_thermal[ts] / p.cooling_cop["ExistingChiller"][ts]
+ sum(p.ghp_electric_consumption_kw[g,ts] * m[Symbol("binGHP"*_n)][g] for g in p.ghp_options)
)
end
Expand Down
8 changes: 4 additions & 4 deletions src/constraints/outage_constraints.jl
Original file line number Diff line number Diff line change
Expand Up @@ -49,22 +49,22 @@ function add_outage_cost_constraints(m,p)
end
end

if !isempty(p.techs.segmented)
if !isempty(intersect(p.techs.segmented, p.techs.elec))
@warn "Adding binary variable(s) to model cost curves in stochastic outages"
if solver_is_compatible_with_indicator_constraints(p.s.settings.solver_name)
@constraint(m, [t in p.techs.segmented], # cannot have this for statement in sum( ... for t in ...) ???
@constraint(m, [t in intersect(p.techs.segmented, p.techs.elec)], # cannot have this for statement in sum( ... for t in ...) ???
m[:binMGTechUsed][t] => {m[:dvMGTechUpgradeCost][t] >= p.s.financial.microgrid_upgrade_cost_fraction * p.third_party_factor *
sum(p.cap_cost_slope[t][s] * m[Symbol("dvSegmentSystemSize"*t)][s] +
p.seg_yint[t][s] * m[Symbol("binSegment"*t)][s] for s in 1:p.n_segs_by_tech[t])}
)
else
@constraint(m, [t in p.techs.segmented],
@constraint(m, [t in intersect(p.techs.segmented, p.techs.elec)],
m[:dvMGTechUpgradeCost][t] >= p.s.financial.microgrid_upgrade_cost_fraction * p.third_party_factor *
sum(p.cap_cost_slope[t][s] * m[Symbol("dvSegmentSystemSize"*t)][s] +
p.seg_yint[t][s] * m[Symbol("binSegment"*t)][s] for s in 1:p.n_segs_by_tech[t]) -
(maximum(p.cap_cost_slope[t][s] for s in 1:p.n_segs_by_tech[t]) * p.max_sizes[t] + maximum(p.seg_yint[t][s] for s in 1:p.n_segs_by_tech[t]))*(1-m[:binMGTechUsed][t])
)
@constraint(m, [t in p.techs.segmented], m[:dvMGTechUpgradeCost][t] >= 0.0)
@constraint(m, [t in intersect(p.techs.segmented, p.techs.elec)], m[:dvMGTechUpgradeCost][t] >= 0.0)
end
end

Expand Down
62 changes: 59 additions & 3 deletions src/constraints/thermal_tech_constraints.jl
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ function add_heating_tech_constraints(m, p; _n="")
# Constraint (7_heating_prod_size): Production limit based on size for non-electricity-producing heating techs
if !isempty(setdiff(p.techs.heating, union(p.techs.elec, p.techs.ghp)))
@constraint(m, [t in setdiff(p.techs.heating, union(p.techs.elec, p.techs.ghp)), ts in p.time_steps],
sum(m[Symbol("dvHeatingProduction"*_n)][t,q,ts] for q in p.heating_loads) <= m[Symbol("dvSize"*_n)][t]
sum(m[Symbol("dvHeatingProduction"*_n)][t,q,ts] for q in p.heating_loads) <= m[Symbol("dvSize"*_n)][t] * p.heating_cf[t][ts]
)
end
# Constraint (7_heating_load_compatability): Set production variables for incompatible heat loads to zero
Expand All @@ -88,7 +88,56 @@ function add_heating_tech_constraints(m, p; _n="")
end
end
end
# Enfore

# Enforce no waste heat for any technology that isn't both electricity- and heat-producing
for t in setdiff(p.techs.heating, union(p.techs.elec, p.techs.ghp))
for q in p.heating_loads
for ts in p.time_steps
fix(m[Symbol("dvProductionToWaste"*_n)][t,q,ts], 0.0, force=true)
end
end
end
end

function add_heating_cooling_constraints(m, p; _n="")
@constraint(m, [t in setdiff(intersect(p.techs.cooling, p.techs.heating), p.techs.ghp), ts in p.time_steps],
sum(m[Symbol("dvHeatingProduction"*_n)][t,q,ts] for q in p.heating_loads) / p.heating_cf[t][ts] + m[Symbol("dvCoolingProduction"*_n)][t,ts] / p.cooling_cf[t][ts] <= m[Symbol("dvSize"*_n)][t]
)
end


function add_ashp_force_in_constraints(m, p; _n="")
if "ASHPSpaceHeater" in p.techs.ashp && p.s.ashp.force_into_system
for t in setdiff(p.techs.can_serve_space_heating, ["ASHPSpaceHeater"])
for ts in p.time_steps
fix(m[Symbol("dvHeatingProduction"*_n)][t,"SpaceHeating",ts], 0.0, force=true)
fix(m[Symbol("dvProductionToWaste"*_n)][t,"SpaceHeating",ts], 0.0, force=true)
end
end
end

if "ASHPSpaceHeater" in p.techs.cooling && p.s.ashp.force_into_system
for t in setdiff(p.techs.cooling, ["ASHPSpaceHeater"])
for ts in p.time_steps
fix(m[Symbol("dvCoolingProduction"*_n)][t,ts], 0.0, force=true)
end
end
end

if "ASHPWaterHeater" in p.techs.ashp && p.s.ashp_wh.force_into_system
for t in setdiff(p.techs.can_serve_dhw, ["ASHPWaterHeater"])
for ts in p.time_steps
fix(m[Symbol("dvHeatingProduction"*_n)][t,"DomesticHotWater",ts], 0.0, force=true)
fix(m[Symbol("dvProductionToWaste"*_n)][t,"DomesticHotWater",ts], 0.0, force=true)
end
end
end
end

function avoided_capex_by_ashp(m, p; _n="")
m[:AvoidedCapexByASHP] = @expression(m,
sum(p.avoided_capex_by_ashp_present_value[t] for t in p.techs.ashp)
)
end

function no_existing_boiler_production(m, p; _n="")
Expand All @@ -103,7 +152,7 @@ end
function add_cooling_tech_constraints(m, p; _n="")
# Constraint (7_cooling_prod_size): Production limit based on size for boiler
@constraint(m, [t in setdiff(p.techs.cooling, p.techs.ghp), ts in p.time_steps_with_grid],
m[Symbol("dvCoolingProduction"*_n)][t,ts] <= m[Symbol("dvSize"*_n)][t]
m[Symbol("dvCoolingProduction"*_n)][t,ts] <= m[Symbol("dvSize"*_n)][t] * p.cooling_cf[t][ts]
)
# The load balance for cooling is only applied to time_steps_with_grid, so make sure we don't arbitrarily show cooling production for time_steps_without_grid
for t in setdiff(p.techs.cooling, p.techs.ghp)
Expand All @@ -112,3 +161,10 @@ function add_cooling_tech_constraints(m, p; _n="")
end
end
end

function no_existing_chiller_production(m, p; _n="")
for ts in p.time_steps
fix(m[Symbol("dvCoolingProduction"*_n)]["ExistingChiller",ts], 0.0, force=true)
end
fix(m[Symbol("dvSize"*_n)]["ExistingChiller"], 0.0, force=true)
end
Loading
Loading