Solve the non-linear Poisson problem using Newton's algorithm.
[V, n, p, res, niter] = secs1d_nlpoisson_newton (x, sinodes, Vin, nin, pin,
Fnin, Fpin, D, l2, er, toll, maxit)
input:
x spatial grid
sinodes index of the nodes of the grid which are in the semiconductor subdomain
(remaining nodes are assumed to be in the oxide subdomain)
Vin initial guess for the electrostatic potential
nin initial guess for electron concentration
pin initial guess for hole concentration
Fnin initial guess for electron Fermi potential
Fpin initial guess for hole Fermi potential
D doping profile
l2 scaled Debye length squared
er relative electric permittivity
toll tolerance for convergence test
maxit maximum number of Newton iterations
output:
V electrostatic potential
n electron concentration
p hole concentration
res residual norm at each step
niter number of Newton iterations
The following code
secs1d_physical_constants
secs1d_silicon_material_properties
tbulk= 1.5e-6;
tox = 90e-9;
L = tbulk + tox;
cox = esio2/tox;
Nx = 50;
Nel = Nx - 1;
x = linspace (0, L, Nx)';
sinodes = find (x <= tbulk);
xsi = x(sinodes);
Nsi = length (sinodes);
Nox = Nx - Nsi;
NelSi = Nsi - 1;
NelSiO2 = Nox - 1;
Na = 1e22;
D = - Na * ones (size (xsi));
p = Na * ones (size (xsi));
n = (ni^2) ./ p;
Fn = Fp = zeros (size (xsi));
Vg = -10;
Nv = 80;
for ii = 1:Nv
Vg = Vg + 0.2;
vvect(ii) = Vg;
V = - Phims + Vg * ones (size (x));
V(sinodes) = Fn + Vth * log (n/ni);
% Scaling
xs = L;
ns = norm (D, inf);
Din = D / ns;
Vs = Vth;
xin = x / xs;
nin = n / ns;
pin = p / ns;
Vin = V / Vs;
Fnin = (Fn - Vs * log (ni / ns)) / Vs;
Fpin = (Fp + Vs * log (ni / ns)) / Vs;
er = esio2r * ones(Nel, 1);
l2(1:NelSi) = esi;
l2 = (Vs*e0)/(q*ns*xs^2);
% Solution of Nonlinear Poisson equation
% Algorithm parameters
toll = 1e-10;
maxit = 1000;
[V, nout, pout, res, niter] = secs1d_nlpoisson_newton (xin, sinodes,
Vin, nin, pin,
Fnin, Fpin, Din, l2,
er, toll, maxit);
% Descaling
n = nout*ns;
p = pout*ns;
V = V*Vs;
qtot(ii) = q * trapz (xsi, p + D - n);
end
vvectm = (vvect(2:end)+vvect(1:end-1))/2;
C = - diff (qtot) ./ diff (vvect);
plot(vvectm, C)
xlabel('Vg [V]')
ylabel('C [Farad]')
title('C-V curve')
Produces the following figure
| Figure 1 |
|---|
![]() |
Package: secs1d