rizer.electric_circuit.variable_resistance_models#

Implement multiple models for the resistance of a discharge channel.

The resistance of a discharge channel can be modeled using different approaches. This module provides four models for the resistance of a discharge channel:

These models can then be used in a circuit solver to compute current, voltage and resistance in the circuit.

Some comments refer to “the documentation”. The documentation is available in the repository in the file “resistance_models.pdf”.

Attributes#

u

Units used in the module.

Classes#

VariableResistorModel

Abstract class for the resistance of a discharge channel.

RompeWeizelResistance

Rompe-Weizel model for the resistance of a discharge channel.

VlastosResistance

Vlastos model for the resistance of a discharge channel.

BraginskiiResistance

Braginskii model for the resistance of a discharge channel.

ConstantResistance

Constant resistance model for the resistance of a discharge channel.

Module Contents#

rizer.electric_circuit.variable_resistance_models.u#

Units used in the module.

class rizer.electric_circuit.variable_resistance_models.VariableResistorModel(R_model: str, gap: float | int | None, k: float | int | None)#

Bases: abc.ABC

Abstract class for the resistance of a discharge channel.

Parameters:
  • R_model (str) – The model used for the resistor. Can be either “constant”, “Rompe-Weizel”, “Vlastos” or “Braginskii”.

  • gap (float | int | None) – The distance between electrodes, in m. Only used if R_model is “Rompe-Weizel”, “Vlastos” or “Braginskii”. If set, must be positive.

  • k (float | int | None) –

    The model parameter. Only used if R_model is “Rompe-Weizel”, “Vlastos” or “Braginskii”. If set, must be positive.

Notes

This class is abstract and must be subclassed to implement the method VariableResistorModel.compute_resistance_derivative().

List of subclasses:

See also

R_p: numpy.ndarray | None = None#

Value of the resistance of the plasma in the circuit at each time step.

abstractmethod compute_resistance_derivative(t: float, y: numpy.ndarray) numpy.ndarray#

Compute the derivative of the resistance of the plasma.

To be used in the ODE solver.

Parameters:
  • t (float) – Time at which the circuit is solved.

  • y (np.ndarray[float,float]) –

    Array containing the present values of the system variables:

    • y[0]=i_p (float): The current through the plasma.

    • y[1]=R_p (float): The plasma resistance.

Returns:

Array containing the derivative of the system variables:

  • dy[0]=di_p (float): The derivative of the current through the plasma.

  • dy[1]=dR_p (float): The derivative of the resistance.

Return type:

np.ndarray[float,float]

Notes

This method must be implemented in the child class.

class rizer.electric_circuit.variable_resistance_models.RompeWeizelResistance(gap: float | int, k_RW: float | int)#

Bases: VariableResistorModel

Rompe-Weizel model for the resistance of a discharge channel.

Parameters:
  • gap (float | int) – The distance between electrodes, in m.

  • k_RW (float | int) – The Rompe-Weizel model parameter, in V . s^(1/2) . m^(-1).

Notes

Assumption made in the Rompe-Weizel model:

  • Energy injected in the plasma is only used to produce new ion-electron pairs.

  • All losses (diffusion, radiation, elastic collision) are neglected (implies constant temperature).

  • There is no expansion of the plasma (implies constant surface area).

With these assumptions, the derivative of resistance of the plasma is given by:

\[\frac{dR_p}{dt} = -\frac{R_p^3}{2} \left(\frac{i}{k_{RW} \cdot gap}\right)^2\]

And the resistance of the plasma is given by:

\[R_p(t) = \frac{k_{RW} \cdot gap}{(\int_{-\infty}^t i^2(\tau) d\tau)^{\frac{1}{2}}}\]

The constant \(k_{RW}\) is given by:

\[k_{RW} = \sqrt{ \frac{\frac{3}{2} k_b T_e + e \phi_I}{2 \mu_e e}}\]

with:

  • \(k_b\) the Boltzmann constant,

  • \(T_e\) the electron temperature,

  • \(\mu_e\) the electron mobility,

  • \(\phi_I\) the ionization potential.

See [Rompe1944], [Weizel1947], [Castera2015] and [Rose2020] for more details.

Examples

Analysis of Thor4 generator data.

Analysis of Thor4 generator data.
compute_resistance_derivative(t: float, y: numpy.ndarray) numpy.ndarray#

Rompe-Weizel model for the resistance of a discharge channel.

Parameters:
  • t (float) – Time at which the circuit is solved.

  • y (np.ndarray[float,float]) –

    Array containing the present values of the system variables:

    • y[0]=i_p (float): The current through the plasma.

    • y[1]=R_p (float): The plasma resistance.

Returns:

Array containing the derivative of the system variables:

  • dy[0]=di_p (float): The derivative of the current through the plasma.

  • dy[1]=dR_p (float): The derivative of the resistance.

Return type:

np.ndarray[float,float]

Notes

The derivative of resistance of the plasma is given by:

\[\frac{dR_p}{dt} = -\frac{R_p^3}{2} \left(\frac{i}{k_{RW} \cdot gap}\right)^2\]

And the resistance of the plasma is given by:

\[R_p(t) = \frac{k_{RW} \cdot gap}{(\int_{-\infty}^t i^2(\tau) d\tau)^{\frac{1}{2}}}\]
get_electron_density(mu_e: float, S: float) numpy.ndarray#

Compute the electron density in the discharge channel.

Parameters:
  • mu_e (float) – Electron mobility in m^2 . V^(-1) . s^(-1).

  • S (float) – The area of the discharge channel in m^2.

Returns:

The electron density in the discharge channel in m^(-3).

Return type:

np.ndarray

Raises:

ValueError – If the circuit has not been solved yet.

Notes

The electron density in the discharge channel is given by:

\[n_e(t) = \frac{gap}{e \mu_e S R_p(t)}\]

For more details, see [Castera2015] and resistance_models.pdf

class rizer.electric_circuit.variable_resistance_models.VlastosResistance(gap: float | int, k_V: float | int)#

Bases: VariableResistorModel

Vlastos model for the resistance of a discharge channel.

Parameters:
  • gap (float | int) – The distance between electrodes, in m.

  • k_V (float | int) – The Vlastos model parameter. The units is in A^(1/5) . s^(3/5) . m^(-1).

Notes

Assumption made in the Vlastos model:

  • The plasma is fully-ionized (no variation of electron density, and Spitzer’s conductivity used).

  • The energy injected in the plasma is only used to increase the plasma temperature.

  • The plasma is not expanding (implies constant surface area).

With these assumptions, the derivative of resistance of the plasma is given by:

\[\frac{dR_p}{dt} = -\frac{3}{5} \left(\frac{1}{k_{V} \cdot gap}\right)^{\frac{5}{3}} R_p^{\frac{8}{3}} i^2\]

And the resistance of the plasma is given by:

\[R_p(t) = \frac{k_{V} \cdot gap}{(\int_{-\infty}^t i^2(\tau) d\tau)^{\frac{3}{5}}}\]

The constant \(k_{V}\) is given by:

\[k_{V} = \left(\frac{6}{5} n_e k_b\right)^{\frac{3}{5}} \left(\frac{\log(\lambda)}{a_{Spitzer}}\right)^{\frac{2}{5}} S^{\frac{1}{5}}\]

with:

  • \(n_e\) the electron density,

  • \(k_b\) the Boltzmann constant,

  • \(\log(\lambda)\) the Coulomb logarithm,

  • \(a_{Spitzer}\) the Spitzer conductivity constant,

  • \(S\) the area of the discharge channel.

See [Vlastos1972], [Castera2015] and [Rose2020] for more details.

Examples

Analysis of Thor4 generator data.

Analysis of Thor4 generator data.
compute_resistance_derivative(t: float, y: numpy.ndarray) numpy.ndarray#

Vlastos model for the resistance of a discharge channel.

Parameters:
  • t (float) – Time at which the circuit is solved.

  • y (np.ndarray[float,float]) –

    Array containing the present values of the system variables:

    • y[0]=i_p (float): The current through the plasma.

    • y[1]=R_p (float): The plasma resistance.

Returns:

Array containing the derivative of the system variables:

  • dy[0]=di_p (float): The derivative of the current through the plasma.

  • dy[1]=dR_p (float): The derivative of the resistance.

Return type:

np.ndarray[float,float]

Notes

The derivative of resistance of the plasma is given by:

\[\frac{dR_p}{dt} = -\frac{3}{5} \left(\frac{1}{k_{V} \cdot gap}\right)^{\frac{5}{3}} R_p^{\frac{8}{3}} i^2\]

And the resistance of the plasma is given by:

\[R_p(t) = \frac{k_{V} \cdot gap}{(\int_{-\infty}^t i^2(\tau) d\tau)^{\frac{3}{5}}}\]
get_temperature_evolution(log_lambda: float, S: float) numpy.ndarray#

Compute the temperature evolution in the discharge channel.

Parameters:
  • log_lambda (float) – Coulomb logarithm.

  • S (float) – The area of the discharge channel in m^2.

Returns:

The temperature evolution in the discharge channel.

Return type:

np.ndarray

Raises:

ValueError – If the circuit has not been solved yet.

Notes

The temperature evolution in the discharge channel is given by:

\[T_e(t) = \left(\frac{gap \log(\lambda)}{S A_{SPITZER} R_p(t)}\right)^{\frac{2}{3}}\]

For more details, see [Castera2015] and resistance_models.pdf

class rizer.electric_circuit.variable_resistance_models.BraginskiiResistance(gap: float | int, k_B: float | int)#

Bases: VariableResistorModel

Braginskii model for the resistance of a discharge channel.

Parameters:
  • gap (float | int) – The distance between electrodes, in m.

  • k_B (float | int) – The Braginskii model parameter, in V . A^(-1/3) . s . m^(-1).

Notes

Assumption made in the Braginskii model:

  • The plasma is fully-ionized (no variation of electron density, and Spitzer’s conductivity used).

  • The temperature of the plasma is constant.

  • Joule heating in the energy balance is completely spent on increasing the channel radius.

With these assumptions, the derivative of resistance of the plasma is given by:

\[\frac{dR_p}{dt} = -\frac{1}{gap k_B} R_p^2 i^{\frac{2}{3}}\]

And the resistance of the plasma is given by:

\[R_p(t) = \frac{k_{B} \cdot gap}{\int_{-\infty}^t i^{\frac{2}{3}}(\tau) d\tau}\]

The constant \(k_{B}\) is given by:

\[k_{B} = \left(\frac{\xi \rho_0}{4 \pi \sigma^2}\right)^{\frac{1}{3}}\]

with:

  • \(\xi\) a parameter depending on gas properties,

  • \(\rho_0\) the initial density of the plasma,

  • \(\sigma\) the Spitzer conductivity constant.

See [Braginskii1958], [Castera2015] and [Rose2020] for more details.

Examples

Analysis of Thor4 generator data.

Analysis of Thor4 generator data.
compute_resistance_derivative(t: float, y: numpy.ndarray) numpy.ndarray#

Braginskii model for the resistance of a discharge channel.

Parameters:
  • t (float) – Time at which the circuit is solved.

  • y (np.ndarray[float,float]) –

    Array containing the present values of the system variables:

    • y[0]=i_p (float): The current through the plasma.

    • y[1]=R_p (float): The plasma resistance.

Returns:

Array containing the derivative of the system variables:

  • dy[0]=di_p (float): The derivative of the current through the plasma.

  • dy[1]=dR_p (float): The derivative of the resistance.

Return type:

np.ndarray[float,float]

Notes

The derivative of resistance of the plasma is given by:

\[\frac{dR_p}{dt} = -\frac{1}{gap k_B} R_p^2 i^{\frac{2}{3}}\]

And the resistance of the plasma is given by:

\[R_p(t) = \frac{k_{B} \cdot gap}{\int_{-\infty}^t i^{\frac{2}{3}}(\tau) d\tau}\]
get_area_evolution(log_lambda: float, T_e: float) numpy.ndarray#

Compute the area evolution in the discharge channel.

Parameters:
  • log_lambda (float) – Coulomb logarithm.

  • T_e (float) – Electron temperature in K.

Returns:

The area evolution in the discharge channel.

Return type:

np.ndarray

Raises:

ValueError – If the circuit has not been solved yet.

Notes

The area evolution in the discharge channel is given by:

\[S(t) = \frac{gap}{\sigma R_p(t)}\]

with \(\sigma\) the Spitzer conductivity constant, given by:

\[\sigma = A_{SPITZER} T_e^{3/2} / \log(\lambda)\]

For more details, see [Castera2015] and resistance_models.pdf

class rizer.electric_circuit.variable_resistance_models.ConstantResistance(gap: None = None, k: None = None)#

Bases: VariableResistorModel

Constant resistance model for the resistance of a discharge channel.

Parameters:
  • gap (None) – The distance between electrodes, in m. Not used in the constant resistance model, but required by the parent class.

  • k (None) – The model parameter. Not used in the constant resistance model, but required by the parent class.

Notes

In this model, the resistance of the plasma is constant over time. Therefore, the derivative of the resistance is zero:

\[\frac{dR_p}{dt} = 0\]

And the resistance of the plasma is given by its initial value:

\[R_p(t) = R_p(0)\]

See [11] and the documention (“resistance_models.pdf”) for more details about the analytical solution.

References

compute_resistance_derivative(t: float, y: numpy.ndarray) numpy.ndarray#

Constant resistance for the resistance of a discharge channel.

Parameters:
  • t (float) – Time at which the circuit is solved.

  • y (np.ndarray[float,float]) –

    Array containing the present values of the system variables:

    • y[0]=i_p (float): The current through the plasma.

    • y[1]=R_p (float): The plasma resistance.

Returns:

Array containing the derivative of the system variables:

  • dy[0]=di_p (float): The derivative of the current through the plasma.

  • dy[1]=dR_p (float): The derivative of the resistance.

Return type:

np.ndarray[float,float]