-
Notifications
You must be signed in to change notification settings - Fork 105
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
solar pv tracking option added #255
Conversation
for more information, see https://pre-commit.ci
Hey @enrilizaga, sorry this takes a while on our side... but the code looks great! Some optional point would be awesome
Would that be possible for you? |
…ding .nblink - added pv_tracking_test function within test_preparation_and_conversion.py - added tracking option for trigon_model "simple" within tiltedirradiation function
for more information, see https://pre-commit.ci
Hi @FabianHofmann, many thanks for your reply! I have:
Please let me know. |
This is awesome. I'm having a look at the changes next week. |
Ping! Would be super cool to include it in the upcoming PyPSA-Eur version. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@enrilizaga the code look great! Some comments from my side. I am currently running the notebook. I also want to make a check that the pv for tracking=0 is the same as in the current master.
as accepted by atlite.resource.get_windturbineconfig(). Locally stored turbine | ||
configurations can also be modified with this function. E.g. to setup a different hub | ||
height from the one used in the yaml file,one would write | ||
"turbine=get_windturbineconfig(“NREL_ReferenceTurbine_5MW_offshore”)|{“hub_height”:120}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am wondering where this change is coming from.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good change!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@FabianHofmann just a small doc addition explaining how to modify the wind hub height. This is unrelated to the pv tracking update
@@ -530,21 +532,24 @@ def wind(cutout, turbine, smooth=False, **params): | |||
|
|||
|
|||
# solar PV | |||
def convert_pv(ds, panel, orientation, trigon_model="simple", clearsky_model="simple"): | |||
def convert_pv( | |||
ds, panel, orientation, tracking, trigon_model="simple", clearsky_model="simple" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we make tracking
a keyword argument here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Default to no tracking would be a sensible choice.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just updated it. The no tracking option is the default option (e.g. see third assertion of pv_tracking_test)
atlite/convert.py
Outdated
tracking : int 0, 1, 2: | ||
0 for no tracking, default | ||
1 for 1-axis vertical tracking | ||
2 for 2-axis tracking |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am wondering whether we should rather take the arguments
- False,
- 'v' or 'vertical'
- 'h' or 'horizontal'
- 'full'
where horizontal is not supported right now. This would make integration in the future easier. Could you change this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
or instead of "full" -> "hv" or "vh"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good idea indeed! I have not included 'horizontal' as that is not supported by the code, but should be now easier to integrate it in the future
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry to jump in here without actually reviewing the code but this comment caught my attention. I think we should prioritize including 1-axis horizontal tracking.
In short, horizontal 1-axis tracking is widely used in the market today (about 50% of new PV power plants use it) while 2-axis or vertical tracking is not used at all.
I understand that this PR only includes vertical and 2-axes (and that is great, thanks for the work @enrilizaga ) but I think it would look weird in the next release if only exotic options are included but not the dominant "horizontal 1-axis tracking".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @martavp. I understand your point, but I am not sure why that would prevent this PR from being added into the code? Horizontal 1-axis tracking may be more widely used, but it is also more complex to implement and outside my scope of work. PS: would be great if you could share the reference re PV panels market share by tracking type!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@enrilizaga no worries, the PR is great (!) and this missing feature would not prevent it from being merged. But since you already have experience with the math, would you mind trying to lift the implementation to the full features stack? That would make it perfect. I had a try with horizontal tracking in #220 but due to missing time, I did not dig down any further. There you also find a reference (https://www.nrel.gov/docs/fy13osti/58891.pdf) for the hsat.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @martavp. I understand your point, but I am not sure why that would prevent this PR from being added into the code? Horizontal 1-axis tracking may be more widely used, but it is also more complex to implement and outside my scope of work. PS: would be great if you could share the reference re PV panels market share by tracking type!
I fully agree with @FabianHofmann, the PR is great and should be merged. I was just calling attention to the fact that we should try to add 1-axis horizontal tracking soon (ideally before the next release). I also did not find the time to work on this myself, so thanks again @enrilizaga for your contribution.
A good reference for the share of market representative of every tracking strategy can be the International Technology Roadmap for PV (ITRPV). You need to register to download the report and I cannot find the relevant figure in the most updated version, but check slide 35 from this presentation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, thanks for the clarification. When is next release? I could look into it at some point in the next month or so but I am currently time constrained.
Re the market share, thanks for sharing that reference. Unfortunately ITRPV does not seem to have data on horizontal vs vertical 1-axis tracking separately and just reports all as "1-axis tracking"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No pressure on the release date. If you can make it this year, that would be great. Otherwise I could also spend some hours, likely not before January on this. To give you a proper hint on the implementation I'd have make some research, which is atm not possible for me...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @enrilizaga I'm pretty sure that ITRPV only mentions "1-axis tracking" assuming that is horizontal tracking. Vertical tracking is not used at all in commercial utility-scale applications.
I'm also time constrained until January, but I can also find some time there to make suggestions. I have also talked to @Parisra and she might be able to put some time into implementing this.
@FabianHofmann @fneum thanks for your comments. Just included them in the last commit. Please let me know! |
Hey @enrilizaga, do you have concrete plans on continuing on this PR? Otherwise, we could look whether we can find someone to finish it up. |
I know that @Parisra is working on implementing the horizontal tracking option. |
I think that’d make sense. No need for full tracking implemented until merging. |
@martavp let's do it :) @Parisra could you then make sure to counter test the formulas? I haven't had the time to go into them in detail. @enrilizaga many thanks again! This is a great contribution and super well done! |
Hi @FabianHofmann , yes I can do that. I've just finished adding the formulas for horizontal tracking and will be doing some tests next week to make sure the results make sense. I'll do a pull request once everything is ready. |
great thanks @Parisra |
Change proposed in this Pull Request
Added 1-axis vertical and 2-axis tracking option for solar pv (+ small documentation addition for get_windturbineconfig)
Description
Updated orientation.py and convert.py:
Motivation and Context
This change adds the solar pv tracking capability to the code. Solar pv tracking is widely used as it increases the solar pv efficiency significantly. This change improves the fidelity of the code to represent those efficiencies
How Has This Been Tested?
The updated code was tested locally (see snapshots)
The following commands provided the same results (tracking = 0 default)


cap_factors_pv_notrack = cutout.pv(panel='CSi', orientation={'slope': 30., 'azimuth': 180.}, capacity_factor=True)
cap_factors_pv_0axis = cutout.pv(panel='CSi', orientation={'slope': 30., 'azimuth': 180.}, tracking=0, capacity_factor=True)
Tracking = 1 and =2 were tested as well:


cap_factors_pv_1axis = cutout.pv(panel='CSi', orientation={'slope': 30., 'azimuth': 180.}, tracking=1, capacity_factor=True)
cap_factors_pv_2axis = cutout.pv(panel='CSi', orientation={'slope': 30., 'azimuth': 180.}, tracking=2, capacity_factor=True)
Checked that csp was not affected (tracking change only for solar pv)

cf = cutout.csp(installation="SAM_solar_tower", capacity_factor=True)
cf = cutout.csp(installation="SAM_parabolic_trough", capacity_factor=True)
Type of change
Checklist
pytest
inside the repository and no unexpected problems came up.doc/
.environment.yaml
file.doc/release_notes.rst
.pre-commit run --all
to lint/format/check my contribution