qpv-research-group / solcore5

A multi-scale, python-based library for the modelling of solar cells and semiconductor materials
https://www.solcore.solar/
Other
133 stars 74 forks source link

Generating Metal Mask in Quasi-3D model #167

Closed Prathamesh-Sahasrabudhe closed 3 years ago

Prathamesh-Sahasrabudhe commented 3 years ago

Please, confirm the following:

What’s the question? Please, be concise and straight to the point

I am trying to implement the Quasi 3D model for a simple c-Si solar cell. The illumination mask is the same as used in the example in the documentation: masks_illumination.png The original unit cell size is 30.75mm x 30.75mm
The original RGB metal mask is: mask_30.75mmx30.75mm.png The resized 120x120 pixels RGB mask is: mask_rgb_120x120.png The grayscale converted 120x120 pixels mask is: mask_grayscale_120x120.png The complemented 120x120 mask is: mask_grayscale_complement_120x120.png

However, when I try to implement the code: hq.py it does not compile correctly. I am speculating on the following reason. Please help me identify the issue.

  1. Is the grayscale conversion of the image not correct? As compared to the metal mask in the example given in the documentation, my image seems to be duller. The metal grid lines aren't as "white"

The solar cell has the following parameters : Original size 156mmx156mm. We have taken 1/5th of the cell here i.e. 30.75mmx30.75mm unit cell Due to this the pixel size has been set as 30.75mm/120 The area of this unit cell is 61.075e-4m^2 The J01 and J02 values are used from experimental data J01 = 702e-11 A/m^2 J02 = 25.9E-5 A/m^2 Using these values of J01 and J02 and equation 44 in your paper "Solcore: a multi-scale, Python-based library for modelling solar cells and semiconductor materials" I have obtained reff = 0.84. I have taken jref = jsc = 372 A/m^2 Other data has been experimentally taken.

****Can you also let me know how you have generated the metal mask in the example given in the documentation? Have you used any software like Griddler/PVMOS/AutoCAD ?

Additional information Add any other relevant information that could help us answering your question, E.g.:

Error_Message_Qusi_3D_Model

hq.txt imgprocessing_1.txt imgprocessing_2.txt imgprocessing_3.txt

dalonsoa commented 3 years ago

Hi Prathamesh, thanks for your query. I'm investigating this, now. One possible consequence of having a "direct" greyscale conversion from a colour image is that the colours will be converted to an intermediate grey value. The electrical mask in the example has 1 for the electrical pads, 0.5 for the metal fingers and 0 for the illuminated areas. This translate to 255, 128 and 0 when transformed into an integer array. Solcore takes any value above 200 as an electrical pad (with no sheet resistance in the metal there; blocks light) and any value between 50 and 200 as a shadow (with electrical resistance in the metal; blocks light). It might be that your conversion to greyscale leaves everything under 55.

However, that is not the source of your error, but the fact that your mask_grayscale_complement_120x120.png image has 3 channels and results on an array with shape (120, 120, 3). Solcore expects a 2D array, not a 3D array.

Therefore, please try the following:

Please, let me know if this helps to solve the issue.

Prathamesh-Sahasrabudhe commented 3 years ago

Respected Professor,

Sorry for the delayed response. I switched to MATLAB to generate the grayscale image. What I am doing is that in a 120x120 image, I am accessing each and every pixel value and manually setting it as 0,0.5, 1 This has been giving me incrementally better results. Please find the code below.

Width of fingers = 4.5e-5 m --> 0.17 pixel Width of busbar = 6e-4 m --> 2.3 pixel

Since I am accessing individual pixel values, I have to deal with whole numbers. Hence this overestimates the finger and busbar width (I am using 1 pixel for fingers and 3 for busbar).
Generate_Mask_120x120.txt