def E_atm(theta, lam): ### emissivity starts with 1 - T of atmosphere T = datalib.ATData(lam) ### angular part is the emissivity raised to 1/cos(theta): b = 1. / np.cos(theta) Eatm = (1 - T)**b return Eatm
def plot_cooling(slab): # Look at cooling properties T_atm = datalib.ATData(slab.lambda_array) AM = datalib.AM(slab.lambda_array) # BBamb = datalib.BB(slab.lambda_array, slab.T_amb) # BBml = datalib.BB(slab.lambda_array, slab.T_ml) # plt.figure() # mask = (slab.lambda_array >= 3000e-9) & (slab.lambda_array <= 30000e-9) # plt.plot(slab.lambda_array[mask]*1e6, T_atm[mask]*100, 'k', alpha = 0.1, label = 'AM1.5 or \n Atmospheric \n transmittance') # plt.plot(slab.lambda_array[mask]*1e6, slab.emissivity_array[mask]*100, 'r', label = 'Structure \n absorption') # #plt.plot(np_slab.lambda_array[mask]*1e6, np_slab.thermal_emission_array[mask], 'red') # plt.xlabel('Wavelength (nm)') # plt.ylabel('Absorption (%)') # plt.tight_layout(rect=[-0.10,0,0.75,1]) # plt.legend(bbox_to_anchor=(1.04, 1)) # plt.show() # # plt.figure() # mask = (slab.lambda_array >= 250e-9) & (slab.lambda_array <= 3000e-9) # plt.plot(slab.lambda_array[mask]*1e6, slab.emissivity_array[mask]*100, 'r', label = 'Structure \n absorption') # plt.plot(slab.lambda_array[mask]*1e6, 100*AM[mask]/(1.4*1e9), 'k', alpha = 0.1, label = 'AM1.5 or \n Atmospheric \n transmittance') # plt.xlabel('Wavelength (um)') # plt.ylabel('Absorption (%)') # plt.tight_layout(rect=[-0.10,0,0.75,1]) # plt.legend(bbox_to_anchor=(1.04, 1)) # plt.show() print("Radiative Power (cooling) is ", slab.radiative_power_val, "W/m^2") print("Absorbed Solar Power (warming) is ", slab.solar_power_val, "W/m^2") print("Absorbed Atmospheric Radiation (warming) is ", slab.atmospheric_power_val, "W/m^2") print("Net Power flux out of the structure is ", slab.cooling_power_val, "W/m^2")
def __init__(self, structure): self.slab = multilayer(structure) self.slab.tmm() self.T_atm = datalib.ATData(self.slab.lambda_array) self.BBamb = datalib.BB(self.slab.lambda_array, self.slab.T_amb) self.e_amb = self.BBamb * (1 - self.T_atm) #self.e_struct = self.slab.thermal_emission_array #self.BBml = datalib.BB(self.slab.lambda_array, self.slab.T_ml) self.lda = self.slab.lambda_array
def __init__(self, structure): self.slab = multilayer(structure) self.slab.tmm() self.T_atm = datalib.ATData(self.slab.lambda_array) self.BBamb = datalib.BB(self.slab.lambda_array, self.slab.T_amb) self.e_amb = np.empty([len(self.slab.t),len(self.slab.lambda_array)]) for i in range(0,len(self.slab.t)): for j in range(0,len(self.slab.lambda_array)): angular_mod = 1./np.cos(self.slab.t[i]) self.e_amb[i][j] = self.BBamb[j]*(1-self.T_atm[j]**angular_mod) #self.e_struct = self.slab.thermal_emission_array #self.BBml = datalib.BB(self.slab.lambda_array, self.slab.T_ml) self.lda = self.slab.lambda_array
def Patm(EPS_P, EPS_S, T_amb, lam, theta, w): dlam = np.abs(lam[0] - lam[1]) ### Get normal atmospheric transmissivity atm_T = datalib.ATData(lam) ### Get BB spectrum associated with ambient temperature BBs = datalib.BB(lam, T_amb) x = 0 for i in range(0, len(w)): patm_som = 0 angular_mod = 1. / np.cos(theta[i]) for j in range(0, len(lam)): patm_som = patm_som + ( 0.5 * EPS_P[i][j] + 0.5 * EPS_S[i][j]) * BBs[j] * np.cos( theta[i]) * (1 - atm_T[j]**angular_mod) * dlam x = x + patm_som * np.sin(theta[i]) * w[i] return 2 * np.pi * x
#plt.plot(lda, A[:,1]*100,':', label = 'Abs. layer 5 \n (Ag reflector)') #plt.xlabel('Wavelength (nm)') #plt.ylabel('%') #plt.title('Transmission, reflection, and absorption at normal incidence') #plt.legend() #plt.show() ############################################################################## ############################################################################## #%% """ Plot TMM and measured absorption """ if (min(lda) > 1999): t_atmosphere = datalib.ATData(lda * 1e-9) fig = plt.figure() plt.plot(lda * 1e-3, t_atmosphere * 100, 'k', alpha=0.1, label='Atmospheric \n transmittance') plt.plot(lda * 1e-3, (1 - T - R) * 100, 'r', label='Device absorption') plt.plot(lda * 1e-3, A[:, 1] * 100, ':', label='Abs. $Si_{3}N_{4}$ NP \n (30%, Brugg.)') plt.plot(lda * 1e-3, A[:, 2] * 100, ':', label='Abs. $SiO_{2}$ NP \n (23.8%, Brugg.)')
# Change one of the layers to an effective index fill_fraction = 0.3 layer = 1 np_slab.layer_alloy(layer,0.3,'Air','Si3N4','Bruggeman', plot = False) layer = 2 np_slab.layer_alloy(layer,0.3,'Air','RC0_1B_SiO2','Bruggeman', plot = False) ############################################################################## ############################################################################## #%% ### Plot the emission properties if calc_cooling: np_slab.tmm() T_atm = datalib.ATData(np_slab.lambda_array) BBamb = datalib.BB(np_slab.lambda_array, np_slab.T_amb) BBml = datalib.BB(np_slab.lambda_array, np_slab.T_ml) colors = plt.rcParams['axes.prop_cycle'].by_key()['color'] ax1 = plt.figure() mask = (np_slab.lambda_array >= 3000e-9) & (np_slab.lambda_array <= 30000e-9) plt.plot(np_slab.lambda_array[mask]*1e6, BBamb[mask]*1e-6, 'k', label = 'Black body emittance') plt.plot(np_slab.lambda_array[mask]*1e6, BBamb[mask]*(1-T_atm[mask])*1e-6, 'b', label = 'Atmospheric emittance') plt.plot(np_slab.lambda_array[mask]*1e6, BBml[mask]*np_slab.emissivity_array[mask]*1e-6,'g', label = 'Structure emittance \n ($P_{300K} = 65 W/m^2$, $\Delta T_{max} = 30K$)') plt.fill_between(np_slab.lambda_array[mask]*1e6,0,BBamb[mask]*(1-T_atm[mask])*1e-6, color = 'b', alpha=0.5) plt.fill_between(np_slab.lambda_array[mask]*1e6,BBamb[mask]*(1-T_atm[mask])*1e-6,BBml[mask]*np_slab.emissivity_array[mask]*1e-6, where = BBml[mask]*np_slab.emissivity_array[mask]*1e-6 > BBamb[mask]*(1-T_atm[mask])*1e-6,
plt.ylabel('Net power flux (W/m^2)') plt.xlabel('SiO2 nanoparticle film thickness (um)') plt.title('30% F.F. NP SiO2 Film on 900nm Si3N4 on 200nm Ag') #%% plt.figure() plt.plot(thickness / um, CP) plt.ylabel('Net power flux (W/m^2)') plt.xlabel('SiO2 nanoparticle film thickness (um)') plt.title('35% F.F. NP SiO2 Film on 900nm Si3N4 on 200nm Ag') #%% # Calculate standard spectra related to radiative cooling AM = datalib.AM(np_slab.lambda_array) T_atm = datalib.ATData(np_slab.lambda_array) BB = datalib.BB(np_slab.lambda_array, np_slab.T_ml) ### plot results! plt.figure() mask = (np_slab.lambda_array >= 3000e-9) & (np_slab.lambda_array <= 30000e-9) plt.plot(np_slab.lambda_array[mask] * 1e6, T_atm[mask], 'cyan') plt.plot(np_slab.lambda_array[mask] * 1e6, np_slab.emissivity_array[mask], 'red') #plt.plot(np_slab.lambda_array[mask]*1e6, np_slab.thermal_emission_array[mask], 'red') plt.figure() mask = (np_slab.lambda_array >= 250e-9) & (np_slab.lambda_array <= 3000e-9) plt.plot(np_slab.lambda_array[mask] * 1e6, np_slab.emissivity_array[mask], 'blue') plt.plot(np_slab.lambda_array[mask] * 1e6, AM[mask] / (1.4 * 1e9), 'red')
'Thickness_List': [0, 0, 0], # You can not have the back reflector as the last layer!!! ### range of wavelengths optical properties will be calculated for ### values are stored in the array self.lam 'Lambda_List': [250 * nm, 30 * um, 1000], ## Calculate for explicit angular dependence 'EXPLICIT_ANGLE': 1, ## Calculate quantities related to radiative cooling 'COOLING': 1 } slab = multilayer(structure) slab.tmm() slab.T_ml = 300 slab.T_amb = 300 T_atm = datalib.ATData(slab.lambda_array) spec = np.zeros(len(T_atm)) for i in range(0, len(slab.t)): for j in range(0, len(slab.lambda_array)): # if T_atm[j]>0.01: # #spec[j] = random.randint(1,101)/100 # spec[j] = (0.3*np.cos(0.002*np.pi*j)+0.7)*0.1 # else: # spec[j] = 0 # if slab.lambda_array[j] > 6.3*um and slab.lambda_array[j] < 15*um: # slab.emissivity_array_p[i,j] = slab.emissivity_array_s[i,j] = spec[j] # slab.emissivity_array[j] = spec[j] # else: # slab.emissivity_array_p[i,j] = slab.emissivity_array_s[i,j] = spec[j] # slab.emissivity_array[j] = spec[j] if slab.lambda_array[j] > 7 * um and slab.lambda_array[j] < 14 * um: