1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| unit DGL1D_Interface_ThermionicEmission;
interface
uses Dialogs,SysUtils,DGL1D_Interface,grdpnt,Direction_Parent, Math,integration;
type
// Semiconductor-Semiconductor Thermionic-Emission Interface
TDGL1D_Interface_ThermionicEmission = class(TDGL1D_Interface)
ae :extended; //richardson constant electrons
ah :extended; //richardson constant holes
me :extended;
mh :extended;
meffe: Extended;
meffh: Extended;
f1:Extended;
k1:Extended;
inte:extended;
// DGLsystem to be solved
procedure DGLSys; override; //DC mode DGL
procedure DGLSysAc(omega:extended);override; //AC mode DGL
procedure DGLSysTransient(dt:Extended);override; //TR mode DGL
end;
implementation
uses HeteroJunctionMain,type_def,ParameterIO,constants,Direction_Interface,
Direction_Interface_TE,ModelParametersTE;
//steady-state DC DGLSys, Thermionic Emission Interface
procedure TDGL1D_Interface_ThermionicEmission.DGLSys;
var
dxInt :extended; //dimensionless distance from the gridpoint to the interface
PoissonFact :extended; //scaling factor of the dimensionless poisson equation
AeNeu,AhNeu :Extended; // Richardson current
dEc, dEv :Extended; // conduction band offset, valence band offset
inTherm :Extended; // electron thermal emission current across the interface
ipTherm :Extended; // hole thermal emission current across the interface
inTherm_n, inTherm_nNB :Extended; //derivates _n _nNB (at neighbour gridpoint)
ipTherm_p, ipTherm_pNB :Extended; //derivates _p _pNB (at neighbour gridpoint)
i,j :Integer;
sign: extended;
deltE,delth: extended;
//Heavyside function
function theta(xx:Extended):Extended;
begin
result := 0;
if xx<0 then result :=1;
end;
function test(B: extended): extended;
begin
result :=dEv*B;
end;
begin
//initialisation
for i:=1 to anzDGL do for j:=1 to anzDgl do begin
gp.DGL_0[i,j]:=0;
gp.DGL_0Im[i,j]:=0;
gp.DGL_F[i,j]:=0;
//??? gp.fmc[i,j]:=0;
gp.DGL_B[i,j]:=0;
end;
dEv := sign * (nb.Eg - gp.Eg + nb.chi - gp.chi);
inte:=integrale(1.0,2.0,@test);
end; |
Partager