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 Abs_eff(lam, EM, solarconc, T): AM = datalib.AM(lam) upper = np.amax(lam) BBs = datalib.BB(lam, T) TE = BBs * EM alpha = solarconc * (numlib.Integrate(AM * EM, lam, 100e-9, upper)) beta = np.pi * numlib.Integrate(TE, lam, 100e-9, upper) return (alpha - beta) / (alpha)
def IdealSource(lam, T): ### compute blackbody spectrum at current T rho = datalib.BB(lam, T) ### get photopic luminosity function ph = datalib.PhLum(lam) ### ideal thermal emission is product of the two TE_ideal = ph * rho return TE_ideal
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 thermal_emission_ea(self): ### Temperature might change, update BB spectrum self.BBs = datalib.BB(self.lambda_array, self.T_ml) #temp = np.zeros(len(self.lambda_array)) for i in range(0, len(self.t)): ### Thermal emission goes like BBs(lambda) * eps(theta, lambda) * cos(theta) for j in range(0, len(self.lambda_array)): self.thermal_emission_array_p[i][j] = self.BBs[ j] * self.emissivity_array_p[i][j] * np.cos(self.t[i]) self.thermal_emission_array_s[i][j] = self.BBs[ j] * self.emissivity_array_s[i][j] * np.cos(self.t[i]) return 1
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
def optimal_spectrum(self, T): self.slab.T_ml = T self.slab.update() self.BBml = datalib.BB(self.slab.lambda_array, self.slab.T_ml) for i in range(0,len(self.slab.t)): for j in range(0,len(self.slab.lambda_array)): if (self.BBml[j]-self.e_amb[i][j]) > 0: # self.e_amb[j]: self.slab.emissivity_array_p[i,j] = self.slab.emissivity_array_s[i,j] = 1 else: self.slab.emissivity_array_p[i,j] = self.slab.emissivity_array_s[i,j] = 0 self.slab.emissivity_array = self.slab.emissivity_array_p[0,:] self.slab.thermal_emission_ea() self.slab.thermal_emission() self.slab.cooling_power() self.e_struct = self.slab.thermal_emission_array
def thermal_emission(self): ### Temperature might change, update BB spectrum self.BBs = datalib.BB(self.lambda_array, self.T_ml) ### Emissivity doesn't change unless structure changes self.thermal_emission_array = self.BBs * self.emissivity_array return 1
# 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, color = 'g',
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')
# 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: slab.emissivity_array_p[i, j] = slab.emissivity_array_s[i, j] = 1 slab.emissivity_array[j] = 1 else: slab.emissivity_array_p[i, j] = slab.emissivity_array_s[i, j] = 0 slab.emissivity_array[j] = 0 slab.thermal_emission_ea() slab.thermal_emission() slab.cooling_power() Tss = slab.steady_state_temperature() T_atm = datalib.ATData(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, BBamb[mask] * (1 - T_atm[mask])) plt.plot(slab.lambda_array[mask] * 1e6, BBml[mask] * slab.emissivity_array[mask]) plt.plot(slab.lambda_array[mask] * 1e6, slab.thermal_emission_array[mask], 'r:') 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")