Example #1
0
def test_region4_2():
    drop = droplet.Droplet(pressure=0.1)
    assert drop.region == 'Region 4'
    assert (drop.temperature - 0.372755919e3) <= TOL
    drop = droplet(pressure=1)
    assert drop.region == 'Region 4'
    assert (drop.temperature - 0.453035632e3) <= TOL
    drop = droplet(pressure=10)
    assert drop.region == 'Region 4'
    assert (drop.temperature - 0.584149488e3) <= TOL
Example #2
0
def test_region4_1():
    drop = droplet.Droplet(temperature=300)
    assert drop.region == 'Region 4'
    assert (drop.pressure - 0.353658941e-2) <= TOL
    drop = droplet(temperature=500)
    assert drop.region == 'Region 4'
    assert (drop.pressure - 0.263889776e1) <= TOL
    drop = droplet(temperature=600)
    assert drop.region == 'Region 4'
    assert (drop.pressure - 0.123443146e2) <= TOL
def entrainer(T, mdot):
    #assume everytime the kernel entrains 10 droplets, based on the fuel mass flow rate
    m10 = mdot * 1e-6
    m = m10 / 10.0
    fuel = 'A2'
    drop_tempo = droplet(1, fuel, T, 1)  #a "useless" droplet to get fuel info
    #calculate r based on mass put into the the kernel, right now, no statistically distribution of r
    r = np.power(3.0 / 4.0 / drop_tempo.rho / np.pi * m, 1.0 / 3.0)
    print(r)
    frac = 1
    num = 10
    d_arr = []
    #create 10 droplets of the same size that give the proper mass flow rate
    for i in range(0, num):
        d_arr.append(droplet(r, fuel, T, frac))
    return d_arr
Example #4
0
            droplet.m = droplet.m - 4.0*np.pi*droplet.k*droplet.r/droplet.cp*np.log(1.0+B)*dt
            if droplet.m < 0:
                pass
            else:
                mdot += 4.0*np.pi*droplet.k*droplet.r/droplet.cp*np.log(1.0+B)
                qdot += mdot*droplet.hfg                
                droplet.r = (droplet.m*3.0/4.0/np.pi/droplet.rho)**(1.0/3.0)            
            pass
               
    return mdot, qdot
     
d_array = []
for i in range(1,100):
    rad = np.random.random()*100*1e-6
    d_array.append(droplet(radius=rad))

dt = 1e-6
time = []
m_dot = []
q_dot = []
for i in range(1,700):
    print('In iteration:' + str(i))
    mdot, qdot = vaporize(1600, d_array, dt)
#    d_array.append(droplet(radius=i*100e-6))
    time.append(i*dt)
    m_dot.append(mdot)
    q_dot.append(qdot)
    
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
                pass
            else:
                droplet.r = (droplet.m * 3.0 / 4.0 / np.pi /
                             droplet.rho)**(1.0 / 3.0)
                mdot += qdot / droplet.hfg
            pass

        if droplet.m < 0:
            d_array.remove(droplet)
            pass
    return mdot, qdot


d_array = []

d_array.append(droplet(radius=50e-6))

dt = 1e-6
time = []
m_dot = []
q_dot = []
r = []
m = []
Temperature = []

for i in range(1, 600):
    #    print('In iteration:' + str(i))
    mdot, qdot = vaporize(500, d_array, dt)
    #    d_array.append(droplet(radius=i*100e-6))
    time.append(i * dt)
    m_dot.append(mdot)
Example #6
0
def execute():
    #==============================================================================
#     set up the cantera gases and reactors
#==============================================================================
    drop = droplet(50e-6, 'A2', 300, 1) #drop is defined only to use the drop properties
    #environment air
    gas_env = ct.Solution('a2.cti')
    gas_env.TPX = 300, ct.one_atm, 'O2:29,N2:71'

    gas_fuel = ct.Solution('a2.cti')
    gas_fuel.TPX = drop.ABP, ct.one_atm, 'POSF10325:1' #gaseous fuel at average boiling temperature

    gas_kernel = ct.Solution('a2.cti')
    gas_kernel.TPX = 4000, ct.one_atm, 'O2:29,N2:71'
    gas_kernel.equilibrate('HP')
    
    res_air = ct.Reservoir(gas_env)
    res_fuel = ct.Reservoir(gas_fuel)
    kernel = ct.IdealGasConstPressureReactor(gas_kernel)
    kernel.volume = 2.4e-8 #m^3

    mfc1 = ct.MassFlowController(res_air, kernel) #connect air reservoir to kernel
    mfc2 = ct.MassFlowController(res_fuel, kernel) #connect fuel reservoir to kernel

    mfc1.set_mass_flow_rate(6e-5)
    mfc2.set_mass_flow_rate(0)

    w = ct.Wall(kernel, res_fuel)
    w.set_heat_flux(0)
    w.expansion_rate_coeff = 1e8

    net = ct.ReactorNet({kernel})
    net.atol = 1e-10 #absolute tolerance
    net.rtol = 1e-10 #relative tolerance
#==============================================================================
#   endtime, time steps, and data to be stored    
#==============================================================================
    dt = 1e-6 #change time step for advancing the reactor
    endtime = 1000e-6
    mdot_fuel = 1.98e-6 #this number should be calculated based on equivalence ratio, kg/s
    
    droplets = []
    T = []
    time = []
    m = []
    m_dot = []
    q_dot = []
    droplet_count = []
    X_fuel = []
    X_O = []
    X_CO2 = []
    num_d = []
    
#==============================================================================
#     advance reaction
#==============================================================================
    print("Running simulation")
    for i in range(1,int(endtime/dt)):
        print (int(endtime/dt) - i)
        #entrain droplets every 1 microsecond
        droplets.extend(entrainer(400, 5.*mdot_fuel))  
        mdot, qdot = vaporize(gas_kernel.T, droplets, dt)
        
#        print(gas_kernel.T, mdot, qdot, len(droplets))
#        print(str(mdot) + str(qdot) + str(gas_kernel.T)+'  '+str(len(droplets)))
        mfc2.set_mass_flow_rate(mdot)
        w.set_heat_flux(qdot) #heat required to heat up the droplets during that time step
        
        net.advance(i*dt)
        
        num_d.append(len(droplets))
        #storing variables
        T.append(gas_kernel.T)
        time.append(net.time)
        m.append(kernel.mass)
        m_dot.append(mdot)
        q_dot.append(qdot)
        droplet_count.append(len(droplets))
        if gas_kernel.X[0] < 0:
            gas_kernel.X[0] = 0
        X_fuel.append(gas_kernel.X[gas_kernel.species_index("POSF10325")])
        X_O.append(gas_kernel.X[gas_kernel.species_index("O")])
        X_CO2.append(gas_kernel.X[gas_kernel.species_index("CO2")])
        
#==============================================================================
#   plotting important information      
#==============================================================================
    plt.plot([t*1e3 for t in time],T, linewidth=3)
    plt.xlabel('time(ms)', FontSize=15)
    plt.ylabel('Temperature (K)', FontSize=15)
    plt.show()
    
    fig, ax1 = plt.subplots()
    ax2 = ax1.twinx()
    ax1.plot([t*1e3 for t in time], X_fuel, color = 'red', linewidth = 3)
    ax1.set_xlabel('time (ms)', FontSize=15)
    ax1.set_ylabel('X_fuel', color='red', FontSize=15)
#    ax2.plot([t*1e3 for t in time], X_O, color = 'green', linewidth = 3)
    ax2.set_ylabel('X_CO2', color='green', FontSize=15)
    ax2.plot([t*1e3 for t in time], X_CO2, color = 'blue', linewidth = 3)
    plt.show()
    
    fig, ax1 = plt.subplots()
    ax2 = ax1.twinx()
    ax1.plot([t*1e3 for t in time], m_dot, color = 'red', linewidth = 3)
    ax1.set_xlabel('time (ms)', FontSize=15)
    ax1.set_ylabel('m_dot', color='red', FontSize=15)
    ax2.plot([t*1e3 for t in time], q_dot, color = 'green', linewidth = 3)
    ax2.set_ylabel('q_dot', color='green', FontSize=15)
    plt.show()
    
    fig,ax1 = plt.subplots()
    ax1.plot([t*1e3 for t in time], num_d, linewidth=3)
    ax1.set_xlabel('time(ms)', FontSize=15)
    ax1.set_ylabel('#droplets', FontSize=15)
    plt.show()
Example #7
0
import cantera as ct
import numpy as np
import matplotlib.pyplot as plt
from droplet import *
from entrainer import *
from vaporize import *
ct.suppress_thermo_warnings()

if __name__ == '__main__':
    d_vec = []  # this vector is going to store all droplets
    dt_vap = 1e-6  #time step to call vaporizer
    dt_r = 1e-8  #time step to call reactor
    drop = droplet(50e-6, 'A2', 300,
                   1)  #drop is defined only to use the drop properties
    end_time = 300e-6
    #environment air
    gas_env = ct.Solution('a2.cti')
    gas_env.TPX = 300, ct.one_atm, 'O2:29,N2:71'

    gas_fuel = ct.Solution('a2.cti')
    gas_fuel.TPX = drop.ABP, ct.one_atm, 'POSF10325:1'  #gaseous fuel at average boiling temperature

    gas_kernel = ct.Solution('a2.cti')
    gas_kernel.TPX = 4000, ct.one_atm, 'O2:29,N2:71'
    gas_kernel.equilibrate('HP')

    res_air = ct.Reservoir(gas_env)
    res_fuel = ct.Reservoir(gas_fuel)
    kernel = ct.IdealGasConstPressureReactor(gas_kernel)
    kernel.volume = 2.4e-8  #m^3
Example #8
0
    Gr = L**3*rho**2*g*del_T*beta/nu**2

    #Rayleigh # based on Grashof and Prandtl #'s
    Ra = Gr*Pr

    #Nusselt #, -- T.Yuge
    try:
        Nu = 2 + 0.43*Ra**0.25
    except:
        print('error occured at finding nusselt number')
    #convective heat transfer coefficient
    k = 91e-3 #thermal conductivity for air at ?1600K?
    h = Nu*k/L
    
    #establish the ordinary differential equation
    A = 4.0*np.pi*droplet.r**2.0
    V = 4.0/3.0*np.pi*droplet.r**3.0
    dTdt = (h*A*(Tenv - droplet.T) - mdot*droplet.hfg)/(droplet.rho*V*droplet.cp)
    return dTdt

r = float(input('droplet diameter(m):'))
endtime = float(input('endtime(s):'))
d = droplet(radius=r)
ts = np.linspace(0,endtime,100)
T = 300
Ts = odeint(dT_dt, T, ts, args=(d, 1600))
plt.plot(ts, Ts)
plt.xlim([0,0.0001])
plt.show()