1 Introduction

Modelling of electronic transport in nanometer systems requires a theory that describes open, quantum-statistical systems which cannot be provided simply by the Schrödinger equation. Several formulations of quantum transport have been employed, such as those based on the density matrix, non-equilibrium Green’s functions, and the Wigner function.

The Wigner function is a real-valued but not necessarily positive definite quasi-distribution, representing a quantum generalization of the Boltzmann distribution function. The Wigner function formalism is attractive as it provides the expression of quantum dynamics in a phase-space formulation, directly comparable with the classical analogue, more intuitive compared with the more abstract density matrix and Green’s function approaches.

At the same time the Wigner equation can be augmented by a Boltzmann-like collision operator accounting for the process of decoherence.

The first finite-difference-based solver appears in the mid 1980s (see [6] for a review), and more efficient solvers have been developed nowadays [2, 3, 7, 11, 24, 28]. We had to wait until the beginning of 2000, to have particle Monte Carlo (MC) solvers for the Wigner equation [20, 25]. From that period until now, several papers have been published on this subject (see [27] for a review) and, recently, very interesting device simulations have been provided [4, 19, 22].

In the realm of the particle Monte Carlo methods, we have focused on the so-called signed Monte Carlo method [21]. Here, the Wigner potential is treated as a scattering source which determines the electron-potential interaction, and consequently new particles with different signs are stochastically added to the system. Recently this method has also been be understood in terms of the Markov jump process theory [12, 17], producing a class of new stochastic algorithms. Algorithms that belong to this class are a standard time-splitting algorithm and a new no-splitting algorithm that avoids errors due to time-discretization [13, 16, 18]. The goal of this paper is twofold: i) to write, for the sake of clarity and dissemination purposes, a simplified set of rules for the splitting and no-splitting algorithms to help a potential user; ii) to perform, from a mathematical point of view, numerical experiments to compare the standard time-splitting algorithm with the the new no-splitting algorithm, for a simplified GaAS Resonant Tunneling Diode (RTD) structure.

2 The signed particle Monte Carlo method

The Wigner quasi-distribution function \(f_w\) can be seen as a generalization of the semiclassical Boltzmann distribution function. If we separate the potential energy \(V_{\mathrm{tot}}\) felt by the electrons into a slowly-varying and rapidly-varying parts \(V_{\mathrm{tot}} = -e \varphi + V\), the Boltzmann-Wigner transport equation (BWTE) has the form [23]

$$\begin{aligned} \frac{\partial }{\partial t}f_w(t, x, k) + \frac{\hbar }{m^{*}} k \cdot \nabla _{x}f_w(t, x, k) + \frac{e}{\hbar } \nabla _{x} \varphi \cdot \nabla _{k}f_w(t, x, k) = \mathcal{Q}(f_w) + \mathcal{C}(f_w) \end{aligned}$$
(1)

where \(x \in \mathbb {R}^d\) is the particle position, \(k \in \mathbb {R}^d\) the wave vector (and \(\hbar k\) the momentum), \(m^{*}\) the particle effective mass, \(\varphi\) satisfying the Poisson equation

$$\begin{aligned} \nabla \cdot \left[ \varepsilon _0 \varepsilon _r \nabla \varphi (x) \right] = - e (N_D - N_A - n) \end{aligned}$$
(2)

where e is the absolute value of the electric charge, \(\varepsilon _0\) the absolute dielectric constant, \(\varepsilon _r\) the relative dielectric constant, \(N_D\), \(N_A\) are the assigned doping profiles (due to donors and acceptors), and n the density

$$\begin{aligned} n(x,t) = \int f_w(x, k, t) \, \mathrm{d}k. \end{aligned}$$
(3)

The equation includes the Boltzmann scattering operator \(\mathcal{C}(f_w)\) having the scattering rate \(\lambda (k)\) [9] and the quantum evolution term

$$\begin{aligned} \mathcal{Q}(f_w) = \int _{\mathbb {R}^d} V_w(x, k - k^{\prime }) f_w(t, x, k^{\prime }) \, \mathrm{d}k^{\prime } \end{aligned}$$
(4)

where \(V_w\) is the Wigner potential

$$\begin{aligned} V_w(x,k) = \frac{1}{i\hbar (2\pi )^d} \int _{\mathbb {R}^d} \mathrm{d}x^{\prime } \, e^{-i k \cdot x^{\prime }} \left[ V\left( x + \frac{x^{\prime }}{2} \right) - V\left( x - \frac{x^{\prime }}{2}\right) \right] \end{aligned}$$
(5)

The Wigner potential is a non-local pseudo-differential operator which is responsible of the quantum transport, is real-valued, and anti-symmetric with respect to k. Solving the Wigner equation, from the numerical point of view, is a quite difficult task. The main complication arising in the direct solution based on finite-difference scheme is the discretization of the diffusion term \(k \cdot \nabla _x f_w\) due to the typically fast variation in the phase space. Particle-based MC techniques do not require the discretization of this term, but they need costly computational times.

According to the so-called signed particle Monte Carlo approach developed initially in [21], the quantum evolution term (4) looks like the gain term of a collisional operator in which the loss term is missing. But the Wigner potential (5) is not always positive and cannot be considered a scattering term. For this reason, it can be separated into a positive and negative parts \(V^+_w, V^-_w\) such that

$$\begin{aligned} V_w = V^+_w - V^-_w, \quad V^+_w, V^-_w \ge 0. \end{aligned}$$
(6)

In this way, we can define an integrated scattering probability per unit time as

$$\begin{aligned} \gamma (x) = \int \mathrm{d}k^{\prime } \, V^+_w(x, k - k^{\prime }) = \int \mathrm{d}k^{\prime } \, V^-_w(x, k - k^{\prime }) \end{aligned}$$
(7)

and rewrite the quantum evolution term as the difference between gain and loss terms, i.e.

$$\begin{aligned} \mathcal{Q}(f_w)= \int \mathrm{d}k^{\prime } w(k^{\prime },k) f_w(t, x, k^{\prime }) - \gamma (x) f_w(t, x, k) \end{aligned}$$
(8)
$$\begin{aligned} w(k^{\prime },k)= V_w^+(x, k - k^{\prime }) - V_w^-(x, k - k^{\prime }) + \gamma (x) \delta (k - k^{\prime }). \end{aligned}$$
(9)

Now the term \(w(k^{\prime },k)\) is interpreted as a new scattering rate which produces, from the old particle, a new pair of particles having weight u and \(-u\). In conclusion, an initial parent particle (with sign) evolves on a free-flight trajectory and, according to a generation rate given by the function \(\gamma (x)\), two new signed particles are generated in the same position having weight u and \(-u\) respectively. The momentum of the new particles is generated with probability \(V^+_w(x,k)/\gamma (x)\). However this procedure suffers of an efficiency issue in particle generation, because \(\gamma\) usually is a rapidly oscillating function, and exponential growth of particle numbers. In order to contain the particle number, a cancellation procedure must be introduced.

3 Piecewise deterministic Markov process

A probabilistic model for the quantum evolution term of the BWTE is based on a particle system having time evolution of a piecewise deterministic Markov process [1]. Each particle is characterized by the state space

$$\begin{aligned} z_j(t) = ( u_j(t), x_j(t), k_j(t)) , \quad t \ge 0 , \quad j = 1,\ldots ,N(t) \end{aligned}$$
(10)

where the first component is the weight \(u_j \in \{-1 , +1\}\), the second component is the position vector, and the third component is the wave-vector. The time evolution of the particle system (10) is determined by a flow \(F(z_j(t))\) and a jump kernel \(Q(z_j(t))\). Starting at a certain state \(z_j(0)\), the process performs a deterministic motion according to the flow

$$\begin{aligned} F(t,z) = (u, x + v(k)t, k), \quad v = \frac{\hbar }{m} \, k \end{aligned}$$
(11)

and the random waiting time \(\tau\) until the next jump satisfies

$$\begin{aligned} \mathbb {P}(\tau \ge t) =\exp \left( - \int _0^t Q(F(s,z)) \, \mathrm{d}s \right) . \end{aligned}$$
(12)

There is considerable freedom in choosing the jump kernel Q. The following choice is particularly well suited for numerical purposes. We introduce a majorant \(\hat{V}_w\) such that

$$\begin{aligned} |V_w(x,k)| \le \hat{V}_w(x,k) \quad \forall x, k \in \mathbb {R}^d. \end{aligned}$$
(13)

In the case of a “jump” in which the jth particle generates two new particles, added to the system such that

$$\begin{aligned} z_1^{\prime } = \left( u_j \, \text{ sign } V_w(x_j,k), x_j, k_j + k \right) , \quad z_2^{'} = \left( u_j \, \text{ sign } V_w(x_j,k), x_j, k_j - k \right) \end{aligned}$$
(14)

the jump kernel takes the form [18]

$$\begin{aligned} Q(z_j) = \frac{1}{2} \int \hat{V}_w(x_j,k) \, \mathrm{d}k \end{aligned}$$
(15)

and the random waiting time, for the jth particle, satisfies

$$\begin{aligned} \mathbb {P}(\tau \ge t) =\exp \left( - \int _0^t \hat{\gamma }(x_j + v(k_j) s) \, \mathrm{d}s \right) \end{aligned}$$
(16)

where

$$\begin{aligned} \hat{\gamma }(x) = \frac{1}{2} \int \hat{V}_w(x,k) \, \mathrm{d}k \end{aligned}$$
(17)

represents the generation probability. In order to assure finiteness in the integrals with respect to the wave vector, a cutoff parameter c > 0 must be introduced such that Eq. (7) is evaluated in

$$\begin{aligned} \mathbb {B}(c)= \{ k \in \mathbb {R}^d : \left\| k \right\| \le c \}. \end{aligned}$$
(18)

Then the main result is that appropriate functionals of this process satisfy a weak form of the Wigner equation [17].

4 The splitting algorithm

The time evolution of the system (10) contains both a continuous component (movement in the position space) and a jump component (generation of new particles or phonon scattering). A splitting time step \(\Delta t\) is used in order to separate the transport and the jump processes. The total simulation time is divided into tiny time intervals \(\Delta t\). Generation of new particles is dictated by Eq. (16). The probability that a particle will survive without generation during a ballistic flight of duration \(\Delta t\) is:

$$\begin{aligned} \mathbb {P}= \exp \left( -\int _0^{\Delta t} \hat{\gamma }(x(s)) \, \mathrm{d}s \right) = \exp \left\{ - \hat{\gamma }(x(s^\star )) \, \Delta t \right\} , s^\star \in [0, \Delta t] \end{aligned}$$
(19)

If

$$\begin{aligned} \hat{\gamma }(x(s^\star )) \, \Delta t < 1 \quad \rightarrow \quad \exp \left\{ - \hat{\gamma }(x(s^\star )) \, \Delta t \right\} \simeq 1 - \hat{\gamma }(x(s^\star )) \, \Delta t \end{aligned}$$
(20)

so, let be \(r \in U[0,1]\)

$$\begin{aligned} \text{ if } \quad r < 1 - \hat{\gamma }(x(s^\star )) \, \Delta t \quad \text{ no } \text{ creation }. \end{aligned}$$
(21)

Since the condition (20)\(_1\) must be fulfilled during all the simulation time, then we have the following limitation for \(\Delta t\)

$$\begin{aligned} \Delta t< \frac{1}{\hat{\gamma }(x(s^\star ))} < \text{ sup}_x \left\{ \frac{1}{\hat{\gamma }(x)} \right\} \end{aligned}$$
(22)

which must be estimated at the beginning of the simulation from the bias condition, lattice temperature, device dimensions and other input parameters. Finally, this is the generation procedure:

  1. s0.

    For each jth particle

  2. s1.

    Let be \(r \in U[0,1]\)

    $$\begin{aligned} \text{ if } \quad r < 1 - \hat{\gamma }(x_j , c)\Delta t \end{aligned}$$
    (23)

    do not generate anything, next particle GOTO s0.

  3. s2.

    Otherwise create a random vector \(\tilde{k}\) uniformly in \(\mathbb {B}(c)\) .

  4. s3.

    Let be \(r \in U[0,1]\)

    $$\begin{aligned} \text{ if } \quad r < 1 - \frac{ | V_w(x_j ,\tilde{k}) | }{\hat{V}_w(x_j ,\tilde{k})} \end{aligned}$$
    (24)

    do not generate anything, next particle GOTO s0

  5. s4.

    Otherwise generate a couple of particle

    $$\begin{aligned}&(x_j, k_j + \tilde{k}, \tilde{u}), \quad (x_j, k_j - \tilde{k}, -\tilde{u}) \end{aligned}$$
    (25)
    $$\begin{aligned}&\tilde{u}= u_j \, \text{ sign } \left[ V_w(x_j ,\tilde{k}) \right] \end{aligned}$$
    (26)

    next particle GOTO s0.

For the sake of clarity, a simplified set of rules is given in Table 1 for this splitting algorithm. Phonon scattering is tackled using standard MC techniques [9]. The cancellation is performed each time the total particle number N(t) is greater than the cancellation frequency \(N_{\mathrm{canc}}\). Couples of particles which belong to the same phase-space cell with opposite affinity are canceled (see [17] for the details). The pros of this algorithm are that the flights progress synchronously in small increments, programming becomes much easier and a number of costly checking procedures, necessary for bookkeeping when dynamics calculations are done for the whole flight, may be avoided. The technique is also very effective for studying transient regimes and for vectorization, since the particles are naturally kept synchronous. The cons is that a discretization error depending on the time step is introduced, which could be minimized by decreasing \(\Delta t\) at the expense of a voracious CPU use.

Table 1 The splitting algorithm

5 The no-splitting algorithm

In this case we shall consider the majorant for the generation process (7) as well as one for the total phonon scattering rate

$$\begin{aligned} \Gamma _s \ge \max \lambda (k) \end{aligned}$$
(27)

and we have the total majorant

$$\begin{aligned} \Gamma = \Gamma _s + \hat{\gamma }. \end{aligned}$$
(28)

The random waiting time (16) for all particles is:

$$\begin{aligned} \mathbb {P}(\tau \ge t) =\exp \left( - \sum _{j=1}^{N} \int _0^t \left[ \Gamma _s + \hat{\gamma }(x_j + v(k_j) s) \right] \, \mathrm{d}s \right) . \end{aligned}$$
(29)

If \(\hat{\gamma }\) does not depend on x, we have

$$\begin{aligned} \mathbb {P}(\tau \ge t) =\exp \left( - \Gamma N t \right) \rightarrow \quad \tau = - \frac{1}{ \Gamma N}\log r \end{aligned}$$
(30)

where \(r \in U[0,1]\) and the random waiting time \(\tau\) is completely determined. In the no-splitting algorithm the transport and the generation process are not separate. Let us indicate T the next observation time. The particle system evolves on a time interval [0, T]. The system time is denoted by t. The individual time \(t_j\) of a particle indicates the moment of the last update of its position. The Drift/Generation/Scattering procedure (DGS) is the following:

  1. 1.

    Put \(t=0\) and \(t_j=0\) , \(j=1,\ldots ,N\)

  2. 2.

    Generate the random waiting time \(\tau\) according to Eq. (30) Put \(t := t + \tau\).

  3. 3.

    If \(t \ge T\), then move (drift) all particle up to time T solving Newton’s equation of motion. The component \(u_j\) does not change. Erase particles which are out of the boundary and STOP the algorithm.

  4. 4.

    Choose an index \(j \in \{1, \ldots , N\}\) uniformly. Move the jth particle up to t solving Newton’s equation of motion. If the particle is out of the boundary erase it and GOTO 2, otherwise update the individual time of the jth particle into \(t_j := t\). The component \(u_j\) does not change. The position and wave-vector are \(x_j\), \(k_0 =(k_{x0}, k_{y0}, k_{z0})\) respectively.

  5. 5.

    Let be \(r \in U[0,1]\)

    $$\begin{aligned} \text{ if } \quad r \le \frac{\hat{\gamma }}{\Gamma } \quad \text{ GOTO } \, \, 6 \quad \text{ ELSE } \quad \text{ GOTO } \, \, 10 \end{aligned}$$
    (31)
  6. 6.

    Create a vector \(\tilde{k}\) according to the probability density

    $$\begin{aligned} \frac{1}{2 \hat{\gamma }} \hat{V}_w(x,k) , \quad k \in \mathbb {B}(c) \end{aligned}$$
    (32)
  7. 7.

    Check if the creation event is fictitious. Let be \(r \in U[0,1]\)

    $$\begin{aligned} \text{ if } \quad r \le 1 - \frac{|V_w(x_j,\tilde{k})|}{\hat{V}_w(\tilde{k})} \end{aligned}$$
    (33)

    GOTO 2

  8. 8.

    Generate the pair of particles

    $$\begin{aligned} \left( \tilde{u}(u_j, x_j, \tilde{k}), x_j , k_j + \tilde{k} \right) , \quad \left( -\tilde{u}(u_j, x_j, \tilde{k}), x_j , k_j - \tilde{k} \right) \end{aligned}$$
    (34)

    where

    $$\begin{aligned} \tilde{u}(u, x, k) = u \, \text{ sign } V_w(x,k) \end{aligned}$$
    (35)

    The individual times of these particles equal t. Put \(N := N +2\).

  9. 9.

    If the total number of particles exceeds a certain bound,

    $$\begin{aligned} N \ge N_{\mathrm{canc}} \end{aligned}$$
    (36)

    then move all particles up to time t according to Newton’s equations. Erase particles which are out of the boundary. Pairs of particles with similar positions and wave-vectors, but with opposite signs, are removed from the system. GOTO 2

  10. 10.

    check/perform phonon scattering, GOTO 2

A set of rules for this algorithm is given in Table 2. The main advantage is that no discretization error due to the time step is introduced.

Table 2 The no-splitting algorithm

6 The resonant tunneling diode

Our goal is to perform numerical experiments with the splitting and no-splitting algorithms introduced in the previous section. We have considered the resonant tunneling diode structure introduced in [26], but with a simplified physics setup. The device simulated is a 1-D (in space) RTD of total length \(L = 150 \, \text{ nm } ,\) which consists of two barriers (with \(b=\) 3 nm, \(a=\) 0.3 eV) surrounding a quantum well (with \(b_w = 5\) nm). The barrier structure is centered in a 30 nm lightly doped (\(N_D = 10^{16} \text{ cm}^{-3}\)) spacer region that is connected to 60 nm highly doped (\(N_D^+ = 10^{18} \text{ cm}^{-3}\) drift regions on either side). The quantum well region is symmetric with respect to the mid-point L/2, as shown in Fig. 1, where the distance between each barrier center and the mid-point is

$$\begin{aligned} |d| = \frac{b_w + b}{2} = 4 \, \text{ nm } . \end{aligned}$$
(37)
Fig. 1
figure 1

The quantum well region

The device is considered to be entirely GaAs (with \(m^{*}= 0.067\)), with scattering mechanisms due to polar optical phonons within a single \(\Gamma\) band [9]. The temperature is 300 K. In our simulation we do not use degenerate statistics in scattering rates and boundary conditions, as done in [26].

Let us suppose that the confining potential V depends only on the longitudinal dimension x. Then we can separate the vector \(\textsf {x} = (x, y, z)\) in its x longitudinal component and the transversal one, as well as for \(\textsf {k} = (k_x, k_y, k_z)\) i.e.

$$\begin{aligned} \textsf {x} = x \hat{i} + \textsf {x}_\perp , \quad \textsf {k} = k_x \hat{i} + \textsf {k}_\perp , \quad {k}_\perp = |\textsf {k}_\perp | = \sqrt{k_y^2 + k_z^2} . \end{aligned}$$
(38)

In this case, it is possible to consider a Wigner function of the type

$$\begin{aligned} f_w(\textsf {x}, \textsf {k}, t) = f_w(x, k_x,\textsf {k}_\perp , t) \end{aligned}$$
(39)

where the longitudinal variables come from the single-dimensional definition, imposed by the fact that the potential depends only on x, while the transversal variables are introduced by the other parts of the Hamiltonian accounting for phonons. Since

$$\begin{aligned} \textsf {k} \cdot \textsf {x}^{\prime } = x^{\prime } k_x + x_\perp ^{\prime } \cdot \textsf {k}_\perp \end{aligned}$$
(40)

the Wigner potential (5), with \(d=3\), can be written

$$\begin{aligned} V_w(\textsf {x}, \textsf {k}) = \frac{1}{i\hbar (2\pi )^3}&\int _{\mathbb {R}} \mathrm{d}x^{\prime } e^{-i k_x \, x^{\prime }} \left[ V\left( x + \frac{x^{\prime }}{2}\right) - V\left( x - \frac{x^{\prime }}{2} \right) \right] \times \\ \nonumber&\int _{\mathbb {R}^2} \mathrm{d}\textsf {x}_\perp ^{\prime } e^{-i \textsf {k}_\perp \cdot \textsf {x}_\perp ^{\prime }} \end{aligned}$$
(41)

The vectors \(\textsf {x}_\perp ^{\prime } =(y^{\prime },z^{\prime })\) and \(\textsf {k}_\perp =(k_y, k_z)\) belong to the same plane, hence

$$\begin{aligned} \int _{\mathbb {R}^2} d\textsf {x}_\perp ^{\prime } e^{-i \textsf {k}_\perp \cdot \textsf {x}_\perp ^{\prime }} = \int _{\mathbb {R}} \mathrm{d}y^{\prime } e^{-i k_y y^{\prime }} \, \int _{\mathbb {R}} \mathrm{d}z^{\prime } e^{-i k_z z^{\prime }} = (2 \pi )^2 \delta (k_y) \, \delta (k_z) \end{aligned}$$
(42)

and finally we have

$$\begin{aligned} V_w(x, k_x, \textsf {k}_\perp ) = \frac{\delta (k_y) \, \delta (k_z)}{i\hbar 2\pi } \int _{\mathbb {R}} \mathrm{d}x^{\prime } e^{-i k_x \, x^{\prime }} \left[ V\left( x + \frac{x^{\prime }}{2}\right) - V\left( x - \frac{x^{\prime }}{2} \right) \right] \, \end{aligned}$$
(43)

The total barrier potential is one-dimensional and it is the sum of the single barrier potentials

$$\begin{aligned} V(x) = V^{(1)}(x) + V^{(2)}(x) \quad x \in [0, L] \end{aligned}$$
(44)

where

$$\begin{aligned} V^{(1)}(x) = a 1_{[d_1 -\frac{b}{2} , d_1+\frac{b}{2} ]}(x), \quad V^{(2)}(x) = a 1_{[d_2-\frac{b}{2} , d_2+\frac{b}{2} ]}(x). \end{aligned}$$
(45)

After some manipulations we get

$$\begin{aligned} V_w(x,k,\textsf {k}_\perp ) = \frac{4 a}{\hbar \pi k} \, \sin (kb) \, \sin \left[ 2k(x - L/2)\right] \, \cos (2k |d|) \, \delta (k_y) \, \delta (k_z) \end{aligned}$$
(46)

with \(k \rightarrow k_x\). The deltas in the formula (46) mean that the \(k_y, k_z\) of the particle do not change during the creation process. The majorant (13) in this case is

$$\begin{aligned} \hat{V}_w(x,k) = \frac{4ab}{\hbar \pi } \delta (k_y) \delta (k_z) \end{aligned}$$
(47)

and the creation probability (17) writes

$$\begin{aligned} \hat{\gamma }(x,c) = \frac{4ab}{\hbar \pi } c. \end{aligned}$$
(48)

7 Numerical results

We have used an uniform grid in (xk)-space

$$\begin{aligned} x(i)= (i-1) \Delta x, \quad i = 1,\ldots ,N_x, \quad \Delta x = \frac{L}{N_x -1} \end{aligned}$$
(49)
$$\begin{aligned} k_x(i)= k_{\mathrm{min}} + (i - 1) \Delta k, \quad i = 1,\ldots ,N_k, \quad \Delta k = \frac{k_{\mathrm{max}} -k_{\mathrm{min}}}{N_k -1} \end{aligned}$$
(50)
$$\begin{aligned} k_\perp (i)= (i - 1 ) \Delta k_\perp , \quad i = 1,\ldots ,N_{k_\perp }, \quad \Delta k_\perp = \frac{k_{\perp \max} }{N_{k_\perp } -1} \end{aligned}$$
(51)

with \(N_x = 251\), \(k_{\mathrm{max}} = - k_{\mathrm{min}} = k_{\perp \max }\) = 4 \(\text{ nm}^{-1}\), \(N_k = 33\), \(N_{k_\perp } = 9\). Other parameters used are:

$$\begin{aligned} c = 1 \, \text{ nm}^{-1}, \quad N_{\mathrm{canc}} = 800 k, \quad N_{\mathrm{ini}} = 200{,}500,\quad N_r = 50 \end{aligned}$$
(52)

where c is the cutoff in Eq. (18), \(N_{\mathrm{ini}}\) the initial particle number, \(N_{\mathrm{canc}}\) the cancellation frequency, \(N_r\) the repetition number. In the following we shall consider ohmic boundary conditions.

The current at the contact is usually obtained by counting charges which are in the contact mesh. But the instantaneous current at the contact is also due to the induced current due to the electron flow, which can be evaluated using to the Ramo-Shockley theorem [5] and, in the 1D case, yields

$$\begin{aligned} I(t) = -\frac{e \, N_{\mathrm{elec}}}{L} \, \mathbb {E}\left[ \sum _{j=1}^{N(t)} u_j v_j \right] \end{aligned}$$
(53)

where \(N_{\mathrm{elec}} = \rho _{\mathrm{elec}} \times \, \hbox {Area}\) where \(\rho _{\mathrm{elec}}\) is the total particle density and Area the cross section area. Then the current density is easily defined as \(J = I/\hbox {Area}\). Figure 2 shows the current versus the bias voltage, for some splitting time steps \(\Delta t\) and in the no-splitting case. The convergence of the splitting algorithm to the no-splitting one is clearly shown for \(\Delta t \rightarrow 0\). Figure 3 shows the CPU time for both methods: a gain factor of 3 for the no-splitting case can be estimated for the smallest \(\Delta t = 0.03125\) fs. Figures 4 and 5 show the potential energy V and density, respectively, obtained with the splitting algorithm, corresponding to the peak (on-resonance) and valley (off-resonance) of Fig. 2. The results presented have been obtained using a high performance cluster based on Intel Xeon E5-2620 V3 2.4 Ghz and 32 Gb RAM.

Fig. 2
figure 2

Current density versus voltage, for some splitting time steps \(\Delta t\) (fs)

Fig. 3
figure 3

CPU versus splitting time step \(\Delta t\) (fs)

Fig. 4
figure 4

Potential versus position, obtained with the no-splitting algorithm, corresponding to the peak (on-resonance) and valley (off-resonance) of Fig. 2

Fig. 5
figure 5

Charge density versus position, obtained with the no-splitting algorithm, corresponding to the peak (on-resonace) and valley (off-resonance) of Fig. 2

8 Conclusions

The Boltzmann-Wigner transport equation has been solved by using for the quantum evolution term the signed-particle Monte Carlo method, where a new pair of particles characterized by a sign is generated randomly and added to the system. This generation mechanism has been recently interpreted in terms of the Markov jump process, producing a class of new stochastic algorithms [17]. One of these algorithms has been implemented without time discretization error, and it has been applied to a resonant tunneling diode. The results are compared with the corresponding splitting algorithm, showing an excellent agreement as well as a low-cost computational effort. Future research will develop this MC methodology for the simulation of realistic devices, such as silicon nanowires according to the guidelines in [14, 15] and new emerging materials such as graphene [8, 10].