NREL / ssc

SAM Simulation Core (SSC) contains the underlying performance and financial models for SAM
BSD 3-Clause "New" or "Revised" License
79 stars 84 forks source link

Module modeled loss is positive #197

Closed nickdiorio closed 5 years ago

nickdiorio commented 5 years ago

Describe the bug There are certain instances I've seen where the reported module loss is positive. Baseline-series6.zip

To Reproduce Steps to reproduce the behavior:

  1. Open the attached .sam file in the develop branch of ssc and SAM
  2. Click on the case "Case C.."
  3. Run the simulation
  4. Observe a +0.85% gain in the module loss

Expected behavior A negative module loss

Screenshots If applicable, add screenshots to help explain your problem. image

Desktop (please complete the following information):

janinefreeman commented 5 years ago

Does this happen in the current release also?

nickdiorio commented 5 years ago

Good question, I'll do some more testing!

nickdiorio commented 5 years ago

This appears to be be due to the way the module model loss is calculated, which is:

'loss' = annual_dc_nominal - annual_dc_gross - annual_snow_loss - annual_mppt_voltage_clipping' / annual_dc_nominal.

Issues:

  1. I believe this equation should remove annual_mppt_voltage_clipping, as it is already accounted for in annual_dc_gross.
  2. annual_dc_nominal is calculated by multiplying the nominal plane-of-array irradiance by the nominal module efficiency and area. Within the calculation of annual_dc_gross, there are time steps where the module efficiency exceeds the nominal efficiency due to the air mass modifier. This implies that the air-mass modifier can provide a boost to the overall irradiance, or that the air-mass modifier is incorrectly applied.

There are several potential problems here which should be addressed. The most robust way would be to investigate why the air mass modifier is boosting the efficiency. Then, for clearer communication, these we should break the module losses into several components. This may not happen until the next release, but noting it for general interest.

nickdiorio commented 5 years ago

Note, in case it wasn't clear, the reason the loss is positive is because annual_dc_gross exceeds annual_dc_nominal.

mikofski commented 5 years ago

I believe it is correct for the instantaneous module efficiency to increase above the nominal value at times when the spectral mismatch is greater than one.

This implies that the air-mass modifier can provide a boost to the overall irradiance, or that the air-mass modifier is incorrectly applied.

I believe a more correct interpretation is that there are times when the incident solar spectrum matches the quantum efficiency and improves the module efficiency. It's not that there's more light; it's that there's more of the color of light that the module can effectively convert to electrons.

cc @cwhanse and @jdnewmil

jdnewmil commented 5 years ago

There are multiple ways for deviations from STC nominal performance to yield improved performance. Very cold temperatures, modules with high series resistance that implies reduced performance at STC but operated at low irradiance, spectral "match"... it is even possible for IAM to exceed 1.0 by very small amounts on textured glass. That said, I have not investigated this particular report so cannot comment on its merits. (We also give credit for the positive bias introduced by positive tolerance binning.)

nickdiorio commented 5 years ago

@mikofski , @jdnewmil , thanks for your quick insights, that's very helpful. I'm going to investigate today to confirm that we are applying air-mass modifications correctly. I'll compare how PVLIB is applying them and verify that we are doing a similar treatment.

Currently our procedure in the CEC 6-parameter module model is to derate the effective plane-of-array irradiance by the air-mass modifier in the following way:

image

Where: image

cwhanse commented 5 years ago

@nickdiorio Agree with @jdnewmil @Mikofski here. I think the error, if there is one, is calling the spectral modifier a loss. It is not like soiling or reflections which by definition only reduce irradiance reaching the cells. The spectral modifier (I don't like the 'mismatch' adjective here but it is customary) scales the photocurrent relative to AM 1.5. Photocurrent can increase or decrease as spectrum changes, as @mikofski says.

nickdiorio commented 5 years ago

Thanks @cwhanse , that's a good point. I'll do some testing and comparison with PVLIB and see if we can more clearly communicate that this is a modifier relative to AM 1.5, not necessarily a loss.

janinefreeman commented 5 years ago

I agree with @mikofski that instantaneous module efficiency can be greater than nominal efficiency, and the same thing for spectral modifier. However, given that the value in the graph is an annual loss term, I consider it highly unlikely for it to actually be a negative loss throughout a whole year. I would guess this is a bug. However, I would not be surprised if it's only a bug in the way that annual loss is calculated, and not in the actual way the models themselves are applied in SAM, since the calculations for those loss diagrams (the line of code @nickdiorio identified as being a problem) are not particularly robust.

mikofski commented 5 years ago

@nickdiorio Thanks for identifying this issue and for doing the work to take a deeper look into it's cause.

I think it would be very interesting to see the daytime values of the 8760 calculated for airmass and for the "spectral modifier" f1. Figure 6 in the Sandia PV Array Performance Model shows that for Si modules, this peaks at 1.05 at about 3.5 atmospheres, but for thin-film it's the opposite, f1 peaks at 1.025 at 1-atmosphere and decreases as airmass increases. image

Another thing that might be interesting is to check that the coefficients of the 4th order polynomial f1 are stable in the expected range of airmass, say from 0.5 to 6.5 atmospheres. For example, if I plot Si and CdTe modules from the SAM database, I get these curves, which look like the ones from SAPM Fig 6. airmass-polynomial

nickdiorio commented 5 years ago

@mikofski , it shouldn't be too difficult for us to output these values if we aren't currently, thanks for the suggestion. That should give us some more data to confirm that we are seeing reasonable calculations. I'm hopeful I can spend a good chunk of today continuing to investigate this and do some comparisons with pvlib. I'll post if I find anything interesting!

janinefreeman commented 5 years ago

Update:

  1. [unrelated] the original SAM file built in Beta version 2018.9.13 didn't successfully update to current release branch (a separate bug to investigate). I checked out SSC and SAM 2018.9.13 Beta tags on my machine and was able to run the file.
  2. Further investigation yields several things contributing to the positive value for module modeled loss: i. Kansas City MO (the weather file used in this case) has temp/irradiance values that correspond to very low module temperature losses ii. Module cover losses used to be a decent chunk of the module modeled loss, but since they are now broken out separately, module modeled losses are lower all around iii. [the part that I think is a bug] There may be a bug in the "CEC performance model with user entered specifications" model. I get a ~0.7% difference in annual energy when the ONLY difference between two cases is the 'module_model' flag. Confirmed creating SDKtool scripts for both cases and comparing the two files (see attached LK scripts). The user-entered model reports higher output, probably contributing to the positive module modeled losses seen in the SAM file. This possible bug was also present in the 2017.9.5 release of SAM (example file confirming this attached). I have not investigated the cause of these differences yet, that's next on my list! Bug update.zip
dguittet commented 5 years ago

Judging by the discussion on air mass modification changing the effective poa irradiance reaching the module, shouldn't the module efficiency calculation use that modified poa value?

Annual_dc_nominal is calculated by as (inp_rad * mod_eff / 100), where the inp_rad is the sum of annual poa_eff and mod_eff is calculated at STC. Currently, the poa_eff values are without air mass modification. I added the second line below to account for air mass modifier effects:

ipoa_front[nn] *= out.AOIModifier;
ipoa_front[nn] *= out.airMassModifier;
...
ts_accum_poa_total_eff += ((radmode == Irradiance_IO::POA_R) ? ipoa[nn] : 
     (ipoa_front[nn] + ipoa_rear_after_losses[nn])) * ref_area_m2 
     * Subarrays[nn]->nModulesPerString * Subarrays[nn]->nStrings;

This resulted in an annual_dc_module_loss_percent of -0.94, which is an even higher module "gain". I think this supports the small contribution of sometime large air mass modifiers. Perhaps the driving factor comes from modeling far off STC assumptions?

mikofski commented 5 years ago

Since we're on the topic, SAM should really adopt the FirstSolar spectral correction that also uses precipitable water, but of course that should be it's own separate issue 😉

cwhanse commented 5 years ago

@dguittet @mikofski for spectral response measurements, there are concepts of external and internal quantum efficiency - these are different quantities. As I understand it, external quantum efficiency is basically power / plane of array irradiance, whereas internal efficiency is power / irradiance reaching the cells. Both quantities are informative. I think it the important aspect is that SAM is clear which irradiance is being used to calculate efficiency.

janinefreeman commented 5 years ago

@mikofski Integrating the precipitable water spectral model already is its own separate issue: #24 :)

janinefreeman commented 5 years ago

Also, @dguittet demonstrated to me that I was comparing the wrong variables when I identified a possible bug above- I forgot that there are separate, co-existing input variables for the CEC database option versus the user-entered 6-parameter option in the LK scripts created by SAM that you have to match up between the two models. Fixed SAM file with the two cases matching within the bounds of UI rounding errors attached here. Thanks Darice! fixed.zip

dguittet commented 5 years ago

@mikofski @janinefreeman Yes there are definitely improvements to the module model we'd like to get to! Thanks @cwhanse for the explanation.

Here are some plots showing the module efficiency versus ambient temperature and nominal poa (the plot with cell temperature and poa after module cover looked very similar). The gray points are where the module efficiency is less than the nominal efficiency of 15.9%.

eff_vs_ambtmp_poanominal_plot

We do not have any measured data in that region, since we do have data for 2 CdTe modules but they do not have many points in that region. In the plot below, all the points have less than nominal efficiency.

measuredmodule__eff_vs_ambtmp_poanominal_plot

What we do know from analysis of that data is that for the 6 parameter single diode model as implemented in SAM, large errors are mostly correlated with low irradiance levels.

6parerrorbycondition_cdte

cwhanse commented 5 years ago

@dguittet I'm having a bit of trouble with the figures you just posted. Are you saying that the modeled efficiency is greater than the observed efficiency at low irradiance? Also, are the coefficients for the 6par model taken from the SAM (CEC) database, or were they developed specifically for the CdTe modules in that mPert dataset?

dguittet commented 5 years ago

@cwhanse In the first plot, the colored points show where the modeled efficiency is greater than the nominal efficiency for the module in the .sam project. I believe these coefficients are not from the database. Perhaps @nickdiorio can say more on what module they describe.

The second and third plots are using the measured modules from the linked dataset. The first one shows that there are no points where the modeled efficiency exceeded the nominal. Here's a better-labeled version of the third plot. And yes it does show that the modeled efficiency tended to be higher than measured efficiency at low irradiance and temp, at least for those 2.

6parerrorbycondition_cdte

All this was to say, I don't have enough knowledge to say whether or not this behavior is expected.

janinefreeman commented 5 years ago

The detailed discussion here has convinced @nickdiorio and I that as @cwhanse points out, this is not a bug, but actually an error in describing the phenomenon as a loss. We plan to break out various sources of module losses/gains in next year's release, so I'm going to close this issue and reference the great discussion here in the new issue I create for why we need to break out module performance losses separately. :)