Exemplo n.º 1
0
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")
Exemplo n.º 3
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
 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
Exemplo n.º 5
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
#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.)')
Exemplo n.º 7
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, 
Exemplo n.º 8
0
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')
Exemplo n.º 9
0
    '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: