From a8a743d6201e07fe0d8de443127708277cedab1c Mon Sep 17 00:00:00 2001 From: r29173 Date: Thu, 19 May 2011 10:11:06 +0000 Subject: [PATCH] all xml files are concatenated into one single file ngspice.xml - except ngspiceMakefile.am.xml --- src/spicelib/devices/adms/admst/ngspice.xml | 7852 +++++++++++++++++ .../devices/adms/admst/ngspiceMakefile.am.xml | 31 +- 2 files changed, 7858 insertions(+), 25 deletions(-) create mode 100644 src/spicelib/devices/adms/admst/ngspice.xml diff --git a/src/spicelib/devices/adms/admst/ngspice.xml b/src/spicelib/devices/adms/admst/ngspice.xml new file mode 100644 index 000000000..e1f1043bd --- /dev/null +++ b/src/spicelib/devices/adms/admst/ngspice.xml @@ -0,0 +1,7852 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if defined(_DYNAMIC)\n + + int %s;\n + double %s=0.0/0.0;\n + char* %s;\n + + + + + + + + + + + + + + #endif /*_DYNAMIC*/\n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int %(name);\n + double %(name);\n + char* %(name);\n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "cktdefs.h" +#include "smpdefs.h" +#include "$(module)defs.h" +#include "const.h" +#include "sperror.h" +#include "ifsim.h" +#include "suffix.h" + +#define _STATIC +#define _DYNAMIC + +int $(module)temp(GENmodel *inModel, CKTcircuit *ckt) +{ + register $(module)model *model = ($(module)model*)inModel; + register $(module)instance *here; + for ( ; model != NULL; model = model->$(module)nextModel ) + { + + + /* loop through all the instances of the model */ + for (here = model->$(module)instances; here != NULL ; here = here->$(module)nextInstance) + { + + + } /* End of MOSFET Instance */ + } /* End of Model Instance */ + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#ifndef DEV_$(module) +#define DEV_$(module) + +extern SPICEdev *get_$(module)_info(void); + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "config.h" + +#include "devdefs.h" + + + + +#include "$(module)itf.h" +#include "$(module)ext.h" +#include "$(module)init.h" + +SPICEdev $(module)info = { + { "$module", + "$module created by adms", + &$(module)nSize, + &$(module)nSize, + $(module)names, + &$(module)pTSize, + $(module)pTable, + &$(module)mPTSize, + $(module)mPTable, +#ifdef XSPICE +/*---- Fixed by SDB 5.2.2003 to enable XSPICE/tclspice integration -----*/ + NULL, /* This is a SPICE device, it has no MIF info data */ + + 0, /* This is a SPICE device, it has no MIF info data */ + NULL, /* This is a SPICE device, it has no MIF info data */ + + 0, /* This is a SPICE device, it has no MIF info data */ + NULL, /* This is a SPICE device, it has no MIF info data */ + + 0, /* This is a SPICE device, it has no MIF info data */ + NULL, /* This is a SPICE device, it has no MIF info data */ +/*--------------------------- End of SDB fix -------------------------*/ +#endif + DEV_DEFAULT + }, + + $(module)par, /* DEVparam */ + $(module)mParam, /* DEVmodParam */ + $(module)load, /* DEVload */ + $(module)setup, /* DEVsetup */ + NULL, /* DEVunsetup */ + $(module)setup, /* DEVpzSetup */ + $(module)temp, /* DEVtemperature */ + $(module)trunc, /* DEVtrunc */ + NULL, /* DEVfindBranch */ + $(module)acLoad, /* DEVacLoad */ + NULL, /* DEVaccept */ + $(module)destroy, /* DEVdestroy */ + $(module)mDelete, /* DEVmodDelete */ + $(module)delete, /* DEVdelete */ + NULL, /* DEVsetic */ + $(module)ask, /* DEVask */ + $(module)mAsk, /* DEVmodAsk */ + $(module)pzLoad, /* DEVpzLoad */ + NULL, /* DEVconvTest */ + NULL, /* DEVsenSetup */ + NULL, /* DEVsenLoad */ + NULL, /* DEVsenUpdate */ + NULL, /* DEVsenAcLoad */ + NULL, /* DEVsenPrint */ + NULL, /* DEVsenTrunc */ + NULL, /* DEVdisto */ + NULL, /* DEVnoise */ +#ifdef CIDER + NULL, /* DEVdump */ + NULL, /* DEVacct */ +#endif + &$(module)iSize, /* DEVinstSize */ + &$(module)mSize /* DEVmodSize */ + +}; + +SPICEdev * +get_$(module)_info(void) +{ + return &$(module)info; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#ifndef _$(module)INIT_H +#define _$(module)INIT_H + +extern IFparm $(module)pTable[ ]; +extern IFparm $(module)mPTable[ ]; +extern char *$(module)names[ ]; +extern int $(module)pTSize; +extern int $(module)mPTSize; +extern int $(module)nSize; +extern int $(module)iSize; +extern int $(module)mSize; + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#ifndef __$(module)EXT_H +#define __$(module)EXT_H + + + + +#include "$(module)defs.h" + +extern int $(module)par(int,IFvalue*,GENinstance*,IFvalue*); +extern int $(module)mParam(int,IFvalue*,GENmodel*); +extern int $(module)load(GENmodel*,CKTcircuit*); +extern int $(module)setup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); +extern int $(module)guesstopology(SMPmatrix *, CKTcircuit *, $(module)model *, $(module)instance *); +extern int $(module)temp(GENmodel*,CKTcircuit*); +extern int $(module)ask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); +extern int $(module)mAsk(CKTcircuit*,GENmodel *,int, IFvalue*); +extern int $(module)acLoad(GENmodel *,CKTcircuit*); +extern int $(module)convTest(GENmodel *,CKTcircuit*); +extern int $(module)delete(GENmodel*,IFuid,GENinstance**); +extern int $(module)getic(GENmodel*,CKTcircuit*); +extern int $(module)mDelete(GENmodel**,IFuid,GENmodel*); +extern int $(module)noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); +extern int $(module)pzLoad(GENmodel*,CKTcircuit*,SPcomplex*); +extern int $(module)trunc(GENmodel*,CKTcircuit*,double*); +extern int $(module)unsetup(GENmodel*,CKTcircuit*); +extern void $(module)destroy(GENmodel**); + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#ifndef $(module) +#define $(module) + +#include "cktdefs.h" +#include "ifsim.h" +#include "gendefs.h" +#include "complex.h" +#include "noisedef.h" + + + + +#ifdef $(variable) + #warning conflict: $(variable) is declared as a variable of module '$(module)'. + #warning conflict: However in the API of ngspice '$(variable)' is also defined as a pragma. + #warning conflict: Pragma '$(variable)' will be undefined. + #warning conflict: You can solve the confict by renaming variable '$(variable)' in module '$(module)'. + #undef $(variable) +#endif + + + + +#ifdef $(variable) + #warning conflict: $(node) is declared as a node of module '$(module)'. + #warning conflict: However in the API of ngspice '$(node)' is also defined as a pragma. + #warning conflict: Pragma '$(node)' will be undefined. + #warning conflict: You can solve the confict by renaming variable '$(node)' in module '$(module)'. + #undef $(variable) +#endif + + +#ifdef NGSPICE_DEBUG_OK +#define NGSPICE_DEBUG \\ +{ \\ + if(getenv("ngspice_debug")) \\ + $(module)debug(ckt,model,here); \\ + else \\ + { \\ + printf(" To get more info run your simulation after setting shell variable ngspice_debug to 1\\n"); \\ + printf(" For example in sh shell just type: export ngspice_debug=1\\n"); \\ + } \\ +} +#else +#define NGSPICE_DEBUG +#endif + +#define EXIT_IF_ISNAN(var) \\ +if(isnan((double) var)) \\ +{ \\ + printf("%%s:%%i:bug:isnan:"#var"\\n",__FILE__,__LINE__); \\ + printf("Please send this message to laurent.lemaitre@freescale.com\\n"); \\ + NGSPICE_DEBUG \\ + exit(1); /*__asm__ __volatile__ ("int \$03");*/ \\ +} \\ +if(isinf((double) var)) \\ +{ \\ + printf("%%s:%%i:bug:isinf:"#var"\\n",__FILE__,__LINE__); \\ + printf("Please send this message to laurent.lemaitre@freescale.com\\n"); \\ + NGSPICE_DEBUG \\ + exit(1); /*__asm__ __volatile__ ("int \$03");*/ \\ +} + +/* ngspice \$simparam variables + gdev (1/Ohms): Additional conductance to be added to nonlinear branches for conductance homotopy convergence algorithm. + gmin (1/Ohms): Minimum conductance placed in parallel with nonlinear branches. + imax (Amps) : Branch current threshold above which the constitutive relation of a nonlinear branch should be linearized. + imelt (Amps) : Branch current threshold indicating device failure. + iteration : Iteration number of the analog solver. + scale : Scale factor for device instance geometry parameters. + shrink : Optical linear shrink factor. + simulatorSubversion : The simulator sub-version. + simulatorVersion : The simulator version. + sourceScaleFactor : Multiplicative factor for independent sources for source stepping homotopy convergence algorithm. + tnom degrees (Celsius): Default value of temperature at which model parameters were extracted. +*/ + +#define _circuit_gdev ckt->CKTgmin +#define _circuit_gmin ((ckt->CKTgmin)>(ckt->CKTdiagGmin))?(ckt->CKTgmin):(ckt->CKTdiagGmin) +#define _circuit_imax 1.0 +#define _circuit_imelt 1.0 +#define _circuit_iteration 1.0 +#define _circuit_scale 1.0 +#define _circuit_shrink 1.0 +#define _circuit_simulatorSubversion 0 +#define _circuit_simulatorVersion 3.5 +#define _circuit_sourceScaleFactor 1.0 +#define _circuit_tnom ckt->CKTnomTemp + +#define _circuit_temp ckt->CKTtemp +#define _scale 1.0 + +#define _cos(val,arg) val = cos(arg); +#define _d_cos(val,dval,arg) val = cos(arg); dval = (-sin(arg)); +#define _sin(val,arg) val = sin(arg); +#define _d_sin(val,dval,arg) val = sin(arg); dval = (cos(arg)); +#define _tan(val,arg) val = tan(arg); +#define _d_tan(val,dval,arg) val = tan(arg); dval = (1.0/cos(arg)/cos(arg)); +#define _hypot(xy,x,y) xy = sqrt((x)*(x)+(y)*(y)); +#define _dx_hypot(dx,xy,x,y) dx = (x)/(xy); +#define _dy_hypot(dy,xy,x,y) dy = (y)/(xy); +#define _max(xy,x,y) xy = ((x)>(y))?(x):(y); +#define _dx_max(dx,xy,x,y) dx = ((x)>(y))?1.0:0.0; +#define _dy_max(dy,xy,x,y) dy = ((x)>(y))?0.0:1.0; +#define _min(xy,x,y) xy = ((x)<(y))?(x):(y); +#define _dx_min(dx,xy,x,y) dx = ((x)<(y))?1.0:0.0; +#define _dy_min(dy,xy,x,y) dy = ((x)<(y))?0.0:1.0; +#define _cosh(val,arg) val = cosh(arg); +#define _d_cosh(val,dval,arg) val = cosh(arg); dval = (sinh(arg)); +#define _sinh(val,arg) val = sinh(arg); +#define _d_sinh(val,dval,arg) val = sinh(arg); dval = (cosh(arg)); +#define _tanh(val,arg) val = tanh(arg); +#define _d_tanh(val,dval,arg) val = tanh(arg); dval = (1.0/cosh(arg)/cosh(arg)); +#define _acos(val,arg) val = acos(arg); +#define _d_acos(val,dval,arg) val = acos(arg); dval = (-1.0/sqrt(1-arg*arg)); +#define _asin(val,arg) val = asin(arg); +#define _d_asin(val,dval,arg) val = asin(arg); dval = (+1.0/sqrt(1-arg*arg)); +#define _atan(val,arg) val = atan(arg); +#define _d_atan(val,dval,arg) val = atan(arg); dval = (+1.0/(1+arg*arg)); +#define _logE(val,arg) val = log(arg); +#define _d_logE(val,dval,arg) val = log(arg); dval = (1.0/arg); +#define _log10(val,arg) val = log10(arg); +#define _d_log10(val,dval,arg) val = log10(arg); dval = (1.0/arg/log(10)); +#define _exp(val,arg) val = exp(arg); +#define _d_exp(val,dval,arg) val = exp(arg); dval = val; +#define _sqrt(val,arg) val = sqrt(arg); +#define _d_sqrt(val,dval,arg) val = sqrt(arg); dval = (1.0/val/2.0); +#define _pow(xy,x,y) xy = pow(x,y); +#define _dx_pow(dx,xy,x,y) dx = (x==0.0)?0.0:((y/x)*xy); +#define _dy_pow(dy,xy,x,y) dy = (x==0.0)?0.0:((log(x)/exp(0.0))*xy); + +#define _div1(x,y) ((x)/(y)) +#define _div0(xy,x,y) xy=(x)/(y); +#define _div(xy,dx,x,y) dx=1/(y); xy=(x)*dx; +#define _dx_div(dx,xy,x,y) +#define _dy_div(dy,dx,xy,x,y) dy = -xy*dx; + +#define _limexp(val,arg) val = ((arg)<(90)) ? (exp(arg)) : (exp(90)*(1.0+(arg-90))); +#define _d_limexp(val,dval,arg) val = ((arg)<(90)) ? (exp(arg)) : (exp(90)*(1.0+(arg-90))); dval = val; +#define _fabs(val,arg) val = fabs(arg); +#define _d_fabs(val,dval,arg) val = fabs(arg); dval = (((val)>=0)?(+1.0):(-1.0)); +#define _abs(val) ((val)<(0) ? (-(val)):(val)) + +/* declarations for $(module) MOSFETs */ + +/* information needed for each instance */ +typedef struct s$(module)instance { + struct s$(module)model *$(module)modPtr; /* pointer to model */ + struct s$(module)instance *$(module)nextInstance; /* pointer to next instance of current model*/ + IFuid $(module)name; /* pointer to character string naming this instance */ + int $(module)owner; /* number of owner process */ + int $(module)state; /* index into state table for this device */ + + /* node */ + + + + + + + + + + /* instance parameters */ + + + + + + + + + + + + + // noise\n + + + + + /* variables */ + + + + + + + + + + /* states */ + + + + + + /* pointer to sparse matrix (+ values)*/ + + + + + + + + + + + + + + + + + + + +#define $(module)numStates 0 + +} $(module)instance ; + + +/* per model data */ + +typedef struct s$(module)model { /* model structure */ + int $(module)modType; /* type index of this device type */ + struct s$(module)model *$(module)nextModel; /* pointer to next possible model in linked list */ + $(module)instance * $(module)instances; /* pointer to list of instances that have this model */ + IFuid $(module)modName; /* pointer to the name of this model */ + + /* model parameters */ + + + + + + + + + + + + + /* variable */ + + + + + + + + + + +} $(module)model; + + + + + + + + + + + + + + + + + + + + +#include "$(module)ext.h" + +#include "analogfunction.h" + + +#endif /*$(module)*/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "const.h" +#include "cktdefs.h" +#include "$(module)defs.h" +#include "ifsim.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select) +{ + $(module)instance *instance = ($(module)instance*)inst; + switch (which) { + + + + + + + + + + + + + + + + + + + default: + return(-1); + } + return(-1); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "const.h" +#include "ifsim.h" +#include "cktdefs.h" +#include "devdefs.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)mAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value) +{ + $(module)model *model = ($(module)model *)inst; + switch (which) { + + + + + + + + + + + + + + + + + + + default: + return(-1); + } + return(-1); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "const.h" +#include "ifsim.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)par(int param, IFvalue *value, GENinstance *inst, IFvalue *select) +{ + $(module)instance *myinstance = ($(module)instance*)inst; + switch (param) { + + + + + + + + + + + + + + + + + + + + + default: + return(-1); + } + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "const.h" +#include "ifsim.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)mParam(int param, IFvalue *value, GENmodel *inMod) +{ + $(module)model *mod = ($(module)model*)inMod; + switch (param) { + + + + + + + + + + + + + + + + + + + + + + default: + return(-1); + } + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#define NGSPICE_DEBUG_OK + + + + +#include "ngspice.h" +#include "cktdefs.h" +#include "$(module)defs.h" +#include "const.h" +#include "trandefs.h" +#include "sperror.h" +#include "devdefs.h" +#include "suffix.h" + +/*fixme: noise not implemented in ngspice*/ +#define ngspice_flickernoise(p,n,mag,freq,info)\\ +{\\ +} +#define ngspice_whitenoise(p,n,mag,info)\\ +{\\ +} + +#define NP(p) *(ckt->CKTrhsOld+here->p ## Node) +#define BP(p,n) (NP(p)-NP(n)) +#define DBGNODE(p) printf(#p "=%i - v=%e\\n",here->p ## Node,NP(p)); + + + +#define _STATIC +#define _DYNAMIC +#define _DERIVATE + +#define _load_static_residual2(p,n,v)\\ + *(ckt->CKTrhs+here->p ## Node)-=v;\\ + *(ckt->CKTrhs+here->n ## Node)+=v; +#define _load_static_residual1(p,v)\\ + *(ckt->CKTrhs+here->p ## Node)-=v; + +#define _load_static_jacobian4(Sp,Sn,Pp,Pn,v)\\ + _load_static_residual2(Sp,Sn,-v*BP(Pp,Pn))\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ + *(here->PTR_J_ ## Sn ## _ ## Pn)+=v;\\ + *(here->PTR_J_ ## Sp ## _ ## Pn)-=v;\\ + *(here->PTR_J_ ## Sn ## _ ## Pp)-=v;\\ + (here->JSVAL_ ## Sp ## _ ## Pp)+=v;\\ + (here->JSVAL_ ## Sn ## _ ## Pn)+=v;\\ + (here->JSVAL_ ## Sp ## _ ## Pn)-=v;\\ + (here->JSVAL_ ## Sn ## _ ## Pp)-=v; +#define _load_static_jacobian2s(Sp,Sn,Pp,v)\\ + _load_static_residual2(Sp,Sn,-v*NP(Pp))\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ + *(here->PTR_J_ ## Sn ## _ ## Pp)-=v;\\ + (here->JSVAL_ ## Sp ## _ ## Pp)+=v;\\ + (here->JSVAL_ ## Sn ## _ ## Pp)-=v; +#define _load_static_jacobian2p(Sp,Pp,Pn,v)\\ + _load_static_residual1(Sp,-v*BP(Pp,Pn))\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ + *(here->PTR_J_ ## Sp ## _ ## Pn)-=v;\\ + (here->JSVAL_ ## Sp ## _ ## Pp)+=v;\\ + (here->JSVAL_ ## Sp ## _ ## Pn)-=v; +#define _load_static_jacobian1(Sp,Pp,v)\\ + _load_static_residual1(Sp,-v*NP(Pp))\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=v;\\ + (here->JSVAL_ ## Sp ## _ ## Pp)+=v; + +#define _load_dynamic_residual2(p,n,v)\\ +if(ChargeComputationNeeded)\\ +{\\ + int error;\\ + double unused;\\ + *(ckt->CKTstate0+here->state_##p##_##n)=v;\\ + if(ckt->CKTmode & MODEINITTRAN)\\ + *(ckt->CKTstate1+here->state_##p##_##n)=*(ckt->CKTstate0+here->state_##p##_##n);\\ + error = NIintegrate(ckt,&unused,&unused,0.0,here->state_##p##_##n);\\ + if(error) return(error);\\ + if(ckt->CKTmode & MODEINITTRAN)\\ + *(ckt->CKTstate1+here->state_##p##_##n+1) = *(ckt->CKTstate0+here->state_##p##_##n+1);\\ + *(ckt->CKTrhs+here->p##Node)-=*(ckt->CKTstate0+here->state_##p##_##n+1);\\ + *(ckt->CKTrhs+here->n##Node)+=*(ckt->CKTstate0+here->state_##p##_##n+1);\\ +} +#define _load_dynamic_residual1(p,v)\\ +if(ChargeComputationNeeded)\\ +{\\ + int error;\\ + double unused;\\ + *(ckt->CKTstate0+here->state_##p##_GND)=v;\\ + if(ckt->CKTmode & MODEINITTRAN)\\ + *(ckt->CKTstate1+here->state_##p##_GND)=*(ckt->CKTstate0+here->state_##p##_GND);\\ + error = NIintegrate(ckt,&unused,&unused,0.0,here->state_##p##_GND);\\ + if(error) return(error);\\ + if(ckt->CKTmode & MODEINITTRAN)\\ + *(ckt->CKTstate1+here->state_##p##_GND+1) = *(ckt->CKTstate0+here->state_##p##_GND+1);\\ + *(ckt->CKTrhs+here->p##Node)-=*(ckt->CKTstate0+here->state_##p##_GND+1);\\ +} + +#define _load_dynamic_jacobian4(Sp,Sn,Pp,Pn,v)\\ +if(ChargeComputationNeeded)\\ +{\\ + double geq=(v)*ckt->CKTag[0];\\ + double ceq=geq*BP(Pp,Pn);\\ + *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ + *(ckt->CKTrhs+here->Sn##Node)-=ceq;\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ + *(here->PTR_J_ ## Sn ## _ ## Pn)+=geq;\\ + *(here->PTR_J_ ## Sp ## _ ## Pn)-=geq;\\ + *(here->PTR_J_ ## Sn ## _ ## Pp)-=geq;\\ +}\\ + (here->JDVAL_ ## Sp ## _ ## Pp)+=v;\\ + (here->JDVAL_ ## Sn ## _ ## Pn)+=v;\\ + (here->JDVAL_ ## Sp ## _ ## Pn)-=v;\\ + (here->JDVAL_ ## Sn ## _ ## Pp)-=v; +#define _load_dynamic_jacobian2s(Sp,Sn,Pp,v)\\ +if(ChargeComputationNeeded)\\ +{\\ + double geq=(v)*ckt->CKTag[0];\\ + double ceq=geq*NP(Pp);\\ + *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ + *(ckt->CKTrhs+here->Sn##Node)-=ceq;\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ + *(here->PTR_J_ ## Sn ## _ ## Pp)-=geq;\\ +}\\ + (here->JDVAL_ ## Sp ## _ ## Pp)+=v;\\ + (here->JDVAL_ ## Sn ## _ ## Pp)-=v; +#define _load_dynamic_jacobian2p(Sp,Pp,Pn,v)\\ +if(ChargeComputationNeeded)\\ +{\\ + double geq=(v)*ckt->CKTag[0];\\ + double ceq=geq*BP(Pp,Pn);\\ + *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ + *(here->PTR_J_ ## Sp ## _ ## Pn)-=geq;\\ +}\\ + (here->JDVAL_ ## Sp ## _ ## Pp)+=v;\\ + (here->JDVAL_ ## Sp ## _ ## Pn)-=v; +#define _load_dynamic_jacobian1(Sp,Pp,v)\\ +if(ChargeComputationNeeded)\\ +{\\ + double geq=(v)*ckt->CKTag[0];\\ + double ceq=geq*NP(Pp);\\ + *(ckt->CKTrhs+here->Sp##Node)+=ceq;\\ + *(here->PTR_J_ ## Sp ## _ ## Pp)+=geq;\\ +}\\ +(here->JDVAL_ ## Sp ## _ ## Pp)+=v; + +int $(module)load(inModel,ckt) + GENmodel *inModel; + register CKTcircuit *ckt; + /* actually load the current value into the + * sparse matrix previously provided + */ +{ + register $(module)model *model = ($(module)model*)inModel; + register $(module)instance *here; + int ChargeComputationNeeded = + ((ckt->CKTmode & (MODEAC | MODETRAN | MODEINITSMSIG)) || + ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) + ? 1 : 0; + + for ( ; model != NULL; model = model->$(module)nextModel ) + { + /* loop through all the instances of the model */ + for (here = model->$(module)instances; here != NULL ; here = here->$(module)nextInstance) + { +{ + + + + + + + + + + +} +{ +#include "$module.hxx" +} + } /* End of Instance */ + } /* End of Model */ + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "cktdefs.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)acLoad(GENmodel *inModel, CKTcircuit *ckt) +{ + register $(module)model *model = ($(module)model*)inModel; + register $(module)instance *here; + for ( ; model != NULL; model = model->$(module)nextModel ) + { + /* loop through all the instances of the model */ + for (here = model->$(module)instances; here != NULL ; here = here->$(module)nextInstance) + { + + + + + + + + + + + + + + + + + + + } /* End of MOSFET Instance */ + } /* End of Model Instance */ + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "cktdefs.h" +#include "complex.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) +{ + register $(module)model *model = ($(module)model*)inModel; + register $(module)instance *here; + for ( ; model != NULL; model = model->$(module)nextModel ) + { + /* loop through all the instances of the model */ + for (here = model->$(module)instances; here != NULL ; here = here->$(module)nextInstance) + { + + + + + + + + + + + + + + + + + + + + + + + + + + + + } /* End of MOSFET Instance */ + } /* End of Model Instance */ + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "cktdefs.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) +{ + register $(module)model *model = ($(module)model*)inModel; + register $(module)instance *here; + +#ifdef STEPDEBUG + double debugtemp; +#endif /* STEPDEBUG */ + + for ( ; model != NULL; model = model->$(module)nextModel ) + { + /* loop through all the instances of the model */ + for (here = model->$(module)instances; here != NULL ; here = here->$(module)nextInstance) + { +#ifdef STEPDEBUG + debugtemp = *timeStep; +#endif /* STEPDEBUG */ + + + + + CKTterr(here->state_%s_%s, ckt, timeStep); + + + +#ifdef STEPDEBUG + if(debugtemp != *timeStep) + { printf("device %%s reduces step from %%g to %%g\\n", + here->$(module)name,debugtemp,*timeStep); + } +#endif /* STEPDEBUG */ + + } /* End of Instance */ + } /* End of Model */ + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "cktdefs.h" +#include "smpdefs.h" +#include "$(module)defs.h" +#include "const.h" +#include "sperror.h" +#include "ifsim.h" +#include "suffix.h" + +int $(module)setup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) + /* load the $(module) device structure with those pointers needed later + * for fast matrix loading + */ +{ + register $(module)model *model = ($(module)model*)inModel; + register $(module)instance *here; + + /* loop through all the $(module) device models */ + for ( ;model != NULL ;model = model->$(module)nextModel ) + { + + + + + + + + + + + + + + if(model->%s_Given == FALSE) model->%s=%s; + + + + + for ( here = model->$(module)instances ;here != NULL ; here = here->$(module)nextInstance ) + { + + + + + + + + + + + + + + if(here->%s_Given == FALSE) here->%s=%s; + + + + + + /* Internal Nodes */ + { + + + + + + + + here->%sNode = -1; + + } + + /* set states */ + + + + here->state_%s_%s = *states; *states += 2; + + /* set Sparse Matrix Pointers */ + + + + here->PTR_J_%s_%s_required=0; + + + $(module)guesstopology(matrix,ckt,model,here); + + /* Internal Nodes */ + { + int error; + CKTnode *tmp; + + + + + + + + + if(here->%sNode == -1) + { + error=CKTmkVolt(ckt,&tmp,here->$(module)name,"$info"); + if(error) return(error); + here->%sNode = tmp->number; + } + + } + + + + if(here->PTR_J_%s_%s_required==1) + { + + + + + here->PTR_J_%s_%s=SMPmakeElt(matrix,here->%sNode,here->%sNode); + } + + + } + } + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)delete(GENmodel *inModel, IFuid name, GENinstance **inInst) + +{ + register $(module)model *model = ($(module)model*)inModel; + register $(module)instance **fast =($(module)instance**)inInst; + + $(module)instance **prev = NULL; + $(module)instance *here; + + for ( ; model ; model = model->$(module)nextModel ) { + prev = &(model->$(module)instances); + for (here = *prev; here ; here = *prev) { + if(here->$(module)name == name || (fast && here==*fast) ) { + *prev = here->$(module)nextInstance; + FREE(here); + return(OK); + } + + } + } + return(E_NODEV); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "$(module)defs.h" +#include "sperror.h" +#include "suffix.h" + +int $(module)mDelete(GENmodel **inModel, IFuid modname, GENmodel *kill) + +{ + register $(module)model **model = ($(module)model**)inModel; + register $(module)model *modfast =($(module)model*)kill; + $(module)instance *here; + $(module)instance *prev = NULL; + $(module)model **oldmod; + + oldmod = model; + for ( ; *model ; model = &((*model)->$(module)nextModel)) { + if ((*model)->$(module)modName == modname || + (modfast && *model == modfast)) + goto delgot; + oldmod = model; + } + return(E_NOMOD); + + delgot: + *oldmod = (*model)->$(module)nextModel; /* cut deleted device out of list */ + for (here = (*model)->$(module)instances; here; here = here->$(module)nextInstance) + { if(prev) FREE(prev); + prev = here; + } + if(prev) FREE(prev); + FREE(*model); + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "$(module)defs.h" +#include "suffix.h" + +void $(module)destroy(GENmodel **inModel) + +{ + register $(module)model **model = ($(module)model**)inModel; + register $(module)instance *here; + $(module)instance *prev = NULL; + $(module)model *mod = *model; + $(module)model *oldmod = NULL; + + for ( ; mod ; mod = mod->$(module)nextModel ) { + if (oldmod) FREE(oldmod); + oldmod = mod; + prev = ($(module)instance *)NULL; + for (here = mod->$(module)instances; here ; here = here->$(module)nextInstance) { + if(prev) FREE(prev); + prev = here; + } + if(prev) FREE(prev); + } + if(oldmod) FREE(oldmod); + *model = NULL; + return; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "cktdefs.h" +#include "smpdefs.h" +#include "$(module)defs.h" +#include "const.h" +#include "sperror.h" +#include "ifsim.h" +#include "suffix.h" + +#define jacobian(a,b) here->PTR_J_##a##_##b##_required=1; +#define static_jacobian4(p,q,r,s) jacobian(p,r) jacobian(p,s) jacobian(q,r) jacobian(q,s) +#define static_jacobian2s(p,q,r) jacobian(p,r) jacobian(q,r) +#define static_jacobian2p(p,r,s) jacobian(p,r) jacobian(p,s) +#define static_jacobian1(p,r) jacobian(p,r) +#define dynamic_jacobian4(p,q,r,s) jacobian(p,r) jacobian(p,s) jacobian(q,r) jacobian(q,s) +#define dynamic_jacobian2s(p,q,r) jacobian(p,r) jacobian(q,r) +#define dynamic_jacobian2p(p,r,s) jacobian(p,r) jacobian(p,s) +#define dynamic_jacobian1(p,r) jacobian(p,r) +#define whitenoise_jacobian4(p,q,r,s) +#define whitenoise_jacobian2s(p,q,r) +#define whitenoise_jacobian2p(p,r,s) +#define whitenoise_jacobian1(p) +#define flickernoise_jacobian4(p,q,r,s) +#define flickernoise_jacobian2s(p,q,r) +#define flickernoise_jacobian2p(p,r,s) +#define flickernoise_jacobian1(p) + + +int $(module)guesstopology (SMPmatrix *matrix, CKTcircuit *ckt, $(module)model *model, $(module)instance *here) + /* guess topology */ +{ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int %(name);\n + double %(name)=0.0/0.0;\n + char* %(name);\n + + + + + + + return(OK); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "ngspice.h" +#include "devdefs.h" +#include "$(module)defs.h" +#include "suffix.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +char *$(module)names[] = { + + + + + + + + + + + + + +}; + +int $(module)nSize = NUMELEMS($(module)names); +int $(module)pTSize = NUMELEMS($(module)pTable); +int $(module)mPTSize = NUMELEMS($(module)mPTable); +int $(module)iSize = sizeof($(module)instance); +int $(module)mSize = sizeof($(module)model); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* arithmetics */ +#define EXP90 1.220403294317841e+039 +#define m00_hypot(v00,x,y) v00 = sqrt((x)*(x)+(y)*(y)); +#define m10_hypot(v10,v00,x,y) v10 = (x)/(v00); +#define m11_hypot(v11,v00,x,y) v11 = (y)/(v00); +#define m00_max(v00,x,y) v00 = ((x)>(y))?(x):(y); +#define m10_max(v10,v00,x,y) v10 = ((x)>(y))?1.0:0.0; +#define m11_max(v11,v00,x,y) v11 = ((x)>(y))?0.0:1.0; +#define m00_min(v00,x,y) v00 = ((x)<(y))?(x):(y); +#define m10_min(v10,v00,x,y) v10 = ((x)<(y))?1.0:0.0; +#define m11_min(v11,v00,x,y) v11 = ((x)<(y))?0.0:1.0; +#define m00_pow(v00,x,y) v00 = pow(x,y); +#define m10_pow(v10,v00,x,y) v10 = (x==0.0)?0.0:(v00)*(y)/(x); +#define m11_pow(v11,v00,x,y) v11 = (x==0.0)?0.0:(log(x)*(v00)); +#define m00_div(v00,v10,x,y) double v10=1/(y); double v00=(x)*v10; +#define m10_div(v10,v00,vv,x,y) +#define m11_div(v11,v00,vv,x,y) double v11 = -v00*vv; +#define m00_mult(v00,v10,v11,x,y) double v10=(x); double v11=(y); double v00=v10*v11; +#define m00_add(v00,x,y) double v00=(x)+(y); +#define m00_cos(v00,x) v00 = cos(x); +#define m10_cos(v10,v00,x) v10 = (-sin(x)); +#define m00_sin(v00,x) v00 = sin(x); +#define m10_sin(v10,v00,x) v10 = (cos(x)); +#define m00_tan(v00,x) v00 = tan(x); +#define m10_tan(v10,v00,x) v10 = (1.0/cos(x)/cos(x)); +#define m00_cosh(v00,x) v00 = cosh(x); +#define m10_cosh(v10,v00,x) v10 = (sinh(x)); +#define m00_sinh(v00,x) v00 = sinh(x); +#define m10_sinh(v10,v00,x) v10 = (cosh(x)); +#define m00_tanh(v00,x) v00 = tanh(x); +#define m10_tanh(v10,v00,x) v10 = (1.0/cosh(x)/cosh(x)); +#define m00_acos(v00,x) v00 = acos(x); +#define m10_acos(v10,v00,x) v10 = (-1.0/sqrt(1-x*x)); +#define m00_asin(v00,x) v00 = asin(x); +#define m10_asin(v10,v00,x) v10 = (+1.0/sqrt(1-x*x)); +#define m00_atan(v00,x) v00 = atan(x); +#define m10_atan(v10,v00,x) v10 = (+1.0/(1+x*x)); +#define m00_logE(v00,x) v00 = log(x); +#define m10_logE(v10,v00,x) v10 = (1.0/x); +#define m00_log10(v00,x) v00 = log10(x); +#define m10_log10(v10,v00,x) v10 = (1.0/x/log(10)); +#define m00_sqrt(v00,x) v00 = sqrt(x); +#define m10_sqrt(v10,v00,x) v10 = (0.5/v00); +#define m00_fabs(v00,x) v00 = fabs(x); +#define m10_fabs(v10,v00,x) v10 = (((x)>=0)?(+1.0):(-1.0)); +#define m00_exp(v00,x) v00 = exp(x); +#define m10_exp(v10,v00,x) v10 = v00; +#define m00_abs(v00) ((v00)<(0)?(-(v00)):(v00)) +#define m00_limexp(v00,x) v00 = ((x)<90.0?exp(x):EXP90*(x-89.0)); +#define m10_limexp(v10,v00,x) v10 = ((x)<90.0?(v00):EXP90); + +#define m20_logE(v00) (-1.0/v00/v00) +#define m20_exp(v00) exp(v00) +#define m20_limexp(v00) ((v00)<90.0?exp(v00):0.0) +#define m20_sqrt(v00) (-0.25/(v00)/sqrt(v00)) +#define m20_fabs(v00) 0.0 + + + + +/*wrapper*/ +#define pModel model +#define pInst here +#define mint_get_circuit_tempK() _circuit_temp +#define voltages(n) NP(n) +#define _DDT(q) q +#define _DDX +#define _DERIVATEFORDDX + +#define _DERIVATE2 + + + + + +inline double _cos(double arg) { return cos(arg); } +inline double _d0_cos(double arg) { return (-sin(arg)); } +inline double _sin(double arg) { return sin(arg); } +inline double _d0_sin(double arg) { return (cos(arg)); } +inline double _tan(double arg) { return tan(arg); } +inline double _d0_tan(double arg) { return (1.0/cos(arg)/cos(arg)); } +inline double _cosh(double arg) { return cosh(arg); } +inline double _d0_cosh(double arg) { return (sinh(arg)); } +inline double _sinh(double arg) { return sinh(arg); } +inline double _d0_sinh(double arg) { return (cosh(arg)); } +inline double _tanh(double arg) { return tanh(arg); } +inline double _d0_tanh(double arg) { return (1.0/cosh(arg)/cosh(arg)); } +inline double _acos(double arg) { return acos(arg); } +inline double _d0_acos(double arg) { return (-1.0/sqrt(1-arg*arg)); } +inline double _asin(double arg) { return asin(arg); } +inline double _d0_asin(double arg) { return (+1.0/sqrt(1-arg*arg)); } +inline double _atan(double arg) { return atan(arg); } +inline double _d0_atan(double arg) { return (+1.0/(1+arg*arg)); } +inline double _logE(double arg) { return log(arg); } +inline double _d0_logE(double arg) { return (1.0/arg); } +inline double _log10(double arg) { return log10(arg); } +inline double _d0_log10(double arg) { return (1.0/arg/log(10)); } +inline double _exp(double arg) { return exp(arg); } +inline double _d0_exp(double arg) { return exp(arg); } +inline double _sqrt(double arg) { return sqrt(arg); } +inline double _d0_sqrt(double arg) { return (1.0/sqrt(arg)/2.0); } +inline double _abs(double arg) { return fabs(arg); } +inline double _d0_abs(double arg) { return (((arg)>=0)?(+1.0):(-1.0)); } + +inline double _hypot(double x,double y) { return sqrt((x)*(x)+(y)*(y)); } +inline double _d0_hypot(double x,double y) { return (x)/sqrt((x)*(x)+(y)*(y)); } +inline double _d1_hypot(double x,double y) { return (y)/sqrt((x)*(x)+(y)*(y)); } + +inline double _max(double x,double y) { return ((x)>(y))?(x):(y); } +inline double _d0_max(double x,double y) { return ((x)>(y))?1.0:0.0; } +inline double _d1_max(double x,double y) { return ((x)>(y))?0.0:1.0; } + +inline double _min(double x,double y) { return ((x)<(y))?(x):(y); } +inline double _d0_min(double x,double y) { return ((x)<(y))?1.0:0.0; } +inline double _d1_min(double x,double y) { return ((x)<(y))?0.0:1.0; } + +inline double _pow(double x,double y) { return pow(x,y); } +inline double _d0_pow(double x,double y) { return (x==0.0)?0.0:((y/x)*pow(x,y)); } +inline double _d1_pow(double x,double y) { return (x==0.0)?0.0:((log(x)/exp(0.0))*pow(x,y)); } + +#define _limexp(arg) _exp(val,arg) +#define _d_limexp(arg) _d_exp(val,dval,arg) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int + double + char* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fabs + shrinkl + shrinka + log10 + logE + limexp + limexp + %(name) + + + + + $e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + printf( + _warning( + _error( + _finish( + _stop( + + + + + + %(e(tree)) + "\\n" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml b/src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml index 6cda44b90..bb289dff5 100644 --- a/src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml +++ b/src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml @@ -3,7 +3,10 @@