pvlib / pvlib-python

A set of documented functions for simulating the performance of photovoltaic energy systems.
https://pvlib-python.readthedocs.io
BSD 3-Clause "New" or "Revised" License
1.12k stars 950 forks source link

Support for HJT modules #2057

Open fredrbl opened 1 month ago

fredrbl commented 1 month ago

As far as I can see, the pvlib.ivtools.sdm.fit_cec_sam function does not accept any form of HJT celltype. Would it make sense to include this?

Context: I am trying to use a PAN file with pvlib. One PAN file have Technol=mtHIT, i.e a HIT module. And here is the issue, how to use this in the SDM in pvlib? The pvlib.ivtools.sdm.fit_cec_sam function does not accept any form of HJT celltype. More in general, are there any support for getting CEC parameters for HJT (or HIT) modules?

I see that in the CEC module database, there are several HJT modules. All of them are marked as Monocrystalline ("Mono-c-Si") in the database, and I can run a SDM with this. However, there are no information in the PAN file that says this. Is it a safe assumption to map all Technol=mtHIT to Monocrystalline when getting the CEC SDM parameters?

kandersolar commented 1 month ago

This thread on the google group discusses the same question (what cell_type to use for HJT in fit_cec_sam): https://groups.google.com/g/pvlib-python/c/6AdD14aSPlc/m/Dbx8B--kAwAJ

A related question: if you have a PAN file, why not use the PVsyst SDM instead of the CEC SDM?

cwhanse commented 1 month ago

fit_cec_sam is merely a convenience to use to CEC fitting tool in SAM. I think SAM is fitting HIT/HJT modules as if they were mono-c-Si, see the entry for "SANYO ELECTRIC CO LTD OF PANASONIC GROUP HIT-N210A01". You can try getting CEC coefficients that way.

And as a teaser, a colleague here at Sandia will present on this subject (converting between single diode models) at PVSC in two weeks.

markcampanelli commented 1 week ago

@fredrbl I did a fitting intercomparison with 9 modules recently, and the one HIT module (from Panasonic) was a distinct outlier in quality of fit to the particular SDM that I used. In those fits I allowed the band gap to vary as a fitting parameter (which I think is what the Technol parameter basically controls in PVsyst), and even this flexibility did not produce nearly as good of fits as for the 8 x-Si modules. I think examining SDM fits for HJT technologies is worth a closer look at this point.

mikofski commented 1 week ago

Here’s a mapping of band gaps and technology. https://myworkspace.dnv.com/download/public/renewables/solarfarmer/manuals/latest/CalcRef/Theory/ModelsOfCellBehaviour.html#effective-band-gap

I believe hetero-junction cells (with intrinsic thin film layer) can be modeled with band gap energy similar to cSi, although you may also need to account the low light efficiency by adjusting the shunt resistance.

markcampanelli commented 3 days ago

@mikofski I always forget that SolarFarmer arguably has better documentation of PVsyst’s model than PVsyst 🤣.

cwhanse commented 3 days ago

@fredrbl I'm not sure we've addressed your concern. Can you let us know if the discussion has helped clarify and perhaps close the issue?

fredrbl commented 9 hours ago

Hello @cwhanse, sorry for the delay here. Sort of! On the one hand, it seemed OK to set Technol to Monocrystalline for the HJT cases, but then I got worried when I saw @markcampanelli comment about the outlier. So I am still unsure how "off" the results might be with the assumption.

And! @kandersolar , what function do you mean when PVsyst SDM? Are you referring to pvlib.ivtools.sdm.fit_pvsyst_sandia? From this comment: A related question: if you have a PAN file, why not use the PVsyst SDM instead of the CEC SDM?. If so, I don't have a good reply; its just the way we do our simulations (we don't always have the PAN file for panels, some times we just have to type in the necessary parameters from the data sheet)

kandersolar commented 5 hours ago

I meant pvlib.pvsystem.calcparams_pvsyst, combined with pvlib.pvsystem.singlediode. Sticking with the PVsyst model, there's no (technical) need to call some kind of fit_ function, since the PAN file already supplies the necessary parameters. But if a PAN file is not always available, and you want to use an approach that works in all cases, then the process you describe seems reasonable to me.