X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fsecs1d-0.0.8%2FDDG%2FDDGelectron_driftdiffusion.m;fp=octave_packages%2Fsecs1d-0.0.8%2FDDG%2FDDGelectron_driftdiffusion.m;h=62da823a46ec592838eede693aacd0b77a7efb27;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/secs1d-0.0.8/DDG/DDGelectron_driftdiffusion.m b/octave_packages/secs1d-0.0.8/DDG/DDGelectron_driftdiffusion.m new file mode 100644 index 0000000..62da823 --- /dev/null +++ b/octave_packages/secs1d-0.0.8/DDG/DDGelectron_driftdiffusion.m @@ -0,0 +1,82 @@ +function n=DDGelectron_driftdiffusion(psi,x,ng,p,ni,tn,tp,un) + +% n=DDGelectron_driftdiffusion(psi,x,ng,p) +% Solves the continuity equation for electrons +% input: psi electric potential +% x integration domain +% ng initial guess and BCs for electron density +% p hole density (for SRH recombination) +% output: n updated electron density + +## This file is part of +## +## SECS1D - A 1-D Drift--Diffusion Semiconductor Device Simulator +## ------------------------------------------------------------------- +## Copyright (C) 2004-2007 Carlo de Falco +## +## +## +## SECS1D is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## SECS1D is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with SECS1D; If not, see . + + +nodes = x; +Nnodes =length(nodes); + +elements = [[1:Nnodes-1]' [2:Nnodes]']; +Nelements=size(elements,1); + +Bcnodes = [1;Nnodes]; + +nl = ng(1); +nr = ng(Nnodes); + +h=nodes(elements(:,2))-nodes(elements(:,1)); + +c=1./h; +Bneg=Ubernoulli(-(psi(2:Nnodes)-psi(1:Nnodes-1)),1); +Bpos=Ubernoulli( (psi(2:Nnodes)-psi(1:Nnodes-1)),1); + + +d0 = [c(1).*Bneg(1); c(1:end-1).*Bpos(1:end-1)+c(2:end).*Bneg(2:end); c(end)*Bpos(end)]; +d1 = [1000;-c.* Bpos]; +dm1 = [-c.* Bneg;1000]; + +A = spdiags([dm1 d0 d1],-1:1,Nnodes,Nnodes); +b = zeros(Nnodes,1);%- A * ng; + +% SRH Recombination term +SRHD = tp * (ng + ni) + tn * (p + ni); +SRHL = p ./ SRHD; +SRHR = ni.^2 ./ SRHD; + +ASRH = Ucompmass (nodes,Nnodes,elements,Nelements,SRHL,ones(Nelements,1)); +bSRH = Ucompconst (nodes,Nnodes,elements,Nelements,SRHR,ones(Nelements,1)); + +A = A + ASRH; +b = b + bSRH; + +% Boundary conditions +b(Bcnodes) = []; +b(1) = - A(2,1) * nl; +b(end) = - A(end-1,end) * nr; +A(Bcnodes,:) = []; +A(:,Bcnodes) = []; + +n = [nl; A\b ;nr]; + + +% Last Revision: +% $Author: adb014 $ +% $Date: 2008-02-04 16:26:27 +0100 (man, 04 feb 2008) $ +