From: <cd...@us...> - 2008-10-18 16:37:42
|
Revision: 5381 http://octave.svn.sourceforge.net/octave/?rev=5381&view=rev Author: cdf Date: 2008-10-18 16:37:37 +0000 (Sat, 18 Oct 2008) Log Message: ----------- resync Modified Paths: -------------- trunk/octave-forge/extra/ocs/INDEX trunk/octave-forge/extra/ocs/inst/ASM/ASMbuildsystem.m trunk/octave-forge/extra/ocs/inst/SBN/Mschichmanhodgesmosfet.m trunk/octave-forge/extra/ocs/inst/TST/TSTbweuler.m trunk/octave-forge/extra/ocs/inst/TST/TSTthetamethod.m trunk/octave-forge/extra/ocs/inst/UTL/UTLsbnserver.m Added Paths: ----------- trunk/octave-forge/extra/ocs/inst/TST/TSTbweulernr.m Modified: trunk/octave-forge/extra/ocs/INDEX =================================================================== --- trunk/octave-forge/extra/ocs/INDEX 2008-10-15 13:42:27 UTC (rev 5380) +++ trunk/octave-forge/extra/ocs/INDEX 2008-10-18 16:37:37 UTC (rev 5381) @@ -6,17 +6,8 @@ PRSIFFparse Time Stepping Functions TSTbweuler - TSTBWEFUNJAC0 - TSTBWEFUNJAC1 - TSTBWEFUNRES0 - TSTBWEFUNRES1 - TSTBWEFUNUP1 TSTdaspk - TSTDASPKFUNJAC - TSTDASPKFUNRES TSTthetamethod - TSTTHETAFUNJAC1 - TSTTHETAFUNRES1 Non Linear Solvers NLSstationary NLSnewtonraphson @@ -28,9 +19,7 @@ Mcurrentsources Mdiode Minductors - Mnmoscap Mnmosfet - Mpdesympnjunct Mpmosfet Mresistors Mschichmanhodgesmosfet Modified: trunk/octave-forge/extra/ocs/inst/ASM/ASMbuildsystem.m =================================================================== --- trunk/octave-forge/extra/ocs/inst/ASM/ASMbuildsystem.m 2008-10-15 13:42:27 UTC (rev 5380) +++ trunk/octave-forge/extra/ocs/inst/ASM/ASMbuildsystem.m 2008-10-18 16:37:37 UTC (rev 5381) @@ -20,7 +20,7 @@ ## author: cu...@ma... ## -*- texinfo -*- -## @deftypefn{Function File} [@var{A}, @var{Jac}, @var{res} ] = @ +## @deftypefn{Function File} [@var{A}, @var{Jac}, @var{res} ] = @ ## ASMbuildsystem (@var{instruct}, @var{x}, @var{t}) ## ## Cycles through the circuit description structure @var{instruct} Modified: trunk/octave-forge/extra/ocs/inst/SBN/Mschichmanhodgesmosfet.m =================================================================== --- trunk/octave-forge/extra/ocs/inst/SBN/Mschichmanhodgesmosfet.m 2008-10-15 13:42:27 UTC (rev 5380) +++ trunk/octave-forge/extra/ocs/inst/SBN/Mschichmanhodgesmosfet.m 2008-10-18 16:37:37 UTC (rev 5381) @@ -40,17 +40,18 @@ ## ## Parameters for all the above models are: ## @itemize -## @item rd -> parasitic resistance between drain and source -## @item W -> MOSFET width -## @item L -> channel length -## @item mu0 -> reference value for mobility -## @item Vth -> threshold voltage -## @item Cox -> oxide capacitance -## @item Cgs -> gate-source capacitance -## @item Cgd -> gate-drain capacitance -## @item Cgb -> gate-bulk capacitance -## @item Csb -> source-bulk capacitance -## @item Cdb -> drain-bulk capacitance +## @item rd -> parasitic resistance between drain and source +## @item W -> MOSFET width +## @item L -> channel length +## @item mu0 -> reference value for mobility +## @item Vth -> threshold voltage +## @item Cox -> oxide capacitance +## @item Cgs -> gate-source capacitance +## @item Cgd -> gate-drain capacitance +## @item Cgb -> gate-bulk capacitance +## @item Csb -> source-bulk capacitance +## @item Cdb -> drain-bulk capacitance +## @item Tshift -> shift for reference temperature on MOSFETs (default 0) ## @end itemize ## ## @seealso{ PRSiffparse, ASMinitsystem, ASMbuildsystem, the IFF file @@ -69,6 +70,7 @@ Cox = 1e-9; Cgb = Cox; Cgs=Cgd=Csb=Cdb=.1*Cox; + Tshift = 0; for ii=1:length(parameternames) eval([parameternames{ii} "=",... @@ -76,7 +78,7 @@ endfor [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = \ - nmos(extvar,mu0,Cox,W,L,Vth,rd); + nmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift); vg = extvar(1); vs = extvar(2); @@ -151,7 +153,7 @@ endfor [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = \ - pmos(extvar,mu0,Cox,W,L,Vth,rd); + pmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift); vg = extvar(1); @@ -227,7 +229,7 @@ endfor [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = \ - nmos(extvar,mu0,Cox,W,L,Vth,rd); + nmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift); vg = extvar(1); vs = extvar(2); @@ -301,7 +303,7 @@ endfor [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = \ - pmos(extvar,mu0,Cox,W,L,Vth,rd); + pmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift); vg = extvar(1); vs = extvar(2); @@ -376,7 +378,7 @@ endfor [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = \ - nmos(extvar,mu0,Cox,W,L,Vth,rd); + nmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift); vg = extvar(1); vs = extvar(2); @@ -451,7 +453,7 @@ endfor [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = \ - pmos(extvar,mu0,Cox,W,L,Vth,rd); + pmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift); vg = extvar(1); vs = extvar(2); @@ -515,7 +517,7 @@ endfunction -function [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = nmos(extvar,mu0,Cox,W,L,Vth,rd) +function [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = nmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift) ##Computes values for nmos case vg = extvar(1); @@ -523,10 +525,10 @@ vd = extvar(3); vb = extvar(4); T = max(extvar(5),0); + + k = mu0*Cox*((T + Tshift)/300)^(-3/2)*W/L; + dkdT = mu0*Cox*W*(-3/2)*((T + Tshift)/300)^(-5/2)*(1/300)/L; - k = mu0*Cox*(T/300)^(-3/2)*W/L; - dkdT = mu0*Cox*W*(-3/2)*(T/300)^(-5/2)*(1/300)/L; - vgs = vg-vs; vds = vd-vs; @@ -567,7 +569,7 @@ endfunction -function [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = pmos(extvar,mu0,Cox,W,L,Vth,rd) +function [gm,gd,ids,didT,P,dPdT,dPdvgs,dPdvds] = pmos(extvar,mu0,Cox,W,L,Vth,rd,Tshift) ##Computes values for pmos case vg = extvar(1); @@ -576,8 +578,8 @@ vb = extvar(4); T = extvar(5); - k = - mu0 * Cox * (T/300)^(-3/2) *W/L; - dkdT = - mu0 * Cox * W *(-3/2)*(T/300)^(-5/2)*(1/300)/L; + k = - mu0 * Cox * ((T + Tshift)/300)^(-3/2) *W/L; + dkdT = - mu0 * Cox * W *(-3/2)*((T + Tshift)/300)^(-5/2)*(1/300)/L; vgs = vg-vs; vds = vd-vs; Modified: trunk/octave-forge/extra/ocs/inst/TST/TSTbweuler.m =================================================================== --- trunk/octave-forge/extra/ocs/inst/TST/TSTbweuler.m 2008-10-15 13:42:27 UTC (rev 5380) +++ trunk/octave-forge/extra/ocs/inst/TST/TSTbweuler.m 2008-10-18 16:37:37 UTC (rev 5381) @@ -20,10 +20,10 @@ ## -*- texinfo -*- ## -## @deftypefn{Function File} {[@var{out}] =} TSTbweuler @ -## (@var{cirstruct}, @var{x},@var{t}, @var{tol},@ -## @var{maxit},@var{dmp}, @var{pltvars},@ -## @var{verbosity} ,@var{dae_fun}); +## @deftypefn{Function File} {[@var{out}, @var{niter}] =} @ +## TSTbweuler(@var{cirstruct}, @var{x},@var{t}, @var{tol},@ +## @var{maxit},@var{dmp}, @var{pltvars},@ +## @var{verbosity} ,@var{dae_fun}); ## ## Performs a transient simulation of the system described by ## @var{cirstruct} over the time interval @var{t} using the backward @@ -36,7 +36,7 @@ ## NLSnewtonraphson. ## ## The output @var{out} will contain the value of the state vector at -## each point of @var{t} +## each point of @var{t}. ## ## The optional parameter @var{verbosity} controls the amount of ## output produced: @@ -55,13 +55,16 @@ ## functions should have the same input and output ## parameter list as the default functions ## TSTBWEFUNJAC0,TSTBWEFUNRES0, TSTBWEFUNJAC,TSTBWEFUNRES +## +## The optional output @var{niter} returns the number of Newton iterations +## needed to reach convergence. ## ## -## @seealso{TSTbweuler, NLSnewtonraphson, daspk} +## @seealso{TSTdaspk, NLSnewtonraphson, TSTthetamethod} ## ## @end deftypefn -function out = TSTbweuler(outstruct,x,t,tol,maxit,dmp,pltvars,verbosity,dae_fun) +function [out, varargout] = TSTbweuler(outstruct,x,t,tol,maxit,dmp,pltvars,verbosity,dae_fun) if ~exist("verbosity") verbosity = [0,0]; @@ -69,9 +72,13 @@ verbosity(2) =0; endif - out=zeros(rows(x),columns(t)); + out = zeros(rows(x),columns(t)); out(:,1) = x; + if nargout > 1 + niter = zeros(length(t),1); + endif + if (verbosity(1)) fprintf(1,"initial value:\n"); endif @@ -87,9 +94,9 @@ RES = @(x) TSTBWEFUNRES0(outstruct,x,t(1),B,C); endif - out = repmat (x, 1, length(t)); + %%out = repmat (x, 1, length(t)); [out(:,1),ii,resnrm] = NLSnewtonraphson(x, RES, JAC, tol, maxit,verbosity(1)); - nrm(1) = resnrm(ii); + %%nrm(1) = resnrm(ii); for it=2:length(t) @@ -112,12 +119,26 @@ [out(:,it),ii,resnrm] = NLSnewtonraphson(out(:,it-1), RES, JAC, ... tol, maxit, verbosity(1), UPDT); - nrm(it) = resnrm(ii); + %%nrm(it) = resnrm(ii); + + if nargout > 1 + niter(it) = ii; + endif if (verbosity(2)) - UTLplotbyname(t(1:it),out(:,1:it),outstruct,pltvars), pause(.1) + UTLplotbyname(t(1:it),out(:,1:it),outstruct,pltvars), pause(.01) endif + if exist("~/.stop_ocs","file") + printf("stopping at timestep %d\n",it); + unix("rm ~/.stop_ocs"); + break + end + endfor + if nargout > 1 + varargout{1} = niter; + endif + endfunction \ No newline at end of file Added: trunk/octave-forge/extra/ocs/inst/TST/TSTbweulernr.m =================================================================== --- trunk/octave-forge/extra/ocs/inst/TST/TSTbweulernr.m (rev 0) +++ trunk/octave-forge/extra/ocs/inst/TST/TSTbweulernr.m 2008-10-18 16:37:37 UTC (rev 5381) @@ -0,0 +1,99 @@ +## Copyright (C) 2006,2007,2008 Carlo de Falco +## +## This file is part of: +## OCS - A Circuit Simulator for Octave +## +## OCS is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program (see the file LICENSE); if not, +## see <http://www.gnu.org/licenses/>. +## +## author: car...@gm... + +## -*- texinfo -*- +## +## @deftypefn{Function File} {[@var{out}, @var{niter}] =} @ +## TSTbweulernr(@var{cirstruct}, @var{x},@var{t}, @var{tol},@ +## @var{maxit},@var{dmp}, @var{pltvars},@ +## @var{verbosity} ,@var{dae_fun}); +## +## TSTbweulernr is the same as TSTbweuler except that no steady state +## simulation is computed to initialize the first timestep. +## +## @seealso{TSTbweulernr, TSTdaspk, NLSnewtonraphson, TSTthetamethod} +## +## @end deftypefn + +function [out, varargout] = TSTbweulernr(outstruct, out, t, tol, maxit, dmp, pltvars, verbosity, istart, dae_fun) + + if ~exist("verbosity") + verbosity = [0,0]; + elseif length(verbosity)<2 + verbosity(2) =0; + endif + + if nargout > 1 + niter = zeros(length(t),1); + endif + + x = out(:,istart); + [A0,B,C,outstruct] = ASMinitsystem(outstruct,x,t(1)); + + if (nargin > 9) + JAC = @(x) dae_fun{1}(outstruct,x,t(1),B); + RES = @(x) dae_fun{2}(outstruct,x,t(1),B,C); + else + JAC = @(x) TSTBWEFUNJAC0(outstruct,x,t(1),B); + RES = @(x) TSTBWEFUNRES0(outstruct,x,t(1),B,C); + endif + + for it=istart+1:length(t) + + if (verbosity) + fprintf(1,"timestep #%d:\n",it); + endif + + if nargin > 9 + JAC = @(x) dae_fun{3}(outstruct,x,t(it-1),t(it),A0,B); + RES = @(x) dae_fun{4}(outstruct,x,out(:,it-1),t(it-1),t(it),A0,B,C); + else + JAC = @(x,A1,Jac,res) TSTBWEFUNJAC1(outstruct, x, t(it-1), + t(it), A0, B, A1, Jac, res); + RES = @(x,A1,Jac,res) TSTBWEFUNRES1(outstruct, x, out(:,it-1), + t(it-1), t(it), A0, B, C, + A1, Jac, res); + UPDT = @(x) TSTBWEFUNUP1 (outstruct, x, t(it)); + endif + + [out(:,it),ii,resnrm] = NLSnewtonraphson(out(:,it-1), RES, JAC, ... + tol, maxit, verbosity(1), UPDT); + + if nargout > 1 + niter(it) = ii; + endif + + if (verbosity(2)) + UTLplotbyname(t(1:it),out(:,1:it),outstruct,pltvars), pause(.01) + endif + + if exist("~/.stop_ocs","file") + printf("stopping at timestep %d\n",it); + unix("rm ~/.stop_ocs"); + break + end + + endfor + + if nargout > 1 + varargout{1} = niter; + endif + +endfunction \ No newline at end of file Modified: trunk/octave-forge/extra/ocs/inst/TST/TSTthetamethod.m =================================================================== --- trunk/octave-forge/extra/ocs/inst/TST/TSTthetamethod.m 2008-10-15 13:42:27 UTC (rev 5380) +++ trunk/octave-forge/extra/ocs/inst/TST/TSTthetamethod.m 2008-10-18 16:37:37 UTC (rev 5381) @@ -105,6 +105,9 @@ UTLplotbyname(t(1:it),out(:,1:it),outstruct,pltvars), pause(.1) endif + if exist("~/.stop_ocs","file") + break + end endfor endfunction \ No newline at end of file Modified: trunk/octave-forge/extra/ocs/inst/UTL/UTLsbnserver.m =================================================================== --- trunk/octave-forge/extra/ocs/inst/UTL/UTLsbnserver.m 2008-10-15 13:42:27 UTC (rev 5380) +++ trunk/octave-forge/extra/ocs/inst/UTL/UTLsbnserver.m 2008-10-18 16:37:37 UTC (rev 5381) @@ -1,3 +1,29 @@ +## Copyright (C) 2006,2007,2008 Carlo de Falco +## +## This file is part of: +## OCS - A Circuit Simulator for Octave +## +## OCS is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program (see the file LICENSE); if not, +## see <http://www.gnu.org/licenses/>. +## +## author: car...@gm... + +## -*- texinfo -*- +## @deftypefn{Function File} {} UTLsbnserver(@var{port}) +## Listen for socket connections on port @var{port}, read a command @ +## and return the corresponding output to the socket. +## @end deftypefn + function UTLsbnserver (portnum) QUITMESSAGE = "quit UTLsbnserver"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |