restructure of code

This commit is contained in:
Markus Mueller 2020-08-09 19:37:54 +02:00
parent 7a023e466b
commit ba7e4a0751
4 changed files with 308 additions and 270 deletions

View File

@ -0,0 +1,240 @@
#include <hicum_vae.hpp>
#include <limits>
double inf = std::numeric_limits<double>::infinity();
HICUML2::HICUML2(){
this->spice_model_struct.modelcard = {
{"c10",Parameter(2.0E-30, 0,1)},
{"qp0",Parameter(2.0E-14,0,1)},
{"ich",Parameter(0.0,0,inf)},
{"hf0",Parameter(1.0,0,inf)},
{"hfe",Parameter(1.0,0,inf)},
{"hfc",Parameter(1.0,0,inf)},
{"hjei",Parameter(1.0,0,100)},
{"ahjei",Parameter(0.0,0,100)},
{"rhjei",Parameter(1.0,0,10)},
{"hjci",Parameter(1.0,0,100)},
{"ibeis",Parameter(1.0E-18, 0,1)},
{"mbei",Parameter(1.0, 0,10)},
{"ireis",Parameter(0.0, 0,1)},
{"mrei",Parameter(2.0, 0,10)},
{"ibeps",Parameter(0.0, 0,1)},
{"mbep",Parameter(1.0, 0,10)},
{"ireps",Parameter(0.0, 0,1)},
{"mrep",Parameter(2.0, 0,10)},
{"mcf",Parameter(1.0, 0,10)},
{"ibcis",Parameter(1.0E-16 , 0,1.0)},
{"mbci",Parameter(1.0 ,0,10)},
{"ibcxs",Parameter(0.0 ,0,1.0)},
{"mbcx",Parameter(1.0,0,10)},
{"ibets",Parameter (0.0 , 0,50)},
{"abet",Parameter (40,0,inf)},
{"tunode",Parameter(1,0,1)},
{"favl",Parameter(0.0,0,inf)},
{"qavl",Parameter(0.0,0,inf)},
{"kavl",Parameter(0.0,0,3)},
{"alfav",Parameter(0.0 ,-inf,inf)},
{"alqav",Parameter(0.0 ,-inf,inf)},
{"alkav",Parameter(0.0,-inf,inf)},
{"rbi0",Parameter(0.0,0,inf)},
{"rbx",Parameter(0.0, 0,inf)},
{"fgeo",Parameter(0.6557, 0,inf)},
{"fdqr0",Parameter(0.0 , -0.5,100)},
{"fcrbi",Parameter(0.0, 0,1)},
{"fqi",Parameter(1.0, 0,1)},
{"re",Parameter(0.0, 0,inf)},
{"rcx",Parameter(0.0,0,inf)},
{"itss",Parameter(0.0 , 0,1.0)},
{"msf",Parameter(1.0, 0,10)},
{"iscs",Parameter(0.0, 0,1.0)},
{"msc",Parameter(1.0, 0,10)},
{"tsf",Parameter(0.0, 0,inf)},
{"rsu",Parameter(0.0, 0,inf)},
{"csu",Parameter(0.0, 0,inf)},
{"cjei0",Parameter(1.0E-20, 0,inf)},
{"vdei",Parameter(0.9, 0,10)},
{"zei",Parameter(0.5,0,1)},
{"ajei",Parameter(2.5, 1,inf)},
{"cjep0",Parameter(1.0E-20,0,inf)},
{"vdep",Parameter(0.9, 0,10)},
{"zep",Parameter(0.5, 0,1)},
{"ajep",Parameter(2.5, 1,inf)},
{"cjci0",Parameter(1.0E-20, 0,inf)},
{"vdci",Parameter(0.7, 0,10)},
{"zci",Parameter(0.4, 0,1)},
{"vptci",Parameter(100, 0,100)},
{"cjcx0",Parameter(1.0E-20, 0,inf)},
{"vdcx",Parameter(0.7, 0,10)},
{"zcx",Parameter(0.4, 0,1)},
{"vptcx",Parameter(100,0,100)},
{"fbcpar",Parameter(0.0,0,1)},
{"fbepar",Parameter(1.0,0,1)},
{"cjs0",Parameter( 0.0, 0,inf)},
{"vds",Parameter(0.6,0,10)},
{"zs",Parameter(0.5, 0,1)},
{"vpts",Parameter(100,0,100)},
{"cscp0",Parameter(0.0, 0,inf)},
{"vdsp",Parameter(0.6, 0,10)},
{"zsp",Parameter(0.5, 0,1)},
{"vptsp",Parameter(100, 0,100)},
{"t0",Parameter(0.0, 0,inf)},
{"dt0h",Parameter(0.0,-inf,inf)},
{"tbvl",Parameter(0.0,-inf,inf)},
{"tef0",Parameter(0.0, 0,inf)},
{"gtfe",Parameter(1.0, 0,10)},
{"thcs",Parameter(0.0, 0,inf)},
{"ahc",Parameter(0.1, 0,50)},
{"fthc",Parameter(0.0, 0,1)},
{"rci0",Parameter(150, 0,inf)},
{"vlim",Parameter(0.5, 0,10)},
{"vces",Parameter(0.1,0,1)},
{"vpt",Parameter(100.0,0,inf)},
{"aick",Parameter(1e-3,0,10)},
{"delck",Parameter(2.0, 0,10)},
{"tr",Parameter(0.0, 0,inf)},
{"vcbar",Parameter(0.0,0,1)},
{"icbar",Parameter(0.0,0,1)},
{"acbar",Parameter(0.01,0,10)},
{"cbepar",Parameter(0.0,0,inf)},
{"cbcpar",Parameter(0.0,0,inf)},
{"alqf",Parameter(0.167, 0,1)},
{"alit",Parameter(0.333, 0,1)},
{"flnqs",Parameter(0,-10,10)},
{"kf",Parameter(0.0,0,inf)},
{"af",Parameter(2.0,0,10)},
{"cfbe",Parameter(-1,-2,-1)},
{"flcono",Parameter(0,0,1)},
{"kfre",Parameter(0.0,0,inf)},
{"afre",Parameter(2.0,0,10)},
{"latl",Parameter(0.0,0,inf)},
{"vgb",Parameter(1.17,0,10)},
{"alt0",Parameter(0.0,-inf,inf)},
{"kt0",Parameter(0.0,-inf,inf)},
{"zetaci",Parameter(0.0,-10,10)},
{"alvs",Parameter(0.0,-inf,inf)},
{"alces",Parameter(0.0,-inf,inf)},
{"zetarbi",Parameter(0.0,-10,10)},
{"zetarbx",Parameter(0.0,-10,10)},
{"zetarcx",Parameter(0.0,-10,10)},
{"zetare",Parameter(0.0,-10,10)},
{"zetacx",Parameter(1.0,-10,10)},
{"vge",Parameter(1.17,0,10)},
{"vgc",Parameter(1.17,0,10)},
{"vgs",Parameter(1.17,0,10)},
{"f1vg",Parameter(-1.02377e-4,-inf,inf)},
{"f2vg",Parameter(4.3215e-4,-inf,inf)},
{"zetact",Parameter(3.0,-10,10)},
{"zetabet",Parameter(3.5,-10,10)},
{"alb",Parameter(0.0,-inf,inf)},
{"dvgbe",Parameter(0,-inf,inf)},
{"zetahjei",Parameter(1,-10,10)},
{"zetavgbe",Parameter(1,-10,10)},
{"flsh",Parameter(0,0,2)},
{"rth",Parameter(0.0,0,inf)},
{"zetarth",Parameter(0.0,-10,10)},
{"alrth",Parameter(0.0,-10,10)},
{"cth",Parameter(0.0,0,inf)},
{"flcomp",Parameter(0.0,0,inf)},
{"tnom",Parameter(27.0,-inf,inf)},
{"dt",Parameter(0.0,-inf,inf)},
{"type",Parameter(1,-1,1)},
};
nodes = {
Node((char*)"B"),
Node((char*)"Bi"),
Node((char*)"Bp"),
Node((char*)"C"),
Node((char*)"Ci"),
Node((char*)"E"),
Node((char*)"Ei"),
Node((char*)"S"),
Node((char*)"T"),
};
// set model specific constants
this->n_external_nodes = sizeof(this->MODELnames);
this->model_size = sizeof(this->spice_model_struct);
this->instance_size = sizeof(this->spice_instance_struct);
};
HICUML2 hicumL2_model = HICUML2();
// void setModelcardPara(const char* para_name, double value){
// Parameter para(0,0,0);
// try {
// para = hicumL2_example.modelcard.at(para_name);
// } catch (const std::out_of_range& oor) {
// printf("Experimental HICUM: did not find parameter with name %s.\n", para_name);
// }
// para.setValue(value);
// };
SPICEdev * get_hicum_info()
{
hicumL2_model.model_info = {
.DEVpublic = {
.name = hicumL2_model.name,
.description = hicumL2_model.description,
.terms = &hicumL2_model.n_external_nodes,
.numNames = &hicumL2_model.n_external_nodes,
.termNames = hicumL2_model.MODELnames,
.numInstanceParms = &HICUMpTSize,
.instanceParms = HICUMpTable,
.numModelParms = &HICUMmPTSize,
.modelParms = HICUMmPTable,
.flags = DEV_DEFAULT,
#ifdef XSPICE
.cm_func = NULL,
.num_conn = 0,
.conn = NULL,
.num_param = 0,
.param = NULL,
.num_inst_var = 0,
.inst_var = NULL,
#endif
},
.DEVparam = this->test,//HICUMparam,
.DEVmodParam = this->MODELmParam,
.DEVload = HICUMload,
.DEVsetup = HICUMsetup,
.DEVunsetup = HICUMunsetup,
.DEVpzSetup = HICUMsetup,
.DEVtemperature = HICUMtemp,
.DEVtrunc = HICUMtrunc,
.DEVfindBranch = NULL,
.DEVacLoad = HICUMacLoad,
.DEVaccept = NULL,
.DEVdestroy = NULL,
.DEVmodDelete = NULL,
.DEVdelete = NULL,
.DEVsetic = HICUMgetic,
.DEVask = HICUMask,
.DEVmodAsk = HICUMmAsk,
.DEVpzLoad = HICUMpzLoad,
.DEVconvTest = HICUMconvTest,
.DEVsenSetup = NULL,
.DEVsenLoad = NULL,
.DEVsenUpdate = NULL,
.DEVsenAcLoad = NULL,
.DEVsenPrint = NULL,
.DEVsenTrunc = NULL,
.DEVdisto = NULL,
.DEVnoise = HICUMnoise,
.DEVsoaCheck = HICUMsoaCheck,
.DEVinstSize = &this->instance_size,
.DEVmodSize = &this->model_size,
#ifdef CIDER
.DEVdump = NULL,
.DEVacct = NULL,
#endif
};
return &(hicumL2_model.model_info);
}
//this way we can abstract: we expoe get_hicum_info to NGspice, but use
// the genereric object oriented function.

View File

@ -0,0 +1,62 @@
#ifndef hicum_vae
#define hicum_vae
//this file contains a class definition for models to be integrated into ngspice
//later, it should be moved somewhere else.
//for the time beeing, HICUM is the first model to use this.
#ifdef __cplusplus
#include <unordered_map>
#include <vector>
#include <limits>
#include <model_class.hpp>
extern "C" {
#include "ngspice/cktdefs.h"
#include "ngspice/ngspice.h"
#include "ngspice/smpdefs.h"
#include "ngspice/const.h"
#include "ngspice/sperror.h"
#include "ngspice/ifsim.h"
#include "ngspice/devdefs.h"
#include "ngspice/suffix.h"
}
class HICUML2 : public NGSpiceModel
{
public:
char * name = "hl2";
char * description = "high-speed HBT model"; //the description of the model
char * MODELnames[5] = {
"collector",
"base",
"emitter",
"substrate",
"temp"
};
HICUML2();
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern int HICUMacLoad(GENmodel *,CKTcircuit*);
extern int HICUMask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*);
extern int HICUMconvTest(GENmodel*,CKTcircuit*);
extern int HICUMdelete(GENinstance*);
extern int HICUMgetic(GENmodel*,CKTcircuit*);
extern int HICUMload(GENmodel*,CKTcircuit*);
extern int HICUMmAsk(CKTcircuit*,GENmodel*,int,IFvalue*);
extern int HICUMmParam(int,IFvalue*,GENmodel*);
extern int HICUMparam(int,IFvalue*,GENinstance*,IFvalue*);
extern int HICUMpzLoad(GENmodel*, CKTcircuit*, SPcomplex*);
extern int HICUMsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*);
extern int HICUMunsetup(GENmodel*,CKTcircuit*);
extern int HICUMtemp(GENmodel*,CKTcircuit*);
extern int HICUMtrunc(GENmodel*,CKTcircuit*,double*);
extern int HICUMnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
extern int HICUMsoaCheck(CKTcircuit *, GENmodel *);
extern SPICEdev * get_hicum_info(void);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -70,235 +70,6 @@ Branch::Branch(Node * node_from,Node * node_to,std::vector<Node*> depends){
branch_dependencies = depends;
};
double inf = std::numeric_limits<double>::infinity();
SPICEdev * NGSpiceModel::get_model_info()
{
this->model_info = {
.DEVpublic = {
.name = this->name,
.description = "High Current Model for BJT",
.terms = &this->n_external_nodes,
.numNames = &this->n_external_nodes,
.termNames = this->MODELnames,
.numInstanceParms = &HICUMpTSize,
.instanceParms = HICUMpTable,
.numModelParms = &HICUMmPTSize,
.modelParms = HICUMmPTable,
.flags = DEV_DEFAULT,
#ifdef XSPICE
.cm_func = NULL,
.num_conn = 0,
.conn = NULL,
.num_param = 0,
.param = NULL,
.num_inst_var = 0,
.inst_var = NULL,
#endif
},
.DEVparam = HICUMparam,
.DEVmodParam = this->MODELmParam,
.DEVload = HICUMload,
.DEVsetup = HICUMsetup,
.DEVunsetup = HICUMunsetup,
.DEVpzSetup = HICUMsetup,
.DEVtemperature = HICUMtemp,
.DEVtrunc = HICUMtrunc,
.DEVfindBranch = NULL,
.DEVacLoad = HICUMacLoad,
.DEVaccept = NULL,
.DEVdestroy = NULL,
.DEVmodDelete = NULL,
.DEVdelete = NULL,
.DEVsetic = HICUMgetic,
.DEVask = HICUMask,
.DEVmodAsk = HICUMmAsk,
.DEVpzLoad = HICUMpzLoad,
.DEVconvTest = HICUMconvTest,
.DEVsenSetup = NULL,
.DEVsenLoad = NULL,
.DEVsenUpdate = NULL,
.DEVsenAcLoad = NULL,
.DEVsenPrint = NULL,
.DEVsenTrunc = NULL,
.DEVdisto = NULL,
.DEVnoise = HICUMnoise,
.DEVsoaCheck = HICUMsoaCheck,
.DEVinstSize = &this->instance_size,
.DEVmodSize = &this->model_size,
#ifdef CIDER
.DEVdump = NULL,
.DEVacct = NULL,
#endif
};
return &(this->model_info);
}
HICUML2::HICUML2(){
this->spice_model_struct.modelcard = {
{"c10",Parameter(2.0E-30, 0,1)},
{"qp0",Parameter(2.0E-14,0,1)},
{"ich",Parameter(0.0,0,inf)},
{"hf0",Parameter(1.0,0,inf)},
{"hfe",Parameter(1.0,0,inf)},
{"hfc",Parameter(1.0,0,inf)},
{"hjei",Parameter(1.0,0,100)},
{"ahjei",Parameter(0.0,0,100)},
{"rhjei",Parameter(1.0,0,10)},
{"hjci",Parameter(1.0,0,100)},
{"ibeis",Parameter(1.0E-18, 0,1)},
{"mbei",Parameter(1.0, 0,10)},
{"ireis",Parameter(0.0, 0,1)},
{"mrei",Parameter(2.0, 0,10)},
{"ibeps",Parameter(0.0, 0,1)},
{"mbep",Parameter(1.0, 0,10)},
{"ireps",Parameter(0.0, 0,1)},
{"mrep",Parameter(2.0, 0,10)},
{"mcf",Parameter(1.0, 0,10)},
{"ibcis",Parameter(1.0E-16 , 0,1.0)},
{"mbci",Parameter(1.0 ,0,10)},
{"ibcxs",Parameter(0.0 ,0,1.0)},
{"mbcx",Parameter(1.0,0,10)},
{"ibets",Parameter (0.0 , 0,50)},
{"abet",Parameter (40,0,inf)},
{"tunode",Parameter(1,0,1)},
{"favl",Parameter(0.0,0,inf)},
{"qavl",Parameter(0.0,0,inf)},
{"kavl",Parameter(0.0,0,3)},
{"alfav",Parameter(0.0 ,-inf,inf)},
{"alqav",Parameter(0.0 ,-inf,inf)},
{"alkav",Parameter(0.0,-inf,inf)},
{"rbi0",Parameter(0.0,0,inf)},
{"rbx",Parameter(0.0, 0,inf)},
{"fgeo",Parameter(0.6557, 0,inf)},
{"fdqr0",Parameter(0.0 , -0.5,100)},
{"fcrbi",Parameter(0.0, 0,1)},
{"fqi",Parameter(1.0, 0,1)},
{"re",Parameter(0.0, 0,inf)},
{"rcx",Parameter(0.0,0,inf)},
{"itss",Parameter(0.0 , 0,1.0)},
{"msf",Parameter(1.0, 0,10)},
{"iscs",Parameter(0.0, 0,1.0)},
{"msc",Parameter(1.0, 0,10)},
{"tsf",Parameter(0.0, 0,inf)},
{"rsu",Parameter(0.0, 0,inf)},
{"csu",Parameter(0.0, 0,inf)},
{"cjei0",Parameter(1.0E-20, 0,inf)},
{"vdei",Parameter(0.9, 0,10)},
{"zei",Parameter(0.5,0,1)},
{"ajei",Parameter(2.5, 1,inf)},
{"cjep0",Parameter(1.0E-20,0,inf)},
{"vdep",Parameter(0.9, 0,10)},
{"zep",Parameter(0.5, 0,1)},
{"ajep",Parameter(2.5, 1,inf)},
{"cjci0",Parameter(1.0E-20, 0,inf)},
{"vdci",Parameter(0.7, 0,10)},
{"zci",Parameter(0.4, 0,1)},
{"vptci",Parameter(100, 0,100)},
{"cjcx0",Parameter(1.0E-20, 0,inf)},
{"vdcx",Parameter(0.7, 0,10)},
{"zcx",Parameter(0.4, 0,1)},
{"vptcx",Parameter(100,0,100)},
{"fbcpar",Parameter(0.0,0,1)},
{"fbepar",Parameter(1.0,0,1)},
{"cjs0",Parameter( 0.0, 0,inf)},
{"vds",Parameter(0.6,0,10)},
{"zs",Parameter(0.5, 0,1)},
{"vpts",Parameter(100,0,100)},
{"cscp0",Parameter(0.0, 0,inf)},
{"vdsp",Parameter(0.6, 0,10)},
{"zsp",Parameter(0.5, 0,1)},
{"vptsp",Parameter(100, 0,100)},
{"t0",Parameter(0.0, 0,inf)},
{"dt0h",Parameter(0.0,-inf,inf)},
{"tbvl",Parameter(0.0,-inf,inf)},
{"tef0",Parameter(0.0, 0,inf)},
{"gtfe",Parameter(1.0, 0,10)},
{"thcs",Parameter(0.0, 0,inf)},
{"ahc",Parameter(0.1, 0,50)},
{"fthc",Parameter(0.0, 0,1)},
{"rci0",Parameter(150, 0,inf)},
{"vlim",Parameter(0.5, 0,10)},
{"vces",Parameter(0.1,0,1)},
{"vpt",Parameter(100.0,0,inf)},
{"aick",Parameter(1e-3,0,10)},
{"delck",Parameter(2.0, 0,10)},
{"tr",Parameter(0.0, 0,inf)},
{"vcbar",Parameter(0.0,0,1)},
{"icbar",Parameter(0.0,0,1)},
{"acbar",Parameter(0.01,0,10)},
{"cbepar",Parameter(0.0,0,inf)},
{"cbcpar",Parameter(0.0,0,inf)},
{"alqf",Parameter(0.167, 0,1)},
{"alit",Parameter(0.333, 0,1)},
{"flnqs",Parameter(0,-10,10)},
{"kf",Parameter(0.0,0,inf)},
{"af",Parameter(2.0,0,10)},
{"cfbe",Parameter(-1,-2,-1)},
{"flcono",Parameter(0,0,1)},
{"kfre",Parameter(0.0,0,inf)},
{"afre",Parameter(2.0,0,10)},
{"latl",Parameter(0.0,0,inf)},
{"vgb",Parameter(1.17,0,10)},
{"alt0",Parameter(0.0,-inf,inf)},
{"kt0",Parameter(0.0,-inf,inf)},
{"zetaci",Parameter(0.0,-10,10)},
{"alvs",Parameter(0.0,-inf,inf)},
{"alces",Parameter(0.0,-inf,inf)},
{"zetarbi",Parameter(0.0,-10,10)},
{"zetarbx",Parameter(0.0,-10,10)},
{"zetarcx",Parameter(0.0,-10,10)},
{"zetare",Parameter(0.0,-10,10)},
{"zetacx",Parameter(1.0,-10,10)},
{"vge",Parameter(1.17,0,10)},
{"vgc",Parameter(1.17,0,10)},
{"vgs",Parameter(1.17,0,10)},
{"f1vg",Parameter(-1.02377e-4,-inf,inf)},
{"f2vg",Parameter(4.3215e-4,-inf,inf)},
{"zetact",Parameter(3.0,-10,10)},
{"zetabet",Parameter(3.5,-10,10)},
{"alb",Parameter(0.0,-inf,inf)},
{"dvgbe",Parameter(0,-inf,inf)},
{"zetahjei",Parameter(1,-10,10)},
{"zetavgbe",Parameter(1,-10,10)},
{"flsh",Parameter(0,0,2)},
{"rth",Parameter(0.0,0,inf)},
{"zetarth",Parameter(0.0,-10,10)},
{"alrth",Parameter(0.0,-10,10)},
{"cth",Parameter(0.0,0,inf)},
{"flcomp",Parameter(0.0,0,inf)},
{"tnom",Parameter(27.0,-inf,inf)},
{"dt",Parameter(0.0,-inf,inf)},
{"type",Parameter(1,-1,1)},
};
nodes = {
Node((char*)"B"),
Node((char*)"Bi"),
Node((char*)"Bp"),
Node((char*)"C"),
Node((char*)"Ci"),
Node((char*)"E"),
Node((char*)"Ei"),
Node((char*)"S"),
Node((char*)"T"),
};
// set model specific constants
this->n_external_nodes = sizeof(this->MODELnames);
this->model_size = sizeof(this->spice_model_struct);
this->instance_size = sizeof(this->spice_instance_struct);
};
//HICUML2 hicumL2_example = HICUML2();
// void setModelcardPara(const char* para_name, double value){
// Parameter para(0,0,0);
// try {
// para = hicumL2_example.modelcard.at(para_name);
// } catch (const std::out_of_range& oor) {
// printf("Experimental HICUM: did not find parameter with name %s.\n", para_name);
// }
// para.setValue(value);
// };

View File

@ -81,6 +81,8 @@ typedef struct sGENinstance {
const int HICUMtempNode; /* number of the temperature node of the hicum */
};
extern "C" typedef int spice_function(int x);
class NGSpiceModel
{
public:
@ -90,8 +92,8 @@ class NGSpiceModel
int n_external_nodes; //the name of the model
int model_size; //the size of the model structure
int instance_size; //the size of the instance structure
char * name ; //the name of the model
const char * description ; //the description of the model
char * name; //the name of the model
char * description; //the description of the model
char *MODELnames[]; // array of the names of the external nodes
//spice data structures
sGENmodel spice_model_struct;
@ -99,48 +101,11 @@ class NGSpiceModel
SPICEdev model_info;
//spice methods
SPICEdev * get_model_info();
int MODELacLoad(GENmodel *,CKTcircuit*);
int MODELask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*);
int MODELconvTest(GENmodel*,CKTcircuit*);
int MODELdelete(GENinstance*);
int MODELgetic(GENmodel*,CKTcircuit*);
//extern int HICUMload(GENmodel*,CKTcircuit*);//moved to hicumL2.hpp
int MODELmAsk(CKTcircuit*,GENmodel*,int,IFvalue*);
int MODELmParam(int,IFvalue*,GENmodel*);
int MODELparam(int,IFvalue*,GENinstance*,IFvalue*);
int MODELpzLoad(GENmodel*, CKTcircuit*, SPcomplex*);
int MODELsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*);
int MODELunsetup(GENmodel*,CKTcircuit*);
// extern int HICUMtemp(GENmodel*,CKTcircuit*); // moved to hicum2temp.hpp
int MODELtrunc(GENmodel*,CKTcircuit*,double*);
int MODELnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
int MODELsoaCheck(CKTcircuit *, GENmodel *);
spice_function test;
};
class HICUML2 : public NGSpiceModel
{
public:
const char * name = "hl2";
const char * description = "high-speed HBT model"; //the description of the model
char *MODELnames[5] = {
"collector",
"base",
"emitter",
"substrate",
"temp"
};
HICUML2();
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
//methods that are exposed to C
extern void setModelcardPara(const char* para_name, double value);
#ifdef __cplusplus
}
#endif
#endif