Ejemplo n.º 1
0
def flow_balance(ne, TeV, ng, args):
    '''
    Function: flow_balance
    Difference of "charge flow rate" between inlet and outlets of the orifice.
    Should be zero (what comes in = what comes out)
    Inputs:
        - ne: plasma density (1/m3)
        - TeV: electron temperature (eV)
        - ng: neutral density (1/m3)
        - args: list of arguments necessary for the subfunctions called
    Outputs:
        - "Charge" flow rate balance (C/s = A)
    '''

    TgV, r, M, mdot = args

    mdot_A = mdot * cc.sccm2eqA  # Flow rate (eq-A)
    Ao = np.pi * r**2  # Orifice area (m2)

    # Neutral particle flux (A)
    vg = np.sqrt(cc.me / M) * cp.mean_velocity(TgV, 'e')
    gam_g = 1 / 4 * cc.e * ng * vg
    gam_g *= Ao

    # Ion flux (A)
    gam_i = J_i(ne, TeV, M)
    gam_i *= Ao

    # Balance
    ret = gam_g + gam_i
    ret -= mdot_A

    return ret
Ejemplo n.º 2
0
def ambipolar_diffusion_model(rc, ng, TiV, species='Xe'):
    """
    Implementation of Goebel's ambipolar diffusion model used for determination
    of the orifice- or insert-region plasma electron temperature based on the
    cathode geometry, neutral density and ion temperature (usually taken to be
    some constant value 2-4x the insert temperature).
    Inputs:
        - rc: cathode radius (m)
        - ng: neutral density (#/m^3)
        - TiV: ion temperature  (eV)
    Optional Input:
        - species, defaults to 'Xe'
            -NOTE: currently only works for xenon
    Output:
        Electron temperature (eV)
    """
    #NOTE: THIS SECTION WILL CURRENTLY ONLY WORK FOR XENON!!
    lhs = lambda TeV: (rc / cc.BesselJ01)**2 * (ng * xsec.ionization_xe_mk(TeV)
                                                * cp.mean_velocity(TeV, 'e'))

    rhs = lambda TeV: ((cc.e / cc.M.species(species)) * (TiV + TeV) /
                       (ng * xsec.charge_exchange(TiV, species) * cp.
                        thermal_velocity(TiV, species)))

    goal = lambda x: lhs(x) - rhs(x)

    TeV = fsolve(goal, x0=5.0)

    return TeV
Ejemplo n.º 3
0
def orifice_plasma_density_model(Id, TeV, TeV_insert, L, d, ne, ng, eps_i):

    Rp = plasma_resistance(L, d, ne, ng, TeV)
    Vori = cc.pi * d**2 * L / 4

    ve = cp.mean_velocity(TeV, 'e')

    num = Rp * Id**2 - 5 / 2 * Id * (TeV - TeV_insert)
    den = cc.e * ng * xsec.ionization_xe_mk(TeV) * ve * eps_i * Vori

    ne_bar = num / den
    return ne_bar
Ejemplo n.º 4
0
def nu_en_xe_mk(ng, TeV, xsec_type='variable'):
    """
    Mandell and Katz' expression for the electron-neutral collision frequency
    of xenon. Can either use the simple collision cross section (constant) or
    the variable one.

    Inputs:
    - ng: neutral density (1/m3)
    - TeV: electron temperature (eV)
    - xsec_type: The type of cross section model to use. Can either be
      "constant" or "variable". If "variable" uses the model from year 1999 and
      above. Otherwise uses a set value of 5 10^{-19} m2.

    Ouputs:
    - Electron-neutral collision frequency (s)

    References:
    - Mandell, M. J. and Katz, I., "Theory of Hollow Cathode Operation in Spot
    and Plume Modes," 30th AIAA/ASME/SAE/ASEE Joint Propulsion Conference &
    Exhibit, 1994.
    - Katz, I., et al, "Sensitivity of Hollow Cathode Performance to Design and
      Operating Parameters," 35th AIAA/ASME/SAE/ASEE Joint Propulsion Conference
      & Exhibit, 1999. http://arc.aiaa.org/doi/pdf/10.2514/6.1999-2576
    - Goebel, D. M. and Katz, I., "Fundamentals of Electric Propulsion,"
      Appendix D p.475, John Wiley and Sons, 2008.
    """
    # Depending on the type of cross-section the velocity is different
    # Mandell and Katz with a constant cross section use the thermal velocity
    # of electrons. Later models use the Maxwellian-averaged cross section and
    # therefore the mean Maxwellian velocity.
    if xsec_type == 'constant':
        # Thermal velocity of electrons
        ve = cp.thermal_velocity(TeV)
    elif xsec_type == 'variable':
        ve = cp.mean_velocity(TeV, species='e')
    else:
        raise ValueError

    # Cross section
    en_xsec = xsec.electron_neutral_xe_mk(TeV, xsec_type)
    # Collision freq.
    nu_en = ng * en_xsec * ve

    return nu_en
Ejemplo n.º 5
0
def ion_production(ne, TeV, ng, L, r, sigma_iz):
    '''
    Function: ion_production
    Calculate the total amount of ions produced in the volume by direct-impact
    ionization.
    Inputs:
        - ne: plasma density (1/m3)
        - TeV: electron temperature (eV)
        - ng: neutral density (1/m3)
        - L,r: length and radius of plasma column (m)
        - sigma_iz: ionization cross-section function (m2)
    Outputs:
        - Ion production (1/s)
    '''
    vol = np.pi * r**2 * L  # Volume

    sig_iz = sigma_iz(TeV)  # Cross-section term

    ve = cp.mean_velocity(TeV, 'e')

    return vol * sig_iz * cc.e * ne * ve * ng
Ejemplo n.º 6
0
def excitation_loss(ne, TeV, ng, L, r, eps_x, sigma_ex):
    '''
    Function: excitation_loss
    Calculates the total amount of power spent in excitation.
    Inputs:
        - ne: plasma density (1/m3)
        - TeV: electron temperature (eV)
        - ng: neutral density (1/m3)
        - L,r: length and radius of plasma column (m)
        - eps_x: excitation energy (eV)
        - sigma_iz: ionization cross-section function (m2)
    Outputs:
        - Excitation power loss (W)
    '''
    vol = np.pi * r**2 * L  # Volume

    sig_ex = sigma_ex(TeV)  # Cross-section term

    ve = cp.mean_velocity(TeV, 'e')

    el = eps_x * vol * sig_ex * cc.e * ne * ve * ng

    return el
Ejemplo n.º 7
0
def average_plasma_density_model(Id,
                                 TeV,
                                 phi_wf,
                                 L,
                                 d,
                                 ne,
                                 ng,
                                 phi_p,
                                 eps_i,
                                 h_loss=heat_loss()):

    phi_s = sheath_voltage(Id, TeV, phi_wf, L, d, ne, ng, h_loss)
    Rp = plasma_resistance(L, d, ne, ng, TeV)
    f_n = np.exp(-(phi_p - phi_s) /
                 TeV)  #edge-to-average ratio as defined by Goebel

    Aemit = L * cc.pi * d
    Vemit = L * cc.pi * d**2 / 4

    ### Calculate average plasma density
    # Numerator
    num = (Rp * Id**2 - 5 / 2 * TeV * Id + phi_s * Id)

    # Denominator
    ve = cp.mean_velocity(TeV, species='e')

    t1 = 1 / 4 * cc.e * f_n * TeV * ve
    t1 *= Aemit * np.exp(-phi_s / TeV)

    t2 = cc.e * ng * Vemit * (eps_i + phi_s) * xsec.ionization_xe_mk(TeV) * ve

    den = t1 + t2

    # Results
    ne_bar = num / den

    return ne_bar, phi_s
Ejemplo n.º 8
0
def random_electron_current_density(ne, TeV, phi_s):
    return cc.e * ne * cp.mean_velocity(TeV, 'e') * np.exp(-phi_s / TeV) / 4
Ejemplo n.º 9
0
def J_i(ne, TeV, M):
    ve = cp.mean_velocity(TeV, 'e')

    return 1 / 4 * cc.e * np.sqrt(cc.me / M) * ve * ne