Closed nickwg03 closed 4 years ago
@dguittet does SAM already calculate clipping on a timestep by timestep basis? If not is there any easy way to get clipping out of SAM or should we just compute it in reV as Grue requested?
It doesn't for PVWattsv7 but does for Pvsamv1. I don't think the solution above would work because the PVwatts ac
output is post-clipping.
I can add a clipping time series output to PVWattsv7 for our imminent release.
Also happy to support and review a PR if someone wants to add time series inverter losses to the PVWatts outputs :)
@dguittet how would we do that? Is there a clipping limit input to pvwatts? I was thinking we would have to run a simulation for both the model with and without clipping then diff the profiles. This would be difficult in our architecture so thats why we're reaching out to see if you have access to the "diff" on the backend.
Since the ac
output is post-clipping, shouldn't dc - ac
give the power that is forgone due to clipping? The clipped
profile calculated using clipped = np.where(ac < ac.max(), 0, dc - ac)
looks like what I'd expect when applied for a single NSRDB pixel: https://www.evernote.com/l/AKpG4LiF_WpJ57R74ygivcCe9ATtWH--6Vo
@patrickbrown4, does this assume that there is a DC rating on the inverter that would be less than the DC nameplate? I thought that you only specified a DC nameplate for the panel and a dc-ac ratio for the inverter, resulting in a DC power production that is at maximum equal to the DC nameplate and never greater than an inverter rating (so no clipping). So is there an inverter rating input that would give us a clipping difference between DC and AC output beyond just the scaling ratio?
My knowledge of clipping is very limited so feel free to correct my understanding :)
Isnt this inverter size input what I'm looking for? Without being able to change this value, the inverter will always be perfectly sized to the DC nameplate capacity? So the clipping will only be due to the dc_to_ac_ratio
?
https://github.com/NREL/ssc/blob/develop/ssc/cmod_pvwattsv7.cpp#L1194 The clipping loss is calculated in this line, but isn't exported as a timeseries.
Timeseries output arrays are initialized here: https://github.com/NREL/ssc/blob/develop/ssc/cmod_pvwattsv7.cpp#L701
@dguittet in pvwattsv7 can we input an inverter rating independently of the panel's DC rating? If we can't (as it appears in the gui and sdk tool), then the clipping won't be very interesting i dont think.
@grantbuster Clipping is a function of the DC to AC ratio. If the PV is oversized then the DC output will more often be greater than the inverter's max DC input. The rated inverter size is computed from dc to ac ratio.
@grantbuster Technically there could be clipping even with a dc_to_ac_ratio
of 1, given that PV DC nameplate power is defined at 1000 W/m^2 and sometimes irradiance goes higher than that. But it's primarily due to the dc_to_ac_ratio
. Typical is ~1.3; some systems have dc_to_ac_ratio
> 1.5 (https://emp.lbl.gov/sites/default/files/2020_utility-scale_solar_data_update.pdf), which would give quite a lot of clipping.
Okay thanks for all this info y'all! Will chat with Grue and see what we want to do from the reV side.
@nickwg03 and @patrickbrown4 this is being implemented in #243 under output_req 'clipped_power' I'll let you know once we release a new version with it.
Implemented, releasing in v0.4.36
Why this feature is necessary: For the PV+battery modeling, we’d like to know the power being clipped by the inverter, as that power can be sent to the battery without affecting the PV-to-grid output. I thought we’d be able to calculate the clipped power in hourlize post-processing, but since the reV outputs are aggregated over multiple sites (some of which may be clipped in a given timestamp and others not), I can’t extract a definitive clipping estimate from the aggregated profiles. If I try using the same method for the aggregated profiles as for a single pixel I end up with ~50% lower clipping.
Could we add clipped power as an additional profile output from reV?
A possible solution is: One liner:
clipped = np.where(ac < ac.max(), 0, dc - ac)
Charge code GMLC.10246.09.05.01
Urgency / Timeframe Not urgent, but within the next month would be helpful