Update autoconf scripts and applied Niessner patch to remove compiler warnings.

This commit is contained in:
pnenzi 2004-07-09 18:37:25 +00:00
parent eb890a8ef6
commit 1260ae08db
223 changed files with 12420 additions and 6509 deletions

View File

@ -1,3 +1,12 @@
2004-07-08 Paolo Nenzi <p.nenzi@ieee.org>
* Applied Al Niessner <Al.Niessner@jpl.nasa.gov> negabyte patch
that removed all compiler warnings.
* configure.in, src/xspice/icm/makedefs.in, tests/Makefile.am,
xgraph/aclocal.m4, xgraph/configure.in, xgraph/configure: updated
configuration files for autoconf V2.59 automake V1.8.
2004-07-05 Paolo Nenzi <p.nenzi@ieee.org>
* src/frontend/resource.c: added __APPLE__ for mac osx support as in

View File

@ -97,3 +97,7 @@
/* get system memory and time */
#undef HAVE__MEMAVL
/* define whether size_t is int or is long */
#undef IS_SIZE_T_LONG

View File

@ -3,10 +3,11 @@ dnl
dnl This file is part of ngspice.
dnl
dnl (Process this file with autoconf to produce a configure script.)
AC_INIT(src/main.c)
AC_INIT
AC_CONFIG_SRCDIR([src/main.c])
dnl Create a configuration header
AM_CONFIG_HEADER(config.h)
AC_CONFIG_HEADERS([config.h])
dnl Initialize automake stuff
AM_INIT_AUTOMAKE(ng-spice-rework,15)
@ -174,7 +175,14 @@ dnl Checks for ANSI-C header files.
AC_HEADER_STDC
if test "$enable_ansi" = "yes"; then
AM_PROG_CC_STDC
AC_PROG_CC()
AC_DIAGNOSE([obsolete],[AM_PROG_CC_STDC:
your code should no longer depend upon `am_cv_prog_cc_stdc', but upon
`ac_cv_prog_cc_stdc'. Remove this warning and the assignment when
you adjust the code. You can also remove the above call to
AC_PROG_CC if you already called it elsewhere.])
am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
if test ! "$am_cv_prog_cc_stdc"="yes"; then
AC_MSG_WARN(Failed to find Ansi flag!)
fi
@ -265,6 +273,18 @@ AC_STRUCT_TM
AC_STRUCT_TIMEZONE
AC_CHECK_FUNCS(localtime)
dnl Some special AMD64 processor issues. This change may be common to many
dnl 64 bit processors, but I have only this platform to work with and did not
dnl find a good way of automatically determining this information.
case $host in
x86_64-*-linux*)
AC_DEFINE(IS_SIZE_T_LONG, 1)
;;
*)
AC_DEFINE(IS_SIZE_T_LONG, 0)
;;
esac
case $host_os in
*cygwin* )
AC_CHECK_FUNCS(ftime)
@ -280,7 +300,7 @@ AC_CHECK_HEADERS(termios.h termio.h sgtty.h , break)
AC_CHECK_FUNCS(isatty tcgetattr tcsetattr)
dnl Check for a few functions:
AC_FUNC_VFORK
AC_FUNC_FORK([])
AC_CHECK_FUNCS(access bcopy qsort dup2 popen)
AC_CHECK_FUNCS(strchr index , break)
AC_CHECK_FUNCS(getcwd getwd , break)
@ -303,26 +323,18 @@ AC_CHECK_FUNCS(asprintf,,AC_CHECK_LIB(iberty,asprintf,AC_DEFINE(HAVE_ASPRINTF) L
dnl Check for va_copy
AC_CACHE_CHECK([for va_copy], ac_cv_c_va_copy,
AC_TRY_LINK(
[#include <stdarg.h>],
[va_list ap1, ap2;
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>]], [[va_list ap1, ap2;
va_copy(ap1,ap2);
],
[ac_cv_c_va_copy="yes"],
[ac_cv_c_va_copy="no"])
]])],[ac_cv_c_va_copy="yes"],[ac_cv_c_va_copy="no"])
)
if test "$ac_cv_c_va_copy" = "yes"
then
AC_DEFINE(HAVE_VA_COPY, 1, [Define if we have va_copy])
fi
AC_CACHE_CHECK([for __va_copy], ac_cv_c___va_copy,
AC_TRY_LINK(
[#include <stdarg.h>],
[va_list ap1, ap2;
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>]], [[va_list ap1, ap2;
__va_copy(ap1,ap2);
],
[ac_cv_c___va_copy="yes"],
[ac_cv_c___va_copy="no"])
]])],[ac_cv_c___va_copy="yes"],[ac_cv_c___va_copy="no"])
)
if test "$ac_cv_c___va_copy" = "yes"
then
@ -572,7 +584,7 @@ fi
AC_OUTPUT( \
AC_CONFIG_FILES([\
Makefile \
doc/Makefile \
man/Makefile \
@ -603,7 +615,6 @@ src/spicelib/devices/ccvs/Makefile \
src/spicelib/devices/csw/Makefile \
src/spicelib/devices/cpl/Makefile \
src/spicelib/devices/dio/Makefile \
dnl src/spicelib/devices/ekv/Makefile \
src/spicelib/devices/ind/Makefile \
src/spicelib/devices/isrc/Makefile \
src/spicelib/devices/hfet1/Makefile \
@ -708,4 +719,5 @@ tests/proc2mod/Makefile \
tests/transmission/Makefile \
tests/resistance/Makefile \
tests/vbic/Makefile
)
])
AC_OUTPUT

File diff suppressed because it is too large Load Diff

View File

@ -4,9 +4,9 @@
#include "conf.h"
char Spice_Version[ ] = VERSION;
char Spice_Notice[ ] = "Please submit bug-reports to: ngspice-devel@lists.sourceforge.net";
char Spice_Build_Date[ ] = NGSPICEBUILDDATE;
char Spice_Version[] = VERSION;
char Spice_Notice[] = "Please submit bug-reports to: ngspice-devel@lists.sourceforge.net";
char Spice_Build_Date[] = NGSPICEBUILDDATE;
/*
char *Spice_Exec_Dir = "/spice_win/bin";
char *Spice_Lib_Dir = "/spice_win/lib";

View File

@ -71,7 +71,7 @@ cp_histsubst(wordlist *wlist)
return (wlist);
}
if (b < s) {
(void) sprintf(buf, "%.*s%s", s - b, b,
(void) sprintf(buf, "%.*s%s", (int)(s-b), b,
n->wl_word);
tfree(n->wl_word);
n->wl_word = copy(buf);

View File

@ -819,8 +819,8 @@ cp_evloop(char *string)
}
/* This blows away the control structures... */
void
cp_resetcontrol(void)
void cp_free_control(void); /* needed by resetcontrol */
void cp_resetcontrol(void)
{
fprintf(cp_err, "Warning: clearing control structures\n");
if (cend[stackp] && cend[stackp]->co_parent)

View File

@ -577,7 +577,6 @@ com_alter_common(wordlist *wl, int do_model)
char *param;
struct dvec *dv;
struct pnode *names;
char *hlp=NULL;
if (!ft_curckt) {
fprintf(cp_err, "Error: no circuit loaded\n");

View File

@ -380,7 +380,7 @@ ft_cktcoms(bool terse)
static void
fixdotplot(wordlist *wl)
{
char buf[BSIZE_SP], *s;
char *s;
char numbuf[128]; /* Printnum Fix */
double *d, d1, d2;

View File

@ -92,7 +92,7 @@ static struct dvec *
doop(char what,
void*(*func) (void *data1, void *data2,
short int datatype1, short int datatype2,
int length),
int length, ...),
struct pnode *arg1,
struct pnode *arg2)
{
@ -707,14 +707,11 @@ apply_func(struct func *func, struct pnode *arg)
}
(void) signal(SIGILL, (SIGNAL_FUNCTION) sig_matherr);
/* FIXME: The call to (*func->fu_func) has too many arguments;
hence the compiler quits. How to circumvent this (without
losing function prototypes)? For now, these functions have
been disabled. */
if (eq(func->fu_name, "interpolate")
|| eq(func->fu_name, "deriv")) /* Ack */
{
void *(*f)()=func->fu_func; /* va, a type cast, which loses function prototypes, a warning */
void *(*f)(void *data, short int type, int length,
int *newlength, short int *newtype, ...)=func->fu_func;
data = ((*f) ((isreal(v) ? (void *) v->v_realdata : (void *) v->v_compdata),
(short) (isreal(v) ? VF_REAL : VF_COMPLEX),
v->v_length, &len, &type,

View File

@ -27,8 +27,8 @@ static struct pnode * mkunode(int op, struct pnode *arg);
static struct pnode * mkfnode(char *func, struct pnode *arg);
static struct pnode * mknnode(double number);
static struct pnode * mksnode(char *string);
static void print_elem(struct element *elem); /* va: for debugging */
static char * get_token_name(int e_token); /* va, for debugging */
/*static void print_elem(struct element *elem); / va: for debugging /
static char * get_token_name(int e_token); / va, for debugging */
static int lasttoken = END, lasttype;
@ -582,9 +582,10 @@ makepnode(struct element *elem)
}
}
/*
static char * get_token_name(int e_token)
{
/* see include/fteparse.h */
/ see include/fteparse.h /
switch (e_token) {
case 0: return "END ";
case 1: return "PLUS ";
@ -612,6 +613,7 @@ static char * get_token_name(int e_token)
default : return "UNKNOWN";
}
}
static void print_elem(struct element *elem)
{
printf("e_token = %d(%s)", elem->e_token, get_token_name(elem->e_token));
@ -631,7 +633,7 @@ static void print_elem(struct element *elem)
}
printf("\n");
}
*/
/* Some auxiliary functions for building the parse tree. */
@ -700,12 +702,8 @@ struct func ft_funcs[] = {
{ "vecmin", cx_min } ,
{ "vecmax", cx_max } ,
{ "vecd", cx_d } ,
/* va, deactivate function prototype testing for this 2 functions, only. Gives a warning. */
#define INTERPOL_FUNC (void *(*)())
/* These functions have been temporarily been disabled. See
their definitions for the reason. */
{ "interpolate", INTERPOL_FUNC cx_interpolate } ,
{ "deriv", INTERPOL_FUNC cx_deriv } ,
{ "interpolate", cx_interpolate } ,
{ "deriv", cx_deriv } ,
{ "v", NULL } ,
{ NULL, NULL }
} ;

View File

@ -896,7 +896,8 @@ X11_Input(REQUEST *request, RESPONSE *response)
{
XEvent ev;
int nfds, readfds;
int nfds;
fd_set rfds;
switch (request->option) {
case char_option:
@ -913,15 +914,19 @@ X11_Input(REQUEST *request, RESPONSE *response)
XtDispatchEvent(&ev);
}
readfds = 1 << fileno(request->fp) |
1 << ConnectionNumber(display);
/* block on ConnectionNumber and request->fp */
/* PN: added fd_set * casting */
select(nfds + 1, (fd_set *)&readfds, (fd_set *) NULL, (fd_set *) NULL, NULL);
FD_ZERO(&rfds);
FD_SET(fileno(request->fp), &rfds);
FD_SET(ConnectionNumber(display), &rfds);
select (nfds + 1,
&rfds,
(fd_set *)NULL,
(fd_set *)NULL,
NULL);
/* handle X events first */
if (readfds & (1 << ConnectionNumber(display))) {
if (FD_ISSET (ConnectionNumber(display), &rfds)) {
/* handle ALL X events */
while (XtPending()) {
XtNextEvent(&ev);
@ -929,7 +934,7 @@ X11_Input(REQUEST *request, RESPONSE *response)
}
}
if (readfds & (1 << fileno(request->fp))) {
if (FD_ISSET (fileno(request->fp), &rfds)) {
response->reply.ch = inchar(request->fp);
goto out;
}

View File

@ -282,7 +282,11 @@ raw_read(char *name)
struct variable *vv;
wordlist *wl, *nwl;
FILE *fp, *lastin, *lastout, *lasterr;
#ifdef __MINGW32__
bool binary = TRUE;
#endif
if (!(fp = fopen(name, "r"))) {
perror(name);

View File

@ -42,7 +42,7 @@ if_sens_run(char *t, wordlist *args, INPtables *tab)
char *steptype;
char *name;
char *line;
struct line deck;
struct line deck[1];
int i;
int j;
int error;
@ -51,12 +51,12 @@ if_sens_run(char *t, wordlist *args, INPtables *tab)
int which = -1;
(void) sprintf(buf, ".%s", wl_flatten(args));
deck.li_next = deck.li_actual = NULL;
deck.li_error = NULL;
deck.li_linenum = 0;
deck.li_line = buf;
deck[0].li_next = deck[0].li_actual = NULL;
deck[0].li_error = NULL;
deck[0].li_linenum = 0;
deck[0].li_line = buf;
current = (card *) &deck;
current = (card *)deck;
line = current->line;
INPgetTok(&line,&token,1);

View File

@ -195,7 +195,7 @@ if_run(char *t, char *what, wordlist *args, char *tab)
{
void *ckt = (void *) t;
int err;
struct line deck;
struct line deck[1];
char buf[BSIZE_SP];
int j;
int which = -1;
@ -219,10 +219,10 @@ if_run(char *t, char *what, wordlist *args, char *tab)
s = wl_flatten(args); /* va: tfree char's tmalloc'ed in wl_flatten */
(void) sprintf(buf, ".%s", s);
tfree(s);
deck.li_next = deck.li_actual = NULL;
deck.li_error = NULL;
deck.li_linenum = 0;
deck.li_line = buf;
deck[0].li_next = deck[0].li_actual = NULL;
deck[0].li_error = NULL;
deck[0].li_linenum = 0;
deck[0].li_line = buf;
/*CDHW Delete any previous special task CDHW*/
@ -296,10 +296,10 @@ ci_specTask will point to it CDHW*/
/*CDHW ci_curTask and ci_specTask point to the interactive task AAA CDHW*/
INPpas2(ckt, (card *) &deck, (INPtables *)tab, ft_curckt->ci_specTask);
INPpas2(ckt, (card *)deck, (INPtables *)tab, ft_curckt->ci_specTask);
if (deck.li_error) {
fprintf(cp_err, "Warning: %s\n", deck.li_error);
if (deck[0].li_error) {
fprintf(cp_err, "Warning: %s\n", deck[0].li_error);
return 2;
}
}
@ -559,8 +559,8 @@ spif_getparam(void *ckt, char **name, char *param, int ind, int do_model)
IFvalue *pv;
IFparm *opt;
int typecode, i;
GENinstance *dev=(GENinstance *)NULL;
GENmodel *mod=(GENmodel *)NULL;
GENinstance *dev[1]={ (GENinstance *)NULL };
GENmodel *mod[1]= { (GENmodel *)NULL };
IFdevice *device;
/* fprintf(cp_err, "Calling if_getparam(%s, %s)\n", *name, param); */
@ -570,7 +570,7 @@ spif_getparam(void *ckt, char **name, char *param, int ind, int do_model)
/* MW. My "special routine here" */
INPretrieve(name,(INPtables *)ft_curckt->ci_symtab);
typecode = finddev(ckt, *name,(void**) &dev,(void **) &mod);
typecode = finddev(ckt, *name,(void**)dev,(void **)mod);
if (typecode == -1) {
fprintf(cp_err,
"Error: no such device or model name %s\n",
@ -583,7 +583,7 @@ spif_getparam(void *ckt, char **name, char *param, int ind, int do_model)
if(opt->dataType & IF_REDUNDANT || !opt->description)
continue;
if(!(opt->dataType & IF_ASK)) continue;
pv = doask(ckt, typecode, dev, mod, opt, ind);
pv = doask(ckt, typecode, dev[0], mod[0], opt, ind);
if (pv) {
tv = parmtovar(pv, opt);
if (vv)
@ -600,7 +600,7 @@ spif_getparam(void *ckt, char **name, char *param, int ind, int do_model)
/* MW. */
INPretrieve(name,(INPtables *)ft_curckt->ci_symtab);
typecode = finddev(ckt, *name, (void**)&dev, (void **)&mod);
typecode = finddev(ckt, *name, (void**)dev, (void **)mod);
if (typecode == -1) {
fprintf(cp_err,
"Error: no such device or model name %s\n",
@ -608,13 +608,13 @@ spif_getparam(void *ckt, char **name, char *param, int ind, int do_model)
return (NULL);
}
device = ft_sim->devices[typecode];
opt = parmlookup(device, &dev, param, do_model, 0);
opt = parmlookup(device, dev, param, do_model, 0);
if (!opt) {
fprintf(cp_err, "Error: no such parameter %s.\n",
param);
return (NULL);
}
pv = doask(ckt, typecode, dev, mod, opt, ind);
pv = doask(ckt, typecode, dev[0], mod[0], opt, ind);
if (pv)
vv = parmtovar(pv, opt);
return (vv);
@ -627,19 +627,19 @@ if_setparam(void *ckt, char **name, char *param, struct dvec *val, int do_model)
{
IFparm *opt;
IFdevice *device;
GENmodel *mod=(GENmodel *)NULL;
GENinstance *dev=(GENinstance *)NULL;
GENmodel *mod[1]={(GENmodel *)NULL};
GENinstance *dev[1]={(GENinstance *)NULL};
int typecode;
/* PN */
INPretrieve(name,(INPtables *)ft_curckt->ci_symtab);
typecode = finddev(ckt, *name, (void**)&dev, (void **)&mod);
typecode = finddev(ckt, *name, (void**)dev, (void **)mod);
if (typecode == -1) {
fprintf(cp_err, "Error: no such device or model name %s\n", *name);
return;
}
device = ft_sim->devices[typecode];
opt = parmlookup(device, &dev, param, do_model, 1);
opt = parmlookup(device, dev, param, do_model, 1);
if (!opt) {
if (param)
fprintf(cp_err, "Error: no such parameter %s.\n", param);
@ -647,11 +647,11 @@ if_setparam(void *ckt, char **name, char *param, struct dvec *val, int do_model)
fprintf(cp_err, "Error: no default parameter.\n");
return;
}
if (do_model && !mod) {
mod = dev->GENmodPtr;
dev = (GENinstance *)NULL;
if (do_model && !mod[0]) {
mod[0] = dev[0]->GENmodPtr;
dev[1] = (GENinstance *)NULL;
}
doset(ckt, typecode, dev, mod, opt, val);
doset(ckt, typecode, dev[0], mod[0], opt, val);
}
static struct variable *

View File

@ -61,14 +61,10 @@ extern char * nupa_copy(char *s, int linenum);
extern int nupa_eval(char *s, int linenum);
extern int nupa_signal(int sig, char *info);
static char NumParams='y';
static char DoGarbage='n';
#else
#define nupa_copy(x,y) copy(x)
#define nupa_eval(x,y) 1
#define nupa_signal(x,y) 1
static char NumParams='n';
static char DoGarbage='n';
#endif

View File

@ -539,4 +539,4 @@ int WIN_DiagramReady()
return 0;
}
#endif /* HAS_WINDOWS */
#endif /* HAS_WINDOWS */

View File

@ -337,7 +337,7 @@ extern int CKTsenUpdate( CKTcircuit *);
extern int CKTsetAnalPm( void *, void *, int , IFvalue *, IFvalue *);
extern int CKTsetBreak( CKTcircuit *, double );
extern int CKTsetNodPm( void *, void *, int , IFvalue *, IFvalue *);
extern int CKTsetOpt( void *, void *, int , IFvalue *);
extern int CKTsetOpt( CKTcircuit *, void *, int , IFvalue *);
extern int CKTsetup( CKTcircuit *);
extern int CKTunsetup(CKTcircuit *);
extern int CKTtemp( CKTcircuit *);

View File

@ -78,61 +78,61 @@ extern bool clip_to_circle();
/* cmath1.c */
extern bool cx_degrees;
extern void *cx_mag(void *, short int , int , int *, short int *);
extern void *cx_ph(void *, short int , int , int *, short int *);
extern void *cx_j(void *, short int , int , int *, short int *);
extern void *cx_real(void *, short int , int , int *, short int *);
extern void *cx_imag(void *, short int , int , int *, short int *);
extern void *cx_pos(void *, short int , int , int *, short int *);
extern void *cx_db(void *, short int , int , int *, short int *);
extern void *cx_log(void *, short int , int , int *, short int *);
extern void *cx_ln(void *, short int , int , int *, short int *);
extern void *cx_exp(void *, short int , int , int *, short int *);
extern void *cx_sqrt(void *, short int , int , int *, short int *);
extern void *cx_sin(void *, short int , int , int *, short int *);
extern void *cx_cos(void *, short int , int , int *, short int *);
extern void *cx_mag(void *, short int , int , int *, short int *, ...);
extern void *cx_ph(void *, short int , int , int *, short int *, ...);
extern void *cx_j(void *, short int , int , int *, short int *, ...);
extern void *cx_real(void *, short int , int , int *, short int *, ...);
extern void *cx_imag(void *, short int , int , int *, short int *, ...);
extern void *cx_pos(void *, short int , int , int *, short int *, ...);
extern void *cx_db(void *, short int , int , int *, short int *, ...);
extern void *cx_log(void *, short int , int , int *, short int *, ...);
extern void *cx_ln(void *, short int , int , int *, short int *, ...);
extern void *cx_exp(void *, short int , int , int *, short int *, ...);
extern void *cx_sqrt(void *, short int , int , int *, short int *, ...);
extern void *cx_sin(void *, short int , int , int *, short int *, ...);
extern void *cx_cos(void *, short int , int , int *, short int *, ...);
/* cmath2.c */
extern void *cx_tan(void *, short int , int , int *, short int *);
extern void *cx_atan(void *, short int , int , int *, short int *);
extern void *cx_norm(void *, short int , int , int *, short int *);
extern void *cx_uminus(void *, short int , int , int *, short int *);
extern void *cx_rnd(void *, short int , int , int *, short int *);
extern void *cx_mean(void *, short int , int , int *, short int *);
extern void *cx_length(void *, short int , int , int *, short int *);
extern void *cx_vector(void *, short int , int , int *, short int *);
extern void *cx_unitvec(void *, short int , int , int *, short int *);
extern void *cx_tan(void *, short int , int , int *, short int *, ...);
extern void *cx_atan(void *, short int , int , int *, short int *, ...);
extern void *cx_norm(void *, short int , int , int *, short int *, ...);
extern void *cx_uminus(void *, short int , int , int *, short int *, ...);
extern void *cx_rnd(void *, short int , int , int *, short int *, ...);
extern void *cx_mean(void *, short int , int , int *, short int *, ...);
extern void *cx_length(void *, short int , int , int *, short int *, ...);
extern void *cx_vector(void *, short int , int , int *, short int *, ...);
extern void *cx_unitvec(void *, short int , int , int *, short int *, ...);
/* Routoure JM : somme useful functions */
extern void *cx_min(void *, short int , int , int *, short int *);
extern void *cx_max(void *, short int , int , int *, short int *);
extern void *cx_d(void *, short int , int , int *, short int *);
extern void *cx_min(void *, short int , int , int *, short int *, ...);
extern void *cx_max(void *, short int , int , int *, short int *, ...);
extern void *cx_d(void *, short int , int , int *, short int *, ...);
extern void *cx_plus(void *, void *, short int , short int , int );
extern void *cx_minus(void *, void *, short int , short int , int );
extern void *cx_times(void *, void *, short int , short int , int );
extern void *cx_mod(void *, void *, short int , short int , int );
extern void *cx_plus(void *, void *, short int , short int , int, ...);
extern void *cx_minus(void *, void *, short int , short int , int, ...);
extern void *cx_times(void *, void *, short int , short int , int, ...);
extern void *cx_mod(void *, void *, short int , short int , int, ...);
/* cmath3.c */
extern void *cx_divide(void *, void *, short int , short int , int );
extern void *cx_comma(void *, void *, short int , short int , int );
extern void *cx_power(void *, void *, short int , short int , int );
extern void *cx_eq(void *, void *, short int , short int , int );
extern void *cx_gt(void *, void *, short int , short int , int );
extern void *cx_lt(void *, void *, short int , short int , int );
extern void *cx_ge(void *, void *, short int , short int , int );
extern void *cx_le(void *, void *, short int , short int , int );
extern void *cx_ne(void *, void *, short int , short int , int );
extern void *cx_divide(void *, void *, short int , short int , int, ...);
extern void *cx_comma(void *, void *, short int , short int , int, ...);
extern void *cx_power(void *, void *, short int , short int , int, ...);
extern void *cx_eq(void *, void *, short int , short int , int, ...);
extern void *cx_gt(void *, void *, short int , short int , int, ...);
extern void *cx_lt(void *, void *, short int , short int , int, ...);
extern void *cx_ge(void *, void *, short int , short int , int, ...);
extern void *cx_le(void *, void *, short int , short int , int, ...);
extern void *cx_ne(void *, void *, short int , short int , int, ...);
/* cmath4.c */
extern void *cx_and(void *, void *, short int , short int , int );
extern void *cx_or(void *, void *, short int , short int , int );
extern void *cx_not(void *, short int , int , int *, short int * );
extern void *cx_interpolate(void *, short int , int , int *, short int *, struct plot *, struct plot *, int );
extern void *cx_deriv(void *, short int , int , int *, short int *, struct plot *, struct plot *, int );
extern void *cx_and(void *, void *, short int , short int , int, ...);
extern void *cx_or(void *, void *, short int , short int , int, ...);
extern void *cx_not(void *, short int , int , int *, short int * , ...);
extern void *cx_interpolate(void *, short int , int , int *, short int *, ...); /* struct plot *, struct plot *, int ); */
extern void *cx_deriv(void *, short int , int , int *, short int *, ...); /*struct plot *, struct plot *, int );*/
/* cmdtab.c */

View File

@ -39,7 +39,7 @@ struct func {
/* The function. */
void *(*fu_func)(void *data, short int type, int length,
int *newlength, short int *newtype);
int *newlength, short int *newtype, ...);
} ;
/* User-definable functions. The idea of ud_name is that the args are

View File

@ -160,9 +160,9 @@ extern int AsciiRawFile;
extern char *Spice_Host;
extern char *Spiced_Log;
extern char Spice_Notice[ ];
extern char Spice_Version[ ];
extern char Spice_Build_Date[ ];
extern char Spice_Version[];
extern char Spice_Notice[];
extern char Spice_Build_Date[];
extern char *News_File;
extern char *Default_MFB_Cap;

View File

@ -66,7 +66,7 @@ c_tan(complex *cc, int length)
}
void *
cx_tan(void *data, short int type, int length, int *newlength, short int *newtype)
cx_tan(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
*newlength = length;
if (type == VF_REAL) {
@ -81,7 +81,7 @@ cx_tan(void *data, short int type, int length, int *newlength, short int *newtyp
void *
cx_atan(void *data, short int type, int length, int *newlength, short int *newtype)
cx_atan(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
double *d;
@ -131,7 +131,7 @@ cx_max_local(void *data, short int type, int length)
/* Normalize the data so that the magnitude of the greatest value is 1. */
void *
cx_norm(void *data, short int type, int length, int *newlength, short int *newtype)
cx_norm(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
double largest = 0.0;
@ -170,7 +170,7 @@ cx_norm(void *data, short int type, int length, int *newlength, short int *newty
}
void *
cx_uminus(void *data, short int type, int length, int *newlength, short int *newtype)
cx_uminus(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
*newlength = length;
if (type == VF_COMPLEX) {
@ -199,7 +199,7 @@ cx_uminus(void *data, short int type, int length, int *newlength, short int *new
}
void *
cx_rnd(void *data, short int type, int length, int *newlength, short int *newtype)
cx_rnd(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
*newlength = length;
if (type == VF_COMPLEX) {
@ -238,7 +238,7 @@ cx_rnd(void *data, short int type, int length, int *newlength, short int *newtyp
/* Compute the mean of a vector. */
void *
cx_mean(void *data, short int type, int length, int *newlength, short int *newtype)
cx_mean(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
*newlength = 1;
rcheck(length > 0, "mean");
@ -272,7 +272,7 @@ cx_mean(void *data, short int type, int length, int *newlength, short int *newty
void *
cx_length(void *data, short int type, int length, int *newlength, short int *newtype)
cx_length(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
double *d;
@ -289,7 +289,7 @@ cx_length(void *data, short int type, int length, int *newlength, short int *new
void *
cx_vector(void *data, short int type, int length, int *newlength, short int *newtype)
cx_vector(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
complex *cc = (complex *) data;
double *dd = (double *) data;
@ -314,7 +314,7 @@ cx_vector(void *data, short int type, int length, int *newlength, short int *new
void *
cx_unitvec(void *data, short int type, int length, int *newlength, short int *newtype)
cx_unitvec(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
complex *cc = (complex *) data;
double *dd = (double *) data;
@ -344,7 +344,7 @@ cx_unitvec(void *data, short int type, int length, int *newlength, short int *ne
*/
void *
cx_plus(void *data1, void *data2, short int datatype1, short int datatype2, int length)
cx_plus(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...)
{
double *dd1 = (double *) data1;
double *dd2 = (double *) data2;
@ -384,7 +384,7 @@ cx_plus(void *data1, void *data2, short int datatype1, short int datatype2, int
}
void *
cx_minus(void *data1, void *data2, short int datatype1, short int datatype2, int length)
cx_minus(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...)
{
double *dd1 = (double *) data1;
double *dd2 = (double *) data2;
@ -424,7 +424,7 @@ cx_minus(void *data1, void *data2, short int datatype1, short int datatype2, int
}
void *
cx_times(void *data1, void *data2, short int datatype1, short int datatype2, int length)
cx_times(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...)
{
double *dd1 = (double *) data1;
double *dd2 = (double *) data2;
@ -466,7 +466,7 @@ cx_times(void *data1, void *data2, short int datatype1, short int datatype2, int
}
void *
cx_mod(void *data1, void *data2, short int datatype1, short int datatype2, int length)
cx_mod(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...)
{
double *dd1 = (double *) data1;
double *dd2 = (double *) data2;
@ -525,7 +525,7 @@ cx_mod(void *data1, void *data2, short int datatype1, short int datatype2, int l
/* Routoure JM : Compute the max of a vector. */
void *
cx_max(void *data, short int type, int length, int *newlength, short int *newtype)
cx_max(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
*newlength = 1;
/* test if length >0 et affiche un message d'erreur */
@ -566,7 +566,7 @@ cx_max(void *data, short int type, int length, int *newlength, short int *newtyp
/* Routoure JM : Compute the min of a vector. */
void *
cx_min(void *data, short int type, int length, int *newlength, short int *newtype)
cx_min(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
*newlength = 1;
/* test if length >0 et affiche un message d'erreur */
@ -609,7 +609,7 @@ cx_min(void *data, short int type, int length, int *newlength, short int *newtyp
/* Routoure JM : Compute the differential of a vector. */
void *
cx_d(void *data, short int type, int length, int *newlength, short int *newtype)
cx_d(void *data, short int type, int length, int *newlength, short int *newtype, ...)
{
*newlength = length;
/* test if length >0 et affiche un message d'erreur */

View File

@ -7,22 +7,22 @@
#define CMATH2_H_INCLUDED
void * cx_tan(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_atan(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_norm(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_uminus(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_rnd(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_mean(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_length(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_vector(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_unitvec(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_plus(void *data1, void *data2, short int datatype1, short int datatype2, int length);
void * cx_minus(void *data1, void *data2, short int datatype1, short int datatype2, int length);
void * cx_times(void *data1, void *data2, short int datatype1, short int datatype2, int length);
void * cx_mod(void *data1, void *data2, short int datatype1, short int datatype2, int length);
void * cx_max(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_min(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_d(void *data, short int type, int length, int *newlength, short int *newtype);
void * cx_tan(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_atan(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_norm(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_uminus(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_rnd(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_mean(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_length(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_vector(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_unitvec(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_plus(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...);
void * cx_minus(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...);
void * cx_times(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...);
void * cx_mod(void *data1, void *data2, short int datatype1, short int datatype2, int length, ...);
void * cx_max(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_min(void *data, short int type, int length, int *newlength, short int *newtype, ...);
void * cx_d(void *data, short int type, int length, int *newlength, short int *newtype, ...);
#endif

View File

@ -185,7 +185,6 @@ spFindElement( void *eMatrix, int Row, int Col )
{
MatrixPtr Matrix = (MatrixPtr)eMatrix;
RealNumber *pElement;
int index;
ElementPtr spcFindElementInCol();
void Translate();

View File

@ -59,6 +59,7 @@
* Matrix type and macro definitions for the sparse matrix routines.
*/
#include <assert.h>
#include <stdlib.h>
#define spINSIDE_SPARSE
#include "spconfig.h"

View File

@ -28,7 +28,12 @@ tmalloc(size_t num)
s = calloc(num,1);
if (!s){
fprintf(stderr,
"malloc: Internal Error: can't allocate %d bytes. \n", num);
#if IS_SIZE_T_LONG
"malloc: Internal Error: can't allocate %ld bytes. \n",
#else
"malloc: Internal Error: can't allocate %d bytes. \n",
#endif
num);
exit(EXIT_BAD);
}
return(s);
@ -51,8 +56,13 @@ trealloc(void *ptr, size_t num)
s = realloc(ptr, num);
if (!s) {
fprintf(stderr,
"realloc: Internal Error: can't allocate %d bytes.\n", num);
fprintf(stderr,
#if IS_SIZE_T_LONG
"realloc: Internal Error: can't allocate %ld bytes.\n",
#else
"realloc: Internal Error: can't allocate %d bytes.\n",
#endif
num);
exit(EXIT_BAD);
}
return(s);

View File

@ -3,6 +3,8 @@
* 1999 E. Rouat
************/
#include "config.h"
#ifndef STRING_H_INCLUDED
#define STRING_H_INCLUDED

View File

@ -31,7 +31,7 @@ char *
tildexpand(char *string)
{
char buf[BSIZE_SP];
char *result, *k, c;
char *result = NULL, *k, c;
if (!string)
return NULL;

View File

@ -34,6 +34,8 @@ bool cp_interactive = FALSE;
char *hlp_filelist[] = { "ngspice", 0 };
extern void ivars();
int
main(int ac, char **av)
{

View File

@ -19,6 +19,7 @@ Author: 1990 Jaijeet Roychowdury
extern void usage();
extern void comments();
extern double phi();
extern void spErrorMessage(char*, FILE*, char*);
int
main (argc, argv)
@ -30,7 +31,7 @@ int
double l,c,ctot,r=0.0,g=0.0,k=0.0,lm=0.0,cm=0.0,len;
unsigned gotl=0,gotc=0,gotr=0,gotg=0,gotk=0,gotcm=0,gotlen=0;
unsigned gotname=0, gotnum=0;
char *name;
char *name = "";
double **matrix, **inverse;
double *tpeigenvalues, *gammaj;
char *options;

View File

@ -1,9 +1,6 @@
/* Configuration file for nutmeg */
#include <config.h>
#include "conf.h"
/*
* Devices
*/

View File

@ -1,8 +1,6 @@
/* Configuration file for ng-spice */
#include <config.h>
#include "conf.h"
/**********
Copyright 1990 Regents of the University of California. All rights reserved.
**********/

View File

@ -78,7 +78,7 @@ int CKTsenUpdate( CKTcircuit *);
int CKTsetAnalPm( void *, void *, int , IFvalue *, IFvalue *);
int CKTsetBreak( CKTcircuit *, double );
int CKTsetNodPm( void *, void *, int , IFvalue *, IFvalue *);
int CKTsetOpt( void *, void *, int , IFvalue *);
int CKTsetOpt( CKTcircuit *, void *, int , IFvalue *);
int CKTsetup( CKTcircuit *);
int CKTunsetup(CKTcircuit *ckt);
int CKTtemp( CKTcircuit *);

View File

@ -21,21 +21,21 @@ int
CKTmodCrt(void *ckt, int type, void **modfast, IFuid name)
{
extern SPICEdev **DEVices;
GENmodel *mymodfast = NULL;
GENmodel *mymodfast[1] = { NULL };
int error;
error = CKTfndMod(ckt,&type,(void**)&mymodfast,name);
error = CKTfndMod (ckt, &type, (void**)mymodfast, name);
if(error == E_NOMOD) {
mymodfast = (GENmodel *)MALLOC(*(DEVices[type]->DEVmodSize));
if(mymodfast == (GENmodel *)NULL) return(E_NOMEM);
mymodfast->GENmodType = type;
mymodfast->GENmodName = name;
mymodfast->GENnextModel =(GENmodel *)((CKTcircuit *)ckt)->CKThead[type];
((CKTcircuit *)ckt)->CKThead[type]=(GENmodel *)mymodfast;
if(modfast) *modfast=(void *)mymodfast;
mymodfast[0] = (GENmodel *)MALLOC(*(DEVices[type]->DEVmodSize));
if(mymodfast[0] == (GENmodel *)NULL) return(E_NOMEM);
mymodfast[0]->GENmodType = type;
mymodfast[0]->GENmodName = name;
mymodfast[0]->GENnextModel =(GENmodel *)((CKTcircuit *)ckt)->CKThead[type];
((CKTcircuit *)ckt)->CKThead[type]=(GENmodel *)mymodfast[0];
if(modfast) *modfast=(void *)mymodfast[0];
return(OK);
} else if (error==0) {
if(modfast) *modfast=(void *)mymodfast;
if(modfast) *modfast=(void *)mymodfast[0];
return(E_EXISTS);
} else {
return(error);

View File

@ -24,16 +24,16 @@ CKTmkCur(CKTcircuit *ckt, CKTnode **node, IFuid basename, char *suffix)
IFuid uid;
int error;
CKTnode *mynode;
CKTnode *checknode;
CKTnode *checknode[1];
error = CKTmkNode(ckt,&mynode);
if(error) return(error);
checknode = mynode;
checknode[0] = mynode;
error = (*(SPfrontEnd->IFnewUid))((void *)ckt,&uid,basename,
suffix,UID_SIGNAL,(void**)&checknode);
suffix,UID_SIGNAL,(void**)checknode);
if(error) {
FREE(mynode);
if(node) *node = checknode;
if(node) *node = checknode[0];
return(error);
}
mynode->name = uid;

View File

@ -22,16 +22,16 @@ CKTmkVolt(CKTcircuit *ckt, CKTnode **node, IFuid basename, char *suffix)
IFuid uid;
int error;
CKTnode *mynode;
CKTnode *checknode;
CKTnode *checknode[1];
error = CKTmkNode(ckt,&mynode);
if(error) return(error);
checknode = mynode;
checknode[0] = mynode;
error = (*(SPfrontEnd->IFnewUid))((void *)ckt,&uid,basename,
suffix,UID_SIGNAL,(void**)&checknode);
suffix,UID_SIGNAL,(void**)checknode);
if(error) {
FREE(mynode);
if(node) *node = checknode;
if(node) *node = checknode[0];
return(error);
}
mynode->name = uid;

View File

@ -522,7 +522,7 @@ CKTpzRunTrial(CKTcircuit *ckt, PZtrial **new_trialp, PZtrial **set)
PZtrial *p, *prev;
SPcomplex def_frac, diff_frac;
double reltol, abstol;
int def_mag, diff_mag, error;
int def_mag, diff_mag, error = 0;
int i;
int pretest, shifted, was_shifted;
int repeat;

View File

@ -72,7 +72,7 @@ int sens_sens(CKTcircuit *ckt, int restart)
static int is_dc;
int k, j, n;
int num_vars, branch_eq=0;
char *sen_data=NULL;
char *sen_data[1] = {NULL};
char namebuf[513];
IFuid *output_names, freq_name;
int bypass;
@ -187,7 +187,7 @@ int sens_sens(CKTcircuit *ckt, int restart)
error = (*SPfrontEnd->OUTpBeginPlot)((void *) ckt,
(void *) ckt->CKTcurJob,
ckt->CKTcurJob->JOBname, freq_name, IF_REAL, num_vars,
output_names, type, (void **) &sen_data);
output_names, type, (void **)sen_data);
if (error)
return error;
@ -199,7 +199,7 @@ int sens_sens(CKTcircuit *ckt, int restart)
output_values = NULL;
output_cvalues = NEWN(IFcomplex, num_vars);
if (sen_info->step_type != SENS_LINEAR)
(*(SPfrontEnd->OUTattributes))((void *)sen_data,
(*(SPfrontEnd->OUTattributes))((void *)sen_data[0],
NULL, OUT_SCALE_LOG, NULL);
}
@ -562,13 +562,13 @@ int sens_sens(CKTcircuit *ckt, int restart)
value.rValue = freq;
(*(SPfrontEnd->OUTpData))(sen_data, &value, &nvalue);
(*(SPfrontEnd->OUTpData))(sen_data[0], &value, &nvalue);
freq = inc_freq(freq, sen_info->step_type, step_size);
}
(*SPfrontEnd->OUTendPlot)((void *) sen_data);
(*SPfrontEnd->OUTendPlot)((void *) sen_data[0]);
if (is_dc) {
FREE(output_values); /* XXX free various vectors */

View File

@ -28,7 +28,7 @@ Modified: 2000 AlansFixes
/* ARGSUSED */
int
CKTsetOpt(void *ckt, void *anal, int opt, IFvalue *val)
CKTsetOpt(CKTcircuit *ckt, void *anal, int opt, IFvalue *val)
{
TSKtask *task = (TSKtask *)anal;
@ -150,33 +150,33 @@ CKTsetOpt(void *ckt, void *anal, int opt, IFvalue *val)
/* gtri - begin - wbk - add new options */
#ifdef XSPICE
case OPT_EVT_MAX_OP_ALTER:
((CKTcircuit *) ckt)->evt->limits.max_op_alternations = val->iValue;
ckt->evt->limits.max_op_alternations = val->iValue;
break;
case OPT_EVT_MAX_EVT_PASSES:
((CKTcircuit *) ckt)->evt->limits.max_event_passes = val->iValue;
ckt->evt->limits.max_event_passes = val->iValue;
break;
case OPT_ENH_NOOPALTER:
((CKTcircuit *) ckt)->evt->options.op_alternate = MIF_FALSE;
ckt->evt->options.op_alternate = MIF_FALSE;
break;
case OPT_ENH_RAMPTIME:
((CKTcircuit *) ckt)->enh->ramp.ramptime = val->rValue;
ckt->enh->ramp.ramptime = val->rValue;
break;
case OPT_ENH_CONV_LIMIT:
((CKTcircuit *) ckt)->enh->conv_limit.enabled = MIF_TRUE;
ckt->enh->conv_limit.enabled = MIF_TRUE;
break;
case OPT_ENH_CONV_STEP:
((CKTcircuit *) ckt)->enh->conv_limit.step = val->rValue;
((CKTcircuit *) ckt)->enh->conv_limit.enabled = MIF_TRUE;
ckt->enh->conv_limit.step = val->rValue;
ckt->enh->conv_limit.enabled = MIF_TRUE;
break;
case OPT_ENH_CONV_ABS_STEP:
((CKTcircuit *) ckt)->enh->conv_limit.abs_step = val->rValue;
((CKTcircuit *) ckt)->enh->conv_limit.enabled = MIF_TRUE;
ckt->enh->conv_limit.abs_step = val->rValue;
ckt->enh->conv_limit.enabled = MIF_TRUE;
break;
case OPT_MIF_AUTO_PARTIAL:
@ -185,8 +185,8 @@ CKTsetOpt(void *ckt, void *anal, int opt, IFvalue *val)
case OPT_ENH_RSHUNT:
if(val->rValue > 1.0e-30) {
((CKTcircuit *) ckt)->enh->rshunt_data.enabled = MIF_TRUE;
((CKTcircuit *) ckt)->enh->rshunt_data.gshunt = 1.0 / val->rValue;
ckt->enh->rshunt_data.enabled = MIF_TRUE;
ckt->enh->rshunt_data.gshunt = 1.0 / val->rValue;
}
else {
printf("WARNING - Rshunt option too small. Ignored.\n");

View File

@ -17,7 +17,7 @@ Modified: 2001 AlansFixes
#include "sperror.h"
#include "vsrc/vsrcdefs.h"
#include "isrc/isrcdefs.h"
#include "src/maths/ni/niniter.h" /* va, NInzIter */
#include "../maths/ni/niniter.h" /* va, NInzIter */
extern int CKTnoise( CKTcircuit *, int, int, Ndata * );
@ -37,7 +37,7 @@ NOISEan (CKTcircuit *ckt, int restart)
int code;
int step;
IFuid freqUid;
char *inst;
char *inst[1];
double freqTol; /* tolerence parameter for finding final frequency; hack */
NOISEAN *job = (NOISEAN*) (ckt->CKTcurJob);
@ -47,12 +47,12 @@ NOISEan (CKTcircuit *ckt, int restart)
negOutNode = ((CKTnode*) (job->outputRef))->number;
/* see if the source specified is AC */
inst = NULL;
inst[0] = NULL;
code = CKTtypelook("Vsource");
if (code != -1) {
error = CKTfndDev((void *)ckt,&code,(void **)&inst,
error = CKTfndDev((void *)ckt, &code,(void **)inst,
job->input, (void *)NULL, (IFuid)NULL);
if (!error && !((VSRCinstance *)inst)->VSRCacGiven) {
if (!error && !((VSRCinstance *)inst[0])->VSRCacGiven) {
errMsg = MALLOC(strlen(noacinput)+1);
strcpy(errMsg,noacinput);
return (E_NOACINPUT);
@ -60,8 +60,8 @@ NOISEan (CKTcircuit *ckt, int restart)
}
code = CKTtypelook("Isource");
if (code != -1 && inst==NULL) {
error = CKTfndDev((void *)ckt,&code, (void **)&inst,
if (code != -1 && inst[0]==NULL) {
error = CKTfndDev((void *)ckt,&code, (void **)inst,
job->input, (void *)NULL,(IFuid)NULL);
if (error) {
/* XXX ??? */
@ -70,7 +70,7 @@ NOISEan (CKTcircuit *ckt, int restart)
&job->input);
return (E_NOTFOUND);
}
if (!((ISRCinstance *)inst)->ISRCacGiven) {
if (!((ISRCinstance *)inst[0])->ISRCacGiven) {
errMsg = MALLOC(strlen(noacinput)+1);
strcpy(errMsg,noacinput);
return (E_NOACINPUT);

View File

@ -20,7 +20,7 @@ TFanal(CKTcircuit *ckt, int restart)
/* forced restart flag */
{
int size;
int insrc,outsrc;
int insrc = 0, outsrc = 0;
double outputs[3];
IFvalue outdata; /* structure for output data vector, will point to
* outputs vector above */

View File

@ -19,8 +19,8 @@ Author: 1988 Jaijeet S Roychowdhury
/* actually load the current resistance value into the sparse matrix
* previously provided */
int
BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
void TanDeriv(Dderivs *new, Dderivs *old);
int BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
{
BJTmodel *model = (BJTmodel*)inModel;
BJTinstance *here;

View File

@ -31,10 +31,10 @@ BJTsAcLoad(GENmodel *inModel, CKTcircuit *ckt)
double vbeOp;
double vbcOp;
double A0;
double DELA;
double DELA = 0.0;
double Apert;
double DELAinv;
double vte;
double vte = 0.0;
double gcpr;
double gepr;
double gpi;
@ -78,7 +78,7 @@ BJTsAcLoad(GENmodel *inModel, CKTcircuit *ckt)
double ce0,ice0;
double ceprm0,iceprm0;
double cs0,ics0;
double DvDp;
double DvDp = 0.0;
int iparmno,i;
SENstruct *info;

View File

@ -143,7 +143,7 @@ BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
/* loop through all the instances of the model */
for (here = model->BJTinstances; here != NULL ;
here=here->BJTnextInstance) {
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
if (here->BJTowner != ARCHme)
@ -176,10 +176,10 @@ matrixpointers:
if(error) return(error);
here->BJTcolPrimeNode = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void**)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
/* fprintf(stderr, "Nodeset copied from %s\n", tmpName);
fprintf(stderr, " to %s\n", tmp->name);
fprintf(stderr, " value %g\n",
@ -195,10 +195,10 @@ matrixpointers:
if(error) return(error);
here->BJTbasePrimeNode = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,2,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
/* fprintf(stderr, "Nodeset copied from %s\n", tmpName);
fprintf(stderr, " to %s\n", tmp->name);
fprintf(stderr, " value %g\n",
@ -214,10 +214,10 @@ matrixpointers:
if(error) return(error);
here->BJTemitPrimeNode = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
/* fprintf(stderr, "Nodeset copied from %s\n", tmpName);
fprintf(stderr, " to %s\n", tmp->name);
fprintf(stderr, " value %g\n",

View File

@ -60,10 +60,10 @@ BJTsLoad(GENmodel *inModel, CKTcircuit *ckt)
double qcs;
double qbx0;
double qbx;
double DqbeDp;
double DqbcDp;
double DqcsDp;
double DqbxDp;
double DqbeDp = 0.0;
double DqbcDp = 0.0;
double DqcsDp = 0.0;
double DqbxDp = 0.0;
double Osxpbe;
double Osxpbc;
double Osxpcs;

View File

@ -25,18 +25,18 @@ BJT2disto(int mode, GENmodel *genmodel, CKTcircuit *ckt)
double r1h1x,i1h1x;
double r1h1y,i1h1y;
double r1h1z, i1h1z;
double r1h2x, i1h2x;
double r1h2y, i1h2y;
double r1h2z, i1h2z;
double r1hm2x,i1hm2x;
double r1hm2y,i1hm2y;
double r1hm2z, i1hm2z;
double r2h11x,i2h11x;
double r2h11y,i2h11y;
double r2h11z, i2h11z;
double r2h1m2x,i2h1m2x;
double r2h1m2y,i2h1m2y;
double r2h1m2z, i2h1m2z;
double r1h2x = 0.0, i1h2x = 0.0;
double r1h2y = 0.0, i1h2y = 0.0;
double r1h2z = 0.0, i1h2z = 0.0;
double r1hm2x = 0.0,i1hm2x = 0.0;
double r1hm2y = 0.0,i1hm2y = 0.0;
double r1hm2z = 0.0, i1hm2z = 0.0;
double r2h11x = 0.0,i2h11x = 0.0;
double r2h11y = 0.0,i2h11y = 0.0;
double r2h11z = 0.0, i2h11z = 0.0;
double r2h1m2x = 0.0,i2h1m2x = 0.0;
double r2h1m2y = 0.0,i2h1m2y = 0.0;
double r2h1m2z = 0.0, i2h1m2z = 0.0;
double temp, itemp;
register BJT2instance *here;
#ifdef DISTODEBUG

View File

@ -17,9 +17,8 @@ Modified: Alan Gillespie
* This function initialises the Taylor coeffs for the
* BJT2's in the circuit
*/
int
BJT2dSetup(GENmodel *inModel, CKTcircuit *ckt)
void TanDeriv(Dderivs *new, Dderivs *old);
int BJT2dSetup(GENmodel *inModel, CKTcircuit *ckt)
/* actually load the current resistance value into the
* sparse matrix previously provided
*/
@ -31,7 +30,7 @@ BJT2dSetup(GENmodel *inModel, CKTcircuit *ckt)
double c4;
double lcapbe1,lcapbe2,lcapbe3;
double lcapbx1,lcapbx2,lcapbx3;
double cb;
double cb = 0.0;
double cbc;
double cbcn;
double cbe;
@ -55,7 +54,7 @@ BJT2dSetup(GENmodel *inModel, CKTcircuit *ckt)
double f3;
double fcpc;
double fcpe;
double gbb1;
double gbb1 = 0.0;
double gbc;
double gbcn;
double gbe;
@ -64,7 +63,7 @@ BJT2dSetup(GENmodel *inModel, CKTcircuit *ckt)
double gben2,gben3;
double gbcn2,gbcn3;
double gben;
double gbb2, gbb3;
double gbb2 = 0.0, gbb3 = 0.0;
double oik;
double oikr;
double ovtf;
@ -233,7 +232,7 @@ for( ; model != NULL; model = model->BJT2nextModel ) {
/*
* determine dc current and derivitives
*/
next1: vtn=vt*model->BJT2emissionCoeffF;
vtn=vt*model->BJT2emissionCoeffF;
if(vbe > -5*vtn){
evbe=exp(vbe/vtn);
cbe=csat*(evbe-1)+ckt->CKTgmin*vbe;

View File

@ -109,13 +109,12 @@ BJT2load(GENmodel *inModel, CKTcircuit *ckt)
double td;
double temp;
double tf;
double tol;
double tr;
double vbc;
double vbe;
double vbx;
double vbx = 0.0;
double vce;
double vsub;
double vsub = 0.0;
double vt;
double vtc;
double vte;

View File

@ -36,7 +36,6 @@ BJT2noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
double tempInoise;
double noizDens[BJT2NSRCS];
double lnNdens[BJT2NSRCS];
int error;
int i;
/* define the names of the noise sources */

View File

@ -32,10 +32,10 @@ BJT2sAcLoad(GENmodel *inModel, CKTcircuit *ckt)
double vbeOp;
double vbcOp;
double A0;
double DELA;
double DELA = 0.0;
double Apert;
double DELAinv;
double vte;
double vte = 0.0;
double gcpr;
double gepr;
double gpi;
@ -79,7 +79,7 @@ BJT2sAcLoad(GENmodel *inModel, CKTcircuit *ckt)
double ce0,ice0;
double ceprm0,iceprm0;
double cs0,ics0;
double DvDp;
double DvDp = 0.0;
int iparmno,i;
SENstruct *info;
@ -155,7 +155,7 @@ BJT2sAcLoad(GENmodel *inModel, CKTcircuit *ckt)
/* store the unperturbed values of small signal parameters */
if(error = BJT2load((GENmodel*)model,ckt)) return(error);
if ((error = BJT2load((GENmodel*)model,ckt))) return(error);
*(here->BJT2senGpi)= *(ckt->CKTstate0 + here->BJT2gpi);
*(here->BJT2senGmu)= *(ckt->CKTstate0 + here->BJT2gmu);
@ -271,7 +271,7 @@ BJT2sAcLoad(GENmodel *inModel, CKTcircuit *ckt)
/* store the small signal parameters
* corresponding to perturbed area
*/
if(error = BJT2load((GENmodel*)model,ckt)) return(error);
if ((error = BJT2load((GENmodel*)model,ckt))) return(error);
*(here->BJT2senGpi + 1)= *(ckt->CKTstate0 + here->BJT2gpi);
*(here->BJT2senGmu + 1)= *(ckt->CKTstate0 + here->BJT2gmu);
@ -310,7 +310,7 @@ pertvbx: /* Perturbation of vbx */
/* store the small signal parameters
* corresponding to perturbed vbx
*/
if(error = BJT2load((GENmodel*)model,ckt)) return(error);
if((error = BJT2load((GENmodel*)model,ckt))) return(error);
*(here->BJT2senGpi + 2)= *(ckt->CKTstate0 + here->BJT2gpi);
*(here->BJT2senGmu + 2)= *(ckt->CKTstate0 + here->BJT2gmu);
@ -349,7 +349,7 @@ pertvbe: /* Perturbation of vbe */
/* store the small signal parameters
* corresponding to perturbed vbe
*/
if(error = BJT2load((GENmodel*)model,ckt)) return(error);
if((error = BJT2load((GENmodel*)model,ckt))) return(error);
*(here->BJT2senGpi + 3)= *(ckt->CKTstate0 + here->BJT2gpi);
*(here->BJT2senGmu + 3)= *(ckt->CKTstate0 + here->BJT2gmu);
@ -391,7 +391,7 @@ pertvbc: /* Perturbation of vbc */
/* store the small signal parameters
* corresponding to perturbed vbc
*/
if(error = BJT2load((GENmodel*)model,ckt)) return(error);
if((error = BJT2load((GENmodel*)model,ckt))) return(error);
*(here->BJT2senGpi + 4)= *(ckt->CKTstate0 + here->BJT2gpi);
*(here->BJT2senGmu + 4)= *(ckt->CKTstate0 + here->BJT2gmu);
*(here->BJT2senGm + 4)= *(ckt->CKTstate0 + here->BJT2gm);
@ -430,7 +430,7 @@ pertvcs: /* Perturbation of vcs */
/* store the small signal parameters
* corresponding to perturbed vcs
*/
if(error = BJT2load((GENmodel*)model,ckt)) return(error);
if((error = BJT2load((GENmodel*)model,ckt))) return(error);
*(here->BJT2senCsub + 5)= *(ckt->CKTstate0 + here->BJT2cqsub);
}

View File

@ -185,7 +185,7 @@ BJT2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
/* loop through all the instances of the model */
for (here = model->BJT2instances; here != NULL ;
here=here->BJT2nextInstance) {
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
if (here->BJT2owner != ARCHme)
@ -220,10 +220,10 @@ matrixpointers:
if(error) return(error);
here->BJT2colPrimeNode = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
/* fprintf(stderr, "Nodeset copied from %s\n", tmpName);
fprintf(stderr, " to %s\n", tmp->name);
fprintf(stderr, " value %g\n",
@ -239,10 +239,10 @@ matrixpointers:
if(error) return(error);
here->BJT2basePrimeNode = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,2,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
/* fprintf(stderr, "Nodeset copied from %s\n", tmpName);
fprintf(stderr, " to %s\n", tmp->name);
fprintf(stderr, " value %g\n",
@ -258,10 +258,10 @@ matrixpointers:
if(error) return(error);
here->BJT2emitPrimeNode = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
/* fprintf(stderr, "Nodeset copied from %s\n", tmpName);
fprintf(stderr, " to %s\n", tmp->name);
fprintf(stderr, " value %g\n",

View File

@ -61,10 +61,10 @@ BJT2sLoad(GENmodel *inModel, CKTcircuit *ckt)
double qcs;
double qbx0;
double qbx;
double DqbeDp;
double DqbcDp;
double DqcsDp;
double DqbxDp;
double DqbeDp = 0.0;
double DqbcDp = 0.0;
double DqcsDp = 0.0;
double DqbxDp = 0.0;
double Osxpbe;
double Osxpbc;
double Osxpcs;

View File

@ -27,18 +27,18 @@ B1evaluate(double vds, double vbs, double vgs, B1instance *here, B1model *model,
double gm;
double gds;
double gmbs;
double qg;
double qb;
double qd;
double cggb;
double cgdb;
double cgsb;
double cbgb;
double cbdb;
double cbsb;
double cdgb;
double cddb;
double cdsb;
double qg = 0.0;
double qb = 0.0;
double qd = 0.0;
double cggb = 0.0;
double cgdb = 0.0;
double cgsb = 0.0;
double cbgb = 0.0;
double cbdb = 0.0;
double cbsb = 0.0;
double cdgb = 0.0;
double cddb = 0.0;
double cdsb = 0.0;
double Vfb;
double Phi;
double K1;
@ -83,7 +83,7 @@ B1evaluate(double vds, double vbs, double vgs, B1instance *here, B1model *model,
double dBetadVgs;
double dBetadVds;
double dBetadVbs;
double VdsSat;
double VdsSat = 0.0;
double Argl1;
double Argl2;
double Vc;

View File

@ -273,7 +273,7 @@ B1setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
for (here = model->B1instances; here != NULL ;
here=here->B1nextInstance) {
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
if (here->B1owner == ARCHme) {
@ -334,10 +334,10 @@ B1setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
if(error) return(error);
here->B1dNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -354,10 +354,10 @@ B1setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
if(error) return(error);
here->B1sNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -21,16 +21,17 @@ B2evaluate(double Vds, double Vbs, double Vgs, B2instance *here, B2model *model,
double *cdg, double *cdd, double *cds, double *Ids, double *von,
double *vdsat, CKTcircuit *ckt)
{
double Vth, Vdsat;
double Vth, Vdsat = 0.0;
double Phisb, T1s, Eta, Gg, Aa, Inv_Aa, U1, U1s, Vc, Kk, SqrtKk;
double dPhisb_dVb, dT1s_dVb, dVth_dVb, dVth_dVd, dAa_dVb, dVc_dVd;
double dVc_dVg, dVc_dVb, dKk_dVc, dVdsat_dVd, dVdsat_dVg, dVdsat_dVb;
double dVc_dVg, dVc_dVb, dKk_dVc;
double dVdsat_dVd = 0.0, dVdsat_dVg = 0.0, dVdsat_dVb = 0.0;
double dUvert_dVg, dUvert_dVd, dUvert_dVb, Inv_Kk;
double dUtot_dVd, dUtot_dVb, dUtot_dVg, Ai, Bi, Vghigh, Vglow, Vgeff, Vof;
double Vbseff, Vgst, Vgdt, Qbulk, Utot;
double T0, T1, T2, T3, T4, T5, Arg1, Arg2, Exp0;
double tmp, tmp1, tmp2, tmp3, Uvert, Beta1, Beta2, Beta0, dGg_dVb, Exp1;
double T6, T7, T8, T9, n, ExpArg, ExpArg1;
double T0, T1, T2, T3, T4, T5, Arg1, Arg2, Exp0 = 0.0, Exp1 = 0.0;
double tmp, tmp1, tmp2, tmp3, Uvert, Beta1, Beta2, Beta0, dGg_dVb;
double T6, T7, T8, T9, n = 0.0, ExpArg, ExpArg1;
double Beta, dQbulk_dVb, dVgdt_dVg, dVgdt_dVd;
double dVbseff_dVb, Ua, Ub, dVgdt_dVb, dQbulk_dVd;
double Con1, Con3, Con4, SqrVghigh, SqrVglow, CubVghigh, CubVglow;

View File

@ -32,8 +32,8 @@ B2load(GENmodel *inModel, CKTcircuit *ckt)
double DrainPerimeter;
double SourcePerimeter;
double arg;
double capbd;
double capbs;
double capbd = 0.0;
double capbs = 0.0;
double cbd;
double cbhat;
double cbs;

View File

@ -493,13 +493,13 @@ B2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
if(error) return(error);
here->B2dNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -517,13 +517,13 @@ B2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
return(error);
here->B2sNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -25,7 +25,8 @@ double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb;
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb;
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb, omega;
double GSoverlapCap, GDoverlapCap, GBoverlapCap, FwdSum, RevSum, Gm, Gmbs;
double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb, xcqdb, xcqsb, xcqbb;
double dxpart, sxpart, xgtg, xgtd, xgts, xgtb;
double xcqgb = 0.0, xcqdb = 0.0, xcqsb = 0.0, xcqbb = 0.0;
double gbspsp, gbbdp, gbbsp, gbspg, gbspb;
double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp;
double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs;

View File

@ -42,13 +42,14 @@ double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd = 0.0, dVfbeff_dVb, V3, V4;
double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb;
double gcsgb, gcssb, MJ, MJSW, MJSWG;
double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact;
double qgate, qbulk, qdrn, qsrc, qinoi, cqgate, cqbulk, cqdrn;
double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc;
double qinoi, cqgate, cqbulk, cqdrn;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd;
double Vgs_eff, Vfb, dVfb_dVb = 0.0, dVfb_dVd = 0.0;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm;
double Vtm;
@ -107,8 +108,8 @@ double Leff, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift;
double gcqdb,gcqsb,gcqgb,gcqbb;
double qcheq = 0.0, qdef, gqdef = 0.0, cqdef, cqcheq, gtau_diff, gtau_drift;
double gcqdb = 0.0,gcqsb = 0.0, gcqgb = 0.0,gcqbb = 0.0;
double dxpart, sxpart, ggtg, ggtd, ggts, ggtb;
double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs;
double dsxpart_dVd, dsxpart_dVg, dsxpart_dVb, dsxpart_dVs;
@ -118,7 +119,8 @@ double gbdpdp, gbdpg, gbdpb, gbdpsp;
double Cgg, Cgd, Cgb, Cdg, Cdd, Cds;
double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0;
double dQac0_dVg, dQac0_dVd, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb;
double dQac0_dVg, dQac0_dVd = 0.0, dQac0_dVb, dQsub0_dVg;
double dQsub0_dVd, dQsub0_dVb;
double m;

View File

@ -26,7 +26,8 @@ double xcdgb, xcddb, xcdsb, xcdbb, xcsgb, xcsdb, xcssb, xcsbb;
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, FwdSum, RevSum, Gm, Gmbs;
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb;
double GSoverlapCap, GDoverlapCap, GBoverlapCap;
double dxpart, sxpart, xgtg, xgtd, xgts, xgtb, xcqgb, xcqdb, xcqsb, xcqbb;
double dxpart, sxpart, xgtg, xgtd, xgts, xgtb;
double xcqgb = 0.0, xcqdb = 0.0, xcqsb = 0.0, xcqbb = 0.0;
double gbspsp, gbbdp, gbbsp, gbspg, gbspb;
double gbspdp, gbdpdp, gbdpg, gbdpb, gbdpsp;
double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs;

View File

@ -35,7 +35,7 @@ BSIM3instance *here;
int error;
CKTnode *tmp;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
/* loop through all the BSIM3 device models */
@ -947,10 +947,10 @@ IFuid tmpName;
here->BSIM3dNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -976,10 +976,10 @@ IFuid tmpName;
here->BSIM3sNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -38,7 +38,7 @@ double gbbg, gbbdp, gbbb, gbbp, gbbsp, gbbT;
double gddpg, gddpdp, gddpsp, gddpb, gddpT;
double gsspg, gsspdp, gsspsp, gsspb, gsspT;
double gppb, gppp;
double xcTt, cTt, gcTt, gTtt, gTtg, gTtb, gTtdp, gTtsp;
double xcTt, cTt, gTtt, gTtg, gTtb, gTtdp, gTtsp;
double EDextrinsicCap, ESextrinsicCap;
double xcedb, xcesb;

View File

@ -94,13 +94,13 @@ B3SOImodel *model = (B3SOImodel*)inModel;
B3SOIinstance *here;
int selfheat;
double SourceSatCurrent, DrainSatCurrent, Gmin;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double Gmin;
double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst = 0.0;
double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double evbd, evbs, arg, sarg;
double arg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double tol, PhiB, PhiBSWG, MJSWG;
double PhiBSWG, MJSWG;
double gcgdb, gcggb, gcgsb, gcgeb, gcgT;
double gcsdb, gcsgb, gcssb, gcseb, gcsT;
double gcddb, gcdgb, gcdsb, gcdeb, gcdT;
@ -110,50 +110,45 @@ double gcTt, gTtg, gTtb, gTtdp, gTtt, gTtsp;
double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact;
double vg, vd, vs, vp, ve, vb;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT;
double Vgs_eff, Vfb = 0.0, dVfb_dVb, dVfb_dVd, dVfb_dT;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd, dVth_dT;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm;
double Vgdt, Vgsaddvth, Vgsaddvth2, Vgsaddvth1o3, n, dn_dVb, Vtm;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg;
double n, dn_dVb, Vtm;
double ExpArg, V0;
double ueff, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
double Esat, dEsat_dVg, dEsat_dVd, dEsat_dVb, Vdsat, Vdsat0;
double Esat, Vdsat;
double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat, dAlphaz_dVg, dAlphaz_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT;
double Va, Va2, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Vbseff, dVbseff_dVb;
double Alphaz, CoxWL;
double dVgdt_dVg, dVgdt_dVd, dVgdt_dVb;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVrg, dT0_dT;
double CoxWL;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dT;
double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dT;
double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dT;
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT;
double T4, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dT;
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT;
double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dT;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T8, dT8_dVg, dT8_dVd, dT8_dVb, dT8_dVrg;
double T9, dT9_dVg, dT9_dVd, dT9_dVb, dT9_dVrg;
double T10, dT10_dVg, dT10_dVb, dT10_dVd;
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT = 0.0;
double T4, dT4_dVd, dT4_dVb, dT4_dT;
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT = 0.0;
double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dT = 0.0;
double T7;
double T8, dT8_dVd;
double T9, dT9_dVd;
double T10, dT10_dVb, dT10_dVd;
double T11, T12;
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double T100, T101;
double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT;
double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT;
double VAHCE, dVAHCE_dVg, dVAHCE_dVd, dVAHCE_dVb;
double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb;
double Delt_vth, dDelt_vth_dVb, dDelt_vth_dT;
double Theta0, dTheta0_dVb, Theta1, dTheta1_dVb;
double Thetarout, dThetarout_dVb, TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, DIBL_fact, Lambda, dLambda_dVg;
double Rout_Vgs_factor, dRout_Vgs_factor_dVg, dRout_Vgs_factor_dVb;
double dRout_Vgs_factor_dVd;
double tempv, a1;
double Theta0, dTheta0_dVb;
double TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg;
double a1;
double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dT;
double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
double diffVds, diffVdsCV;
double diffVds;
double dAbulk_dVg, dn_dVd ;
double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT;
double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT;
@ -163,7 +158,7 @@ double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT;
double Ids, Gm, Gds, Gmb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVd, dVdsatCV_dVg, dVdsatCV_dVb;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
@ -171,42 +166,39 @@ double qgdo, qgso, cgdo, cgso;
double dxpart, sxpart;
struct b3soiSizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, J, error, I;
double junk[50];
int ByPass, Check, ChargeComputationNeeded = 0, error;
double gbbsp, gbbdp, gbbg, gbbb, gbbp, gbbT;
double gddpsp, gddpdp, gddpg, gddpb, gddpT;
double gsspsp, gsspdp, gsspg, gsspb, gsspT;
double Gbpbs, Gbpps;
double vse, vde, ves, ved, veb, vge, delves, vedo, delved;
double ves, ved, veb, vge = 0.0, delves, vedo, delved;
double vps, vpd, Vps, delvps;
double Vbd, Ves, Vesfb, sqrtXdep, DeltVthtemp, dDeltVthtemp_dT;
double Vbd, Ves, Vesfb, DeltVthtemp, dDeltVthtemp_dT;
double Vbp, dVbp_dVb;
double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT;
double Gm0, Gds0, Gmb0, GmT0, Gmc, GmT;
double dDIBL_Sft_dVb;
double diffVdsii ;
double Idgidl, Gdgidld, Gdgidlg, Isgidl, Gsgidlg;
double Gjsd, Gjss, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Ibp, Iii, Giid, Giig, Giib, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon;
double gppb, gppp;
double delTemp, deldelTemp, Temp;
double ceqth, ceqqth;
double K1, WL;
double qjs, gcjsbs, gcjsT;
double qjd, gcjdbs, gcjdds, gcjdT;
double K1;
double qjs = 0.0, gcjsbs, gcjsT;
double qjd = 0.0, gcjdbs, gcjdds, gcjdT;
double qge;
double ceqqe;
double ni, Eg, Cbox, Nfb, CboxWL;
double ni, Eg, Cbox, CboxWL;
double cjsbs;
double dVfbeff_dVrg;
double qinv, qgate, qbody, qdrn, qsrc, qsub, cqgate, cqbody, cqdrn, cqsub, cqtemp;
double Cgg, Cgd, Cgs, Cgb, Cdg, Cdd, Cds, Cdb, Qg, Qd;
double Csg, Csd, Css, Csb, Cbg, Cbd, Cbs, Cbb, Qs, Qb;
double qinv, qgate = 0.0, qbody = 0.0, qdrn = 0.0, qsrc, qsub = 0.0;
double cqgate, cqbody, cqdrn, cqsub, cqtemp;
double Cgg, Cgd, Cgb;
double Csg, Csd, Csb, Cbg = 0.0, Cbd = 0.0, Cbb = 0.0;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1;
double Vbseff0;
double Vdsatii ,dVdsatii_dVg ,dVdsatii_dVd, dVdsatii_dVb, dVdsatii_dT;
double Ibjt ,dIbjt_dVb ,dIbjt_dVd ,dIbjt_dT;
double Vdsatii;
double Ibs1 ,dIbs1_dVb ,dIbs1_dT;
double Ibs2 ,dIbs2_dVb ,dIbs2_dT;
double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT;
@ -215,31 +207,25 @@ double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT;
double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT;
double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT;
double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT;
double ExpVbs1, dExpVbs1_dVb, dExpVbs1_dT;
double ExpVbs2, dExpVbs2_dVb, dExpVbs2_dT;
double ExpVbs4, dExpVbs4_dVb, dExpVbs4_dT;
double ExpVbd1, dExpVbd1_dVb, dExpVbd1_dT;
double ExpVbd2, dExpVbd2_dVb, dExpVbd2_dT;
double ExpVbd4, dExpVbd4_dVb, dExpVbd4_dT;
double WTsi, NVtm1, NVtm2;
double Ic ,dIc_dVb ,dIc_dVd;
double Ibs ,dIbs_dVb ,dIbs_dVd ;
double Ibd ,dIbd_dVb;
double Ibs;
double Ibd;
double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dT;
double Qsub0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ;
double Qac0 ,dQac0_dVb ,dQac0_dVd;
double Qdep0 ,dQdep0_dVb;
double Qsub0 = 0.0, dQsub0_dVg, dQsub0_dVb, dQsub0_dVd ;
double Qac0 = 0.0 ,dQac0_dVb ,dQac0_dVd;
double Qe1 , dQe1_dVb, dQe1_dVe, dQe1_dT;
double Ce1b ,Ce1e, Ce1T;
double dQac0_dVrg, dQsub0_dVrg;
/* for self-heating */
double vbi, vfbb, phi, sqrtPhi, Xdep0, jbjt, jdif, jrec, jtun, u0temp, vsattemp;
double vbi, vfbb, phi, sqrtPhi, Xdep0, jbjt, jdif, jrec, jtun;
double u0temp, vsattemp;
double rds0, ua, ub, uc;
double dvbi_dT, dvfbb_dT, djbjt_dT, djdif_dT, djrec_dT, djtun_dT, du0temp_dT;
double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT;
double dVfbeff_dT, dQac0_dT, dQsub0_dT;
double CbT, CsT, CgT, CeT;
double CbT, CsT, CgT;
/* v2.0 release */
@ -249,14 +235,15 @@ double T13, T14;
double dT11_dVb, dT13_dVb, dT14_dVb;
double dVgst_dVd;
double Vdsatii0, dVdsatii0_dT;
double VgsStep, dVgsStep_dT, Ratio, dRatio_dVg, dRatio_dVb, dRatio_dVd, dRatio_dT, dTempRatio_dT;
double VgsStep, dVgsStep_dT, Ratio, dRatio_dVg, dRatio_dVb, dRatio_dVd;
double dRatio_dT, dTempRatio_dT;
double Vdiff, dVdiff_dVg, dVdiff_dVb, dVdiff_dVd, dVdiff_dT;
double dNVtm1_dT, dNVtm2_dT;
double dNVtm1_dT;
double NVtmf, NVtmr, dNVtmf_dT, dNVtmr_dT;
double TempRatioMinus1;
double Ahli, dAhli_dT;
double WsTsi, WdTsi;
double dPhiBSWG_dT, dcjsbs_dT, darg_dT, ddT3_dVb_dT;
double dPhiBSWG_dT, dcjsbs_dT, darg_dT = 0.0, ddT3_dVb_dT = 0.0;
double dT7_dT, dT0_dT7, dT1_dT7, dT2_dT7;
double CoxWLb, CoxWLcenb;
double ExpVbsNVtm, dExpVbsNVtm_dVb, dExpVbsNVtm_dT;
@ -274,14 +261,18 @@ double cjdbs, dcjdbs_dT;
double wdios, wdiod, wdiosCV, wdiodCV;
/* for capMod3 */
double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVb, LINK, Ccen, Coxeff, dCoxeff_dVg, dCoxeff_dVb;
double CoxWLcen, QovCox, dQac0_dVg, DeltaPhi, dDeltaPhi_dVg, dDeltaPhi_dVd, dDeltaPhi_dVb;
double dTcen_dVd, dTcen_dT, dCoxeff_dVd, dCoxeff_dT, dCoxWLcenb_dT, qinoi, qbulk;
double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVb, LINK, Ccen, Coxeff;
double dCoxeff_dVg, dCoxeff_dVb;
double CoxWLcen, QovCox, dQac0_dVg, DeltaPhi, dDeltaPhi_dVg;
double dDeltaPhi_dVd, dDeltaPhi_dVb;
double dTcen_dVd, dTcen_dT, dCoxeff_dVd, dCoxeff_dT, dCoxWLcenb_dT;
double qinoi, qbulk;
double T3zb, lt1zb, ltwzb, Theta0zb;
double Delt_vthzb, dDelt_vthzb_dT;
double DeltVthwzb, dDeltVthwzb_dT;
double DeltVthtempzb, dDeltVthtempzb_dT;
double Vthzb, dVthzb_dT, Vfbzb, dVfbzb_dT;
double Vthzb = 0.0, dVthzb_dT = 0.0, Vfbzb, dVfbzb_dT;
/* v3.0 */
double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb, Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd;
@ -295,31 +286,34 @@ double gIgtotg, gIgtotd, gIgtotb, gIgtots, Igtoteq;
/* v3.0 */
double Vbsitf, dVbsitf_dVg, dVbsitf_dVd, dVbsitf_dVb, dVbsitf_dVe, dVbsitf_dT;
double dIgb1_dVe, gige, Giie, dT0_dVe, dRatio_dVe, dVdiff_dVe;
double dT1_dVe, dT5_dVe, dIgb_dVe, dVox_dVe, dVoxdepinv_dVe, dVaux_dVe;
double dT1_dVe, dT5_dVe, dIgb_dVe, dVox_dVe, dVoxdepinv_dVe = 0.0, dVaux_dVe;
double Gme, gTte, gbbe, gddpe, gsspe;
double Vbsdio, dVbsdio_dVg, dVbsdio_dVd, dVbsdio_dVe, dVbsdio_dVb, dVbsdio_dT;
double Vbs0, dVbs0_dVg, dVbs0_dVd, dVbs0_dVb, dVbs0_dVe, dVbs0_dT;
double Vbs0, dVbs0_dVg, dVbs0_dVd, dVbs0_dVe, dVbs0_dT;
double Vbs0mos, dVbs0mos_dVe, dVbs0mos_dT;
double Vbsmos, dVbsmos_dVg, dVbsmos_dVd, dVbsmos_dVb, dVbsmos_dVe, dVbsmos_dT;
double PhiON, dPhiON_dVg, dPhiON_dVd, dPhiON_dVb, dPhiON_dVe, dPhiON_dT;
double PhiFD, dPhiFD_dVg, dPhiFD_dVd, dPhiFD_dVb, dPhiFD_dVe, dPhiFD_dT;
double Vbs0t, dVbs0t_dVg, dVbs0t_dVd, dVbs0t_dVb, dVbs0t_dVe, dVbs0t_dT;
double PhiON, dPhiON_dVg, dPhiON_dVd, dPhiON_dVe, dPhiON_dT;
double PhiFD, dPhiFD_dVg, dPhiFD_dVd, dPhiFD_dVe, dPhiFD_dT;
double Vbs0t, dVbs0t_dVg, dVbs0t_dVd, dVbs0t_dVe, dVbs0t_dT;
double VthFD, dVthFD_dVd, dVthFD_dVb, dVthFD_dVe, dVthFD_dT;
double VtgsFD, ExpVtgsFD, VgstFD, ExpVgstFD;
double VtgseffFD, dVtgseffFD_dVd, dVtgseffFD_dVg, dVtgseffFD_dVe, dVtgseffFD_dT;
double VgsteffFD, dVgsteffFD_dVd, dVgsteffFD_dVg, dVgsteffFD_dVe, dVgsteffFD_dT;
double VtgseffFD, dVtgseffFD_dVd, dVtgseffFD_dVg, dVtgseffFD_dVe;
double dVtgseffFD_dT;
double VgsteffFD, dVgsteffFD_dVd, dVgsteffFD_dVg, dVgsteffFD_dVe;
double dVgsteffFD_dT;
double dT2_dVe, dVbsh_dVg, dVbsh_dVd, dVbsh_dVe, dVbsh_dT;
double dVgsteff_dVe, dVbseff_dVg, dVbseff_dVd, dVbseff_dVe, dVbseff_dT;
/* v2.2 release */
double Vgb, dVgb_dVg, dVgb_dVb, Vox, dVox_dVg, dVox_dVd, dVox_dVb;
double Vgb = 0.0, dVgb_dVg = 0.0, dVgb_dVb = 0.0, Vox, dVox_dVg;
double dVox_dVd, dVox_dVb;
double OxideRatio, Vaux, dVaux_dVg, dVaux_dVd, dVaux_dVb;
double Igb, dIgb_dVg, dIgb_dVd, dIgb_dVb;
double ceqgate;
double dT0_dVox, Voxeff, dVoxeff_dVox;
double dVox_dT, dVaux_dT, dIgb_dT;
double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVb, dVoxacc_dT;
double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd, dVoxdepinv_dT;
double dVox_dT, dVaux_dT = 0.0, dIgb_dT;
double Voxacc = 0.0, dVoxacc_dVg = 0.0, dVoxacc_dVd = 0.0, dVoxacc_dVb = 0.0;
double Voxdepinv = 0.0, dVoxdepinv_dVg = 0.0, dVoxdepinv_dVb = 0.0;
double dVoxdepinv_dVd = 0.0, dVoxdepinv_dT = 0.0;
double Igb1, dIgb1_dVg, dIgb1_dVd, dIgb1_dVb, dIgb1_dT;
double Igb2, dIgb2_dVg, dIgb2_dVd, dIgb2_dVb, dIgb2_dT;
double gigs, gigd, gigb, gigg;

View File

@ -48,9 +48,8 @@ B3SOIStrongInversionNoiseEval(double vgs, double vds, B3SOImodel *model,
B3SOIinstance *here, double freq, double temp)
{
struct b3soiSizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi;
double req, ceq;
double cd, esat, DelClm, EffFreq, N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->B3SOIcd) * here->B3SOIm;
@ -107,11 +106,10 @@ double noizDens[B3SOINSRCS];
double lnNdens[B3SOINSRCS];
double vgs, vds, Slimit;
double N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;
double n, ExpArg, Ssi, Swi;
double T1, T10, T11;
double Ssi, Swi;
int error, i;
int i;
/* define the names of the noise sources */
static char *B3SOInNames[B3SOINSRCS] =

View File

@ -19,9 +19,10 @@ B3SOIpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
B3SOImodel *model = (B3SOImodel*)inModel;
B3SOIinstance *here;
double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb;
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb;
double gdpr, gspr, gds, gbd, gbs;
double capbd = 0.0, capbs = 0.0, xcsgb, xcdsb, xcsdb;
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb;
double GSoverlapCap, GDoverlapCap, GBoverlapCap;
double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0;
double FwdSum, RevSum, Gm, Gmbs;
double m;

View File

@ -36,13 +36,11 @@ B3SOIinstance *here;
int error;
CKTnode *tmp;
double tmp1, tmp2;
double nfb0, Cboxt;
int itmp1;
double Cboxt;
/* Alan's Nodeset Fix */
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
@ -1236,10 +1234,10 @@ IFuid tmpName;
here->B3SOIdNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -1258,10 +1256,10 @@ IFuid tmpName;
here->B3SOIsNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -49,14 +49,14 @@ B3SOItemp(GENmodel *inModel, CKTcircuit *ckt)
{
B3SOImodel *model = (B3SOImodel*) inModel;
B3SOIinstance *here;
struct b3soiSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn;
double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
struct b3soiSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam = NULL;
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn;
double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
double SDphi, SDgamma;
int Size_Not_Found;
/* v2.0 release */
double tmp3, T7, T8, T9;
double tmp3, T7;
/* loop through all the B3SOI device models */

View File

@ -41,10 +41,9 @@ double gbbg, gbbdp, gbbb, gbbe, gbbp, gbbsp, gbbT;
double gddpg, gddpdp, gddpsp, gddpb, gddpe, gddpT;
double gsspg, gsspdp, gsspsp, gsspb, gsspe, gsspT;
double gppg, gppdp, gppb, gppe, gppp, gppsp, gppT;
double xcTt, cTt, gcTt, gTtt, gTtg, gTtb, gTte, gTtdp, gTtsp;
double xcTt, cTt, gTtt, gTtg, gTtb, gTte, gTtdp, gTtsp;
double Dum1, Dum2, Dum3, Dum4, Dum5;
FILE *fpdebug;
FILE *fpdebug = NULL;
double m;

View File

@ -55,8 +55,6 @@ double
B3SOIDDSmartVbs(double New, double Old, B3SOIDDinstance *here,
CKTcircuit *ckt, int *check)
{
double T0, T1, del;
/* only do it for floating body and DC */
if (here->B3SOIDDfloat && (ckt->CKTmode & (MODEDC | MODEDCOP)))
{
@ -104,13 +102,13 @@ B3SOIDDmodel *model = (B3SOIDDmodel*)inModel;
B3SOIDDinstance *here;
int selfheat;
double SourceSatCurrent, DrainSatCurrent, Gmin;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double Gmin;
double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst = 0.0;
double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double evbd, evbs, arg, sarg;
double arg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double tol, PhiB, PhiBSW, MJ, MJSW, PhiBSWG, MJSWG;
double Vfbeff, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double PhiBSWG, MJSWG;
double gcgdb, gcggb, gcgsb, gcgeb, gcgT;
double gcsdb, gcsgb, gcssb, gcseb, gcsT;
double gcddb, gcdgb, gcdsb, gcdeb, gcdT;
@ -121,59 +119,56 @@ double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact;
double vg, vd, vs, vp, ve, vb;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd, dVth_dT;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm;
double Vgdt, Vgsaddvth, Vgsaddvth2, Vgsaddvth1o3, n, dn_dVb, Vtm;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth = 0.0;
double dVth_dVb, dVth_dVd, dVth_dT;
double Vgst, dVgs_eff_dVg;
double n, dn_dVb, Vtm;
double ExpArg, V0;
double ueff, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
double Esat, dEsat_dVg, dEsat_dVd, dEsat_dVb, Vdsat, Vdsat0;
double ueff = 0.0, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
double Esat, Vdsat = 0.0;
double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat, dAlphaz_dVg, dAlphaz_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT;
double Va, Va2, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb;
double One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL;
double dVgdt_dVg, dVgdt_dVd, dVgdt_dVb;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVc, dT0_dVe, dT0_dVrg, dT0_dT;
double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Vbseff, dVbseff_dVb;
double One_Third_CoxWL, Two_Third_CoxWL, CoxWL;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVc, dT0_dVe, dT0_dT;
double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dVc, dT1_dVe, dT1_dT;
double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dVc, dT2_dVe, dT2_dT;
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dVc, dT3_dVe, dT3_dT;
double T4, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dVc, dT4_dVe, dT4_dT;
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dVc, dT5_dVe, dT5_dT;
double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dVc, dT6_dVe, dT6_dT;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T8, dT8_dVg, dT8_dVd, dT8_dVb, dT8_dVc, dT8_dVe, dT8_dVrg;
double T9, dT9_dVg, dT9_dVd, dT9_dVb, dT9_dVc, dT9_dVe, dT9_dVrg;
double T10, dT10_dVg, dT10_dVb, dT10_dVd;
double T7;
double T8;
double T9;
double T10;
double T11, T12;
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double T100, T101;
double Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT;
double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT;
double VAHCE, dVAHCE_dVg, dVAHCE_dVd, dVAHCE_dVb;
double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb;
double Delt_vth, dDelt_vth_dVb, dDelt_vth_dT;
double Theta0, dTheta0_dVb, Theta1, dTheta1_dVb;
double Thetarout, dThetarout_dVb, TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, DIBL_fact, Lambda, dLambda_dVg;
double Rout_Vgs_factor, dRout_Vgs_factor_dVg, dRout_Vgs_factor_dVb;
double dRout_Vgs_factor_dVd;
double tempv, a1;
double Theta0, dTheta0_dVb;
double TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg;
double a1;
double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dVe, dVgsteff_dT;
double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
double Vgsteff = 0.0, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb;
double dVgsteff_dVe, dVgsteff_dT;
double Vdseff = 0.0, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
double diffVds, diffVdsCV;
double diffVds;
double dAbulk_dVg, dn_dVd ;
double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT;
double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT;
double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dT;
double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dT;
double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT;
double Ids, Gm, Gds, Gmb;
double Ids = 0.0, Gm, Gds = 0.0, Gmb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVd, dVdsatCV_dVg, dVdsatCV_dVb;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
@ -181,14 +176,13 @@ double qgdo, qgso, cgdo, cgso;
double dxpart, sxpart;
struct b3soiddSizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, J, error, I;
double junk[50];
int ByPass, Check, ChargeComputationNeeded = 0, error;
double gbbsp, gbbdp, gbbg, gbbb, gbbe, gbbp, gbbT;
double gddpsp, gddpdp, gddpg, gddpb, gddpe, gddpT;
double gsspsp, gsspdp, gsspg, gsspb, gsspe, gsspT;
double Gbpbs, Gbpgs, Gbpds, Gbpes, Gbpps, GbpT;
double vse, vde, ves, ved, veb, vge, delves, vedo, delved;
double ves, ved, veb, vge = 0.0, delves, vedo, delved;
double vps, vpd, Vps, delvps;
double Vbd, Ves, Vesfb, sqrtXdep, DeltVthtemp, dDeltVthtemp_dT;
double Vbp, dVbp_dVp, dVbp_dVb, dVbp_dVg, dVbp_dVd, dVbp_dVe, dVbp_dT;
@ -200,92 +194,101 @@ double dfgche1_dVc, dfgche2_dVc, dgche_dVc, dVdseff_dVc, dIdl_dVc;
double Gm0, Gds0, Gmb0, GmT0, Gmc, Gme, GmT, dVbseff_dVg;
double dDIBL_Sft_dVb, BjtA, dBjtA_dVd;
double diffVdsii ;
double Idgidl, Gdgidld, Gdgidlg, Isgidl, Gsgidlg;
double Gjsd, Gjss, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Ibp, Iii, Giid, Giig, Giib, Giie, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon;
double gppg, gppdp, gppb, gppe, gppp, gppsp, gppT;
double Idgidl = 0.0, Gdgidld, Gdgidlg, Isgidl = 0.0, Gsgidlg;
double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Ibp = 0.0, Iii = 0.0, Giid, Giig, Giib, Giie, GiiT, Gcd, Gcb, GcT;
double ceqbody, ceqbodcon = 0.0;
double gppg = 0.0, gppdp = 0.0, gppb = 0.0, gppe = 0.0, gppp = 0.0;
double gppsp = 0.0, gppT;
double delTemp, deldelTemp, Temp;
double ceqth, ceqqth;
double K1, WL;
double qjs, gcjsbs, gcjsT;
double qjd, gcjdbs, gcjdds, gcjdT;
double K1;
double qjs = 0.0, gcjsbs, gcjsT;
double qjd = 0.0, gcjdbs, gcjdds, gcjdT;
double qge;
double ceqqe;
double ni, Eg, Cbox, Nfb, CboxWL;
double cjsbs;
double Qbf0, Qsicv, dVfbeff_dVrg, Cbe ;
double qinv, qgate, qbody, qdrn, qsrc, qsub, cqgate, cqbody, cqdrn, cqsub, cqtemp;
double Cgg, Cgd, Cgs, Cgb, Cge, Cdg, Cdd, Cds, Cdb, Qg, Qd;
double Csg, Csd, Css, Csb, Cse, Cbg, Cbd, Cbs, Cbb, Qs, Qb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1;
double Vbs0t, dVbs0t_dT ;
double Vbs0 ,dVbs0_dVe, dVbs0_dT;
double Vbs0eff ,dVbs0eff_dVg ,dVbs0eff_dVd ,dVbs0eff_dVe, dVbs0eff_dT;
double Vbs0teff,dVbs0teff_dVg ,dVbs0teff_dVd, dVbs0teff_dVe, dVbs0teff_dT;
double Vbsdio, dVbsdio_dVg, dVbsdio_dVd, dVbsdio_dVe, dVbsdio_dVb, dVbsdio_dT;
double Vbseff0;
double Vthfd ,dVthfd_dVd ,dVthfd_dVe, dVthfd_dT;
double Vbs0mos ,dVbs0mos_dVe, dVbs0mos_dT;
double Qbf0, Qsicv, dVfbeff_dVrg, Cbe = 0.0;
double qinv = 0.0, qgate = 0.0, qbody = 0.0, qdrn = 0.0, qsrc, qsub = 0.0;
double cqgate, cqbody = 0.0, cqdrn = 0.0, cqsub, cqtemp;
double Cgg, Cgd, Cgb, Cge;
double Csg, Csd, Csb, Cse, Cbg = 0.0, Cbd = 0.0, Cbb = 0.0;
double Cgg1, Cgb1, Cgd1, Csg1, Csd1, Csb1;
double Vbs0t = 0.0, dVbs0t_dT ;
double Vbs0 = 0.0 ,dVbs0_dVe, dVbs0_dT;
double Vbs0eff = 0.0 ,dVbs0eff_dVg ,dVbs0eff_dVd ,dVbs0eff_dVe, dVbs0eff_dT;
double Vbs0teff = 0.0,dVbs0teff_dVg ,dVbs0teff_dVd, dVbs0teff_dVe;
double dVbs0teff_dT;
double Vbsdio = 0.0, dVbsdio_dVg, dVbsdio_dVd, dVbsdio_dVe, dVbsdio_dVb;
double dVbsdio_dT;
double Vthfd = 0.0 ,dVthfd_dVd ,dVthfd_dVe, dVthfd_dT;
double Vbs0mos = 0.0 ,dVbs0mos_dVe, dVbs0mos_dT;
double Vbsmos ,dVbsmos_dVg ,dVbsmos_dVb ,dVbsmos_dVd, dVbsmos_dVe, dVbsmos_dT;
double Abeff ,dAbeff_dVg ,dAbeff_dVb, dAbeff_dVc;
double Vcs ,dVcs_dVg ,dVcs_dVb ,dVcs_dVd ,dVcs_dVe, dVcs_dT;
double Xcsat ,dXcsat_dVg ,dXcsat_dVb, dXcsat_dVc;
double Xcsat = 0.0, dXcsat_dVg, dXcsat_dVc;
double Vdsatii ,dVdsatii_dVg ,dVdsatii_dVd, dVdsatii_dVb, dVdsatii_dT;
double Vdseffii ,dVdseffii_dVg ,dVdseffii_dVd, dVdseffii_dVb, dVdseffii_dT;
double VcsCV ,dVcsCV_dVg ,dVcsCV_dVb ,dVcsCV_dVd ,dVcsCV_dVc ,dVcsCV_dVe;
double VdsCV ,dVdsCV_dVg ,dVdsCV_dVb ,dVdsCV_dVd ,dVdsCV_dVc;
double VcsCV = 0.0 ,dVcsCV_dVg = 0.0 ,dVcsCV_dVb = 0.0;
double dVcsCV_dVd = 0.0 ,dVcsCV_dVc = 0.0;
double VdsCV = 0.0 ,dVdsCV_dVg = 0.0 ,dVdsCV_dVb = 0.0;
double dVdsCV_dVd = 0.0 ,dVdsCV_dVc = 0.0;
double Phisc ,dPhisc_dVg ,dPhisc_dVb ,dPhisc_dVd, dPhisc_dVc;
double Phisd ,dPhisd_dVg ,dPhisd_dVb ,dPhisd_dVd, dPhisd_dVc;
double sqrtPhisc ,dsqrtPhisc_dVg ,dsqrtPhisc_dVb;
double sqrtPhisd ,dsqrtPhisd_dVg ,dsqrtPhisd_dVb;
double Xc ,dXc_dVg ,dXc_dVb ,dXc_dVd ,dXc_dVc;
double Ibjt ,dIbjt_dVb ,dIbjt_dVd ,dIbjt_dT;
double Ibs1 ,dIbs1_dVb ,dIbs1_dT;
double Ibs2 ,dIbs2_dVb ,dIbs2_dT;
double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT;
double Ibs4 ,dIbs4_dVb ,dIbs4_dT;
double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT;
double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT;
double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT;
double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT;
double ExpVbs1, dExpVbs1_dVb, dExpVbs1_dT;
double ExpVbs2, dExpVbs2_dVb, dExpVbs2_dT;
double ExpVbs4, dExpVbs4_dVb, dExpVbs4_dT;
double ExpVbd1, dExpVbd1_dVb, dExpVbd1_dT;
double ExpVbd2, dExpVbd2_dVb, dExpVbd2_dT;
double ExpVbd4, dExpVbd4_dVb, dExpVbd4_dT;
double sqrtPhisc;
double sqrtPhisd;
double Xc = 0.0 ,dXc_dVg = 0.0 ,dXc_dVb = 0.0 ,dXc_dVd = 0.0 ,dXc_dVc = 0.0;
double Ibjt = 0.0 ,dIbjt_dVb ,dIbjt_dVd ,dIbjt_dT = 0.0;
double Ibs1 ,dIbs1_dVb ,dIbs1_dT = 0.0;
double Ibs2 ,dIbs2_dVb ,dIbs2_dT = 0.0;
double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT = 0.0;
double Ibs4 ,dIbs4_dVb ,dIbs4_dT = 0.0;
double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT = 0.0;
double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT = 0.0;
double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT = 0.0;
double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT = 0.0;
double ExpVbs1, dExpVbs1_dVb, dExpVbs1_dT = 0.0;
double ExpVbs2, dExpVbs2_dVb, dExpVbs2_dT = 0.0;
double ExpVbs4 = 0.0, dExpVbs4_dVb = 0.0, dExpVbs4_dT = 0.0;
double ExpVbd1, dExpVbd1_dVb, dExpVbd1_dT = 0.0;
double ExpVbd2, dExpVbd2_dVb, dExpVbd2_dT = 0.0;
double ExpVbd4 = 0.0, dExpVbd4_dVb = 0.0, dExpVbd4_dT = 0.0;
double WTsi, NVtm1, NVtm2;
double Ic ,dIc_dVb ,dIc_dVd;
double Ibs ,dIbs_dVb ,dIbs_dVd ,dIbs_dVe;
double Ibd ,dIbd_dVb;
double Ic = 0.0;
double Ibs = 0.0;
double Ibd = 0.0;
double Nomi ,dNomi_dVg ,dNomi_dVb ,dNomi_dVd ,dNomi_dVc;
double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dVc, dDenomi_dT;
double Qbf ,dQbf_dVg ,dQbf_dVb ,dQbf_dVd ,dQbf_dVc ,dQbf_dVe;
double Qsubs1 ,dQsubs1_dVg ,dQsubs1_dVb ,dQsubs1_dVd ,dQsubs1_dVc ,dQsubs1_dVe;
double Qsubs2 ,dQsubs2_dVg ,dQsubs2_dVb ,dQsubs2_dVd ,dQsubs2_dVc ,dQsubs2_dVe;
double Qsub0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ;
double Qac0 ,dQac0_dVb ,dQac0_dVd;
double Qbf = 0.0 ,dQbf_dVg = 0.0 ,dQbf_dVb = 0.0 ,dQbf_dVd = 0.0;
double dQbf_dVc = 0.0 ,dQbf_dVe = 0.0;
double Qsubs1 = 0.0 ,dQsubs1_dVg ,dQsubs1_dVb ,dQsubs1_dVd ,dQsubs1_dVc;
double Qsubs2 = 0.0 ,dQsubs2_dVg ,dQsubs2_dVb ,dQsubs2_dVd ,dQsubs2_dVc ,dQsubs2_dVe;
double Qsub0 = 0.0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ;
double Qac0 = 0.0 ,dQac0_dVb ,dQac0_dVd;
double Qdep0 ,dQdep0_dVb;
double Qe1 , dQe1_dVg ,dQe1_dVb, dQe1_dVd, dQe1_dVe, dQe1_dT;
double Qe1 = 0.0 , dQe1_dVg ,dQe1_dVb, dQe1_dVd, dQe1_dVe, dQe1_dT;
double Ce1g ,Ce1b ,Ce1d ,Ce1e, Ce1T;
double Ce2g ,Ce2b ,Ce2d ,Ce2e, Ce2T;
double Qe2 , dQe2_dVg ,dQe2_dVb, dQe2_dVd, dQe2_dVe, dQe2_dT;
double dQbf_dVrg, dQac0_dVrg, dQsub0_dVrg;
double dQsubs1_dVrg, dQsubs2_dVrg, dQbf0_dVe, dQbf0_dT;
double Qe2 = 0.0 , dQe2_dVg ,dQe2_dVb, dQe2_dVd, dQe2_dVe, dQe2_dT;
double dQbf_dVrg = 0.0, dQac0_dVrg, dQsub0_dVrg;
double dQsubs2_dVrg, dQbf0_dVe, dQbf0_dT;
/* for self-heating */
double vbi, vfbb, phi, sqrtPhi, Xdep0, jbjt, jdif, jrec, jtun, u0temp, vsattemp;
double rds0, ua, ub, uc;
double dvbi_dT, dvfbb_dT, djbjt_dT, djdif_dT, djrec_dT, djtun_dT, du0temp_dT;
double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT;
double dVfbeff_dT, dQac0_dT, dQsub0_dT, dQbf_dT, dVdsCV_dT, dPhisd_dT;
double dNomi_dT,dXc_dT,dQsubs1_dT,dQsubs2_dT, dVcsCV_dT, dPhisc_dT, dQsicv_dT;
double CbT, CsT, CgT, CeT;
double dVfbeff_dT, dQac0_dT, dQsub0_dT;
double dQbf_dT = 0.0, dVdsCV_dT = 0.0, dPhisd_dT;
double dNomi_dT, dXc_dT = 0.0, dQsubs1_dT, dQsubs2_dT;
double dVcsCV_dT = 0.0, dPhisc_dT, dQsicv_dT;
double CbT, CsT, CgT;
double Qex, dQex_dVg, dQex_dVb, dQex_dVd, dQex_dVe, dQex_dT;
/* clean up last */
FILE *fpdebug;
FILE *fpdebug = NULL;
/* end clean up */
int nandetect;
static int nanfound = 0;
@ -294,7 +297,7 @@ char nanmessage [12];
double m;
for (; model != NULL; model = model->B3SOIDDnextModel)
for (; model != NULL; model = model->B3SOIDDnextModel)
{ for (here = model->B3SOIDDinstances; here != NULL;
here = here->B3SOIDDnextInstance)
{
@ -4210,44 +4213,44 @@ if (here->B3SOIDDdebugMod > 2)
/* Here NaN will be detected in any conductance or equivalent current. Note
that nandetect is initialized within the "if" statements */
if (nandetect = isnan (*(here->B3SOIDDGbPtr)))
if ((nandetect = isnan (*(here->B3SOIDDGbPtr))))
{ strcpy (nanmessage, "GbPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDEbPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDEbPtr))))
{ strcpy (nanmessage, "EbPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDDPbPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDDPbPtr))))
{ strcpy (nanmessage, "DPbPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDSPbPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDSPbPtr))))
{ strcpy (nanmessage, "SPbPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDBbPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDBbPtr))))
{ strcpy (nanmessage, "BbPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDBgPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDBgPtr))))
{ strcpy (nanmessage, "BgPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDBePtr)))
else if ((nandetect = isnan (*(here->B3SOIDDBePtr))))
{ strcpy (nanmessage, "BePtr"); }
else if (nandetect = isnan (*(here->B3SOIDDBdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDBdpPtr))))
{ strcpy (nanmessage, "BdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDBspPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDBspPtr))))
{ strcpy (nanmessage, "BspPtr"); }
if (nandetect = isnan (*(here->B3SOIDDGgPtr)))
if ((nandetect = isnan (*(here->B3SOIDDGgPtr))))
{ strcpy (nanmessage, "GgPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDGdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDGdpPtr))))
{ strcpy (nanmessage, "GdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDGspPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDGspPtr))))
{ strcpy (nanmessage, "GspPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDDPgPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDDPgPtr))))
{ strcpy (nanmessage, "DPgPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDDPdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDDPdpPtr))))
{ strcpy (nanmessage, "DPdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDDPspPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDDPspPtr))))
{ strcpy (nanmessage, "DPspPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDSPgPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDSPgPtr))))
{ strcpy (nanmessage, "SPgPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDSPdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDSPdpPtr))))
{ strcpy (nanmessage, "SPdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDSPspPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDSPspPtr))))
{ strcpy (nanmessage, "SPspPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDEePtr)))
else if ((nandetect = isnan (*(here->B3SOIDDEePtr))))
{ strcpy (nanmessage, "EePtr"); }
/* At this point, nandetect = 0 if none of the
@ -4255,17 +4258,17 @@ if (here->B3SOIDDdebugMod > 2)
if (nandetect == 0)
{
if (nandetect = isnan (*(here->B3SOIDDEgPtr)))
if ((nandetect = isnan (*(here->B3SOIDDEgPtr))))
{ strcpy (nanmessage, "EgPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDEdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDEdpPtr))))
{ strcpy (nanmessage, "EdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDEspPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDEspPtr))))
{ strcpy (nanmessage, "EspPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDGePtr)))
else if ((nandetect = isnan (*(here->B3SOIDDGePtr))))
{ strcpy (nanmessage, "GePtr"); }
else if (nandetect = isnan (*(here->B3SOIDDDPePtr)))
else if ((nandetect = isnan (*(here->B3SOIDDDPePtr))))
{ strcpy (nanmessage, "DPePtr"); }
else if (nandetect = isnan (*(here->B3SOIDDSPePtr)))
else if ((nandetect = isnan (*(here->B3SOIDDSPePtr))))
{ strcpy (nanmessage, "SPePtr"); } }
/* Now check if self-heating caused NaN if nothing else
@ -4273,29 +4276,29 @@ if (here->B3SOIDDdebugMod > 2)
if (selfheat && nandetect == 0)
{
if (nandetect = isnan (*(here->B3SOIDDTemptempPtr)))
if ((nandetect = isnan (*(here->B3SOIDDTemptempPtr))))
{ strcpy (nanmessage, "TemptempPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDTempgPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDTempgPtr))))
{ strcpy (nanmessage, "TempgPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDTempbPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDTempbPtr))))
{ strcpy (nanmessage, "TempbPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDTempePtr)))
else if ((nandetect = isnan (*(here->B3SOIDDTempePtr))))
{ strcpy (nanmessage, "TempePtr"); }
else if (nandetect = isnan (*(here->B3SOIDDTempdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDTempdpPtr))))
{ strcpy (nanmessage, "TempdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDTempspPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDTempspPtr))))
{ strcpy (nanmessage, "TempspPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDGtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDGtempPtr))))
{ strcpy (nanmessage, "GtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDDPtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDDPtempPtr))))
{ strcpy (nanmessage, "DPtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDSPtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDSPtempPtr))))
{ strcpy (nanmessage, "SPtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDEtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDEtempPtr))))
{ strcpy (nanmessage, "EtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIDDBtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIDDBtempPtr))))
{ strcpy (nanmessage, "BtempPtr"); }
else if (nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDtempNode)))
else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIDDtempNode))))
{ strcpy (nanmessage, "tempNode"); }
}
@ -4304,20 +4307,20 @@ if (here->B3SOIDDdebugMod > 2)
if (nandetect == 0)
{
if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDgNode)))
if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDgNode))))
{ strcpy (nanmessage, "gNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDbNode)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDbNode))))
{ strcpy (nanmessage, "bNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDdNodePrime)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDdNodePrime))))
{ strcpy (nanmessage, "dpNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDsNodePrime)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDsNodePrime))))
{ strcpy (nanmessage, "spNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDeNode)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIDDeNode))))
{ strcpy (nanmessage, "eNode"); }
}

View File

@ -55,8 +55,7 @@ B3SOIDDStrongInversionNoiseEval(double vgs, double vds, B3SOIDDmodel *model,
{
struct b3soiddSizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi;
double req, ceq;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->B3SOIDDcd) * here->B3SOIDDm;
@ -111,11 +110,10 @@ double noizDens[B3SOIDDNSRCS];
double lnNdens[B3SOIDDNSRCS];
double vgs, vds, Slimit;
double N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;
double n, ExpArg, Ssi, Swi;
double T1, T10, T11;
double Ssi, Swi;
int error, i;
int i;
/* define the names of the noise sources */
static char *B3SOIDDnNames[B3SOIDDNSRCS] =

View File

@ -24,9 +24,10 @@ B3SOIDDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
B3SOIDDmodel *model = (B3SOIDDmodel*)inModel;
B3SOIDDinstance *here;
double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb;
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb;
double gdpr, gspr, gds, gbd, gbs, capbd = 0.0, capbs = 0.0;
double xcsgb, xcdsb, xcsdb;
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb;
double GSoverlapCap, GDoverlapCap, GBoverlapCap;
double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0;
double FwdSum, RevSum, Gm, Gmbs;
double m;

View File

@ -41,9 +41,8 @@ CKTnode *tmp;
double tmp1, tmp2;
double nfb0, Cboxt;
int itmp1;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
@ -938,10 +937,10 @@ IFuid tmpName;
if(error) return(error);
here->B3SOIDDdNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void**)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -960,10 +959,10 @@ IFuid tmpName;
here->B3SOIDDsNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void**)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -39,9 +39,9 @@ B3SOIDDtemp(GENmodel *inModel, CKTcircuit *ckt)
{
B3SOIDDmodel *model = (B3SOIDDmodel*) inModel;
B3SOIDDinstance *here;
struct b3soiddSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
struct b3soiddSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL;
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
double SDphi, SDgamma;
int Size_Not_Found;

View File

@ -42,10 +42,9 @@ double gbbg, gbbdp, gbbb, gbbe, gbbp, gbbsp, gbbT;
double gddpg, gddpdp, gddpsp, gddpb, gddpe, gddpT;
double gsspg, gsspdp, gsspsp, gsspb, gsspe, gsspT;
double gppg, gppdp, gppb, gppe, gppp, gppsp, gppT;
double xcTt, cTt, gcTt, gTtt, gTtg, gTtb, gTte, gTtdp, gTtsp;
double xcTt, cTt, gTtt, gTtg, gTtb, gTte, gTtdp, gTtsp;
double Dum1, Dum2, Dum3, Dum4, Dum5;
FILE *fpdebug;
FILE *fpdebug = NULL;
double m;

View File

@ -55,8 +55,6 @@ double
B3SOIFDSmartVbs(double New, double Old, B3SOIFDinstance *here,
CKTcircuit *ckt, int *check)
{
double T0, T1, del;
/* only do it for floating body and DC */
if (here->B3SOIFDfloat && (ckt->CKTmode & (MODEDC | MODEDCOP)))
{
@ -104,13 +102,10 @@ B3SOIFDmodel *model = (B3SOIFDmodel*)inModel;
B3SOIFDinstance *here;
int selfheat;
double SourceSatCurrent, DrainSatCurrent, Gmin;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst = 0.0;
double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double evbd, evbs, arg, sarg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double tol, PhiB, PhiBSW, MJ, MJSW, PhiBSWG, MJSWG;
double Vfbeff, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double gcgdb, gcggb, gcgsb, gcgeb, gcgT;
double gcsdb, gcsgb, gcssb, gcseb, gcsT;
double gcddb, gcdgb, gcdsb, gcdeb, gcdT;
@ -121,59 +116,56 @@ double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact;
double vg, vd, vs, vp, ve, vb;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd, dVth_dT;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm;
double Vgdt, Vgsaddvth, Vgsaddvth2, Vgsaddvth1o3, n, dn_dVb, Vtm;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth = 0.0, dVth_dVb;
double dVth_dVd, dVth_dT;
double Vgst, dVgs_eff_dVg;
double n, dn_dVb, Vtm;
double ExpArg, V0;
double ueff, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
double Esat, dEsat_dVg, dEsat_dVd, dEsat_dVb, Vdsat, Vdsat0;
double ueff = 0.0, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
double Esat, Vdsat = 0.0;
double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat, dAlphaz_dVg, dAlphaz_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT;
double Va, Va2, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb;
double One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL;
double dVgdt_dVg, dVgdt_dVd, dVgdt_dVb;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVc, dT0_dVe, dT0_dVrg, dT0_dT;
double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Vbseff, dVbseff_dVb;
double One_Third_CoxWL, Two_Third_CoxWL, CoxWL;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVc, dT0_dVe, dT0_dT;
double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dVc, dT1_dVe, dT1_dT;
double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dVc, dT2_dVe, dT2_dT;
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dVc, dT3_dVe, dT3_dT;
double T4, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dVc, dT4_dVe, dT4_dT;
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dVc, dT5_dVe, dT5_dT;
double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dVc, dT6_dVe, dT6_dT;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T8, dT8_dVg, dT8_dVd, dT8_dVb, dT8_dVc, dT8_dVe, dT8_dVrg;
double T9, dT9_dVg, dT9_dVd, dT9_dVb, dT9_dVc, dT9_dVe, dT9_dVrg;
double T10, dT10_dVg, dT10_dVb, dT10_dVd;
double T11, T12;
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double T100, T101;
double T4, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dVe, dT4_dT;
double T5, dT5_dVe;
double T6, dT6_dVe, dT6_dT;
double T7;
double T8;
double T9;
double T10;
double T11;
double Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT;
double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT;
double VAHCE, dVAHCE_dVg, dVAHCE_dVd, dVAHCE_dVb;
double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb;
double Delt_vth, dDelt_vth_dVb, dDelt_vth_dT;
double Theta0, dTheta0_dVb, Theta1, dTheta1_dVb;
double Thetarout, dThetarout_dVb, TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, DIBL_fact, Lambda, dLambda_dVg;
double Rout_Vgs_factor, dRout_Vgs_factor_dVg, dRout_Vgs_factor_dVb;
double dRout_Vgs_factor_dVd;
double tempv, a1;
double Theta0, dTheta0_dVb;
double TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg;
double a1;
double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dVe, dVgsteff_dT;
double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
double Vgsteff = 0.0, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb;
double dVgsteff_dVe, dVgsteff_dT;
double Vdseff = 0.0, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
double diffVds, diffVdsCV;
double diffVds;
double dAbulk_dVg, dn_dVd ;
double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT;
double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT;
double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dT;
double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dT;
double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT;
double Ids, Gm, Gds, Gmb;
double Ids = 0.0, Gm, Gds = 0.0, Gmb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVd, dVdsatCV_dVg, dVdsatCV_dVb;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
@ -181,14 +173,13 @@ double qgdo, qgso, cgdo, cgso;
double dxpart, sxpart;
struct b3soifdSizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, J, error, I;
double junk[50];
int ByPass, Check, ChargeComputationNeeded = 0, error;
double gbbsp, gbbdp, gbbg, gbbb, gbbe, gbbp, gbbT;
double gddpsp, gddpdp, gddpg, gddpb, gddpe, gddpT;
double gsspsp, gsspdp, gsspg, gsspb, gsspe, gsspT;
double Gbpbs, Gbpgs, Gbpds, Gbpes, Gbpps, GbpT;
double vse, vde, ves, ved, veb, vge, delves, vedo, delved;
double ves, ved, veb, vge = 0.0, delves, vedo, delved;
double vps, vpd, Vps, delvps;
double Vbd, Ves, Vesfb, sqrtXdep, DeltVthtemp, dDeltVthtemp_dT;
double Vbp, dVbp_dVp, dVbp_dVb, dVbp_dVg, dVbp_dVd, dVbp_dVe, dVbp_dT;
@ -198,94 +189,77 @@ double dVbseff_dVd, dVbseff_dVe, dVbseff_dT;
double dVdsat_dVc, dVasat_dVc, dVACLM_dVc, dVADIBL_dVc, dVa_dVc;
double dfgche1_dVc, dfgche2_dVc, dgche_dVc, dVdseff_dVc, dIdl_dVc;
double Gm0, Gds0, Gmb0, GmT0, Gmc, Gme, GmT, dVbseff_dVg;
double dDIBL_Sft_dVb, BjtA, dBjtA_dVd;
double dDIBL_Sft_dVb;
double diffVdsii ;
double Idgidl, Gdgidld, Gdgidlg, Isgidl, Gsgidlg;
double Gjsd, Gjss, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Ibp, Iii, Giid, Giig, Giib, Giie, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon;
double gppg, gppdp, gppb, gppe, gppp, gppsp, gppT;
double Idgidl = 0.0, Gdgidld, Gdgidlg, Isgidl = 0.0, Gsgidlg;
double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Ibp = 0.0, Iii = 0.0, Giid, Giig, Giib, Giie, GiiT, Gcd, Gcb, GcT;
double ceqbody, ceqbodcon = 0.0;
double gppg = 0.0, gppdp = 0.0, gppb = 0.0, gppe = 0.0;
double gppp = 0.0, gppsp = 0.0, gppT;
double delTemp, deldelTemp, Temp;
double ceqth, ceqqth;
double K1, WL;
double qjs, gcjsbs, gcjsT;
double qjd, gcjdbs, gcjdds, gcjdT;
double K1;
double qjs = 0.0, gcjsbs, gcjsT;
double qjd = 0.0, gcjdbs, gcjdds, gcjdT;
double qge;
double ceqqe;
double ni, Eg, Cbox, Nfb, CboxWL;
double cjsbs;
double Qbf0, Qsicv, dVfbeff_dVrg, Cbe ;
double qinv, qgate, qbody, qdrn, qsrc, qsub, cqgate, cqbody, cqdrn, cqsub, cqtemp;
double Cgg, Cgd, Cgs, Cgb, Cge, Cdg, Cdd, Cds, Cdb, Qg, Qd;
double Csg, Csd, Css, Csb, Cse, Cbg, Cbd, Cbs, Cbb, Qs, Qb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1;
double Vbs0t, dVbs0t_dT ;
double Vbs0 ,dVbs0_dVe, dVbs0_dT;
double Vbs0eff ,dVbs0eff_dVg ,dVbs0eff_dVd ,dVbs0eff_dVe, dVbs0eff_dT;
double Vbs0teff,dVbs0teff_dVg ,dVbs0teff_dVd, dVbs0teff_dVe, dVbs0teff_dT;
double Vbsdio, dVbsdio_dVg, dVbsdio_dVd, dVbsdio_dVe, dVbsdio_dVb, dVbsdio_dT;
double Vbseff0;
double Vthfd ,dVthfd_dVd ,dVthfd_dVe, dVthfd_dT;
double Vbs0mos ,dVbs0mos_dVe, dVbs0mos_dT;
double dVfbeff_dVrg, Cbe = 0.0;
double qinv = 0.0, qgate = 0.0, qbody = 0.0, qdrn = 0.0, qsrc, qsub = 0.0;
double cqgate, cqbody = 0.0, cqdrn = 0.0, cqsub, cqtemp;
double Cgg, Cgd, Cgb, Cge;
double Csg, Csd, Csb, Cse, Cbg = 0.0, Cbd = 0.0, Cbb = 0.0;
double Cgg1, Cgb1, Cgd1, Csg1, Csd1, Csb1;
double Vbs0t = 0.0, dVbs0t_dT ;
double Vbs0 = 0.0,dVbs0_dVe, dVbs0_dT;
double Vbs0eff = 0.0 ,dVbs0eff_dVg ,dVbs0eff_dVd ,dVbs0eff_dVe, dVbs0eff_dT;
double Vbs0teff = 0.0, dVbs0teff_dVg, dVbs0teff_dVd;
double dVbs0teff_dVe, dVbs0teff_dT;
double dVbsdio_dVg, dVbsdio_dVd, dVbsdio_dVe;
double dVbsdio_dVb, dVbsdio_dT;
double Vthfd = 0.0,dVthfd_dVd ,dVthfd_dVe, dVthfd_dT;
double Vbs0mos = 0.0 ,dVbs0mos_dVe, dVbs0mos_dT;
double Vbsmos ,dVbsmos_dVg ,dVbsmos_dVb ,dVbsmos_dVd, dVbsmos_dVe, dVbsmos_dT;
double Abeff ,dAbeff_dVg ,dAbeff_dVb, dAbeff_dVc;
double Vcs ,dVcs_dVg ,dVcs_dVb ,dVcs_dVd ,dVcs_dVe, dVcs_dT;
double Xcsat ,dXcsat_dVg ,dXcsat_dVb, dXcsat_dVc;
double Xcsat = 0.0 ,dXcsat_dVg , dXcsat_dVc;
double Vdsatii ,dVdsatii_dVg ,dVdsatii_dVd, dVdsatii_dVb, dVdsatii_dT;
double Vdseffii ,dVdseffii_dVg ,dVdseffii_dVd, dVdseffii_dVb, dVdseffii_dT;
double VcsCV ,dVcsCV_dVg ,dVcsCV_dVb ,dVcsCV_dVd ,dVcsCV_dVc ,dVcsCV_dVe;
double VdsCV ,dVdsCV_dVg ,dVdsCV_dVb ,dVdsCV_dVd ,dVdsCV_dVc;
double Phisc ,dPhisc_dVg ,dPhisc_dVb ,dPhisc_dVd, dPhisc_dVc;
double VcsCV = 0.0;
double VdsCV = 0.0, dVdsCV_dVg = 0.0, dVdsCV_dVb = 0.0;
double dVdsCV_dVd = 0.0, dVdsCV_dVc = 0.0;
double Phisd ,dPhisd_dVg ,dPhisd_dVb ,dPhisd_dVd, dPhisd_dVc;
double sqrtPhisc ,dsqrtPhisc_dVg ,dsqrtPhisc_dVb;
double sqrtPhisd ,dsqrtPhisd_dVg ,dsqrtPhisd_dVb;
double Xc ,dXc_dVg ,dXc_dVb ,dXc_dVd ,dXc_dVc;
double Ibjt ,dIbjt_dVb ,dIbjt_dVd ,dIbjt_dT;
double Ibs1 ,dIbs1_dVb ,dIbs1_dT;
double Ibs2 ,dIbs2_dVb ,dIbs2_dT;
double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT;
double Ibs4 ,dIbs4_dVb ,dIbs4_dT;
double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT;
double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT;
double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT;
double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT;
double ExpVbs1, dExpVbs1_dVb, dExpVbs1_dT;
double ExpVbs2, dExpVbs2_dVb, dExpVbs2_dT;
double ExpVbs4, dExpVbs4_dVb, dExpVbs4_dT;
double ExpVbd1, dExpVbd1_dVb, dExpVbd1_dT;
double ExpVbd2, dExpVbd2_dVb, dExpVbd2_dT;
double ExpVbd4, dExpVbd4_dVb, dExpVbd4_dT;
double WTsi, NVtm1, NVtm2;
double Ic ,dIc_dVb ,dIc_dVd;
double Ibs ,dIbs_dVb ,dIbs_dVd ,dIbs_dVe;
double Ibd ,dIbd_dVb;
double Nomi ,dNomi_dVg ,dNomi_dVb ,dNomi_dVd ,dNomi_dVc;
double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dVc, dDenomi_dT;
double Qbf ,dQbf_dVg ,dQbf_dVb ,dQbf_dVd ,dQbf_dVc ,dQbf_dVe;
double Qsubs1 ,dQsubs1_dVg ,dQsubs1_dVb ,dQsubs1_dVd ,dQsubs1_dVc ,dQsubs1_dVe;
double Qsubs2 ,dQsubs2_dVg ,dQsubs2_dVb ,dQsubs2_dVd ,dQsubs2_dVc ,dQsubs2_dVe;
double Qsub0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ;
double Qac0 ,dQac0_dVb ,dQac0_dVd;
double sqrtPhisd;
double Xc = 0.0;
double Ic = 0.0;
double Ibs = 0.0;
double Ibd = 0.0;
double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb , dDenomi_dT;
double Qbf = 0.0;
double Qsubs1 = 0.0;
double Qsubs2 = 0.0;
double Qsub0 = 0.0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ;
double Qac0 = 0.0 ,dQac0_dVb ,dQac0_dVd;
double Qdep0 ,dQdep0_dVb;
double Qe1 , dQe1_dVg ,dQe1_dVb, dQe1_dVd, dQe1_dVe, dQe1_dT;
double Qe1 = 0.0;
double Ce1g ,Ce1b ,Ce1d ,Ce1e, Ce1T;
double Ce2g ,Ce2b ,Ce2d ,Ce2e, Ce2T;
double Qe2 , dQe2_dVg ,dQe2_dVb, dQe2_dVd, dQe2_dVe, dQe2_dT;
double dQbf_dVrg, dQac0_dVrg, dQsub0_dVrg;
double dQsubs1_dVrg, dQsubs2_dVrg, dQbf0_dVe, dQbf0_dT;
double Qe2 = 0.0;
double dQac0_dVrg, Vbsdio = 0.0, dQsub0_dVrg;
/* for self-heating */
double vbi, vfbb, phi, sqrtPhi, Xdep0, jbjt, jdif, jrec, jtun, u0temp, vsattemp;
double rds0, ua, ub, uc;
double dvbi_dT, dvfbb_dT, djbjt_dT, djdif_dT, djrec_dT, djtun_dT, du0temp_dT;
double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT;
double dVfbeff_dT, dQac0_dT, dQsub0_dT, dQbf_dT, dVdsCV_dT, dPhisd_dT;
double dNomi_dT,dXc_dT,dQsubs1_dT,dQsubs2_dT, dVcsCV_dT, dPhisc_dT, dQsicv_dT;
double CbT, CsT, CgT, CeT;
double dVfbeff_dT, dQac0_dT, dQsub0_dT, dVdsCV_dT = 0.0, dPhisd_dT;
double CbT, CsT, CgT;
double Qex, dQex_dVg, dQex_dVb, dQex_dVd, dQex_dVe, dQex_dT;
/* clean up last */
FILE *fpdebug;
FILE *fpdebug = NULL;
/* end clean up */
int nandetect;
static int nanfound = 0;
@ -338,7 +312,9 @@ for (; model != NULL; model = model->B3SOIFDnextModel)
}
if (here->B3SOIFDdebugMod > 0)
{
fprintf(stderr,"DC op. point converge with %d iterations\n");
fprintf(stderr,
"DC op. point converge with %d iterations\n",
here->B3SOIFDiterations);
}
}
else if ((ckt->CKTmode & MODEINITTRAN))
@ -3344,25 +3320,25 @@ if (here->B3SOIFDdebugMod > 2)
/* Here NaN will be detected in any conductance or equivalent current. Note
that nandetect is initialized within the "if" statements */
if (nandetect = isnan (*(here->B3SOIFDGgPtr)))
if ((nandetect = isnan (*(here->B3SOIFDGgPtr))))
{ strcpy (nanmessage, "GgPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDGdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDGdpPtr))))
{ strcpy (nanmessage, "GdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDGspPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDGspPtr))))
{ strcpy (nanmessage, "GspPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDDPgPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDDPgPtr))))
{ strcpy (nanmessage, "DPgPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDDPdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDDPdpPtr))))
{ strcpy (nanmessage, "DPdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDDPspPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDDPspPtr))))
{ strcpy (nanmessage, "DPspPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDSPgPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDSPgPtr))))
{ strcpy (nanmessage, "SPgPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDSPdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDSPdpPtr))))
{ strcpy (nanmessage, "SPdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDSPspPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDSPspPtr))))
{ strcpy (nanmessage, "SPspPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDEePtr)))
else if ((nandetect = isnan (*(here->B3SOIFDEePtr))))
{ strcpy (nanmessage, "EePtr"); }
/* At this point, nandetect = 0 if none of the
@ -3370,17 +3346,17 @@ if (here->B3SOIFDdebugMod > 2)
if (nandetect == 0)
{
if (nandetect = isnan (*(here->B3SOIFDEgPtr)))
if ((nandetect = isnan (*(here->B3SOIFDEgPtr))))
{ strcpy (nanmessage, "EgPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDEdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDEdpPtr))))
{ strcpy (nanmessage, "EdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDEspPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDEspPtr))))
{ strcpy (nanmessage, "EspPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDGePtr)))
else if ((nandetect = isnan (*(here->B3SOIFDGePtr))))
{ strcpy (nanmessage, "GePtr"); }
else if (nandetect = isnan (*(here->B3SOIFDDPePtr)))
else if ((nandetect = isnan (*(here->B3SOIFDDPePtr))))
{ strcpy (nanmessage, "DPePtr"); }
else if (nandetect = isnan (*(here->B3SOIFDSPePtr)))
else if ((nandetect = isnan (*(here->B3SOIFDSPePtr))))
{ strcpy (nanmessage, "SPePtr"); } }
/* Now check if self-heating caused NaN if nothing else
@ -3388,29 +3364,29 @@ if (here->B3SOIFDdebugMod > 2)
if (selfheat && nandetect == 0)
{
if (nandetect = isnan (*(here->B3SOIFDTemptempPtr)))
if ((nandetect = isnan (*(here->B3SOIFDTemptempPtr))))
{ strcpy (nanmessage, "TemptempPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDTempgPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDTempgPtr))))
{ strcpy (nanmessage, "TempgPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDTempbPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDTempbPtr))))
{ strcpy (nanmessage, "TempbPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDTempePtr)))
else if ((nandetect = isnan (*(here->B3SOIFDTempePtr))))
{ strcpy (nanmessage, "TempePtr"); }
else if (nandetect = isnan (*(here->B3SOIFDTempdpPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDTempdpPtr))))
{ strcpy (nanmessage, "TempdpPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDTempspPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDTempspPtr))))
{ strcpy (nanmessage, "TempspPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDGtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDGtempPtr))))
{ strcpy (nanmessage, "GtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDDPtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDDPtempPtr))))
{ strcpy (nanmessage, "DPtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDSPtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDSPtempPtr))))
{ strcpy (nanmessage, "SPtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDEtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDEtempPtr))))
{ strcpy (nanmessage, "EtempPtr"); }
else if (nandetect = isnan (*(here->B3SOIFDBtempPtr)))
else if ((nandetect = isnan (*(here->B3SOIFDBtempPtr))))
{ strcpy (nanmessage, "BtempPtr"); }
else if (nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDtempNode)))
else if ((nandetect = isnan (*(ckt->CKTrhs + here->B3SOIFDtempNode))))
{ strcpy (nanmessage, "tempNode"); }
}
@ -3419,20 +3395,20 @@ if (here->B3SOIFDdebugMod > 2)
if (nandetect == 0)
{
if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDgNode)))
if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDgNode))))
{ strcpy (nanmessage, "gNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDbNode)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDbNode))))
{ strcpy (nanmessage, "bNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDdNodePrime)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDdNodePrime))))
{ strcpy (nanmessage, "dpNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDsNodePrime)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDsNodePrime))))
{ strcpy (nanmessage, "spNode"); }
else if (nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDeNode)))
else if ((nandetect = isnan (*(ckt->CKTrhs
+ here->B3SOIFDeNode))))
{ strcpy (nanmessage, "eNode"); }
}

View File

@ -55,8 +55,7 @@ B3SOIFDStrongInversionNoiseEval(double vgs, double vds, B3SOIFDmodel *model,
{
struct b3soifdSizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi;
double req, ceq;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->B3SOIFDcd) * here->B3SOIFDm;
@ -111,11 +110,10 @@ double noizDens[B3SOIFDNSRCS];
double lnNdens[B3SOIFDNSRCS];
double vgs, vds, Slimit;
double N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;
double n, ExpArg, Ssi, Swi;
double T1, T10, T11;
double Ssi, Swi;
int error, i;
int i;
/* define the names of the noise sources */
static char *B3SOIFDnNames[B3SOIFDNSRCS] =

View File

@ -23,9 +23,10 @@ B3SOIFDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
B3SOIFDmodel *model = (B3SOIFDmodel*)inModel;
B3SOIFDinstance *here;
double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb;
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb;
double gdpr, gspr, gds, gbd, gbs, capbd = 0.0, capbs = 0.0;
double xcsgb, xcdsb, xcsdb;
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb;
double GSoverlapCap, GDoverlapCap, GBoverlapCap;
double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0;
double FwdSum, RevSum, Gm, Gmbs;
double m;

View File

@ -41,9 +41,8 @@ CKTnode *tmp;
double tmp1, tmp2;
double nfb0, Cboxt;
int itmp1;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
@ -941,10 +940,10 @@ IFuid tmpName;
here->B3SOIFDdNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void**)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -963,10 +962,10 @@ IFuid tmpName;
here->B3SOIFDsNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void**)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -38,9 +38,9 @@ B3SOIFDtemp(GENmodel *inModel, CKTcircuit *ckt)
{
B3SOIFDmodel *model = (B3SOIFDmodel*) inModel;
B3SOIFDinstance *here;
struct b3soifdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
struct b3soifdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL;
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
double SDphi, SDgamma;
int Size_Not_Found;

View File

@ -42,7 +42,7 @@ double gbbg, gbbdp, gbbb, gbbp, gbbsp, gbbT;
double gddpg, gddpdp, gddpsp, gddpb, gddpT;
double gsspg, gsspdp, gsspsp, gsspb, gsspT;
double gppdp, gppb, gppp, gppT;
double xcTt, cTt, gcTt, gTtt, gTtg, gTtb, gTtdp, gTtsp;
double xcTt, cTt, gTtt, gTtg, gTtb, gTtdp, gTtsp;
double EDextrinsicCap, ESextrinsicCap;
double xcedb, xcesb;

View File

@ -97,13 +97,13 @@ B3SOIPDmodel *model = (B3SOIPDmodel*)inModel;
B3SOIPDinstance *here;
int selfheat;
double SourceSatCurrent, DrainSatCurrent, Gmin;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double Gmin;
double ag0, qgd, qgs, von, cbhat, VgstNVt, ExpVgst = 0.0;
double cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double evbd, evbs, arg, sarg;
double arg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double tol, PhiB, PhiBSWG, MJSWG;
double PhiBSWG, MJSWG;
double gcgdb, gcggb, gcgsb, gcgeb, gcgT;
double gcsdb, gcsgb, gcssb, gcseb, gcsT;
double gcddb, gcdgb, gcdsb, gcdeb, gcdT;
@ -115,48 +115,43 @@ double vg, vd, vs, vp, ve, vb;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd, dVth_dT;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm;
double Vgdt, Vgsaddvth, Vgsaddvth2, Vgsaddvth1o3, n, dn_dVb, Vtm;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg;
double n, dn_dVb, Vtm;
double ExpArg, V0;
double ueff, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
double Esat, dEsat_dVg, dEsat_dVd, dEsat_dVb, Vdsat, Vdsat0;
double Esat, Vdsat;
double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat, dAlphaz_dVg, dAlphaz_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT;
double Va, Va2, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
double Vbseff, dVbseff_dVb;
double Alphaz, CoxWL;
double dVgdt_dVg, dVgdt_dVd, dVgdt_dVb;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVrg, dT0_dT;
double CoxWL;
double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dT;
double T1, dT1_dVg, dT1_dVd, dT1_dVb, dT1_dT;
double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dT;
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT;
double T4, dT4_dVg, dT4_dVd, dT4_dVb, dT4_dT;
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT;
double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dT;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T8, dT8_dVg, dT8_dVd, dT8_dVb, dT8_dVrg;
double T9, dT9_dVg, dT9_dVd, dT9_dVb, dT9_dVrg;
double T10, dT10_dVg, dT10_dVb, dT10_dVd;
double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT = 0.0;
double T4, dT4_dVd, dT4_dVb, dT4_dT;
double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT = 0.0;
double T6, dT6_dT = 0.0;
double T7, Vdsatii;
double T8;
double T9;
double T10, dT10_dVb;
double T11, T12;
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double T100, T101;
double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT;
double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT;
double VAHCE, dVAHCE_dVg, dVAHCE_dVd, dVAHCE_dVb;
double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb;
double Delt_vth, dDelt_vth_dVb, dDelt_vth_dT;
double Theta0, dTheta0_dVb, Theta1, dTheta1_dVb;
double Thetarout, dThetarout_dVb, TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, DIBL_fact, Lambda, dLambda_dVg;
double Rout_Vgs_factor, dRout_Vgs_factor_dVg, dRout_Vgs_factor_dVb;
double dRout_Vgs_factor_dVd;
double tempv, a1;
double Theta0, dTheta0_dVb;
double TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg;
double a1;
double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dT;
double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
double diffVds, diffVdsCV;
double diffVds;
double dAbulk_dVg, dn_dVd ;
double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT;
double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT;
@ -166,7 +161,7 @@ double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT;
double Ids, Gm, Gds, Gmb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVd, dVdsatCV_dVg, dVdsatCV_dVb;
double Vgst2Vtm, dVgst2Vtm_dT, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
@ -174,42 +169,38 @@ double qgdo, qgso, cgdo, cgso;
double dxpart, sxpart;
struct b3soipdSizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, J, error, I;
double junk[50];
int ByPass, Check, ChargeComputationNeeded = 0, error;
double gbbsp, gbbdp, gbbg, gbbb, gbbp, gbbT;
double gddpsp, gddpdp, gddpg, gddpb, gddpT;
double gsspsp, gsspdp, gsspg, gsspb, gsspT;
double Gbpbs, Gbpps;
double vse, vde, ves, ved, veb, vge, delves, vedo, delved;
double ves, ved, veb, vge = 0.0, delves, vedo, delved;
double vps, vpd, Vps, delvps;
double Vbd, Ves, Vesfb, sqrtXdep, DeltVthtemp, dDeltVthtemp_dT;
double Vbd, Ves, Vesfb, DeltVthtemp, dDeltVthtemp_dT;
double Vbp, dVbp_dVb;
double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT;
double Gm0, Gds0, Gmb0, GmT0, Gmc, GmT;
double dDIBL_Sft_dVb;
double diffVdsii ;
double Idgidl, Gdgidld, Gdgidlg, Isgidl, Gsgidlg;
double Gjsd, Gjss, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Gjsd, Gjsb, GjsT, Gjdd, Gjdb, GjdT;
double Ibp, Iii, Giid, Giig, Giib, GiiT, Gcd, Gcb, GcT, ceqbody, ceqbodcon;
double gppb, gppp, gppT;
double delTemp, deldelTemp, Temp;
double ceqth, ceqqth;
double K1, WL;
double qjs, gcjsbs, gcjsT;
double qjd, gcjdbs, gcjdds, gcjdT;
double K1;
double qjs = 0.0, gcjsbs, gcjsT;
double qjd = 0.0, gcjdbs, gcjdds, gcjdT;
double qge;
double ceqqe;
double ni, Eg, Cbox, Nfb, CboxWL;
double ni, Eg, Cbox, CboxWL;
double cjsbs;
double dVfbeff_dVrg;
double qinv, qgate, qbody, qdrn, qsrc, qsub, cqgate, cqbody, cqdrn, cqsub, cqtemp;
double Cgg, Cgd, Cgs, Cgb, Cdg, Cdd, Cds, Cdb, Qg, Qd;
double Csg, Csd, Css, Csb, Cbg, Cbd, Cbs, Cbb, Qs, Qb;
double qinv, qgate = 0.0, qbody = 0.0, qdrn = 0.0, qsrc, qsub = 0.0;
double cqgate, cqbody, cqdrn, cqsub, cqtemp;
double Cgg, Cgd, Cgb;
double Csg, Csd, Csb, Cbg = 0.0, Cbd = 0.0, Cbb = 0.0;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1;
double Vbseff0;
double Vdsatii ,dVdsatii_dVg ,dVdsatii_dVd, dVdsatii_dVb, dVdsatii_dT;
double Ibjt ,dIbjt_dVb ,dIbjt_dVd ,dIbjt_dT;
double Ibs1 ,dIbs1_dVb ,dIbs1_dT;
double Ibs2 ,dIbs2_dVb ,dIbs2_dT;
double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT;
@ -218,20 +209,13 @@ double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT;
double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT;
double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT;
double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT;
double ExpVbs1, dExpVbs1_dVb, dExpVbs1_dT;
double ExpVbs2, dExpVbs2_dVb, dExpVbs2_dT;
double ExpVbs4, dExpVbs4_dVb, dExpVbs4_dT;
double ExpVbd1, dExpVbd1_dVb, dExpVbd1_dT;
double ExpVbd2, dExpVbd2_dVb, dExpVbd2_dT;
double ExpVbd4, dExpVbd4_dVb, dExpVbd4_dT;
double WTsi, NVtm1, NVtm2;
double Ic ,dIc_dVb ,dIc_dVd;
double Ibs ,dIbs_dVb ,dIbs_dVd ;
double Ibd ,dIbd_dVb;
double Ibs;
double Ibd;
double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dT;
double Qsub0 ,dQsub0_dVg ,dQsub0_dVb ,dQsub0_dVd ;
double Qac0 ,dQac0_dVb ,dQac0_dVd;
double Qdep0 ,dQdep0_dVb;
double Qsub0 = 0.0, dQsub0_dVg, dQsub0_dVb, dQsub0_dVd;
double Qac0 = 0.0, dQac0_dVb, dQac0_dVd;
double Qe1 , dQe1_dVb, dQe1_dVe, dQe1_dT;
double Ce1b ,Ce1e, Ce1T;
double dQac0_dVrg, dQsub0_dVrg;
@ -242,7 +226,7 @@ double rds0, ua, ub, uc;
double dvbi_dT, dvfbb_dT, djbjt_dT, djdif_dT, djrec_dT, djtun_dT, du0temp_dT;
double dvsattemp_dT, drds0_dT, dua_dT, dub_dT, duc_dT, dni_dT, dVtm_dT;
double dVfbeff_dT, dQac0_dT, dQsub0_dT;
double CbT, CsT, CgT, CeT;
double CbT, CsT, CgT;
/* v2.0 release */
@ -254,12 +238,12 @@ double dVgst_dVd;
double Vdsatii0, dVdsatii0_dT;
double VgsStep, dVgsStep_dT, Ratio, dRatio_dVg, dRatio_dVb, dRatio_dVd, dRatio_dT, dTempRatio_dT;
double Vdiff, dVdiff_dVg, dVdiff_dVb, dVdiff_dVd, dVdiff_dT;
double dNVtm1_dT, dNVtm2_dT;
double dNVtm1_dT;
double NVtmf, NVtmr, dNVtmf_dT, dNVtmr_dT;
double TempRatioMinus1;
double Ahli, dAhli_dT;
double WsTsi, WdTsi;
double dPhiBSWG_dT, dcjsbs_dT, darg_dT, ddT3_dVb_dT;
double dPhiBSWG_dT, dcjsbs_dT, darg_dT = 0.0, ddT3_dVb_dT = 0.0;
double dT7_dT, dT0_dT7, dT1_dT7, dT2_dT7;
double CoxWLb, CoxWLcenb;
double ExpVbsNVtm, dExpVbsNVtm_dVb, dExpVbsNVtm_dT;
@ -284,7 +268,7 @@ double T3zb, lt1zb, ltwzb, Theta0zb;
double Delt_vthzb, dDelt_vthzb_dT;
double DeltVthwzb, dDeltVthwzb_dT;
double DeltVthtempzb, dDeltVthtempzb_dT;
double Vthzb, dVthzb_dT, Vfbzb, dVfbzb_dT;
double Vthzb = 0.0, dVthzb_dT = 0.0, Vfbzb, dVfbzb_dT;
/* v2.2 release */
@ -293,9 +277,10 @@ double OxideRatio, Vaux, dVaux_dVg, dVaux_dVd, dVaux_dVb;
double Igb, dIgb_dVg, dIgb_dVd, dIgb_dVb;
double ceqgate;
double dT0_dVox, Voxeff, dVoxeff_dVox;
double dVox_dT, dVaux_dT, dIgb_dT;
double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVb, dVoxacc_dT;
double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd, dVoxdepinv_dT;
double dVox_dT = 0.0, dVaux_dT = 0.0, dIgb_dT;
double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVb;
double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd;
double dVoxdepinv_dT = 0.0;
double Igb1, dIgb1_dVg, dIgb1_dVd, dIgb1_dVb, dIgb1_dT;
double Igb2, dIgb2_dVg, dIgb2_dVd, dIgb2_dVb, dIgb2_dT;
double gigs, gigd, gigb, gigg;

View File

@ -54,9 +54,8 @@ B3SOIPDStrongInversionNoiseEval(double vgs, double vds, B3SOIPDmodel *model,
double temp)
{
struct b3soipdSizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi;
double req, ceq;
double cd, esat, DelClm, EffFreq, N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->B3SOIPDcd) * here->B3SOIPDm;
@ -113,11 +112,10 @@ double noizDens[B3SOIPDNSRCS];
double lnNdens[B3SOIPDNSRCS];
double vgs, vds, Slimit;
double N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;
double n, ExpArg, Ssi, Swi;
double T1, T10, T11;
double Ssi, Swi;
int error, i;
int i;
/* define the names of the noise sources */
static char *B3SOIPDnNames[B3SOIPDNSRCS] =

View File

@ -23,9 +23,10 @@ B3SOIPDpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
B3SOIPDmodel *model = (B3SOIPDmodel*)inModel;
B3SOIPDinstance *here;
double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb;
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb;
double gdpr, gspr, gds, gbd, gbs, capbd = 0.0, capbs = 0.0;
double xcsgb, xcdsb, xcsdb;
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb;
double GSoverlapCap, GDoverlapCap, GBoverlapCap;
double GSoverlapCap, GDoverlapCap, GBoverlapCap = 0.0;
double FwdSum, RevSum, Gm, Gmbs;
double m;

View File

@ -40,11 +40,9 @@ B3SOIPDinstance *here;
int error;
CKTnode *tmp;
double tmp1, tmp2;
double nfb0, Cboxt;
int itmp1;
double Cboxt;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
@ -1131,10 +1129,10 @@ IFuid tmpName;
here->B3SOIPDdNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void**)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -1153,10 +1151,10 @@ IFuid tmpName;
here->B3SOIPDsNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void**)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -53,14 +53,14 @@ B3SOIPDtemp(GENmodel *inModel, CKTcircuit *ckt)
{
B3SOIPDmodel *model = (B3SOIPDmodel*) inModel;
B3SOIPDinstance *here;
struct b3soipdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn;
double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
struct b3soipdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam=NULL;
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn;
double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
double SDphi, SDgamma;
int Size_Not_Found;
/* v2.0 release */
double tmp3, T7, T8, T9;
double tmp3, T7;
/* loop through all the B3SOIPD device models */

View File

@ -32,59 +32,52 @@ BSIM3v0load(GENmodel *inModel, CKTcircuit *ckt)
BSIM3v0model *model = (BSIM3v0model*)inModel;
BSIM3v0instance *here;
double SourceSatCurrent, DrainSatCurrent;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double ag0, qgd, qgs, qgb, von, cbhat = 0.0, VgstNVt, ExpVgst = 0.0;
double cdrain, cdhat = 0.0, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double czbd, czbdsw, czbs, czbssw, evbd, evbs, arg, sarg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb;
double gcsgb, gcssb, tol, PhiB, PhiBSW, MJ, MJSW;
double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact;
double qgate, qbulk, qdrn, qsrc, cqgate, cqbulk, cqdrn;
double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc, cqgate, cqbulk, cqdrn;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVbs_dVb;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd;
double Vgst, dVgs_eff_dVg;
double Vgdt, Vgsaddvth, Vgsaddvth2, Vgsaddvth1o3, n, dn_dVb, Vtm;
double ExpArg, ExpArg1;
double n, dn_dVb, Vtm;
double ExpArg;
double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb;
double ueff, dueff_dVg, dueff_dVd, dueff_dVb;
double Esat, dEsat_dVg, dEsat_dVd, dEsat_dVb, Vdsat, Vdsat0;
double Esat, Vdsat;
double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb;
double Ilimit, Iexp, dIexp_dVg, dIexp_dVd, dIexp_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, Va2, dVa_dVd, dVa_dVg, dVa_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb;
double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb;
double Arg1, Arg2, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL;
double dqbulk_dVb, dVgdt_dVg, dVgdt_dVd, dVgdt_dVb;
double Arg1, One_Third_CoxWL, Two_Third_CoxWL, CoxWL;
double T0, dT0_dVg, dT0_dVd, dT0_dVb;
double T1, dT1_dVg, dT1_dVd, dT1_dVb;
double T2, dT2_dVg, dT2_dVd, dT2_dVb;
double T3, dT3_dVg, dT3_dVd, dT3_dVb;
double T4, dT4_dVg, dT4_dVd, dT4_dVb;
double T5, dT5_dVg, dT5_dVd, dT5_dVb;
double T6, dT6_dVg, dT6_dVd, dT6_dVb;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T8, dT8_dVg, dT8_dVd, dT8_dVb;
double T9, dT9_dVg, dT9_dVd, dT9_dVb;
double T10, dT10_dVg, dT10_dVb, dT10_dVd;
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double T100, T101;
double T5;
double T6;
double T7;
double T8;
double T10;
double Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb;
double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb;
double VAHCE, dVAHCE_dVg, dVAHCE_dVd, dVAHCE_dVb;
double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb;
double Theta0, dTheta0_dVb, Theta1, dTheta1_dVb;
double Thetarout, dThetarout_dVb, TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, DIBL_fact, Pmos_factor;
double Rout_Vgs_factor, dRout_Vgs_factor_dVg, dRout_Vgs_factor_dVb;
double dRout_Vgs_factor_dVd;
double Theta0, dTheta0_dVb;
double TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, Pmos_factor;
double tempv, a1;
double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb;
double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb;
double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
double diffVds, diffVdsCV;
double diffVds;
double dAbulk_dVg, dn_dVd ;
double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb;
double gche, dgche_dVg, dgche_dVd, dgche_dVb;
@ -93,31 +86,29 @@ double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb;
double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb;
double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb;
double Ids, Gm, Gds, Gmb;
double Isub, Isubd, Isubs, Gbd, Gbg, Gbb;
double Isub, Gbd, Gbg, Gbb;
double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds;
double Vgst2Vtm, VdsatCV, dVdsatCV_dVd, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff = 0.0, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift, csreq;
double gcqdb,gcqsb,gcqgb,gcqbb,vss;
double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift;
double gcqdb,gcqsb,gcqgb,gcqbb;
double dxpart, sxpart;
double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp;
double gbdpdp, gbdpg, gbdpb, gbdpsp;
double Cgg, Cgd, Cgs, Cgb, Cdg, Cdd, Cds, Cdb, Qg, Qd;
double Csg, Csd, Css, Csb, Cbg, Cbd, Cbs, Cbb, Qs, Qb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1, Qac0, Qsub0;
double Cgg, Cgd, Cgb;
double Csg, Csd, Csb, Cbg, Cbd, Cbb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0;
double dQac0_dVg, dQac0_dVd, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb;
struct bsim3v0SizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, J, error, I;
double junk[50];
double m;
int ByPass, Check, ChargeComputationNeeded = 0, error;
double m = 0.0;
for (; model != NULL; model = model->BSIM3v0nextModel)
{ for (here = model->BSIM3v0instances; here != NULL;

View File

@ -31,7 +31,7 @@ StrongInversionNoiseEval(double vgs, double vds, BSIM3v0model *model,
{
struct bsim3v0SizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->BSIM3v0cd) * here->BSIM3v0m;
@ -85,11 +85,10 @@ double noizDens[BSIM3v0NSRCS];
double lnNdens[BSIM3v0NSRCS];
double vgs, vds, Slimit;
double N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;
double n, ExpArg, Ssi, Swi;
double T1, T10, T11;
double Ssi, Swi;
int error, i;
int i;
/* define the names of the noise sources */
static char *BSIM3v0nNames[BSIM3v0NSRCS] =

View File

@ -31,9 +31,7 @@ BSIM3v0instance *here;
int error;
CKTnode *tmp;
double tmp1, tmp2;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
/* loop through all the BSIM3v0 device models */
@ -801,10 +799,10 @@ IFuid tmpName;
here->BSIM3v0dNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -822,10 +820,10 @@ IFuid tmpName;
here->BSIM3v0sNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -30,9 +30,9 @@ BSIM3v0temp(GENmodel *inModel, CKTcircuit *ckt)
{
register BSIM3v0model *model = (BSIM3v0model*) inModel;
register BSIM3v0instance *here;
struct bsim3v0SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
double tmp, tmp1, tmp2, Eg, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
struct bsim3v0SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam = NULL;
double tmp1, tmp2, Eg, ni, T0, T1, T2, T3, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
int Size_Not_Found;
/* loop through all the BSIM3v0 device models */

View File

@ -4,7 +4,8 @@ Author: 1991 JianHui Huang and Min-Chie Jeng.
File: bsim3v0itf.h
**********/
#ifdef DEV_bsim3v0
#ifndef DEV_bsim3v0
#define DEV_bsim3v0
SPICEdev *get_bsim3v0_info(void);

View File

@ -38,60 +38,54 @@ BSIM3v1load(GENmodel *inModel, CKTcircuit *ckt)
BSIM3v1model *model = (BSIM3v1model*)inModel;
BSIM3v1instance *here;
double SourceSatCurrent, DrainSatCurrent;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst = 0.0;
double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb;
double gcsgb, gcssb, tol, PhiB, PhiBSW, MJ, MJSW, PhiBSWG, MJSWG;
double gcsgb, gcssb, PhiB, PhiBSW, MJ, MJSW, PhiBSWG, MJSWG;
double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact;
double qgate, qbulk, qdrn, qsrc, cqgate, cqbulk, cqdrn;
double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc, cqgate, cqbulk, cqdrn;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVbs_dVb;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd;
double Vgst, dVgst_dVg, dVgst_dVb, dVgs_eff_dVg, Nvtm;
double Vgdt, Vgsaddvth, Vgsaddvth2, Vgsaddvth1o3, n, dn_dVb, Vtm;
double ExpArg, ExpArg1, V0;
double n, dn_dVb, Vtm;
double ExpArg, V0;
double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb;
double ueff, dueff_dVg, dueff_dVd, dueff_dVb;
double Esat, dEsat_dVg, dEsat_dVd, dEsat_dVb, Vdsat, Vdsat0;
double Esat, Vdsat;
double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb;
double Ilimit, Iexp, dIexp_dVg, dIexp_dVd, dIexp_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, Va2, dVa_dVd, dVa_dVg, dVa_dVb;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb;
double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb;
double Arg1, Arg2, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL;
double dqbulk_dVb, dVgdt_dVg, dVgdt_dVd, dVgdt_dVb;
double Arg1, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL;
double T0, dT0_dVg, dT0_dVd, dT0_dVb;
double T1, dT1_dVg, dT1_dVd, dT1_dVb;
double T2, dT2_dVg, dT2_dVd, dT2_dVb;
double T3, dT3_dVg, dT3_dVd, dT3_dVb;
double T4, dT4_dVg, dT4_dVd, dT4_dVb;
double T5, dT5_dVg, dT5_dVd, dT5_dVb;
double T6, dT6_dVg, dT6_dVd, dT6_dVb;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T8, dT8_dVg, dT8_dVd, dT8_dVb;
double T9, dT9_dVg, dT9_dVd, dT9_dVb;
double T10, dT10_dVg, dT10_dVb, dT10_dVd;
double T4;
double T5;
double T6;
double T7;
double T8;
double T9;
double T10;
double T11, T12;
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double T100, T101;
double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb;
double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb;
double VAHCE, dVAHCE_dVg, dVAHCE_dVd, dVAHCE_dVb;
double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb;
double Theta0, dTheta0_dVb, Theta1, dTheta1_dVb;
double Thetarout, dThetarout_dVb, TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, DIBL_fact, Lambda, dLambda_dVg;
double Rout_Vgs_factor, dRout_Vgs_factor_dVg, dRout_Vgs_factor_dVb;
double dRout_Vgs_factor_dVd;
double Theta0, dTheta0_dVb;
double TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, Lambda, dLambda_dVg;
double tempv, a1;
double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb;
double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb;
double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
double diffVds, diffVdsCV;
double diffVds;
double dAbulk_dVg, dn_dVd ;
double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb;
double gche, dgche_dVg, dgche_dVd, dgche_dVb;
@ -100,31 +94,30 @@ double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb;
double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb;
double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb;
double Ids, Gm, Gds, Gmb;
double Isub, Isubd, Isubs, Gbd, Gbg, Gbb;
double Isub, Gbd, Gbg, Gbb;
double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds;
double Vgst2Vtm, VdsatCV, dVdsatCV_dVd, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff = 0.0, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift, csreq;
double gcqdb,gcqsb,gcqgb,gcqbb,vss;
double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift;
double gcqdb,gcqsb,gcqgb,gcqbb;
double dxpart, sxpart;
double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp;
double gbdpdp, gbdpg, gbdpb, gbdpsp;
double Cgg, Cgd, Cgs, Cgb, Cdg, Cdd, Cds, Cdb, Qg, Qd;
double Csg, Csd, Css, Csb, Cbg, Cbd, Cbs, Cbb, Qs, Qb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1, Qac0, Qsub0;
double Cgg, Cgd, Cgb;
double Csg, Csd, Csb, Cbg, Cbd, Cbb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0;
double dQac0_dVg, dQac0_dVd, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb;
double m;
double m = 0.0;
struct bsim3v1SizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, J, error, I;
double junk[50];
int ByPass, Check, ChargeComputationNeeded = 0, error;
for (; model != NULL; model = model->BSIM3v1nextModel)
{ for (here = model->BSIM3v1instances; here != NULL;

View File

@ -53,7 +53,7 @@ StrongInversionNoiseEval_b3v1(double vgs, double vds, BSIM3v1model *model,
{
struct bsim3v1SizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->BSIM3v1cd) * here->BSIM3v1m;
@ -107,11 +107,10 @@ double noizDens[BSIM3v1NSRCS];
double lnNdens[BSIM3v1NSRCS];
double vgs, vds, Slimit;
double N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;
double n, ExpArg, Ssi, Swi;
double T1, T10, T11;
double Ssi, Swi;
int error, i;
int i;
/* define the names of the noise sources */
static char *BSIM3v1nNames[BSIM3v1NSRCS] =

View File

@ -37,9 +37,7 @@ BSIM3v1instance *here;
int error;
CKTnode *tmp;
double tmp1, tmp2;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
/* loop through all the BSIM3v1 device models */
@ -826,10 +824,10 @@ IFuid tmpName;
here->BSIM3v1dNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -848,10 +846,10 @@ IFuid tmpName;
here->BSIM3v1sNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -37,9 +37,9 @@ BSIM3v1temp(GENmodel *inModel, CKTcircuit *ckt)
{
BSIM3v1model *model = (BSIM3v1model*) inModel;
BSIM3v1instance *here;
struct bsim3v1SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
struct bsim3v1SizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam = NULL;
double tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
int Size_Not_Found;
/* loop through all the BSIM3v1 device models */

View File

@ -33,59 +33,52 @@ BSIM3v1Aload(GENmodel *inModel, CKTcircuit *ckt)
BSIM3v1Amodel *model = (BSIM3v1Amodel*)inModel;
BSIM3v1Ainstance *here;
double SourceSatCurrent, DrainSatCurrent;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst = 0.0;
double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double czbd, czbdsw, czbs, czbssw, evbd, evbs, arg, sarg;
double delvbd, delvbs, delvds, delvgd, delvgs;
double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4;
double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb;
double gcsgb, gcssb, tol, PhiB, PhiBSW, MJ, MJSW;
double gcsgb, gcssb, PhiB, PhiBSW, MJ, MJSW;
double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact;
double qgate, qbulk, qdrn, qsrc, cqgate, cqbulk, cqdrn;
double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc, cqgate, cqbulk, cqdrn;
double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVbs_dVb;
double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd;
double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd;
double Vgst, dVgs_eff_dVg;
double Vgdt, Vgsaddvth, Vgsaddvth2, Vgsaddvth1o3, n, dn_dVb, Vtm;
double ExpArg, ExpArg1;
double n, dn_dVb, Vtm;
double ExpArg;
double Denomi, dDenomi_dVg, dDenomi_dVd, dDenomi_dVb;
double ueff, dueff_dVg, dueff_dVd, dueff_dVb;
double Esat, dEsat_dVg, dEsat_dVd, dEsat_dVb, Vdsat, Vdsat0;
double Esat, Vdsat;
double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb;
double Ilimit, Iexp, dIexp_dVg, dIexp_dVd, dIexp_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat, dAlphaz_dVg, dAlphaz_dVb;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, Va2, dVa_dVd, dVa_dVg, dVa_dVb;
double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, Vasat;
double dVasat_dVg, dVasat_dVb, dVasat_dVd, Va, dVa_dVd, dVa_dVg, dVa_dVb;
double Vbseff, dVbseff_dVb, VbseffCV, dVbseffCV_dVb;
double Arg1, Arg2, One_Third_CoxWL, Two_Third_CoxWL, Alphaz, CoxWL;
double dqbulk_dVb, dVgdt_dVg, dVgdt_dVd, dVgdt_dVb;
double Arg1, One_Third_CoxWL, Two_Third_CoxWL, CoxWL;
double T0, dT0_dVg, dT0_dVd, dT0_dVb;
double T1, dT1_dVg, dT1_dVd, dT1_dVb;
double T2, dT2_dVg, dT2_dVd, dT2_dVb;
double T3, dT3_dVg, dT3_dVd, dT3_dVb;
double T4, dT4_dVg, dT4_dVd, dT4_dVb;
double T5, dT5_dVg, dT5_dVd, dT5_dVb;
double T6, dT6_dVg, dT6_dVd, dT6_dVb;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T8, dT8_dVg, dT8_dVd, dT8_dVb;
double T9, dT9_dVg, dT9_dVd, dT9_dVb;
double T10, dT10_dVg, dT10_dVb, dT10_dVd;
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double T100, T101;
double T5;
double T6;
double T7;
double T8;
double T10;
double Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb;
double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb;
double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb;
double VAHCE, dVAHCE_dVg, dVAHCE_dVd, dVAHCE_dVb;
double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb, Delt_vth, dDelt_vth_dVb;
double Theta0, dTheta0_dVb, Theta1, dTheta1_dVb;
double Thetarout, dThetarout_dVb, TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, DIBL_fact, Pmos_factor;
double Rout_Vgs_factor, dRout_Vgs_factor_dVg, dRout_Vgs_factor_dVb;
double dRout_Vgs_factor_dVd;
double Theta0, dTheta0_dVb;
double TempRatio, tmp1, tmp2, tmp3, tmp4;
double DIBL_Sft, dDIBL_Sft_dVd, Pmos_factor;
double tempv, a1;
double Vgsteff, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb;
double Vdseff, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb;
double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
double diffVds, diffVdsCV;
double diffVds;
double dAbulk_dVg, dn_dVd ;
double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb;
double gche, dgche_dVg, dgche_dVd, dgche_dVb;
@ -94,31 +87,30 @@ double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb;
double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb;
double Idsa, dIdsa_dVg, dIdsa_dVd, dIdsa_dVb;
double Ids, Gm, Gds, Gmb;
double Isub, Isubd, Isubs, Gbd, Gbg, Gbb;
double Isub, Gbd, Gbg, Gbb;
double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds;
double Vgst2Vtm, VdsatCV, dVdsatCV_dVd, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff = 0.0, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift, csreq;
double gcqdb,gcqsb,gcqgb,gcqbb,vss;
double qcheq, qdef, gqdef, cqdef, cqcheq, gtau_diff, gtau_drift;
double gcqdb,gcqsb,gcqgb,gcqbb;
double dxpart, sxpart;
double gbspsp, gbbdp, gbbsp, gbspg, gbspb, gbspdp;
double gbdpdp, gbdpg, gbdpb, gbdpsp;
double Cgg, Cgd, Cgs, Cgb, Cdg, Cdd, Cds, Cdb, Qg, Qd;
double Csg, Csd, Css, Csb, Cbg, Cbd, Cbs, Cbb, Qs, Qb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Csg1, Csd1, Csb1, Qac0, Qsub0;
double Cgg, Cgd, Cgb;
double Csg, Csd, Csb, Cbg, Cbd, Cbb;
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0;
double dQac0_dVg, dQac0_dVd, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb;
double m;
double m = 0.0;
struct bsim3v1aSizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, J, error, I;
double junk[50];
int ByPass, Check, ChargeComputationNeeded = 0, error;
for (; model != NULL; model = model->BSIM3v1AnextModel)
{ for (here = model->BSIM3v1Ainstances; here != NULL;

View File

@ -32,7 +32,7 @@ StrongInversionNoiseEval_b3v1a(double vgs, double vds, BSIM3v1Amodel *model,
{
struct bsim3v1aSizeDependParam *pParam;
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, Ssi;
pParam = here->pParam;
cd = fabs(here->BSIM3v1Acd) * here->BSIM3v1Am;
@ -86,11 +86,10 @@ double noizDens[BSIM3v1ANSRCS];
double lnNdens[BSIM3v1ANSRCS];
double vgs, vds, Slimit;
double N0, Nl;
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;
double n, ExpArg, Ssi, Swi;
double T1, T10, T11;
double Ssi, Swi;
int error, i;
int i;
/* define the names of the noise sources */
static char *BSIM3v1AnNames[BSIM3v1ANSRCS] =

View File

@ -32,9 +32,7 @@ BSIM3v1Ainstance *here;
int error;
CKTnode *tmp;
double tmp1, tmp2;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
/* loop through all the BSIM3v1A device models */
@ -802,10 +800,10 @@ IFuid tmpName;
here->BSIM3v1AdNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -824,10 +822,10 @@ IFuid tmpName;
here->BSIM3v1AsNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

View File

@ -31,9 +31,9 @@ BSIM3v1Atemp(GENmodel *inModel, CKTcircuit *ckt)
{
BSIM3v1Amodel *model = (BSIM3v1Amodel*) inModel;
BSIM3v1Ainstance *here;
struct bsim3v1aSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
double tmp, tmp1, tmp2, Eg, ni, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
struct bsim3v1aSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam = NULL;
double tmp1, tmp2, Eg, ni, T0, T1, T2, T3, Ldrn, Wdrn;
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Vtm0, Tnom;
int Size_Not_Found;
/* loop through all the BSIM3v1A device models */

View File

@ -33,7 +33,7 @@ BSIM3v1Sload(GENmodel *inModel, CKTcircuit *ckt)
BSIM3v1Smodel *model = (BSIM3v1Smodel*)inModel;
BSIM3v1Sinstance *here;
double SourceSatCurrent, DrainSatCurrent;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst = 0.0;
double cdrain, cdhat, cdreq, ceqbd, ceqbs, ceqqb, ceqqd, ceqqg, ceq, geq;
double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg;
double delvbd, delvbs, delvds, delvgd, delvgs;
@ -63,7 +63,7 @@ double T3, dT3_dVg, dT3_dVd, dT3_dVb;
double T4;
double T5;
double T6;
double T7, dT7_dVg, dT7_dVd, dT7_dVb;
double T7;
double T8;
double T9;
double T10;
@ -94,7 +94,7 @@ double VASCBE, dVASCBE_dVg, dVASCBE_dVd, dVASCBE_dVb;
double CoxWovL;
double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds;
double Vgst2Vtm, VdsatCV, dVdsatCV_dVg, dVdsatCV_dVb;
double Leff, Weff, dWeff_dVg, dWeff_dVb;
double Leff = 0.0, Weff, dWeff_dVg, dWeff_dVb;
double AbulkCV, dAbulkCV_dVb;
double qgdo, qgso, cgdo, cgso;
@ -110,7 +110,7 @@ double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0;
double dQac0_dVg, dQac0_dVd, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb;
struct bsim3v1sSizeDependParam *pParam;
int ByPass, Check, ChargeComputationNeeded, error;
int ByPass, Check, ChargeComputationNeeded = 0, error;
for (; model != NULL; model = model->BSIM3v1SnextModel)
{ for (here = model->BSIM3v1Sinstances; here != NULL;

View File

@ -32,7 +32,7 @@ BSIM3v1Sinstance *here;
int error;
CKTnode *tmp;
CKTnode *tmpNode;
CKTnode *tmpNode[1];
IFuid tmpName;
@ -854,10 +854,10 @@ IFuid tmpName;
here->BSIM3v1SdNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,1,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}
@ -876,10 +876,10 @@ IFuid tmpName;
here->BSIM3v1SsNodePrime = tmp->number;
if (ckt->CKTcopyNodesets) {
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
if (tmpNode->nsGiven) {
tmp->nodeset=tmpNode->nodeset;
tmp->nsGiven=tmpNode->nsGiven;
if (CKTinst2Node(ckt,here,3,(void **)tmpNode,&tmpName)==OK) {
if (tmpNode[0]->nsGiven) {
tmp->nodeset=tmpNode[0]->nodeset;
tmp->nsGiven=tmpNode[0]->nsGiven;
}
}
}

Some files were not shown because too many files have changed in this diff Show More