X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=octave_packages%2Focs-0.1.3%2Fsbn%2FMdiode.m;fp=octave_packages%2Focs-0.1.3%2Fsbn%2FMdiode.m;h=9db541031ec8c98ade7a3536836699072dfcfec3;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hp=0000000000000000000000000000000000000000;hpb=1705066eceaaea976f010f669ce8e972f3734b05;p=CreaPhase.git diff --git a/octave_packages/ocs-0.1.3/sbn/Mdiode.m b/octave_packages/ocs-0.1.3/sbn/Mdiode.m new file mode 100644 index 0000000..9db5410 --- /dev/null +++ b/octave_packages/ocs-0.1.3/sbn/Mdiode.m @@ -0,0 +1,111 @@ +## Copyright (C) 2006,2007,2008 Massimiliano Culpo, Carlo de Falco +## +## This file is part of: +## OCS - A Circuit Simulator for Octave +## +## OCS 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. +## +## This program 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 this program (see the file LICENSE); if not, +## see . +## +## author: culpo@math.uni-wuppertal.de, Carlo de Falco + +## -*- texinfo -*- +## +## @deftypefn{Function File} @ +## {[@var{a},@var{b},@var{c}]=}Mdiode(@var{string},@var{parameters},@ +## @var{parameternames},@var{extvar},@var{intvar},@var{t}) +## +## SBN file implementing models for diodes. +## +## @var{string} is used to select among models. Parameters are listed +## as inner items. Possible models are: +## +## @itemize @minus +## @item @var{string} = "simple" (Usual exponential diode model) +## @itemize @minus +## @item Is -> reverse current +## @item Vth -> thermal voltage +## @item Rpar -> parasitic resistance +## @end itemize +## @item @var{string} = "PDEsymmetric" (Drift-Diffusion PDE model) +## @itemize @minus +## @item len -> diode length +## @item Nnodes -> number of nodes of 1D grid +## @item Dope -> doping (abrupt and symmetric) +## @item toll -> absolute tolerance +## @item maxit -> max iterations number +## @item Area -> device area +## @end itemize +## @end itemize +## +## See the @cite{IFF file format specifications} for details about +## the output structures. +## +## @seealso{prs_iff,asm_initialize_system,asm_build_system} +## @end deftypefn + +function [a,b,c] = Mdiode (string,parameters,parameternames,extvar,intvar,t) + + switch string + + case "simple" + Is = 1e-14; + Vth = 2.5e-2; + Rpar = 1e12; + for ii=1:length(parameternames) + eval([parameternames{ii} "=" num2str(parameters(ii)) ";"]) + endfor + + vp = extvar(1); + vm = extvar(2); + + I = Is*(exp((vp - vm)/Vth) -1 ) + (vp - vm)/Rpar; + geq = Is*exp((vp - vm)/Vth)/Vth + 1/Rpar; + + a = zeros(2); + b = [geq -geq; -geq geq]; + c = [I ; -I] ; + break + + case "PDEsymmetric" + + len = 1e-6; + Nnodes = 100; + Dope=1e23; + + toll = 1e-5; + maxit = 100; + ptoll = 1e-10; + pmaxit = 100; + + Area = 1e-10; + + for ii=1:length(parameternames) + eval([parameternames{ii} "=" num2str(parameters(ii)) ";"]) + endfor + + vp = extvar(1); + vm = extvar(2); + + [I,g] = Mpdesympnjunct (len,Dope,vp-vm,Area,Nnodes,toll,maxit,ptoll,pmaxit); + + a = zeros(2); + b = [g -g; -g g]; + c = [I ; -I] ; + + break + + otherwise + error(["unknown section:" string]) + endswitch + +endfunction