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

Clarification of simulation annuity for PV assets #160

Open
smartie2076 opened this issue Aug 26, 2021 · 5 comments
Open

Clarification of simulation annuity for PV assets #160

smartie2076 opened this issue Aug 26, 2021 · 5 comments
Assignees
Labels
help wanted Extra attention is needed

Comments

@smartie2076
Copy link
Collaborator

One question was submitted to me via e-mail:

Bei dem Definieren der Komponenten haben Sie bei pv in der Investment Methode die ep_costs als das Verhältnis von der Annuität [currency/kWp] zum peak_pv_generation [kWp] angegeben. Das heisst quasi normiert. Ich frage mich jedoch, ob man das so machen soll ? denn in der Doku habe ich das nicht gefunden bzw. falsch verstanden. Ich weiss dass die input für die pv_source normierte Werte sein sollten also in [kW/kWp]. Bezüglich der ep_costs, dachte ich jedoch die müssen einfach als Annuität in [currency/kW] wie bei den anderen Komponenten DieselGen und inverter. Das verwirrt mich leider. Es scheint nämlich,einen großen Unterscheid zu machen, da ich diese Ergebnisse bekommen habe.

Wenn die so wie Sie die ep_costs as annuity [currency/kWp] geteilt durch peak_pv_generation [kWp] definierte dann wird die pv-Anlage deutlich überdimensioniert, ich bekommen circa 538 kWp als optimized sizing obwohl mein peak Demand bei 51 kW liegt. Durch die Teilung von peak_pv_generation sind dann ep_costs geringer also günstiger aus Perspektive der Optimierungsproblemes. Deswegen kommt es anscheinend zu der Überdimensionierung

Wenn ich aber die ep_costs nur als annuity [currency/kWp] definierte, also nicht durch die peak_pv_generation normiert dann bekommen ich 118.91 kWp als optimierte Größe. Also deutlich unterschiedlich.

def pv_oem(micro_grid_system, bus_electricity_dc, experiment):

In dem code „G3_oemof_evaluate.py“ haben Sie zur Erhaltung der PV-Größe in kWp mit dem pv_generation_max je nach ob >1 oder <1 multipliziert oder geteilt. Ich habe leider nicht verstanden, ob man das so umsetzen soll und wie „pv_generation_max“ definiert ist ? Die Funktion dir Bestimmung von „pv_generation_max“ habe ich leider nicht gefunden.
Wann ist diese Fall generell bei Oemof zu beachten ? Ich habe nämlich gesehen, dass Sie auch für wind berücksichtigt wurde.

if case_dict[PV_FIXED_CAPACITY] is False:

@smartie2076 smartie2076 added the help wanted Extra attention is needed label Aug 26, 2021
@smartie2076 smartie2076 self-assigned this Aug 26, 2021
@smartie2076
Copy link
Collaborator Author

Thank you for your question! I took the liberty to post the question here, but did not take the time to translate it into english, sorry.

Die Funktion dir Bestimmung von „pv_generation_max“ habe ich leider nicht gefunden.

That is because it is directly an argument of the function when it is called (last argument experiment[PEAK_PV_GENERATION_PER_KWP]):

e_flows_df = timeseries.get_pv(

@smartie2076
Copy link
Collaborator Author

Bei dem Definieren der Komponenten haben Sie bei pv in der Investment Methode die ep_costs als das Verhältnis von der Annuität [currency/kWp] zum peak_pv_generation [kWp] angegeben. Das heisst quasi normiert. Ich frage mich jedoch, ob man das so machen soll ? denn in der Doku habe ich das nicht gefunden bzw. falsch verstanden. Ich weiss dass die input für die pv_source normierte Werte sein sollten also in [kW/kWp]. Bezüglich der ep_costs, dachte ich jedoch die müssen einfach als Annuität in [currency/kW] wie bei den anderen Komponenten DieselGen und inverter. Das verwirrt mich leider. Es scheint nämlich,einen großen Unterscheid zu machen, da ich diese Ergebnisse bekommen habe.

Yes, we are using the normalized costs of PV in Offgridders, as this works best with oemof.

When you provide the specific generation timeseries that is needed to define a PV asset, its values usually are within [0,1]. However, there are instances that the specific generation in one timestep is >1 - that may be the case for ideal PV locations where the actual environmental conditions are better then the measurements in the lab. Oemof is not able to handle the optimization of assets that have an availablitiy timeseries, when the availability timeseries has somewhere values >1. Therefore, we need to normalize the specific generation timeseries. This happens here:

pv_norm = experiment[PV_GENERATION_PER_KWP] / peak_pv_generation

When we do that, however, we change the potenial generation from one unit of PV that oemof installs for the previosly defined costs. If the timeseries was always in [0,1[, that would mean that suddenly or PV got cheaper! That is not right. So for the optimization, we also need to adjust the costs per unit of PV - so that the normalized timeseries fits with a normalized price. This happens here:
ep_costs=experiment[PV_COST_ANNUITY] / peak_pv_generation

Wenn die so wie Sie die ep_costs as annuity [currency/kWp] geteilt durch peak_pv_generation [kWp] definierte dann wird die pv-Anlage deutlich überdimensioniert, ich bekommen circa 538 kWp als optimized sizing obwohl mein peak Demand bei 51 kW liegt. Durch die Teilung von peak_pv_generation sind dann ep_costs geringer also günstiger aus Perspektive der Optimierungsproblemes. Deswegen kommt es anscheinend zu der Überdimensionierung
Wenn ich aber die ep_costs nur als annuity [currency/kWp] definierte, also nicht durch die peak_pv_generation normiert dann bekommen ich 118.91 kWp als optimierte Größe. Also deutlich unterschiedlich.

As I understand, you are not using Offgridders for this, but own code?

This may also be an issue with your input values. If your PV plant exceeds your peak demand by factor 10, then the alternatives may be very expensive. It is hard to tell without any input data. You should look into:

  • What is the maximum output of my PV panels during the day in summer and in winter? How much does that exceed the peak demand?
  • Is your system fully renewable?
  • What are the specific costs to supply your system with electricity from diesel generators or electricity from the grid? What are the specific costs (per kWh) for PV generation?
  • If you have a great PV location, is your timeseries at any point >1?

In dem code „G3_oemof_evaluate.py“ haben Sie zur Erhaltung der PV-Größe in kWp mit dem pv_generation_max je nach ob >1 oder <1 multipliziert oder geteilt. Ich habe leider nicht verstanden, ob man das so umsetzen soll und wie „pv_generation_max“ definiert ist ? Die Funktion dir Bestimmung von „pv_generation_max“ habe ich leider nicht gefunden.

As described above, oemof (or rather the cbc-solver), does not deal well with optimizing assets that have an availability timeseries and in that values >1. It leads to weird results. You need to ask in the oemof repo (or search for issues) or at the openmod for more info though. Therefore, to make Offgridders able to deal with all kinds of input timeseries, we needed to introduce the normalization.

@JassemKh JassemKh mentioned this issue Aug 26, 2021
Closed
@JassemKh
Copy link

JassemKh commented Aug 26, 2021

thank you very much for your reply and posting that here! I really appreciate it!
yes, I'm using my own code but at the same I'm considering Offgridders as a reference.

this is a short overview about the input data concerning or the way I proceeded

  1. Firstly I used https://www.renewables.ninja to provide time series pv data (hourly 8750) for a certain location (I choose 1 kW as a capacity). The peak generation so the maximum pv output is 740 kW.

  2. secondly I normalised from renewables.ninja provided pv data dividing through the maximum output 740 kW in excel, so I got normed values in kW/kWp, witch are within [0,1]. I took this data as feedin in the pv component in oemof.

  3. the energy system I build is an offgrid system using pv as renewable energy source together with a diesel generator and a battery. the peak demand (hourly data) is 51.70 kW, the maximum pv output with 740 kWp exceeds the peak demand obviously ( 14 times higher than the peak demand). this a point what actually I did not take into consideration and I though its not relevant how much maximum pv output the exceed the peak demand. Maybe this is the mistake.

  4. I used a random specific costs for the components the annuity for pv and diesel are 205.41 USD/kWp and 13.66 USD/kW respectively. For the battery the annuities are 12.26 USD/kW and 11.02 USD/kWh respectively. I should definitely use more realistic data but just in order to have an idea.

  5. I assumed 0 specific costs (per kWh) for diesel pv generation. As ep_costs for pv I tried to use normalized price as the way you did (pv annuity divided by the maximum input: 205.41 USD/kWp divided by 740 KWp) but as I mentioned I still get an over dimensioned pv capacity as an optimised result --> 538 kWp, with 0 kW for diesel.

In contrast to Offgridders I saw some another Oemof examples where the economic tool of oemof was used without normed costs for pv, that I've got bit confused.

Do you think I should take another input pv data so that the maximum pv output does not exceed the peak demand or what do you recommend me ? I'm thinking about how can I mitigate this problem concerning over designed pv capacity.

I am very grateful for your help.

@smartie2076
Copy link
Collaborator Author

Hi @JassemKh this question is very general and does not relate to Offgridders specifically anymore. You wrote me that it is solved already by now, but if you have follow-up questions, it is better to ask them at the openmod.forum.

@JassemKh
Copy link

Hi @smartie2076
yes I did! I asked this question here before I used openmod.forum.
sorry if it caused some confusion!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants