Problem 5.3

Problem 5.3#

Fundamentals of Solar Cells and Photovoltaic Systems Engineering

Solutions Manual - Chapter 5

Problem 5.3

Using the tabulated refractive index for silicon provided in the data “Si_nk.txt.”

(a) Calculate the reflectivity of silicon as a function of wavelength.

(b) Calculate the reflectivity if the surface is textured so that the light impinges the surface twice.

(c) Which percentage of the global irradiance spectrum AM1.5 G corresponding to wavelengths below 1100 nm (i.e., useful for silicon solar cells) is reflected in each case?

First, we import the Python modules used

import math
import numpy as np
import matplotlib.pyplot as plt

We load the data for silicon refractive index and AM1.5G solar spectrum

# Load nk and solar spectrum data
# We assume the data is in the same folder as the notebook file

#Data columns: wavelength(nm) refractive_index extinction_coefficient
Si_nk = np.loadtxt("data/Si_nk.txt", skiprows=2, delimiter='\t')

#Data columns: wavelength(nm) spectral_irradiance (W·m-2·nm-1)
AM15G = np.loadtxt("data/am15g_G173_W.txt", skiprows=1, delimiter='\t')

Calculate the spectral reflectivity at normal incidence

nData = Si_nk.shape[0]
Rfl = np.zeros((nData,2))
Rfl[:,0] = np.arange(Si_nk[0,0], Si_nk[0,0]+nData, 1)

for x in range(nData):
    nSi = np.interp(Rfl[x,0], Si_nk[:,0],Si_nk[:,1])
    Rfl[x,1] = ((1-nSi)/(1+nSi))**2

Rfl_txtred = Rfl.copy()

Rfl_txtred[:,1] *= Rfl_txtred[:,1]

Plot the data

plt.plot(AM15G[:,0], AM15G[:,1], color='y', label='AM1.5G')
plt.plot(Rfl[:,0], Rfl[:,1], color='b', label='Reflectivity')
plt.plot(Rfl_txtred[:,0], Rfl_txtred[:,1], color='r', label='Rfl. textured')


plt.xlabel('wavelength (nm)', size=14)
plt.ylabel('R or spectral irradiance (W·m-2·nm-1)', size=14)
plt.ylim()
plt.legend()

# Save figure
plt.savefig("fig_S5.3.png", dpi=300)
../../_images/ffe539fd612a7a1067da5b1c81c3809e5d5ff3a33d94ed1623c4b2731d26f8f8.png
Rfl_power = Rfl.copy()
Rfl_power_txtred = Rfl_txtred.copy()
AM15G_SiRange = AM15G.copy()

for x in range(nData):
    Rfl_power[x,1] *= np.interp(Rfl_power[x,0], AM15G[:,0],AM15G[:,1])
    Rfl_power_txtred[x,1] *= np.interp(Rfl_power_txtred[x,0], AM15G[:,0],AM15G[:,1])
   
    if Rfl_power[x,0] > 1100:   #only up to bandgap of silicon
        Rfl_power[x,1]=0
        Rfl_power_txtred[x,1]=0
        AM15G_SiRange[x,1]=0
        

Total_W_Si = np.trapezoid( AM15G_SiRange[:,1], x= AM15G_SiRange[:,0], axis=0)

R_W = np.trapezoid(Rfl_power[:,1], x=Rfl_power[:,0], axis=0)
R_W_txtred = np.trapezoid(Rfl_power_txtred[:,1], x=Rfl_power_txtred[:,0], axis=0)

#print(Total_W)
print("Reflected power: " + f"{R_W:.1f}" + " W/m2 (" + f"{100*R_W/Total_W_Si:.1f}" + "%)" )
print("Reflected power with texturing: " + f"{R_W_txtred:.1f}" + " W/m2 (" + f"{100*R_W_txtred/Total_W_Si:.1f}" + "%)" )
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[5], line 15
     11         Rfl_power_txtred[x,1]=0
     12         AM15G_SiRange[x,1]=0
---> 15 Total_W_Si = np.trapezoid( AM15G_SiRange[:,1], x= AM15G_SiRange[:,0], axis=0)
     17 R_W = np.trapezoid(Rfl_power[:,1], x=Rfl_power[:,0], axis=0)
     18 R_W_txtred = np.trapezoid(Rfl_power_txtred[:,1], x=Rfl_power_txtred[:,0], axis=0)

File /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/numpy/__init__.py:333, in __getattr__(attr)
    330     "Removed in NumPy 1.25.0"
    331     raise RuntimeError("Tester was removed in NumPy 1.25.")
--> 333 raise AttributeError("module {!r} has no attribute "
    334                      "{!r}".format(__name__, attr))

AttributeError: module 'numpy' has no attribute 'trapezoid'

The effect in reducing the reflected light power is demonstrated.