secs1d pin diode help

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

secs1d pin diode help

tkroezen
Hi,

I am having some trouble trying to simulate a PIN diode in secs1d. My
approach was to alter the PN diode code included as the example in the
documentation file, but unfortunately this hasn't produced any results yet.

The only changes I made to the code are listed below.

change lines 63 until 68 to:
 /Na = 1e23 * (x <= x_pi_jun);
 N_0 = 1e16 .* (x > x_pi_jun) .* (x <= x_in_jun);
 Nd = 1e23 * (x > x_in_jun);
 D  = Nd - Na + N_0;  
/
change lines 70 until 83 to:
/V_p = -1;
V_n =  0;
 
 Fp = V_p * (x <= x_pi_jun);
 Fn = Fp;
 
 p = Na .* (x <= x_pi_jun) + ni^2/Nd .* (x >= x_in_jun);
 n = ni^2/Na .* (x <= x_pi_jun) + Nd.* (x >= x_in_jun);
 V = Fn + Vth * log (n / ni);/

Unfortunately this produces the following errors:
 
/error: bimu_bernoulli: invalid conversion from NaN to logical
error: called from
    bimu_bernoulli at line 45 column 11
    secs1d_dd_gummel_map at line 94 column 12
    secs1d_dd_gummel_map_example_PIN at line 147 column 49
error: evaluating argument list element number 1
error: called from
    bimu_bernoulli at line 45 column 11
    secs1d_dd_gummel_map at line 94 column 12
    secs1d_dd_gummel_map_example_PIN at line 147 column 49/

I do not know what produces this error, does anyone perhaps know what I did
wrong?

Many thanks in advance,

Tijmen



--
Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html

_______________________________________________
Help-octave mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-octave
Reply | Threaded
Open this post in threaded view
|

Re: secs1d pin diode help

Carlo de Falco-2
Hi,
> On 23 Oct 2017, at 13:58, tkroezen <[hidden email]> wrote:
>
> Hi,
>
> I am having some trouble trying to simulate a PIN diode in secs1d. My
> approach was to alter the PN diode code included as the example in the
> documentation file, but unfortunately this hasn't produced any results yet.


First of all, note that the PIN diode is not a very simple device to simulate
and it is actually one case that puts the Gummel algorithm under a lot of stress,
you may need to carefully tweak mesh refinement, tolerances and initial guess
in order to get this to work and in the end probably the Newton algorithm will
still work better for this case anyway.

> The only changes I made to the code are listed below.
> change lines 63 until 68 to:
> /Na = 1e23 * (x <= x_pi_jun);
> N_0 = 1e16 .* (x > x_pi_jun) .* (x <= x_in_jun);
> Nd = 1e23 * (x > x_in_jun);
> D  = Nd - Na + N_0;  
>

actually this is incomplete, the values of x_pi_jun,  x_in_jun are not known.

> change lines 70 until 83 to:
> /V_p = -1;
> V_n =  0;
>
> Fp = V_p * (x <= x_pi_jun);
> Fn = Fp;
>
> p = Na .* (x <= x_pi_jun) + ni^2/Nd .* (x >= x_in_jun);
> n = ni^2/Na .* (x <= x_pi_jun) + Nd.* (x >= x_in_jun);
> V = Fn + Vth * log (n / ni);/
>

these conditions are slightly inconsistent at the contacts where one must apply

 p + D - n = 0
 p .* n = ni^2

if either Nd or Na are very high as in your case the inconsistency is quite small
but still can lead to some algorithmic instability some times.

> Unfortunately this produces the following errors:
>
> /error: bimu_bernoulli: invalid conversion from NaN to logical
> error: called from
>    bimu_bernoulli at line 45 column 11
>    secs1d_dd_gummel_map at line 94 column 12
>    secs1d_dd_gummel_map_example_PIN at line 147 column 49
> error: evaluating argument list element number 1
> error: called from
>    bimu_bernoulli at line 45 column 11
>    secs1d_dd_gummel_map at line 94 column 12
>    secs1d_dd_gummel_map_example_PIN at line 147 column 49/
>
> I do not know what produces this error, does anyone perhaps know what I did
> wrong?

This happens when, at any point in the iterative algorithm, the carrier densities happen
to become negative. This is of course physically inconsistent and leads to all sorts of
hard to understand errors and in the and the state vector shows over- and under-flows and/or
Not-a-Number (NaN) entries.

If your initial guess is correct, which I haven't been able to test, the problem is with
algorithm convergence so you may want to try:

- mesh refinement near space-charge regions
- a smoother initial guess
- continuation (i.e. start from an equilibrium solution then apply small voltage steps)
- switch from Gummel to Newton

> Many thanks in advance,
>
> Tijmen

If you need more help, you will need to pass the full script you are using, rather
than send it via email you may want to write it here:

http://wiki.octave.org/Secs1d_package

where I uploaded the PN diode examplke as a starting point.

HTH,
c.



_______________________________________________
Help-octave mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-octave