170 lines
6.6 KiB
C
170 lines
6.6 KiB
C
/*
|
|
* 2001 Paolo Nenzi
|
|
*/
|
|
|
|
/* External symbols for Two Dimensional simulator */
|
|
|
|
#ifndef ngspice_TWODEXT_H
|
|
#define ngspice_TWODEXT_H
|
|
|
|
#include "ngspice/profile.h"
|
|
#include "ngspice/twomesh.h"
|
|
#include "ngspice/twodev.h"
|
|
#include "ngspice/carddefs.h"
|
|
#include "ngspice/bool.h"
|
|
#include "ngspice/complex.h"
|
|
|
|
/* twoadmit.c */
|
|
extern int NUMD2admittance(TWOdevice *, double, SPcomplex *);
|
|
extern int NBJT2admittance(TWOdevice *, double, SPcomplex *,
|
|
SPcomplex *, SPcomplex *, SPcomplex *);
|
|
extern int NUMOSadmittance(TWOdevice *, double, struct mosAdmittances *);
|
|
extern BOOLEAN TWOsorSolve(TWOdevice *, double *, double *, double);
|
|
extern SPcomplex *contactAdmittance(TWOdevice *, TWOcontact *, BOOLEAN,
|
|
double *, double *, SPcomplex *);
|
|
extern SPcomplex *oxideAdmittance(TWOdevice *, TWOcontact *,BOOLEAN,
|
|
double *, double *, SPcomplex *);
|
|
|
|
extern void NUMD2ys(TWOdevice *, SPcomplex *, SPcomplex *);
|
|
extern void NBJT2ys(TWOdevice *,SPcomplex *, SPcomplex *, SPcomplex *,
|
|
SPcomplex *, SPcomplex *);
|
|
extern void NUMOSys(TWOdevice *, SPcomplex *, struct mosAdmittances *);
|
|
|
|
/* twoaval.c */
|
|
extern double TWOavalanche(TWOelem *, TWOnode *);
|
|
|
|
/* twocond.c */
|
|
extern void NUMD2conductance(TWOdevice *, BOOLEAN, double *, double *);
|
|
extern void NBJT2conductance(TWOdevice *, BOOLEAN, double *, double *,
|
|
double *, double *, double *);
|
|
extern void NUMOSconductance(TWOdevice *, BOOLEAN, double *,
|
|
struct mosConductances *);
|
|
extern double contactCurrent(TWOdevice *, TWOcontact *);
|
|
extern double oxideCurrent(TWOdevice *, TWOcontact *, BOOLEAN);
|
|
extern double contactConductance(TWOdevice *, TWOcontact *, BOOLEAN,
|
|
double *, BOOLEAN, double *);
|
|
extern double oxideConductance(TWOdevice *, TWOcontact *, BOOLEAN,
|
|
double *, BOOLEAN, double *);
|
|
extern void NUMD2current(TWOdevice *, BOOLEAN, double *, double *);
|
|
extern void NBJT2current(TWOdevice *, BOOLEAN, double *, double *,
|
|
double *);
|
|
extern void NUMOScurrent(TWOdevice *, BOOLEAN , double *, double *, double *,
|
|
double *);
|
|
|
|
/* twocont */
|
|
extern void TWO_jacBuild(TWOdevice *);
|
|
extern void TWO_sysLoad(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern void TWO_jacLoad(TWOdevice *);
|
|
extern void TWO_rhsLoad(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern void TWO_commonTerms(TWOdevice *, BOOLEAN, BOOLEAN, TWOtranInfo *);
|
|
|
|
/* twocurr.c */
|
|
extern void nodeCurrents(TWOelem *, TWOnode *, double *, double *,
|
|
double *, double *, double *, double *, double *, double *);
|
|
|
|
/* twodest */
|
|
extern void TWOdestroy(TWOdevice *);
|
|
|
|
/* twodopng.c */
|
|
extern double TWOdopingValue(DOPprofile *, DOPtable *, double, double);
|
|
extern void TWOsetDoping(TWOdevice *, DOPprofile *, DOPtable *);
|
|
|
|
/* twoelect.c */
|
|
extern int TWOcmpElectrode(TWOelectrode *, TWOelectrode *);
|
|
extern void checkElectrodes(TWOelectrode *, int);
|
|
extern void setupContacts(TWOdevice *, TWOelectrode *, TWOnode ***);
|
|
|
|
/* twofield.c */
|
|
extern void nodeFields(TWOelem *, TWOnode *, double *, double *);
|
|
|
|
/* twomesh.c */
|
|
extern void TWObuildMesh(TWOdevice *, TWOdomain *, TWOelectrode *,
|
|
TWOmaterial *);
|
|
extern void TWOprnMesh(TWOdevice *);
|
|
extern void TWOgetStatePointers(TWOdevice *, int *);
|
|
|
|
/* twomobdv.c */
|
|
extern void TWO_mobDeriv(TWOelem *, int, double);
|
|
extern void TWONmobDeriv(TWOelem *, int, double);
|
|
extern void TWOPmobDeriv(TWOelem *, int, double);
|
|
|
|
/* twomobfn.c */
|
|
extern void MOBsurfElec(TWOmaterial *, TWOelem *, double, double,
|
|
double, double, double, double);
|
|
extern void MOBsurfHole(TWOmaterial *, TWOelem *, double, double,
|
|
double, double, double, double);
|
|
|
|
/* twomobil.c */
|
|
extern void TWO_mobility(TWOelem *, double);
|
|
extern void TWONmobility(TWOelem *, double);
|
|
extern void TWOPmobility(TWOelem *, double);
|
|
|
|
/* twoncont.c */
|
|
extern void TWONjacBuild(TWOdevice *);
|
|
extern void TWONsysLoad(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern void TWONjacLoad(TWOdevice *);
|
|
extern void TWONrhsLoad(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern void TWONcommonTerms(TWOdevice *, BOOLEAN, BOOLEAN, TWOtranInfo *);
|
|
|
|
/* twopcont.c */
|
|
extern void TWOPjacBuild(TWOdevice *);
|
|
extern void TWOPsysLoad(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern void TWOPjacLoad(TWOdevice *);
|
|
extern void TWOPrhsLoad(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern void TWOPcommonTerms(TWOdevice *, BOOLEAN, BOOLEAN, TWOtranInfo *);
|
|
|
|
/* twopoiss.c */
|
|
extern void TWOQjacBuild(TWOdevice *);
|
|
extern void TWOQsysLoad(TWOdevice *);
|
|
extern void TWOQrhsLoad(TWOdevice *);
|
|
extern void TWOQcommonTerms(TWOdevice *);
|
|
|
|
/*twoprint.c */
|
|
extern void TWOprnSolution(FILE *, TWOdevice *, OUTPcard *, BOOLEAN, char *);
|
|
extern void TWOmemStats(FILE *, TWOdevice *);
|
|
extern void TWOcpuStats(FILE *, TWOdevice *);
|
|
|
|
|
|
/* twoproj.c */
|
|
extern void NUMD2project(TWOdevice *, double);
|
|
extern void NBJT2project(TWOdevice *, double, double);
|
|
extern void NUMOSproject(TWOdevice *, double, double, double);
|
|
extern void NUMD2update(TWOdevice *,double, BOOLEAN);
|
|
extern void NBJT2update(TWOdevice *, double, double, BOOLEAN);
|
|
extern void NUMOSupdate(TWOdevice *, double, double, double, BOOLEAN);
|
|
extern void storeNewRhs(TWOdevice *, TWOcontact *);
|
|
|
|
/* tworead.c */
|
|
extern int TWOreadState(TWOdevice *, char *, int, double *, double *, double *);
|
|
|
|
/*twosetbc.c */
|
|
extern void NUMD2setBCs(TWOdevice *, double);
|
|
extern void NBJT2setBCs(TWOdevice *, double, double);
|
|
extern void NUMOSsetBCs(TWOdevice *, double, double, double);
|
|
|
|
/*twosetup.c */
|
|
extern void TWOsetup(TWOdevice *);
|
|
extern void TWOsetBCparams(TWOdevice *, BDRYcard *);
|
|
extern void TWOnormalize(TWOdevice *);
|
|
|
|
/* twosolve.c */
|
|
extern void TWOdcSolve(TWOdevice *, int, BOOLEAN, BOOLEAN, TWOtranInfo *);
|
|
extern BOOLEAN TWOdeltaConverged(TWOdevice *);
|
|
extern BOOLEAN TWOdeviceConverged(TWOdevice *);
|
|
extern void TWOresetJacobian(TWOdevice *);
|
|
extern void TWOstoreNeutralGuess(TWOdevice *);
|
|
extern int TWOequilSolve(TWOdevice *);
|
|
extern void TWObiasSolve(TWOdevice *, int, BOOLEAN, TWOtranInfo *);
|
|
extern void TWOstoreEquilibGuess(TWOdevice *);
|
|
extern void TWOstoreInitialGuess(TWOdevice *);
|
|
extern void oldTWOnewDelta(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern int TWOnewDelta(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
extern void TWOpredict(TWOdevice *, TWOtranInfo *);
|
|
extern double TWOtrunc(TWOdevice *, TWOtranInfo *, double);
|
|
extern void TWOsaveState(TWOdevice *);
|
|
extern BOOLEAN TWOpsiDeltaConverged(TWOdevice *);
|
|
extern double TWOnuNorm(TWOdevice *);
|
|
extern void TWOjacCheck(TWOdevice *, BOOLEAN, TWOtranInfo *);
|
|
|
|
#endif
|