diff --git a/CHANGELOG.md b/CHANGELOG.md index 110f0f726..3c48440d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,14 @@ Classify the change according to the following categories: ### Deprecated ### Removed +## v0.42.0 +### Changed +- In `core/pv.jl` a change was made to make sure we are using the same assumptions as PVWatts guidelines, the default `tilt` angle for a fixed array should be 20 degrees, irrespective of it being a rooftop `(1)` or ground-mounted (open-rack)`(2)` system. By default the `tilt` will be set to 20 degrees for ground-mount and rooftop, and 0 degrees for axis-tracking (`array_type = (3) or (4)`) + +> "The PVWatts® default value for the tilt angle depends on the array type: For a fixed array, the default value is 20 degrees, and for one-axis tracking the default value is zero. A common rule of thumb for fixed arrays is to set the tilt angle to the latitude of the system's location to maximize the system's total electrical output over the year. Use a lower tilt angle favor peak production in the summer months when the sun is high in the sky, or a higher tilt angle to increase output during winter months. Higher tilt angles tend to cost more for racking and mounting hardware, and may increase the risk of wind damage to the array." + + + ## v0.41.0 ### Changed - Changed default source for CO2 grid emissions values to NREL's Cambium 2022 Database (by default: CO2e, long-run marginal emissions rates levelized (averaged) over the analysis period, assuming start year 2024). Added new emissions inputs and call to Cambium API in `src/core/electric_utility.jl`. Included option for user to use AVERT data for CO2 using **co2_from_avert** boolean. diff --git a/Project.toml b/Project.toml index cc194352a..567972048 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "REopt" uuid = "d36ad4e8-d74a-4f7a-ace1-eaea049febf6" authors = ["Nick Laws", "Hallie Dunham ", "Bill Becker ", "Bhavesh Rathod ", "Alex Zolan ", "Amanda Farthing "] -version = "0.41.0" +version = "0.42.0" [deps] ArchGDAL = "c9ce4bd3-c3d5-55b8-8973-c0e20141b8c3" diff --git a/src/core/pv.jl b/src/core/pv.jl index 45aff328f..1f90132f1 100644 --- a/src/core/pv.jl +++ b/src/core/pv.jl @@ -3,7 +3,7 @@ `PV` is an optional REopt input with the following keys and default values: ```julia array_type::Int=1, # PV Watts array type (0: Ground Mount Fixed (Open Rack); 1: Rooftop, Fixed; 2: Ground Mount 1-Axis Tracking; 3 : 1-Axis Backtracking; 4: Ground Mount, 2-Axis Tracking) - tilt::Real= array_type == 1 ? 10 : 20, # tilt = 10 deg for rooftop systems, 20 for ground-mount + tilt::Real = (array_type == 0 || array_type == 1) ? 20 : 0, # tilt = 20 for fixed rooftop arrays (1) or ground-mount (2) ; tilt = 0 for everything else (3 and 4) module_type::Int=0, # PV module type (0: Standard; 1: Premium; 2: Thin Film) losses::Real=0.14, # System losses azimuth::Real = latitude≥0 ? 180 : 0, # set azimuth to zero for southern hemisphere @@ -102,7 +102,7 @@ mutable struct PV <: AbstractTech off_grid_flag::Bool = false, latitude::Real, array_type::Int=1, # PV Watts array type (0: Ground Mount Fixed (Open Rack); 1: Rooftop, Fixed; 2: Ground Mount 1-Axis Tracking; 3 : 1-Axis Backtracking; 4: Ground Mount, 2-Axis Tracking) - tilt::Real= array_type == 1 ? 10 : 20, # tilt = 10 deg for rooftop systems, 20 for ground-mount + tilt::Real = (array_type == 0 || array_type == 1) ? 20 : 0, # tilt = 20 for fixed rooftop arrays (1) or ground-mount (2) ; tilt = 0 for everything else (3 and 4) module_type::Int=0, # PV module type (0: Standard; 1: Premium; 2: Thin Film) losses::Real=0.14, azimuth::Real = latitude≥0 ? 180 : 0, # set azimuth to zero for southern hemisphere diff --git a/src/sam/libssc.dylib b/src/sam/libssc.dylib old mode 100644 new mode 100755 diff --git a/test/runtests.jl b/test/runtests.jl index 2dd7a4646..a1bcd0d25 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -13,7 +13,7 @@ Random.seed!(42) if "Xpress" in ARGS @testset "test_with_xpress" begin @test true #skipping Xpress while import to HiGHS takes place - #include("test_with_xpress.jl") + # include("test_with_xpress.jl") end elseif "CPLEX" in ARGS @@ -172,9 +172,15 @@ else # run HiGHS tests post["PV"]["array_type"] = 1 scen = Scenario(post) - @test scen.pvs[1].tilt ≈ 10 + @test scen.pvs[1].tilt ≈ 20 # Correct tilt value for array_type = 1 - ## Scenario 3:Cape Town; array-type = 0 (ground) + ## Scenario 3: Palmdale, CA; array-type = 2 (axis-tracking) + post["PV"]["array_type"] = 2 + scen = Scenario(post) + + @test scen.pvs[1].tilt ≈ 0 # Correct tilt value for array_type = 2 + + ## Scenario 4: Cape Town; array-type = 0 (ground) post["Site"]["latitude"] = -33.974732 post["Site"]["longitude"] = 19.130050 post["PV"]["array_type"] = 0 @@ -188,7 +194,11 @@ else # run HiGHS tests post["PV"]["tilt"] = 17 scen = Scenario(post) @test scen.pvs[1].tilt ≈ 17 - end + + + end + + @testset "AlternativeFlatLoads" begin input_data = JSON.parsefile("./scenarios/flatloads.json")