Beispiel #1
0
 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
Beispiel #2
0
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)
Beispiel #3
0
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
Beispiel #5
0
    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
Beispiel #6
0
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
Beispiel #8
0
 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
Beispiel #9
0
# 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',
Beispiel #10
0
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')
Beispiel #11
0
        #            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")