secs2d-0.0.8/0000755000175000017500000000000011201031505010474 5ustar shshsecs2d-0.0.8/DESCRIPTION0000644000175000017500000000053011201030277012205 0ustar shshName: SECS2D Version: 0.0.8 Date: 2009-05-06 Author: Carlo de Falco Maintainer: Carlo de Falco Title: SEmi Conductor Simulator in 2D Description: A Drift-Diffusion simulator for 2d semiconductor devices Categories: Electrical Engineering Depends: octave (>= 2.9.17) Autoload: no License: GPL version 2 or later Url: http://www.comson.org/dem secs2d-0.0.8/inst/0000755000175000017500000000000011201031505011451 5ustar shshsecs2d-0.0.8/inst/ThDDGOX/0000755000175000017500000000000011201031505012612 5ustar shshsecs2d-0.0.8/inst/ThDDGOX/ThDDGOXupdateelectron_temp.m0000644000175000017500000000417711201030277020133 0ustar shshfunction Tn = ThDDGOXupdateelectron_temp(imesh,Dnodes,Tn,n,p,Tl,Jn,E,mobn0,... twn0,twn1,tn,tp,n0,p0) %% %% Tn = ThDDGOXupdateelectron_temp(mesh,Dnodes,Tn,n,p,Tl,Jn,E,mobn,... %% twn0,tn,tp,n0,p0) %% %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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 . Nnodes = columns(imesh.p); Nelements = columns(imesh.t); Varnodes = setdiff(1:Nnodes,Dnodes); alpha = mobn0; gamma = ones(Nnodes,1); eta = 1.5 * n .* Tl; betax = Jn(1,:)./ mobn0'; betay = Jn(2,:)./ mobn0'; beta = -2.5*[betax;betay]; Sn = Uscharfettergummel3(imesh,alpha,gamma,eta,beta); denom = (tp*(n+sqrt(n0.*p0))+tn*(p+sqrt(n0.*p0))); R = (p.*n)./denom; MASS_LHS1 = Ucompmass2(imesh,1.5*R,ones(Nelements,1)); MASS_LHS2 = Ucompmass2(imesh,1.5*n./twn1,1./twn0); LHS = Sn + MASS_LHS1 + MASS_LHS2; G = (p0.*n0)./denom; PJoule = Jn(1,:).*E(1,:) + Jn(2,:).*E(2,:); PJoule(PJoule<0) = 0; rhsJoule = Ucompconst (imesh,ones(Nnodes,1),PJoule'); rhsR_G = Ucompconst (imesh,1.5*G.*Tn,ones(Nelements,1)); rhsTh_L = Ucompconst (imesh,1.5*n.*Tl./twn1,1./twn0); RHS = rhsJoule + rhsR_G + rhsTh_L; Tn(Varnodes) = LHS(Varnodes,Varnodes) \(RHS(Varnodes) -... LHS(Varnodes,Dnodes)*Tn(Dnodes)); secs2d-0.0.8/inst/ThDDGOX/ThDDGOXhole_driftdiffusion.m0000644000175000017500000000316511201030277020112 0ustar shshfunction p=ThDDGOXhole_driftdiffusion(mesh,Dnodes,nin,p,V,... Tp,mobp0,mobp1,tn,tp,n0,p0) %% %% p=ThDDGOXhole_driftdiffusion(mesh,Dnodes,nin,p,V,Tp,monp0,mobp1,tn,tp,n0,p0) %% %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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 . Nnodes = columns(mesh.p); Nelements = columns(mesh.t); Varnodes = setdiff(1:Nnodes,Dnodes); alpha = mobp0; gamma = mobp1; eta = Tp; beta = -V-Tp; Dp = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); denom = (tp*(nin+sqrt(n0.*p0))+tn*(p+sqrt(n0.*p0))); MASS_LHS = Ucompmass2(mesh,nin./denom,ones(Nelements,1)); LHS = Dp+MASS_LHS; RHS = Ucompconst (mesh,p0.*n0./denom,ones(Nelements,1)); p(Varnodes) = LHS(Varnodes,Varnodes) \(RHS(Varnodes) -... LHS(Varnodes,Dnodes)*p(Dnodes)); secs2d-0.0.8/inst/ThDDGOX/ThDDGOXTWP0STD.m0000644000175000017500000000031611201030277015164 0ustar shshfunction x = ThDDGOXTWP0STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = 1.5 * idata.up * ones(Nelements,1) ./ idata.vsatp^2; endfunction secs2d-0.0.8/inst/ThDDGOX/ThDDGOXMOBP0STD.m0000644000175000017500000000027011201030277015246 0ustar shshfunction x = ThDDGOXMOBP0STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = idata.up * ones(Nelements,1); endfunction secs2d-0.0.8/inst/ThDDGOX/ThDDGOXTWP1STD.m0000644000175000017500000000027211201030277015166 0ustar shshfunction x = ThDDGOXTWP1STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = idata.Tl./(1+idata.Tl./idata.Tp); endfunction secs2d-0.0.8/inst/ThDDGOX/ThDDGOXnlpoisson.m0000644000175000017500000001504011201030277016103 0ustar shshfunction [V,n,p,res,niter] = ThDDGOXnlpoisson (mesh,Dsides,Sinodes,SiDnodes,... Sielements,Vin,Vthn,Vthp,... nin,pin,... Fnin,Fpin,D,l2,l2ox,... toll,maxit,verbose) %% %% [V,n,p,res,niter] = DDGOXnlpoisson (mesh,Dsides,Sinodes,Vin,nin,pin,... %% Fnin,Fpin,D,l2,l2ox,toll,maxit,verbose) %% %% solves $$ -\lambda^2 V'' + (n(V,Fn,Tn) - p(V,Fp,Tp) -D) = 0$$ %% %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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 . global DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS %% Set some useful constants dampit = 3; dampcoeff = 2; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% setup FEM data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nodes=mesh.p; elements=mesh.t; Nnodes = length(nodes); Nelements = length(elements); % Set list of nodes with Dirichelet BCs Dnodes = Unodesonside(mesh,Dsides); % Set values of Dirichelet BCs Bc = zeros(length(Dnodes),1); % Set list of nodes without Dirichelet BCs Varnodes = setdiff([1:Nnodes],Dnodes); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% initialization: %% we're going to solve %% $$ - \lambda^2 (\delta V)'' %% + (\frac{\partial n}{\partial V} %% - \frac{\partial p}{\partial V})= -R $$ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% set $$ n_1 = nin $$ and $$ V = Vin $$ V = Vin; Fn = Fnin; Fp = Fpin; n = exp((V(Sinodes)-Fn)./Vthn); p = exp((-V(Sinodes)+Fp)./Vthp); n(SiDnodes) = nin(SiDnodes); p(SiDnodes) = pin(SiDnodes); %%% %%% Compute LHS matrices %%% %% let's compute FEM approximation of $$ L = - \frac{d^2}{x^2} $$ if (isempty(DDGOXNLPOISSON_LAP)) coeff = l2ox * ones(Nelements,1); coeff(Sielements)=l2; DDGOXNLPOISSON_LAP = Ucomplap (mesh,coeff); end %% compute $$ Mv = ( n + p) $$ %% and the (lumped) mass matrix M if (isempty(DDGOXNLPOISSON_MASS)) coeffe = zeros(Nelements,1); coeffe(Sielements)=1; DDGOXNLPOISSON_MASS = Ucompmass2(mesh,ones(Nnodes,1),coeffe); end freecarr=zeros(Nnodes,1); freecarr(Sinodes)=(n./Vthn + p./Vthp); Mv = freecarr; M = DDGOXNLPOISSON_MASS*spdiag(Mv); %%% %%% Compute RHS vector (-residual) %%% %% now compute $$ T0 = \frac{q}{\epsilon} (n - p - D) $$ if (isempty(DDGOXNLPOISSON_RHS)) coeffe = zeros(Nelements,1); coeffe(Sielements)=1; DDGOXNLPOISSON_RHS = Ucompconst (mesh,ones(Nnodes,1),coeffe); end totcharge = zeros(Nnodes,1); totcharge(Sinodes)=(n - p - D); Tv0 = totcharge; T0 = Tv0 .* DDGOXNLPOISSON_RHS; %% now we're ready to build LHS matrix and RHS of the linear system for 1st Newton step A = DDGOXNLPOISSON_LAP + M; R = DDGOXNLPOISSON_LAP * V + T0; %% Apply boundary conditions A (Dnodes,:) = []; A (:,Dnodes) = []; R(Dnodes) = []; %% we need $$ \norm{R_1} $$ and $$ \norm{R_k} $$ for the convergence test normr(1) = norm(R,inf); relresnorm = 1; reldVnorm = 1; normrnew = normr(1); dV = V*0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% START OF THE NEWTON CYCLE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for newtit=1:maxit if (verbose>2) fprintf(1,'\n***\nNewton iteration: %d, reldVnorm = %e\n***\n',newtit,reldVnorm); end % A(1,end)=realmin; dV(Varnodes) =(A)\(-R); dV(Dnodes)=0; %%%%%%%%%%%%%%%%%% %% Start of th damping procedure %%%%%%%%%%%%%%%%%% tk = 1; for dit = 1:dampit if (verbose>2) fprintf(1,'\ndamping iteration: %d, residual norm = %e\n',dit,normrnew); end Vnew = V + tk * dV; n = exp((Vnew(Sinodes)-Fn)./Vthn); p = exp((-Vnew(Sinodes)+Fp)./Vthp); n(SiDnodes) = nin(SiDnodes); p(SiDnodes) = pin(SiDnodes); %%% %%% Compute LHS matrices %%% %% let's compute FEM approximation of $$ L = - \frac{d^2}{x^2} $$ %L = Ucomplap (mesh,ones(Nelements,1)); %% compute $$ Mv = ( n + p) $$ %% and the (lumped) mass matrix M freecarr=zeros(Nnodes,1); freecarr(Sinodes)=(n./Vthn + p./Vthp); Mv = freecarr; M = DDGOXNLPOISSON_MASS*spdiag(Mv); %%% %%% Compute RHS vector (-residual) %%% %% now compute $$ T0 = \frac{q}{\epsilon} (n - p - D) $$ totcharge( Sinodes)=(n - p - D); Tv0 = totcharge; T0 = Tv0 .* DDGOXNLPOISSON_RHS;%T0 = Ucompconst (mesh,Tv0,ones(Nelements,1)); %% now we're ready to build LHS matrix and RHS of the linear system for 1st Newton step A = DDGOXNLPOISSON_LAP + M; R = DDGOXNLPOISSON_LAP * Vnew + T0; %% Apply boundary conditions A (Dnodes,:) = []; A (:,Dnodes) = []; R(Dnodes) = []; %% compute $$ | R_{k+1} | $$ for the convergence test normrnew= norm(R,inf); % check if more damping is needed if (normrnew > normr(newtit)) tk = tk/dampcoeff; else if (verbose>2) fprintf(1,'\nexiting damping cycle because residual norm = %e \n-----------\n',normrnew); end break end end V = Vnew; normr(newtit+1) = normrnew; dVnorm = norm(tk*dV,inf); pause(.1); % check if convergence has been reached reldVnorm = dVnorm / norm(V,inf); if (reldVnorm <= toll) if(verbose>2) fprintf(1,'\nexiting newton cycle because reldVnorm= %e \n',reldVnorm); end break end end res = normr; niter = newtit; secs2d-0.0.8/inst/ThDDGOX/ThDDGOXeletiteration.m0000644000175000017500000000752511201030277016740 0ustar shshfunction [odata,nrm]=ThDDGOXeletiteration(imesh,Dsides,... Simesh,Sinodes,Sielements,SiDsides,... idata,toll,maxit,ptoll,pmaxit,verbose) ## function [odata,nrm]=ThDDGOXeletiteration(imesh,Dsides,... ## Simesh,Sinodes,Sielements,SiDsides,areaSi,SiPatch,... ## idata,toll,maxit,ptoll,pmaxit,verbose) global DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS %%%%%%%%%%%%%%% %% RRE param %% RREnnit = [1,2]; RRErank = 7; RREpattern = URREcyclingpattern(RREnnit,RRErank,maxit); %%%%%%%%%%%%%%% odata = idata; V(:,1) = idata.V; Fn(:,1) = idata.Fn; Fp(:,1) = idata.Fp; n(:,1) = idata.n; p(:,1) = idata.p; Tl = idata.Tl; Tn = idata.Tn; Tp = idata.Tp; %% Set list of nodes with Dirichlet BCs Dnodes = Unodesonside(imesh,Dsides); SiDnodes = Unodesonside(Simesh,SiDsides); SiNelements = columns(Simesh.t); D = idata.D; nrm = 1; for ielet=1:maxit if (verbose>=1) fprintf(1,"*** start of inner iteration number: %d\n",ielet); end if (verbose>=1) fprintf(1,"\t*** solving non linear poisson equation\n"); end Fnshift = log(idata.ni) .* (1-Tn); Fpshift = -log(idata.ni) .* (1-Tp); [V(:,2),n(:,2),p(:,2)] = ThDDGOXnlpoisson (imesh,Dsides,Sinodes,SiDnodes,Sielements,... V(:,1),Tn,Tp,... n(:,1),p(:,1),Fn(:,1)+Fnshift,Fp(:,1)+Fpshift,D,... idata.l2,idata.l2ox,ptoll,pmaxit,verbose-1); V(Dnodes,2) = idata.V(Dnodes); if (verbose>=1) fprintf (1,"\t***\tupdating electron qfl\n"); end odata.V = V(:,2); odata.n = n(:,2); odata.p = p(:,2); mobn0 = idata.mobn0(imesh,Simesh,Sinodes,Sielements,odata); mobp0 = idata.mobp0(imesh,Simesh,Sinodes,Sielements,odata); mobn1 = idata.mobn1(imesh,Simesh,Sinodes,Sielements,odata); mobp1 = idata.mobp1(imesh,Simesh,Sinodes,Sielements,odata); n(:,3) = ThDDGOXelectron_driftdiffusion(Simesh,SiDnodes,n(:,2),p(:,2),... V(Sinodes,2),Tn,mobn0,mobn1,... idata.tn,idata.tp,idata.ni,idata.ni); Fn(:,2)=V(Sinodes,2) - Tn .* log(n(:,3)) - Fnshift; n(SiDnodes,3) = idata.n(SiDnodes); Fn(SiDnodes,2) = idata.Fn(SiDnodes); if (verbose>=1) fprintf(1,"\t***\tupdating hole qfl\n"); end p(:,3) = ThDDGOXhole_driftdiffusion(Simesh,SiDnodes,n(:,3),p(:,2),... V(Sinodes,2),Tp,mobp0,mobp1,... idata.tn,idata.tp,idata.ni,idata.ni); Fp(:,2)= V(Sinodes,2) + Tp .* log(p(:,3)) - Fpshift; p(SiDnodes,3) = idata.p(SiDnodes); Fp(SiDnodes,2) = idata.Fp(SiDnodes); ## store result for RRE if RREpattern(ielet)>0 Fermistore(:,RREpattern(ielet)) = [Fn(:,2);Fp(:,2)]; if RREpattern(ielet+1)==0 % Apply RRE extrapolation if (verbose>=1) fprintf(1,"\n\t**********\n\tRRE EXTRAPOLATION STEP\n\t**********\n\n"); end Fermi = Urrextrapolation(Fermistore); Fn(:,2) = Fermi(1:rows(Fn)); Fp(:,2) = Fermi(rows(Fn)+1:end); end end if (verbose>=1) fprintf(1,"*** checking for convergence: "); end nrfn= norm (Fn(:,2)-Fn(:,1),inf); nrfp= norm (Fp(:,2)-Fp(:,1),inf); nrv = norm (V(:,2)-V(:,1),inf); nrm(ielet) = max([nrfn;nrfp;nrv]); if (verbose>=1) subplot(1,3,3); semilogy(nrm) %%title("max(|dV|,|dFn|,|dFp|)"); pause(.1) end if (verbose>=1) fprintf (1," max(|dFn|,|dFp|,|dV| )= %g\n\n",... nrm(ielet)); end if (nrm(ielet)0) fprintf(1,"\n*** DD simulation over: # of electrical Gummel iterations = %d\n\n",ielet); end odata = idata; odata.n = n(:,end); odata.p = p(:,end); odata.V = V(:,end); odata.Fn = Fn(:,end); odata.Fp = Fp(:,end); secs2d-0.0.8/inst/ThDDGOX/ThDDGOXthermaliteration.m0000644000175000017500000001100511201030277017427 0ustar shshfunction [thermdata,nrm] = ThDDGOXthermaliteration(imesh,Dsides,... Simesh,Sinodes,Sielements,... SiDsides,thermdata,toll,... maxit,verbose) %% [thermdata,innrm] = ThDDGOXthermaliteration(imesh,Dsides,... %% Simesh,Sinodes,Sielements,... %% SiDsides,thermdata,toll,... %% maxit,verbose) %%%%%%%%%%%%%%% %% RRE param %% RREnnit = [10,2]; RRErank = maxit; RREpattern = URREcyclingpattern(RREnnit,RRErank,maxit); %%%%%%%%%%%%%%% %% Set list of nodes with Dirichlet BCs Dnodes = Unodesonside(imesh,Dsides); SiDnodes = Unodesonside(Simesh,SiDsides); Tl = thermdata.Tl; Tn = thermdata.Tn; Tp = thermdata.Tp; tldampcoef = 1; tndampcoef = 10; tpdampcoef = 10; mobn0 = thermdata.mobn0(imesh,Simesh,Sinodes,Sielements,thermdata); mobp0 = thermdata.mobp0(imesh,Simesh,Sinodes,Sielements,thermdata); mobn1 = thermdata.mobn1(imesh,Simesh,Sinodes,Sielements,thermdata); mobp1 = thermdata.mobp1(imesh,Simesh,Sinodes,Sielements,thermdata); twn0 = thermdata.twn0 (imesh,Simesh,Sinodes,Sielements,thermdata); twp0 = thermdata.twp0 (imesh,Simesh,Sinodes,Sielements,thermdata); twn1 = thermdata.twn1 (imesh,Simesh,Sinodes,Sielements,thermdata); twp1 = thermdata.twp1 (imesh,Simesh,Sinodes,Sielements,thermdata); [Ex,Ey] = Updegrad(Simesh,-thermdata.V(Sinodes)); E = [Ex;Ey]; [jnx,jny] = Ufvsgcurrent3(Simesh,thermdata.n,... mobn0,mobn1,Tn,thermdata.V(Sinodes)-Tn); [jpx,jpy] = Ufvsgcurrent3(Simesh,thermdata.p,... -mobp0,mobp1,Tp,-thermdata.V(Sinodes)-Tp); Jn = [jnx;jny]; Jp = [jpx;jpy]; for ith=1:maxit if (verbose>=1) fprintf(1,"*** start of inner iteration number: %d\n",ith); end if (verbose>=1) fprintf(1,'\t***updating electron temperature\n'); end Tn = ThDDGOXupdateelectron_temp(Simesh,SiDnodes,thermdata.Tn,... thermdata.n,thermdata.p,... thermdata.Tl,Jn,E,mobn0,... twn0,twn1,thermdata.tn,thermdata.tp,... thermdata.ni,thermdata.ni); ##Tn(Tn0) tndampfact_n = log(1+tndampcoef*dtn)/(tndampcoef*dtn); Tn = tndampfact_n * Tn + (1-tndampfact_n) * thermdata.Tn; end if (verbose>=1) fprintf(1,'\t***updating hole temperature\n'); end Tp = ThDDGOXupdatehole_temp(Simesh,SiDnodes,thermdata.Tp,... thermdata.n,thermdata.p,... thermdata.Tl,Jp,E,mobp0,... twp0,twp1,thermdata.tn,thermdata.tp,... thermdata.ni,thermdata.ni); ##Tp(Tp0) tpdampfact_p = log(1+tpdampcoef*dtp)/(tpdampcoef*dtp); Tp = tpdampfact_p * Tp + (1-tpdampfact_p) * thermdata.Tp; end if (verbose>=1) fprintf(1,'\t***updating lattice temperature\n'); end ## store result for RRE if RREpattern(ith)>0 TEMPstore(:,RREpattern(ith)) = [Tn;Tp;Tl]; if RREpattern(ith+1)==0 % Apply RRE extrapolation if (verbose>=1) fprintf(1,"\n\t**********\n\tRRE EXTRAPOLATION STEP\n\t**********\n\n"); end TEMP = Urrextrapolation(TEMPstore); Tn = TEMP(1:rows(Tn)); Tp = TEMP(rows(Tn)+1:rows(Tn)+rows(Tp)); Tl = TEMP(rows(Tn)+rows(Tp)+1:end); end end Tl = ThDDGOXupdatelattice_temp(Simesh,SiDnodes,thermdata.Tl,... Tn,Tp,thermdata.n,... thermdata.p,thermdata.kappa,thermdata.Egap,... thermdata.tn,thermdata.tp,twn0,... twp0,twn1,twp1,... thermdata.ni,thermdata.ni); ##Tl(Tl 0) tldampfact = log(1+tldampcoef*dtl)/(tldampcoef*dtl); Tl = tldampfact * Tl + (1-tldampfact) * thermdata.Tl; end if (verbose>=1) fprintf(1,"\t*** checking for convergence:\n "); end nrm(ith) = max([dtl,dtn,dtp]); if (verbose>=1) fprintf (1,"\t\t|dTL|= %g\n",dtl); fprintf (1,"\t\t|dTn|= %g\n",dtn); fprintf (1,"\t\t|dTp|= %g\n",dtp); end thermdata.Tl = Tl; thermdata.Tn = Tn; thermdata.Tp = Tp; if (verbose>1) subplot(1,3,2); title("max(|dTl|,|dTn|,|dTn|)") semilogy(nrm) pause(.1) end if nrm(ith)< toll if (verbose>=1) fprintf(1,"\n***\n***\texit from thermal iteration \n"); end break end endsecs2d-0.0.8/inst/ThDDGOX/ThDDGOXMOBN0STD.m0000644000175000017500000000027011201030277015244 0ustar shshfunction x = ThDDGOXMOBN0STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = idata.un * ones(Nelements,1); endfunction secs2d-0.0.8/inst/ThDDGOX/ThDDGOXddcurrent.m0000644000175000017500000000340311201030277016051 0ustar shshfunction [current,divrg]=ThDDGOXddcurrent(Simesh,Sinodes,data,contacts); % [current,divrg]=DDGOXddcurrent(Simesh,Sinodes,data,contacts); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . 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)); end Is = q*data.us*data.Vs*data.ns; current = current * Is; secs2d-0.0.8/inst/ThDDGOX/ThDDGOXgummelmap.m0000644000175000017500000000345611201030277016053 0ustar shshfunction [odata,ith,res] = ThDDGOXgummelmap (imesh,Dsides,... Simesh,Sinodes,Sielements,SiDsides,... idata,tol,maxit,ptol,pmaxit,thtol,thmaxit,... eltol,elmaxit,verbose) ## [odata,it,res] = ThDDGOXgummelmap (imesh,Dsides,... ## Simesh,Sinodes,Sielements,SiDsides,... ## idata,tol,maxit,ptol,pmaxit,thtol,thmaxit,... ## eltol,elmaxit,verbose) clear DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS global DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS eletdata = idata; thermdata = idata; nrm = 1; eletnrm = []; thermnrm = []; for ith=1:maxit eletdata.Tl = thermdata.Tl; eletdata.Tn = thermdata.Tn; eletdata.Tp = thermdata.Tp; if (verbose>=1) fprintf(1,'\n***\n***\tupdating potentials\n***\n'); end [eletdata,innrm1]=ThDDGOXeletiteration(imesh,Dsides,... Simesh,Sinodes,Sielements,SiDsides,... eletdata,eltol,elmaxit,ptol,pmaxit,verbose); eletnrm = [eletnrm,innrm1]; thermdata.n = eletdata.n; thermdata.p = eletdata.p; thermdata.V = eletdata.V; if (verbose>=1) fprintf(1,'\n***\n***\tupdating temperatures\n***\n'); end [thermdata,innrm] = ThDDGOXthermaliteration(imesh,Dsides,... Simesh,Sinodes,Sielements,SiDsides,... thermdata,thtol,thmaxit,2); thermnrm = [eletnrm,innrm]; nrm(ith) = max([innrm,innrm1]); if (verbose>=1) subplot(1,3,1); semilogy(nrm) pause(.1) end if (nrm(ith)0) fprintf(1,"\n***\n***\tThDD simulation over: # \ of Global iterations = %d\n***\n",ith); end break end end res = {nrm,eletnrm,thermnrm}; odata = thermdata; secs2d-0.0.8/inst/ThDDGOX/ThDDGOXTWN1STD.m0000644000175000017500000000027311201030277015165 0ustar shshfunction x = ThDDGOXTWN1STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = idata.Tl./(1+idata.Tl./idata.Tn); endfunction secs2d-0.0.8/inst/ThDDGOX/ThDDGOXupdatehole_temp.m0000644000175000017500000000417111201030277017241 0ustar shshfunction Tp = ThDDGOXupdatehole_temp(imesh,Dnodes,Tp,n,p,Tl,Jp,E,mobp0,... twp0,twp1,tn,tp,n0,p0) %% %% Tp = ThDDGOXupdatehole_temp(mesh,Dnodes,Tp,n,p,Tl,Jp,E,mobp0,... %% twp0,twp1,tn,tp,n0,p0) %% %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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 . Nnodes = columns(imesh.p); Nelements = columns(imesh.t); Varnodes = setdiff(1:Nnodes,Dnodes); alpha = mobp0; gamma = ones(Nnodes,1); eta = 1.5 * p .* Tl; betax = Jp(1,:)./ mobp0'; betay = Jp(2,:)./ mobp0'; beta = 2.5*[betax;betay]; Sn = Uscharfettergummel3(imesh,alpha,gamma,eta,beta); denom = (tp*(n+sqrt(n0.*p0))+tn*(p+sqrt(n0.*p0))); R = (p.*n)./denom; MASS_LHS1 = Ucompmass2(imesh,1.5*R,ones(Nelements,1)); MASS_LHS2 = Ucompmass2(imesh,1.5*p./twp1,1./twp0); LHS = Sn + MASS_LHS1 + MASS_LHS2; G = (p0.*n0)./denom; PJoule = Jp(1,:).*E(1,:) + Jp(2,:).*E(2,:); PJoule(PJoule<0) = 0; rhsJoule = Ucompconst (imesh,ones(Nnodes,1),PJoule'); rhsR_G = Ucompconst (imesh,1.5*G.*Tp,ones(Nelements,1)); rhsTh_L = Ucompconst (imesh,1.5*p.*Tl./twp1,1./twp0); RHS = rhsJoule + rhsR_G + rhsTh_L; Tp(Varnodes) = LHS(Varnodes,Varnodes) \(RHS(Varnodes) -... LHS(Varnodes,Dnodes)*Tp(Dnodes)); secs2d-0.0.8/inst/ThDDGOX/ThDDGOXMOBN1STD.m0000644000175000017500000000025511201030277015250 0ustar shshfunction x = ThDDGOXMOBN1STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = idata.Tl./idata.Tn; endfunction secs2d-0.0.8/inst/ThDDGOX/ThDDGOXelectron_driftdiffusion.m0000644000175000017500000000315711201030277020777 0ustar shshfunction n=ThDDGOXelectron_driftdiffusion(mesh,Dnodes,n,pin,V,... Tn,mobn0,mobn1,tn,tp,n0,p0) %% %% n=ThDDGOXelectron_driftdiffusion(mesh,Dnodes,n,pin,V,Tn,un0,un1,tn,tp,n0,p0) %% %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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 . Nnodes = columns(mesh.p); Nelements = columns(mesh.t); Varnodes = setdiff(1:Nnodes,Dnodes); alpha = mobn0; gamma = mobn1; eta = Tn; beta = V-Tn; Dn = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); denom = (tp*(n+sqrt(n0.*p0))+tn*(pin+sqrt(n0.*p0))); MASS_LHS = Ucompmass2(mesh,pin./denom,ones(Nelements,1)); LHS = Dn+MASS_LHS; RHS = Ucompconst (mesh,p0.*n0./denom,ones(Nelements,1)); n(Varnodes) = LHS(Varnodes,Varnodes) \(RHS(Varnodes) -... LHS(Varnodes,Dnodes)*n(Dnodes)); secs2d-0.0.8/inst/ThDDGOX/ThDDGOXTWN0STD.m0000644000175000017500000000031611201030277015162 0ustar shshfunction x = ThDDGOXTWN0STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = 1.5 * idata.un * ones(Nelements,1) ./ idata.vsatn^2; endfunction secs2d-0.0.8/inst/ThDDGOX/ThDDGOXupdatelattice_temp.m0000644000175000017500000000375511201030277017746 0ustar shshfunction Tl = ThDDGOXupdatelattice_temp(mesh,Dnodes,Tl,Tn,Tp,n,p,... kappa,Egap,tn,tp,... twn0,twp0,twn1,twp1,n0,p0) %% %% Tl = ThDDGOXupdatelattice_temp(mesh,Dnodes,Tl,Tn,Tp,n,p,... %% kappa,Egap,tn,tp,... %% twn0,twp0,twn1,twp1,n0,p0) %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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 . Nnodes = columns(mesh.p); Nelements = columns(mesh.t); Varnodes = setdiff(1:Nnodes,Dnodes); alpha = kappa*ones(Nelements,1); gamma = Tl.^(-4/3); eta = ones (Nnodes,1); L = Uscharfettergummel3(mesh,alpha,gamma,eta,0); MASS_LHSn = Ucompmass2(mesh,1.5*n./twn1,1./twn0); MASS_LHSp = Ucompmass2(mesh,1.5*p./twp1,1./twp0); LHS = L+MASS_LHSn+MASS_LHSp; denom = (tp*(n+sqrt(n0.*p0))+tn*(p+sqrt(n0.*p0))); U = (p.*n-p0.*n0)./denom; RHS1 = Ucompconst(mesh,(Egap+1.5*(Tn + Tp)).*U,ones(Nelements,1)); RHS2n = Ucompconst(mesh,1.5*n.*Tn./twn1,1./twn0); RHS2p = Ucompconst(mesh,1.5*p.*Tp./twp1,1./twp0); RHS = RHS1 + RHS2n + RHS2p; Tl(Varnodes) = LHS(Varnodes,Varnodes) \... (RHS(Varnodes) - LHS(Varnodes,Dnodes)*Tl(Dnodes)); secs2d-0.0.8/inst/ThDDGOX/ThDDGOXMOBP1STD.m0000644000175000017500000000025511201030277015252 0ustar shshfunction x = ThDDGOXMOBP1STD (imesh,Simesh,Sinodes,Sielements,idata) Nnodes = columns(Simesh.p); Nelements = columns(Simesh.t); x = idata.Tl./idata.Tp; endfunction secs2d-0.0.8/inst/METLINES/0000755000175000017500000000000011201031505012671 5ustar shshsecs2d-0.0.8/inst/METLINES/METLINEScapcomp.m0000644000175000017500000000142711201030277015643 0ustar shshfunction [C,L,Lii,LiI,LII,Dnodes,varnodes]=... METLINEScapcomp(imesh,epsilon,contacts) ## ## ## [C,L,Lii,LiI,LII,Dnodes,varnodes]=METLINEScapcomp(imesh,epsilon,contacts) ## ## Ncontacts = length(contacts); Nnodes = columns(imesh.p); varnodes = [1:Nnodes]; for ii=1:Ncontacts Dnodes{ii}=Unodesonside(imesh,contacts{ii}); varnodes = setdiff(varnodes,Dnodes{ii}); end L = Ucomplap (imesh,epsilon); for ii=1:Ncontacts Lii{ii} = L(Dnodes{ii},Dnodes{ii}); LiI{ii} = L(Dnodes{ii},varnodes); end LII = L(varnodes,varnodes); for ii=1:Ncontacts for jj=ii:Ncontacts if ii==jj C(ii,jj)=sum(sum(Lii{ii}-LiI{ii}*(LII\(LiI{ii})'))); else C(ii,jj)=sum(sum(-LiI{ii}*(LII\(LiI{jj})'))); end end end for ii=1:4 for jj=1:ii-1 C(ii,jj)=C(jj,ii); end end secs2d-0.0.8/inst/METLINES/METLINESdefinepermittivity.m0000644000175000017500000000063211201030277020142 0ustar shshfunction epsilon = METLINESdefinepermittivity(omesh,basevalue,varargin); ## ## ## epsilon = METLINESdefinepermittivity(omesh,basevalue,[regions1, value1,...]); ## ## load (file_in_path(path,'constants.mat')); epsilon = e0*basevalue*ones(size(omesh.t(1,:)))'; for ii=1:floor(length(varargin)/2) [ignore1,ignore2,elements]=Usubmesh(omesh,[],varargin{2*ii-1},1); epsilon(elements) = varargin{2*ii}*e0; end secs2d-0.0.8/inst/DDGOX/0000755000175000017500000000000011201031505012316 5ustar shshsecs2d-0.0.8/inst/DDGOX/DDGOXhole_driftdiffusion.m0000644000175000017500000000313411201030277017316 0ustar shshfunction p=DDGOXhole_driftdiffusion(mesh,Dsides,nin,pin,V,up,tn,tp,n0,p0) %% % p=DDGhole_driftdiffusion(mesh,Dsides,nin,pin,V,up,tn,tp,n0,p0) % IN: % v = electric potential % mesh = integration domain % nin = initial guess and BCs for electron density % pin = hole density (to compute SRH recombination) % OUT: % p = updated hole density %% % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . if (Ucolumns(nin)>Urows(nin)) nin=nin'; end if (Ucolumns(V)>Urows(V)) V=V'; end if (Ucolumns(pin)>Urows(pin)) pin=pin'; end Nnodes = max(size(mesh.p)); Nelements = max(size(mesh.t)); denom = (tp*(nin+sqrt(n0.*p0))+tn*(pin+sqrt(n0.*p0))); u = up; U = n0.*p0./denom; M = nin./denom; guess = pin; V = -V; p = Udriftdiffusion(mesh,Dsides,guess,M,U,V,u); secs2d-0.0.8/inst/DDGOX/DDGOXgummelmap.m0000644000175000017500000001231311201030277015253 0ustar shshfunction [odata,it,res] = DDGOXgummelmap (imesh,Dsides,... Simesh,Sinodes,Sielements,SiDsides,... idata,toll,maxit,ptoll,pmaxit,verbose) % [odata,it,res] = DDGOXgummelmap (imesh,Dsides,... % Simesh,Sinodes,Sielements,SiDsides,... % idata,toll,maxit,ptoll,pmaxit,verbose) % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . clear DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS global DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS %%%%%%%%%%%%%%% %% RRE param %% RREnnit = [1,0]; RRErank = 5; RREpattern = URREcyclingpattern(RREnnit,RRErank,maxit); %%%%%%%%%%%%%%% Nnodes = max(size(imesh.p)); Nelements = max(size(imesh.t)); SiNnodes = max(size(Simesh.p)); SiNelements = max(size(Simesh.t)); V (:,1) = idata.V; p (:,1) = idata.p; n (:,1) = idata.n; Fn(:,1) = idata.Fn; Fp(:,1) = idata.Fp; D = idata.D; % Set list of nodes with Dirichelet BCs Dnodes = Unodesonside(imesh,Dsides); % Set list of nodes with Dirichelet BCs SiDnodes = Unodesonside(Simesh,SiDsides); nrm = 1; for i=1:1:maxit if (verbose>=1) fprintf(1,'*****************************************************************\n'); fprintf(1,'**** start of gummel iteration number: %d\n',i); fprintf(1,'*****************************************************************\n'); end if (verbose>=1) fprintf(1,'solving non linear poisson equation\n'); if ((i>1)&(verbose>1)) DDGOXplotresults(imesh,Simesh,n(:,1)*idata.ns,p(:,1)*idata.ns,V(:,1)*idata.Vs,... Fn(:,1)*idata.Vs,Fp(:,1)*idata.Vs,i,nrm(end),'poisson'); end end [V(:,2),n(:,2),p(:,2)] =... DDGOXnlpoisson (imesh,Dsides,Sinodes,SiDnodes,Sielements,... V(:,1),n(:,1),p(:,1),Fn(:,1),Fp(:,1),D,... idata.l2,idata.l2ox,ptoll,pmaxit,verbose-1); V(Dnodes,2) = idata.V(Dnodes); if (verbose>=1) fprintf (1,'***\nupdating electron qfl\n'); if ((i>1)&(verbose>1)) DDGOXplotresults(imesh,Simesh,n(:,2)*idata.ns,p(:,2)*idata.ns,... V(:,2)*idata.Vs,Fn(:,1)*idata.Vs,Fp(:,1)*idata.Vs,i,nrm(end),'e- continuity'); end end mob = Ufielddepmob(Simesh,idata.un,Fn(:,1),idata.vsatn,idata.mubn); n(:,3) =DDGOXelectron_driftdiffusion(Simesh,SiDsides,n(:,2),p(:,2),... V(Sinodes,2),mob,... idata.tn,idata.tp,idata.ni,idata.ni); Fn(:,2)=V(Sinodes,2) - log(n(:,3)); n(SiDnodes,3) = idata.n(SiDnodes); Fn(SiDnodes,2) = idata.Fn(SiDnodes); %%%% store result for RRE if RREpattern(i)>0 Fnstore(:,RREpattern(i)) = Fn(:,2); if RREpattern(i+1)==0 % Apply RRE extrapolation if (verbose>=1) fprintf(1,'\n**********\nRRE EXTRAPOLATION STEP\n**********\n'); end Fn(:,2) = Urrextrapolation(Fnstore); end end if (verbose>=1) fprintf(1,'***\nupdating hole qfl\n'); if ((i>1)&(verbose>1)) DDGOXplotresults(imesh,Simesh,n(:,3)*idata.ns,p(:,2)*idata.ns,V(:,2)*idata.Vs,... Fn(:,2)*idata.Vs,Fp(:,1)*idata.Vs,i,nrm(end),'h+ continuity'); end end mob = Ufielddepmob(Simesh,idata.up,Fp(:,1),idata.vsatp,idata.mubp); p(:,3) =DDGOXhole_driftdiffusion(Simesh,SiDsides,n(:,3),p(:,2),... V(Sinodes,2),mob,... idata.tn,idata.tp,idata.ni,idata.ni); Fp(:,2)= V(Sinodes,2) + log(p(:,3)); p(SiDnodes,3) = idata.p(SiDnodes); Fp(SiDnodes,2) = idata.Fp(SiDnodes); if (verbose>=1) fprintf(1,'checking for convergence\n'); end nrfn= norm(Fn(:,2)-Fn(:,1),inf); nrfp= norm (Fp(:,2)-Fp(:,1),inf); nrv = norm (V(:,2)-V(:,1),inf); nrm(i) = max([nrfn;nrfp;nrv]); if (verbose>1) figure(2); semilogy(nrm) pause(.1) end if (verbose>=1) fprintf (1,' max(|phin_(k+1)-phinn_(k)| ,...\n |phip_(k+1)-phip_(k)| ,...\n |v_(k+1)- v_(k)| )= %g\n',nrm(i)); end if (nrm(i)0) fprintf(1,'\n***********\nDD simulation over:\n # of Gummel iterations = %d\n\n',it); end odata = idata; odata.n = n(:,end); odata.p = p(:,end); odata.V = V(:,end); odata.Fn = Fn(:,end); odata.Fp = Fp(:,end); secs2d-0.0.8/inst/DDGOX/DDGOXplotresults.m0000644000175000017500000000314211201030277015667 0ustar shshfunction DDGOXplotresults(mesh,Simesh,n,p,V,Fn,Fp,gi,nrm,step); % % DDGOXplotresults(mesh,Simesh,n,p,V,Fn,Fp,gi,nrm,step); % % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . f1=figure(1); subplot(2,3,1) Updesurf(Simesh,log10(n),'colormap','jet','mesh','off','contour','on'); title('Electron Density (log)'); grid; colorbar; view(2) subplot(2,3,2) Updesurf(Simesh,log10(p),'colormap','jet','mesh','off'); title('Hole Density (log)'); grid; colorbar; view(2) subplot(2,3,4) Updesurf(Simesh,Fn,'colormap','jet','mesh','off'); title('Electron QFL'); grid; colorbar; view(2) subplot(2,3,5) Updesurf(Simesh,Fp,'colormap','jet','mesh','off'); title('Hole QFL'); grid; colorbar; view(2) subplot(1,3,3) Updesurf(mesh,V,'colormap','jet','mesh','off'); title('Electric Potential'); grid; colorbar; view(2) pause(.1) secs2d-0.0.8/inst/DDGOX/DDGOXnlpoisson.m0000644000175000017500000001435311201030277015321 0ustar shshfunction [V,n,p,res,niter] = DDGOXnlpoisson (mesh,Dsides,Sinodes,SiDnodes,... Sielements,Vin,nin,pin,... Fnin,Fpin,D,l2,l2ox,... toll,maxit,verbose) % % [V,n,p,res,niter] = DDGOXnlpoisson (mesh,Dsides,Sinodes,Vin,nin,pin,... % Fnin,Fpin,D,l2,l2ox,toll,maxit,verbose) % % solves $$ -\lambda^2 V'' + (n(V,Fn) - p(V,Fp) -D)$$ % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . global DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS %% Set some useful constants dampit = 10; dampcoeff = 2; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% convert input vectors to columns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if Ucolumns(D)>Urows(D) D=D'; end if Ucolumns(nin)>Urows(nin) nin=nin'; end if Ucolumns(pin)>Urows(pin) pin=pin'; end if Ucolumns(Vin)>Urows(Vin) Vin=Vin'; end if Ucolumns(Fnin)>Urows(Fnin) Fnin=Fnin'; end if Ucolumns(Fpin)>Urows(Fpin) Fpin=Fpin'; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% setup FEM data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nodes=mesh.p; elements=mesh.t; Nnodes = length(nodes); Nelements = length(elements); % Set list of nodes with Dirichelet BCs Dnodes = Unodesonside(mesh,Dsides); % Set values of Dirichelet BCs Bc = zeros(length(Dnodes),1); % Set list of nodes without Dirichelet BCs Varnodes = setdiff([1:Nnodes],Dnodes); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% initialization: %% we're going to solve %% $$ - \lambda^2 (\delta V)'' + (\frac{\partial n}{\partial V} - \frac{\partial p}{\partial V})= -R $$ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% set $$ n_1 = nin $$ and $$ V = Vin $$ V = Vin; Fn = Fnin; Fp = Fpin; n = exp(V(Sinodes)-Fn); p = exp(-V(Sinodes)+Fp); n(SiDnodes) = nin(SiDnodes); p(SiDnodes) = pin(SiDnodes); %%% %%% Compute LHS matrices %%% %% let's compute FEM approximation of $$ L = - \frac{d^2}{x^2} $$ if (isempty(DDGOXNLPOISSON_LAP)) coeff = l2ox * ones(Nelements,1); coeff(Sielements)=l2; DDGOXNLPOISSON_LAP = Ucomplap (mesh,coeff); end %% compute $$ Mv = ( n + p) $$ %% and the (lumped) mass matrix M if (isempty(DDGOXNLPOISSON_MASS)) coeffe = zeros(Nelements,1); coeffe(Sielements)=1; DDGOXNLPOISSON_MASS = Ucompmass2(mesh,ones(Nnodes,1),coeffe); end freecarr=zeros(Nnodes,1); freecarr(Sinodes)=(n + p); Mv = freecarr; M = DDGOXNLPOISSON_MASS*spdiag(Mv); %%% %%% Compute RHS vector (-residual) %%% %% now compute $$ T0 = \frac{q}{\epsilon} (n - p - D) $$ if (isempty(DDGOXNLPOISSON_RHS)) coeffe = zeros(Nelements,1); coeffe(Sielements)=1; DDGOXNLPOISSON_RHS = Ucompconst (mesh,ones(Nnodes,1),coeffe); end totcharge = zeros(Nnodes,1); totcharge(Sinodes)=(n - p - D); Tv0 = totcharge; T0 = Tv0 .* DDGOXNLPOISSON_RHS; %% now we're ready to build LHS matrix and RHS of the linear system for 1st Newton step A = DDGOXNLPOISSON_LAP + M; R = DDGOXNLPOISSON_LAP * V + T0; %% Apply boundary conditions A (Dnodes,:) = []; A (:,Dnodes) = []; R(Dnodes) = []; %% we need $$ \norm{R_1} $$ and $$ \norm{R_k} $$ for the convergence test normr(1) = norm(R,inf); relresnorm = 1; reldVnorm = 1; normrnew = normr(1); dV = V*0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% START OF THE NEWTON CYCLE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for newtit=1:maxit if (verbose>0) fprintf(1,'\n***\nNewton iteration: %d, reldVnorm = %e\n***\n',newtit,reldVnorm); end % A(1,end)=realmin; dV(Varnodes) =(A)\(-R); dV(Dnodes)=0; %%%%%%%%%%%%%%%%%% %% Start of th damping procedure %%%%%%%%%%%%%%%%%% tk = 1; for dit = 1:dampit if (verbose>0) fprintf(1,'\ndamping iteration: %d, residual norm = %e\n',dit,normrnew); end Vnew = V + tk * dV; n = exp(Vnew(Sinodes)-Fn); p = exp(-Vnew(Sinodes)+Fp); n(SiDnodes) = nin(SiDnodes); p(SiDnodes) = pin(SiDnodes); %%% %%% Compute LHS matrices %%% %% let's compute FEM approximation of $$ L = - \frac{d^2}{x^2} $$ %L = Ucomplap (mesh,ones(Nelements,1)); %% compute $$ Mv = ( n + p) $$ %% and the (lumped) mass matrix M freecarr=zeros(Nnodes,1); freecarr(Sinodes)=(n + p); Mv = freecarr; M = DDGOXNLPOISSON_MASS*spdiag(Mv); %%% %%% Compute RHS vector (-residual) %%% %% now compute $$ T0 = \frac{q}{\epsilon} (n - p - D) $$ totcharge( Sinodes)=(n - p - D); Tv0 = totcharge; T0 = Tv0 .* DDGOXNLPOISSON_RHS;%T0 = Ucompconst (mesh,Tv0,ones(Nelements,1)); %% now we're ready to build LHS matrix and RHS of the linear system for 1st Newton step A = DDGOXNLPOISSON_LAP + M; R = DDGOXNLPOISSON_LAP * Vnew + T0; %% Apply boundary conditions A (Dnodes,:) = []; A (:,Dnodes) = []; R(Dnodes) = []; %% compute $$ | R_{k+1} | $$ for the convergence test normrnew= norm(R,inf); % check if more damping is needed if (normrnew > normr(newtit)) tk = tk/dampcoeff; else if (verbose>0) fprintf(1,'\nexiting damping cycle because residual norm = %e \n-----------\n',normrnew); end break end end V = Vnew; normr(newtit+1) = normrnew; dVnorm = norm(tk*dV,inf); pause(.1); % check if convergence has been reached reldVnorm = dVnorm / norm(V,inf); if (reldVnorm <= toll) if(verbose>0) fprintf(1,'\nexiting newton cycle because reldVnorm= %e \n',reldVnorm); end break end end res = normr; niter = newtit; secs2d-0.0.8/inst/DDGOX/DDGOXddcurrent.m0000644000175000017500000000316511201030277015266 0ustar shshfunction [current,divrg]=DDGOXddcurrent(mesh,Sinodes,data,contacts); % [current,divrg]=DDGOXddcurrent(mesh,Sinodes,data,contacts); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . load (file_in_path(path,'constants.mat')) Nelements = size(mesh.t,2); mob = Ufielddepmob(mesh,data.un,data.Fn,data.vsatn,data.mubn); An = Uscharfettergummel(mesh,data.V(Sinodes),mob); mob = Ufielddepmob(mesh,data.up,data.Fp,data.vsatp,data.mubp); Ap = Uscharfettergummel(mesh,-data.V(Sinodes),mob); 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)); end Is = q*data.us*data.Vs*data.ns; current = current * Is; secs2d-0.0.8/inst/DDGOX/DDGOXelectron_driftdiffusion.m0000644000175000017500000000313211201030277020200 0ustar shshfunction n=DDGOXelectron_driftdiffusion(mesh,Dsides,nin,pin,V,un,tn,tp,n0,p0) %% % n=DDGelectron_driftdiffusion(mesh,Dsides,nin,pin,V,un,tn,tp,n0,p0) % IN: % v = electric potential % mesh = integration domain % ng = initial guess and BCs for electron density % p = hole density (to compute SRH recombination) % OUT: % n = updated electron density %% % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . if (Ucolumns(nin)>Urows(nin)) nin=nin'; end if (Ucolumns(V)>Urows(V)) V=V'; end if (Ucolumns(pin)>Urows(pin)) pin=pin'; end Nnodes = max(size(mesh.p)); Nelements = max(size(mesh.t)); denom = (tp*(nin+sqrt(n0.*p0))+tn*(pin+sqrt(n0.*p0))); u = un; U = p0.*n0./denom; M = pin./denom; guess = nin; n = Udriftdiffusion(mesh,Dsides,guess,M,U,V,u); secs2d-0.0.8/inst/DDGOXT/0000755000175000017500000000000011201031505012442 5ustar shshsecs2d-0.0.8/inst/DDGOXT/DDGOXTgummelmap.m0000644000175000017500000001117011201030277015523 0ustar shshfunction [odata,it,res] = DDGOXTgummelmap (imesh,Dsides,... Simesh,Sinodes,Sielements,SiDsides,... idata,nold,pold,weight,toll,maxit,ptoll,... pmaxit,verbose) # function [odata,it,res] = DDGOXTgummelmap (imesh,Dsides,... # Simesh,Sinodes,Sielements,SiDsides,... # idata,oldn,oldp,weight,toll,maxit,ptoll,... # pmaxit,verbose) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . clear DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS global DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS %%%%%%%%%%%%%%% %% RRE param %% RREnnit = [5,5]; RRErank = 4; RREpattern = URREcyclingpattern(RREnnit,RRErank,maxit); %%%%%%%%%%%%%%% Nnodes = max(size(imesh.p)); Nelements = max(size(imesh.t)); SiNnodes = max(size(Simesh.p)); SiNelements = max(size(Simesh.t)); V (:,1) = idata.V; p (:,1) = idata.p; n (:,1) = idata.n; Fn(:,1) = idata.Fn; Fp(:,1) = idata.Fp; D = idata.D; % Set list of nodes with Dirichelet BCs Dnodes = Unodesonside(imesh,Dsides); % Set list of nodes with Dirichelet BCs SiDnodes = Unodesonside(Simesh,SiDsides); nrm = 1; for i=1:1:maxit if (verbose>=1) fprintf(1,'*****************************************************************\n'); fprintf(1,'**** start of gummel iteration number: %d\n',i); fprintf(1,'*****************************************************************\n'); end if (verbose>=1) fprintf(1,'solving non linear poisson equation\n'); end [V(:,2),n(:,2),p(:,2)] =... DDGOXnlpoisson (imesh,Dsides,Sinodes,SiDnodes,Sielements,... V(:,1),n(:,1),p(:,1),Fn(:,1),Fp(:,1),D,... idata.l2,idata.l2ox,ptoll,pmaxit,verbose-1); V(Dnodes,2) = idata.V(Dnodes); if (verbose>=1) fprintf (1,'***\nupdating electron qfl\n'); end mob = Ufielddepmob(Simesh,idata.un,Fn(:,1),idata.vsatn,idata.mubn); n(:,3) =DDGOXTelectron_driftdiffusion(Simesh,SiDsides,[n(:,2),nold],[p(:,2),pold],... V(Sinodes,2),mob,... idata.tn,idata.tp,idata.ni,idata.ni,weight); Fn(:,2)=V(Sinodes,2) - log(n(:,3)); n(SiDnodes,3) = idata.n(SiDnodes); Fn(SiDnodes,2) = idata.Fn(SiDnodes); %%%% store result for RRE if RREpattern(i)>0 Fnstore(:,RREpattern(i)) = Fn(:,2); if RREpattern(i+1)==0 % Apply RRE extrapolation if (verbose>=1) fprintf(1,'\n**********\nRRE EXTRAPOLATION STEP\n**********\n'); end Fn(:,2) = Urrextrapolation(Fnstore); end end if (verbose>=1) fprintf(1,'***\nupdating hole qfl\n'); end mob = Ufielddepmob(Simesh,idata.up,Fp(:,1),idata.vsatp,idata.mubp); p(:,3) =DDGOXThole_driftdiffusion(Simesh,SiDsides,[n(:,3),nold],[p(:,2),pold],... V(Sinodes,2),mob,... idata.tn,idata.tp,idata.ni,idata.ni,weight); Fp(:,2)= V(Sinodes,2) + log(p(:,3)); p(SiDnodes,3) = idata.p(SiDnodes); Fp(SiDnodes,2) = idata.Fp(SiDnodes); if (verbose>=1) fprintf(1,'checking for convergence\n'); end nrfn= norm(Fn(:,2)-Fn(:,1),inf); nrfp= norm (Fp(:,2)-Fp(:,1),inf); nrv = norm (V(:,2)-V(:,1),inf); nrm(i) = max([nrfn;nrfp;nrv]); if (verbose>=1) fprintf (1,' max(|phin_(k+1)-phinn_(k)| ,...\n |phip_(k+1)-phip_(k)| ,...\n |v_(k+1)- v_(k)| )= %g\n',nrm(i)); end if (nrm(i)0) fprintf(1,'\n***********\nDD simulation over:\n # of Gummel iterations = %d\n\n',it); end odata = idata; odata.n = n(:,end); odata.p = p(:,end); odata.V = V(:,end); odata.Fn = Fn(:,end); odata.Fp = Fp(:,end); secs2d-0.0.8/inst/DDGOXT/DDGOXTelectron_driftdiffusion.m0000644000175000017500000000324511201030277020455 0ustar shshfunction n=DDGOXTelectron_driftdiffusion(mesh,Dsides,nin,pin,V,un,tn,tp,n0,p0,weight) %% % n=DDGelectron_driftdiffusion(mesh,Dsides,nin,pin,V,un,tn,tp,n0,p0,weight) % % IN: % V = electric potential % mesh = integration domain % nin = electron density in the past + initial guess % pin = hole density in the past % n0,p0 = equilibrium densities % tn,tp = carrier lifetimes % weight = BDF weights % un = mobility % % OUT: % n = updated electron density % %% % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . BDForder = length(weight)-1; denom = (tp*(nin(:,end)+sqrt(n0.*p0))+tn*(pin(:,end)+sqrt(n0.*p0))); M = weight(1) + pin(:,end)./denom; u = un; U = p0.*n0./denom; for ii=1:BDForder U += -nin(:,end-ii)*weight(ii+1); end guess = nin(:,end); n = Udriftdiffusion(mesh,Dsides,guess,M,U,V,u); secs2d-0.0.8/inst/DDGOXT/DDGOXThole_driftdiffusion.m0000644000175000017500000000323211201030277017565 0ustar shshfunction p=DDGOXThole_driftdiffusion(mesh,Dsides,nin,pin,V,up,tn,tp,n0,p0,weight) %% % p=DDGhole_driftdiffusion(mesh,Dsides,nin,pin,V,un,tn,tp,n0,p0,weight) % % IN: % V = electric potential % mesh = integration domain % nin = electron density in the past % pin = hole density in the past + initial guess % n0,p0 = equilibrium densities % tn,tp = carrier lifetimes % weight = BDF weights % up = mobility % % OUT: % p = updated hole density % %% % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . BDForder = length(weight)-1; denom = (tp*(nin(:,end)+sqrt(n0.*p0))+tn*(pin(:,end)+sqrt(n0.*p0))); M = weight(1) + nin(:,end)./denom; u = up; U = p0.*n0./denom; for ii=1:BDForder U += -pin(:,end-ii)*weight(ii+1); end guess = pin(:,end); p = Udriftdiffusion(mesh,Dsides,guess,M,U,-V,u); secs2d-0.0.8/inst/QDDGOX/0000755000175000017500000000000011201031505012437 5ustar shshsecs2d-0.0.8/inst/QDDGOX/QDDGOXgummelmap.m0000644000175000017500000001773111201030277015526 0ustar shshfunction [odata,it,res] = QDDGOXgummelmap (imesh,Dsides,... Simesh,Sinodes,Sielements,SiDsides,Intsides,... idata,toll,maxit,ptoll,pmaxit,stoll,smaxit,verbose,options) % [odata,it,res] = QDDGOXgummelmap (imesh,Dsides,... % Simesh,Sinodes,Sielements,SiDsides,Intsides,... % idata,toll,maxit,ptoll,pmaxit,stoll,smaxit,verbose,options); clear global global DDGOXNLPOISSON_LAP DDGOXNLPOISSON_MASS DDGOXNLPOISSON_RHS DDG_RHS DDG_MASS %%%%%%%%%%%%%%% %% RRE param %% RREnnit = [1,0]; RRErank = 5; RREpattern = URREcyclingpattern(RREnnit,RRErank,maxit); RREnnit2 = [1,0]; RRErank2 = 4; RREpattern2 = URREcyclingpattern(RREnnit2,RRErank2,smaxit); %%%%%%%%%%%%%%% Nnodes = max(size(imesh.p)); Nelements = max(size(imesh.t)); SiNnodes = max(size(Simesh.p)); SiNelements = max(size(Simesh.t)); if (options.SRH==1) tn= idata.tn;tp=idata.tp; else tn=Inf;tp=Inf; end V (:,1) = idata.V; p (:,1) = idata.p; n (:,1) = idata.n; Fn(:,1) = idata.Fn; Fp(:,1) = idata.Fp; D = idata.D; Dedges =[]; for ii = 1:length(Dsides) Dedges=[Dedges,find(imesh.e(5,:)==Dsides(ii))]; end % Set list of nodes with Dirichelet BCs Dnodes = imesh.e(1:2,Dedges); Dnodes = [Dnodes(1,:) Dnodes(2,:)]; Dnodes = unique(Dnodes); Intedges =[]; for ii = 1:length(Intsides) Intedges=[Intedges,find(Simesh.e(5,:)==Intsides(ii))]; end % Set list of Interface nodes Intnodes = Simesh.e(1:2,Intedges); Intnodes = [Intnodes(1,:) Intnodes(2,:)]; Intnodes = unique(Intnodes); SiDedges =[]; for ii = 1:length(SiDsides) SiDedges=[SiDedges,find(Simesh.e(5,:)==SiDsides(ii))]; end % Set list of nodes with Dirichelet BCs SiDnodes = Simesh.e(1:2,SiDedges); SiDnodes = [SiDnodes(1,:) SiDnodes(2,:)]; SiDnodes = unique(SiDnodes); if (options.FD==1) FDn = idata.FDn; FDp = idata.FDp; else FDn = zeros(SiNnodes,1); FDp = zeros(SiNnodes,1); end G (:,1) = Fn(:,1) - V(Sinodes,1) - FDn + log(n(:,1)); if (options.holes==1) Gp (:,1) = Fp(:,1) - V(Sinodes,1) - FDp - log(p(:,1)); else Gp (:,1) = G(:,1)*0; end nrm=1; for i=1:1:maxit if (verbose>=1) fprintf(1,'*****************************************************************\n'); fprintf(1,'**** start of gummel iteration number: %d\n',i); fprintf(1,'*****************************************************************\n'); end V(:,2)= V(:,1); G(:,2)= G(:,1); Gp(:,2)= Gp(:,1); n(:,2)= n(:,1); bohmdeltav=inf; for j=1:smaxit if (verbose>=1) fprintf(1,'*---------------------------------------------------------------*\n'); fprintf(1,'**** start of Poisson-Bohm iteration number: %d (bohmdeltav=%g)\n',j,bohmdeltav); fprintf(1,'*---------------------------------------------------------------*\n'); end if (verbose>1) fprintf(1,'solving non linear poisson equation\n\n'); end [V(:,3),n(:,2),p(:,2)] =... QDDGOXnlpoisson (imesh,Dsides,Sinodes,[SiDnodes,Intnodes] ,Sielements,... V(:,2),n(:,1),p(:,1),Fn(:,1),Fp(:,1),G(:,2)+FDn,Gp(:,2)+FDp,D,... idata.l2,idata.l2ox,ptoll,pmaxit,verbose-1); n([SiDnodes,Intnodes],2) = idata.n([SiDnodes,Intnodes]); p([SiDnodes,Intnodes],2) = idata.p([SiDnodes,Intnodes]); V(Dnodes,3) = idata.V(Dnodes); if (verbose>1) fprintf(1,'solving non linear Bohm equation for electrons\n\n'); end n(Intnodes,2) = idata.n(Intnodes); w = QDDGOXcompdens(Simesh,[SiDsides,Intsides],sqrt(n(:,2)),V(Sinodes,3) + FDn,Fn(:,1),idata.dn2,stoll,smaxit,verbose-1); n(:,2) = w.^2; n([SiDnodes,Intnodes],2) = idata.n([SiDnodes,Intnodes]); G(:,3) = Fn(:,1) - V(Sinodes,3) - FDn + log(n(:,2)); if (verbose>1) fprintf(1,'solving non linear Bohm equation for holes\n\n'); end if (options.holes==1) p(Intnodes,2) = idata.p(Intnodes); wp = QDDGOXcompdens(Simesh,[SiDsides,Intsides],sqrt(p(:,2)),-V(Sinodes,3) - FDp,... -Fp(:,1),idata.dp2,ptoll,pmaxit,verbose-1); p(:,2) = wp.^2; p([SiDnodes,Intnodes],2) = idata.p([SiDnodes,Intnodes]); Gp(:,3) = Fp(:,1) - V(Sinodes,3) - FDp - log(p(:,2)); else Gp(:,3)=G(:,3)*0; end if (options.FD==1) fprintf(1,'\n*** APPLYING FD STATISTICS ***\n') n(:,2) = idata.Nc*Ufermidirac(V(Sinodes,3)+G(:,3)-Fn(:,1)-log(idata.Nc),1/2); n(SiDnodes,2) = idata.n(SiDnodes); nMBtmp = exp(V(Sinodes,3)+G(:,3)-Fn(:,1)); FDn = log(n(:,2)./ nMBtmp); FDn(SiDnodes) = idata.FDn(SiDnodes); p(:,2) = idata.Nv*Ufermidirac(-V(Sinodes,3)-Gp(:,3)+Fp(:,1)-log(idata.Nv),1/2); p([SiDnodes,Intnodes],2) = idata.p([SiDnodes,Intnodes]); pMBtmp = exp(-V(Sinodes,3)-Gp(:,3)+Fp(:,1)); FDp = -log(p(:,2)./ pMBtmp); FDp(SiDnodes) = idata.FDp(SiDnodes); end bohmdeltav = norm(G(:,3)-G(:,2),inf) +... norm(Gp(:,3)-Gp(:,2),inf) +... norm(V(:,3)-V(:,2),inf); %%%% store result for RRE if RREpattern2(j)>0 Gstore(:,RREpattern2(j)) = G(:,3); if RREpattern2(j+1)==0 % Apply RRE extrapolation G(:,3) = Urrextrapolation(Gstore); end end G(:,2)=G(:,3); Gp(:,2)=Gp(:,3); V(:,2)=V(:,3); if (bohmdeltav<=stoll) if (verbose>1) fprintf(1,'Exiting poisson-bohm iteration because bohmdeltav=%g\n\n',bohmdeltav); end break; end end if (verbose>1) fprintf (1,'\n\nupdating electron qfl\n\n'); end mob = Ufielddepmob(Simesh,idata.un,Fn(:,1), ... idata.vsatn,idata.mubn); n(:,3) = DDGOXelectron_driftdiffusion(Simesh,SiDsides,n(:,2),p(:,2),... V(Sinodes,3)+G(:,3)+FDn,mob,... tn,tp,idata.n0,idata.p0); Fn(:,2) = V(Sinodes,3) + G(:,3) + FDn - log(n(:,3)); Fn(SiDnodes,2) = idata.Fn(SiDnodes); n([SiDnodes,Intnodes],3) = idata.n([SiDnodes,Intnodes]); %%%% store result for RRE if RREpattern(i)>0 Fnstore(:,RREpattern(i)) = Fn(:,2); if RREpattern(i+1)==0 % Apply RRE extrapolation Fn(:,2) = Urrextrapolation(Fnstore); end end if (verbose>1) fprintf(1,'updating hole qfl\n\n'); end mob = Ufielddepmob(Simesh,idata.up,Fp(:,1),idata.vsatp,idata.mubp); p(:,3) =DDGOXhole_driftdiffusion(Simesh,SiDsides,n(:,3),p(:,2),... V(Sinodes,3)+Gp(:,3)+FDp,mob,... tn,tp,idata.n0,idata.p0); if (options.holes==1) Fp(:,2)=V(Sinodes,3) + Gp(:,3) + FDp + log(p(:,3)); p([SiDnodes,Intnodes],3) = idata.p([SiDnodes,Intnodes]); else Fp(:,2)=Fn(:,2) + 2 * log(idata.ni); p(:,3) = exp(Fp(:,2)-V(Sinodes,3)-FDp); p([SiDnodes],3) = idata.p([SiDnodes]); end Fp(SiDnodes,2) = idata.Fp(SiDnodes); if (verbose>1) fprintf(1,'checking for convergence\n\n'); end nrfn= norm(Fn(:,2)-Fn(:,1),inf); nrfp= norm (Fp(:,2)-Fp(:,1),inf); nrv = norm (V(:,3)-V(:,1),inf); nrg = norm (G(:,3)-G(:,1),inf); nrgp = norm (Gp(:,3)-Gp(:,1),inf); nrm(i) = max([nrfn;nrfp;nrv;nrg;nrgp]); figure(2) semilogy(nrm) pause(.1) if (verbose>1) fprintf (1,' max(|phin_(k+1)-phinn_(k)| , |phip_(k+1)-phip_(k)| , |v_(k+1)-v_(k)| |g_(k+1)-g_(k)|)= %d\n',nrm(i)); end if (nrm(i)0) fprintf(1,'\n\nDD: # of Gummel iterations = %d\n\n',it); end odata = idata; odata.n = n(:,end); odata.p = p(:,end); odata.V = V(:,end); odata.Fn = Fn(:,end); odata.Fp = Fp(:,end); odata.G = G(:,end); odata.Gp = Gp(:,end); secs2d-0.0.8/inst/QDDGOX/QDDGOXddcurrent.m0000644000175000017500000000163511201030277015530 0ustar shshfunction [current,divrg]=QDDGOXddcurrent(mesh,Sinodes,data,contacts,options); % [current,divrg]=QDDGOXddcurrent(mesh,Sinodes,data,contacts); constants Nelements = size(mesh.t,2); mob = Ufielddepmob(mesh,data.un,data.Fn,data.vsatn,data.mubn); if (~isfield("options","FD")|(options.FD==0)) data.FDn=0; data.FDp=0; end An = Uscharfettergummel(mesh,data.V(Sinodes)+data.G+data.FDn,mob); if (options.holes==1) mob = Ufielddepmob(mesh,data.up,data.Fp,data.vsatp,data.mubp); Ap = Uscharfettergummel(mesh,-data.V(Sinodes)-data.Gp-data.FDp,mob); divrg = An * data.n + Ap * data.p; else divrg = An * data.n; end 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)); end Is = q*data.us*data.Vs*data.ns; current = current * Is; secs2d-0.0.8/inst/QDDGOX/QDDGOXcompdens.m0000644000175000017500000001007511201030277015344 0ustar shshfunction w = QDDGOXcompdens(mesh,Dsides,win,vin,fermiin,d2,toll,maxit,verbose); % w = QDDGOXcompdens(mesh,Dsides,win,vin,fermiin,d2,toll,maxit,verbose); global QDDGOXCOMPDENS_LAP QDDGOXCOMPDENS_MASS QDDGOXCOMPDENS_RHS %% Set some usefull constants VErank = 4; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% convert input vectors to columns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if Ucolumns(win)>Urows(win) win=win'; end if Ucolumns(vin)>Urows(vin) vin=vin'; end if Ucolumns(fermiin)>Urows(fermiin) fermiin=fermiin'; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% convert grid info to FEM form %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nodes = mesh.p; Nnodes = size(nodes,2); elements = mesh.t(1:3,:); Nelements = size(elements,2); Dedges =[]; for ii = 1:length(Dsides) Dedges=[Dedges,find(mesh.e(5,:)==Dsides(ii))]; end % Set list of nodes with Dirichelet BCs Dnodes = mesh.e(1:2,Dedges); Dnodes = [Dnodes(1,:) Dnodes(2,:)]; Dnodes = unique(Dnodes); Dvals = win(Dnodes); Varnodes = setdiff([1:Nnodes],Dnodes); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% initialization: %% we're going to solve %% $$ -\delta^2 \Lap w_{k+1} + B'(w_k) \delta w_{k+1} = 2 * w_k$$ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% set $$ w_1 = win $$ w = win; wnew = win; %% let's compute FEM approximation of $$ L = - \aleph \frac{d^2}{x^2} $$ if (isempty(QDDGOXCOMPDENS_LAP)) QDDGOXCOMPDENS_LAP = Ucomplap (mesh,ones(Nelements,1)); end L = d2*QDDGOXCOMPDENS_LAP; %% now compute $$ G_k = F - V + 2 V_{th} log(w) $$ if (isempty(QDDGOXCOMPDENS_MASS)) QDDGOXCOMPDENS_MASS = Ucompmass2 (mesh,ones(Nnodes,1),ones(Nelements,1)); end G = fermiin - vin + 2*log(w); Bmat = QDDGOXCOMPDENS_MASS*sparse(diag(G)); nrm = 1; %%%%%%%%%%%%%%%%%%%%%%%% %%% NEWTON ITERATION START %%%%%%%%%%%%%%%%%%%%%%%% converged = 0; for jnewt =1:ceil(maxit/VErank) for k=1:VErank [w(:,k+1),converged,G,L,Bmat]=onenewtit(w(:,k),G,fermiin,vin,L,Bmat,jnewt,mesh,Dnodes,Varnodes,Dvals,Nnodes,Nelements,toll); if converged break end end if converged break end w = Urrextrapolation(w); end %%%%%%%%%%%%%%%%%%%%%%%% %%% NEWTON ITERATION END %%%%%%%%%%%%%%%%%%%%%%%% w = w(:,end); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%% ONE NEWTON ITERATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [w,converged,G,L,Bmat]=onenewtit(w,G,fermiin,vin,L,Bmat,jnewt,mesh,Dnodes,Varnodes,Dvals,Nnodes,Nelements,toll); global QDDGOXCOMPDENS_LAP QDDGOXCOMPDENS_MASS QDDGOXCOMPDENS_RHS dampit = 5; dampcoeff = 2; converged = 0; wnew = w; res0 = norm((L + Bmat) * w,inf); %% chose $ t_k $ to ensure positivity of $w$ mm = -min(G); pause(1) if (mm>2) tk = max( 1/(mm)); else tk = 1; end tmpmat = QDDGOXCOMPDENS_MASS*2; if (isempty(QDDGOXCOMPDENS_RHS)) QDDGOXCOMPDENS_RHS = Ucompconst (mesh,ones(Nnodes,1),ones(Nelements,1)); end tmpvect= 2*QDDGOXCOMPDENS_RHS.*w; %%%%%%%%%%%%%%%%%%%%%%%% %%% DAMPING ITERATION START %%%%%%%%%%%%%%%%%%%%%%%% for idamp = 1:dampit %% Compute $ B1mat = \frac{2}{t_k} $ %% and the (lumped) mass matrix B1mat(w_k) B1mat = tmpmat/tk; %% now we're ready to build LHS matrix and RHS of the linear system for 1st Newton step A = L + B1mat + Bmat; b = tmpvect/tk; %% Apply boundary conditions A (Dnodes,:) = 0; b (Dnodes) = 0; b = b - A (:,Dnodes) * Dvals; A(Dnodes,:)= []; A(:,Dnodes)= []; b(Dnodes) = []; wnew(Varnodes) = A\b; %% compute $$ G_{k+1} = F - V + 2 V_{th} log(w) $$ G = fermiin - vin + 2*log(wnew); Bmat = QDDGOXCOMPDENS_MASS*sparse(diag(G)); res = norm((L + Bmat) * wnew,inf); if (resUrows(D) D=D'; end if Ucolumns(nin)>Urows(nin) nin=nin'; end if Ucolumns(pin)>Urows(pin) pin=pin'; end if Ucolumns(Vin)>Urows(Vin) Vin=Vin'; end if Ucolumns(Fnin)>Urows(Fnin) Fnin=Fnin'; end if Ucolumns(Fpin)>Urows(Fpin) Fpin=Fpin'; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% setup FEM data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nodes=mesh.p; elements=mesh.t; Nnodes = length(nodes); Nelements = length(elements); Dedges =[]; for ii = 1:length(Dsides) Dedges=[Dedges,find(mesh.e(5,:)==Dsides(ii))]; end % Set list of nodes with Dirichelet BCs Dnodes = mesh.e(1:2,Dedges); Dnodes = [Dnodes(1,:) Dnodes(2,:)]; Dnodes = unique(Dnodes); % Set values of Dirichelet BCs Bc = zeros(length(Dnodes),1); % Set list of nodes without Dirichelet BCs Varnodes = setdiff([1:Nnodes],Dnodes); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% initialization: %% we're going to solve %% $$ - \lambda^2 (\delta V)'' + (\frac{\partial n}{\partial V} - \frac{\partial p}{\partial V})= -R $$ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% set $$ n_1 = nin $$ and $$ V = Vin $$ V = Vin; Fn = Fnin; Fp = Fpin; G = Gin; Gp = Gpin; n = exp(V(Sinodes)+G-Fn); p = exp(-V(Sinodes)-Gp+Fp); n(SiDnodes) = nin(SiDnodes); p(SiDnodes) = pin(SiDnodes); %%% %%% Compute LHS matrices %%% %% let's compute FEM approximation of $$ L = - \frac{d^2}{x^2} $$ if (isempty(DDGOXNLPOISSON_LAP)) coeff = l2ox * ones(Nelements,1); coeff(Sielements)=l2; DDGOXNLPOISSON_LAP = Ucomplap (mesh,coeff); end %% compute $$ Mv = ( n + p) $$ %% and the (lumped) mass matrix M if (isempty(DDGOXNLPOISSON_MASS)) Cvect = zeros(Nelements,1); Cvect(Sielements)=1; DDGOXNLPOISSON_MASS = Ucompmass2 (mesh,ones(Nnodes,1),Cvect); end freecarr=zeros(Nnodes,1); freecarr(Sinodes)=(n + p); Mv = freecarr; MV(SiDnodes) = 0; M = DDGOXNLPOISSON_MASS*sparse(diag(Mv)); %%% %%% Compute RHS vector (-residual) %%% %% now compute $$ T0 = \frac{q}{\epsilon} (n - p - D) $$ if (isempty(DDGOXNLPOISSON_RHS)) DDGOXNLPOISSON_RHS = Ucompconst (mesh,ones(Nnodes,1),ones(Nelements,1)); end totcharge = zeros(Nnodes,1); totcharge(Sinodes)=(n - p - D); Tv0 = totcharge; T0 = Tv0 .* DDGOXNLPOISSON_RHS; %% now we're ready to build LHS matrix and RHS of the linear system for 1st Newton step A = DDGOXNLPOISSON_LAP + M; R = DDGOXNLPOISSON_LAP * V + T0; %% Apply boundary conditions A (Dnodes,:) = []; A (:,Dnodes) = []; R(Dnodes) = []; %% we need $$ \norm{R_1} $$ and $$ \norm{R_k} $$ for the convergence test normr(1) = norm(R,inf); relresnorm = 1; reldVnorm = 1; normrnew = normr(1); dV = V*0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% START OF THE NEWTON CYCLE %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for newtit=1:maxit if (verbose>0) fprintf(1,'\n***\nNewton iteration: %d, reldVnorm = %e\n***\n',newtit,reldVnorm); end dV(Varnodes) =(A)\(-R); dV(Dnodes)=0; %%%%%%%%%%%%%%%%%% %% Start of th damping procedure %%%%%%%%%%%%%%%%%% tk = 1; for dit = 1:dampit if (verbose>0) fprintf(1,'\ndamping iteration: %d, residual norm = %e\n',dit,normrnew); end Vnew = V + tk * dV; n = exp(Vnew(Sinodes)+G-Fn); p = exp(-Vnew(Sinodes)-Gp+Fp); n(SiDnodes) = nin(SiDnodes); p(SiDnodes) = pin(SiDnodes); %%% %%% Compute LHS matrices %%% %% let's compute FEM approximation of $$ L = - \frac{d^2}{x^2} $$ %L = Ucomplap (mesh,ones(Nelements,1)); %% compute $$ Mv = ( n + p) $$ %% and the (lumped) mass matrix M freecarr=zeros(Nnodes,1); freecarr(Sinodes)=(n + p); Mv = freecarr; M = DDGOXNLPOISSON_MASS*sparse(diag(Mv));%M = Ucompmass (mesh,Mv); %%% %%% Compute RHS vector (-residual) %%% %% now compute $$ T0 = \frac{q}{\epsilon} (n - p - D) $$ totcharge( Sinodes)=(n - p - D); Tv0 = totcharge; T0 = Tv0 .* DDGOXNLPOISSON_RHS;%T0 = Ucompconst (mesh,Tv0,ones(Nelements,1)); %% now we're ready to build LHS matrix and RHS of the linear system for 1st Newton step A = DDGOXNLPOISSON_LAP + M; R = DDGOXNLPOISSON_LAP * Vnew + T0; %% Apply boundary conditions A (Dnodes,:) = []; A (:,Dnodes) = []; R(Dnodes) = []; %% compute $$ | R_{k+1} | $$ for the convergence test normrnew= norm(R,inf); % check if more damping is needed if (normrnew > normr(newtit)) tk = tk/dampcoeff; else if (verbose>0) fprintf(1,'\nexiting damping cycle because residual norm = %e \n-----------\n',normrnew); end break end end V = Vnew; normr(newtit+1) = normrnew; dVnorm = norm(tk*dV,inf); pause(.1); % check if convergence has been reached reldVnorm = dVnorm / norm(V,inf); if (reldVnorm <= toll) if(verbose>0) fprintf(1,'\nexiting newton cycle because reldVnorm= %e \n',reldVnorm); end break end end res = normr; niter = newtit; secs2d-0.0.8/inst/secs2d.m0000644000175000017500000000273511201030277013026 0ustar shsh## PKG_ADD:# Run this only if the package is installed ## PKG_ADD:if (! exist (fullfile (fileparts (mfilename ("fullpath")), "inst"), "dir")) ## PKG_ADD: dirlist= {"Utilities","DDGOX","ThDDGOX","QDDGOX","METLINES","DDGOXT"}; ## PKG_ADD: ## PKG_ADD: for ii=1:length(dirlist) ## PKG_ADD: addpath ( [ fileparts( mfilename("fullpath")) "/" dirlist{ii}]) ## PKG_ADD: end ## PKG_ADD: ## PKG_ADD: __gmsh = file_in_path (EXEC_PATH, "gmsh"); ## PKG_ADD: if (isempty (__gmsh)) ## PKG_ADD: __gmsh = file_in_path (EXEC_PATH, "gmsh.exe"); ## PKG_ADD: if (isempty (__gmsh)) ## PKG_ADD: warning ("gmsh does not seem to be present some functionalities will be disabled"); ## PKG_ADD: endif ## PKG_ADD: endif ## PKG_ADD: clear __gmsh; ## PKG_ADD: ## PKG_ADD: __dx = file_in_path (EXEC_PATH, "dx"); ## PKG_ADD: if (isempty (__dx)) ## PKG_ADD: __dx = file_in_path (EXEC_PATH, "dx.exe"); ## PKG_ADD: if (isempty (__dx)) ## PKG_ADD: warning ("dx does not seem to be present some functionalities will be disabled"); ## PKG_ADD: endif ## PKG_ADD: endif ## PKG_ADD: clear __dx; ## PKG_ADD:end ## PKG_DEL:# Run this only if the package is installed ## PKG_DEL:if (! exist (fullfile (fileparts (mfilename ("fullpath")), "inst"), "dir")) ## PKG_DEL: dirlist= {"Utilities","DDGOX","ThDDGOX","QDDGOX","METLINES","DDGOXT"}; ## PKG_DEL: ## PKG_DEL: for ii=1:length(dirlist) ## PKG_DEL: rmpath ( [ fileparts( mfilename("fullpath")) "/" dirlist{ii}]) ## PKG_DEL: end ## PKG_DEL:end secs2d-0.0.8/inst/Utilities/0000755000175000017500000000000011201031505013424 5ustar shshsecs2d-0.0.8/inst/Utilities/Ustructmesh_random.m0000644000175000017500000000371211201030277017500 0ustar shshfunction [p,e,t]=Ustructmesh_random(x,y,region,sides) % [p,e,t]=Ustructmesh(x,y,region,sides) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . x = sort(x); y = sort(y); nx = length(x); ny = length(y); [XX,YY] = meshgrid(x,y); p = [XX(:),YY(:)]'; iiv (ny,nx)=0; iiv(:)=1:nx*ny; iiv(end,:)=[]; iiv(:,end)=[]; iiv=iiv(:)'; niiv = length(iiv); theperm = iiv(randperm(niiv)); first = theperm(1:floor(niiv/2)); second = theperm(floor(niiv/2)+1:end); t = [[first;first+ny;first+ny+1],[first;first+ny+1;first+1] ]; t = [t,[second;second+ny;second+1],[second+ny;second+ny+1;second+1] ]; t (4,:)=region; l1 = 1+ny*([1:nx]-1); l4 = 1:ny; l2 = ny*(nx-1)+1:nx*ny; l3 = ny + l1 -1; e = [ l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1]) l1([2:end]) l2([2:end]) l3([2:end]) l4([2:end]) [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 l1([1:end-1])*0+sides(1) l2([1:end-1])*0+sides(2) l3([1:end-1])*0+sides(3) l4([1:end-1])*0+sides(4) [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0+region ]; secs2d-0.0.8/inst/Utilities/Uscaling.m0000644000175000017500000001137511201030277015363 0ustar shshfunction [odata,omesh] = Uscaling(imesh,idata); % [odata,omesh] = Uscaling(imesh,idata); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . load (file_in_path(path,'constants.mat')); omesh = imesh; odata = idata; % scaling factors odata.xs = max(abs([max(imesh.p(1,:))-min(imesh.p(1,:)),max(imesh.p(2,:))-min(imesh.p(2,:))])); odata.Vs = Vth; odata.ns = norm(idata.D,inf); odata.us = un; odata.ts = (odata.xs^2)/(odata.Vs*odata.us); odata.Ts = T0; odata.kappas = odata.Vs^2*q*odata.us*odata.ns/odata.Ts; % adimensional constants odata.etan2 = hbar^2 / (2*mndos*odata.xs^2*q*odata.Vs); % 3-valley masses odata.etanxx2 = hbar^2 / (2*mnl*odata.xs^2*q*odata.Vs); odata.etanxy2 = hbar^2 / (2*mnt*odata.xs^2*q*odata.Vs); odata.etanyx2 = hbar^2 / (2*mnt*odata.xs^2*q*odata.Vs); odata.etanyy2 = hbar^2 / (2*mnl*odata.xs^2*q*odata.Vs); odata.etanzx2 = hbar^2 / (2*mnt*odata.xs^2*q*odata.Vs); odata.etanzy2 = hbar^2 / (2*mnt*odata.xs^2*q*odata.Vs); odata.etap2 = hbar^2 / (2*mhdos*odata.xs^2*q*odata.Vs); odata.beta = Vth/odata.Vs; odata.dn2 = hbar^2 / (4*rn*mndos*odata.xs^2*q*odata.Vs); odata.dp2 = hbar^2 / (4*rp*mhdos*odata.xs^2*q*odata.Vs); odata.l2 = (odata.Vs*esi) / (odata.ns*odata.xs^2*q); odata.l2ox = (odata.Vs*esio2) / (odata.ns*odata.xs^2*q); if (isfield(idata,'un')) odata.un = idata.un/odata.us; else odata.un = un/odata.us; end if (isfield(idata,'up')) odata.up = idata.up/odata.us; else odata.up = up/odata.us; end if (isfield(idata,'FDn')) odata.FDn = idata.FDn/odata.Vs; end if (isfield(idata,'FDp')) odata.FDp = idata.FDp/odata.Vs; end if (isfield(idata,'tn')) odata.tn = idata.tn/odata.ts; else odata.tn = tn/odata.ts; end if (isfield(idata,'tp')) odata.tp = idata.tp/odata.ts; else odata.tp = tp/odata.ts; end if (isfield(idata,'twn')) odata.twn = idata.twn/odata.ts; else odata.twn = twn/odata.ts; end if (isfield(idata,'twp')) odata.twp = idata.twp/odata.ts; else odata.twp = twp/odata.ts; end if (isfield(idata,'kappa')) odata.kappa = idata.kappa /odata.kappas; else odata.kappa = kappaSi/odata.kappas; end odata.ni = ni/odata.ns; if (isfield(idata,'n0')) odata.n0 = idata.n0 /odata.ns; odata.p0 = idata.p0 /odata.ns; else odata.n0 = ni /odata.ns; odata.p0 = ni /odata.ns; end odata.Nc = Nc/odata.ns; odata.Nv = Nv/odata.ns; odata.ei = Egap/(2*q*odata.Vs) - log(Nv/Nc)/2; odata.eip = Egap/(2*q*odata.Vs) + log(Nv/Nc)/2; odata.Egap = Eg0/(q*odata.Vs); odata.wn2 = 6*sqrt(mndos*2*Kb*T0/(pi*hbar^2))/(ni*odata.xs^2); odata.vsatn = vsatn * odata.xs / (odata.us * odata.Vs); odata.vsatp = vsatp * odata.xs / (odata.us * odata.Vs); odata.mubn = mubn; odata.mubp = mubp; odata.mudopparn = [ mudopparn(1:3)/odata.us; mudopparn(4:6)/odata.ns; mudopparn(7:8) ]; odata.mudopparp = [ mudopparp(1:3)/odata.us; mudopparp(4:6)/odata.ns; mudopparp(7:8) ]; % 3-valley weights odata.wnx2 = 2*sqrt(mnt*2*Kb*odata.Ts/(pi*hbar^2))/(ni*odata.xs^2); odata.wny2 = odata.wnx2; odata.wnz2 = 2*sqrt(mnl*2*Kb*odata.Ts/(pi*hbar^2))/(ni*odata.xs^2); % 3-valley weights odata.wnx2FD = 2*sqrt(mnt*2*Kb*odata.Ts/(pi*hbar^2))/(odata.ns*odata.xs^2); odata.wny2FD = odata.wnx2FD; odata.wnz2FD = 2*sqrt(mnl*2*Kb*odata.Ts/(pi*hbar^2))/(odata.ns*odata.xs^2); odata.mg = Egap/(2*Kb*odata.Ts) - log(Nv/Nc)/2; % scaled quantities odata.D = idata.D/odata.ns; odata.n = idata.n/odata.ns; odata.p = idata.p/odata.ns; odata.Fn = idata.Fn/odata.Vs-log(ni/odata.ns); odata.Fp = idata.Fp/odata.Vs+log(ni/odata.ns); odata.V = idata.V/odata.Vs; if (isfield(idata,'G')) odata.G= idata.G/odata.Vs; end if (isfield(idata,'dt')) odata.dt= idata.dt/odata.ts; end if (isfield(idata,'Tl')) odata.Tl= idata.Tl/odata.Ts; end if (isfield(idata,'Tn')) odata.Tn= idata.Tn/odata.Ts; end if (isfield(idata,'Tp')) odata.Tp= idata.Tp/odata.Ts; end omesh.p = imesh.p/odata.xs; secs2d-0.0.8/inst/Utilities/Utemplogm.m0000644000175000017500000000026611201030277015564 0ustar shshfunction T = Utemplogm(t1,t2) T = zeros(size(t2)); sing = abs(t2-t1)< 100*eps ; T(sing) = (t2(sing)+t1(sing))/2; T(~sing) = (t2(~sing)-t1(~sing))./log(t2(~sing)./t1(~sing)); secs2d-0.0.8/inst/Utilities/Ustructmesh_left.m0000644000175000017500000000336611201030277017157 0ustar shshfunction [p,e,t]=Ustructmesh_left(x,y,region,sides) % [p,e,t]=Ustructmesh(x,y,region,sides) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . x = sort(x); y = sort(y); nx = length(x); ny = length(y); [XX,YY] = meshgrid(x,y); p = [XX(:),YY(:)]'; iiv (ny,nx)=0; iiv(:)=1:nx*ny; iiv(end,:)=[]; iiv(:,end)=[]; iiv=iiv(:)'; t = [[iiv;iiv+ny;iiv+1],[iiv+1;iiv+ny;iiv+ny+1] ]; t (4,:)=region; l1 = 1+ny*([1:nx]-1); l4 = 1:ny; l2 = ny*(nx-1)+1:nx*ny; l3 = ny + l1 -1; e = [ l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1]) l1([2:end]) l2([2:end]) l3([2:end]) l4([2:end]) [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 l1([1:end-1])*0+sides(1) l2([1:end-1])*0+sides(2) l3([1:end-1])*0+sides(3) l4([1:end-1])*0+sides(4) [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0+region ]; secs2d-0.0.8/inst/Utilities/Urrextrapolation.m0000644000175000017500000000234611201030277017176 0ustar shshfunction s = Urrextrapolation(X) % s = Urrextrapolation(X) % RRE vector extrapolation see % Smith, Ford & Sidi SIREV 29 II 06/1987 % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . if (Ucolumns(X)>Urows(X)) X=X'; end % compute first and second variations U = X(:,2:end) - X(:,1:end-1); V = U(:,2:end) - U(:,1:end-1); % eliminate unused u_k column U(:,end) = []; s = X(:,1) - U * pinv(V) * U(:,1); secs2d-0.0.8/inst/Utilities/Ucompconst.m0000644000175000017500000000300511201030277015737 0ustar shshfunction C = Ucompconst (imesh,coeffn,coeffe) %% C = Ucompconst (imesh,coeffn,coeffe) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Nnodes =size(imesh.p,2); Nelements =size(imesh.t,2); %%fprintf(1,'*--------------------*\n'); %%fprintf(1,'building RHS\n*'); coeff = coeffn(imesh.t(1:3,:)); wjacdet = imesh.wjacdet; % build local matrix Blocmat=zeros(3,Nelements); for inode=1:3 Blocmat(inode,:) = coeffe'.*coeff(inode,:).*wjacdet(inode,:); %%fprintf(1,'----'); end gnode=(imesh.t(1:3,:)); %%fprintf(1,'--'); % assemble global matrix C = sparse(gnode(:),1,Blocmat(:)); %%fprintf(1,'----*\nDONE!\n\n\n'); secs2d-0.0.8/inst/Utilities/constants.mat0000644000175000017500000000467011201030277016157 0ustar shsh# Created by Octave 2.9.9, Wed May 16 14:37:10 2007 CEST # name: alfaEg # type: scalar 7.57829466526e-23 # name: mudopparn # type: matrix # rows: 8 # columns: 1 0.00522 0.00522 0.00434 0 9.679999999999999e+22 3.43e+26 0.68 2 # name: mudopparp # type: matrix # rows: 8 # columns: 1 0.00449 0 0.0029 9.230000000000001e+22 2.23e+23 6.1e+26 0.719 2 # name: __nargin__ # type: scalar 2 # name: mubnexp # type: scalar 0.66 # name: q # type: scalar 1.602176462e-19 # name: vsatpexp # type: scalar 0.52 # name: Eg0 # type: scalar 1.87396967701368e-19 # name: mubn # type: scalar 1.109 # name: mubp # type: scalar 1.213 # name: kappaSi # type: scalar 154.86 # name: hbar # type: scalar 1.054560652926898e-34 # name: mubn0 # type: scalar 1.109 # name: mubp0 # type: scalar 1.213 # name: vsatn # type: scalar 107000 # name: vsatp # type: scalar 83700 # name: esio2 # type: scalar 3.45313324863e-11 # name: alephn # type: scalar 2.442079557997522e-20 # name: alephp # type: scalar 1.05823447513226e-18 # name: vsatn0 # type: scalar 107000 # name: mndos # type: scalar 2.990630807677018e-31 # name: vsatp0 # type: scalar 83700 # name: vsatnexp # type: scalar 0.87 # name: mubpexp # type: scalar 0.17 # name: Egap # type: scalar 1.801101459078488e-19 # name: esir # type: scalar 11.7 # name: Kb # type: scalar 1.3806503e-23 # name: betaEg # type: scalar 636 # name: Nc # type: scalar 2.832359512537327e+25 # name: Nv # type: scalar 1.021468310220377e+25 # name: T0 # type: scalar 300 # name: esio2r # type: scalar 3.9 # name: Phims # type: scalar -0.79 # name: esi # type: scalar 1.035939974589e-10 # name: hplanck # type: scalar 6.626e-34 # name: Vth # type: scalar 0.02585202690363829 # name: e0 # type: scalar 8.854187817e-12 # name: twn # type: scalar 1e-13 # name: twp # type: scalar 1e-13 # name: mhh # type: scalar 4.4639e-31 # name: mlh # type: scalar 1.4576e-31 # name: mn0 # type: scalar 9.11e-31 # name: mnl # type: scalar 8.927800000000001e-31 # name: aleph # type: scalar 2.442079557997522e-20 # name: mnt # type: scalar 1.7309e-31 # name: mh # type: scalar 1.6398e-31 # name: mhdos # type: scalar 5.003201373499014e-31 # name: mn # type: scalar 2.3686e-31 # name: ni # type: scalar 6140088000559841 # name: rn # type: scalar 3 # name: rp # type: scalar 0.1 # name: tn # type: scalar 1e-07 # name: tp # type: scalar 1e-07 # name: qsue # type: scalar 1.546591985347075e-09 # name: un # type: scalar 0.1417 # name: up # type: scalar 0.048 secs2d-0.0.8/inst/Utilities/Ucolumns.m0000644000175000017500000000202111201030277015407 0ustar shshfunction c=Ucolumns(m) % % function r=columns(m) % % Note: octave already has this function, % this is here only for matlab compatibility % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . c = size(m,2); secs2d-0.0.8/inst/Utilities/Ubern.m0000644000175000017500000000436611201030277014673 0ustar shshfunction [bp,bn]=Ubern(x) % % [bp,bn]=Ubern(x) % % calcola la funzione di Bernoulli % B(x)=x/(exp(x)-1) in corrispondenza dei % due argomenti Z e -Z, ricordando che risulta % B(-Z)=Z+B(Z) % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . xlim= 1e-2; ax = abs(x); bp = zeros(size(x)); bn = bp; block1 = find(~ax); block21 = find((ax>80)&x>0); block22 = find((ax>80)&x<0); block3 = find((ax<=80)&(ax>xlim)); block4 = find((ax<=xlim)&(ax~=0)); % % Calcola la funz. di Bernoulli per x=0 % % if (ax == 0) %fprintf(1,' -> executing block 1\n'); bp(block1)=1.; bn(block1)=1.; %end; % % Calcola la funz. di Bernoulli per valori % asintotici dell'argomento % % if (ax > 80), % fprintf(1,' -> eexecuting block 2\n'); % if (x >0), bp(block21)=0.; bn(block21)=x(block21); % else bp(block22)=-x(block22); bn(block22)=0.; % end; % end; % % Calcola la funz. di Bernoulli per valori % intermedi dell'argomento % % if (ax > xlim), %fprintf(1,' -> eexecuting block 3\n'); bp(block3)=x(block3)./(exp(x(block3))-1); bn(block3)=x(block3)+bp(block3); % else % for ii=block4; % % Calcola la funz. di Bernoulli per valori % piccoli dell'argomento mediante sviluppo % di Taylor troncato dell'esponenziale % %fprintf(1,' -> eexecuting block 4\n'); if(any(block4))jj=1; fp=1.*ones(size(block4)); fn=fp; df=fp; segno=1.; while (norm(df,inf) > eps), jj=jj+1; segno=-segno; df=df.*x(block4)/jj; fp=fp+df; fn=fn+segno*df; end; bp(block4)=1./fp; bn(block4)=1./fn; end % end secs2d-0.0.8/inst/Utilities/Udrawcurrent.net0000644000175000017500000004456011201030277016637 0ustar shsh// // time: Fri May 18 15:17:11 2007 // // version: 3.2.0 (format), 4.4.4 (DX) // // // MODULE main // workspace: width = 645, height = 607 // layout: snap = 0, width = 50, height = 50, align = NN // macro main( ) -> ( ) { // // node AutoColor[1]: x = 427, y = 242, inputs = 10, label = AutoColor // main_AutoColor_1_out_1, main_AutoColor_1_out_2 = AutoColor( main_AutoColor_1_in_1, main_AutoColor_1_in_2, main_AutoColor_1_in_3, main_AutoColor_1_in_4, main_AutoColor_1_in_5, main_AutoColor_1_in_6, main_AutoColor_1_in_7, main_AutoColor_1_in_8, main_AutoColor_1_in_9, main_AutoColor_1_in_10 ) [instance: 1, cache: 1]; // // node FileSelector[1]: x = 51, y = 31, inputs = 0, label = FileSelector // output[1]: visible = 1, type = 32, value = "__FILE__DX__" // output[2]: visible = 1, type = 32, value = "__FILE__DX__" // // // node Import[1]: x = 42, y = 108, inputs = 6, label = Import // main_Import_1_out_1 = Import( main_FileSelector_1_out_1, main_Import_1_in_2, main_Import_1_in_3, main_Import_1_in_4, main_Import_1_in_5, main_Import_1_in_6 ) [instance: 1, cache: 1]; // // node AutoGlyph[1]: x = 51, y = 199, inputs = 7, label = AutoGlyph // main_AutoGlyph_1_out_1 = AutoGlyph( main_Import_1_out_1, main_AutoGlyph_1_in_2, main_AutoGlyph_1_in_3, main_AutoGlyph_1_in_4, main_AutoGlyph_1_in_5, main_AutoGlyph_1_in_6, main_AutoGlyph_1_in_7 ) [instance: 1, cache: 1]; // // node Color[1]: x = 72, y = 328, inputs = 5, label = Color // input[2]: defaulting = 0, visible = 1, type = 32, value = "black" // input[3]: defaulting = 0, visible = 1, type = 5, value = .5 // main_Color_1_out_1 = Color( main_AutoGlyph_1_out_1, main_Color_1_in_2, main_Color_1_in_3, main_Color_1_in_4, main_Color_1_in_5 ) [instance: 1, cache: 1]; // // node ShowConnections[2]: x = 262, y = 266, inputs = 1, label = ShowConnections // main_ShowConnections_2_out_1 = ShowConnections( main_Import_1_out_1 ) [instance: 2, cache: 1]; // // node Color[2]: x = 372, y = 359, inputs = 5, label = Color // input[2]: defaulting = 0, visible = 1, type = 32, value = "blue" // main_Color_2_out_1 = Color( main_ShowConnections_2_out_1, main_Color_2_in_2, main_Color_2_in_3, main_Color_2_in_4, main_Color_2_in_5 ) [instance: 2, cache: 1]; // // node Collect[1]: x = 280, y = 393, inputs = 3, label = Collect // main_Collect_1_out_1 = Collect( main_Color_1_out_1, main_Color_2_out_1, main_Collect_1_in_3 ) [instance: 1, cache: 1]; // // node ColorBar[1]: x = 525, y = 290, inputs = 16, label = ColorBar // input[9]: defaulting = 0, visible = 0, type = 16777248, value = {"black"} // main_ColorBar_1_out_1 = ColorBar( main_AutoColor_1_out_2, main_ColorBar_1_in_2, main_ColorBar_1_in_3, main_ColorBar_1_in_4, main_ColorBar_1_in_5, main_ColorBar_1_in_6, main_ColorBar_1_in_7, main_ColorBar_1_in_8, main_ColorBar_1_in_9, main_ColorBar_1_in_10, main_ColorBar_1_in_11, main_ColorBar_1_in_12, main_ColorBar_1_in_13, main_ColorBar_1_in_14, main_ColorBar_1_in_15, main_ColorBar_1_in_16 ) [instance: 1, cache: 1]; // // node Image[1]: x = 283, y = 483, inputs = 49, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [0.466889 0.863877 0.166499] // input[6]: defaulting = 0, visible = 0, type = 8, value = [0.466889 0.863877 4.74189] // input[7]: defaulting = 0, visible = 0, type = 5, value = 1.01623 // input[8]: defaulting = 0, visible = 0, type = 1, value = 1266 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.543049 // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0] // input[11]: defaulting = 1, visible = 0, type = 5, value = 12.6739 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 1, visible = 0, type = 32, value = "none" // input[16]: defaulting = 1, visible = 0, type = 32, value = "none" // input[17]: defaulting = 1, visible = 0, type = 1, value = 1 // input[18]: defaulting = 1, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 1, value = 0 // input[22]: defaulting = 0, visible = 0, type = 32, value = "snow" // input[25]: defaulting = 0, visible = 0, type = 32, value = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/doping.tif" // input[26]: defaulting = 0, visible = 0, type = 32, value = "tiff" // input[29]: defaulting = 0, visible = 0, type = 3, value = 1 // input[31]: defaulting = 0, visible = 0, type = 1, value = -5 // input[33]: defaulting = 0, visible = 0, type = 3, value = 1 // input[34]: defaulting = 0, visible = 0, type = 3, value = 0 // input[36]: defaulting = 0, visible = 0, type = 3, value = 1 // input[37]: defaulting = 0, visible = 0, type = 16777248, value = {"clear", "black", "blue", "blue"} // input[38]: defaulting = 0, visible = 0, type = 16777248, value = {"background", "grid", "ticks", "labels"} // input[39]: defaulting = 0, visible = 0, type = 5, value = 0.65 // input[40]: defaulting = 0, visible = 0, type = 32, value = "roman_d" // input[41]: defaulting = 0, visible = 0, type = 32, value = "panzoom" // depth: value = 24 // window: position = ( nan, inf), size = infx inf // internal caching: 1 // main_Image_1_out_1, main_Image_1_out_2, main_Image_1_out_3 = Image( main_Image_1_in_1, main_Collect_1_out_1, main_Image_1_in_3, main_Image_1_in_4, main_Image_1_in_5, main_Image_1_in_6, main_Image_1_in_7, main_Image_1_in_8, main_Image_1_in_9, main_Image_1_in_10, main_Image_1_in_11, main_Image_1_in_12, main_Image_1_in_13, main_Image_1_in_14, main_Image_1_in_15, main_Image_1_in_16, main_Image_1_in_17, main_Image_1_in_18, main_Image_1_in_19, main_Image_1_in_20, main_Image_1_in_21, main_Image_1_in_22, main_Image_1_in_23, main_Image_1_in_24, main_Image_1_in_25, main_Image_1_in_26, main_Image_1_in_27, main_Image_1_in_28, main_Image_1_in_29, main_Image_1_in_30, main_Image_1_in_31, main_Image_1_in_32, main_Image_1_in_33, main_Image_1_in_34, main_Image_1_in_35, main_Image_1_in_36, main_Image_1_in_37, main_Image_1_in_38, main_Image_1_in_39, main_Image_1_in_40, main_Image_1_in_41, main_Image_1_in_42, main_Image_1_in_43, main_Image_1_in_44, main_Image_1_in_45, main_Image_1_in_46, main_Image_1_in_47, main_Image_1_in_48, main_Image_1_in_49 ) [instance: 1, cache: 1]; // // node RubberSheet[1]: x = 528, y = 498, inputs = 4, label = RubberSheet // main_RubberSheet_1_out_1 = RubberSheet( main_RubberSheet_1_in_1, main_RubberSheet_1_in_2, main_RubberSheet_1_in_3, main_RubberSheet_1_in_4 ) [instance: 1, cache: 1]; // // node ShowConnections[1]: x = 95, y = 545, inputs = 1, label = ShowConnections // main_ShowConnections_1_out_1 = ShowConnections( main_ShowConnections_1_in_1 ) [instance: 1, cache: 1]; // network: end of macro body CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2); } main_AutoColor_1_in_1 = NULL; main_AutoColor_1_in_2 = NULL; main_AutoColor_1_in_3 = NULL; main_AutoColor_1_in_4 = NULL; main_AutoColor_1_in_5 = NULL; main_AutoColor_1_in_6 = NULL; main_AutoColor_1_in_7 = NULL; main_AutoColor_1_in_8 = NULL; main_AutoColor_1_in_9 = NULL; main_AutoColor_1_in_10 = NULL; main_AutoColor_1_out_2 = NULL; main_FileSelector_1_out_1 = "__FILE__DX__"; main_Import_1_in_2 = NULL; main_Import_1_in_3 = NULL; main_Import_1_in_4 = NULL; main_Import_1_in_5 = NULL; main_Import_1_in_6 = NULL; main_Import_1_out_1 = NULL; main_AutoGlyph_1_in_2 = NULL; main_AutoGlyph_1_in_3 = NULL; main_AutoGlyph_1_in_4 = NULL; main_AutoGlyph_1_in_5 = NULL; main_AutoGlyph_1_in_6 = NULL; main_AutoGlyph_1_in_7 = NULL; main_AutoGlyph_1_out_1 = NULL; main_Color_1_in_2 = "black"; main_Color_1_in_3 = .5; main_Color_1_in_4 = NULL; main_Color_1_in_5 = NULL; main_Color_1_out_1 = NULL; main_ShowConnections_2_out_1 = NULL; main_Color_2_in_2 = "blue"; main_Color_2_in_3 = NULL; main_Color_2_in_4 = NULL; main_Color_2_in_5 = NULL; main_Color_2_out_1 = NULL; main_Collect_1_in_3 = NULL; main_Collect_1_out_1 = NULL; main_ColorBar_1_in_2 = NULL; main_ColorBar_1_in_3 = NULL; main_ColorBar_1_in_4 = NULL; main_ColorBar_1_in_5 = NULL; main_ColorBar_1_in_6 = NULL; main_ColorBar_1_in_7 = NULL; main_ColorBar_1_in_8 = NULL; main_ColorBar_1_in_9 = {"black"}; main_ColorBar_1_in_10 = NULL; main_ColorBar_1_in_11 = NULL; main_ColorBar_1_in_12 = NULL; main_ColorBar_1_in_13 = NULL; main_ColorBar_1_in_14 = NULL; main_ColorBar_1_in_15 = NULL; main_ColorBar_1_in_16 = NULL; macro Image( id, object, where, useVector, to, from, width, resolution, aspect, up, viewAngle, perspective, options, buttonState = 1, buttonUpApprox = "none", buttonDownApprox = "none", buttonUpDensity = 1, buttonDownDensity = 1, renderMode = 0, defaultCamera, reset, backgroundColor, throttle, RECenable = 0, RECfile, RECformat, RECresolution, RECaspect, AAenable = 0, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, webOptions) -> ( object, camera, where) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, interactionMode, title, renderMode, buttonUpApprox, buttonDownApprox, buttonUpDensity, buttonDownDensity) [instance: 1, cache: 1]; autoCamera = AutoCamera( object, "front", object, resolution, aspect, [0,1,0], perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; realCamera = Camera( to, from, width, resolution, aspect, up, perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; coloredDefaultCamera = UpdateCamera(defaultCamera, background=backgroundColor) [instance: 1, cache: 1]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, coloredDefaultCamera, autoCamera) [instance: 1, cache: 1]; resetNull = Inquire( reset, "is null + 1") [instance: 2, cache: 1]; reset = Switch( resetNull, reset, 0) [instance: 2, cache: 1]; whichCamera = Compute( "($0 != 0 || $1 == 0) ? 1 : 2", reset, useVector) [instance: 1, cache: 1]; camera = Switch( whichCamera, resetCamera, realCamera) [instance: 3, cache: 1]; AAobject = AutoAxes( object, camera, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) [instance: 1, cache: 1]; switchAAenable = Compute("$0+1", AAenable) [instance: 2, cache: 1]; object = Switch( switchAAenable, object, AAobject) [instance:4, cache: 1]; SWapproximation_options = Switch( buttonState, buttonUpApprox, buttonDownApprox) [instance: 5, cache: 1]; SWdensity_options = Switch( buttonState, buttonUpDensity, buttonDownDensity) [instance: 6, cache: 1]; HWapproximation_options = Format( "%s,%s", buttonDownApprox, buttonUpApprox) [instance: 1, cache: 1]; HWdensity_options = Format( "%d,%d", buttonDownDensity, buttonUpDensity) [instance: 2, cache: 1]; switchRenderMode = Compute( "$0+1", renderMode) [instance: 3, cache: 1]; approximation_options = Switch( switchRenderMode, SWapproximation_options, HWapproximation_options) [instance: 7, cache: 1]; density_options = Switch( switchRenderMode, SWdensity_options, HWdensity_options) [instance: 8, cache: 1]; renderModeString = Switch( switchRenderMode, "software", "hardware")[instance: 9, cache: 1]; object_tag = Inquire( object, "object tag")[instance: 3, cache: 1]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "object tag", object_tag, "ddcamera", whichCamera, "rendering approximation", approximation_options, "render every", density_options, "button state", buttonState, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 4, cache: 1]; ImageResolution = Inquire( camera, "camera resolution") [instance: 5, cache: 1]; RECresolution = Switch( RECresNull, RECresolution, ImageResolution) [instance: 10, cache: 1]; RECaspectNull = Inquire( RECaspect, "is null + 1") [instance: 6, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 7, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4", RECenable, switchRenderMode, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object); Display( NoRECobject, camera, where, throttle) [instance: 1, cache: 1]; image = Render( RECNoRerenderObject, camera) [instance: 1, cache: 1]; Display( image, NULL, where, throttle) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 1, cache: 1]; rec_where = Display( RECNoRerHW, camera, where, throttle) [instance: 1, cache: 0]; rec_image = ReadImageWindow( rec_where) [instance: 1, cache: 1]; WriteImage( rec_image, RECfile, RECformat) [instance: 1, cache: 1]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 2, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 1, cache: 1]; RECRerenderObject = ScaleScreen( RECRerenderObject, NULL, RECresolution, camera) [instance: 1, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_1_in_1 = "Image_1"; main_Image_1_in_3 = "X24,,"; main_Image_1_in_4 = 1; main_Image_1_in_5 = [0.466889 0.863877 0.166499]; main_Image_1_in_6 = [0.466889 0.863877 4.74189]; main_Image_1_in_7 = 1.01623; main_Image_1_in_8 = 1266; main_Image_1_in_9 = 0.543049; main_Image_1_in_10 = [0 1 0]; main_Image_1_in_11 = NULL; main_Image_1_in_12 = 0; main_Image_1_in_13 = NULL; main_Image_1_in_14 = 1; main_Image_1_in_15 = NULL; main_Image_1_in_16 = NULL; main_Image_1_in_17 = NULL; main_Image_1_in_18 = NULL; main_Image_1_in_19 = 0; main_Image_1_in_20 = NULL; main_Image_1_in_21 = NULL; main_Image_1_in_22 = "snow"; main_Image_1_in_23 = NULL; main_Image_1_in_25 = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/doping.tif"; main_Image_1_in_26 = "tiff"; main_Image_1_in_27 = NULL; main_Image_1_in_28 = NULL; main_Image_1_in_29 = 1; main_Image_1_in_30 = NULL; main_Image_1_in_31 = -5; main_Image_1_in_32 = NULL; main_Image_1_in_33 = 1; main_Image_1_in_34 = 0; main_Image_1_in_35 = NULL; main_Image_1_in_36 = 1; main_Image_1_in_37 = {"clear", "black", "blue", "blue"}; main_Image_1_in_38 = {"background", "grid", "ticks", "labels"}; main_Image_1_in_39 = 0.65; main_Image_1_in_40 = "roman_d"; main_Image_1_in_41 = "panzoom"; main_Image_1_in_42 = NULL; main_Image_1_in_43 = NULL; main_Image_1_in_44 = NULL; main_Image_1_in_45 = NULL; main_Image_1_in_46 = NULL; main_Image_1_in_47 = NULL; main_Image_1_in_48 = NULL; main_Image_1_in_49 = NULL; main_RubberSheet_1_in_1 = NULL; main_RubberSheet_1_in_2 = NULL; main_RubberSheet_1_in_3 = NULL; main_RubberSheet_1_in_4 = NULL; main_ShowConnections_1_in_1 = NULL; Executive("product version 4 4 4"); $sync main(); secs2d-0.0.8/inst/Utilities/Updemesh.m0000644000175000017500000000335611201030277015370 0ustar shshfunction Updemesh(varargin); % Udrawedge(mesh); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . if nargin == 1 Udrawedge(varargin{1}); elseif nargin == 2 mesh = varargin{1}; u = varargin{2}; dataname = mktemp("/tmp",".dx"); scriptname = mktemp("/tmp",".net"); UDXoutput2Ddata(dataname,mesh.p,mesh.t,u,'u',0,1,1); showmesh = file_in_path(path,"Urubbersheet.net"); system (["cp " showmesh " " scriptname]); system (["sed -i \'s|__FILE__DX__|" dataname "|g\' " scriptname]); command = ["dx -program " scriptname " -execute -image >& /dev/null &"]; system(command); else fprintf(1,"wrong number of parameters\n\n") end endfunction function filename = mktemp (direct,ext); if (~exist(direct,"dir")) error("trying to save temporary file to non existing directory") end done=false; while ~done filename = [direct,"/SECS2D.",num2str(floor(rand*1e7)),ext]; if ~exist(filename,"file") done =true; end end endfunctionsecs2d-0.0.8/inst/Utilities/Uscharfettergummel3.m0000644000175000017500000002452211201030277017545 0ustar shshfunction S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta) ## -*- texinfo -*- ## ## @deftypefn {Function File} @ ## {@var{S}} = Uscharfettergummel3 (@var{mesh}, @var{alpha}, @ ## @var{gamma}, @var{eta}, @var{beta}) ## ## ## Builds the Scharfetter-Gummel matrix for the ## discretization of the LHS ## of the equation: ## ## @iftex ## @tex ## $ -div ( \alpha \gamma ( \eta \vect{\nabla} u - \vect{beta} u )) = f $ ## @end tex ## @end iftex ## @ifinfo ## -div (@var{alpha} * @var{gamma} (@var{eta} grad u - @var{beta} u )) = f ## @end ifinfo ## ## where: ## @itemize @minus ## @item @var{alpha} is an element-wise constant scalar function ## @item @var{eta}, @var{gamma} are piecewise linear conforming ## scalar functions ## @item @var{beta} is an element-wise constant vector function ## @end itemize ## ## Instead of passing the vector field @var{beta} directly ## one can pass a piecewise linear conforming scalar function ## @var{phi} as the last input. In such case @var{beta} = grad @var{phi} ## is assumed. If @var{phi} is a single scalar value @var{beta} ## is assumed to be 0 in the whole domain. ## ## Example: ## @example ## [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:1/3:1],[0:1/3:1],1,1:4); ## mesh = Umeshproperties(mesh); ## x = mesh.p(1,:)'; ## Dnodes = Unodesonside(mesh,[2,4]); ## Nnodes = columns(mesh.p); Nelements = columns(mesh.t); ## Varnodes = setdiff(1:Nnodes,Dnodes); ## alpha = ones(Nelements,1); eta = .1*ones(Nnodes,1); ## beta = [ones(1,Nelements);zeros(1,Nelements)]; ## gamma = ones(Nnodes,1); ## f = Ucompconst(mesh,ones(Nnodes,1),ones(Nelements,1)); ## S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); ## u = zeros(Nnodes,1); ## u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); ## uex = x - (exp(10*x)-1)/(exp(10)-1); ## assert(u,uex,1e-7) ## @end example ## ## @seealso{Ucomplap, Ucompconst, Ucompmass2, Uscharfettergummel} ## @end deftypefn %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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 . Nnodes = columns(mesh.p); Nelements = columns(mesh.t); alphaareak = reshape (alpha.*sum( mesh.wjacdet,1)',1,1,Nelements); shg = mesh.shg(:,:,:); % build local Laplacian matrix Lloc=zeros(3,3,Nelements); for inode=1:3 for jnode=1:3 ginode(inode,jnode,:)=mesh.t(inode,:); gjnode(inode,jnode,:)=mesh.t(jnode,:); Lloc(inode,jnode,:) = sum( shg(:,inode,:) .* shg(:,jnode,:),1)... .* alphaareak; end end x = mesh.p(1,:); x = x(mesh.t(1:3,:)); y = mesh.p(2,:); y = y(mesh.t(1:3,:)); if all(size(beta)==1) v12=0;v23=0;v31=0; elseif all(size(beta)==[2,Nelements]) v12 = beta(1,:) .* (x(2,:)-x(1,:)) + beta(2,:) .* (y(2,:)-y(1,:)); v23 = beta(1,:) .* (x(3,:)-x(2,:)) + beta(2,:) .* (y(3,:)-y(2,:)); v31 = beta(1,:) .* (x(1,:)-x(3,:)) + beta(2,:) .* (y(1,:)-y(3,:)); elseif all(size(beta)==[Nnodes,1]) betaloc = beta(mesh.t(1:3,:)); v12 = betaloc(2,:)-betaloc(1,:); v23 = betaloc(3,:)-betaloc(2,:); v31 = betaloc(1,:)-betaloc(3,:); end etaloc = eta(mesh.t(1:3,:)); eta12 = etaloc(2,:)-etaloc(1,:); eta23 = etaloc(3,:)-etaloc(2,:); eta31 = etaloc(1,:)-etaloc(3,:); etalocm1 = Utemplogm(etaloc(2,:),etaloc(3,:)); etalocm2 = Utemplogm(etaloc(3,:),etaloc(1,:)); etalocm3 = Utemplogm(etaloc(1,:),etaloc(2,:)); gammaloc = gamma(mesh.t(1:3,:)); geloc = gammaloc.*etaloc; gelocm1 = Utemplogm(geloc(2,:),geloc(3,:)); gelocm2 = Utemplogm(geloc(3,:),geloc(1,:)); gelocm3 = Utemplogm(geloc(1,:),geloc(2,:)); [bp12,bm12] = Ubern( (v12 - eta12)./etalocm3); [bp23,bm23] = Ubern( (v23 - eta23)./etalocm1); [bp31,bm31] = Ubern( (v31 - eta31)./etalocm2); bp12 = reshape(gelocm3.*etalocm3.*bp12,1,1,Nelements).*Lloc(1,2,:); bm12 = reshape(gelocm3.*etalocm3.*bm12,1,1,Nelements).*Lloc(1,2,:); bp23 = reshape(gelocm1.*etalocm1.*bp23,1,1,Nelements).*Lloc(2,3,:); bm23 = reshape(gelocm1.*etalocm1.*bm23,1,1,Nelements).*Lloc(2,3,:); bp31 = reshape(gelocm2.*etalocm2.*bp31,1,1,Nelements).*Lloc(3,1,:); bm31 = reshape(gelocm2.*etalocm2.*bm31,1,1,Nelements).*Lloc(3,1,:); Sloc(1,1,:) = (-bm12-bp31)./reshape(etaloc(1,:),1,1,Nelements); Sloc(1,2,:) = bp12./reshape(etaloc(2,:),1,1,Nelements); Sloc(1,3,:) = bm31./reshape(etaloc(3,:),1,1,Nelements); Sloc(2,1,:) = bm12./reshape(etaloc(1,:),1,1,Nelements); Sloc(2,2,:) = (-bp12-bm23)./reshape(etaloc(2,:),1,1,Nelements); Sloc(2,3,:) = bp23./reshape(etaloc(3,:),1,1,Nelements); Sloc(3,1,:) = bp31./reshape(etaloc(1,:),1,1,Nelements); Sloc(3,2,:) = bm23./reshape(etaloc(2,:),1,1,Nelements); Sloc(3,3,:) = (-bm31-bp23)./reshape(etaloc(3,:),1,1,Nelements); S = sparse(ginode(:),gjnode(:),Sloc(:)); endfunction %!test %! [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:1/3:1],[0:1/3:1],1,1:4); %! mesh = Umeshproperties(mesh); %! x = mesh.p(1,:)'; %! Dnodes = Unodesonside(mesh,[2,4]); %! Nnodes = columns(mesh.p); Nelements = columns(mesh.t); %! Varnodes = setdiff(1:Nnodes,Dnodes); %! alpha = ones(Nelements,1); eta = .1*ones(Nnodes,1); %! beta = [ones(1,Nelements);zeros(1,Nelements)]; %! gamma = ones(Nnodes,1); %! f = Ucompconst(mesh,ones(Nnodes,1),ones(Nelements,1)); %! S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); %! u = zeros(Nnodes,1); %! u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); %! uex = x - (exp(10*x)-1)/(exp(10)-1); %! assert(u,uex,1e-7) %!test %! [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:1/3:1],[0:1/3:1],1,1:4); %! mesh = Umeshproperties(mesh); %! x = mesh.p(1,:)'; %! Dnodes = Unodesonside(mesh,[2,4]); %! Nnodes = columns(mesh.p); Nelements = columns(mesh.t); %! Varnodes = setdiff(1:Nnodes,Dnodes); %! alpha = ones(Nelements,1); eta = .1*ones(Nnodes,1); %! beta = x; %! gamma = ones(Nnodes,1); %! f = Ucompconst(mesh,ones(Nnodes,1),ones(Nelements,1)); %! S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); %! u = zeros(Nnodes,1); %! u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); %! uex = x - (exp(10*x)-1)/(exp(10)-1); %! assert(u,uex,1e-7) %!test %! [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:1/3:1],[0:1/3:1],1,1:4); %! mesh = Umeshproperties(mesh); %! x = mesh.p(1,:)'; %! Dnodes = Unodesonside(mesh,[2,4]); %! Nnodes = columns(mesh.p); Nelements = columns(mesh.t); %! Varnodes = setdiff(1:Nnodes,Dnodes); %! alpha = 10*ones(Nelements,1); eta = .01*ones(Nnodes,1); %! beta = x/10; %! gamma = ones(Nnodes,1); %! f = Ucompconst(mesh,ones(Nnodes,1),ones(Nelements,1)); %! S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); %! u = zeros(Nnodes,1); %! u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); %! uex = x - (exp(10*x)-1)/(exp(10)-1); %! assert(u,uex,1e-7) %!test %! [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:1/3:1],[0:1/3:1],1,1:4); %! mesh = Umeshproperties(mesh); %! x = mesh.p(1,:)'; %! Dnodes = Unodesonside(mesh,[2,4]); %! Nnodes = columns(mesh.p); Nelements = columns(mesh.t); %! Varnodes = setdiff(1:Nnodes,Dnodes); %! alpha = 10*ones(Nelements,1); eta = .001*ones(Nnodes,1); %! beta = x/100; %! gamma = 10*ones(Nnodes,1); %! f = Ucompconst(mesh,ones(Nnodes,1),ones(Nelements,1)); %! S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); %! u = zeros(Nnodes,1); %! u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); %! uex = x - (exp(10*x)-1)/(exp(10)-1); %! assert(u,uex,1e-7) %!test %! [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:1/1e3:1],[0:1/2:1],1,1:4); %! mesh = Umeshproperties(mesh); %! x = mesh.p(1,:)'; %! Dnodes = Unodesonside(mesh,[2,4]); %! Nnodes = columns(mesh.p); Nelements = columns(mesh.t); %! Varnodes = setdiff(1:Nnodes,Dnodes); %! alpha = 3*ones(Nelements,1); eta = x+1; %! beta = [ones(1,Nelements);zeros(1,Nelements)]; %! gamma = 2*x; %! ff = 2*(6*x.^2+6*x) - (6*x+6).*(1-2*x)+6*(x-x.^2); %! f = Ucompconst(mesh,ff,ones(Nelements,1)); %! S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); %! u = zeros(Nnodes,1); %! u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); %! uex = x - x.^2; %! assert(u,uex,5e-3) %!test %! [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:1/1e3:1],[0:1/2:1],1,1:4); %! mesh = Umeshproperties(mesh); %! x = mesh.p(1,:)'; %! Dnodes = Unodesonside(mesh,[2,4]); %! Nnodes = columns(mesh.p); Nelements = columns(mesh.t); %! Varnodes = setdiff(1:Nnodes,Dnodes); %! alpha = ones(Nelements,1); eta = ones(Nnodes,1); %! beta = 0; %! gamma = x+1; %! ff = 4*x+1; %! f = Ucompconst(mesh,ff,ones(Nelements,1)); %! S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); %! u = zeros(Nnodes,1); %! u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); %! uex = x - x.^2; %! assert(u,uex,1e-7) %!test %! [mesh.p,mesh.e,mesh.t] = Ustructmesh([0:.1:1],[0:.1:1],1,1:4); %! mesh = Umeshproperties(mesh); %! x = mesh.p(1,:)';y = mesh.p(2,:)'; %! Dnodes = Unodesonside(mesh,[1:4]); %! Nnodes = columns(mesh.p); Nelements = columns(mesh.t); %! Varnodes = setdiff(1:Nnodes,Dnodes); %! alpha = ones(Nelements,1); diff = 1e-2; eta=diff*ones(Nnodes,1); %! beta =[ones(1,Nelements);ones(1,Nelements)]; %! gamma = x*0+1; %! ux = y.*(1-exp((y-1)/diff)) .* (1-exp((x-1)/diff)-x.*exp((x-1)/diff)/diff); %! uy = x.*(1-exp((x-1)/diff)) .* (1-exp((y-1)/diff)-y.*exp((y-1)/diff)/diff); %! uxx = y.*(1-exp((y-1)/diff)) .* (-2*exp((x-1)/diff)/diff-x.*exp((x-1)/diff)/(diff^2)); %! uyy = x.*(1-exp((x-1)/diff)) .* (-2*exp((y-1)/diff)/diff-y.*exp((y-1)/diff)/(diff^2)); %! ff = -diff*(uxx+uyy)+ux+uy; %! f = Ucompconst(mesh,ff,ones(Nelements,1)); %! S = Uscharfettergummel3(mesh,alpha,gamma,eta,beta); %! u = zeros(Nnodes,1); %! u(Varnodes) = S(Varnodes,Varnodes)\f(Varnodes); %! uex = x.*y.*(1-exp((x-1)/diff)).*(1-exp((y-1)/diff)); %! assert(u,uex,1e-7) secs2d-0.0.8/inst/Utilities/Udriftdiffusion2.m0000644000175000017500000000356011201030277017041 0ustar shshfunction c=Udriftdiffusion2(mesh,Dsides,guess,M,U,V,Vth,u) %% % c=Udriftdiffusion(mesh,Dsides,guess,M,U,V,Vth,u) % solves the drift diffusion equation % $ -div ( u ( \nabla (n Vth) - n \nabla V)) + M = U $ %% % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . global DDG_RHS DDG_MASS %DEBUG_SGM Nnodes = max(size(mesh.p)); Nelements = max(size(mesh.t)); % Set list of nodes with Dirichelet BCs Dnodes=Unodesonside(mesh,Dsides); % Set values of Dirichelet BCs Bc = guess(Dnodes); % Set list of nodes without Dirichelet BCs Varnodes = setdiff([1:Nnodes],Dnodes); % Build LHS matrix and RHS A = Uscharfettergummel2(mesh,V,u,Vth); if (isempty(DDG_MASS)) DDG_MASS=Ucompmass2(mesh,ones(Nnodes,1),ones(Nelements,1)); end A = A + DDG_MASS.*spdiag(M,0); if (isempty(DDG_RHS)) DDG_RHS=Ucompconst(mesh,ones(Nnodes,1),ones(Nelements,1)); end b = DDG_RHS.*U; %%%%%%%%DEBUG%%%%%%%%%%% %DEBUG_SGM = A; %% Apply boundary conditions A (Dnodes,:) = 0; b (Dnodes) = 0; b = b - A (:,Dnodes) * Bc; A(Dnodes,:)= []; A(:,Dnodes)= []; b(Dnodes) = []; c = guess; c(Varnodes) = A \ b; secs2d-0.0.8/inst/Utilities/Usmoothguess.m0000644000175000017500000000076711201030277016326 0ustar shshfunction guess = Usmoothguess(mesh,new,old,Dsides); % guess = Usmoothguess(mesh,new,old,Dsides); if ~isfield("mesh","wjacdet") mesh = Umeshproperties(mesh); end Nelements = columns(mesh.t); Nnodes = columns(mesh.p); Dnodes = Unodesonside(mesh,Dsides); varnodes = setdiff([1:Nnodes]',Dnodes); guess = new; A = Ucomplap(mesh,ones(Nelements,1)); Aie = A(varnodes,Dnodes); Aii = A(varnodes,varnodes); guess(varnodes) = Aii\(-Aie*(new(Dnodes)-old(Dnodes))+Aii*old(varnodes)); secs2d-0.0.8/inst/Utilities/Uise2pde.m0000644000175000017500000005503511201030277015277 0ustar shshfunction [mesh,data_v]=Uise2pde(grid_file,pref,data_file_v,load_data,out_file) ## [mesh,data]=ise2pde3(grid_file,pref,data_file,load_data,out_file) ## ise2pde3 ## estrae dati dal formato DF-ISE di ISE a pdetool di Matlab ## grid_file contiene il nome del file di griglia da estrarre ## pref un prefisso che verra' dato ai files temporanei creati da grep ## data_file e' un cell array delle file da estrarre ## load_data e' un cell array che contiene i nomi delle grandezze da estrarre ## out_file e' il nome del file matlab opzionale per salvare i dati estratti ## ## 17-3-2004 ver 3.1 ## Marco Bellini marco_bellini_1@yahoo.it ## 14.02.2007 ver 3.2 ## Octave porting and bug fixes Carlo de Falco ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## ## CHANGES: ## - riconosce i nomi dei contatti e delle regioni ## - tratta anche dispositivi con una sola regione ## - fornisce informazioni sulla conversione ## ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## ## TO DO LOG: ## ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ##esempio per debug ## prova a costruire una grid per pdetool ##data_file="/home/marco/IseDB/jfet/jsdd2_mdr.dat"; ##grid_file="/home/marco/IseDB/jfet/jsdd2_mdr.grd"; ##pref="/home/marco/IseDB/jfet/jsdd2"; ## esempio per struttura onda viaggiante ## data_file={"/home/marco/IseDB/prova/spice/on1_onda1_tr_des.dat"}; ## grid_file="/home/marco/IseDB/prova/spice/on_mdr.grd"; ## pref="/home/marco/IseDB/prova/spice/on"; ## load_data={"ElectrostaticPotential"}; ## dati da estrarre ##load_data={"DopingConcentration","BoronActiveConcentration","PhosphorusActiveConcentration"}; ##load_data={"ElectrostaticPotential","eDensity","hDensity","eCurrentDensity","BeamGeneration"}; ##pdeplot(p1,e1,t1,"xydata",log10(abs(data(1,:)))',"zdata",log10(abs(data(1,:)))); ##[p1,e1,t1]=ise2pde(grid_file,pref); ## leggo i vertici ## i punti sono ordinati per regione ## se la prima regione e' l'ossido ed ha 269 punti ## i primi 269 valori in p1 si riferiscono ai punti dell'ossido ## ## nei file di des.cmd di simulazione i punti vengono dati per ogni regione ## quindi i punti della frontiera tra ossido e silicio vengono ripetuti due ## volte (tra l'ossido e tra il silicio): e' necessario prenderli una volta ## sola ## siccome con piu' di due materiali diversi il discorso e' piu' complicato ## si sceglie di considerare in questo programma solo un ossido ed il ## silicio ## p1 conterra' le coordinate x e y dei vertici [s,w]=unix(sprintf("grep Vertices %s",grid_file)); n_vert_str = regexp(w,'([0-9]+)',"Tokens"); n_vert=str2num(n_vert_str{1}{1}); unix(sprintf("grep Vertices -A %d %s | tail -n+2 > %s_vertex.txt",n_vert,grid_file,pref)); p1=load(strcat(pref,"_vertex.txt")); unix(sprintf("rm %s_vertex.txt",pref)); p1(:,2)=-p1(:,2); fprintf("Found %d vertex\n",n_vert); ##leggo gli edge ## el conterra' l'indice dei vertici degli edges degli elementi ## cioe' l'indice dei vertici dei lati dei triangoli e l'indice dei vertici ## dei segmenti [s,w]=unix(sprintf("grep Edges %s",grid_file)); n_edges_str = regexp(w,'([0-9]+)',"Tokens"); n_edges=str2num(n_edges_str{1}{1}); unix(sprintf("grep Edges -A %d %s | tail -n+2 > %s_edges.txt",n_edges,grid_file,pref)); el=load(strcat(pref,"_edges.txt")); unix(sprintf("rm %s_edges.txt",pref)); fprintf("Found %d edges\n",n_edges); clear n_edges; el=el+1; ##leggo gli elementi triangolari ## el_tr contiene gli indici degli edge dei triangoli [s,w]=unix(sprintf("grep Elements %s",grid_file)); n_els_str = regexp(w,'([0-9]+)',"Tokens"); n_els=str2num(n_els_str{1}{1}); ## leggo solo gli elementi che iniziano per 2 e che corrispondono ai ## triangoli, creando un file che contiene solo gli elementi triangolari unix(sprintf("grep Elements -A %d %s | head -n %d | tail -n %d | awk '$1==2 {print $2,$3,$4}' > %s_elements2.txt",n_els,grid_file,n_els+1,n_els,pref)); el_tr=load(strcat(pref,"_elements2.txt")); unix(sprintf("rm %s_elements2.txt",pref)); fprintf("Found %d triangular elements out of %d elements\n",length(el_tr),n_els); ## creo un file che contiene gli elementi "segmenti" unix(sprintf("grep Elements -A %d %s | head -n %d | tail -n %d | awk '$1==1 {print $2,$3}' > %s_elements1.txt",n_els,grid_file,n_els+1,n_els,pref)); ##el_lin=load(strcat(pref,"_elements1.txt")); ##unix(sprintf("rm %s_elements1.txt",pref)); ## creo un indice che dice se l'elemento e' un triangolo o una linea ## e lo salvo nel file pref_linee1.txt; ci sara' un 1 se l'elemento i-esimo ## e' una linea o un 2 se e' un triangolo unix(sprintf("grep Elements -A %d %s | head -n %d | tail -n %d | awk ' {print $1} ' > %s_linee1.txt",n_els,grid_file,n_els+1,n_els,pref)); clear n_els; ## leggo le regions ## cosi posso distinguere tra silicio, contatti e ossido ## al max e' possibile leggere 60 regions [s,w]=unix(sprintf("grep regions -n %s | grep -v nb_regions | tr -d []=",grid_file)); w2=w(11:length(w)); n_regions=0; l2=length(w2);cont=1;num=1;str="";begin=0; while (cont %s_loc.txt",... loc_d-1,grid_file ,loc_u+1,pref) ); loc=load(sprintf("%s_loc.txt",pref)); ## loc contiene ## 0 per gli elementi interni ## 1 per gli esterni ## 2 per la frontiera unix(sprintf("rm %s_loc.txt",pref)); clear loc_u;clear loc_d; ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## CONVERSIONE DELLA GRIGLIA ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% n_ed=max(size(el)); n_el=max(size(el_tr)); ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## calcolo di E1 ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## trova gli elementi sul bordo (esterni) ## del dispositivo (quelli rossi) ind=find(loc==1); e1=el(ind,:); ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## calcolo di T1 ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% el_si=sign(el_tr)+1; el_si=sign(el_si); ## el_si contiene le posizioni degli elementi positivi t1=zeros(n_el,4); ## elementi tutti positivi: vertice di testa ind=find( el_si(:,:)==1); t1(ind)=el(el_tr(ind)+1,1); ## elementi negativi: vertice di coda ind=find( el_si(:,:)==0); t1(ind)=el(-el_tr(ind),2); ## inserisco il numero di subdominio ## trovo il delimitatore inferiore di una regione [s,w]=unix(sprintf("grep material -n %s | grep -v materials | awk '/material/ {print $1 }'",grid_file)); mat_pos=sscanf(w,"%d:\n"); [s,w]=unix(sprintf("grep material -n %s | grep -v materials | awk '/material/ {print $2 }' |tr -d =",grid_file)); mat_type_lim=findstr(w,"\n"); if isempty(mat_type_lim) mat_type=w; else for ii=1:length(mat_type_lim)-1 mat_type{ii}=w(mat_type_lim(ii)+1:mat_type_lim(ii+1)-1); end mat_type{ii+1}=w(mat_type_lim(ii)+1:end); end [s,w]=unix(sprintf("grep material -n %s | grep -v materials | awk '/material/ {print $4 }' |tr -d =",grid_file)); mat_name_lim=findstr(w,"\n"); if isempty(mat_name_lim) mat_name=w; else for ii=1:length(mat_name_lim)-1 mat_name{ii}=w(mat_name_lim(ii)+1:mat_name_lim(ii+1)-1); end mat_name{ii+1}=w(mat_name_lim(ii)+1:end); end ## leggo il tipo di elemento ## se e' un materiale i triangoli appartenenti a quel materiale otterranno ## indice pari all'indice della regione. t1(4,:)' perche' non ho ancora ## trasposto ## se e' un contatto, i segmenti appartenenti a quel contatto saranno ## indicati con un numero in e(5,:)' (non trasposto) el_type=load(strcat(pref,"_linee1.txt")); indice_tr=zeros(size(el_type)); ## indice_tr e' 1 nelle posizioni che corrispondono agli elementi triangolari nella lista ## totale degli elementi nel file *.grd indice_tr(find(el_type==2))=1; ## ora faccio la somma cumulativa in modo che nella posizione i-esima del ## vettore degli elementi totali ci sia l'indice che identifica il triangolo ## i-esimo in el_tr : ho costruito una tabella di conversione dall'indice di ## ISE unico per triangoli e segmenti -> indice dei soli triangoli. indice_tr=cumsum(indice_tr); clear ind; ## leggo gli elementi "segmento" try el_lin=load(strcat(pref,"_elements1.txt")); catch el_lin=-1; end_try_catch ## aggiungo 1 perche' gli elementi partono da 0 el_lin=el_lin+1; unix(sprintf("rm %s_elements1.txt",pref)); ## costruisco una mappa di conversione anche per gli elementi lineari (indicati da 1 in el_tr). indice_lin=zeros(size(el_type)); indice_lin(find(el_type==1))=1; indice_lin=cumsum(indice_lin); ## ## creo un vettore che indica il tipo di elemento di frontiera ## 1 per i lati del dispositivo (elementi esterni) ## 2 per l'interfaccia ossido-silicio ## da 3 in poi per i contatti e_fron=ones(max(size(e1)),1); ## AGGIUNGO LA FRONTIERA ## clear ind1; ind1=find(loc==2); name_contact{1}="External"; name_contact{2}="I. Frontier"; if (isempty(ind1)==0) ## aggiungo gli elementi di frontiera trovati al vettore degli edges e1 ## mettendo indice 2 e1=[e1;el(ind1,:)]; e_fron=[e_fron;2*ones(length(ind1),1)]; end clear el_type ## numero del contatto n_contact=3; ## name_material contiene il nome del materiale i-esimo ## name_contact contiene il nome del contatto i-esimo for n=1:n_regions if strcmp(mat_type{n},"Contact")==0 ## leggo gli elementi che costituiscono una regione if (n~=n_regions) unix(sprintf(" head -n %d %s | tail -n+%d | tr -d [:cntrl:]} > %s_tmp2.txt", mat_pos(n+1)-2,grid_file,mat_pos(n)+2,pref)); else ## trattare l'ultima regione che e' diversa unix(sprintf(" tail -n+%d %s | tr -d [:cntrl:]} > %s_tmp2.txt",mat_pos(n)+2, grid_file,pref) ); end ## e' l'ultima regione? tmp_el=load(strcat(pref,"_tmp2.txt")); tmp_el=tmp_el+1; ## trova i triangoli che fanno parte della regione n t1(indice_tr(tmp_el),4)=n; name_material{n}=mat_name{n}; else ## la regione e' un contatto if (n~=n_regions) unix(sprintf(" head -n %d %s | tail -n+%d | tr -d [:cntrl:]} > %s_tmp2.txt", mat_pos(n+1)-2,grid_file,mat_pos(n)+2,pref)); else ## trattare l'ultima regione che e' diversa unix(sprintf(" tail -n+%d %s | tr -d [:cntrl:]} > %s_tmp2.txt", mat_pos(n)+2,grid_file,pref) ); end ## e' l'ultima regione? tmp_el=load(strcat(pref,"_tmp2.txt")); ## tmp_el contiene gli indici dei vertici che appartengono al ## contatto: aggiungo 1 perche' ise parte da 0. tmp_el=tmp_el+1; ## predo i vertici la cui posizione e' in tmp_el e la converto da ## dessis a pde e1=[e1;el_lin(indice_lin(tmp_el),:)]; ## aggiungo il numero del contatto tmp_el=tmp_el'; e_fron=[e_fron;n_contact*ones(size(tmp_el))]; name_contact{n_contact}=regions(n); n_contact=n_contact+1; end ## non e' un contatto end ## fine scansione regioni unix(sprintf("rm %s_linee1.txt",pref)); ## trasposizione t1=t1'; e1=e1'; p1=p1'; ## individuo a che regione appartengono dei vertici ## fondamentale per leggere i set di dati prodotti dalle simulazioni tmpt1=[t1(1,:),t1(2,:),t1(3,:);t1(4,:),t1(4,:),t1(4,:)]; stmpt1=sortrows(tmpt1',1)'; dtmpt1=diff(stmpt1(1,:)); ##clear stmpt1; ind1=find(dtmpt1==1); ##%%% questa prende i valori dei vertici in ordine solo per TEST ##%%% reg_vert=[stmpt1(1,ind1),stmpt1(1,length(dtmpt1)+1)]; ## reg_vert contiene la regione a cui il punto appartiene reg_vert=[stmpt1(2,ind1),stmpt1(2,length(dtmpt1)+1)]; clear tmpt1 stmpt1 dtmpt1 ind1; ## individuo i vertici appartenenti alla frontiera ## le righe precedenti hanno assegnato questi punti ## a una o all'altra regione. Nei file delle simulazioni questi ## punti sono assegnati casualmente ad una delle regioni secondo ## un criterio arbitrario. E' necessario individuare i punti alla ## frontiera per tenerne conto. ## costruisco e1 completo e1=[e1;zeros(size(e1))]; e1=[e1;e_fron']; ## trovo i punti di frontiera ind1=find(loc==2); ## nel caso la frontiera non esista non fa niente if (isempty(ind1)~=1) ## controlla se c'e' una frontiera tra diversi elementi el=el'; tmpe1=[el(1,ind1),el(2,ind1)]; stmpe1=sortrows(tmpe1',1)'; dtmpe1=diff(stmpe1(1,:)); clear ind1; ## non e' detto che i vertici di frontiera siano ad incrementi unitari ind1=find(dtmpe1>0); ## in teoria dovrei controllare che non ci sia un solo elemento di ## frontiera ## if (length(ind1)>1) front_vert=[stmpe1(1,ind1),stmpe1(1,length(dtmpe1)+1)]; ## else ## c'e' solo 1 punto di frontiera ##front_vert=[stmpe1(1,ind1)]; ##end ## inserisco anche nel reg_vert l'informazione se un punto e' di frontiera ## in questo modo il valore assoluto indica la regione alla quale e' ## attribuito il valore. ## i punti con valore negativo sono punti di frontiera reg_vert(front_vert)=-reg_vert(front_vert); clear tmpe1 stmpe1 dtmpe1 ind1; end % esiste la frontiera ## % % test ## ind1=find(reg_vert==2); ## plot(p1(1,ind1),p1(2,ind1),'b.') ## whos ind1 ## hold on; ## ind1=find(reg_vert==1); ## whos ind1 ## plot(p1(1,ind1),p1(2,ind1),'g.') ## plot(p1(1,front_vert),p1(2,front_vert),'ro') ## whos front_vert ## es. testato: ok ## ind=find(reg_vert==2); ## plot(p1(1,:),p1(2,:),'b.') ## hold on; ## plot(p1(1,ind1),p1(2,ind1),'g.') ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## DATASETS % ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if (exist("data_file_v")~=0) ## guardo quanti file devo leggere n_data_file=max(size(data_file_v)); for nf=1:n_data_file data_file=char(data_file_v(nf)); ## leggo i nomi dei datasets [s,w]=unix(sprintf("grep datasets %s",data_file)); w2=w(18:length(w)-1); ndatasets=0; datasets=cell(30,1); l2=length(w2);cont=1;num=1;str="";begin=0; while (cont %s_tmp.txt",n_vert,data_file,pref)); ## estrae le righe che delimitano i dati da estrarre ## del contiene le righe sotto le quali si trovano i valori sui vertici ## dei triangoli (Values) [s,w]=unix(sprintf("grep Values -n %s_tmp.txt | awk '/Values/{print $1}' | tr -d : > %s_del.txt",pref,pref)); del=load(sprintf("%s_del.txt",pref)); unix(sprintf("rm %s_del.txt",pref)); ## uel contiene le righe sopra le quali si trovano i valori sui vertici ## dei triangoli (}) [s,w]=unix(sprintf("grep } -n %s_tmp.txt | awk '/}/ {print $1}' | tr -d : > %s_del.txt",pref,pref)); uel=load(sprintf("%s_del.txt",pref)); unix(sprintf("rm %s_del.txt",pref)); ## nval contiene il numero valori sui vertici contenuto in questa ## sezione del file [s,w]=unix(sprintf("grep Values %s_tmp.txt | tr -d [:alpha:]{\\(\\) > %s_nval.txt",pref,pref)); nval=load(sprintf("%s_nval.txt",pref)); unix(sprintf("rm %s_nval.txt",pref)); nload=max(size(load_data)); data=zeros(nload,n_vert); ##calcolo gli elementi ripetuti alla frontiera n_rip=sum(loc==2)+1; nl=1;nd=1; while(nl<=nload) while(nd<=ndatasets) if strcmp(load_data(nl),datasets(nd))==1 ## controllo se il numero dati sui vertici e' < del ## numero totale dei vertici: accade quando c'e' dell' ## ossido if (nval(nd) %s_tmp2.txt", ddo, pref,dup,pref)); tmp=load(strcat(pref,"_tmp2.txt")); ## tmp2 e' il vettore riga dei dati cercati ## inserisco i primi elementi: ossido, cioe' ## regione 2: gli elementi nel file .dat (var: tmp) sono ## ossido interno + frontiera. ## ind1 e' appunto dato da ossido + frontiera ind1=find(abs(reg_vert)==2 | reg_vert<0); data(nl,ind1)=tmp; ## leggo la seconda regione nd=nd+1; dup=del(nd)+1; c=1; ## trova il delimitatore successivo while uel(c)<=dup c=c+1; end; ddo=uel(c); [s,w]=unix(sprintf(" head -n %d %s_tmp.txt | tail -n+%d | tr -d [:cntrl:]} > %s_tmp2.txt", ddo, pref,dup,pref)); tmp=load(strcat(pref,"_tmp2.txt")); ## tmp2 e' il vettore riga dei dati cercati ## inserisco i secondi elementi ## silicio + frontiera clear ind; ind=find(abs(reg_vert)==1 | reg_vert<0 ); data(nl,ind)=tmp; else ## caso non particolare ## metto a zero i dati della regione mancante ind1=find(abs(reg_vert)==2 | reg_vert<0); data(nl,ind1)=0; ## leggo la regione dup=del(nd)+1; c=1; ## trova il delimitatore successivo while uel(c)<=dup c=c+1; end; ddo=uel(c); [s,w]=unix(sprintf(" head -n %d %s_tmp.txt | tail -n+%d | tr -d [:cntrl:]} > %s_tmp2.txt", ddo, pref,dup,pref)); tmp=load(strcat(pref,"_tmp2.txt")); ## tmp2 il vettore riga dei dati cercati ## inserisco i primi elementi ind=find(abs(reg_vert)==1 | reg_vert<0 ); data(nl,ind)=tmp; ##n_prev_region=length(tmp); ##data(nl,1:n_prev_region)=tmp; end ## trattamento casi particolari else ## il numero dei dati sui vertici e' = al numero ## dei vertici: uso lo stesso codice di ise2pde dup=del(nd)+1; c=1; ## trova il delimitatore successivo while uel(c)<=dup c=c+1; end; ddo=uel(c); [s,w]=unix(sprintf(" head -n %d %s_tmp.txt | tail -n+%d | tr -d [:cntrl:]} > %s_tmp2.txt", ddo, pref,dup,pref)); data(nl,:)=load(strcat(pref,"_tmp2.txt")); ## tmp2 e' il vettore riga dei dati cercati end ## numero dei vertici = end %if trovato il set nd=nd+1; end %nd nd=1; nl=nl+1; end %nl clear nd nl; data_v(:,:,nf)=data(:,:); end ## fine lettura n-esimo data_file end ## if c'e' un data_file clear n_vert w2 l2 cont num str c; mesh.p=p1; mesh.e=e1; mesh.t=t1; mesh.materials=name_material; mesh.contacts=name_contact; for cont=1:length(name_material) fprintf("Extracted region %d : %s\n",cont,char(name_material{cont})); end; for cont=3:length(name_contact) fprintf("Extracted contact %d : %s\n",cont,char(name_contact{cont})); end; if exist("out_file") if (exist("data_file_v")~=0) save (out_file,"mesh","data"); fprintf("mesh and data saved"); else save (out_file,"mesh"); fprintf("mesh saved"); end; end unix(sprintf("rm %s_tmp.txt",pref)); unix(sprintf("rm %s_tmp2.txt",pref)); ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ## Cdf: Fix edge matrix and build output structure ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% return mesh.e(7,end)=0; mesh = Umeshproperties(mesh); alledges = [mesh.t([1,2,4],:),mesh.t([2,3,4],:),mesh.t([3,1,4],:)]; for iedge = 1:size(mesh.e,2) whatedgeL = find((mesh.e(1,iedge)==alledges(1,:)& mesh.e(2,iedge)==alledges(2,:))); whatedgeR = find((mesh.e(1,iedge)==alledges(2,:)& mesh.e(2,iedge)==alledges(1,:))); if (length(whatedgeL)==1) mesh.e(6,iedge)=alledges(3,whatedgeL); end if (length(whatedgeR)==1) mesh.e(7,iedge)=alledges(3,whatedgeR); end end maxedge = max(mesh.e(5,:)); intedges = find((mesh.e(6,:)~=0)&((mesh.e(7,:)~=0)&((mesh.e(7,:)~=(mesh.e(6,:)) ) ))); mesh.e (5,intedges) = maxedge+1; mesh.contacts{end+1} = "Interface"; return;secs2d-0.0.8/inst/Utilities/Ucoloredrubbersheet.net0000644000175000017500000004220011201030277020146 0ustar shsh// // time: Fri May 11 20:21:23 2007 // // version: 3.2.0 (format), 4.3.2 (DX) // // // MODULE main // workspace: width = 533, height = 507 // layout: snap = 0, width = 50, height = 50, align = NN // macro main( ) -> ( ) { // // node FileSelector[1]: x = 51, y = 31, inputs = 0, label = FileSelector // output[1]: visible = 1, type = 32, value = "__FILE__DX__" // output[2]: visible = 1, type = 32, value = "__FILE__DX__" // // // node Import[1]: x = 104, y = 118, inputs = 6, label = Import // main_Import_1_out_1 = Import( main_FileSelector_1_out_1, main_Import_1_in_2, main_Import_1_in_3, main_Import_1_in_4, main_Import_1_in_5, main_Import_1_in_6 ) [instance: 1, cache: 1]; // // node RubberSheet[1]: x = 216, y = 166, inputs = 4, label = RubberSheet // main_RubberSheet_1_out_1 = RubberSheet( main_Import_1_out_1, main_RubberSheet_1_in_2, main_RubberSheet_1_in_3, main_RubberSheet_1_in_4 ) [instance: 1, cache: 1]; // // node AutoColor[1]: x = 253, y = 283, inputs = 10, label = AutoColor // main_AutoColor_1_out_1, main_AutoColor_1_out_2 = AutoColor( main_RubberSheet_1_out_1, main_AutoColor_1_in_2, main_AutoColor_1_in_3, main_AutoColor_1_in_4, main_AutoColor_1_in_5, main_AutoColor_1_in_6, main_AutoColor_1_in_7, main_AutoColor_1_in_8, main_AutoColor_1_in_9, main_AutoColor_1_in_10 ) [instance: 1, cache: 1]; // // node ShowConnections[1]: x = 49, y = 232, inputs = 1, label = ShowConnections // main_ShowConnections_1_out_1 = ShowConnections( main_RubberSheet_1_out_1 ) [instance: 1, cache: 1]; // // node Color[1]: x = 72, y = 328, inputs = 5, label = Color // input[2]: defaulting = 0, visible = 1, type = 32, value = "black" // input[3]: defaulting = 0, visible = 1, type = 5, value = .5 // main_Color_1_out_1 = Color( main_ShowConnections_1_out_1, main_Color_1_in_2, main_Color_1_in_3, main_Color_1_in_4, main_Color_1_in_5 ) [instance: 1, cache: 1]; // // node ColorBar[1]: x = 413, y = 290, inputs = 16, label = ColorBar // input[9]: defaulting = 0, visible = 0, type = 16777248, value = {"black"} // main_ColorBar_1_out_1 = ColorBar( main_AutoColor_1_out_2, main_ColorBar_1_in_2, main_ColorBar_1_in_3, main_ColorBar_1_in_4, main_ColorBar_1_in_5, main_ColorBar_1_in_6, main_ColorBar_1_in_7, main_ColorBar_1_in_8, main_ColorBar_1_in_9, main_ColorBar_1_in_10, main_ColorBar_1_in_11, main_ColorBar_1_in_12, main_ColorBar_1_in_13, main_ColorBar_1_in_14, main_ColorBar_1_in_15, main_ColorBar_1_in_16 ) [instance: 1, cache: 1]; // // node Collect[1]: x = 280, y = 393, inputs = 3, label = Collect // main_Collect_1_out_1 = Collect( main_Color_1_out_1, main_AutoColor_1_out_1, main_ColorBar_1_out_1 ) [instance: 1, cache: 1]; // // node Image[1]: x = 188, y = 445, inputs = 49, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [0.466889 0.863877 0.166499] // input[6]: defaulting = 0, visible = 0, type = 8, value = [0.466889 0.863877 4.74189] // input[7]: defaulting = 0, visible = 0, type = 5, value = 1.01623 // input[8]: defaulting = 0, visible = 0, type = 1, value = 1266 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.557267 // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0] // input[11]: defaulting = 1, visible = 0, type = 5, value = 12.6739 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 1, visible = 0, type = 32, value = "none" // input[16]: defaulting = 1, visible = 0, type = 32, value = "none" // input[17]: defaulting = 1, visible = 0, type = 1, value = 1 // input[18]: defaulting = 1, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 1, value = 0 // input[22]: defaulting = 0, visible = 0, type = 32, value = "snow" // input[25]: defaulting = 0, visible = 0, type = 32, value = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/doping.tif" // input[26]: defaulting = 0, visible = 0, type = 32, value = "tiff" // input[29]: defaulting = 0, visible = 0, type = 3, value = 1 // input[31]: defaulting = 0, visible = 0, type = 1, value = -5 // input[33]: defaulting = 0, visible = 0, type = 3, value = 1 // input[34]: defaulting = 0, visible = 0, type = 3, value = 0 // input[36]: defaulting = 0, visible = 0, type = 3, value = 1 // input[37]: defaulting = 0, visible = 0, type = 16777248, value = {"clear", "black", "blue", "blue"} // input[38]: defaulting = 0, visible = 0, type = 16777248, value = {"background", "grid", "ticks", "labels"} // input[39]: defaulting = 0, visible = 0, type = 5, value = 0.65 // input[40]: defaulting = 0, visible = 0, type = 32, value = "roman_d" // input[41]: defaulting = 0, visible = 0, type = 32, value = "panzoom" // depth: value = 24 // window: position = (0.0000,0.0288), size = 1.0000x0.9375 // internal caching: 1 // main_Image_1_out_1, main_Image_1_out_2, main_Image_1_out_3 = Image( main_Image_1_in_1, main_Collect_1_out_1, main_Image_1_in_3, main_Image_1_in_4, main_Image_1_in_5, main_Image_1_in_6, main_Image_1_in_7, main_Image_1_in_8, main_Image_1_in_9, main_Image_1_in_10, main_Image_1_in_11, main_Image_1_in_12, main_Image_1_in_13, main_Image_1_in_14, main_Image_1_in_15, main_Image_1_in_16, main_Image_1_in_17, main_Image_1_in_18, main_Image_1_in_19, main_Image_1_in_20, main_Image_1_in_21, main_Image_1_in_22, main_Image_1_in_23, main_Image_1_in_24, main_Image_1_in_25, main_Image_1_in_26, main_Image_1_in_27, main_Image_1_in_28, main_Image_1_in_29, main_Image_1_in_30, main_Image_1_in_31, main_Image_1_in_32, main_Image_1_in_33, main_Image_1_in_34, main_Image_1_in_35, main_Image_1_in_36, main_Image_1_in_37, main_Image_1_in_38, main_Image_1_in_39, main_Image_1_in_40, main_Image_1_in_41, main_Image_1_in_42, main_Image_1_in_43, main_Image_1_in_44, main_Image_1_in_45, main_Image_1_in_46, main_Image_1_in_47, main_Image_1_in_48, main_Image_1_in_49 ) [instance: 1, cache: 1]; // network: end of macro body CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2); } main_FileSelector_1_out_1 = "__FILE__DX__"; main_Import_1_in_2 = NULL; main_Import_1_in_3 = NULL; main_Import_1_in_4 = NULL; main_Import_1_in_5 = NULL; main_Import_1_in_6 = NULL; main_Import_1_out_1 = NULL; main_RubberSheet_1_in_2 = NULL; main_RubberSheet_1_in_3 = NULL; main_RubberSheet_1_in_4 = NULL; main_RubberSheet_1_out_1 = NULL; main_AutoColor_1_in_2 = NULL; main_AutoColor_1_in_3 = NULL; main_AutoColor_1_in_4 = NULL; main_AutoColor_1_in_5 = NULL; main_AutoColor_1_in_6 = NULL; main_AutoColor_1_in_7 = NULL; main_AutoColor_1_in_8 = NULL; main_AutoColor_1_in_9 = NULL; main_AutoColor_1_in_10 = NULL; main_AutoColor_1_out_1 = NULL; main_AutoColor_1_out_2 = NULL; main_ShowConnections_1_out_1 = NULL; main_Color_1_in_2 = "black"; main_Color_1_in_3 = .5; main_Color_1_in_4 = NULL; main_Color_1_in_5 = NULL; main_Color_1_out_1 = NULL; main_ColorBar_1_in_2 = NULL; main_ColorBar_1_in_3 = NULL; main_ColorBar_1_in_4 = NULL; main_ColorBar_1_in_5 = NULL; main_ColorBar_1_in_6 = NULL; main_ColorBar_1_in_7 = NULL; main_ColorBar_1_in_8 = NULL; main_ColorBar_1_in_9 = {"black"}; main_ColorBar_1_in_10 = NULL; main_ColorBar_1_in_11 = NULL; main_ColorBar_1_in_12 = NULL; main_ColorBar_1_in_13 = NULL; main_ColorBar_1_in_14 = NULL; main_ColorBar_1_in_15 = NULL; main_ColorBar_1_in_16 = NULL; main_ColorBar_1_out_1 = NULL; main_Collect_1_out_1 = NULL; macro Image( id, object, where, useVector, to, from, width, resolution, aspect, up, viewAngle, perspective, options, buttonState = 1, buttonUpApprox = "none", buttonDownApprox = "none", buttonUpDensity = 1, buttonDownDensity = 1, renderMode = 0, defaultCamera, reset, backgroundColor, throttle, RECenable = 0, RECfile, RECformat, RECresolution, RECaspect, AAenable = 0, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, webOptions) -> ( object, camera, where) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, interactionMode, title, renderMode, buttonUpApprox, buttonDownApprox, buttonUpDensity, buttonDownDensity) [instance: 1, cache: 1]; autoCamera = AutoCamera( object, "front", object, resolution, aspect, [0,1,0], perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; realCamera = Camera( to, from, width, resolution, aspect, up, perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; coloredDefaultCamera = UpdateCamera(defaultCamera, background=backgroundColor) [instance: 1, cache: 1]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, coloredDefaultCamera, autoCamera) [instance: 1, cache: 1]; resetNull = Inquire( reset, "is null + 1") [instance: 2, cache: 1]; reset = Switch( resetNull, reset, 0) [instance: 2, cache: 1]; whichCamera = Compute( "($0 != 0 || $1 == 0) ? 1 : 2", reset, useVector) [instance: 1, cache: 1]; camera = Switch( whichCamera, resetCamera, realCamera) [instance: 3, cache: 1]; AAobject = AutoAxes( object, camera, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) [instance: 1, cache: 1]; switchAAenable = Compute("$0+1", AAenable) [instance: 2, cache: 1]; object = Switch( switchAAenable, object, AAobject) [instance:4, cache: 1]; SWapproximation_options = Switch( buttonState, buttonUpApprox, buttonDownApprox) [instance: 5, cache: 1]; SWdensity_options = Switch( buttonState, buttonUpDensity, buttonDownDensity) [instance: 6, cache: 1]; HWapproximation_options = Format( "%s,%s", buttonDownApprox, buttonUpApprox) [instance: 1, cache: 1]; HWdensity_options = Format( "%d,%d", buttonDownDensity, buttonUpDensity) [instance: 2, cache: 1]; switchRenderMode = Compute( "$0+1", renderMode) [instance: 3, cache: 1]; approximation_options = Switch( switchRenderMode, SWapproximation_options, HWapproximation_options) [instance: 7, cache: 1]; density_options = Switch( switchRenderMode, SWdensity_options, HWdensity_options) [instance: 8, cache: 1]; renderModeString = Switch( switchRenderMode, "software", "hardware")[instance: 9, cache: 1]; object_tag = Inquire( object, "object tag")[instance: 3, cache: 1]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "object tag", object_tag, "ddcamera", whichCamera, "rendering approximation", approximation_options, "render every", density_options, "button state", buttonState, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 4, cache: 1]; ImageResolution = Inquire( camera, "camera resolution") [instance: 5, cache: 1]; RECresolution = Switch( RECresNull, RECresolution, ImageResolution) [instance: 10, cache: 1]; RECaspectNull = Inquire( RECaspect, "is null + 1") [instance: 6, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 7, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4", RECenable, switchRenderMode, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object); Display( NoRECobject, camera, where, throttle) [instance: 1, cache: 1]; image = Render( RECNoRerenderObject, camera) [instance: 1, cache: 1]; Display( image, NULL, where, throttle) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 1, cache: 1]; rec_where = Display( RECNoRerHW, camera, where, throttle) [instance: 1, cache: 0]; rec_image = ReadImageWindow( rec_where) [instance: 1, cache: 1]; WriteImage( rec_image, RECfile, RECformat) [instance: 1, cache: 1]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 2, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 1, cache: 1]; RECRerenderObject = ScaleScreen( RECRerenderObject, NULL, RECresolution, camera) [instance: 1, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_1_in_1 = "Image_1"; main_Image_1_in_3 = "X24,,"; main_Image_1_in_4 = 1; main_Image_1_in_5 = [0.466889 0.863877 0.166499]; main_Image_1_in_6 = [0.466889 0.863877 4.74189]; main_Image_1_in_7 = 1.01623; main_Image_1_in_8 = 1266; main_Image_1_in_9 = 0.557267; main_Image_1_in_10 = [0 1 0]; main_Image_1_in_11 = NULL; main_Image_1_in_12 = 0; main_Image_1_in_13 = NULL; main_Image_1_in_14 = 1; main_Image_1_in_15 = NULL; main_Image_1_in_16 = NULL; main_Image_1_in_17 = NULL; main_Image_1_in_18 = NULL; main_Image_1_in_19 = 0; main_Image_1_in_20 = NULL; main_Image_1_in_21 = NULL; main_Image_1_in_22 = "snow"; main_Image_1_in_23 = NULL; main_Image_1_in_25 = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/doping.tif"; main_Image_1_in_26 = "tiff"; main_Image_1_in_27 = NULL; main_Image_1_in_28 = NULL; main_Image_1_in_29 = 1; main_Image_1_in_30 = NULL; main_Image_1_in_31 = -5; main_Image_1_in_32 = NULL; main_Image_1_in_33 = 1; main_Image_1_in_34 = 0; main_Image_1_in_35 = NULL; main_Image_1_in_36 = 1; main_Image_1_in_37 = {"clear", "black", "blue", "blue"}; main_Image_1_in_38 = {"background", "grid", "ticks", "labels"}; main_Image_1_in_39 = 0.65; main_Image_1_in_40 = "roman_d"; main_Image_1_in_41 = "panzoom"; main_Image_1_in_42 = NULL; main_Image_1_in_43 = NULL; main_Image_1_in_44 = NULL; main_Image_1_in_45 = NULL; main_Image_1_in_46 = NULL; main_Image_1_in_47 = NULL; main_Image_1_in_48 = NULL; main_Image_1_in_49 = NULL; Executive("product version 4 3 2"); $sync main(); secs2d-0.0.8/inst/Utilities/Umsh2pdetool.m0000644000175000017500000000253711201030277016203 0ustar shshfunction msh=Umsh2pdetool(filename); ## ## ## loadgmshmesh(filename); ## ## awk_command = "BEGIN { filename = ARGV[1] ; gsub(/\\./,""_"",filename) }\n\ \n\ /\\$NOD/,/\\$ENDNOD/ { \n\ if ( FNR>2 ) \n\ { \n\ if($0 ~ /^[^\\$]/ ) \n\ {\n\ print ""p ( "" $1 "" ,:) = ["" $2 "" "" $3""];"" > filename ""_p.m"" \n\ }\n\ } \n\ } \n\ \n\ /\\$ELM/,/\\$ENDNELM/ { \n\ if ( $1 ~ /\\$ELM/ )\n\ {\n\ gsub(/\\$ELM/,""t=["")\n\ print > filename ""_t.m""\n\ gsub(/t=\\[/,""e=["")\n\ print > filename ""_e.m""\n\ \n\ } else if ($1 ~ /\\$ENDELM/ ){\n\ gsub(/\\$ENDELM/,""];"")\n\ print > filename ""_t.m""\n\ print > filename ""_e.m""\n\ }\n\ else if ( $2 == ""2"" )\n\ {\n\ print ( $6 "" "" $7 "" "" $8 "" "" $4) > filename ""_t.m"" \n\ }\n\ else if ( $2 == ""1"" )\n\ {\n\ print ( $6 "" "" $7 "" 0 0 "" $4 "" 0 0"") > filename ""_e.m"" \n\ }\n\ else if ( $2 == ""9"" )\n\ {\n\ print ( $6 "" "" $7 "" "" $8 "" "" $9 "" "" $10 "" "" $11 "" "" \ $4) > filename ""_t.m"" \n\ }\n\ else if ( $2 == ""8"" )\n\ {\n\ print ( $6 "" "" $7 "" "" $8 "" 0 "" $4) > filename ""_e.m"" \n\ }\n\ }\n\ \n\ { }" system(["awk '" awk_command "' " filename ".msh"]); eval([ filename "_msh_p"]); eval([ filename "_msh_e"]); eval([ filename "_msh_t"]); msh=struct("p",p',"t",t',"e",e');secs2d-0.0.8/inst/Utilities/Udriftdepmob.m0000644000175000017500000000231611201030277016235 0ustar shshfunction mob = Udriftdepmob(imesh,u0,F,V,vsat,b) % mob = Ufielddepmob(imesh,u0,F,vsat,b) % Computes field dependent mobility % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . [Ex,Ey]= Updegrad(imesh,-V); [Fx,Fy]= Updegrad(imesh,F); fnmod = sqrt(Fx.^2+Fy.^2); ef = abs(Fx.*Ex+Fy.*Ey)./fnmod; if Ucolumns(ef)>Urows(ef) ef=ef'; end mob = u0 ./ (1+(u0 .* ef ./ vsat).^b).^(1/b); secs2d-0.0.8/inst/Utilities/Ufvsgcurrent.m0000644000175000017500000000470311201030277016310 0ustar shshfunction [jx,jy]=Ufvsgcurrent(omesh,n,psi,psith,coeffe); % [jx,jy]=Udrawcurrent(omesh,n,psi,psith,coeffe); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Nelem = size(omesh.t,2); jx = NaN*ones(Nelem,1); jy = jx; for iel=1:Nelem K = sum(omesh.wjacdet(:,iel)); dpsi1 = psi(omesh.t(3,iel))-psi(omesh.t(2,iel)); dvth1 = psith(omesh.t(3,iel))-psith(omesh.t(2,iel)); vthm1 = Utemplogm(psith(omesh.t(3,iel)),psith(omesh.t(2,iel))); [bp,bn] = Ubern((dpsi1-dvth1)/vthm1); t1 = omesh.p(:,omesh.t(3,iel))-omesh.p(:,omesh.t(2,iel)); l1 = norm(t1,2); t1 = t1/l1; j1 = vthm1*(coeffe(iel)/l1) * ( n(omesh.t(3,iel)) * bp - ... n(omesh.t(2,iel)) * bn) * t1; gg1= omesh.shg(:,2,iel)'*omesh.shg(:,3,iel)*l1^2; dpsi2 = psi(omesh.t(1,iel))-psi(omesh.t(3,iel)); dvth2 = psith(omesh.t(1,iel))-psith(omesh.t(3,iel)); vthm2 = Utemplogm(psith(omesh.t(1,iel)),psith(omesh.t(3,iel))); [bp,bn] = Ubern((dpsi2-dvth2)/vthm2); t2 = omesh.p(:,omesh.t(1,iel))-omesh.p(:,omesh.t(3,iel)); l2 = norm(t2,2); t2 = t2/l2; j2 = vthm2*(coeffe(iel)/l2) * ( n(omesh.t(1,iel)) * bp - ... n(omesh.t(3,iel)) * bn) * t2; gg2= omesh.shg(:,1,iel)'*omesh.shg(:,3,iel)*l2^2; dpsi3 = psi(omesh.t(2,iel))-psi(omesh.t(1,iel)); dvth3 = psith(omesh.t(2,iel))-psith(omesh.t(1,iel)); vthm3 = Utemplogm(psith(omesh.t(2,iel)),psith(omesh.t(1,iel))); [bp,bn] = Ubern((dpsi3-dvth3)/vthm3); t3 = omesh.p(:,omesh.t(2,iel))-omesh.p(:,omesh.t(1,iel)); l3 = norm(t3,2); t3 = t3/l3; j3 = vthm3*(coeffe(iel)/l3) * ( n(omesh.t(2,iel)) * bp - ... n(omesh.t(1,iel)) * bn) * t3; gg3= omesh.shg(:,2,iel)'*omesh.shg(:,1,iel)*l3^2; Jk = j1*gg1+j2*gg2+j3*gg3; jx(iel) = Jk(1); jy(iel) = Jk(2); endsecs2d-0.0.8/inst/Utilities/Ufvsgcurrent2.m0000644000175000017500000000640511201030277016373 0ustar shshfunction [jx,jy]=Ufvsgcurrent2(omesh,n,psi,psith,coeffe); %% [jx,jy]=Udrawcurrent2(omesh,n,psi,psith,coeffe); %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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. %% %% Youx should have received a copy of the GNU General Public License %% along with SECS2D; If not, see . Nelem = size(omesh.t,2); jx = NaN*ones(Nelem,1); jy = jx; coeffe = coeffe'; %%for iel=1:Nelem dpsi1 = (psi(omesh.t(3,:))-psi(omesh.t(2,:)))'; dvth1 = (psith(omesh.t(3,:))-psith(omesh.t(2,:)))'; vthm1 = Utemplogm(psith(omesh.t(3,:)),psith(omesh.t(2,:)))'; [bp,bn] = Ubern((dpsi1-dvth1)./vthm1); t1x = omesh.p(1,omesh.t(3,:))-omesh.p(1,omesh.t(2,:)); t1y = omesh.p(2,omesh.t(3,:))-omesh.p(2,omesh.t(2,:)); l1 = sqrt(t1x.^2+t1y.^2); t1x = t1x./l1; t1y = t1y./l1; j1x = vthm1.*(coeffe./l1) .* ( n(omesh.t(3,:))' .* bp - ... n(omesh.t(2,:))' .* bn) .* t1x; j1y = vthm1.*(coeffe./l1) .* ( n(omesh.t(3,:))' .* bp - ... n(omesh.t(2,:))' .* bn) .* t1y; gg1= -reshape(omesh.shg(1,2,:).*omesh.shg(1,3,:)+... omesh.shg(2,2,:).*omesh.shg(2,3,:),1,[]).*l1.^2; dpsi2 = (psi(omesh.t(1,:))-psi(omesh.t(3,:)))'; dvth2 = (psith(omesh.t(1,:))-psith(omesh.t(3,:)))'; vthm2 = Utemplogm(psith(omesh.t(1,:)),psith(omesh.t(3,:)))'; [bp,bn] = Ubern((dpsi2-dvth2)./vthm2); t2x = omesh.p(1,omesh.t(1,:))-omesh.p(1,omesh.t(3,:)); t2y = omesh.p(2,omesh.t(1,:))-omesh.p(2,omesh.t(3,:)); l2 = sqrt(t2x.^2+t2y.^2); t2x = t2x./l2; t2y = t2y./l2; j2x = vthm2.*(coeffe./l2) .* ( n(omesh.t(1,:))' .* bp - ... n(omesh.t(3,:))' .* bn) .* t2x; j2y = vthm2.*(coeffe./l2) .* ( n(omesh.t(1,:))' .* bp - ... n(omesh.t(3,:))' .* bn) .* t2y; gg2= -reshape(omesh.shg(1,1,:).*omesh.shg(1,3,:)+... omesh.shg(2,1,:).*omesh.shg(2,3,:),1,[]).*l2.^2; dpsi3 = (psi(omesh.t(2,:))-psi(omesh.t(1,:)))'; dvth3 = (psith(omesh.t(2,:))-psith(omesh.t(1,:)))'; vthm3 = Utemplogm(psith(omesh.t(2,:)),psith(omesh.t(1,:)))'; [bp,bn] = Ubern((dpsi3-dvth3)./vthm3); t3x = omesh.p(1,omesh.t(2,:))-omesh.p(1,omesh.t(1,:)); t3y = omesh.p(2,omesh.t(2,:))-omesh.p(2,omesh.t(1,:)); l3 = sqrt(t3x.^2+t3y.^2); t3x = t3x./l3; t3y = t3y./l3; j3x = vthm3.*(coeffe./l3) .* ( n(omesh.t(2,:))' .* bp - ... n(omesh.t(1,:))' .* bn) .* t3x; j3y = vthm3.*(coeffe./l3) .* ( n(omesh.t(2,:))' .* bp - ... n(omesh.t(1,:))' .* bn) .* t3y; gg3= -reshape(omesh.shg(1,2,:).*omesh.shg(1,1,:)+... omesh.shg(2,2,:).*omesh.shg(2,1,:),1,[]).*l3.^2; jx = j1x.*gg1+j2x.*gg2+j3x.*gg3; jy = j1y.*gg1+j2y.*gg2+j3y.*gg3; %%end secs2d-0.0.8/inst/Utilities/Urows.m0000644000175000017500000000165111201030277014731 0ustar shshfunction r=Urows(m) % % function r=rows(m) % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . s = size(m); r = s(1); secs2d-0.0.8/inst/Utilities/Ufielddepmob.m0000644000175000017500000000223411201030277016207 0ustar shshfunction mob = Ufielddepmob(imesh,u0,F,vsat,b) % mob = Ufielddepmob(imesh,u0,F,vsat,b) % Computes field dependent mobility % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . [Ex,Ey]=Updegrad(imesh,F); ef = sqrt(Ex.^2+Ey.^2); if Ucolumns(ef)>Urows(ef) ef=ef'; end if Ucolumns(u0)>Urows(u0) u0=u0'; end mob = u0 ./ (1+(u0 .* ef ./ vsat).^b).^(1/b); secs2d-0.0.8/inst/Utilities/Ujoinmeshes.m0000644000175000017500000000660311201030277016105 0ustar shshfunction mesh=Ujoinmeshes(mesh1,mesh2,s1,s2) % mesh=Ujoinmeshes(mesh1,mesh2,side1,side2) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . % make sure that the outside world is always % on the same side of the boundary of mesh1 [mesh1.e(6:7,:),I] = sort(mesh1.e(6:7,:)); for ic=1:size(mesh1.e,2) mesh1.e(1:2,ic) = mesh1.e(I(:,ic),ic); end intnodes1=[]; intnodes2=[]; j1=[];j2=[]; for is=1:length(s1) side1 = s1(is);side2 = s2(is); [i,j] = find(mesh1.e(5,:)==side1); j1=[j1 j]; [i,j] = find(mesh2.e(5,:)==side2); oldregion(side1) = max(max(mesh2.e(6:7,j))); j2=[j2 j]; end intnodes1=[mesh1.e(1,j1),mesh1.e(2,j1)]; intnodes2=[mesh2.e(1,j2),mesh2.e(2,j2)]; intnodes1 = unique(intnodes1); [tmp,I] = sort(mesh1.p(1,intnodes1)); intnodes1 = intnodes1(I); [tmp,I] = sort(mesh1.p(2,intnodes1)); intnodes1 = intnodes1(I); intnodes2 = unique(intnodes2); [tmp,I] = sort(mesh2.p(1,intnodes2)); intnodes2 = intnodes2(I); [tmp,I] = sort(mesh2.p(2,intnodes2)); intnodes2 = intnodes2(I); % delete redundant edges mesh2.e(:,j2) = []; % change edge numbers indici=[];consecutivi=[]; indici = unique(mesh2.e(5,:)); consecutivi (indici) = [1:length(indici)]+max(mesh1.e(5,:)); mesh2.e(5,:)=consecutivi(mesh2.e(5,:)); % change node indices in connectivity matrix % and edge list indici=[];consecutivi=[]; indici = 1:size(mesh2.p,2); offint = setdiff(indici,intnodes2); consecutivi (offint) = [1:length(offint)]+size(mesh1.p,2); consecutivi (intnodes2) = intnodes1; mesh2.e(1:2,:)=consecutivi(mesh2.e(1:2,:)); mesh2.t(1:3,:)=consecutivi(mesh2.t(1:3,:)); % delete redundant points mesh2.p(:,intnodes2) = []; % set region numbers regions = unique(mesh1.t(4,:)); newregions(regions) = 1:length(regions); mesh1.t(4,:) = newregions(mesh1.t(4,:)); % set region numbers regions = unique(mesh2.t(4,:)); newregions(regions) = [1:length(regions)]+max(mesh1.t(4,:)); mesh2.t(4,:) = newregions(mesh2.t(4,:)); % set adjacent region numbers in edge structure 2 [i,j] = find(mesh2.e(6:7,:)); i = i+5; mesh2.e(i,j) = newregions(mesh2.e(i,j)); % set adjacent region numbers in edge structure 1 mesh1.e(6,j1) = newregions(oldregion(mesh1.e(5,j1))); % make the new p structure mesh.p = [mesh1.p mesh2.p]; mesh.e = [mesh1.e mesh2.e]; mesh.t = [mesh1.t mesh2.t]; % % %double check to avoid degenerate triangles % [p,ii,jj]=unique(mesh.p(1:2,:)','rows'); % mesh.p =p'; % mesh.e(1:2,:)=jj(mesh.e(1:2,:)); % mesh.t(1:3,:)=jj(mesh.t(1:3,:)); % % [ii,jj] = find (mesh.e(1,:)==mesh.e(2,:)); % mesh.e(:,jj) = []; % [ii,jj] = find ((mesh.t(1,:)==mesh.t(2,:))|(mesh.t(1,:)==mesh.t(3,:))|(mesh.t(3,:)==mesh.t(2,:))); % mesh.t(:,jj) = []; secs2d-0.0.8/inst/Utilities/Ustructmesh_right.m0000644000175000017500000000336611201030277017342 0ustar shshfunction [p,e,t]=Ustructmesh_right(x,y,region,sides) % [p,e,t]=Ustructmesh(x,y,region,sides) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . x = sort(x); y = sort(y); nx = length(x); ny = length(y); [XX,YY] = meshgrid(x,y); p = [XX(:),YY(:)]'; iiv (ny,nx)=0; iiv(:)=1:nx*ny; iiv(end,:)=[]; iiv(:,end)=[]; iiv=iiv(:)'; t = [[iiv;iiv+ny;iiv+ny+1],[iiv;iiv+ny+1;iiv+1] ]; t (4,:)=region; l1 = 1+ny*([1:nx]-1); l4 = 1:ny; l2 = ny*(nx-1)+1:nx*ny; l3 = ny + l1 -1; e = [ l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1]) l1([2:end]) l2([2:end]) l3([2:end]) l4([2:end]) [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 l1([1:end-1])*0+sides(1) l2([1:end-1])*0+sides(2) l3([1:end-1])*0+sides(3) l4([1:end-1])*0+sides(4) [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0 [l1([1:end-1]) l2([1:end-1]) l3([1:end-1]) l4([1:end-1])]*0+region ]; secs2d-0.0.8/inst/Utilities/Ucomplap.m0000644000175000017500000000327711201030277015400 0ustar shshfunction L = Ucomplap (mesh,coeff) % L = Ufastcomplap (mesh,coeff) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Nnodes = length(mesh.p); Nelements = length(mesh.t); %%fprintf(1,'*--------------------*\n'); %%fprintf(1,'building Stiffness Matrix\n*'); areak = reshape(sum( mesh.wjacdet,1),1,1,Nelements); shg = mesh.shg(:,:,:); M = reshape(coeff,1,1,Nelements); % build local matrix Lloc=zeros(3,3,Nelements); for inode=1:3 for jnode=1:3 Lloc(inode,jnode,:) = M .* sum( shg(:,inode,:) .* shg(:,jnode,:),1) .* areak; %%fprintf(1,'-'); ginode(inode,jnode,:)=mesh.t(inode,:); gjnode(inode,jnode,:)=mesh.t(jnode,:); %%fprintf(1,'-'); end end L = sparse(ginode(:),gjnode(:),Lloc(:)); %%fprintf(1,'--*\nDONE!\n\n\n'); secs2d-0.0.8/inst/Utilities/Udrawedge.m0000644000175000017500000000313111201030277015514 0ustar shshfunction Udrawedge(mesh); # Udrawedge(mesh); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . dataname = mktemp("/tmp",".dx") scriptname = mktemp("/tmp",".net"); UDXoutput2Ddata(dataname,mesh.p,mesh.t,mesh.p(1,:)','u',0,1,1); showmesh = file_in_path(path,"Ushowgrid.net"); system (["cp " showmesh " " scriptname ]); system (["sed -i \'s|__FILE__DX__|" dataname "|g\' " scriptname]); command = ["dx -program " scriptname " -execute -image >& /dev/null &"]; system(command); endfunction function filename = mktemp (direct,ext); if (~exist(direct,"dir")) error("trying to save temporary file to non existing directory") end done=false; while ~done filename = [direct,"/SECS2D.",num2str(floor(rand*1e7)),ext]; if ~exist(filename,"file") done =true; end end endfunctionsecs2d-0.0.8/inst/Utilities/Uscharfettergummel.m0000644000175000017500000000000011201030277017443 0ustar shshsecs2d-0.0.8/inst/Utilities/UDXoutput2Dtimeseries.m0000644000175000017500000000371211201030277020013 0ustar shshfunction UDXoutput2Dtimeseries(filename,p,t,u,attr_name,attr_rank,attr_shape,time) ## ## UDXoutput2Dtimeseries(filename,p,t,u,attr_name,attr_rank,attr_shape,time) ## ## Outputs data in DX form. ## Only one variable can be written to the file ## variable must be a scalar, vector or tensor of doubles ## ## attr_name = name of the variable (type string) ## attr_rank = rank of variable data (0 for scalar, 1 for vector, etc.) ## attr_shape = number of components of variable data (assumed 1 for scalar) ## % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Nsteps = length(time); if (Nsteps<=1) endfile = 1; else endfile = 0; end UDXoutput2Ddata(filename,p,t,u(:,1:attr_shape),[attr_name "1"],attr_rank,attr_shape,endfile); for it = 2:Nsteps UDXappend2Ddata(filename,p,t,u(:,[1:attr_shape]+attr_shape*(it-1)),... [attr_name num2str(it)],attr_rank,attr_shape,endfile); end fid=fopen(filename,"a"); fprintf (fid, "object \"%s_series\" class series\n",attr_name); for it = 1:Nsteps fprintf (fid,"member %d position %g value \"%s\"\n",it-1,time(it),[attr_name num2str(it)]); end fprintf (fid, "\nend\n"); fclose(fid);secs2d-0.0.8/inst/Utilities/Ustructmesh.m0000644000175000017500000000217711201030277016144 0ustar shshfunction [p,e,t]=Ustructmesh(x,y,region,sides,varargin) % [p,e,t]=Ustructmesh(x,y,region,sides,varargin) % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . defaultoption = 'right'; if length(varargin)==0 theoption = defaultoption; else theoption = varargin{1}; end [p,e,t]=feval(['Ustructmesh_' theoption],x,y,region,sides); secs2d-0.0.8/inst/Utilities/Udescaling.m0000644000175000017500000000530411201030277015667 0ustar shshfunction [odata,omesh] = Udescaling(imesh,idata); % [odata,omesh] = Udescaling(imesh,idata); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . load (file_in_path(path,'constants.mat')); omesh = imesh; odata = idata; % scaling factors % odata.xs = max(abs([max(imesh.p(1,:))-min(imesh.p(1,:)),max(imesh.p(2,:))-min(imesh.p(2,:))])); % odata.Vs = Vth; % odata.ns = norm(idata.D,inf); % odata.us = un; % adimensional constants % odata.etan2 = hbar^2 / (2*mndos*odata.xs^2*q); % odata.etap2 = hbar^2 / (2*mpdos*odata.xs^2*q); % odata.beta = Vth/odata.Vs; % odata.dn2 = hbar^2 / (6*mndos*odata.xs^2*q*odata.Vs); % odata.dp2 = hbar^2 / (6*mpdos*odata.xs^2*q*odata.Vs); % odata.l2 = (odata.Vs*esi) / (odata.ns*odata.xs^2*q); % odata.un = un/odata.us; % odata.up = up/odata.us; % scaled quantities odata.D = idata.D*odata.ns; odata.n = idata.n*odata.ns; odata.p = idata.p*odata.ns; odata.Fn = (idata.Fn+log(ni/odata.ns))*odata.Vs; odata.Fp = (idata.Fp-log(ni/odata.ns))*odata.Vs; odata.V = idata.V*odata.Vs; if (isfield(idata,'G')) odata.G = idata.G*odata.Vs; end if (isfield(idata,'dt')) odata.dt = idata.dt*odata.ts; end if (isfield(idata,'un')) odata.un = idata.un*odata.us; else odata.un = un; end if (isfield(idata,'n0')) odata.n0 = idata.n0*odata.ns; odata.p0 = idata.p0*odata.ns; else odata.p0 = ni; odata.n0 = ni; end if (isfield(idata,'up')) odata.up = idata.up*odata.us; else odata.up = up; end if (isfield(idata,'FDn')) odata.FDn = idata.FDn*odata.Vs; end if (isfield(idata,'FDp')) odata.FDp = idata.FDp*odata.Vs; end if (isfield(idata,'Tl')) odata.Tl = idata.Tl*odata.Ts; end if (isfield(idata,'Tn')) odata.Tn = idata.Tn*odata.Ts; end if (isfield(idata,'Tp')) odata.Tp = idata.Tp*odata.Ts; end omesh.p = imesh.p*odata.xs; secs2d-0.0.8/inst/Utilities/UDXappend2Ddata.m0000644000175000017500000000331311201030277016457 0ustar shshfunction UDXappend2Ddata(filename,p,t,u,attr_name,attr_rank,attr_shape,endfile) % % UDXappend2Ddata(filename,p,t,u,attr_name,attr_rank,attr_shape) % % Apends data to a file in DX form. % Only one variable can be written to the file % variable must be a scalar, vector or tensor of doubles % mesh data in the file must be consistent with this variable % % x % attr_name = name of the variable (type string) % attr_rank = rank of variable data (0 for scalar, 1 for vector, etc.) % attr_shape = number of components of variable data (assumed 1 for scalar) % p = p'; t = t'; t = t(:,1:3); %eval(['!rm -f ',filename]); fid=fopen (filename,'a'); Nnodi = size(p,1); Ntriangoli = size(t,1); fprintf(fid,'\nattribute "element type" string "triangles"\nattribute "ref" string "positions"\n\n'); if ((attr_rank==0) & (min(size(u))==1)) fprintf(fid,'object "%s.data"\nclass array type double rank 0 items %d data follows',attr_name,Nnodi); fprintf(fid,'\n %1.7e',u); else fprintf(fid,'object "%s.data"\nclass array type double rank %d shape %d items %d data follows', ... attr_name,attr_rank,attr_shape,Nnodi); for i=1:Nnodi fprintf(fid,'\n'); fprintf(fid,' %1.7e',u(i,:)); end end fprintf(fid,['\nattribute "dep" string "positions"\n\n' ... 'object "%s" class field\n'... 'component "positions" value "pos"\n'... 'component "connections" value "con"\n'... 'component "data" value "%s.data"\n'],... attr_name,attr_name); if(endfile) fprintf(fid,'\nend\n'); end fclose (fid); % Last Revision: % $Author: cdf $ % $Date: 2007-05-22 21:16:23 +0200 (tir, 22 maj 2007) $ secs2d-0.0.8/inst/Utilities/Uscharfettergummel2.m0000644000175000017500000000553411201030277017546 0ustar shshfunction SG=Uscharfettergummel2(mesh,v,acoeff,bcoeff) % % SG=Ufastscharfettergummel2(mesh,v,acoeff,bcoeff) % % % Builds the Scharfetter-Gummel matrix for the % the discretization of the LHS % of the Drift-Diffusion equation: % % $ -\div (a(x) (\grad (b(x) u) - b(x) u \grad v'(x) ))= f $ % % where a(x) is piecewise constant % and v(x),b(x) is piecewise linear, so that % v'(x) is still piecewise constant % and u is the unknown % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Nnodes = length(mesh.p); Nelements = length(mesh.t); areak = reshape (sum( mesh.wjacdet,1),1,1,Nelements); shg = mesh.shg(:,:,:); M = reshape (acoeff,1,1,Nelements); % build local Laplacian matrix Lloc=zeros(3,3,Nelements); for inode=1:3 for jnode=1:3 ginode(inode,jnode,:)=mesh.t(inode,:); gjnode(inode,jnode,:)=mesh.t(jnode,:); Lloc(inode,jnode,:) = M .* sum( shg(:,inode,:) .* shg(:,jnode,:),1) .* areak; end end vloc = v(mesh.t(1:3,:)); bloc = bcoeff(mesh.t(1:3,:)); blocm1 = Utemplogm(bloc(3,:),bloc(2,:)); blocm2 = Utemplogm(bloc(1,:),bloc(3,:)); blocm3 = Utemplogm(bloc(1,:),bloc(2,:)); [bp12,bm12] = Ubern(((vloc(2,:)-vloc(1,:))-(bloc(2,:)-bloc(1,:)))./blocm3); [bp13,bm13] = Ubern(((vloc(3,:)-vloc(1,:))-(bloc(3,:)-bloc(1,:)))./blocm2); [bp23,bm23] = Ubern(((vloc(3,:)-vloc(2,:))-(bloc(3,:)-bloc(2,:)))./blocm1); bp12 = reshape(blocm3.*bp12,1,1,Nelements).*Lloc(1,2,:); bm12 = reshape(blocm3.*bm12,1,1,Nelements).*Lloc(1,2,:); bp13 = reshape(blocm2.*bp13,1,1,Nelements).*Lloc(1,3,:); bm13 = reshape(blocm2.*bm13,1,1,Nelements).*Lloc(1,3,:); bp23 = reshape(blocm1.*bp23,1,1,Nelements).*Lloc(2,3,:); bm23 = reshape(blocm1.*bm23,1,1,Nelements).*Lloc(2,3,:); SGloc(1,1,:) = -bm12-bm13; SGloc(1,2,:) = bp12; SGloc(1,3,:) = bp13; SGloc(2,1,:) = bm12; SGloc(2,2,:) = -bp12-bm23; SGloc(2,3,:) = bp23; SGloc(3,1,:) = bm13; SGloc(3,2,:) = bm23; SGloc(3,3,:) = -bp13-bp23; ##SGloc=[-bm12-bm13, bp12 , bp13 ## bm12 , -bp12-bm23, bp23 ## bm13 , bm23 , -bp13-bp23]; SG = sparse(ginode(:),gjnode(:),SGloc(:)); secs2d-0.0.8/inst/Utilities/URREcyclingpattern.m0000644000175000017500000000243711201030277017341 0ustar shshfunction RREpattern = URREcyclingpattern(RREnnit,RRErank,maxit); % prcomputes cycling pattern for RRE extrapolation: % % -1 = Do Nothing % 0 = extrapolate % 1..RRErank = store % % RREpattern = URREcyclingpattern(RREnnit,RRErank,toll); % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . RREpattern = zeros(RREnnit(1),1)-1; while length(RREpattern) ( ) { // // node FileSelector[1]: x = 51, y = 32, inputs = 0, label = FileSelector // output[1]: visible = 1, type = 32, value = "__FILE__DX__" // output[2]: visible = 1, type = 32, value = "__FILE__DX__" // // // node Import[1]: x = 104, y = 118, inputs = 6, label = Import // main_Import_1_out_1 = Import( main_FileSelector_1_out_1, main_Import_1_in_2, main_Import_1_in_3, main_Import_1_in_4, main_Import_1_in_5, main_Import_1_in_6 ) [instance: 1, cache: 1]; // // node ShowConnections[1]: x = 77, y = 190, inputs = 1, label = ShowConnections // main_ShowConnections_1_out_1 = ShowConnections( main_Import_1_out_1 ) [instance: 1, cache: 1]; // // node RubberSheet[1]: x = 221, y = 272, inputs = 4, label = RubberSheet // main_RubberSheet_1_out_1 = RubberSheet( main_ShowConnections_1_out_1, main_RubberSheet_1_in_2, main_RubberSheet_1_in_3, main_RubberSheet_1_in_4 ) [instance: 1, cache: 1]; // // node Color[1]: x = 106, y = 286, inputs = 5, label = Color // input[2]: defaulting = 0, visible = 1, type = 32, value = "white" // main_Color_1_out_1 = Color( main_RubberSheet_1_out_1, main_Color_1_in_2, main_Color_1_in_3, main_Color_1_in_4, main_Color_1_in_5 ) [instance: 1, cache: 1]; // // node Image[1]: x = 69, y = 401, inputs = 49, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [21 30 0] // input[6]: defaulting = 0, visible = 0, type = 8, value = [16.1231 -127.854 94.5005] // input[7]: defaulting = 0, visible = 0, type = 5, value = 98.629 // input[8]: defaulting = 0, visible = 0, type = 1, value = 640 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.751 // input[10]: defaulting = 0, visible = 0, type = 8, value = [0.0793885 0.51022 0.856372] // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0001 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 1, visible = 0, type = 32, value = "none" // input[16]: defaulting = 1, visible = 0, type = 32, value = "none" // input[17]: defaulting = 1, visible = 0, type = 1, value = 1 // input[18]: defaulting = 1, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 1, value = 0 // input[29]: defaulting = 0, visible = 0, type = 3, value = 1 // input[41]: defaulting = 0, visible = 0, type = 32, value = "rotate" // depth: value = 24 // window: position = (0.0547,0.1497), size = 0.6387x0.6836 // internal caching: 1 // main_Image_1_out_1, main_Image_1_out_2, main_Image_1_out_3 = Image( main_Image_1_in_1, main_Color_1_out_1, main_Image_1_in_3, main_Image_1_in_4, main_Image_1_in_5, main_Image_1_in_6, main_Image_1_in_7, main_Image_1_in_8, main_Image_1_in_9, main_Image_1_in_10, main_Image_1_in_11, main_Image_1_in_12, main_Image_1_in_13, main_Image_1_in_14, main_Image_1_in_15, main_Image_1_in_16, main_Image_1_in_17, main_Image_1_in_18, main_Image_1_in_19, main_Image_1_in_20, main_Image_1_in_21, main_Image_1_in_22, main_Image_1_in_23, main_Image_1_in_24, main_Image_1_in_25, main_Image_1_in_26, main_Image_1_in_27, main_Image_1_in_28, main_Image_1_in_29, main_Image_1_in_30, main_Image_1_in_31, main_Image_1_in_32, main_Image_1_in_33, main_Image_1_in_34, main_Image_1_in_35, main_Image_1_in_36, main_Image_1_in_37, main_Image_1_in_38, main_Image_1_in_39, main_Image_1_in_40, main_Image_1_in_41, main_Image_1_in_42, main_Image_1_in_43, main_Image_1_in_44, main_Image_1_in_45, main_Image_1_in_46, main_Image_1_in_47, main_Image_1_in_48, main_Image_1_in_49 ) [instance: 1, cache: 1]; // network: end of macro body CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2); } main_FileSelector_1_out_1 = "/tmp/tmp.dx"; main_Import_1_in_2 = NULL; main_Import_1_in_3 = NULL; main_Import_1_in_4 = NULL; main_Import_1_in_5 = NULL; main_Import_1_in_6 = NULL; main_Import_1_out_1 = NULL; main_ShowConnections_1_out_1 = NULL; main_RubberSheet_1_in_2 = NULL; main_RubberSheet_1_in_3 = NULL; main_RubberSheet_1_in_4 = NULL; main_RubberSheet_1_out_1 = NULL; main_Color_1_in_2 = "white"; main_Color_1_in_3 = NULL; main_Color_1_in_4 = NULL; main_Color_1_in_5 = NULL; main_Color_1_out_1 = NULL; macro Image( id, object, where, useVector, to, from, width, resolution, aspect, up, viewAngle, perspective, options, buttonState = 1, buttonUpApprox = "none", buttonDownApprox = "none", buttonUpDensity = 1, buttonDownDensity = 1, renderMode = 0, defaultCamera, reset, backgroundColor, throttle, RECenable = 0, RECfile, RECformat, RECresolution, RECaspect, AAenable = 0, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, webOptions) -> ( object, camera, where) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, interactionMode, title, renderMode, buttonUpApprox, buttonDownApprox, buttonUpDensity, buttonDownDensity) [instance: 1, cache: 1]; autoCamera = AutoCamera( object, "front", object, resolution, aspect, [0,1,0], perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; realCamera = Camera( to, from, width, resolution, aspect, up, perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; coloredDefaultCamera = UpdateCamera(defaultCamera, background=backgroundColor) [instance: 1, cache: 1]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, coloredDefaultCamera, autoCamera) [instance: 1, cache: 1]; resetNull = Inquire( reset, "is null + 1") [instance: 2, cache: 1]; reset = Switch( resetNull, reset, 0) [instance: 2, cache: 1]; whichCamera = Compute( "($0 != 0 || $1 == 0) ? 1 : 2", reset, useVector) [instance: 1, cache: 1]; camera = Switch( whichCamera, resetCamera, realCamera) [instance: 3, cache: 1]; AAobject = AutoAxes( object, camera, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) [instance: 1, cache: 1]; switchAAenable = Compute("$0+1", AAenable) [instance: 2, cache: 1]; object = Switch( switchAAenable, object, AAobject) [instance:4, cache: 1]; SWapproximation_options = Switch( buttonState, buttonUpApprox, buttonDownApprox) [instance: 5, cache: 1]; SWdensity_options = Switch( buttonState, buttonUpDensity, buttonDownDensity) [instance: 6, cache: 1]; HWapproximation_options = Format( "%s,%s", buttonDownApprox, buttonUpApprox) [instance: 1, cache: 1]; HWdensity_options = Format( "%d,%d", buttonDownDensity, buttonUpDensity) [instance: 2, cache: 1]; switchRenderMode = Compute( "$0+1", renderMode) [instance: 3, cache: 1]; approximation_options = Switch( switchRenderMode, SWapproximation_options, HWapproximation_options) [instance: 7, cache: 1]; density_options = Switch( switchRenderMode, SWdensity_options, HWdensity_options) [instance: 8, cache: 1]; renderModeString = Switch( switchRenderMode, "software", "hardware")[instance: 9, cache: 1]; object_tag = Inquire( object, "object tag")[instance: 3, cache: 1]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "object tag", object_tag, "ddcamera", whichCamera, "rendering approximation", approximation_options, "render every", density_options, "button state", buttonState, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 4, cache: 1]; ImageResolution = Inquire( camera, "camera resolution") [instance: 5, cache: 1]; RECresolution = Switch( RECresNull, RECresolution, ImageResolution) [instance: 10, cache: 1]; RECaspectNull = Inquire( RECaspect, "is null + 1") [instance: 6, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 7, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4", RECenable, switchRenderMode, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object); Display( NoRECobject, camera, where, throttle) [instance: 1, cache: 1]; image = Render( RECNoRerenderObject, camera) [instance: 1, cache: 1]; Display( image, NULL, where, throttle) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 1, cache: 1]; rec_where = Display( RECNoRerHW, camera, where, throttle) [instance: 1, cache: 0]; rec_image = ReadImageWindow( rec_where) [instance: 1, cache: 1]; WriteImage( rec_image, RECfile, RECformat) [instance: 1, cache: 1]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 2, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 1, cache: 1]; RECRerenderObject = ScaleScreen( RECRerenderObject, NULL, RECresolution, camera) [instance: 1, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_1_in_1 = "Image_1"; main_Image_1_in_3 = "X24,,"; main_Image_1_in_4 = 1; main_Image_1_in_5 = [21 30 0]; main_Image_1_in_6 = [16.1231 -127.854 94.5005]; main_Image_1_in_7 = 98.629; main_Image_1_in_8 = 640; main_Image_1_in_9 = 0.751; main_Image_1_in_10 = [0.0793885 0.51022 0.856372]; main_Image_1_in_11 = NULL; main_Image_1_in_12 = 0; main_Image_1_in_13 = NULL; main_Image_1_in_14 = 1; main_Image_1_in_15 = NULL; main_Image_1_in_16 = NULL; main_Image_1_in_17 = NULL; main_Image_1_in_18 = NULL; main_Image_1_in_19 = 0; main_Image_1_in_20 = NULL; main_Image_1_in_21 = NULL; main_Image_1_in_22 = NULL; main_Image_1_in_23 = NULL; main_Image_1_in_25 = NULL; main_Image_1_in_26 = NULL; main_Image_1_in_27 = NULL; main_Image_1_in_28 = NULL; main_Image_1_in_29 = 1; main_Image_1_in_30 = NULL; main_Image_1_in_31 = NULL; main_Image_1_in_32 = NULL; main_Image_1_in_33 = NULL; main_Image_1_in_34 = NULL; main_Image_1_in_35 = NULL; main_Image_1_in_36 = NULL; main_Image_1_in_37 = NULL; main_Image_1_in_38 = NULL; main_Image_1_in_39 = NULL; main_Image_1_in_40 = NULL; main_Image_1_in_41 = "rotate"; main_Image_1_in_42 = NULL; main_Image_1_in_43 = NULL; main_Image_1_in_44 = NULL; main_Image_1_in_45 = NULL; main_Image_1_in_46 = NULL; main_Image_1_in_47 = NULL; main_Image_1_in_48 = NULL; main_Image_1_in_49 = NULL; Executive("product version 4 3 2"); $sync main(); secs2d-0.0.8/inst/Utilities/Ucoloredrubbersheetseries.net0000644000175000017500000004503611201030277021373 0ustar shsh// // time: Sat Jun 3 23:21:55 2006 // // version: 3.2.0 (format), 4.3.2 (DX) // // // MODULE main // workspace: width = 629, height = 507 // layout: snap = 0, width = 50, height = 50, align = NN // macro main( ) -> ( ) { // // node FileSelector[1]: x = 51, y = 31, inputs = 0, label = FileSelector // output[1]: visible = 1, type = 32, value = "__FILE__DX__" // output[2]: visible = 0, type = 32, value = "__FILE__DX__" // // // node Import[1]: x = 104, y = 118, inputs = 6, label = Import // input[2]: visible = 0 // input[3]: visible = 0 // main_Import_1_out_1 = Import( main_FileSelector_1_out_1, main_Import_1_in_2, main_Import_1_in_3, main_Import_1_in_4, main_Import_1_in_5, main_Import_1_in_6 ) [instance: 1, cache: 1]; // // node AutoColor[1]: x = 285, y = 117, inputs = 10, label = AutoColor // input[7]: visible = 0 // main_AutoColor_1_out_1, main_AutoColor_1_out_2 = AutoColor( main_Import_1_out_1, main_AutoColor_1_in_2, main_AutoColor_1_in_3, main_AutoColor_1_in_4, main_AutoColor_1_in_5, main_AutoColor_1_in_6, main_AutoColor_1_in_7, main_AutoColor_1_in_8, main_AutoColor_1_in_9, main_AutoColor_1_in_10 ) [instance: 1, cache: 1]; // // node RubberSheet[1]: x = 273, y = 252, inputs = 4, label = RubberSheet // input[2]: defaulting = 1, visible = 0, type = 5, value = 1.0 // main_RubberSheet_1_out_1 = RubberSheet( main_AutoColor_1_out_1, main_RubberSheet_1_in_2, main_RubberSheet_1_in_3, main_RubberSheet_1_in_4 ) [instance: 1, cache: 1]; // // node ShowConnections[1]: x = 49, y = 232, inputs = 1, label = ShowConnections // main_ShowConnections_1_out_1 = ShowConnections( main_RubberSheet_1_out_1 ) [instance: 1, cache: 1]; // // node Color[1]: x = 72, y = 328, inputs = 5, label = Color // input[2]: defaulting = 0, visible = 0, type = 32, value = "green" // input[3]: visible = 0 // main_Color_1_out_1 = Color( main_ShowConnections_1_out_1, main_Color_1_in_2, main_Color_1_in_3, main_Color_1_in_4, main_Color_1_in_5 ) [instance: 1, cache: 1]; // // node Statistics[1]: x = 489, y = 120, inputs = 1, label = Statistics // output[1]: visible = 0 // output[2]: visible = 0 // output[3]: visible = 0 // main_Statistics_1_out_1, main_Statistics_1_out_2, main_Statistics_1_out_3, main_Statistics_1_out_4, main_Statistics_1_out_5 = Statistics( main_Import_1_out_1 ) [instance: 1, cache: 1]; // // node ColorBar[1]: x = 455, y = 296, inputs = 16, label = ColorBar // input[2]: visible = 0 // input[3]: visible = 0 // input[4]: visible = 0 // input[6]: visible = 1 // input[7]: visible = 1 // input[8]: visible = 0 // input[9]: defaulting = 0, visible = 0, type = 16777248, value = {"black"} // main_ColorBar_1_out_1 = ColorBar( main_AutoColor_1_out_2, main_ColorBar_1_in_2, main_ColorBar_1_in_3, main_ColorBar_1_in_4, main_ColorBar_1_in_5, main_Statistics_1_out_4, main_Statistics_1_out_5, main_ColorBar_1_in_8, main_ColorBar_1_in_9, main_ColorBar_1_in_10, main_ColorBar_1_in_11, main_ColorBar_1_in_12, main_ColorBar_1_in_13, main_ColorBar_1_in_14, main_ColorBar_1_in_15, main_ColorBar_1_in_16 ) [instance: 1, cache: 1]; // // node Collect[1]: x = 280, y = 393, inputs = 3, label = Collect // main_Collect_1_out_1 = Collect( main_Color_1_out_1, main_RubberSheet_1_out_1, main_ColorBar_1_out_1 ) [instance: 1, cache: 1]; // // node Format[1]: x = 545, y = 307, inputs = 3, label = Format // input[1]: defaulting = 0, visible = 1, type = 32, value = "min = %g, max = %g" // main_Format_1_out_1 = Format( main_Format_1_in_1, main_Statistics_1_out_4, main_Statistics_1_out_5 ) [instance: 1, cache: 1]; // // node Image[1]: x = 188, y = 445, inputs = 49, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [0.406504 0.5 0.060737] // input[6]: defaulting = 0, visible = 0, type = 8, value = [3.08097 2.11826 1.94289] // input[7]: defaulting = 0, visible = 0, type = 5, value = 1.95541 // input[8]: defaulting = 0, visible = 0, type = 1, value = 1010 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.669 // input[10]: defaulting = 0, visible = 0, type = 8, value = [-0.451253 -0.250437 0.856535] // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 1, visible = 0, type = 32, value = "none" // input[16]: defaulting = 1, visible = 0, type = 32, value = "none" // input[17]: defaulting = 1, visible = 0, type = 1, value = 1 // input[18]: defaulting = 1, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 3, value = 0 // input[22]: defaulting = 0, visible = 0, type = 32, value = "snow" // input[25]: defaulting = 0, visible = 0, type = 32, value = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/doping.tif" // input[26]: defaulting = 0, visible = 0, type = 32, value = "tiff" // input[29]: defaulting = 0, visible = 0, type = 3, value = 1 // input[31]: defaulting = 0, visible = 0, type = 1, value = -5 // input[33]: defaulting = 0, visible = 0, type = 3, value = 1 // input[34]: defaulting = 0, visible = 0, type = 3, value = 1 // input[36]: defaulting = 0, visible = 0, type = 3, value = 1 // input[37]: defaulting = 0, visible = 0, type = 16777248, value = {"clear", "black", "blue", "blue"} // input[38]: defaulting = 0, visible = 0, type = 16777248, value = {"background", "grid", "ticks", "labels"} // input[39]: defaulting = 0, visible = 0, type = 5, value = 0.65 // input[40]: defaulting = 0, visible = 0, type = 32, value = "roman_d" // input[41]: defaulting = 0, visible = 0, type = 32, value = "rotate" // output[1]: visible = 0 // output[2]: visible = 0 // output[3]: visible = 0 // depth: value = 24 // window: position = (0.0000,0.0286), size = 1.0000x0.9375 // internal caching: 1 // main_Image_1_out_1, main_Image_1_out_2, main_Image_1_out_3 = Image( main_Image_1_in_1, main_Collect_1_out_1, main_Image_1_in_3, main_Image_1_in_4, main_Image_1_in_5, main_Image_1_in_6, main_Image_1_in_7, main_Image_1_in_8, main_Image_1_in_9, main_Image_1_in_10, main_Image_1_in_11, main_Image_1_in_12, main_Image_1_in_13, main_Image_1_in_14, main_Image_1_in_15, main_Image_1_in_16, main_Image_1_in_17, main_Image_1_in_18, main_Image_1_in_19, main_Image_1_in_20, main_Image_1_in_21, main_Image_1_in_22, main_Image_1_in_23, main_Image_1_in_24, main_Image_1_in_25, main_Image_1_in_26, main_Image_1_in_27, main_Image_1_in_28, main_Image_1_in_29, main_Image_1_in_30, main_Image_1_in_31, main_Image_1_in_32, main_Image_1_in_33, main_Image_1_in_34, main_Image_1_in_35, main_Image_1_in_36, main_Image_1_in_37, main_Image_1_in_38, main_Image_1_in_39, main_Image_1_in_40, main_Image_1_in_41, main_Image_1_in_42, main_Image_1_in_43, main_Image_1_in_44, main_Image_1_in_45, main_Image_1_in_46, main_Image_1_in_47, main_Image_1_in_48, main_Image_1_in_49 ) [instance: 1, cache: 1]; // // node Message[1]: x = 557, y = 401, inputs = 3, label = Message // Message( main_Format_1_out_1, main_Message_1_in_2, main_Message_1_in_3 ) [instance: 1, cache: 1]; // network: end of macro body CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2); } main_FileSelector_1_out_1 = "./.tmp.dx"; main_Import_1_in_2 = NULL; main_Import_1_in_3 = NULL; main_Import_1_in_4 = NULL; main_Import_1_in_5 = NULL; main_Import_1_in_6 = NULL; main_Import_1_out_1 = NULL; main_AutoColor_1_in_2 = NULL; main_AutoColor_1_in_3 = NULL; main_AutoColor_1_in_4 = NULL; main_AutoColor_1_in_5 = NULL; main_AutoColor_1_in_6 = NULL; main_AutoColor_1_in_7 = NULL; main_AutoColor_1_in_8 = NULL; main_AutoColor_1_in_9 = NULL; main_AutoColor_1_in_10 = NULL; main_AutoColor_1_out_1 = NULL; main_AutoColor_1_out_2 = NULL; main_RubberSheet_1_in_2 = NULL; main_RubberSheet_1_in_3 = NULL; main_RubberSheet_1_in_4 = NULL; main_RubberSheet_1_out_1 = NULL; main_ShowConnections_1_out_1 = NULL; main_Color_1_in_2 = "green"; main_Color_1_in_3 = NULL; main_Color_1_in_4 = NULL; main_Color_1_in_5 = NULL; main_Color_1_out_1 = NULL; main_Statistics_1_out_4 = NULL; main_Statistics_1_out_5 = NULL; main_ColorBar_1_in_2 = NULL; main_ColorBar_1_in_3 = NULL; main_ColorBar_1_in_4 = NULL; main_ColorBar_1_in_5 = NULL; main_ColorBar_1_in_8 = NULL; main_ColorBar_1_in_9 = {"black"}; main_ColorBar_1_in_10 = NULL; main_ColorBar_1_in_11 = NULL; main_ColorBar_1_in_12 = NULL; main_ColorBar_1_in_13 = NULL; main_ColorBar_1_in_14 = NULL; main_ColorBar_1_in_15 = NULL; main_ColorBar_1_in_16 = NULL; main_ColorBar_1_out_1 = NULL; main_Collect_1_out_1 = NULL; main_Format_1_in_1 = "min = %g, max = %g"; main_Format_1_out_1 = NULL; macro Image( id, object, where, useVector, to, from, width, resolution, aspect, up, viewAngle, perspective, options, buttonState = 1, buttonUpApprox = "none", buttonDownApprox = "none", buttonUpDensity = 1, buttonDownDensity = 1, renderMode = 0, defaultCamera, reset, backgroundColor, throttle, RECenable = 0, RECfile, RECformat, RECresolution, RECaspect, AAenable = 0, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, webOptions) -> ( object, camera, where) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, interactionMode, title, renderMode, buttonUpApprox, buttonDownApprox, buttonUpDensity, buttonDownDensity) [instance: 1, cache: 1]; autoCamera = AutoCamera( object, "front", object, resolution, aspect, [0,1,0], perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; realCamera = Camera( to, from, width, resolution, aspect, up, perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; coloredDefaultCamera = UpdateCamera(defaultCamera, background=backgroundColor) [instance: 1, cache: 1]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, coloredDefaultCamera, autoCamera) [instance: 1, cache: 1]; resetNull = Inquire( reset, "is null + 1") [instance: 2, cache: 1]; reset = Switch( resetNull, reset, 0) [instance: 2, cache: 1]; whichCamera = Compute( "($0 != 0 || $1 == 0) ? 1 : 2", reset, useVector) [instance: 1, cache: 1]; camera = Switch( whichCamera, resetCamera, realCamera) [instance: 3, cache: 1]; AAobject = AutoAxes( object, camera, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) [instance: 1, cache: 1]; switchAAenable = Compute("$0+1", AAenable) [instance: 2, cache: 1]; object = Switch( switchAAenable, object, AAobject) [instance:4, cache: 1]; SWapproximation_options = Switch( buttonState, buttonUpApprox, buttonDownApprox) [instance: 5, cache: 1]; SWdensity_options = Switch( buttonState, buttonUpDensity, buttonDownDensity) [instance: 6, cache: 1]; HWapproximation_options = Format( "%s,%s", buttonDownApprox, buttonUpApprox) [instance: 1, cache: 1]; HWdensity_options = Format( "%d,%d", buttonDownDensity, buttonUpDensity) [instance: 2, cache: 1]; switchRenderMode = Compute( "$0+1", renderMode) [instance: 3, cache: 1]; approximation_options = Switch( switchRenderMode, SWapproximation_options, HWapproximation_options) [instance: 7, cache: 1]; density_options = Switch( switchRenderMode, SWdensity_options, HWdensity_options) [instance: 8, cache: 1]; renderModeString = Switch( switchRenderMode, "software", "hardware")[instance: 9, cache: 1]; object_tag = Inquire( object, "object tag")[instance: 3, cache: 1]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "object tag", object_tag, "ddcamera", whichCamera, "rendering approximation", approximation_options, "render every", density_options, "button state", buttonState, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 4, cache: 1]; ImageResolution = Inquire( camera, "camera resolution") [instance: 5, cache: 1]; RECresolution = Switch( RECresNull, RECresolution, ImageResolution) [instance: 10, cache: 1]; RECaspectNull = Inquire( RECaspect, "is null + 1") [instance: 6, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 7, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4", RECenable, switchRenderMode, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object); Display( NoRECobject, camera, where, throttle) [instance: 1, cache: 1]; image = Render( RECNoRerenderObject, camera) [instance: 1, cache: 1]; Display( image, NULL, where, throttle) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 1, cache: 1]; rec_where = Display( RECNoRerHW, camera, where, throttle) [instance: 1, cache: 0]; rec_image = ReadImageWindow( rec_where) [instance: 1, cache: 1]; WriteImage( rec_image, RECfile, RECformat) [instance: 1, cache: 1]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 2, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 1, cache: 1]; RECRerenderObject = ScaleScreen( RECRerenderObject, NULL, RECresolution, camera) [instance: 1, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_1_in_1 = "Image_1"; main_Image_1_in_3 = "X24,,"; main_Image_1_in_4 = 1; main_Image_1_in_5 = [0.406504 0.5 0.060737]; main_Image_1_in_6 = [3.08097 2.11826 1.94289]; main_Image_1_in_7 = 1.95541; main_Image_1_in_8 = 1010; main_Image_1_in_9 = 0.669; main_Image_1_in_10 = [-0.451253 -0.250437 0.856535]; main_Image_1_in_11 = NULL; main_Image_1_in_12 = 0; main_Image_1_in_13 = NULL; main_Image_1_in_14 = 1; main_Image_1_in_15 = NULL; main_Image_1_in_16 = NULL; main_Image_1_in_17 = NULL; main_Image_1_in_18 = NULL; main_Image_1_in_19 = 0; main_Image_1_in_20 = NULL; main_Image_1_in_21 = NULL; main_Image_1_in_22 = "snow"; main_Image_1_in_23 = NULL; main_Image_1_in_25 = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/doping.tif"; main_Image_1_in_26 = "tiff"; main_Image_1_in_27 = NULL; main_Image_1_in_28 = NULL; main_Image_1_in_29 = 1; main_Image_1_in_30 = NULL; main_Image_1_in_31 = -5; main_Image_1_in_32 = NULL; main_Image_1_in_33 = 1; main_Image_1_in_34 = 1; main_Image_1_in_35 = NULL; main_Image_1_in_36 = 1; main_Image_1_in_37 = {"clear", "black", "blue", "blue"}; main_Image_1_in_38 = {"background", "grid", "ticks", "labels"}; main_Image_1_in_39 = 0.65; main_Image_1_in_40 = "roman_d"; main_Image_1_in_41 = "rotate"; main_Image_1_in_42 = NULL; main_Image_1_in_43 = NULL; main_Image_1_in_44 = NULL; main_Image_1_in_45 = NULL; main_Image_1_in_46 = NULL; main_Image_1_in_47 = NULL; main_Image_1_in_48 = NULL; main_Image_1_in_49 = NULL; main_Message_1_in_2 = NULL; main_Message_1_in_3 = NULL; Executive("product version 4 3 2"); $sync main(); secs2d-0.0.8/inst/Utilities/Unodesonside.m0000644000175000017500000000222511201030277016247 0ustar shshfunction Dnodes=Unodesonside(mesh,Dsides); % Dnodes=Unodesonside(mesh,Dsides); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Dedges =[]; for ii = 1:length(Dsides) Dedges=[Dedges,find(mesh.e(5,:)==Dsides(ii))]; end % Set list of nodes with Dirichelet BCs Dnodes = mesh.e(1:2,Dedges); Dnodes = [Dnodes(1,:) Dnodes(2,:)]; Dnodes = unique(Dnodes); secs2d-0.0.8/inst/Utilities/Ucompmass2.m0000644000175000017500000000311411201030277015637 0ustar shshfunction Bmat = Ucompmass2 (imesh,Bvect,Cvect); % Bmat = Ucompmass2 (imesh,Bvect,Cvect); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Nnodes =size(imesh.p,2); Nelements =size(imesh.t,2); %%fprintf(1,'\n*--------------------*\n'); %%fprintf(1,'building Mass Matrix\n*'); wjacdet =imesh.wjacdet(:,:); coeff =Bvect(imesh.t(1:3,:)); coeffe =Cvect(:); % build local matrix Blocmat=zeros(3,Nelements); for inode=1:3 Blocmat(inode,:) = coeffe'.*coeff(inode,:).*wjacdet(inode,:); %%fprintf(1,'----'); end gnode=(imesh.t(1:3,:)); %%fprintf(1,'--'); % assemble global matrix Bmat = sparse(gnode(:),gnode(:),Blocmat(:)); %%fprintf(1,'----*\nDONE!\n\n\n'); secs2d-0.0.8/inst/Utilities/Updesurf.m0000644000175000017500000000336511201030277015413 0ustar shshfunction Updesurf(varargin); # Updemesh(varargin); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . if nargin == 1 Udrawedge(varargin{1}); elseif nargin == 2 mesh = varargin{1}; u = varargin{2}; dataname = mktemp("/tmp",".dx"); scriptname = mktemp("/tmp",".net"); UDXoutput2Ddata(dataname,mesh.p,mesh.t,u,'u',0,1,1); showmesh = file_in_path(path,"Ucoloredrubbersheet.net"); system (["cp " showmesh " " scriptname]); system (["sed -i \'s|__FILE__DX__|" dataname "|g\' " scriptname]); command = ["dx -program " scriptname " -execute -image >& /dev/null &"]; system(command); else fprintf(1,"wrong number of parameters\n\n") end endfunction function filename = mktemp (direct,ext); if (~exist(direct,"dir")) error("trying to save temporary file to non existing directory") end done=false; while ~done filename = [direct,"/SECS2D.",num2str(floor(rand*1e7)),ext]; if ~exist(filename,"file") done =true; end end endfunctionsecs2d-0.0.8/inst/Utilities/Umshcreatemesh.m0000644000175000017500000000051511201030277016565 0ustar shshfunction omesh=Umshcreatemesh(geometry,scalefactor,refine); ## ## ## omesh=Umshcreatemesh(geometry,scalefactor); ## ## if nargin==2 refine =1; end system(["gmsh -format msh1 -2 -scale " num2str(scalefactor) " -clscale ",... num2str(refine) " " geometry ".geo"]); omesh= Umsh2pdetool(geometry); omesh = Umeshproperties(omesh); secs2d-0.0.8/inst/Utilities/Udopdepmob.m0000644000175000017500000000210111201030277015677 0ustar shshfunction mob=Udopdepmob (mesh,mu,par,D); % Udopdepmob (mu,par,D); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . NI = sum(D(mesh.t(1:3,:)),1)'/3; mob = par(1)*exp(-par(4)./NI) +... (mu-par(2))./(1+(NI/par(5)).^par(7)) -... par(3)./(1+(par(6)./NI).^par(8)); secs2d-0.0.8/inst/Utilities/Usubdomains2.m0000644000175000017500000000326211201030277016165 0ustar shshfunction [e,t]=Usubdomains2(p,t,rcts,sidelist); % [e,t]=Usubdomains(p,t,rcts,sidelist); e=[]; %%% subdivide domain according to position of %%% elements' center of mass % get elements' center of mass coordinates x = p(1,:);y = p(2,:); mx = sum(x(t(1:3,:)),1)/3; my = sum(y(t(1:3,:)),1)/3; t(4,:) = 1; % loop over rectangular regions for ii = 1:size(rcts,1) % find elements with center of mass in this rectangle trs = find ((mx>rcts(ii,1))&(mxrcts(ii,3))&(my=sidelist(icond,3)) &... (x2>=sidelist(icond,4)) &... (y1<=sidelist(icond,5)) &... (y2<=sidelist(icond,6)) &... (y1>=sidelist(icond,7)) &... (y2>=sidelist(icond,8)) ); eonside = unique(sides([1,2],onside)','rows')'; eonside(5,:) = icond; e=[e,eonside]; end % set left and right subdomain for ie = 1:size(e,2) for it=1:size(t,2) if(((e(1,ie)==t(1,it))&(e(2,ie)==t(2,it)))|... ((e(1,ie)==t(2,it))&(e(2,ie)==t(3,it)))|... ((e(1,ie)==t(3,it))&(e(2,ie)==t(1,it)))) e(6,ie)=t(4,it); end if(((e(2,ie)==t(1,it))&(e(1,ie)==t(2,it)))|... ((e(2,ie)==t(2,it))&(e(1,ie)==t(3,it)))|... ((e(2,ie)==t(3,it))&(e(1,ie)==t(1,it)))) e(7,ie)=t(4,it); end end end secs2d-0.0.8/inst/Utilities/Usubmesh.m0000644000175000017500000000441411201030277015405 0ustar shshfunction [omesh,onodes,oelements]=Usubmesh(imesh,intrfc,sdl,short) # # [omesh,onodes,oelements]=Usubmesh(imesh,intrfc,sdl,short) # # builds the mesh structure for # the given list # of subdomains sdl # # NOTE: the intrfc parameter is unused and only kept # as a legacy % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . nsd = length(sdl); ####### # the shp field will remain unchanged if (~short) omesh.shp = imesh.shp; end ####### # set list of output triangles oelements=[]; for isd=1:nsd oelements = [oelements find(imesh.t(4,:)==sdl(isd))]; end omesh.t = imesh.t(:,oelements); ####### # discard unneeded part of shg and wjacdet if (~short) omesh.shg= imesh.shg(:,:,oelements); omesh.wjacdet = imesh.wjacdet(:,oelements); end ####### # set list of output nodes onodes = unique(reshape(imesh.t(1:3,oelements),1,[])); omesh.p = imesh.p(:,onodes); ####### # use new node numbering in connectivity matrix indx(onodes) = [1:length(onodes)]; iel = [1:length(oelements)]; omesh.t(1:3,iel) = indx(omesh.t(1:3,iel)); ####### # set list of output edges omesh.e =[]; for isd=1:nsd omesh.e = [omesh.e imesh.e(:,imesh.e(7,:)==sdl(isd))]; omesh.e = [omesh.e imesh.e(:,imesh.e(6,:)==sdl(isd))]; end omesh.e=unique(omesh.e',"rows")'; ####### # use new node numbering in boundary segment list ied = [1:size(omesh.e,2)]; omesh.e(1:2,ied) = indx(omesh.e(1:2,ied)); % Last Revision: % $Author: adb014 $ % $Date: 2008-02-04 16:26:27 +0100 (man, 04 feb 2008) $ secs2d-0.0.8/inst/Utilities/UDXoutput2Ddata.m0000644000175000017500000000673411201030277016562 0ustar shshfunction UDXoutput2Ddata(filename,p,t,u,attr_name,attr_rank,attr_shape,endfile) ## ## UDXoutput2Ddata(filename,p,t,u,attr_name,attr_rank,attr_shape,endfile) ## ## Outputs data in DX form. ## Only one variable can be written to the file ## variable must be a scalar, vector or tensor of doubles ## ## x ## attr_name = name of the variable (type string) ## attr_rank = rank of variable data (0 for scalar, 1 for vector, etc.) ## attr_shape = number of components of variable data (assumed 1 for scalar) ## % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . p = p'; t = t'; t = t(:,1:3); %eval(['!rm -f ',filename]); fid=fopen (filename,'w'); Nnodi = size(p,1); Ntriangoli = size(t,1); Ndati = size(u,1); fprintf(fid,'object "pos"\nclass array type float rank 1 shape 2 items %d data follows',Nnodi); for i=1:Nnodi fprintf(fid,'\n'); fprintf(fid,' %1.7e',p(i,:)); end if (min(min(t))==1) t=t-1; elseif(min(min(t))~=0) disp('WARNING: check triangle structure') end # In DX format nodes are # numbered starting from zero, # instead we want to number # them starting from 1! # Here we restore the DX # format fprintf(fid,'\n\nobject "con"\nclass array type int rank 1 shape 3 items %d data follows',Ntriangoli); for i=1:Ntriangoli fprintf(fid,'\n'); fprintf(fid,' %d',t(i,:)); end fprintf(fid,'\nattribute "element type" string "triangles"\nattribute "ref" string "positions"\n\n'); if ((attr_rank==0) & (min(size(u))==1)) fprintf(fid,'object "%s.data"\nclass array type double rank 0 items %d data follows',attr_name,Ndati); fprintf(fid,'\n %1.7e',u); else fprintf(fid,'object "%s.data"\nclass array type double rank %d shape %d items %d data follows', ... attr_name,attr_rank,attr_shape,Ndati); for i=1:Ndati fprintf(fid,'\n'); fprintf(fid,' %1.7e',u(i,:)); end end if Ndati==Nnodi fprintf(fid,['\nattribute "dep" string "positions"\n\n' ... 'object "%s" class field\n'... 'component "positions" value "pos"\n'... 'component "connections" value "con"\n'... 'component "data" value "%s.data"\n'],... attr_name,attr_name); elseif Ndati==Ntriangoli fprintf(fid,['\nattribute "dep" string "connections"\n\n' ... 'object "%s" class field\n'... 'component "positions" value "pos"\n'... 'component "connections" value "con"\n'... 'component "data" value "%s.data"\n'],... attr_name,attr_name); end if(endfile) fprintf(fid,'\nend\n'); end fclose (fid); secs2d-0.0.8/inst/Utilities/Uinvfermidirac.m0000644000175000017500000000335611201030277016565 0ustar shshfunction [fd]=Uinvfermidirac(eta,par); % [fd]=Uinvfermidirac(eta,par); % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . % reshape eta into a sorted vector s = size(eta); eta = eta(:); [eta,order] = sort(eta); limits = Ufermidirac([-18,18],par); low = limits(1); high = limits(2); etalow = find(eta<=low); etahigh = find(eta>=high); etamid = find((etalow)); switch par case 1/2 load fdhalf; fd(etalow) =log(eta(etalow)); fd(etahigh)=(eta(etahigh)*3*sqrt(pi)/4).^(2/3); if length(etamid) fd(etamid) =log(linterp(a(:,2),exp(a(:,1)),eta(etamid))); end case -1/2 load fdmhalf; fd(etalow) =log(eta(etalow)); fd(etahigh)=pi*(eta(etahigh).^2)/4; if length(etamid) fd(etamid) =log(linterp(a(:,2),exp(a(:,1)),eta(etamid))); end otherwise error(['wrong parameter: par=' num2str(par)]) return end % give answer in original order and shape fd(order) = fd; fd = reshape(fd,s); secs2d-0.0.8/inst/Utilities/Ushowgrid.net0000644000175000017500000003475611201030277016133 0ustar shsh// // time: Mon Feb 27 22:33:21 2006 // // version: 3.2.0 (format), 4.3.2 (DX) // // // MODULE main // workspace: width = 500, height = 463 // layout: snap = 0, width = 50, height = 50, align = NN // macro main( ) -> ( ) { // // node FileSelector[1]: x = 52, y = 31, inputs = 0, label = FileSelector // output[1]: visible = 1, type = 32, value = "__FILE__DX__" // output[2]: visible = 1, type = 32, value = "__FILE__DX__" // // // node Import[1]: x = 104, y = 118, inputs = 6, label = Import // main_Import_1_out_1 = Import( main_FileSelector_1_out_1, main_Import_1_in_2, main_Import_1_in_3, main_Import_1_in_4, main_Import_1_in_5, main_Import_1_in_6 ) [instance: 1, cache: 1]; // // node ShowConnections[1]: x = 101, y = 191, inputs = 1, label = ShowConnections // main_ShowConnections_1_out_1 = ShowConnections( main_Import_1_out_1 ) [instance: 1, cache: 1]; // // node Color[1]: x = 106, y = 286, inputs = 5, label = Color // input[2]: defaulting = 0, visible = 1, type = 32, value = "indianred" // main_Color_1_out_1 = Color( main_ShowConnections_1_out_1, main_Color_1_in_2, main_Color_1_in_3, main_Color_1_in_4, main_Color_1_in_5 ) [instance: 1, cache: 1]; // // node Image[1]: x = 69, y = 401, inputs = 49, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [3.75e-08 2.075e-08 0] // input[6]: defaulting = 0, visible = 0, type = 8, value = [3.75e-08 2.075e-08 2.15172e-07] // input[7]: defaulting = 0, visible = 0, type = 5, value = 1.15311e-07 // input[8]: defaulting = 0, visible = 0, type = 1, value = 640 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.750781 // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0] // input[11]: defaulting = 0, visible = 0, type = 5, value = 30.0001 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 1, visible = 0, type = 32, value = "none" // input[16]: defaulting = 1, visible = 0, type = 32, value = "none" // input[17]: defaulting = 0, visible = 0, type = 1, value = 1 // input[18]: defaulting = 0, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 1, value = 1 // input[22]: defaulting = 0, visible = 0, type = 32, value = "snow" // input[25]: defaulting = 0, visible = 0, type = 32, value = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/grid.tif" // input[26]: defaulting = 0, visible = 0, type = 32, value = "tiff" // input[29]: defaulting = 0, visible = 0, type = 3, value = 1 // input[31]: defaulting = 0, visible = 0, type = 1, value = -15 // input[33]: defaulting = 0, visible = 0, type = 3, value = 0 // input[34]: defaulting = 0, visible = 0, type = 3, value = 0 // input[37]: defaulting = 0, visible = 0, type = 16777248, value = {"clear", "grey5", "saddlebrown", "saddlebrown"} // input[38]: defaulting = 0, visible = 0, type = 16777248, value = {"background", "grid", "ticks", "labels"} // input[39]: defaulting = 0, visible = 0, type = 5, value = 0.7 // input[40]: defaulting = 0, visible = 0, type = 32, value = "roman_s" // input[41]: defaulting = 0, visible = 0, type = 32, value = "panzoom" // depth: value = 24 // window: position = (0.2480,0.1276), size = 0.6387x0.6836 // internal caching: 1 // main_Image_1_out_1, main_Image_1_out_2, main_Image_1_out_3 = Image( main_Image_1_in_1, main_Color_1_out_1, main_Image_1_in_3, main_Image_1_in_4, main_Image_1_in_5, main_Image_1_in_6, main_Image_1_in_7, main_Image_1_in_8, main_Image_1_in_9, main_Image_1_in_10, main_Image_1_in_11, main_Image_1_in_12, main_Image_1_in_13, main_Image_1_in_14, main_Image_1_in_15, main_Image_1_in_16, main_Image_1_in_17, main_Image_1_in_18, main_Image_1_in_19, main_Image_1_in_20, main_Image_1_in_21, main_Image_1_in_22, main_Image_1_in_23, main_Image_1_in_24, main_Image_1_in_25, main_Image_1_in_26, main_Image_1_in_27, main_Image_1_in_28, main_Image_1_in_29, main_Image_1_in_30, main_Image_1_in_31, main_Image_1_in_32, main_Image_1_in_33, main_Image_1_in_34, main_Image_1_in_35, main_Image_1_in_36, main_Image_1_in_37, main_Image_1_in_38, main_Image_1_in_39, main_Image_1_in_40, main_Image_1_in_41, main_Image_1_in_42, main_Image_1_in_43, main_Image_1_in_44, main_Image_1_in_45, main_Image_1_in_46, main_Image_1_in_47, main_Image_1_in_48, main_Image_1_in_49 ) [instance: 1, cache: 1]; // network: end of macro body CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2); } main_FileSelector_1_out_1 = "./.tmp.dx"; main_Import_1_in_2 = NULL; main_Import_1_in_3 = NULL; main_Import_1_in_4 = NULL; main_Import_1_in_5 = NULL; main_Import_1_in_6 = NULL; main_Import_1_out_1 = NULL; main_ShowConnections_1_out_1 = NULL; main_Color_1_in_2 = "indianred"; main_Color_1_in_3 = NULL; main_Color_1_in_4 = NULL; main_Color_1_in_5 = NULL; main_Color_1_out_1 = NULL; macro Image( id, object, where, useVector, to, from, width, resolution, aspect, up, viewAngle, perspective, options, buttonState = 1, buttonUpApprox = "none", buttonDownApprox = "none", buttonUpDensity = 1, buttonDownDensity = 1, renderMode = 0, defaultCamera, reset, backgroundColor, throttle, RECenable = 0, RECfile, RECformat, RECresolution, RECaspect, AAenable = 0, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, webOptions) -> ( object, camera, where) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, interactionMode, title, renderMode, buttonUpApprox, buttonDownApprox, buttonUpDensity, buttonDownDensity) [instance: 1, cache: 1]; autoCamera = AutoCamera( object, "front", object, resolution, aspect, [0,1,0], perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; realCamera = Camera( to, from, width, resolution, aspect, up, perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; coloredDefaultCamera = UpdateCamera(defaultCamera, background=backgroundColor) [instance: 1, cache: 1]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, coloredDefaultCamera, autoCamera) [instance: 1, cache: 1]; resetNull = Inquire( reset, "is null + 1") [instance: 2, cache: 1]; reset = Switch( resetNull, reset, 0) [instance: 2, cache: 1]; whichCamera = Compute( "($0 != 0 || $1 == 0) ? 1 : 2", reset, useVector) [instance: 1, cache: 1]; camera = Switch( whichCamera, resetCamera, realCamera) [instance: 3, cache: 1]; AAobject = AutoAxes( object, camera, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) [instance: 1, cache: 1]; switchAAenable = Compute("$0+1", AAenable) [instance: 2, cache: 1]; object = Switch( switchAAenable, object, AAobject) [instance:4, cache: 1]; SWapproximation_options = Switch( buttonState, buttonUpApprox, buttonDownApprox) [instance: 5, cache: 1]; SWdensity_options = Switch( buttonState, buttonUpDensity, buttonDownDensity) [instance: 6, cache: 1]; HWapproximation_options = Format( "%s,%s", buttonDownApprox, buttonUpApprox) [instance: 1, cache: 1]; HWdensity_options = Format( "%d,%d", buttonDownDensity, buttonUpDensity) [instance: 2, cache: 1]; switchRenderMode = Compute( "$0+1", renderMode) [instance: 3, cache: 1]; approximation_options = Switch( switchRenderMode, SWapproximation_options, HWapproximation_options) [instance: 7, cache: 1]; density_options = Switch( switchRenderMode, SWdensity_options, HWdensity_options) [instance: 8, cache: 1]; renderModeString = Switch( switchRenderMode, "software", "hardware")[instance: 9, cache: 1]; object_tag = Inquire( object, "object tag")[instance: 3, cache: 1]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "object tag", object_tag, "ddcamera", whichCamera, "rendering approximation", approximation_options, "render every", density_options, "button state", buttonState, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 4, cache: 1]; ImageResolution = Inquire( camera, "camera resolution") [instance: 5, cache: 1]; RECresolution = Switch( RECresNull, RECresolution, ImageResolution) [instance: 10, cache: 1]; RECaspectNull = Inquire( RECaspect, "is null + 1") [instance: 6, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 7, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4", RECenable, switchRenderMode, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object); Display( NoRECobject, camera, where, throttle) [instance: 1, cache: 1]; image = Render( RECNoRerenderObject, camera) [instance: 1, cache: 1]; Display( image, NULL, where, throttle) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 1, cache: 1]; rec_where = Display( RECNoRerHW, camera, where, throttle) [instance: 1, cache: 0]; rec_image = ReadImageWindow( rec_where) [instance: 1, cache: 1]; WriteImage( rec_image, RECfile, RECformat) [instance: 1, cache: 1]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 2, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 1, cache: 1]; RECRerenderObject = ScaleScreen( RECRerenderObject, NULL, RECresolution, camera) [instance: 1, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_1_in_1 = "Image_1"; main_Image_1_in_3 = "X24,,"; main_Image_1_in_4 = 1; main_Image_1_in_5 = [3.75e-08 2.075e-08 0]; main_Image_1_in_6 = [3.75e-08 2.075e-08 2.15172e-07]; main_Image_1_in_7 = 1.15311e-07; main_Image_1_in_8 = 640; main_Image_1_in_9 = 0.750781; main_Image_1_in_10 = [0 1 0]; main_Image_1_in_11 = 30.0001; main_Image_1_in_12 = 0; main_Image_1_in_13 = NULL; main_Image_1_in_14 = 1; main_Image_1_in_15 = NULL; main_Image_1_in_16 = NULL; main_Image_1_in_17 = 1; main_Image_1_in_18 = 1; main_Image_1_in_19 = 1; main_Image_1_in_20 = NULL; main_Image_1_in_21 = NULL; main_Image_1_in_22 = "snow"; main_Image_1_in_23 = NULL; main_Image_1_in_25 = "/Users/carlo/Desktop/COMSONDEMO/CoMSON DP/grid.tif"; main_Image_1_in_26 = "tiff"; main_Image_1_in_27 = NULL; main_Image_1_in_28 = NULL; main_Image_1_in_29 = 1; main_Image_1_in_30 = NULL; main_Image_1_in_31 = -15; main_Image_1_in_32 = NULL; main_Image_1_in_33 = 0; main_Image_1_in_34 = 0; main_Image_1_in_35 = NULL; main_Image_1_in_36 = NULL; main_Image_1_in_37 = {"clear", "grey5", "saddlebrown", "saddlebrown"}; main_Image_1_in_38 = {"background", "grid", "ticks", "labels"}; main_Image_1_in_39 = 0.7; main_Image_1_in_40 = "roman_s"; main_Image_1_in_41 = "panzoom"; main_Image_1_in_42 = NULL; main_Image_1_in_43 = NULL; main_Image_1_in_44 = NULL; main_Image_1_in_45 = NULL; main_Image_1_in_46 = NULL; main_Image_1_in_47 = NULL; main_Image_1_in_48 = NULL; main_Image_1_in_49 = NULL; Executive("product version 4 3 2"); $sync main(); secs2d-0.0.8/inst/Utilities/Ufvsgcurrent3.m0000644000175000017500000001167511201030277016401 0ustar shshfunction [Fx,Fy]=Ufvsgcurrent3(mesh,u,alpha,gamma,eta,beta); ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{jx},@var{jy}]} = Ufvsgcurrent3 @ ## (@var{mesh}, @var{u}, @var{alpha}, @var{gamma}, @var{eta}, @var{beta}); ## ## ## Builds the Scharfetter-Gummel approximation of the vector ## field ## ## @iftex ## @tex ## $ \vect{J}(u) = \alpha \gamma (\eta\vect{\nabla}u-\vect{beta}u) $ ## @end tex ## @end iftex ## @ifinfo ## J(@var{u}) = @var{alpha}* @var{gamma} * (@var{eta} * grad @var{u} - @var{beta} * @var{u})) ## @end ifinfo ## ## where: ## @itemize @minus ## @item @var{alpha} is an element-wise constant scalar function ## @item @var{eta}, @var{u}, @var{gamma} are piecewise linear ## conforming scalar functions ## @item @var{beta} is an element-wise constant vector function ## @end itemize ## ## J(@var{u}) is an element-wise constant vector function ## ## Instead of passing the vector field @var{beta} directly ## one can pass a piecewise linear conforming scalar function ## @var{phi} as the last input. In such case @var{beta} = grad @var{phi} ## is assumed. If @var{phi} is a single scalar value @var{beta} ## is assumed to be 0 in the whole domain. ## ## @seealso{Uscharfettergummel3} ## @end deftypefn %% This file is part of %% %% SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator %% ------------------------------------------------------------------- %% Copyright (C) 2004-2006 Carlo de Falco %% %% %% %% 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 2 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. %% %% Youx should have received a copy of the GNU General Public License %% along with SECS2D; If not, see . Nelem = columns(mesh.t); Nnodes = columns(mesh.p); uloc = u(mesh.t(1:3,:)); shgx = reshape(mesh.shg(1,:,:),3,Nelem); shgy = reshape(mesh.shg(2,:,:),3,Nelem); x = reshape(mesh.p(1,mesh.t(1:3,:)),3,[]); dx = [ (x(3,:)-x(2,:)) ; (x(1,:)-x(3,:)) ; (x(2,:)-x(1,:)) ]; y = reshape(mesh.p(2,mesh.t(1:3,:)),3,[]); dy = [ (y(3,:)-y(2,:)) ; (y(1,:) -y(3,:)) ; (y(2,:) -y(1,:)) ]; ##ei = sqrt( dx.^2 + dy.^2 ); if all(size(beta)==1) v12=0;v23=0;v31=0; elseif all(size(beta)==[2,Nelem]) v23 = beta(1,:) .* dx(1,:) + beta(2,:) .* dy(1,:); v31 = beta(1,:) .* dx(2,:) + beta(2,:) .* dy(2,:); v12 = beta(1,:) .* dx(3,:) + beta(2,:) .* dy(3,:); elseif all(size(beta)==[Nnodes,1]) betaloc = beta(mesh.t(1:3,:)); v23 = betaloc(3,:)-betaloc(2,:); v31 = betaloc(1,:)-betaloc(3,:); v12 = betaloc(2,:)-betaloc(1,:); end etaloc = eta(mesh.t(1:3,:)); eta23 = etaloc(3,:)-etaloc(2,:); eta31 = etaloc(1,:)-etaloc(3,:); eta12 = etaloc(2,:)-etaloc(1,:); etalocm1 = Utemplogm(etaloc(2,:),etaloc(3,:)); etalocm2 = Utemplogm(etaloc(3,:),etaloc(1,:)); etalocm3 = Utemplogm(etaloc(1,:),etaloc(2,:)); gammaloc = gamma(mesh.t(1:3,:)); geloc = gammaloc.*etaloc; gelocm1 = Utemplogm(geloc(2,:),geloc(3,:)); gelocm2 = Utemplogm(geloc(3,:),geloc(1,:)); gelocm3 = Utemplogm(geloc(1,:),geloc(2,:)); [bp23,bm23] = Ubern( (v23 - eta23)./etalocm1); [bp31,bm31] = Ubern( (v31 - eta31)./etalocm2); [bp12,bm12] = Ubern( (v12 - eta12)./etalocm3); gfigfj = [ shgx(3,:) .* shgx(2,:) + shgy(3,:) .* shgy(2,:) ; shgx(1,:) .* shgx(3,:) + shgy(1,:) .* shgy(3,:) ; shgx(2,:) .* shgx(1,:) + shgy(2,:) .* shgy(1,:) ]; Fx = - alpha' .* ( gelocm1 .* etalocm1 .* dx(1,:) .* ... gfigfj(1,:) .* ... ( bp23 .* uloc(3,:)./etaloc(3,:) -... bm23 .* uloc(2,:)./etaloc(2,:)) +... %% 1 gelocm2 .* etalocm2 .* dx(2,:) .* ... gfigfj(2,:) .* ... (bp31 .* uloc(1,:)./etaloc(1,:) -... bm31 .* uloc(3,:)./etaloc(3,:)) +... %% 2 gelocm3 .* etalocm3 .* dx(3,:) .* ... gfigfj(3,:) .* ... (bp12 .* uloc(2,:)./etaloc(2,:) -... bm12 .* uloc(1,:)./etaloc(1,:)) ... %% 3 ); Fy = - alpha' .* ( gelocm1 .* etalocm1 .* dy(1,:) .* ... gfigfj(1,:) .* ... ( bp23 .* uloc(3,:)./etaloc(3,:) -... bm23 .* uloc(2,:)./etaloc(2,:)) +... %% 1 gelocm2 .* etalocm2 .* dy(2,:) .* ... gfigfj(2,:) .* ... (bp31 .* uloc(1,:)./etaloc(1,:) -... bm31 .* uloc(3,:)./etaloc(3,:)) +... %% 2 gelocm3 .* etalocm3 .* dy(3,:) .* ... gfigfj(3,:) .* ... (bp12 .* uloc(2,:)./etaloc(2,:) -... bm12 .* uloc(1,:)./etaloc(1,:)) ... %% 3 ); secs2d-0.0.8/inst/Utilities/Updegrad.m0000644000175000017500000000230211201030277015337 0ustar shshfunction [Fx,Fy]=Updegrad(mesh,F); % [Fx,Fy]=Updegrad(mesh,F); % % computes piecewise constant % gradient of a piecewise linear % scalar function F defined on % the mesh structure described by mesh % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . shgx = reshape(mesh.shg(1,:,:),3,[]); Fx = sum(shgx.*F(mesh.t(1:3,:)),1); shgy = reshape(mesh.shg(2,:,:),3,[]); Fy = sum(shgy.*F(mesh.t(1:3,:)),1); secs2d-0.0.8/inst/Utilities/constants.m0000644000175000017500000000613311201030277015626 0ustar shsh% This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . Kb = 1.3806503e-23; q = 1.602176462e-19; e0 = 8.854187817e-12; esir = 11.7; esio2r = 3.9; esi = e0 * esir; esio2 = e0 * esio2r; hplanck = 6.626e-34; hbar = ( hplanck/ (2*pi)); mn0 = 9.11e-31; mn = 0.26*mn0; mh = 0.18*mn0; qsue = q / esi; T0 = 300 ; Vth = Kb * T0 / q; un = 1417e-4; up = 480e-4; vsatn0 = 1.07e5; vsatp0 = 8.37e4; vsatnexp = 0.87; vsatpexp = 0.52; vsatn = vsatn0*(300/T0).^vsatnexp; vsatp = vsatp0*(300/T0).^vsatpexp; mubn0 = 1.109; mubp0 = 1.213; mubnexp = 0.66; mubpexp = 0.17; mubn = mubn0*(T0/300)^mubnexp; mubp = mubp0*(T0/300)^mubpexp; mudopparn = [ 52.2e-4 %mumin1 52.2e-4 %mumin2 43.4e-4 %mu1 0e+6 %Pc 9.68e22 %Cr 3.43e26 %Cs 0.680 %alpha 2.0 %beta ]; mudopparp = [ 44.9e-4 %mumin1 0.00e-4 %mumin2 29.0e-4 %mu1 9.23e22 %Pc 2.23e23 %Cr 6.10e26 %Cs 0.719 %alpha 2.0 %beta ]; tp = 1e-7; tn = 1e-7; twp = .1e-12; twn = .1e-12; mnl = 0.98*mn0; mnt = 0.19*mn0; mndos = (mnl*mnt*mnt)^(1/3); mhh = 0.49*mn0; mlh = 0.16*mn0; mhdos = (mhh^(3/2)+mlh^(3/2))^(2/3); rn = 3; aleph = hbar^2/(4*rn*q*mn); alephn = aleph; rp = .1; alephp = hbar^2/(4*rp*q*mh); Nc = (6/4)*(2*mndos*Kb*T0/(hbar^2*pi))^(3/2); Nv = (1/4)*(2*mhdos*Kb*T0/(hbar^2*pi))^(3/2); Eg0 = 1.16964*q; alfaEg = 4.73e-4*q; betaEg = 6.36e2; Egap = Eg0-alfaEg*((T0^2)/(T0+betaEg)); ni = sqrt(Nc*Nv)*exp(-Egap/(2*(Kb * T0))); Phims = -.79;%- Egap /(2*q); kappaSi = 154.86; % Last Revision: % $Author: adb014 $ % $Date: 2008-02-04 16:26:27 +0100 (man, 04 feb 2008) $ secs2d-0.0.8/inst/Utilities/Umeshproperties.m0000644000175000017500000000454511201030277017015 0ustar shshfunction mesh=Umeshproperties(mesh) % % mesh=Umeshproperties(mesh) % precomputes some useful mesh properties % % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . weight = [1/3 1/3 1/3]; areakk = 1/2; Nelements = Ucolumns(mesh.t); jac([1,2],:) = [mesh.p(1,mesh.t(2,:))-mesh.p(1,mesh.t(1,:)); mesh.p(1,mesh.t(3,:))-mesh.p(1,mesh.t(1,:))]; jac([3,4],:) = [mesh.p(2,mesh.t(2,:))-mesh.p(2,mesh.t(1,:)); mesh.p(2,mesh.t(3,:))-mesh.p(2,mesh.t(1,:))]; jacdet = jac(1,:).*jac(4,:)-jac(2,:).*jac(3,:); degen=find(jacdet <= 0); if ~isempty(degen) fprintf(1,'invalid mesh element: %d fixing...\n',degen); mesh.t(1:3,degen) = mesh.t([2,1,3],degen); jac([1,2],degen) = [mesh.p(1,mesh.t(2,degen))-mesh.p(1,mesh.t(1,degen)); mesh.p(1,mesh.t(3,degen))-mesh.p(1,mesh.t(1,degen))]; jac([3,4],degen) = [mesh.p(2,mesh.t(2,degen))-mesh.p(2,mesh.t(1,degen)); mesh.p(2,mesh.t(3,degen))-mesh.p(2,mesh.t(1,degen))]; jacdet(degen) = jac(1,degen).*jac(4,degen)-jac(2,degen).*jac(3,degen); end for inode = 1:3 mesh.wjacdet(inode,:) = areakk .* jacdet .* weight(inode); end mesh.shp = eye(3); x0 = mesh.p(1,mesh.t(1,:)); y0 = mesh.p(2,mesh.t(1,:)); x1 = mesh.p(1,mesh.t(2,:)); y1 = mesh.p(2,mesh.t(2,:)); x2 = mesh.p(1,mesh.t(3,:)); y2 = mesh.p(2,mesh.t(3,:)); denom = (-(x1.*y0) + x2.*y0 + x0.*y1 - x2.*y1 - x0.*y2 + x1.*y2); mesh.shg(1,1,:) = (y1 - y2)./denom; mesh.shg(2,1,:) = -(x1 - x2)./denom; mesh.shg(1,2,:) = -(y0 - y2)./denom; mesh.shg(2,2,:) = (x0 - x2)./denom; mesh.shg(1,3,:) = (y0 - y1)./denom; mesh.shg(2,3,:) = -(x0 - x1)./denom; secs2d-0.0.8/inst/Utilities/Udriftdiffusion.m0000644000175000017500000000426511201030277016762 0ustar shshfunction c=Udriftdiffusion(mesh,Dsides,guess,M,U,V,u) %% % c=Udriftdiffusion(mesh,Dsides,guess,M,U,V,u) % solves the drift diffusion equation % $ -div ( u ( \nabla n - n \nabla V)) + M = U $ %% % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . global DDG_RHS DDG_MASS %DEBUG_SGM if (Ucolumns(guess)>Urows(guess)) guess=guess'; end if (Ucolumns(V)>Urows(V)) V=V'; end if (Ucolumns(U)>Urows(U)) U=U'; end Nnodes = max(size(mesh.p)); Nelements = max(size(mesh.t)); % Set list of nodes with Dirichelet BCs Dnodes=Unodesonside(mesh,Dsides); % Set values of Dirichelet BCs Bc = guess(Dnodes); % Set list of nodes without Dirichelet BCs Varnodes = setdiff([1:Nnodes],Dnodes); % Build LHS matrix and RHS A = Uscharfettergummel(mesh,V,u); if (isempty(DDG_MASS)) DDG_MASS=Ucompmass2(mesh,ones(Nnodes,1),ones(Nelements,1)); end A = A + DDG_MASS.*spdiag(M,0); if (isempty(DDG_RHS)) DDG_RHS=Ucompconst(mesh,ones(Nnodes,1),ones(Nelements,1)); end b = DDG_RHS.*U; %%%%%%%%DEBUG%%%%%%%%%%% %DEBUG_SGM = A; %% Apply boundary conditions A (Dnodes,:) = 0; b (Dnodes) = 0; b = b - A (:,Dnodes) * Bc; A(Dnodes,:)= []; A(:,Dnodes)= []; b(Dnodes) = []; % Enforce positivity % dA = abs(diag(A)); % edA= abs(sum(triu(A,1)+tril(A,-1),1)); % nondominant = find(dA < edA'); % for ii=1:length(nondominant) % A(nondominant(ii),nondominant(ii)) = edA(ii); % end c = guess; c(Varnodes) = A \ b; secs2d-0.0.8/Makefile0000644000175000017500000000770311201031505012143 0ustar shsh## Generic Makefile to allow the octave-forge packages to be build and ## installed using "configure; make all; make install". This Makefile ## includes the capability to install to a temporary location, and install ## an on_uninstall.m file that prevents the user removing this package ## with Octave's package manager. This is useful for for the distribution's ## various package managers and is forced by defining DESTDIR and DISTPKG. PKGDIR := $(shell pwd | sed -e 's|^.*/||') TMPDIR ?= /tmp PACKAGE ?= $(TMPDIR)/$(PKGDIR).tar.gz PKG := $(shell echo $(PKGDIR) | sed -e 's|^\(.*\)-.*|\1|') all: build package build: @if [ -e src/Makefile ]; then \ $(MAKE) -C src all; \ fi package: build @if [ -e src/Makefile ]; then \ mv src/Makefile src/Makefile.disable; \ fi; \ if [ -e src/configure ]; then \ mv src/configure src/configure.disable; \ fi; \ cd ..; tar -czf $(PACKAGE) $(PKGDIR); \ install: @cd ../; \ if [ "X${DISTPKG}X" != "XX" ]; then \ stripcmd="unlink(pkg('local_list'));unlink(pkg('global_list'));"; \ fi; \ if [ "X$(DESTDIR)X" = "XX" ]; then \ pkgdir=`octave -H -q --no-site-file --eval "warning('off','all');pkg('install','$(PACKAGE)');l=pkg('list');disp(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)}.dir);$$stripcmd;"`; \ else \ shareprefix=$(DESTDIR)/`octave -H -q --no-site-file --eval "disp(fullfile(OCTAVE_HOME(),'share','octave'));"`; \ libexecprefix=$(DESTDIR)/`octave -H -q --no-site-file --eval "disp(fullfile(octave_config_info('libexecdir'),'octave'));"`; \ octprefix=$$shareprefix/packages; \ archprefix=$$libexecprefix/packages; \ if [ ! -e $$octprefix ]; then \ mkdir -p $$octprefix; \ fi; \ if [ ! -e $$archprefix ]; then \ mkdir -p $$archprefix; \ fi; \ octave -H -q --no-site-file --eval "warning('off','all');pkg('prefix','$$octprefix','$$archprefix');pkg('global_list',fullfile('$$shareprefix','octave_packages'));pkg('local_list',fullfile('$$shareprefix','octave_packages'));pkg('install','-nodeps','-verbose','$(PACKAGE)');"; \ pkgdir=`octave -H -q --no-site-file --eval "warning('off','all');pkg('prefix','$$octprefix','$$archprefix');pkg('global_list',fullfile('$$shareprefix','octave_packages'));pkg('local_list',fullfile('$$shareprefix','octave_packages'));l=pkg('list');disp(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)}.dir);$$stripcmd;"`; \ fi; \ if [ "X${DISTPKG}X" != "XX" ]; then \ if [ -e $$pkgdir/packinfo/on_uninstall.m ]; then \ mv $$pkgdir/packinfo/on_uninstall.m \ $$pkgdir/packinfo/on_uninstall.m.orig; \ fi; \ echo "function on_uninstall (desc)" > $$pkgdir/packinfo/on_uninstall.m; \ echo " error ('Can not uninstall %s installed by the $(DISTPKG) package manager', desc.name);" >> $$pkgdir/packinfo/on_uninstall.m; \ echo "endfunction" >> $$pkgdir/packinfo/on_uninstall.m; \ echo "#! /bin/sh -f" > $$pkgdir/packinfo/dist_admin; \ echo "if [ \"\$$1\" == \"install\" ]; then" >> $$pkgdir/packinfo/dist_admin; \ echo " octave -H -q --no-site-file --eval \"pkg('rebuild');\"" >> $$pkgdir/packinfo/dist_admin; \ echo "else" >> $$pkgdir/packinfo/dist_admin; \ echo " pkgdir=\`octave -H -q --no-site-file --eval \"pkg('rebuild');l=pkg('list');disp(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)}.dir);\"\`" >> $$pkgdir/packinfo/dist_admin; \ echo " rm \$$pkgdir/packinfo/on_uninstall.m" >> $$pkgdir/packinfo/dist_admin; \ echo " if [ -e \$$pkgdir/packinfo/on_uninstall.m.orig ]; then" >> $$pkgdir/packinfo/dist_admin; \ echo " mv \$$pkgdir/packinfo/on_uninstall.m.orig \$$pkgdir/packinfo/on_uninstall.m" >> $$pkgdir/packinfo/dist_admin; \ echo " cd \$$pkgdir/packinfo" >> $$pkgdir/packinfo/dist_admin; \ echo " octave -q -H --no-site-file --eval \"l=pkg('list');on_uninstall(l{cellfun(@(x)strcmp(x.name,'$(PKG)'),l)});\"" >> $$pkgdir/packinfo/dist_admin; \ echo " fi" >> $$pkgdir/packinfo/dist_admin; \ echo "fi" >> $$pkgdir/packinfo/dist_admin; \ chmod a+x $$pkgdir/packinfo/dist_admin; \ fi; clean: rm $(PACKAGE) $(MAKE) -C src clean secs2d-0.0.8/COPYING0000644000175000017500000004307711201030277011547 0ustar shsh GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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. 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; if not, see . Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. secs2d-0.0.8/src/0000755000175000017500000000000011201031505011263 5ustar shshsecs2d-0.0.8/src/Ubern.cc0000644000175000017500000000516611201030277012662 0ustar shsh/* % This file is part of % % SECS2D - A 2-D Drift--Diffusion Semiconductor Device Simulator % ------------------------------------------------------------------- % Copyright (C) 2004-2006 Carlo de Falco % % % % 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 2 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 . */ #include #include //////////////////////////////////////////// // Ubern function // this function, though it does make use // of liboctave, is not an octve command // the wrapper to make the command is defined // below //////////////////////////////////////////// int Ubern(const double x, double &bp, double &bn ) { double xlim=1e-2; int ii; double fp,fn,df,segno; double ax; ax=fabs(x); if (ax == 0.0) { bp=1.; bn=1.; goto theend ; } if (ax > 80.0){ if (x >0.0){ bp=0.0; bn=x; goto theend ; }else{ bp=-x; bn=0.0; goto theend ; } } if (ax > xlim){ bp=x/(exp(x)-1.0); bn=x+bp; goto theend ; } ii=1; fp=1.0;fn=1.0;df=1.0;segno=1.0; while (fabs(df) > 2.2204e-16){ ii++; segno= -segno; df=df*x/ii; fp=fp+df; fn=fn+segno*df; bp=1/fp; bn=1/fn; } theend: return 0; } //////////////////////////////////// // WRAPPER //////////////////////////////////// // DEFUN_DLD and the macros that it // depends on are defined in the // files defun-dld.h, defun.h, // and defun-int.h. // // Note that the third parameter // (nargout) is not used, so it is // omitted from the list of arguments // to DEFUN_DLD in order to avoid // the warning from gcc about an // unused function parameter. //////////////////////////////////// DEFUN_DLD (Ubern, args, , " [bp,bn]=Ubern(x)\n \ computes Bernoulli function\n \ B(x)=x/(exp(x)-1) corresponding to \n \ to input values Z and -Z, recalling that\n \ B(-Z)=Z+B(Z)\n") { // The list of values to return. See the declaration in oct-obj.h octave_value_list retval; NDArray X ( args(0).array_value() ); octave_idx_type lx = X.length(); NDArray BP(X),BN(X); for (octave_idx_type jj=0; jj. */ #include #include #include #include "Ubern.h" //////////////////////////////////////////// // Ufastscharfettergummel function // this function, though it does make use // of liboctave, is not an octave command // the wrapper to make the command is defined // below //////////////////////////////////////////// int Uscharfettergummel(const Octave_map &mesh, const ColumnVector &v, const ColumnVector &acoeff, SparseMatrix &SG ) { double area = 0.0, Lloc[9],bp01,bp02,bp12,bm01,bm02,bm12; Matrix p = mesh.contents("p")(0).matrix_value(); Matrix t = mesh.contents("t")(0).matrix_value(); Matrix e = mesh.contents("e")(0).matrix_value(); Array wjacdet= mesh.contents("wjacdet")(0).array_value(); Array shg = mesh.contents("shg")(0).array_value(); octave_idx_type Nnodes = p.columns(); octave_idx_type Nelements = t.columns(); octave_idx_type Nsides = e.columns(); const double *pdata = p.data(); const double *tdata = t.data(); const double *wjacdetdata = wjacdet.data(); const double *shgdata = shg.data(); ColumnVector I(Nelements*9); ColumnVector J(Nelements*9); ColumnVector V(Nelements*9); octave_idx_type counter=0,iglob[3]; for (int iel=0; iel. */ #include #include #include //////////////////////////////////////////// // Ucompconst function // this function, though it does make use // of liboctave, is not an octave command // the wrapper to make the command is defined // below //////////////////////////////////////////// int Ucompconst(const Octave_map &mesh, const ColumnVector &acoeff, const ColumnVector &bcoeff, ColumnVector &SG ) { double Lloc; Matrix p = mesh.contents("p")(0).matrix_value(); Matrix t = mesh.contents("t")(0).matrix_value(); Array wjacdet= mesh.contents("wjacdet")(0).array_value(); octave_idx_type Nnodes = p.columns(); octave_idx_type Nelements = t.columns(); const double *pdata = p.data(); const double *tdata = t.data(); const double *wjacdetdata = wjacdet.data(); SG = ColumnVector (Nnodes,0.0); octave_idx_type iglob[3]; for (int iel=0; iel. */ #include #include #include //////////////////////////////////////////// // Ucomplap function // this function, though it does make use // of liboctave, is not an octave command // the wrapper to make the command is defined // below //////////////////////////////////////////// int Ucomplap(const Octave_map &mesh, const ColumnVector &acoeff, SparseMatrix &SG ) { double area = 0.0, Lloc; Matrix p = mesh.contents("p")(0).matrix_value(); Matrix t = mesh.contents("t")(0).matrix_value(); Array wjacdet= mesh.contents("wjacdet")(0).array_value(); Array shg = mesh.contents("shg")(0).array_value(); octave_idx_type Nnodes = p.columns(); octave_idx_type Nelements = t.columns(); const double *pdata = p.data(); const double *tdata = t.data(); const double *wjacdetdata = wjacdet.data(); const double *shgdata = shg.data(); ColumnVector I(Nelements*9); ColumnVector J(Nelements*9); ColumnVector V(Nelements*9); octave_idx_type counter=0,iglob[3]; for (int iel=0; iel> SEmiConductor Simulator in 2D Utilities Ubern Ubernoulli Umediaarmonica UDXappend2Ddata UDXoutput2Ddata UDXoutput2Dtimeseries URREcyclingpattern Ucolumns Ucompmass2 Udescaling Udopdepmob Udrawedge Udriftdepmob Udriftdiffusion2 Ufielddepmob Ufvsgcurrent Ufvsgcurrent2 Ufvsgcurrent3 Uinvfermidirac Uise2pde Ujoinmeshes Umeshproperties Umsh2pdetool Umshcreatemesh Unodesonside Updegrad Updemesh Updesurf Urows Urrextrapolation Uscaling Uscharfettergummel2 Usmoothguess Ustructmesh Ustructmesh_left Ustructmesh_random Ustructmesh_right Usubdomains2 Usubmesh Utemplogm secs2d Finite Element matrix assembly functions Udriftdiffusion Ucomplap Ucompconst Ucompmass Uscharfettergummel3 Physical constants and material properties constants DDGOX DDGOXddcurrent DDGOXelectron_driftdiffusion DDGOXgummelmap DDGOXhole_driftdiffusion DDGOXnlpoisson DDGOXplotresults DDGOXT DDGOXTelectron_driftdiffusion DDGOXTgummelmap DDGOXThole_driftdiffusion METLINES METLINEScapcomp METLINESdefinepermittivity QDDGOX QDDGOXcompdens QDDGOXddcurrent QDDGOXgummelmap QDDGOXnlpoisson ThDDGOX ThDDGOXMOBN0STD ThDDGOXMOBN1STD ThDDGOXMOBP0STD ThDDGOXMOBP1STD ThDDGOXTWN0STD ThDDGOXTWN1STD ThDDGOXTWP0STD ThDDGOXTWP1STD ThDDGOXddcurrent ThDDGOXelectron_driftdiffusion ThDDGOXeletiteration ThDDGOXgummelmap ThDDGOXhole_driftdiffusion ThDDGOXnlpoisson ThDDGOXthermaliteration ThDDGOXupdateelectron_temp ThDDGOXupdatehole_temp ThDDGOXupdatelattice_temp secs2d-0.0.8/configure0000755000175000017500000000011311201031505012376 0ustar shsh#! /bin/sh -f if [ -e src/configure ]; then cd src ./configure $* fi secs2d-0.0.8/ChangeLog0000644000175000017500000026641711201031505012266 0ustar shsh# Automatically generated file --- DO NOT EDIT 2009-05-06 16:09 hauberg * trunk/octave-forge/doc/htdocs/packages.in, trunk/octave-forge/extra/graceplot/DESCRIPTION, trunk/octave-forge/extra/mapping/DESCRIPTION, trunk/octave-forge/extra/multicore/DESCRIPTION, trunk/octave-forge/extra/pdb/DESCRIPTION, DESCRIPTION, trunk/octave-forge/extra/xraylib/DESCRIPTION, trunk/octave-forge/main/bioinfo/DESCRIPTION, trunk/octave-forge/main/combinatorics/DESCRIPTION, trunk/octave-forge/main/ident/DESCRIPTION, trunk/octave-forge/main/irsa/DESCRIPTION, trunk/octave-forge/main/missing-functions/DESCRIPTION, trunk/octave-forge/main/odebvp/DESCRIPTION, trunk/octave-forge/main/outliers/DESCRIPTION, trunk/octave-forge/main/physical-constants/DESCRIPTION, trunk/octave-forge/main/plot/DESCRIPTION, trunk/octave-forge/main/special-matrix/DESCRIPTION, trunk/octave-forge/main/splines/DESCRIPTION, trunk/octave-forge/main/zenity/DESCRIPTION: Bump version 2008-08-24 16:19 hauberg * trunk/octave-forge/extra/NaN/DESCRIPTION, trunk/octave-forge/extra/Windows/DESCRIPTION, trunk/octave-forge/extra/ad/DESCRIPTION, trunk/octave-forge/extra/bim/DESCRIPTION, trunk/octave-forge/extra/civil/DESCRIPTION, trunk/octave-forge/extra/engine/DESCRIPTION, trunk/octave-forge/extra/fpl/DESCRIPTION, trunk/octave-forge/extra/graceplot/DESCRIPTION, trunk/octave-forge/extra/integration/DESCRIPTION, trunk/octave-forge/extra/java/DESCRIPTION, trunk/octave-forge/extra/jhandles/DESCRIPTION, trunk/octave-forge/extra/mapping/DESCRIPTION, trunk/octave-forge/extra/msh/DESCRIPTION, trunk/octave-forge/extra/multicore/DESCRIPTION, trunk/octave-forge/extra/nlwing2/INDEX, trunk/octave-forge/extra/ocs/DESCRIPTION, trunk/octave-forge/extra/pdb/DESCRIPTION, trunk/octave-forge/extra/secs1d/DESCRIPTION, trunk/octave-forge/extra/secs1d/INDEX, DESCRIPTION, INDEX, trunk/octave-forge/extra/soctcl/DESCRIPTION, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/extra/tsa/DESCRIPTION, trunk/octave-forge/extra/xraylib/DESCRIPTION: Bumped version number 2008-05-14 16:59 cdf * inst/secs2d.m: pkg_add and pkg_del 2008-05-14 16:54 cdf * trunk/octave-forge/extra/secs1d/PKG_ADD, trunk/octave-forge/extra/secs1d/PKG_DEL, trunk/octave-forge/extra/secs1d/inst/secs1d.m, PKG_ADD, PKG_DEL, inst/secs2d.m: pkg_add and pkg_del 2008-04-29 17:52 hauberg * trunk/octave-forge/extra/NaN/DESCRIPTION, trunk/octave-forge/extra/Windows/DESCRIPTION, trunk/octave-forge/extra/ad/DESCRIPTION, trunk/octave-forge/extra/bim/DESCRIPTION, trunk/octave-forge/extra/civil/DESCRIPTION, trunk/octave-forge/extra/engine/DESCRIPTION, trunk/octave-forge/extra/fpl/DESCRIPTION, trunk/octave-forge/extra/graceplot/DESCRIPTION, trunk/octave-forge/extra/integration/DESCRIPTION, trunk/octave-forge/extra/java/DESCRIPTION, trunk/octave-forge/extra/jhandles/DESCRIPTION, trunk/octave-forge/extra/mapping/DESCRIPTION, trunk/octave-forge/extra/msh/DESCRIPTION, trunk/octave-forge/extra/multicore/DESCRIPTION, trunk/octave-forge/extra/ocs/DESCRIPTION, trunk/octave-forge/extra/pdb/DESCRIPTION, trunk/octave-forge/extra/secs1d/DESCRIPTION, DESCRIPTION, trunk/octave-forge/extra/soctcl/DESCRIPTION, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/extra/triangular/DESCRIPTION, trunk/octave-forge/extra/tsa/DESCRIPTION, trunk/octave-forge/extra/xraylib/DESCRIPTION, trunk/octave-forge/language/pt_BR/DESCRIPTION, trunk/octave-forge/main/ann/DESCRIPTION, trunk/octave-forge/main/audio/DESCRIPTION, trunk/octave-forge/main/bioinfo/DESCRIPTION, trunk/octave-forge/main/combinatorics/DESCRIPTION, trunk/octave-forge/main/comm/DESCRIPTION, trunk/octave-forge/main/control/DESCRIPTION, trunk/octave-forge/main/data-smoothing/DESCRIPTION, trunk/octave-forge/main/database/DESCRIPTION, trunk/octave-forge/main/econometrics/DESCRIPTION, trunk/octave-forge/main/financial/DESCRIPTION, trunk/octave-forge/main/fixed/DESCRIPTION, trunk/octave-forge/main/ftp/DESCRIPTION, trunk/octave-forge/main/ga/DESCRIPTION, trunk/octave-forge/main/general/DESCRIPTION, trunk/octave-forge/main/ident/DESCRIPTION, trunk/octave-forge/main/image/DESCRIPTION, trunk/octave-forge/main/info-theory/DESCRIPTION, trunk/octave-forge/main/io/DESCRIPTION, trunk/octave-forge/main/irsa/DESCRIPTION, trunk/octave-forge/main/linear-algebra/DESCRIPTION, trunk/octave-forge/main/miscellaneous/DESCRIPTION, trunk/octave-forge/main/missing-functions/DESCRIPTION, trunk/octave-forge/main/nnet/DESCRIPTION, trunk/octave-forge/main/octcdf/DESCRIPTION, trunk/octave-forge/main/octgpr/DESCRIPTION, trunk/octave-forge/main/odebvp/DESCRIPTION, trunk/octave-forge/main/odepkg/DESCRIPTION, trunk/octave-forge/main/optim/DESCRIPTION, trunk/octave-forge/main/optiminterp/DESCRIPTION, trunk/octave-forge/main/outliers/DESCRIPTION, trunk/octave-forge/main/parallel/DESCRIPTION, trunk/octave-forge/main/physical-constants/DESCRIPTION, trunk/octave-forge/main/plot/DESCRIPTION, trunk/octave-forge/main/signal/DESCRIPTION, trunk/octave-forge/main/sockets/DESCRIPTION, trunk/octave-forge/main/specfun/DESCRIPTION, trunk/octave-forge/main/special-matrix/DESCRIPTION, trunk/octave-forge/main/splines/DESCRIPTION, trunk/octave-forge/main/statistics/DESCRIPTION, trunk/octave-forge/main/strings/DESCRIPTION, trunk/octave-forge/main/struct/DESCRIPTION, trunk/octave-forge/main/symbolic/DESCRIPTION, trunk/octave-forge/main/time/DESCRIPTION, trunk/octave-forge/main/video/DESCRIPTION, trunk/octave-forge/main/vrml/DESCRIPTION, trunk/octave-forge/main/zenity/DESCRIPTION, trunk/octave-forge/nonfree/arpack/DESCRIPTION, trunk/octave-forge/nonfree/spline-gsvspl/DESCRIPTION: Updated release dates 2008-04-06 23:36 adb014 * trunk/octave-forge/extra/NaN/DESCRIPTION, trunk/octave-forge/extra/Windows/DESCRIPTION, trunk/octave-forge/extra/ad/DESCRIPTION, trunk/octave-forge/extra/bim/DESCRIPTION, trunk/octave-forge/extra/civil/DESCRIPTION, trunk/octave-forge/extra/engine/DESCRIPTION, trunk/octave-forge/extra/fpl/DESCRIPTION, trunk/octave-forge/extra/graceplot/DESCRIPTION, trunk/octave-forge/extra/integration/DESCRIPTION, trunk/octave-forge/extra/java/DESCRIPTION, trunk/octave-forge/extra/jhandles/DESCRIPTION, trunk/octave-forge/extra/mapping/DESCRIPTION, trunk/octave-forge/extra/msh/DESCRIPTION, trunk/octave-forge/extra/multicore/DESCRIPTION, trunk/octave-forge/extra/pdb/DESCRIPTION, trunk/octave-forge/extra/secs1d/DESCRIPTION, DESCRIPTION, trunk/octave-forge/extra/soctcl/DESCRIPTION, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/extra/triangular/DESCRIPTION, trunk/octave-forge/extra/tsa/DESCRIPTION, trunk/octave-forge/extra/xraylib/DESCRIPTION, trunk/octave-forge/language/pt_BR/DESCRIPTION, trunk/octave-forge/main/audio/DESCRIPTION, trunk/octave-forge/main/combinatorics/DESCRIPTION, trunk/octave-forge/main/comm/DESCRIPTION, trunk/octave-forge/main/control/DESCRIPTION, trunk/octave-forge/main/financial/DESCRIPTION, trunk/octave-forge/main/fixed/DESCRIPTION, trunk/octave-forge/main/fixed/src/configure.base, trunk/octave-forge/main/general/DESCRIPTION, trunk/octave-forge/main/gsl/DESCRIPTION, trunk/octave-forge/main/ident/DESCRIPTION, trunk/octave-forge/main/image/DESCRIPTION, trunk/octave-forge/main/info-theory/DESCRIPTION, trunk/octave-forge/main/io/DESCRIPTION, trunk/octave-forge/main/irsa/DESCRIPTION, trunk/octave-forge/main/linear-algebra/DESCRIPTION, trunk/octave-forge/main/miscellaneous/DESCRIPTION, trunk/octave-forge/main/nnet/DESCRIPTION, trunk/octave-forge/main/octcdf/DESCRIPTION, trunk/octave-forge/main/odebvp/DESCRIPTION, trunk/octave-forge/main/optiminterp/DESCRIPTION, trunk/octave-forge/main/outliers/DESCRIPTION, trunk/octave-forge/main/parallel/DESCRIPTION, trunk/octave-forge/main/physical-constants/DESCRIPTION, trunk/octave-forge/main/plot/DESCRIPTION, trunk/octave-forge/main/signal/DESCRIPTION, trunk/octave-forge/main/statistics/DESCRIPTION, trunk/octave-forge/main/strings/DESCRIPTION, trunk/octave-forge/main/struct/DESCRIPTION, trunk/octave-forge/main/symbolic/DESCRIPTION, trunk/octave-forge/main/time/DESCRIPTION, trunk/octave-forge/main/vrml/DESCRIPTION, trunk/octave-forge/main/zenity/DESCRIPTION, trunk/octave-forge/nonfree/arpack/DESCRIPTION, trunk/octave-forge/nonfree/spline-gsvspl/DESCRIPTION: Update version numbers, release dates, and news in preparation for release 2008-02-04 15:26 adb014 * trunk/octave-forge/admin/octlang, trunk/octave-forge/extra/bim/COPYING, trunk/octave-forge/extra/bim/inst/BIM2Aadvdiff.m, trunk/octave-forge/extra/bim/inst/BIM2Aboundarymass.m, trunk/octave-forge/extra/bim/inst/BIM2Areaction.m, trunk/octave-forge/extra/bim/inst/BIM2Arhs.m, trunk/octave-forge/extra/bim/inst/BIM2Cglobalflux.m, trunk/octave-forge/extra/bim/inst/BIM2Cmeshproperties.m, trunk/octave-forge/extra/bim/inst/BIM2Cpdegrad.m, trunk/octave-forge/extra/bim/inst/BIM2Cunknowncoord.m, trunk/octave-forge/extra/bim/inst/BIM2Cunknownsonside.m, trunk/octave-forge/extra/bim/inst/BIMUbern.m, trunk/octave-forge/extra/bim/inst/BIMUlogm.m, trunk/octave-forge/extra/fpl/COPYING, trunk/octave-forge/extra/fpl/inst/FPL2dxappenddata.m, trunk/octave-forge/extra/fpl/inst/FPL2dxoutputdata.m, trunk/octave-forge/extra/fpl/inst/FPL2dxoutputtimeseries.m, trunk/octave-forge/extra/fpl/inst/FPL2pdesurf.m, trunk/octave-forge/extra/fpl/inst/FPL2quiver.m, trunk/octave-forge/extra/fpl/inst/FPL2showmesh.m, trunk/octave-forge/extra/java/src/org/octave/ClassHelper.java, trunk/octave-forge/extra/java/src/org/octave/Matrix.java, trunk/octave-forge/extra/java/src/org/octave/OctClassLoader.java, trunk/octave-forge/extra/java/src/org/octave/Octave.java, trunk/octave-forge/extra/java/src/org/octave/OctaveReference.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/ArrayProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/AxesContainer.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/AxesObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/BarseriesObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/BaseLineObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/BooleanProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Callback.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/CallbackListener.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/CallbackProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/CheckBoxControl.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/ColorProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/ColorbarObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/DoubleProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/DoubleRadioProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Edit2Control.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/EditControl.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Factory.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/FigureObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/GL2PS.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/GLRenderCanvas.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/GLRenderer.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/GraphicObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/GroupObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/HandleEvent.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/HandleEventSink.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/HandleEventSinkAdapter.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/HandleEventSource.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/HandleEventSourceHelper.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/HandleObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/HandleObjectListProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/ImageObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/J2DRenderCanvas.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/J2DRenderer.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/LegendObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/LightObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/LineObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/LineStyleProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/ListBoxControl.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/MarkerProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Matrix3D.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/NotImplProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/ObjectProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/OctaveCallback.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/OctaveSink.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/PatchObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Point3D.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/PopupMenuControl.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/PositionLayout.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Positionable.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Property.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/PropertyException.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/PropertySet.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/PushButtonControl.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/RadioProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/RenderCanvas.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/RenderEventListener.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Renderer.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/RootObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/SimpleTextEngine.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/StringArrayProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/StringProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/SurfaceObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/TextControl.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/TextObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/TextProperty.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/UIControl.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/UIControlAdapter.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/UIControlEvent.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/UIControlObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/UIPanelObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/UnwindHandleObject.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Utils.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/Vector3D.java, trunk/octave-forge/extra/jhandles/src/org/octave/graphics/VectorProperty.java, trunk/octave-forge/extra/msh/COPYING, trunk/octave-forge/extra/msh/inst/MSH2Mgeomprop.m, trunk/octave-forge/extra/msh/inst/MSH2Mgmsh.m, trunk/octave-forge/extra/msh/inst/MSH2Mjoinstructm.m, trunk/octave-forge/extra/msh/inst/MSH2Mnodesonsides.m, trunk/octave-forge/extra/msh/inst/MSH2Mstructmesh.m, trunk/octave-forge/extra/msh/inst/MSH2Msubmesh.m, trunk/octave-forge/extra/msh/inst/MSH2Mtopprop.m, trunk/octave-forge/extra/secs1d/COPYING, trunk/octave-forge/extra/secs1d/inst/DDG/DDGelectron_driftdiffusion.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGgummelmap.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGhole_driftdiffusion.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGn2phin.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGnlpoisson.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGp2phip.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGphin2n.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGphip2p.m, trunk/octave-forge/extra/secs1d/inst/DDG/DDGplotresults.m, trunk/octave-forge/extra/secs1d/inst/DDN/DDNnewtonmap.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Ubern.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Ubernoulli.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Ucompconst.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Ucomplap.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Ucompmass.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Udriftdiffusion.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Umediaarmonica.m, trunk/octave-forge/extra/secs1d/inst/Utilities/Uscharfettergummel.m, trunk/octave-forge/extra/secs1d/inst/Utilities/constants.m, trunk/octave-forge/extra/secs1d/src/Ubern.cc, COPYING, README, inst/DDGOX/DDGOXddcurrent.m, inst/DDGOX/DDGOXelectron_driftdiffusion.m, inst/DDGOX/DDGOXgummelmap.m, inst/DDGOX/DDGOXhole_driftdiffusion.m, inst/DDGOX/DDGOXnlpoisson.m, inst/DDGOX/DDGOXplotresults.m, inst/DDGOXT/DDGOXTelectron_driftdiffusion.m, inst/DDGOXT/DDGOXTgummelmap.m, inst/DDGOXT/DDGOXThole_driftdiffusion.m, inst/ThDDGOX/ThDDGOXddcurrent.m, inst/ThDDGOX/ThDDGOXelectron_driftdiffusion.m, inst/ThDDGOX/ThDDGOXhole_driftdiffusion.m, inst/ThDDGOX/ThDDGOXnlpoisson.m, inst/ThDDGOX/ThDDGOXupdateelectron_temp.m, inst/ThDDGOX/ThDDGOXupdatehole_temp.m, inst/ThDDGOX/ThDDGOXupdatelattice_temp.m, inst/Utilities/UDXoutput2Ddata.m, inst/Utilities/UDXoutput2Dtimeseries.m, inst/Utilities/URREcyclingpattern.m, inst/Utilities/Ubern.m, inst/Utilities/Ucolumns.m, inst/Utilities/Ucompconst.m, inst/Utilities/Ucomplap.m, inst/Utilities/Ucompmass2.m, inst/Utilities/Udescaling.m, inst/Utilities/Udopdepmob.m, inst/Utilities/Udrawedge.m, inst/Utilities/Udriftdepmob.m, inst/Utilities/Udriftdiffusion.m, inst/Utilities/Udriftdiffusion2.m, inst/Utilities/Ufielddepmob.m, inst/Utilities/Ufvsgcurrent.m, inst/Utilities/Ufvsgcurrent2.m, inst/Utilities/Ufvsgcurrent3.m, inst/Utilities/Uinvfermidirac.m, inst/Utilities/Ujoinmeshes.m, inst/Utilities/Umeshproperties.m, inst/Utilities/Unodesonside.m, inst/Utilities/Updegrad.m, inst/Utilities/Updemesh.m, inst/Utilities/Updesurf.m, inst/Utilities/Urows.m, inst/Utilities/Urrextrapolation.m, inst/Utilities/Uscaling.m, inst/Utilities/Uscharfettergummel2.m, inst/Utilities/Uscharfettergummel3.m, inst/Utilities/Ustructmesh.m, inst/Utilities/Ustructmesh_left.m, inst/Utilities/Ustructmesh_random.m, inst/Utilities/Ustructmesh_right.m, inst/Utilities/Usubmesh.m, inst/Utilities/constants.m, src/Ubern.cc, src/Ucompconst.cc, src/Ucomplap.cc, src/Uscharfettergummel.cc, trunk/octave-forge/main/comm/inst/amdemod.m, trunk/octave-forge/main/comm/inst/ammod.m, trunk/octave-forge/main/comm/inst/bsc.m, trunk/octave-forge/main/comm/inst/fmdemod.m, trunk/octave-forge/main/comm/inst/fmmod.m, trunk/octave-forge/main/comm/inst/genqamdemod.m, trunk/octave-forge/main/comm/inst/intrlv.m, trunk/octave-forge/main/comm/inst/marcumq.m, trunk/octave-forge/main/comm/inst/oct2dec.m, trunk/octave-forge/main/comm/inst/qamdemod.m, trunk/octave-forge/main/comm/inst/qammod.m, trunk/octave-forge/main/comm/inst/qfunc.m, trunk/octave-forge/main/comm/inst/qfuncinv.m, trunk/octave-forge/main/outliers/inst/chisqouttest.m, trunk/octave-forge/main/outliers/inst/cochrancdf.m, trunk/octave-forge/main/outliers/inst/cochraninv.m, trunk/octave-forge/main/outliers/inst/cochrantest.m, trunk/octave-forge/main/outliers/inst/dixoncdf.m, trunk/octave-forge/main/outliers/inst/dixoninv.m, trunk/octave-forge/main/outliers/inst/dixontest.m, trunk/octave-forge/main/outliers/inst/grubbscdf.m, trunk/octave-forge/main/outliers/inst/grubbsinv.m, trunk/octave-forge/main/outliers/inst/grubbstest.m, trunk/octave-forge/main/outliers/inst/outlier.m, trunk/octave-forge/main/outliers/inst/qtable.m, trunk/octave-forge/main/outliers/inst/rmoutlier.m, trunk/octave-forge/main/signal/inst/barthannwin.m, trunk/octave-forge/main/signal/inst/bitrevorder.m, trunk/octave-forge/main/signal/inst/blackmanharris.m, trunk/octave-forge/main/signal/inst/blackmannuttall.m, trunk/octave-forge/main/signal/inst/bohmanwin.m, trunk/octave-forge/main/signal/inst/diric.m, trunk/octave-forge/main/signal/inst/filtfilt.m, trunk/octave-forge/main/signal/inst/gauspuls.m, trunk/octave-forge/main/signal/inst/gmonopuls.m, trunk/octave-forge/main/signal/inst/mexihat.m, trunk/octave-forge/main/signal/inst/meyeraux.m, trunk/octave-forge/main/signal/inst/morlet.m, trunk/octave-forge/main/signal/inst/nuttallwin.m, trunk/octave-forge/main/signal/inst/parzenwin.m, trunk/octave-forge/main/signal/inst/shanwavf.m, trunk/octave-forge/main/signal/inst/tukeywin.m, trunk/octave-forge/main/signal/inst/upfirdn.m, trunk/octave-forge/main/signal/inst/welchwin.m, trunk/octave-forge/main/sockets/COPYING, trunk/octave-forge/main/statistics/inst/nanvar.m: And again more copyright updates 2008-02-04 13:47 adb014 * trunk/octave-forge/COPYING.GPL, trunk/octave-forge/admin/MacOSX/createapp/applicationstartup.sh.in, trunk/octave-forge/admin/MacOSX/createapp/makeoctaveapp.sh, trunk/octave-forge/admin/MacOSX/createapp/makeoctaveapp.sh.old, trunk/octave-forge/admin/MacOSX/createapp/mkoctfile.in, trunk/octave-forge/admin/MacOSX/createapp/octave.in, trunk/octave-forge/admin/MacOSX/createapp/selfupdate.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-2.9.12.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-2.9.13.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-2.9.14.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-2.9.15.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-2.9.16.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-2.9.17.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-2.9.18.sh, trunk/octave-forge/admin/MacOSX/solvedeps/solvedeps-3.0.0.sh, trunk/octave-forge/admin/Windows/msvc/ar-msvc, trunk/octave-forge/admin/Windows/msvc/build_atlas_dll, trunk/octave-forge/admin/Windows/msvc/cc-msvc.cc, trunk/octave-forge/admin/Windows/msvc/fc-msvc.cc, trunk/octave-forge/admin/Windows/msvc/ranlib-msvc, trunk/octave-forge/admin/make_index, trunk/octave-forge/admin/template.ndev, trunk/octave-forge/doc/coda/appendices/examples.sgml, trunk/octave-forge/doc/coda/coda.sgml, trunk/octave-forge/doc/coda/oct/advanced.sgml, trunk/octave-forge/doc/coda/oct/oct.sgml, trunk/octave-forge/doc/coda/oct/quickref.sgml, trunk/octave-forge/doc/coda/oct/tut-basic.sgml, trunk/octave-forge/doc/coda/oct/tut-interm.sgml, trunk/octave-forge/doc/coda/oct/tut-intro.sgml, trunk/octave-forge/doc/coda/oct/tutorial.sgml, trunk/octave-forge/doc/coda/standalone/standalone.sgml, trunk/octave-forge/extra/MacOSX/COPYING, trunk/octave-forge/extra/MacOSX/src/image.m.in, trunk/octave-forge/extra/NaN/COPYING, trunk/octave-forge/extra/NaN/doc/README.TXT, trunk/octave-forge/extra/NaN/inst/center.m, trunk/octave-forge/extra/NaN/inst/coefficient_of_variation.m, trunk/octave-forge/extra/NaN/inst/conv2nan.m, trunk/octave-forge/extra/NaN/inst/cor.m, trunk/octave-forge/extra/NaN/inst/corrcoef.m, trunk/octave-forge/extra/NaN/inst/cov.m, trunk/octave-forge/extra/NaN/inst/covm.m, trunk/octave-forge/extra/NaN/inst/detrend.m, trunk/octave-forge/extra/NaN/inst/flag_implicit_significance.m, trunk/octave-forge/extra/NaN/inst/geomean.m, trunk/octave-forge/extra/NaN/inst/harmmean.m, trunk/octave-forge/extra/NaN/inst/kurtosis.m, trunk/octave-forge/extra/NaN/inst/mad.m, trunk/octave-forge/extra/NaN/inst/mean.m, trunk/octave-forge/extra/NaN/inst/meandev.m, trunk/octave-forge/extra/NaN/inst/meansq.m, trunk/octave-forge/extra/NaN/inst/median.m, trunk/octave-forge/extra/NaN/inst/mod.m, trunk/octave-forge/extra/NaN/inst/moment.m, trunk/octave-forge/extra/NaN/inst/naninsttest.m, trunk/octave-forge/extra/NaN/inst/nanstd.m, trunk/octave-forge/extra/NaN/inst/nansum.m, trunk/octave-forge/extra/NaN/inst/nantest.m, trunk/octave-forge/extra/NaN/inst/normcdf.m, trunk/octave-forge/extra/NaN/inst/norminv.m, trunk/octave-forge/extra/NaN/inst/normpdf.m, trunk/octave-forge/extra/NaN/inst/percentile.m, trunk/octave-forge/extra/NaN/inst/quantile.m, trunk/octave-forge/extra/NaN/inst/rankcorr.m, trunk/octave-forge/extra/NaN/inst/ranks.m, trunk/octave-forge/extra/NaN/inst/rem.m, trunk/octave-forge/extra/NaN/inst/rms.m, trunk/octave-forge/extra/NaN/inst/sem.m, trunk/octave-forge/extra/NaN/inst/skewness.m, trunk/octave-forge/extra/NaN/inst/spearman.m, trunk/octave-forge/extra/NaN/inst/statistic.m, trunk/octave-forge/extra/NaN/inst/std.m, trunk/octave-forge/extra/NaN/inst/sumskipnan.m, trunk/octave-forge/extra/NaN/inst/tcdf.m, trunk/octave-forge/extra/NaN/inst/tinv.m, trunk/octave-forge/extra/NaN/inst/tpdf.m, trunk/octave-forge/extra/NaN/inst/trimean.m, trunk/octave-forge/extra/NaN/inst/var.m, trunk/octave-forge/extra/NaN/inst/xcovf.m, trunk/octave-forge/extra/NaN/inst/zscore.m, trunk/octave-forge/extra/NaN/src/sumskipnan.cc, trunk/octave-forge/extra/NaN/src/sumskipnan.cpp, trunk/octave-forge/extra/Windows/COPYING, trunk/octave-forge/extra/Windows/examples/mat2xls.m, trunk/octave-forge/extra/Windows/src/__COM__.cc, trunk/octave-forge/extra/Windows/src/image.m.in, trunk/octave-forge/extra/ad/COPYING, trunk/octave-forge/extra/ad/doc/ad.texi, trunk/octave-forge/extra/ad/inst/D.m, trunk/octave-forge/extra/ad/inst/__ga__.m, trunk/octave-forge/extra/ad/inst/gradabs.m, trunk/octave-forge/extra/ad/inst/gradacos.m, trunk/octave-forge/extra/ad/inst/gradacosh.m, trunk/octave-forge/extra/ad/inst/gradasin.m, trunk/octave-forge/extra/ad/inst/gradasinh.m, trunk/octave-forge/extra/ad/inst/gradatan.m, trunk/octave-forge/extra/ad/inst/gradatanh.m, trunk/octave-forge/extra/ad/inst/gradconj.m, trunk/octave-forge/extra/ad/inst/gradcos.m, trunk/octave-forge/extra/ad/inst/gradcosh.m, trunk/octave-forge/extra/ad/inst/gradcot.m, trunk/octave-forge/extra/ad/inst/gradcumprod.m, trunk/octave-forge/extra/ad/inst/gradcumsum.m, trunk/octave-forge/extra/ad/inst/gradexp.m, trunk/octave-forge/extra/ad/inst/gradfind.m, trunk/octave-forge/extra/ad/inst/gradimag.m, trunk/octave-forge/extra/ad/inst/gradlog.m, trunk/octave-forge/extra/ad/inst/gradlog10.m, trunk/octave-forge/extra/ad/inst/gradprod.m, trunk/octave-forge/extra/ad/inst/gradreal.m, trunk/octave-forge/extra/ad/inst/gradsin.m, trunk/octave-forge/extra/ad/inst/gradsinh.m, trunk/octave-forge/extra/ad/inst/gradsqrt.m, trunk/octave-forge/extra/ad/inst/gradsum.m, trunk/octave-forge/extra/ad/inst/gradtan.m, trunk/octave-forge/extra/ad/inst/gradtanh.m, trunk/octave-forge/extra/ad/src/grad-ops.cc, trunk/octave-forge/extra/ad/src/ov-grad.cc, trunk/octave-forge/extra/ad/src/ov-grad.h, trunk/octave-forge/extra/civil/COPYING, trunk/octave-forge/extra/civil/inst/__nlnewmark_fcn__.m, trunk/octave-forge/extra/civil/inst/newmark.m, trunk/octave-forge/extra/civil/inst/nlnewmark.m, trunk/octave-forge/extra/engine/COPYING, trunk/octave-forge/extra/graceplot/COPYING, trunk/octave-forge/extra/graceplot/inst/alternatives/__errcomm__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__errplot__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__grpltfmt__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plr1__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plr2__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plr__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt1__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt2__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt2mm__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt2mv__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt2ss__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt2vm__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt2vv__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__plt__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__pltopt1__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/__pltopt__.m, trunk/octave-forge/extra/graceplot/inst/alternatives/axis.m, trunk/octave-forge/extra/graceplot/inst/alternatives/bar.m, trunk/octave-forge/extra/graceplot/inst/alternatives/cla.m, trunk/octave-forge/extra/graceplot/inst/alternatives/clf.m, trunk/octave-forge/extra/graceplot/inst/alternatives/errorbar.m, trunk/octave-forge/extra/graceplot/inst/alternatives/figure.m, trunk/octave-forge/extra/graceplot/inst/alternatives/hold.m, trunk/octave-forge/extra/graceplot/inst/alternatives/ishold.m, trunk/octave-forge/extra/graceplot/inst/alternatives/legend.m, trunk/octave-forge/extra/graceplot/inst/alternatives/mplot.m, trunk/octave-forge/extra/graceplot/inst/alternatives/multiplot.m, trunk/octave-forge/extra/graceplot/inst/alternatives/oneplot.m, trunk/octave-forge/extra/graceplot/inst/alternatives/plot.m, trunk/octave-forge/extra/graceplot/inst/alternatives/polar.m, trunk/octave-forge/extra/graceplot/inst/alternatives/print.m, trunk/octave-forge/extra/graceplot/inst/alternatives/semilogx.m, trunk/octave-forge/extra/graceplot/inst/alternatives/semilogxerr.m, trunk/octave-forge/extra/graceplot/inst/alternatives/semilogy.m, trunk/octave-forge/extra/graceplot/inst/alternatives/semilogyerr.m, trunk/octave-forge/extra/graceplot/inst/alternatives/subplot.m, trunk/octave-forge/extra/graceplot/inst/alternatives/subtitle.m, trunk/octave-forge/extra/graceplot/inst/alternatives/subwindow.m, trunk/octave-forge/extra/graceplot/inst/alternatives/title.m, trunk/octave-forge/extra/graceplot/inst/alternatives/xlabel.m, trunk/octave-forge/extra/graceplot/inst/alternatives/ylabel.m, trunk/octave-forge/extra/graceplot/src/__grcmd__.cc, trunk/octave-forge/extra/integration/COPYING, trunk/octave-forge/extra/java/COPYING, trunk/octave-forge/extra/java/inst/javaArray.m, trunk/octave-forge/extra/java/inst/javaaddpath.m, trunk/octave-forge/extra/java/inst/javaclasspath.m, trunk/octave-forge/extra/java/src/__java__.cc, trunk/octave-forge/extra/java/src/__java__.h, trunk/octave-forge/extra/jhandles/COPYING, trunk/octave-forge/extra/jhandles/inst/__area__.m, trunk/octave-forge/extra/jhandles/inst/__axis_label__.m, trunk/octave-forge/extra/jhandles/inst/__bar3__.m, trunk/octave-forge/extra/jhandles/inst/__bars__.m, trunk/octave-forge/extra/jhandles/inst/__get_object__.m, trunk/octave-forge/extra/jhandles/inst/__get_parent_arg__.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_add_listener.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_add_property.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_exit.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_get.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_get_baseline.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_axes.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_axes_init.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_barseries.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_colorbar.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_delete.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_figure.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_hggroup.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_image.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_line.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_patch.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_stemseries.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_surface.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_text.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_uicontrol.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_go_uipanel.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_ishandle.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_set.m, trunk/octave-forge/extra/jhandles/inst/__jhandles_waitfor.m, trunk/octave-forge/extra/jhandles/inst/__parse_stem_args__.m, trunk/octave-forge/extra/jhandles/inst/addlistener.m, trunk/octave-forge/extra/jhandles/inst/addprop.m, trunk/octave-forge/extra/jhandles/inst/allchild.m, trunk/octave-forge/extra/jhandles/inst/bar3.m, trunk/octave-forge/extra/jhandles/inst/bar3h.m, trunk/octave-forge/extra/jhandles/inst/colorbar.m, trunk/octave-forge/extra/jhandles/inst/dialog.m, trunk/octave-forge/extra/jhandles/inst/drawnow.m, trunk/octave-forge/extra/jhandles/inst/gcbf.m, trunk/octave-forge/extra/jhandles/inst/gcbo.m, trunk/octave-forge/extra/jhandles/inst/hggroup.m, trunk/octave-forge/extra/jhandles/inst/isprop.m, trunk/octave-forge/extra/jhandles/inst/legend.m, trunk/octave-forge/extra/jhandles/inst/light.m, trunk/octave-forge/extra/jhandles/inst/mat2java.m, trunk/octave-forge/extra/jhandles/inst/reset_property.m, trunk/octave-forge/extra/jhandles/inst/stem.m, trunk/octave-forge/extra/jhandles/inst/stem3.m, trunk/octave-forge/extra/jhandles/inst/uicontrol.m, trunk/octave-forge/extra/jhandles/inst/uipanel.m, trunk/octave-forge/extra/jhandles/inst/uiresume.m, trunk/octave-forge/extra/jhandles/inst/uiwait.m, trunk/octave-forge/extra/jhandles/inst/waitfor.m, trunk/octave-forge/extra/jhandles/src/__jhandles__.cc, trunk/octave-forge/extra/mapping/COPYING, trunk/octave-forge/extra/mapping/inst/azimuth.m, trunk/octave-forge/extra/mapping/inst/deg2rad.m, trunk/octave-forge/extra/mapping/inst/distance.m, trunk/octave-forge/extra/mapping/inst/rad2deg.m, trunk/octave-forge/extra/multicore/COPYING, trunk/octave-forge/extra/ode/COPYING, trunk/octave-forge/extra/pdb/COPYING, trunk/octave-forge/extra/pdb/inst/plotpdb.m, trunk/octave-forge/extra/pdb/inst/read_pdb.m, trunk/octave-forge/extra/pdb/inst/strtoz.m, trunk/octave-forge/extra/pdb/inst/write_pdb.m, trunk/octave-forge/extra/pdb/src/creadpdb.cc, inst/Utilities/Uscharfettergummel.m, trunk/octave-forge/extra/symband/COPYING, trunk/octave-forge/extra/symband/src/SymBand.cc, trunk/octave-forge/extra/tk_octave/inst/rainbow.m, trunk/octave-forge/extra/triangular/COPYING, trunk/octave-forge/extra/triangular/inst/triangular.m, trunk/octave-forge/extra/tsa/COPYING, trunk/octave-forge/extra/tsa/doc/README.TXT, trunk/octave-forge/extra/tsa/inst/aar.m, trunk/octave-forge/extra/tsa/inst/aarmam.m, trunk/octave-forge/extra/tsa/inst/ac2poly.m, trunk/octave-forge/extra/tsa/inst/ac2rc.m, trunk/octave-forge/extra/tsa/inst/acorf.m, trunk/octave-forge/extra/tsa/inst/acovf.m, trunk/octave-forge/extra/tsa/inst/adim.m, trunk/octave-forge/extra/tsa/inst/ar2poly.m, trunk/octave-forge/extra/tsa/inst/ar2rc.m, trunk/octave-forge/extra/tsa/inst/ar_spa.m, trunk/octave-forge/extra/tsa/inst/arcext.m, trunk/octave-forge/extra/tsa/inst/biacovf.m, trunk/octave-forge/extra/tsa/inst/bisdemo.m, trunk/octave-forge/extra/tsa/inst/bispec.m, trunk/octave-forge/extra/tsa/inst/contents.m, trunk/octave-forge/extra/tsa/inst/detrend.m, trunk/octave-forge/extra/tsa/inst/durlev.m, trunk/octave-forge/extra/tsa/inst/flag_implicit_samplerate.m, trunk/octave-forge/extra/tsa/inst/flix.m, trunk/octave-forge/extra/tsa/inst/histo.m, trunk/octave-forge/extra/tsa/inst/histo2.m, trunk/octave-forge/extra/tsa/inst/histo3.m, trunk/octave-forge/extra/tsa/inst/histo4.m, trunk/octave-forge/extra/tsa/inst/hup.m, trunk/octave-forge/extra/tsa/inst/invest0.m, trunk/octave-forge/extra/tsa/inst/invest1.m, trunk/octave-forge/extra/tsa/inst/invfdemo.m, trunk/octave-forge/extra/tsa/inst/lattice.m, trunk/octave-forge/extra/tsa/inst/lpc.m, trunk/octave-forge/extra/tsa/inst/mvaar.m, trunk/octave-forge/extra/tsa/inst/mvar.m, trunk/octave-forge/extra/tsa/inst/mvfilter.m, trunk/octave-forge/extra/tsa/inst/mvfreqz.m, trunk/octave-forge/extra/tsa/inst/pacf.m, trunk/octave-forge/extra/tsa/inst/parcor.m, trunk/octave-forge/extra/tsa/inst/poly2ac.m, trunk/octave-forge/extra/tsa/inst/poly2ar.m, trunk/octave-forge/extra/tsa/inst/poly2rc.m, trunk/octave-forge/extra/tsa/inst/rc2ac.m, trunk/octave-forge/extra/tsa/inst/rc2ar.m, trunk/octave-forge/extra/tsa/inst/rc2poly.m, trunk/octave-forge/extra/tsa/inst/rmle.m, trunk/octave-forge/extra/tsa/inst/sbispec.m, trunk/octave-forge/extra/tsa/inst/selmo.m, trunk/octave-forge/extra/tsa/inst/sinvest1.m, trunk/octave-forge/extra/tsa/inst/tsademo.m, trunk/octave-forge/extra/tsa/inst/ucp.m, trunk/octave-forge/extra/tsa/inst/y2res.m, trunk/octave-forge/extra/xraylib/COPYING, trunk/octave-forge/language/base/src/help.icc, trunk/octave-forge/language/base/template/COPYING, trunk/octave-forge/language/base/template/src/help.cc, trunk/octave-forge/language/pt_BR/COPYING, trunk/octave-forge/language/pt_BR/src/ajuda.cc, trunk/octave-forge/main/audio/COPYING, trunk/octave-forge/main/audio/inst/au.m, trunk/octave-forge/main/audio/inst/auload.m, trunk/octave-forge/main/audio/inst/auplot.m, trunk/octave-forge/main/audio/inst/ausave.m, trunk/octave-forge/main/audio/inst/clip.m, trunk/octave-forge/main/audio/inst/sound.m, trunk/octave-forge/main/audio/inst/soundsc.m, trunk/octave-forge/main/combinatorics/COPYING, trunk/octave-forge/main/combinatorics/inst/combs.m, trunk/octave-forge/main/combinatorics/src/Makefile, trunk/octave-forge/main/combinatorics/src/partint.cc, trunk/octave-forge/main/combinatorics/src/partint.h, trunk/octave-forge/main/comm/COPYING, trunk/octave-forge/main/comm/inst/ademodce.m, trunk/octave-forge/main/comm/inst/amodce.m, trunk/octave-forge/main/comm/inst/apkconst.m, trunk/octave-forge/main/comm/inst/awgn.m, trunk/octave-forge/main/comm/inst/bchpoly.m, trunk/octave-forge/main/comm/inst/bi2de.m, trunk/octave-forge/main/comm/inst/biterr.m, trunk/octave-forge/main/comm/inst/comms.m, trunk/octave-forge/main/comm/inst/compand.m, trunk/octave-forge/main/comm/inst/cosets.m, trunk/octave-forge/main/comm/inst/de2bi.m, trunk/octave-forge/main/comm/inst/decode.m, trunk/octave-forge/main/comm/inst/demodmap.m, trunk/octave-forge/main/comm/inst/egolaydec.m, trunk/octave-forge/main/comm/inst/egolayenc.m, trunk/octave-forge/main/comm/inst/egolaygen.m, trunk/octave-forge/main/comm/inst/encode.m, trunk/octave-forge/main/comm/inst/eyediagram.m, trunk/octave-forge/main/comm/inst/fibodeco.m, trunk/octave-forge/main/comm/inst/fiboenco.m, trunk/octave-forge/main/comm/inst/fibosplitstream.m, trunk/octave-forge/main/comm/inst/gconv.m, trunk/octave-forge/main/comm/inst/gconvmtx.m, trunk/octave-forge/main/comm/inst/gdeconv.m, trunk/octave-forge/main/comm/inst/gdftmtx.m, trunk/octave-forge/main/comm/inst/gen2par.m, trunk/octave-forge/main/comm/inst/genqammod.m, trunk/octave-forge/main/comm/inst/gfft.m, trunk/octave-forge/main/comm/inst/gftable.m, trunk/octave-forge/main/comm/inst/gfweight.m, trunk/octave-forge/main/comm/inst/gifft.m, trunk/octave-forge/main/comm/inst/gisequal.m, trunk/octave-forge/main/comm/inst/golombdeco.m, trunk/octave-forge/main/comm/inst/golombenco.m, trunk/octave-forge/main/comm/inst/groots.m, trunk/octave-forge/main/comm/inst/hammgen.m, trunk/octave-forge/main/comm/inst/huffmandeco.m, trunk/octave-forge/main/comm/inst/huffmandict.m, trunk/octave-forge/main/comm/inst/huffmanenco.m, trunk/octave-forge/main/comm/inst/lloyds.m, trunk/octave-forge/main/comm/inst/lz77deco.m, trunk/octave-forge/main/comm/inst/lz77enco.m, trunk/octave-forge/main/comm/inst/minpol.m, trunk/octave-forge/main/comm/inst/modmap.m, trunk/octave-forge/main/comm/inst/pamdemod.m, trunk/octave-forge/main/comm/inst/pammod.m, trunk/octave-forge/main/comm/inst/pskdemod.m, trunk/octave-forge/main/comm/inst/pskmod.m, trunk/octave-forge/main/comm/inst/qaskdeco.m, trunk/octave-forge/main/comm/inst/qaskenco.m, trunk/octave-forge/main/comm/inst/quantiz.m, trunk/octave-forge/main/comm/inst/randerr.m, trunk/octave-forge/main/comm/inst/randint.m, trunk/octave-forge/main/comm/inst/randsrc.m, trunk/octave-forge/main/comm/inst/reedmullerdec.m, trunk/octave-forge/main/comm/inst/reedmullerenc.m, trunk/octave-forge/main/comm/inst/reedmullergen.m, trunk/octave-forge/main/comm/inst/ricedeco.m, trunk/octave-forge/main/comm/inst/riceenco.m, trunk/octave-forge/main/comm/inst/rledeco.m, trunk/octave-forge/main/comm/inst/rleenco.m, trunk/octave-forge/main/comm/inst/rsdecof.m, trunk/octave-forge/main/comm/inst/rsencof.m, trunk/octave-forge/main/comm/inst/rsgenpoly.m, trunk/octave-forge/main/comm/inst/scatterplot.m, trunk/octave-forge/main/comm/inst/shannonfanodeco.m, trunk/octave-forge/main/comm/inst/shannonfanodict.m, trunk/octave-forge/main/comm/inst/shannonfanoenco.m, trunk/octave-forge/main/comm/inst/symerr.m, trunk/octave-forge/main/comm/inst/systematize.m, trunk/octave-forge/main/comm/inst/vec2mat.m, trunk/octave-forge/main/comm/inst/wgn.m, trunk/octave-forge/main/comm/src/__errcore__.cc, trunk/octave-forge/main/comm/src/__gfweight__.cc, trunk/octave-forge/main/comm/src/cyclgen.cc, trunk/octave-forge/main/comm/src/cyclpoly.cc, trunk/octave-forge/main/comm/src/galois-def.cc, trunk/octave-forge/main/comm/src/galois-def.h, trunk/octave-forge/main/comm/src/galois-ops.h, trunk/octave-forge/main/comm/src/galois.cc, trunk/octave-forge/main/comm/src/galois.h, trunk/octave-forge/main/comm/src/galoisfield.cc, trunk/octave-forge/main/comm/src/galoisfield.h, trunk/octave-forge/main/comm/src/genqamdemod.cc, trunk/octave-forge/main/comm/src/gf.cc, trunk/octave-forge/main/comm/src/isprimitive.cc, trunk/octave-forge/main/comm/src/op-gm-gm.cc, trunk/octave-forge/main/comm/src/op-gm-m.cc, trunk/octave-forge/main/comm/src/op-gm-s.cc, trunk/octave-forge/main/comm/src/op-m-gm.cc, trunk/octave-forge/main/comm/src/op-s-gm.cc, trunk/octave-forge/main/comm/src/ov-galois.cc, trunk/octave-forge/main/comm/src/ov-galois.h, trunk/octave-forge/main/comm/src/primpoly.cc, trunk/octave-forge/main/comm/src/syndtable.cc, trunk/octave-forge/main/control/COPYING, trunk/octave-forge/main/econometrics/COPYING, trunk/octave-forge/main/econometrics/inst/__kernel_epanechnikov.m, trunk/octave-forge/main/econometrics/inst/__kernel_normal.m, trunk/octave-forge/main/econometrics/inst/__kernel_weights.m, trunk/octave-forge/main/econometrics/inst/average_moments.m, trunk/octave-forge/main/econometrics/inst/delta_method.m, trunk/octave-forge/main/econometrics/inst/gmm_estimate.m, trunk/octave-forge/main/econometrics/inst/gmm_example.m, trunk/octave-forge/main/econometrics/inst/gmm_obj.m, trunk/octave-forge/main/econometrics/inst/gmm_results.m, trunk/octave-forge/main/econometrics/inst/gmm_variance.m, trunk/octave-forge/main/econometrics/inst/gmm_variance_inefficient.m, trunk/octave-forge/main/econometrics/inst/kernel_density.m, trunk/octave-forge/main/econometrics/inst/kernel_density_nodes.m, trunk/octave-forge/main/econometrics/inst/kernel_example.m, trunk/octave-forge/main/econometrics/inst/kernel_optimal_bandwidth.m, trunk/octave-forge/main/econometrics/inst/kernel_regression.m, trunk/octave-forge/main/econometrics/inst/kernel_regression_nodes.m, trunk/octave-forge/main/econometrics/inst/mle_estimate.m, trunk/octave-forge/main/econometrics/inst/mle_example.m, trunk/octave-forge/main/econometrics/inst/mle_obj.m, trunk/octave-forge/main/econometrics/inst/mle_obj_nodes.m, trunk/octave-forge/main/econometrics/inst/mle_results.m, trunk/octave-forge/main/econometrics/inst/mle_variance.m, trunk/octave-forge/main/econometrics/inst/nls_estimate.m, trunk/octave-forge/main/econometrics/inst/nls_example.m, trunk/octave-forge/main/econometrics/inst/nls_obj.m, trunk/octave-forge/main/econometrics/inst/nls_obj_nodes.m, trunk/octave-forge/main/econometrics/inst/parameterize.m, trunk/octave-forge/main/econometrics/inst/poisson.m, trunk/octave-forge/main/econometrics/inst/poisson_moments.m, trunk/octave-forge/main/econometrics/inst/prettyprint.m, trunk/octave-forge/main/econometrics/inst/prettyprint_c.m, trunk/octave-forge/main/econometrics/inst/scale_data.m, trunk/octave-forge/main/econometrics/inst/sum_moments_nodes.m, trunk/octave-forge/main/econometrics/inst/unscale_parameters.m, trunk/octave-forge/main/econometrics/src/__kernel_weights.cc, trunk/octave-forge/main/fixed/COPYING, trunk/octave-forge/main/fixed/examples/ffft.cc, trunk/octave-forge/main/fixed/examples/ffft.h, trunk/octave-forge/main/fixed/examples/fixed_inc.cc, trunk/octave-forge/main/fixed/examples/testfixed.m, trunk/octave-forge/main/fixed/examples/testofdm.m, trunk/octave-forge/main/fixed/inst/concat.m, trunk/octave-forge/main/fixed/inst/create_lookup_table.m, trunk/octave-forge/main/fixed/inst/fixedpoint.m, trunk/octave-forge/main/fixed/inst/float.m, trunk/octave-forge/main/fixed/inst/fsort.m, trunk/octave-forge/main/fixed/inst/lookup_table.m, trunk/octave-forge/main/fixed/src/Array-f.cc, trunk/octave-forge/main/fixed/src/fixed-conv.cc, trunk/octave-forge/main/fixed/src/fixed-conv.h, trunk/octave-forge/main/fixed/src/fixed-def.h, trunk/octave-forge/main/fixed/src/fixed-var.cc, trunk/octave-forge/main/fixed/src/fixed-var.h, trunk/octave-forge/main/fixed/src/fixed.cc, trunk/octave-forge/main/fixed/src/fixed.h, trunk/octave-forge/main/fixed/src/fixedCColVector.cc, trunk/octave-forge/main/fixed/src/fixedCColVector.h, trunk/octave-forge/main/fixed/src/fixedCMatrix.cc, trunk/octave-forge/main/fixed/src/fixedCMatrix.h, trunk/octave-forge/main/fixed/src/fixedCNDArray.cc, trunk/octave-forge/main/fixed/src/fixedCNDArray.h, trunk/octave-forge/main/fixed/src/fixedCRowVector.cc, trunk/octave-forge/main/fixed/src/fixedCRowVector.h, trunk/octave-forge/main/fixed/src/fixedColVector.cc, trunk/octave-forge/main/fixed/src/fixedColVector.h, trunk/octave-forge/main/fixed/src/fixedComplex.cc, trunk/octave-forge/main/fixed/src/fixedComplex.h, trunk/octave-forge/main/fixed/src/fixedMatrix.cc, trunk/octave-forge/main/fixed/src/fixedMatrix.h, trunk/octave-forge/main/fixed/src/fixedNDArray.cc, trunk/octave-forge/main/fixed/src/fixedNDArray.h, trunk/octave-forge/main/fixed/src/fixedRowVector.cc, trunk/octave-forge/main/fixed/src/fixedRowVector.h, trunk/octave-forge/main/fixed/src/int/fixed.cc, trunk/octave-forge/main/fixed/src/int/fixed.h, trunk/octave-forge/main/fixed/src/op-fcm-fcm.cc, trunk/octave-forge/main/fixed/src/op-fcm-fcs.cc, trunk/octave-forge/main/fixed/src/op-fcm-fm.cc, trunk/octave-forge/main/fixed/src/op-fcm-fs.cc, trunk/octave-forge/main/fixed/src/op-fcs-fcm.cc, trunk/octave-forge/main/fixed/src/op-fcs-fcs.cc, trunk/octave-forge/main/fixed/src/op-fcs-fm.cc, trunk/octave-forge/main/fixed/src/op-fcs-fs.cc, trunk/octave-forge/main/fixed/src/op-fm-fcm.cc, trunk/octave-forge/main/fixed/src/op-fm-fcs.cc, trunk/octave-forge/main/fixed/src/op-fm-fm.cc, trunk/octave-forge/main/fixed/src/op-fm-fs.cc, trunk/octave-forge/main/fixed/src/op-fs-fcm.cc, trunk/octave-forge/main/fixed/src/op-fs-fcs.cc, trunk/octave-forge/main/fixed/src/op-fs-fm.cc, trunk/octave-forge/main/fixed/src/op-fs-fs.cc, trunk/octave-forge/main/fixed/src/ov-base-fixed-mat.cc, trunk/octave-forge/main/fixed/src/ov-base-fixed-mat.h, trunk/octave-forge/main/fixed/src/ov-base-fixed.cc, trunk/octave-forge/main/fixed/src/ov-base-fixed.h, trunk/octave-forge/main/fixed/src/ov-fixed-complex.cc, trunk/octave-forge/main/fixed/src/ov-fixed-complex.h, trunk/octave-forge/main/fixed/src/ov-fixed-cx-mat.cc, trunk/octave-forge/main/fixed/src/ov-fixed-cx-mat.h, trunk/octave-forge/main/fixed/src/ov-fixed-mat.cc, trunk/octave-forge/main/fixed/src/ov-fixed-mat.h, trunk/octave-forge/main/fixed/src/ov-fixed.cc, trunk/octave-forge/main/fixed/src/ov-fixed.h, trunk/octave-forge/main/general/COPYING, trunk/octave-forge/main/general/inst/ctranspose.m, trunk/octave-forge/main/general/inst/issorted.m, trunk/octave-forge/main/general/inst/transpose.m, trunk/octave-forge/main/general/inst/unvech.m, trunk/octave-forge/main/general/src/deref.cc, trunk/octave-forge/main/gsl/COPYING, trunk/octave-forge/main/gsl/src/buildgsl_sf.sh, trunk/octave-forge/main/gsl/src/coupling_3j.cc, trunk/octave-forge/main/gsl/src/coupling_6j.cc, trunk/octave-forge/main/gsl/src/coupling_9j.cc, trunk/octave-forge/main/gsl/src/legendre_sphPlm_array.cc, trunk/octave-forge/main/gsl/src/precode.cc.template, trunk/octave-forge/main/ident/COPYING, trunk/octave-forge/main/ident/inst/idplot.m, trunk/octave-forge/main/ident/inst/idsim.m, trunk/octave-forge/main/ident/inst/mktheta.m, trunk/octave-forge/main/ident/inst/poly2th.m, trunk/octave-forge/main/image/COPYING, trunk/octave-forge/main/image/devel/__bridge_lut_fun__.m, trunk/octave-forge/main/image/devel/__conditional_mark_patterns_lut_fun__.m, trunk/octave-forge/main/image/devel/__diagonal_fill_lut_fun__.m, trunk/octave-forge/main/image/devel/__unconditional_mark_patterns_lut_fun__.m, trunk/octave-forge/main/image/inst/applylut.m, trunk/octave-forge/main/image/inst/bestblk.m, trunk/octave-forge/main/image/inst/blkproc.m, trunk/octave-forge/main/image/inst/bwarea.m, trunk/octave-forge/main/image/inst/bwborder.m, trunk/octave-forge/main/image/inst/bwdist.m, trunk/octave-forge/main/image/inst/bweuler.m, trunk/octave-forge/main/image/inst/bwlabel.m, trunk/octave-forge/main/image/inst/bwmorph.m, trunk/octave-forge/main/image/inst/bwperim.m, trunk/octave-forge/main/image/inst/cmpermute.m, trunk/octave-forge/main/image/inst/cmunique.m, trunk/octave-forge/main/image/inst/col2im.m, trunk/octave-forge/main/image/inst/conndef.m, trunk/octave-forge/main/image/inst/corr2.m, trunk/octave-forge/main/image/inst/deriche.m, trunk/octave-forge/main/image/inst/dilate.m, trunk/octave-forge/main/image/inst/erode.m, trunk/octave-forge/main/image/inst/fspecial.m, trunk/octave-forge/main/image/inst/grayslice.m, trunk/octave-forge/main/image/inst/histeq.m, trunk/octave-forge/main/image/inst/im2bw.m, trunk/octave-forge/main/image/inst/im2col.m, trunk/octave-forge/main/image/inst/im2double.m, trunk/octave-forge/main/image/inst/im2uint16.m, trunk/octave-forge/main/image/inst/im2uint8.m, trunk/octave-forge/main/image/inst/imadjust.m, trunk/octave-forge/main/image/inst/imhist.m, trunk/octave-forge/main/image/inst/imnoise.m, trunk/octave-forge/main/image/inst/impad.m, trunk/octave-forge/main/image/inst/imremap.m, trunk/octave-forge/main/image/inst/imresize.m, trunk/octave-forge/main/image/inst/imrotate.m, trunk/octave-forge/main/image/inst/imrotate_Fourier.m, trunk/octave-forge/main/image/inst/imshear.m, trunk/octave-forge/main/image/inst/imtranslate.m, trunk/octave-forge/main/image/inst/isbw.m, trunk/octave-forge/main/image/inst/isgray.m, trunk/octave-forge/main/image/inst/isind.m, trunk/octave-forge/main/image/inst/isrgb.m, trunk/octave-forge/main/image/inst/label2rgb.m, trunk/octave-forge/main/image/inst/makelut.m, trunk/octave-forge/main/image/inst/mat2gray.m, trunk/octave-forge/main/image/inst/mean2.m, trunk/octave-forge/main/image/inst/medfilt2.m, trunk/octave-forge/main/image/inst/nlfilter.m, trunk/octave-forge/main/image/inst/ordfilt2.m, trunk/octave-forge/main/image/inst/padarray.m, trunk/octave-forge/main/image/inst/poly2mask.m, trunk/octave-forge/main/image/inst/qtdecomp.m, trunk/octave-forge/main/image/inst/qtgetblk.m, trunk/octave-forge/main/image/inst/qtsetblk.m, trunk/octave-forge/main/image/inst/rgb2gray.m, trunk/octave-forge/main/image/inst/roicolor.m, trunk/octave-forge/main/image/inst/std2.m, trunk/octave-forge/main/image/inst/stretchlim.m, trunk/octave-forge/main/image/inst/uintlut.m, trunk/octave-forge/main/image/src/__bwdist.cc, trunk/octave-forge/main/image/src/cordflt2.cc, trunk/octave-forge/main/image/src/pngcanvas.h, trunk/octave-forge/main/image/src/pngread.cc, trunk/octave-forge/main/image/src/pngwrite.cc, trunk/octave-forge/main/info-theory/COPYING, trunk/octave-forge/main/info-theory/inst/arithmetic_decode.m, trunk/octave-forge/main/info-theory/inst/arithmetic_encode.m, trunk/octave-forge/main/info-theory/inst/bscchannel.m, trunk/octave-forge/main/info-theory/inst/condentr_seq.m, trunk/octave-forge/main/info-theory/inst/conditionalentropy_XY.m, trunk/octave-forge/main/info-theory/inst/conditionalentropy_YX.m, trunk/octave-forge/main/info-theory/inst/entropy.m, trunk/octave-forge/main/info-theory/inst/hartley_entropy.m, trunk/octave-forge/main/info-theory/inst/infoentr_seq.m, trunk/octave-forge/main/info-theory/inst/infogain_seq.m, trunk/octave-forge/main/info-theory/inst/jointentropy.m, trunk/octave-forge/main/info-theory/inst/kullback_leibler_distance.m, trunk/octave-forge/main/info-theory/inst/laverage.m, trunk/octave-forge/main/info-theory/inst/marginalc.m, trunk/octave-forge/main/info-theory/inst/marginalr.m, trunk/octave-forge/main/info-theory/inst/mutualinfo_seq.m, trunk/octave-forge/main/info-theory/inst/mutualinformation.m, trunk/octave-forge/main/info-theory/inst/narysource.m, trunk/octave-forge/main/info-theory/inst/redundancy.m, trunk/octave-forge/main/info-theory/inst/relativeentropy.m, trunk/octave-forge/main/info-theory/inst/renyi_entropy.m, trunk/octave-forge/main/info-theory/inst/shannon_entropy.m, trunk/octave-forge/main/info-theory/inst/tunstallcode.m, trunk/octave-forge/main/info-theory/inst/unarydec.m, trunk/octave-forge/main/info-theory/inst/unaryenc.m, trunk/octave-forge/main/io/COPYING, trunk/octave-forge/main/io/inst/append_save.m, trunk/octave-forge/main/io/inst/dlmread.m, trunk/octave-forge/main/io/inst/xlsread.m, trunk/octave-forge/main/io/src/dlmread.cc, trunk/octave-forge/main/io/src/dlmreadnew.cc, trunk/octave-forge/main/irsa/COPYING, trunk/octave-forge/main/irsa/inst/irsa_act.m, trunk/octave-forge/main/irsa/inst/irsa_actcore.m, trunk/octave-forge/main/irsa/inst/irsa_check.m, trunk/octave-forge/main/irsa/inst/irsa_dft.m, trunk/octave-forge/main/irsa/inst/irsa_dftfp.m, trunk/octave-forge/main/irsa/inst/irsa_genreal.m, trunk/octave-forge/main/irsa/inst/irsa_idft.m, trunk/octave-forge/main/irsa/inst/irsa_isregular.m, trunk/octave-forge/main/irsa/inst/irsa_jitsp.m, trunk/octave-forge/main/irsa/inst/irsa_mdsp.m, trunk/octave-forge/main/irsa/inst/irsa_normalize.m, trunk/octave-forge/main/irsa/inst/irsa_plotdft.m, trunk/octave-forge/main/irsa/inst/irsa_resample.m, trunk/octave-forge/main/irsa/inst/irsa_rgenreal.m, trunk/octave-forge/main/linear-algebra/COPYING, trunk/octave-forge/main/linear-algebra/inst/bicg.m, trunk/octave-forge/main/linear-algebra/inst/funm.m, trunk/octave-forge/main/linear-algebra/src/CmplxGSVD.cc, trunk/octave-forge/main/linear-algebra/src/CmplxGSVD.h, trunk/octave-forge/main/linear-algebra/src/GramSchmidt.cc, trunk/octave-forge/main/linear-algebra/src/dbleGSVD.cc, trunk/octave-forge/main/linear-algebra/src/dbleGSVD.h, trunk/octave-forge/main/linear-algebra/src/gsvd.cc, trunk/octave-forge/main/linear-algebra/src/outer.cc, trunk/octave-forge/main/miscellaneous/COPYING, trunk/octave-forge/main/miscellaneous/inst/apply.m, trunk/octave-forge/main/miscellaneous/inst/csv2latex.m, trunk/octave-forge/main/miscellaneous/inst/infoskeleton.m, trunk/octave-forge/main/miscellaneous/inst/map.m, trunk/octave-forge/main/miscellaneous/inst/match.m, trunk/octave-forge/main/miscellaneous/inst/reduce.m, trunk/octave-forge/main/miscellaneous/inst/units.m, trunk/octave-forge/main/miscellaneous/inst/xmlwrite.m, trunk/octave-forge/main/miscellaneous/inst/zagzig.m, trunk/octave-forge/main/miscellaneous/inst/zigzag.m, trunk/octave-forge/main/miscellaneous/src/cell2csv.cc, trunk/octave-forge/main/miscellaneous/src/csv2cell.cc, trunk/octave-forge/main/miscellaneous/src/csvconcat.cc, trunk/octave-forge/main/miscellaneous/src/csvexplode.cc, trunk/octave-forge/main/miscellaneous/src/waitbar.cc, trunk/octave-forge/main/miscellaneous/src/xmlread.cc, trunk/octave-forge/main/miscellaneous/src/xmltree.c, trunk/octave-forge/main/miscellaneous/src/xmltree.h, trunk/octave-forge/main/miscellaneous/src/xmltree_read.act, trunk/octave-forge/main/miscellaneous/src/xmltree_read.h, trunk/octave-forge/main/nnet/COPYING, trunk/octave-forge/main/nnet/doc/latex/users/examples/1/MLP9_1_1.m, trunk/octave-forge/main/nnet/inst/__calcjacobian.m, trunk/octave-forge/main/nnet/inst/__calcperf.m, trunk/octave-forge/main/nnet/inst/__checknetstruct.m, trunk/octave-forge/main/nnet/inst/__dlogsig.m, trunk/octave-forge/main/nnet/inst/__dpurelin.m, trunk/octave-forge/main/nnet/inst/__dtansig.m, trunk/octave-forge/main/nnet/inst/__getx.m, trunk/octave-forge/main/nnet/inst/__init.m, trunk/octave-forge/main/nnet/inst/__mse.m, trunk/octave-forge/main/nnet/inst/__newnetwork.m, trunk/octave-forge/main/nnet/inst/__printAdaptFcn.m, trunk/octave-forge/main/nnet/inst/__printAdaptParam.m, trunk/octave-forge/main/nnet/inst/__printB.m, trunk/octave-forge/main/nnet/inst/__printBiasConnect.m, trunk/octave-forge/main/nnet/inst/__printBiases.m, trunk/octave-forge/main/nnet/inst/__printIW.m, trunk/octave-forge/main/nnet/inst/__printInitFcn.m, trunk/octave-forge/main/nnet/inst/__printInitParam.m, trunk/octave-forge/main/nnet/inst/__printInputConnect.m, trunk/octave-forge/main/nnet/inst/__printInputWeights.m, trunk/octave-forge/main/nnet/inst/__printInputs.m, trunk/octave-forge/main/nnet/inst/__printLW.m, trunk/octave-forge/main/nnet/inst/__printLayerConnect.m, trunk/octave-forge/main/nnet/inst/__printLayerWeights.m, trunk/octave-forge/main/nnet/inst/__printLayers.m, trunk/octave-forge/main/nnet/inst/__printMLPHeader.m, trunk/octave-forge/main/nnet/inst/__printNetworkType.m, trunk/octave-forge/main/nnet/inst/__printNumInputDelays.m, trunk/octave-forge/main/nnet/inst/__printNumInputs.m, trunk/octave-forge/main/nnet/inst/__printNumLayerDelays.m, trunk/octave-forge/main/nnet/inst/__printNumLayers.m, trunk/octave-forge/main/nnet/inst/__printNumOutputs.m, trunk/octave-forge/main/nnet/inst/__printNumTargets.m, trunk/octave-forge/main/nnet/inst/__printOutputConnect.m, trunk/octave-forge/main/nnet/inst/__printOutputs.m, trunk/octave-forge/main/nnet/inst/__printPerformFcn.m, trunk/octave-forge/main/nnet/inst/__printPerformParam.m, trunk/octave-forge/main/nnet/inst/__printTargetConnect.m, trunk/octave-forge/main/nnet/inst/__printTargets.m, trunk/octave-forge/main/nnet/inst/__printTrainFcn.m, trunk/octave-forge/main/nnet/inst/__printTrainParam.m, trunk/octave-forge/main/nnet/inst/__setx.m, trunk/octave-forge/main/nnet/inst/__trainlm.m, trunk/octave-forge/main/nnet/inst/isposint.m, trunk/octave-forge/main/nnet/inst/logsig.m, trunk/octave-forge/main/nnet/inst/min_max.m, trunk/octave-forge/main/nnet/inst/newff.m, trunk/octave-forge/main/nnet/inst/poststd.m, trunk/octave-forge/main/nnet/inst/prestd.m, trunk/octave-forge/main/nnet/inst/purelin.m, trunk/octave-forge/main/nnet/inst/saveMLPStruct.m, trunk/octave-forge/main/nnet/inst/sim.m, trunk/octave-forge/main/nnet/inst/tansig.m, trunk/octave-forge/main/nnet/inst/train.m, trunk/octave-forge/main/nnet/inst/trastd.m, trunk/octave-forge/main/nnet/tests/MLP/MLP9_1_1.m, trunk/octave-forge/main/nnet/tests/MLP/MLP9_2_1.m, trunk/octave-forge/main/nnet/tests/MLP/MLP9_2_2.m, trunk/octave-forge/main/nnet/tests/MLP/MLP9_2_2_1.m, trunk/octave-forge/main/nnet/tests/MLP/MLP9_2_3.m, trunk/octave-forge/main/nnet/tests/MLP/MLP9_5_3.m, trunk/octave-forge/main/octcdf/COPYING, trunk/octave-forge/main/octcdf/inst/ncbyte.m, trunk/octave-forge/main/octcdf/inst/ncchar.m, trunk/octave-forge/main/octcdf/inst/ncdouble.m, trunk/octave-forge/main/octcdf/inst/ncdump.m, trunk/octave-forge/main/octcdf/inst/ncfloat.m, trunk/octave-forge/main/octcdf/inst/ncint.m, trunk/octave-forge/main/octcdf/inst/nclong.m, trunk/octave-forge/main/octcdf/inst/ncshort.m, trunk/octave-forge/main/octcdf/inst/nctest.m, trunk/octave-forge/main/octcdf/src/nctype.m4, trunk/octave-forge/main/octcdf/src/ov-ncatt.cc, trunk/octave-forge/main/octcdf/src/ov-ncatt.h, trunk/octave-forge/main/octcdf/src/ov-ncdim.cc, trunk/octave-forge/main/octcdf/src/ov-ncdim.h, trunk/octave-forge/main/octcdf/src/ov-ncfile.cc, trunk/octave-forge/main/octcdf/src/ov-ncfile.h, trunk/octave-forge/main/octcdf/src/ov-ncvar.cc, trunk/octave-forge/main/octcdf/src/ov-ncvar.h, trunk/octave-forge/main/octcdf/src/ov-netcdf.cc, trunk/octave-forge/main/octcdf/src/ov-netcdf.h, trunk/octave-forge/main/odebvp/COPYING, trunk/octave-forge/main/odebvp/inst/lfdif.m, trunk/octave-forge/main/odepkg/COPYING, trunk/octave-forge/main/odepkg/inst/ode23.m, trunk/octave-forge/main/odepkg/inst/ode45.m, trunk/octave-forge/main/odepkg/inst/ode54.m, trunk/octave-forge/main/odepkg/inst/ode78.m, trunk/octave-forge/main/odepkg/inst/odeget.m, trunk/octave-forge/main/odepkg/inst/odephas2.m, trunk/octave-forge/main/odepkg/inst/odephas3.m, trunk/octave-forge/main/odepkg/inst/odepkg.m, trunk/octave-forge/main/odepkg/inst/odepkg_equations_ilorenz.m, trunk/octave-forge/main/odepkg/inst/odepkg_equations_lorenz.m, trunk/octave-forge/main/odepkg/inst/odepkg_equations_pendulous.m, trunk/octave-forge/main/odepkg/inst/odepkg_equations_roessler.m, trunk/octave-forge/main/odepkg/inst/odepkg_equations_secondorderlag.m, trunk/octave-forge/main/odepkg/inst/odepkg_equations_vanderpol.m, trunk/octave-forge/main/odepkg/inst/odepkg_event_handle.m, trunk/octave-forge/main/odepkg/inst/odepkg_structure_check.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_calcmescd.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_calcscd.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_chemakzo.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_hires.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_implakzo.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_implrober.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_oregonator.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_pollution.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_robertson.m, trunk/octave-forge/main/odepkg/inst/odepkg_testsuite_transistor.m, trunk/octave-forge/main/odepkg/inst/odeplot.m, trunk/octave-forge/main/odepkg/inst/odeprint.m, trunk/octave-forge/main/odepkg/inst/odeset.m, trunk/octave-forge/main/odepkg/src/odepkg_auxiliary_functions.cc, trunk/octave-forge/main/odepkg/src/odepkg_auxiliary_functions.h, trunk/octave-forge/main/odepkg/src/odepkg_octsolver_mebdfdae.cc, trunk/octave-forge/main/odepkg/src/odepkg_octsolver_mebdfi.cc, trunk/octave-forge/main/odepkg/src/odepkg_octsolver_radau.cc, trunk/octave-forge/main/odepkg/src/odepkg_octsolver_radau5.cc, trunk/octave-forge/main/odepkg/src/odepkg_octsolver_rodas.cc, trunk/octave-forge/main/odepkg/src/odepkg_octsolver_seulex.cc, trunk/octave-forge/main/optim/COPYING, trunk/octave-forge/main/optim/inst/LinearRegression.m, trunk/octave-forge/main/optim/inst/battery.m, trunk/octave-forge/main/optim/inst/bfgsmin.m, trunk/octave-forge/main/optim/inst/bfgsmin_example.m, trunk/octave-forge/main/optim/inst/dfdp.m, trunk/octave-forge/main/optim/inst/fmin.m, trunk/octave-forge/main/optim/inst/fmins.m, trunk/octave-forge/main/optim/inst/fminsearch.m, trunk/octave-forge/main/optim/inst/fzero.m, trunk/octave-forge/main/optim/inst/leasqr.m, trunk/octave-forge/main/optim/inst/leasqrdemo.m, trunk/octave-forge/main/optim/inst/rosenbrock.m, trunk/octave-forge/main/optim/inst/samin_example.m, trunk/octave-forge/main/optim/src/__bfgsmin.cc, trunk/octave-forge/main/optim/src/numgradient.cc, trunk/octave-forge/main/optim/src/numhessian.cc, trunk/octave-forge/main/optim/src/samin.cc, trunk/octave-forge/main/optiminterp/COPYING, trunk/octave-forge/main/optiminterp/inst/optiminterp1.m, trunk/octave-forge/main/optiminterp/inst/optiminterp2.m, trunk/octave-forge/main/optiminterp/inst/optiminterp3.m, trunk/octave-forge/main/optiminterp/inst/optiminterp4.m, trunk/octave-forge/main/optiminterp/src/example_optiminterp.F90, trunk/octave-forge/main/optiminterp/src/optimal_interpolation.F90, trunk/octave-forge/main/optiminterp/src/optiminterp.cc, trunk/octave-forge/main/optiminterp/src/optiminterp_wrapper.F90, trunk/octave-forge/main/outliers/COPYING, trunk/octave-forge/main/parallel/COPYING, trunk/octave-forge/main/parallel/inst/getid.m, trunk/octave-forge/main/parallel/inst/scloseall.m, trunk/octave-forge/main/parallel/inst/server.m, trunk/octave-forge/main/parallel/src/connect.cc, trunk/octave-forge/main/parallel/src/pserver.cc, trunk/octave-forge/main/parallel/src/recv.cc, trunk/octave-forge/main/parallel/src/reval.cc, trunk/octave-forge/main/parallel/src/sclose.cc, trunk/octave-forge/main/parallel/src/send.cc, trunk/octave-forge/main/physical-constants/COPYING, trunk/octave-forge/main/physical-constants/gen.py, trunk/octave-forge/main/physical-constants/inst/physical_constant.m, trunk/octave-forge/main/plot/COPYING, trunk/octave-forge/main/plot/inst/dxfwrite.m, trunk/octave-forge/main/plot/inst/gget.m, trunk/octave-forge/main/plot/inst/ginput.m, trunk/octave-forge/main/signal/COPYING, trunk/octave-forge/main/signal/inst/__ellip_ws.m, trunk/octave-forge/main/signal/inst/__ellip_ws_min.m, trunk/octave-forge/main/signal/inst/__power.m, trunk/octave-forge/main/signal/inst/ar_psd.m, trunk/octave-forge/main/signal/inst/arburg.m, trunk/octave-forge/main/signal/inst/aryule.m, trunk/octave-forge/main/signal/inst/bilinear.m, trunk/octave-forge/main/signal/inst/boxcar.m, trunk/octave-forge/main/signal/inst/butter.m, trunk/octave-forge/main/signal/inst/buttord.m, trunk/octave-forge/main/signal/inst/cceps.m, trunk/octave-forge/main/signal/inst/cheb.m, trunk/octave-forge/main/signal/inst/cheb1ord.m, trunk/octave-forge/main/signal/inst/cheb2ord.m, trunk/octave-forge/main/signal/inst/chebwin.m, trunk/octave-forge/main/signal/inst/cheby1.m, trunk/octave-forge/main/signal/inst/cheby2.m, trunk/octave-forge/main/signal/inst/chirp.m, trunk/octave-forge/main/signal/inst/cohere.m, trunk/octave-forge/main/signal/inst/convmtx.m, trunk/octave-forge/main/signal/inst/cplxreal.m, trunk/octave-forge/main/signal/inst/cpsd.m, trunk/octave-forge/main/signal/inst/csd.m, trunk/octave-forge/main/signal/inst/czt.m, trunk/octave-forge/main/signal/inst/dct.m, trunk/octave-forge/main/signal/inst/dct2.m, trunk/octave-forge/main/signal/inst/dctmtx.m, trunk/octave-forge/main/signal/inst/decimate.m, trunk/octave-forge/main/signal/inst/dftmtx.m, trunk/octave-forge/main/signal/inst/ellip.m, trunk/octave-forge/main/signal/inst/ellipdemo.m, trunk/octave-forge/main/signal/inst/ellipord.m, trunk/octave-forge/main/signal/inst/filtic.m, trunk/octave-forge/main/signal/inst/fir1.m, trunk/octave-forge/main/signal/inst/fir2.m, trunk/octave-forge/main/signal/inst/firls.m, trunk/octave-forge/main/signal/inst/freqs.m, trunk/octave-forge/main/signal/inst/freqs_plot.m, trunk/octave-forge/main/signal/inst/gaussian.m, trunk/octave-forge/main/signal/inst/gausswin.m, trunk/octave-forge/main/signal/inst/grpdelay.m, trunk/octave-forge/main/signal/inst/hilbert.m, trunk/octave-forge/main/signal/inst/idct.m, trunk/octave-forge/main/signal/inst/idct2.m, trunk/octave-forge/main/signal/inst/impz.m, trunk/octave-forge/main/signal/inst/interp.m, trunk/octave-forge/main/signal/inst/invfreq.m, trunk/octave-forge/main/signal/inst/invfreqs.m, trunk/octave-forge/main/signal/inst/invfreqz.m, trunk/octave-forge/main/signal/inst/kaiser.m, trunk/octave-forge/main/signal/inst/kaiserord.m, trunk/octave-forge/main/signal/inst/levinson.m, trunk/octave-forge/main/signal/inst/mscohere.m, trunk/octave-forge/main/signal/inst/ncauer.m, trunk/octave-forge/main/signal/inst/pburg.m, trunk/octave-forge/main/signal/inst/polystab.m, trunk/octave-forge/main/signal/inst/pulstran.m, trunk/octave-forge/main/signal/inst/pwelch.m, trunk/octave-forge/main/signal/inst/pyulear.m, trunk/octave-forge/main/signal/inst/qp_kaiser.m, trunk/octave-forge/main/signal/inst/rceps.m, trunk/octave-forge/main/signal/inst/rectpuls.m, trunk/octave-forge/main/signal/inst/rectwin.m, trunk/octave-forge/main/signal/inst/resample.m, trunk/octave-forge/main/signal/inst/residued.m, trunk/octave-forge/main/signal/inst/residuez.m, trunk/octave-forge/main/signal/inst/sawtooth.m, trunk/octave-forge/main/signal/inst/sftrans.m, trunk/octave-forge/main/signal/inst/sgolay.m, trunk/octave-forge/main/signal/inst/sgolayfilt.m, trunk/octave-forge/main/signal/inst/sos2tf.m, trunk/octave-forge/main/signal/inst/sos2zp.m, trunk/octave-forge/main/signal/inst/specgram.m, trunk/octave-forge/main/signal/inst/tf2sos.m, trunk/octave-forge/main/signal/inst/tfe.m, trunk/octave-forge/main/signal/inst/tfestimate.m, trunk/octave-forge/main/signal/inst/triang.m, trunk/octave-forge/main/signal/inst/tripuls.m, trunk/octave-forge/main/signal/inst/xcorr.m, trunk/octave-forge/main/signal/inst/xcorr2.m, trunk/octave-forge/main/signal/inst/xcov.m, trunk/octave-forge/main/signal/inst/zp2sos.m, trunk/octave-forge/main/signal/inst/zplane.m, trunk/octave-forge/main/signal/src/remez.cc, trunk/octave-forge/main/specfun/COPYING, trunk/octave-forge/main/specfun/inst/Ci.m, trunk/octave-forge/main/specfun/inst/Si.m, trunk/octave-forge/main/specfun/inst/cosint.m, trunk/octave-forge/main/specfun/inst/dirac.m, trunk/octave-forge/main/specfun/inst/ellipj.m, trunk/octave-forge/main/specfun/inst/ellipke.m, trunk/octave-forge/main/specfun/inst/erfcinv.m, trunk/octave-forge/main/specfun/inst/erfcx.m, trunk/octave-forge/main/specfun/inst/expint.m, trunk/octave-forge/main/specfun/inst/expint_E1.m, trunk/octave-forge/main/specfun/inst/expint_Ei.m, trunk/octave-forge/main/specfun/inst/heaviside.m, trunk/octave-forge/main/specfun/inst/lambertw.m, trunk/octave-forge/main/specfun/inst/psi.m, trunk/octave-forge/main/specfun/inst/sinint.m, trunk/octave-forge/main/specfun/inst/zeta.m, trunk/octave-forge/main/specfun/src/ellipj.cc, trunk/octave-forge/main/splines/COPYING, trunk/octave-forge/main/splines/inst/csape.m, trunk/octave-forge/main/splines/inst/csapi.m, trunk/octave-forge/main/splines/inst/fnder.m, trunk/octave-forge/main/splines/inst/fnplt.m, trunk/octave-forge/main/statistics/inst/anovan.m, trunk/octave-forge/main/statistics/inst/boxplot.m, trunk/octave-forge/main/statistics/inst/geomean.m, trunk/octave-forge/main/statistics/inst/harmmean.m, trunk/octave-forge/main/statistics/inst/histfit.m, trunk/octave-forge/main/statistics/inst/linkage.m, trunk/octave-forge/main/statistics/inst/mad.m, trunk/octave-forge/main/statistics/inst/mvnrnd.m, trunk/octave-forge/main/statistics/inst/nanmax.m, trunk/octave-forge/main/statistics/inst/nanmean.m, trunk/octave-forge/main/statistics/inst/nanmedian.m, trunk/octave-forge/main/statistics/inst/nanmin.m, trunk/octave-forge/main/statistics/inst/nanstd.m, trunk/octave-forge/main/statistics/inst/nansum.m, trunk/octave-forge/main/statistics/inst/pdist.m, trunk/octave-forge/main/statistics/inst/prctile.m, trunk/octave-forge/main/statistics/inst/regress.m, trunk/octave-forge/main/statistics/inst/squareform.m, trunk/octave-forge/main/statistics/inst/tabulate.m, trunk/octave-forge/main/statistics/inst/trimmean.m, trunk/octave-forge/main/statistics/inst/zscore.m, trunk/octave-forge/main/strings/inst/base64decode.m, trunk/octave-forge/main/strings/inst/cstrcmp.m, trunk/octave-forge/main/strings/inst/editdistance.m, trunk/octave-forge/main/strings/inst/strjoin.m, trunk/octave-forge/main/strings/inst/strtrim.m, trunk/octave-forge/main/struct/COPYING, trunk/octave-forge/main/struct/inst/getfields.m, trunk/octave-forge/main/struct/inst/setfields.m, trunk/octave-forge/main/symbolic/COPYING, trunk/octave-forge/main/symbolic/inst/findsym.m, trunk/octave-forge/main/symbolic/inst/poly2sym.m, trunk/octave-forge/main/symbolic/inst/splot.m, trunk/octave-forge/main/symbolic/inst/sym2poly.m, trunk/octave-forge/main/symbolic/inst/symfsolve.m, trunk/octave-forge/main/symbolic/src/differentiate.cc, trunk/octave-forge/main/symbolic/src/findsymbols.cc, trunk/octave-forge/main/symbolic/src/numden.cc, trunk/octave-forge/main/symbolic/src/op-ex-mat.cc, trunk/octave-forge/main/symbolic/src/op-ex.cc, trunk/octave-forge/main/symbolic/src/op-vpa.cc, trunk/octave-forge/main/symbolic/src/ov-ex-mat.cc, trunk/octave-forge/main/symbolic/src/ov-ex-mat.h, trunk/octave-forge/main/symbolic/src/ov-ex.cc, trunk/octave-forge/main/symbolic/src/ov-ex.h, trunk/octave-forge/main/symbolic/src/ov-relational.cc, trunk/octave-forge/main/symbolic/src/ov-relational.h, trunk/octave-forge/main/symbolic/src/ov-vpa.cc, trunk/octave-forge/main/symbolic/src/ov-vpa.h, trunk/octave-forge/main/symbolic/src/probably_prime.cc, trunk/octave-forge/main/symbolic/src/sumterms.cc, trunk/octave-forge/main/symbolic/src/sym-bool.cc, trunk/octave-forge/main/symbolic/src/sym-create.cc, trunk/octave-forge/main/symbolic/src/sym-ops.h, trunk/octave-forge/main/symbolic/src/symbols.cc, trunk/octave-forge/main/symbolic/src/syminfo.cc, trunk/octave-forge/main/symbolic/src/symlsolve.cc, trunk/octave-forge/main/time/COPYING, trunk/octave-forge/main/time/inst/datesplit.m, trunk/octave-forge/main/time/inst/daysact.m, trunk/octave-forge/main/vrml/COPYING, trunk/octave-forge/main/zenity/COPYING, trunk/octave-forge/main/zenity/inst/zenity_calendar.m, trunk/octave-forge/main/zenity/inst/zenity_entry.m, trunk/octave-forge/main/zenity/inst/zenity_file_selection.m, trunk/octave-forge/main/zenity/inst/zenity_list.m, trunk/octave-forge/main/zenity/inst/zenity_message.m, trunk/octave-forge/main/zenity/inst/zenity_notification.m, trunk/octave-forge/main/zenity/inst/zenity_progress.m, trunk/octave-forge/main/zenity/inst/zenity_scale.m, trunk/octave-forge/main/zenity/inst/zenity_text_info.m, trunk/octave-forge/nonfree/arpack/COPYING, trunk/octave-forge/nonfree/arpack/inst/svds.m, trunk/octave-forge/nonfree/arpack/src/eigs-base.cc, trunk/octave-forge/nonfree/arpack/src/eigs.cc, trunk/octave-forge/nonfree/gpc/COPYING, trunk/octave-forge/nonfree/gpc/inst/gpc_plot.m, trunk/octave-forge/nonfree/gpc/src/Makefile.am, trunk/octave-forge/nonfree/gpc/src/acinclude.m4, trunk/octave-forge/nonfree/gpc/src/configure.in, trunk/octave-forge/nonfree/gpc/src/gpc_clip.cc, trunk/octave-forge/nonfree/gpc/src/gpc_create.cc, trunk/octave-forge/nonfree/gpc/src/gpc_get.cc, trunk/octave-forge/nonfree/gpc/src/gpc_is_polygon.cc, trunk/octave-forge/nonfree/gpc/src/gpc_read.cc, trunk/octave-forge/nonfree/gpc/src/gpc_tristrip.cc, trunk/octave-forge/nonfree/gpc/src/gpc_write.cc, trunk/octave-forge/nonfree/gpc/src/octave-gpc.cc, trunk/octave-forge/nonfree/gpc/src/octave-gpc.h, trunk/octave-forge/texinfo.tex: More copyright updates 2008-01-31 19:45 hauberg * trunk/octave-forge/extra/MacOSX/DESCRIPTION, trunk/octave-forge/extra/NaN/DESCRIPTION, trunk/octave-forge/extra/Windows/DESCRIPTION, trunk/octave-forge/extra/ad/DESCRIPTION, trunk/octave-forge/extra/bim/DESCRIPTION, trunk/octave-forge/extra/civil/DESCRIPTION, trunk/octave-forge/extra/engine/DESCRIPTION, trunk/octave-forge/extra/fpl/DESCRIPTION, trunk/octave-forge/extra/graceplot/DESCRIPTION, trunk/octave-forge/extra/integration/DESCRIPTION, trunk/octave-forge/extra/java/DESCRIPTION, trunk/octave-forge/extra/jhandles/DESCRIPTION, trunk/octave-forge/extra/mapping/DESCRIPTION, trunk/octave-forge/extra/msh/DESCRIPTION, trunk/octave-forge/extra/multicore/DESCRIPTION, trunk/octave-forge/extra/ode/DESCRIPTION, trunk/octave-forge/extra/pdb/DESCRIPTION, trunk/octave-forge/extra/secs1d/DESCRIPTION, DESCRIPTION, trunk/octave-forge/extra/soctcl/DESCRIPTION, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/extra/tk_octave/DESCRIPTION, trunk/octave-forge/extra/triangular/DESCRIPTION, trunk/octave-forge/extra/tsa/DESCRIPTION, trunk/octave-forge/extra/xraylib/DESCRIPTION: Update version numbers 2007-12-19 02:11 cdf * DESCRIPTION, PKG_ADD, PKG_DEL: fixed relative path to subdirectories in PKG_ADD/PKG_DEL 2007-12-05 16:24 adb014 * trunk/octave-forge/extra/MacOSX/DESCRIPTION, trunk/octave-forge/extra/NaN/DESCRIPTION, trunk/octave-forge/extra/Windows/DESCRIPTION, trunk/octave-forge/extra/bim/DESCRIPTION, trunk/octave-forge/extra/civil/DESCRIPTION, trunk/octave-forge/extra/engine/DESCRIPTION, trunk/octave-forge/extra/fpl/DESCRIPTION, trunk/octave-forge/extra/graceplot/DESCRIPTION, trunk/octave-forge/extra/integration/DESCRIPTION, trunk/octave-forge/extra/java/DESCRIPTION, trunk/octave-forge/extra/jhandles/DESCRIPTION, trunk/octave-forge/extra/mapping/DESCRIPTION, trunk/octave-forge/extra/msh/DESCRIPTION, trunk/octave-forge/extra/pdb/DESCRIPTION, trunk/octave-forge/extra/secs1d/DESCRIPTION, DESCRIPTION, trunk/octave-forge/extra/soctcl/DESCRIPTION, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/extra/triangular/DESCRIPTION, trunk/octave-forge/extra/tsa/DESCRIPTION, trunk/octave-forge/extra/xraylib/DESCRIPTION, trunk/octave-forge/language/pt_BR/DESCRIPTION, trunk/octave-forge/main/audio/DESCRIPTION, trunk/octave-forge/main/combinatorics/DESCRIPTION, trunk/octave-forge/main/comm/DESCRIPTION, trunk/octave-forge/main/control/DESCRIPTION, trunk/octave-forge/main/econometrics/DESCRIPTION, trunk/octave-forge/main/fixed/DESCRIPTION, trunk/octave-forge/main/fixed/doc/configure.add, trunk/octave-forge/main/fixed/src/configure.base, trunk/octave-forge/main/general/DESCRIPTION, trunk/octave-forge/main/gsl/DESCRIPTION, trunk/octave-forge/main/ident/DESCRIPTION, trunk/octave-forge/main/image/DESCRIPTION, trunk/octave-forge/main/info-theory/DESCRIPTION, trunk/octave-forge/main/io/DESCRIPTION, trunk/octave-forge/main/irsa/DESCRIPTION, trunk/octave-forge/main/linear-algebra/DESCRIPTION, trunk/octave-forge/main/nnet/DESCRIPTION, trunk/octave-forge/main/odebvp/DESCRIPTION, trunk/octave-forge/main/optiminterp/DESCRIPTION, trunk/octave-forge/main/outliers/DESCRIPTION, trunk/octave-forge/main/parallel/DESCRIPTION, trunk/octave-forge/main/physical-constants/DESCRIPTION, trunk/octave-forge/main/plot/DESCRIPTION, trunk/octave-forge/main/signal/DESCRIPTION, trunk/octave-forge/main/specfun/DESCRIPTION, trunk/octave-forge/main/special-matrix/DESCRIPTION, trunk/octave-forge/main/splines/DESCRIPTION, trunk/octave-forge/main/statistics/DESCRIPTION, trunk/octave-forge/main/strings/DESCRIPTION, trunk/octave-forge/main/struct/DESCRIPTION, trunk/octave-forge/main/symbolic/DESCRIPTION, trunk/octave-forge/main/time/DESCRIPTION, trunk/octave-forge/main/vrml/DESCRIPTION, trunk/octave-forge/main/zenity/DESCRIPTION, trunk/octave-forge/nonfree/arpack/DESCRIPTION, trunk/octave-forge/nonfree/splines/DESCRIPTION: Update the version numbers. All packages need new version numbers due to package differences in the CVS to SVN transition 2007-09-29 06:37 adb014 * src/Makefile, src/Ubern.cc, src/Ubern.h, src/Ucompconst.cc, src/Ucomplap.cc, src/Uscharfettergummel.cc, src/Utilities: Reorganise src/ directory to better meet the packaging requirements of Fedora and to close resemeble the other packages 2007-09-24 23:38 adb014 * trunk/octave-forge/extra/MacOSX/DESCRIPTION, trunk/octave-forge/extra/Windows/DESCRIPTION, trunk/octave-forge/extra/civil/DESCRIPTION, trunk/octave-forge/extra/engine/DESCRIPTION, trunk/octave-forge/extra/fpl/DESCRIPTION, trunk/octave-forge/extra/graceplot/DESCRIPTION, trunk/octave-forge/extra/integration/DESCRIPTION, trunk/octave-forge/extra/mapping/DESCRIPTION, trunk/octave-forge/extra/msh/DESCRIPTION, trunk/octave-forge/extra/pdb/DESCRIPTION, trunk/octave-forge/extra/secs1d/DESCRIPTION, DESCRIPTION, trunk/octave-forge/extra/soctcl/DESCRIPTION, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/extra/triangular/DESCRIPTION, trunk/octave-forge/extra/xraylib/DESCRIPTION, trunk/octave-forge/language/pt_BR/DESCRIPTION, trunk/octave-forge/main/audio/DESCRIPTION, trunk/octave-forge/main/combinatorics/DESCRIPTION, trunk/octave-forge/main/comm/DESCRIPTION, trunk/octave-forge/main/control/DESCRIPTION, trunk/octave-forge/main/econometrics/DESCRIPTION, trunk/octave-forge/main/fixed/DESCRIPTION, trunk/octave-forge/main/fixed/src/configure.base, trunk/octave-forge/main/general/DESCRIPTION, trunk/octave-forge/main/gsl/DESCRIPTION, trunk/octave-forge/main/ident/DESCRIPTION, trunk/octave-forge/main/image/DESCRIPTION, trunk/octave-forge/main/info-theory/DESCRIPTION, trunk/octave-forge/main/io/DESCRIPTION, trunk/octave-forge/main/irsa/DESCRIPTION, trunk/octave-forge/main/miscellaneous/DESCRIPTION, trunk/octave-forge/main/nnet/DESCRIPTION, trunk/octave-forge/main/outliers/DESCRIPTION, trunk/octave-forge/main/parallel/DESCRIPTION, trunk/octave-forge/main/physical-constants/DESCRIPTION, trunk/octave-forge/main/sockets/DESCRIPTION, trunk/octave-forge/main/specfun/DESCRIPTION, trunk/octave-forge/main/special-matrix/DESCRIPTION, trunk/octave-forge/main/splines/DESCRIPTION, trunk/octave-forge/main/strings/DESCRIPTION, trunk/octave-forge/main/struct/DESCRIPTION, trunk/octave-forge/main/symbolic/DESCRIPTION, trunk/octave-forge/main/time/DESCRIPTION, trunk/octave-forge/main/vrml/DESCRIPTION, trunk/octave-forge/main/zenity/DESCRIPTION, trunk/octave-forge/nonfree/splines/DESCRIPTION: Update version numbers for modified packages 2007-09-24 15:15 opoplawski * trunk/octave-forge/Makefile, trunk/octave-forge/doc/Makefile, trunk/octave-forge/extra/MacOSX/Makefile, trunk/octave-forge/extra/secs1d/src/Makefile, src/Makefile, trunk/octave-forge/extra/symband/Makefile, trunk/octave-forge/extra/triangular/Makefile, trunk/octave-forge/extra/xraylib/src/Makefile, trunk/octave-forge/main/comm/Makefile, trunk/octave-forge/main/fixed/Makefile, trunk/octave-forge/main/gsl/Makefile, trunk/octave-forge/main/octcdf/Makefile, trunk/octave-forge/main/odepkg/Makefile, trunk/octave-forge/main/optim/Makefile, trunk/octave-forge/main/vrml/Makefile, trunk/octave-forge/packages/package_Makefile.in: Call make with $(MAKE) instead of make 2007-07-13 15:07 goffioul * src/Utilities/Makefile: use stripping feature of mkoctfile instead 2007-07-11 19:23 adb014 * trunk/octave-forge/doc/htdocs/packages.in, trunk/octave-forge/extra/MacOSX/DESCRIPTION, DESCRIPTION, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/language/pt_BR/DESCRIPTION, trunk/octave-forge/main/comm/DESCRIPTION, trunk/octave-forge/main/econometrics/DESCRIPTION, trunk/octave-forge/main/fixed/DESCRIPTION, trunk/octave-forge/main/fixed/src/configure.base, trunk/octave-forge/main/odepkg/DESCRIPTION, trunk/octave-forge/main/optiminterp/DESCRIPTION, trunk/octave-forge/main/signal/DESCRIPTION, trunk/octave-forge/main/statistics/DESCRIPTION, trunk/octave-forge/main/vrml/DESCRIPTION, trunk/octave-forge/nonfree/arpack/DESCRIPTION: Update version numbers of changed packages since last release 2007-06-27 11:19 goffioul * PKG_ADD: fix for gmsh/dx executable lookup 2007-06-27 00:10 adb014 * PKG_ADD: Don't use which as this won't work on Windows.. Use Octave file_on_path instead 2007-05-25 21:48 adb014 * DESCRIPTION: 2d and not 1D in description 2007-05-24 20:34 adb014 * trunk/octave-forge/AUTHORS, trunk/octave-forge/doc/htdocs/packages.in, INDEX, trunk/octave-forge/extra/tsa/DESCRIPTION, trunk/octave-forge/extra/tsa/INDEX, trunk/octave-forge/main/combinatorics/DESCRIPTION, trunk/octave-forge/main/miscellaneous/DESCRIPTION, trunk/octave-forge/main/nnet/DESCRIPTION, trunk/octave-forge/main/specfun/DESCRIPTION: various versioning and documentation fixes 2007-05-22 20:34 cdf * inst/Utilities/Uscharfettergummel3.m: removed unwanted output during test 2007-05-22 20:19 adb014 * trunk/octave-forge/extra/secs1d/PKG_ADD, trunk/octave-forge/extra/secs1d/PKG_DEL, PKG_ADD, PKG_DEL: Get PKG_ADD/PKG_DEL command exclusion right this time 2007-05-22 20:15 adb014 * trunk/octave-forge/extra/secs1d/PKG_ADD, trunk/octave-forge/extra/secs1d/PKG_DEL, PKG_ADD, PKG_DEL: Only run PKG_ADD and PKG_DEL commands if the package is installed 2007-05-22 19:37 adb014 * trunk/octave-forge/extra/secs1d/src/Makefile, src/Makefile: 'make' and not 'Make' 2007-05-22 19:16 cdf * INDEX, inst/DDGOX/DDGOXnlpoisson.m, inst/QDDGOX/QDDGOXcompdens.m, inst/QDDGOX/QDDGOXddcurrent.m, inst/QDDGOX/QDDGOXgummelmap.m, inst/QDDGOX/QDDGOXnlpoisson.m, inst/ThDDGOX/ThDDGOXMOBN0STD.m, inst/ThDDGOX/ThDDGOXMOBN1STD.m, inst/ThDDGOX/ThDDGOXMOBP0STD.m, inst/ThDDGOX/ThDDGOXMOBP1STD.m, inst/ThDDGOX/ThDDGOXTWN0STD.m, inst/ThDDGOX/ThDDGOXTWN1STD.m, inst/ThDDGOX/ThDDGOXTWP0STD.m, inst/ThDDGOX/ThDDGOXTWP1STD.m, inst/ThDDGOX/ThDDGOXddcurrent.m, inst/ThDDGOX/ThDDGOXelectron_driftdiffusion.m, inst/ThDDGOX/ThDDGOXeletiteration.m, inst/ThDDGOX/ThDDGOXgummelmap.m, inst/ThDDGOX/ThDDGOXheatequation.m, inst/ThDDGOX/ThDDGOXhole_driftdiffusion.m, inst/ThDDGOX/ThDDGOXinneriteration.m, inst/ThDDGOX/ThDDGOXnlpoisson.m, inst/ThDDGOX/ThDDGOXthermaliteration.m, inst/ThDDGOX/ThDDGOXupdateelectron_temp.m, inst/ThDDGOX/ThDDGOXupdatehole_temp.m, inst/ThDDGOX/ThDDGOXupdatelattice_temp.m, inst/Utilities/UDXappend2Ddata.m, inst/Utilities/Ucoloredrubbersheet.cfg, inst/Utilities/Ucoloredrubbersheet.net, inst/Utilities/Ucoloredrubbersheetseries.net, inst/Utilities/Udescaling.m, inst/Utilities/Udrawcurrent.net, inst/Utilities/Udrawedge.m, inst/Utilities/Ufvsgcurrent2.m, inst/Utilities/Ufvsgcurrent3.m, inst/Utilities/Umsh2pdetool.m, inst/Utilities/Umshcreatemesh.m, inst/Utilities/Updemesh.m, inst/Utilities/Updesurf.m, inst/Utilities/Urubbersheet.net, inst/Utilities/Uscaling.m, inst/Utilities/Uscharfettergummel3.m, inst/Utilities/Ushowgrid.cfg, inst/Utilities/Ushowgrid.net, inst/Utilities/Usubmesh.m, inst/Utilities/constants.m, inst/Utilities/constants.mat, src/Utilities/Makefile: package brought up to date with main repository before release 2007-05-17 22:40 adb014 * trunk/octave-forge/admin/release.sh, trunk/octave-forge/doc/htdocs, trunk/octave-forge/doc/htdocs/.cvsignore, trunk/octave-forge/doc/htdocs/packages.in, trunk/octave-forge/extra/MacOSX/DESCRIPTION, INDEX, trunk/octave-forge/extra/symband/DESCRIPTION, trunk/octave-forge/main/fixed/DESCRIPTION, trunk/octave-forge/main/fixed/doc/configure.add, trunk/octave-forge/main/fixed/src/configure.base, trunk/octave-forge/main/sockets/INDEX, trunk/octave-forge/main/vrml/DESCRIPTION: More doc, indexing, versioning fixes 2007-05-17 20:29 adb014 * trunk/octave-forge/extra/secs1d/INDEX, INDEX, trunk/octave-forge/main/INDEX, trunk/octave-forge/main/signal/INDEX: Indexing updates 2007-05-17 20:26 adb014 * inst/Utilities/Makefile, inst/Utilities/Ubern.cc, inst/Utilities/Ubern.h, inst/Utilities/Ucompconst.cc, inst/Utilities/Ucomplap.cc, inst/Utilities/Ucompmass2.cc, inst/Utilities/Uscharfettergummel.cc: Remove duplicate files 2007-04-04 21:10 cdf * ., COPYING, DESCRIPTION, PKG_ADD, PKG_DEL, README, inst, inst/DDGOX, inst/DDGOX/DDGOXddcurrent.m, inst/DDGOX/DDGOXelectron_driftdiffusion.m, inst/DDGOX/DDGOXgummelmap.m, inst/DDGOX/DDGOXhole_driftdiffusion.m, inst/DDGOX/DDGOXnlpoisson.m, inst/DDGOX/DDGOXplotresults.m, inst/DDGOXT, inst/DDGOXT/DDGOXTelectron_driftdiffusion.m, inst/DDGOXT/DDGOXTgummelmap.m, inst/DDGOXT/DDGOXThole_driftdiffusion.m, inst/METLINES, inst/METLINES/METLINEScapcomp.m, inst/METLINES/METLINESdefinepermittivity.m, inst/QDDGOX, inst/QDDGOX/QDDGOXcompdens.m, inst/QDDGOX/QDDGOXddcurrent.m, inst/QDDGOX/QDDGOXgummelmap.m, inst/QDDGOX/QDDGOXnlpoisson.m, inst/ThDDGOX, inst/ThDDGOX/ThDDGOXddcurrent.m, inst/ThDDGOX/ThDDGOXelectron_driftdiffusion.m, inst/ThDDGOX/ThDDGOXgummelmap.m, inst/ThDDGOX/ThDDGOXheatequation.m, inst/ThDDGOX/ThDDGOXhole_driftdiffusion.m, inst/ThDDGOX/ThDDGOXinneriteration.m, inst/ThDDGOX/ThDDGOXnlpoisson.m, inst/Utilities, inst/Utilities/Makefile, inst/Utilities/UDXappend2Ddata.m, inst/Utilities/UDXoutput2Ddata.m, inst/Utilities/UDXoutput2Dtimeseries.m, inst/Utilities/URREcyclingpattern.m, inst/Utilities/Ubern.cc, inst/Utilities/Ubern.h, inst/Utilities/Ubern.m, inst/Utilities/Ucoloredrubbersheet.cfg, inst/Utilities/Ucoloredrubbersheet.net, inst/Utilities/Ucoloredrubbersheetseries.net, inst/Utilities/Ucolumns.m, inst/Utilities/Ucompconst.cc, inst/Utilities/Ucompconst.m, inst/Utilities/Ucomplap.cc, inst/Utilities/Ucomplap.m, inst/Utilities/Ucompmass2.cc, inst/Utilities/Ucompmass2.m, inst/Utilities/Udescaling.m, inst/Utilities/Udopdepmob.m, inst/Utilities/Udrawedge.m, inst/Utilities/Udriftdepmob.m, inst/Utilities/Udriftdiffusion.m, inst/Utilities/Udriftdiffusion2.m, inst/Utilities/Ufielddepmob.m, inst/Utilities/Ufvsgcurrent.m, inst/Utilities/Ufvsgcurrent2.m, inst/Utilities/Uinvfermidirac.m, inst/Utilities/Uise2pde.m, inst/Utilities/Ujoinmeshes.m, inst/Utilities/Umeshproperties.m, inst/Utilities/Umsh2pdetool.m, inst/Utilities/Umshcreatemesh.m, inst/Utilities/Unodesonside.m, inst/Utilities/Updegrad.m, inst/Utilities/Updemesh.m, inst/Utilities/Updesurf.m, inst/Utilities/Urows.m, inst/Utilities/Urrextrapolation.m, inst/Utilities/Urubbersheet.net, inst/Utilities/Uscaling.m, inst/Utilities/Uscharfettergummel.cc, inst/Utilities/Uscharfettergummel.m, inst/Utilities/Uscharfettergummel2.m, inst/Utilities/Ushowgrid.cfg, inst/Utilities/Ushowgrid.net, inst/Utilities/Usmoothguess.m, inst/Utilities/Ustructmesh.m, inst/Utilities/Ustructmesh_left.m, inst/Utilities/Ustructmesh_random.m, inst/Utilities/Ustructmesh_right.m, inst/Utilities/Usubdomains2.m, inst/Utilities/Usubmesh.m, inst/Utilities/Utemplogm.m, inst/Utilities/constants.m, inst/Utilities/constants.mat, src, src/Makefile, src/Utilities, src/Utilities/Makefile, src/Utilities/Ubern.cc, src/Utilities/Ubern.h, src/Utilities/Ucompconst.cc, src/Utilities/Ucomplap.cc, src/Utilities/Uscharfettergummel.cc: added secs2d package