Mercurial > forge
view extra/secs2d/inst/ThDDGOX/ThDDGOXddcurrent.m @ 9886:2112c90c2445 octave-forge
secs2d: update license to GPLv3+
author | carandraug |
---|---|
date | Mon, 26 Mar 2012 19:46:13 +0000 |
parents | c25715bc0bc2 |
children |
line wrap: on
line source
## Copyright (C) 2004-2008 Carlo de Falco ## ## SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator ## ## SECS2D 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 3 of the License, or ## (at your option) any later version. ## ## SECS2D 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 SECS2D; If not, see <http://www.gnu.org/licenses/>. ## ## AUTHOR: Carlo de Falco <cdf _AT_ users.sourceforge.net> ## -*- texinfo -*- ## ## @deftypefn {Function File}@ ## {@var{current},@var{divrg}} = ThDDGOXddcurrent(@var{Simesh},@var{Sinodes},@var{data},@var{contacts}) ## ## Compute contacts total current and local element divergence ## ## @end deftypefn function [current,divrg]=ThDDGOXddcurrent(Simesh,Sinodes,data,contacts); load (file_in_path(path,'constants.mat')) Nelements = size(mesh.t,2); mobn0 = thermdata.mobn0([],Simesh,Sinodes,[],data); mobp0 = thermdata.mobp0([],Simesh,Sinodes,[],data); mobn1 = thermdata.mobn1([],Simesh,Sinodes,[],data); mobp1 = thermdata.mobp1([],Simesh,Sinodes,[],data); An = Uscharfettergummel3(Simesh,mobn0,mobn1,data.Tn,data.V(Sinodes)-data.Tn); Ap = Uscharfettergummel3(Simesh,mobp0,mobp1,data.Tp,-data.V(Sinodes)-data.Tn); divrg = An * data.n + Ap * data.p; for con = 1:length(contacts) cedges = []; cedges = [cedges,find(mesh.e(5,:)==contacts(con))]; cnodes = mesh.e(1:2,cedges); cnodes = [cnodes(1,:) cnodes(2,:)]; cnodes = unique(cnodes); current(con) = sum(divrg(cnodes)); endfor Is = q*data.us*data.Vs*data.ns; current = current * Is; endfunction