From 3c0fab2bfb7a5e41a54ebaf7aa637618054334c3 Mon Sep 17 00:00:00 2001 From: sjborley Date: Mon, 23 May 2005 20:30:43 +0000 Subject: [PATCH] Fixed a divide-by-zero bug in the MOS level=2 device model. The fix was supplied by Hitoshi Tanaka. --- src/spicelib/devices/mos2/mos2dset.c | 3 +++ src/spicelib/devices/mos2/mos2load.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/spicelib/devices/mos2/mos2dset.c b/src/spicelib/devices/mos2/mos2dset.c index a3034779e..941563e02 100644 --- a/src/spicelib/devices/mos2/mos2dset.c +++ b/src/spicelib/devices/mos2/mos2dset.c @@ -2,6 +2,7 @@ Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Jaijeet S Roychowdhury Modified: 2000 AlansFixes +$Id$ **********/ #include "ngspice.h" @@ -367,6 +368,8 @@ d_p.d3_pqr = 0.0; InvDeriv(&d_dbrgdb,&d_barg); TimesDeriv(&d_dbrgdb,&d_dbrgdb,-0.5); } else { + sphi = sqrt(here->MOS2tPhi); /* added by HT 050523 */ + sphi3 = here->MOS2tPhi*sphi; /* added by HT 050523 */ barg = sphi/(1.0+0.5*(lvbs-lvds)/here->MOS2tPhi); EqualDeriv(&d_barg,&d_q); d_barg.value = lvbs - lvds; d_barg.d1_r -= 1.0; diff --git a/src/spicelib/devices/mos2/mos2load.c b/src/spicelib/devices/mos2/mos2load.c index 67c1d3f4a..b7bde6d81 100644 --- a/src/spicelib/devices/mos2/mos2load.c +++ b/src/spicelib/devices/mos2/mos2load.c @@ -2,6 +2,7 @@ Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 alansFixes +$Id$ **********/ #include "ngspice.h" @@ -584,6 +585,8 @@ next1: if(vbs <= -3*vt) { dbrgdb = -0.5/barg; d2bdb2 = 0.5*dbrgdb/(phiMinVbs+lvds); } else { + sphi = sqrt(here->MOS2tPhi);/* added by HT 050523 */ + sphi3 = here->MOS2tPhi*sphi;/* added by HT 050523 */ barg = sphi/(1.0+0.5*(lvbs-lvds)/here->MOS2tPhi); tmp = barg/sphi3; dbrgdb = -0.5*barg*tmp; @@ -829,6 +832,8 @@ line500: bsarg = sqrt(vdsat+phiMinVbs); dbsrdb = -0.5/bsarg; } else { + sphi = sqrt(here->MOS2tPhi);/* added by HT 050523 */ + sphi3 = here->MOS2tPhi*sphi;/* added by HT 050523 */ bsarg = sphi/(1.0+0.5*(lvbs-vdsat)/here->MOS2tPhi); dbsrdb = -0.5*bsarg*bsarg/sphi3; }