29 changed files with 2334 additions and 0 deletions
-
64src/include/bdrydefs.h
-
27src/include/carddefs.h
-
60src/include/ciderinp.h
-
86src/include/cidersupt.h
-
33src/include/contdefs.h
-
52src/include/domndefs.h
-
84src/include/dopdefs.h
-
48src/include/elctdefs.h
-
122src/include/gendev.h
-
124src/include/lsort.h
-
82src/include/material.h
-
93src/include/matldefs.h
-
44src/include/meshdefs.h
-
27src/include/meshext.h
-
45src/include/methdefs.h
-
68src/include/mobdefs.h
-
54src/include/modldefs.h
-
50src/include/numcards.h
-
231src/include/numconst.h
-
93src/include/numenum.h
-
42src/include/numgen.h
-
59src/include/numglobs.h
-
72src/include/onedev.h
-
130src/include/onemesh.h
-
60src/include/optndefs.h
-
107src/include/outpdefs.h
-
59src/include/profile.h
-
106src/include/twodev.h
-
212src/include/twomesh.h
@ -0,0 +1,64 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
#ifndef BDRY_H |
||||
|
#define BDRY_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sBDRYcard { |
||||
|
struct sBDRYcard *BDRYnextCard; |
||||
|
double BDRYxLow; |
||||
|
double BDRYxHigh; |
||||
|
double BDRYyLow; |
||||
|
double BDRYyHigh; |
||||
|
double BDRYqf; |
||||
|
double BDRYsn; |
||||
|
double BDRYsp; |
||||
|
double BDRYlayer; |
||||
|
int BDRYixLow; |
||||
|
int BDRYixHigh; |
||||
|
int BDRYiyLow; |
||||
|
int BDRYiyHigh; |
||||
|
int BDRYdomain; |
||||
|
int BDRYneighbor; |
||||
|
unsigned int BDRYxLowGiven : 1; |
||||
|
unsigned int BDRYxHighGiven : 1; |
||||
|
unsigned int BDRYyLowGiven : 1; |
||||
|
unsigned int BDRYyHighGiven : 1; |
||||
|
unsigned int BDRYqfGiven : 1; |
||||
|
unsigned int BDRYsnGiven : 1; |
||||
|
unsigned int BDRYspGiven : 1; |
||||
|
unsigned int BDRYlayerGiven : 1; |
||||
|
unsigned int BDRYixLowGiven : 1; |
||||
|
unsigned int BDRYixHighGiven : 1; |
||||
|
unsigned int BDRYiyLowGiven : 1; |
||||
|
unsigned int BDRYiyHighGiven : 1; |
||||
|
unsigned int BDRYdomainGiven : 1; |
||||
|
unsigned int BDRYneighborGiven : 1; |
||||
|
} BDRYcard; |
||||
|
|
||||
|
/* BDRY parameters */ |
||||
|
#define BDRY_X_LOW 1 |
||||
|
#define BDRY_X_HIGH 2 |
||||
|
#define BDRY_Y_LOW 3 |
||||
|
#define BDRY_Y_HIGH 4 |
||||
|
#define BDRY_IX_LOW 5 |
||||
|
#define BDRY_IX_HIGH 6 |
||||
|
#define BDRY_IY_LOW 7 |
||||
|
#define BDRY_IY_HIGH 8 |
||||
|
#define BDRY_DOMAIN 9 |
||||
|
#define BDRY_NEIGHBOR 10 |
||||
|
#define BDRY_QF 11 |
||||
|
#define BDRY_SN 12 |
||||
|
#define BDRY_SP 13 |
||||
|
#define BDRY_LAYER 14 |
||||
|
|
||||
|
#endif /* BDRY_H */ |
||||
@ -0,0 +1,27 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef CARDDEFS_H |
||||
|
#define CARDDEFS_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
#include "bdrydefs.h" |
||||
|
#include "contdefs.h" |
||||
|
#include "domndefs.h" |
||||
|
#include "dopdefs.h" |
||||
|
#include "elctdefs.h" |
||||
|
#include "meshdefs.h" |
||||
|
#include "methdefs.h" |
||||
|
#include "matldefs.h" |
||||
|
#include "mobdefs.h" |
||||
|
#include "modldefs.h" |
||||
|
#include "optndefs.h" |
||||
|
#include "outpdefs.h" |
||||
|
|
||||
|
#endif /* CARDDEFS_H */ |
||||
@ -0,0 +1,60 @@ |
|||||
|
/* |
||||
|
* ciderinp.h |
||||
|
* |
||||
|
* CIDER input library header |
||||
|
*/ |
||||
|
|
||||
|
#ifndef _CIDERINP_H |
||||
|
#define _CIDERINP_H |
||||
|
|
||||
|
|
||||
|
/* externals for bdryset.c */ |
||||
|
extern int BDRYcheck(BDRYcard *, DOMNdomain *); |
||||
|
extern int BDRYsetup(BDRYcard *, MESHcoord *, MESHcoord *, DOMNdomain *); |
||||
|
|
||||
|
/* externals for contset.c */ |
||||
|
extern int CONTcheck(CONTcard *); |
||||
|
extern int CONTsetup(CONTcard *, ELCTelectrode *); |
||||
|
|
||||
|
/* externals for domnset.c */ |
||||
|
extern int DOMNcheck(DOMNcard *, MaterialInfo *); |
||||
|
extern int DOMNsetup(DOMNcard *,DOMNdomain **, MESHcoord *, MESHcoord *, |
||||
|
MaterialInfo *); |
||||
|
|
||||
|
/* externals for dopset.c */ |
||||
|
extern int DOPcheck(DOPcard *, MESHcoord *, MESHcoord *); |
||||
|
extern int DOPsetup(DOPcard *, DOPprofile **, DOPtable **, |
||||
|
MESHcoord *, MESHcoord *); |
||||
|
|
||||
|
/* externals for elctset.c */ |
||||
|
extern int ELCTcheck(ELCTcard *); |
||||
|
extern int ELCTsetup(ELCTcard *, ELCTelectrode **, MESHcoord *, |
||||
|
MESHcoord *); |
||||
|
|
||||
|
/* externals for matlset.c */ |
||||
|
extern int MATLcheck(MATLcard *); |
||||
|
extern int MATLsetup(MATLcard *, MaterialInfo **); |
||||
|
|
||||
|
/* externals for meshset.c */ |
||||
|
extern double *MESHmkArray(MESHcoord *, int); |
||||
|
extern void MESHiBounds(MESHcoord *, int *, int *); |
||||
|
extern void MESHlBounds(MESHcoord *, double *, double *); |
||||
|
extern int MESHlocate(MESHcoord *, double); |
||||
|
extern int MESHcheck(char, MESHcard *); |
||||
|
extern int MESHsetup(char, MESHcard *, MESHcoord **, int *); |
||||
|
|
||||
|
/* externals for mobset.c */ |
||||
|
extern int MOBcheck(MOBcard *, MaterialInfo *); |
||||
|
extern int MOBsetup(MOBcard *, MaterialInfo *); |
||||
|
|
||||
|
/* externals for modlset.c */ |
||||
|
extern int MODLcheck(MODLcard *); |
||||
|
extern int MODLsetup(MODLcard *); |
||||
|
|
||||
|
/* externals for outpset.c */ |
||||
|
extern int OUTPcheck(OUTPcard *); |
||||
|
extern int OUTPsetup(OUTPcard *); |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,86 @@ |
|||||
|
/* |
||||
|
* cidersupt.h |
||||
|
* |
||||
|
* CIDER support library header |
||||
|
*/ |
||||
|
|
||||
|
#ifndef _CIDERSUPT_H |
||||
|
#define _CIDERSUPT_H |
||||
|
|
||||
|
|
||||
|
/* externals for database.c */ |
||||
|
extern struct plot* DBread( char *); |
||||
|
extern double *DBgetData( struct plot *, char *, int ); |
||||
|
extern void DBfree( struct plot *); |
||||
|
|
||||
|
/* externals for devprint.c */ |
||||
|
extern void printVoltages(FILE *, char *, char *, int, |
||||
|
int, double, double, double, |
||||
|
double, double, double ); |
||||
|
|
||||
|
/* externals for geominfo.c */ |
||||
|
extern void printCoordInfo(CoordInfo *); |
||||
|
extern void killCoordInfo(CoordInfo *); |
||||
|
extern void ONEprintDomainInfo(DomainInfo *); |
||||
|
extern void TWOprintDomainInfo(DomainInfo *); |
||||
|
extern void killDomainInfo(DomainInfo *); |
||||
|
extern void ONEprintBoundaryInfo(BoundaryInfo *); |
||||
|
extern void TWOprintBoundaryInfo(BoundaryInfo *); |
||||
|
extern void killBoundaryInfo(BoundaryInfo *); |
||||
|
extern void TWOprintElectrodeInfo(ElectrodeInfo *); |
||||
|
extern void killElectrodeInfo(ElectrodeInfo *); |
||||
|
|
||||
|
/* externals for globals.c */ |
||||
|
extern void GLOBcomputeGlobals(GLOBvalues *, double); |
||||
|
extern void GLOBputGlobals(GLOBvalues *); |
||||
|
extern void GLOBgetGlobals(GLOBvalues *); |
||||
|
extern void GLOBprnGlobals(FILE *, GLOBvalues *); |
||||
|
|
||||
|
/* externals for integset.c */ |
||||
|
extern void computeIntegCoeff(int, int, double *, double *); |
||||
|
extern void computePredCoeff(int, int, double *, double *); |
||||
|
|
||||
|
/* externals for integuse.c */ |
||||
|
extern double integrate(double **, TranInfo *, int ); |
||||
|
extern double predict(double **, TranInfo *, int ); |
||||
|
extern double computeLTECoeff( TranInfo * ); |
||||
|
extern double integrateLin(double **, TranInfo *, int ); |
||||
|
|
||||
|
/* externals for logfile.c */ |
||||
|
extern void LOGmakeEntry(char *, char * ); |
||||
|
|
||||
|
/* externals for mater.c */ |
||||
|
extern void MATLdefaults(MaterialInfo * ); |
||||
|
extern void MATLtempDep(MaterialInfo *, double ); |
||||
|
extern void printMaterialInfo(MaterialInfo * ); |
||||
|
|
||||
|
/* externals for mobil.c */ |
||||
|
extern void MOBdefaults(MaterialInfo *, int, int, int, int ); |
||||
|
extern void MOBtempDep (MaterialInfo *, double ); |
||||
|
extern void MOBconcDep (MaterialInfo *, double, double *, double *); |
||||
|
extern void MOBfieldDep (MaterialInfo *, int, double, double *, double * ); |
||||
|
|
||||
|
/* externals for recomb.c */ |
||||
|
extern void recomb (double, double, double, double, double, double, |
||||
|
double, double *, double *, double * ); |
||||
|
|
||||
|
/* externals for suprem.c */ |
||||
|
extern void readAsciiData( char *, int, DOPtable ** ); |
||||
|
extern void readSupremData( char *, int, int, DOPtable ** ); |
||||
|
|
||||
|
/* externals for suprmitf.c */ |
||||
|
extern void SUPbinRead( char *, float *, float *, int *, int * ); |
||||
|
extern void SUPascRead( char *, float *, float *, int *, int * ); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/* externals for misc.c */ |
||||
|
extern double guessNewConc(double , double ); |
||||
|
extern double lookup(double **, double ); |
||||
|
extern BOOLEAN hasSORConverged(double *, double *, int); |
||||
|
extern BOOLEAN foundError(int ); |
||||
|
|
||||
|
|
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,33 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef CONT_H |
||||
|
#define CONT_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sCONTcard { |
||||
|
struct sCONTcard *CONTnextCard; |
||||
|
double CONTworkfun; |
||||
|
int CONTtype; |
||||
|
int CONTnumber; |
||||
|
unsigned int CONTworkfunGiven : 1; |
||||
|
unsigned int CONTtypeGiven : 1; |
||||
|
unsigned int CONTnumberGiven : 1; |
||||
|
} CONTcard; |
||||
|
|
||||
|
/* CONT parameters */ |
||||
|
#define CONT_NEUTRAL 1 |
||||
|
#define CONT_ALUMINUM 2 |
||||
|
#define CONT_P_POLY 3 |
||||
|
#define CONT_N_POLY 4 |
||||
|
#define CONT_WORKFUN 5 |
||||
|
#define CONT_NUMBER 6 |
||||
|
|
||||
|
#endif /* CONT_H */ |
||||
@ -0,0 +1,52 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef DOMN_H |
||||
|
#define DOMN_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sDOMNcard { |
||||
|
struct sDOMNcard *DOMNnextCard; /* pointer to next domain */ |
||||
|
double DOMNxLow; |
||||
|
double DOMNxHigh; |
||||
|
double DOMNyLow; |
||||
|
double DOMNyHigh; |
||||
|
int DOMNixLow; |
||||
|
int DOMNixHigh; |
||||
|
int DOMNiyLow; |
||||
|
int DOMNiyHigh; |
||||
|
int DOMNmaterial; |
||||
|
int DOMNnumber; |
||||
|
unsigned int DOMNxLowGiven : 1; |
||||
|
unsigned int DOMNxHighGiven : 1; |
||||
|
unsigned int DOMNyLowGiven : 1; |
||||
|
unsigned int DOMNyHighGiven : 1; |
||||
|
unsigned int DOMNixLowGiven : 1; |
||||
|
unsigned int DOMNixHighGiven : 1; |
||||
|
unsigned int DOMNiyLowGiven : 1; |
||||
|
unsigned int DOMNiyHighGiven : 1; |
||||
|
unsigned int DOMNmaterialGiven : 1; |
||||
|
unsigned int DOMNnumberGiven : 1; |
||||
|
} DOMNcard; |
||||
|
|
||||
|
/* DOMN parameters */ |
||||
|
#define DOMN_X_LOW 1 |
||||
|
#define DOMN_X_HIGH 2 |
||||
|
#define DOMN_Y_LOW 3 |
||||
|
#define DOMN_Y_HIGH 4 |
||||
|
#define DOMN_IX_LOW 5 |
||||
|
#define DOMN_IX_HIGH 6 |
||||
|
#define DOMN_IY_LOW 7 |
||||
|
#define DOMN_IY_HIGH 8 |
||||
|
#define DOMN_NUMBER 9 |
||||
|
#define DOMN_MATERIAL 10 |
||||
|
|
||||
|
|
||||
|
#endif /* DOMN_H */ |
||||
@ -0,0 +1,84 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef DOP_H |
||||
|
#define DOP_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sDOPcard { |
||||
|
struct sDOPcard *DOPnextCard; |
||||
|
double DOPxLow; |
||||
|
double DOPxHigh; |
||||
|
double DOPyLow; |
||||
|
double DOPyHigh; |
||||
|
double DOPconc; |
||||
|
double DOPlocation; |
||||
|
double DOPcharLen; |
||||
|
double DOPratioLat; |
||||
|
int DOPprofileType; |
||||
|
int DOPlatProfileType; |
||||
|
int DOProtateLat; |
||||
|
int DOPimpurityType; |
||||
|
int DOPaxisType; |
||||
|
int DOPnumDomains; |
||||
|
int *DOPdomains; |
||||
|
char *DOPinFile; |
||||
|
unsigned int DOPxLowGiven : 1; |
||||
|
unsigned int DOPxHighGiven : 1; |
||||
|
unsigned int DOPyLowGiven : 1; |
||||
|
unsigned int DOPyHighGiven : 1; |
||||
|
unsigned int DOPconcGiven : 1; |
||||
|
unsigned int DOPlocationGiven : 1; |
||||
|
unsigned int DOPcharLenGiven : 1; |
||||
|
unsigned int DOPratioLatGiven : 1; |
||||
|
unsigned int DOPprofileTypeGiven : 1; |
||||
|
unsigned int DOPlatProfileTypeGiven : 1; |
||||
|
unsigned int DOProtateLatGiven : 1; |
||||
|
unsigned int DOPimpurityTypeGiven : 1; |
||||
|
unsigned int DOPaxisTypeGiven : 1; |
||||
|
unsigned int DOPdomainsGiven : 1; |
||||
|
unsigned int DOPinFileGiven : 1; |
||||
|
} DOPcard; |
||||
|
|
||||
|
/* DOP parameters */ |
||||
|
#define DOP_UNIF 1 |
||||
|
#define DOP_LINEAR 2 |
||||
|
#define DOP_GAUSS 3 |
||||
|
#define DOP_ERFC 4 |
||||
|
#define DOP_EXP 5 |
||||
|
#define DOP_SUPREM3 6 |
||||
|
#define DOP_ASCII 7 |
||||
|
#define DOP_SUPASCII 8 |
||||
|
#define DOP_INFILE 9 |
||||
|
#define DOP_BORON 10 |
||||
|
#define DOP_PHOSP 11 |
||||
|
#define DOP_ARSEN 12 |
||||
|
#define DOP_ANTIM 13 |
||||
|
#define DOP_P_TYPE 14 |
||||
|
#define DOP_N_TYPE 15 |
||||
|
#define DOP_X_AXIS 16 |
||||
|
#define DOP_Y_AXIS 17 |
||||
|
#define DOP_X_LOW 18 |
||||
|
#define DOP_X_HIGH 19 |
||||
|
#define DOP_Y_LOW 20 |
||||
|
#define DOP_Y_HIGH 21 |
||||
|
#define DOP_CONC 22 |
||||
|
#define DOP_LOCATION 23 |
||||
|
#define DOP_CHAR_LEN 24 |
||||
|
#define DOP_RATIO_LAT 25 |
||||
|
#define DOP_ROTATE_LAT 26 |
||||
|
#define DOP_UNIF_LAT 27 |
||||
|
#define DOP_LINEAR_LAT 28 |
||||
|
#define DOP_GAUSS_LAT 29 |
||||
|
#define DOP_ERFC_LAT 30 |
||||
|
#define DOP_EXP_LAT 31 |
||||
|
#define DOP_DOMAIN 32 |
||||
|
|
||||
|
#endif /* DOP_H */ |
||||
@ -0,0 +1,48 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef ELCT_H |
||||
|
#define ELCT_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sELCTcard { |
||||
|
struct sELCTcard *ELCTnextCard; |
||||
|
double ELCTxLow; |
||||
|
double ELCTxHigh; |
||||
|
double ELCTyLow; |
||||
|
double ELCTyHigh; |
||||
|
int ELCTixLow; |
||||
|
int ELCTixHigh; |
||||
|
int ELCTiyLow; |
||||
|
int ELCTiyHigh; |
||||
|
int ELCTnumber; |
||||
|
unsigned int ELCTxLowGiven : 1; |
||||
|
unsigned int ELCTxHighGiven : 1; |
||||
|
unsigned int ELCTyLowGiven : 1; |
||||
|
unsigned int ELCTyHighGiven : 1; |
||||
|
unsigned int ELCTixLowGiven : 1; |
||||
|
unsigned int ELCTixHighGiven : 1; |
||||
|
unsigned int ELCTiyLowGiven : 1; |
||||
|
unsigned int ELCTiyHighGiven : 1; |
||||
|
unsigned int ELCTnumberGiven : 1; |
||||
|
} ELCTcard; |
||||
|
|
||||
|
/* ELCT parameters */ |
||||
|
#define ELCT_X_LOW 1 |
||||
|
#define ELCT_X_HIGH 2 |
||||
|
#define ELCT_Y_LOW 3 |
||||
|
#define ELCT_Y_HIGH 4 |
||||
|
#define ELCT_IX_LOW 5 |
||||
|
#define ELCT_IX_HIGH 6 |
||||
|
#define ELCT_IY_LOW 7 |
||||
|
#define ELCT_IY_HIGH 8 |
||||
|
#define ELCT_NUMBER 9 |
||||
|
|
||||
|
#endif /* ELCT_H */ |
||||
@ -0,0 +1,122 @@ |
|||||
|
/********** |
||||
|
Copyright 1992 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1992 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef GENDEV_H |
||||
|
#define GENDEV_H |
||||
|
|
||||
|
#include "numenum.h" |
||||
|
|
||||
|
typedef struct sStatInfo |
||||
|
{ |
||||
|
double setupTime[NUM_STATTYPES]; |
||||
|
double loadTime[NUM_STATTYPES]; |
||||
|
double orderTime[NUM_STATTYPES]; |
||||
|
double factorTime[NUM_STATTYPES]; |
||||
|
double solveTime[NUM_STATTYPES]; |
||||
|
double updateTime[NUM_STATTYPES]; |
||||
|
double checkTime[NUM_STATTYPES]; |
||||
|
double miscTime[NUM_STATTYPES]; |
||||
|
double totalTime[NUM_STATTYPES]; |
||||
|
double lteTime; |
||||
|
int numIters[NUM_STATTYPES]; |
||||
|
} StatInfo; |
||||
|
typedef struct sStatInfo ONEstats; |
||||
|
typedef struct sStatInfo TWOstats; |
||||
|
typedef struct sStatInfo STATstats; |
||||
|
|
||||
|
/* Transient analysis information transferred via this structure. */ |
||||
|
typedef struct sTranInfo { |
||||
|
int method; /* integration method */ |
||||
|
int order; /* integration order */ |
||||
|
int maxOrder; /* maximum order to be used */ |
||||
|
double lteCoeff; /* coefficient for calculating LTE */ |
||||
|
double intCoeff[7]; /* array of integration coefficients */ |
||||
|
double predCoeff[7]; /* array of predicted coefficients */ |
||||
|
double *delta; /* array of the time deltas */ |
||||
|
} TranInfo; |
||||
|
typedef struct sTranInfo ONEtranInfo; |
||||
|
typedef struct sTranInfo TWOtranInfo; |
||||
|
|
||||
|
/* Mesh coordinates transferred via this structure */ |
||||
|
typedef struct sCoordInfo { |
||||
|
struct sCoordInfo *next; /* pointer to next mesh info */ |
||||
|
int number; /* number/position in list of coordinates */ |
||||
|
double location; /* location of node */ |
||||
|
} CoordInfo; |
||||
|
typedef struct sCoordInfo ONEcoord; |
||||
|
typedef struct sCoordInfo TWOcoord; |
||||
|
typedef struct sCoordInfo MESHcoord; |
||||
|
|
||||
|
/* Generic vertex structure */ |
||||
|
typedef struct sVertexInfo { |
||||
|
struct sVertexInfo *next; /* pointer to next vertex */ |
||||
|
int ix; /* the x coordinate */ |
||||
|
int iy; /* the y coordinate */ |
||||
|
} VertexInfo; |
||||
|
typedef struct sVertexInfo ONEvertex; |
||||
|
typedef struct sVertexInfo TWOvertex; |
||||
|
|
||||
|
/* Generic box structure that other box-shaped things are derived from */ |
||||
|
typedef struct sBoxInfo { |
||||
|
struct sBoxInfo *next; /* pointer to next box */ |
||||
|
int ixLo; /* the low x coordinate */ |
||||
|
int iyLo; /* the low y coordinate */ |
||||
|
int ixHi; /* the high x coordinate */ |
||||
|
int iyHi; /* the high y coordinate */ |
||||
|
} BoxInfo; |
||||
|
typedef struct sBoxInfo ONEbox; |
||||
|
typedef struct sBoxInfo TWObox; |
||||
|
|
||||
|
/* Structure for domains */ |
||||
|
typedef struct sDomainInfo { |
||||
|
struct sDomainInfo *next; /* pointer to next domain */ |
||||
|
int ixLo; /* the low x coordinate */ |
||||
|
int iyLo; /* the low y coordinate */ |
||||
|
int ixHi; /* the high x coordinate */ |
||||
|
int iyHi; /* the high y coordinate */ |
||||
|
int id; /* ID number of domain */ |
||||
|
int material; /* ID of material used by domain */ |
||||
|
} DomainInfo; |
||||
|
typedef struct sDomainInfo ONEdomain; |
||||
|
typedef struct sDomainInfo TWOdomain; |
||||
|
typedef struct sDomainInfo DOMNdomain; |
||||
|
|
||||
|
/* Structure used for electrodes */ |
||||
|
typedef struct sElectrodeInfo { |
||||
|
struct sElectrodeInfo *next; /* pointer to next electrode */ |
||||
|
int ixLo; /* the low x coordinate */ |
||||
|
int iyLo; /* the low y coordinate */ |
||||
|
int ixHi; /* the high x coordinate */ |
||||
|
int iyHi; /* the high y coordinate */ |
||||
|
int id; /* ID number */ |
||||
|
double workf; /* electrode work function */ |
||||
|
} ElectrodeInfo; |
||||
|
typedef struct sElectrodeInfo ONEelectrode; |
||||
|
typedef struct sElectrodeInfo TWOelectrode; |
||||
|
typedef struct sElectrodeInfo ELCTelectrode; |
||||
|
|
||||
|
/* Structure used for boundaries and interfaces */ |
||||
|
typedef struct sBoundaryInfo { |
||||
|
struct sBoundaryInfo *next; /* pointer to next boundary */ |
||||
|
int ixLo; /* the low x coordinate */ |
||||
|
int iyLo; /* the low y coordinate */ |
||||
|
int ixHi; /* the high x coordinate */ |
||||
|
int iyHi; /* the high y coordinate */ |
||||
|
int domain; /* ID of primary domain */ |
||||
|
int neighbor; /* ID of neighbor domain */ |
||||
|
double qf; /* fixed charge density */ |
||||
|
double sn; /* elec surface recomb velocity */ |
||||
|
double sp; /* hole surface recomb velocity */ |
||||
|
double layer; /* surface layer width */ |
||||
|
} BoundaryInfo; |
||||
|
typedef struct sBoundaryInfo ONEboundary; |
||||
|
typedef struct sBoundaryInfo TWOboundary; |
||||
|
typedef struct sBoundaryInfo BDRYboundary; |
||||
|
|
||||
|
#endif /* GENDEV_H */ |
||||
@ -0,0 +1,124 @@ |
|||||
|
/* |
||||
|
* 'Generic' linked-list sorting 'package' |
||||
|
* |
||||
|
* Use: |
||||
|
* #define TYPE the linked-list type (usually a struct) |
||||
|
* #define NEXT 'next' field name in the linked-list structure |
||||
|
* #define SORT sorting routine (see below) |
||||
|
* |
||||
|
* Optional: |
||||
|
* #define DECL_SORT 'static' or undefined |
||||
|
* #define DECL_SORT1 'static' or undefined |
||||
|
* #define SORT1 sorting routine (see below) |
||||
|
* #define FIELD select a subfield of the structure for the |
||||
|
* compare function (default is to pass |
||||
|
* a pointer to the structure) |
||||
|
* #include "lsort.h" |
||||
|
* |
||||
|
* This defines up to two routines: |
||||
|
* SORT1(TYPE *list, int (*compare)(TYPE *x, TYPE *y)) |
||||
|
* sort the linked list 'list' according to the compare function |
||||
|
* 'compare' |
||||
|
* |
||||
|
* SORT(TYPE *list, int (*compare)(TYPE *x, TYPE *y), int length) |
||||
|
* sort the linked list 'list' according to the compare function |
||||
|
* 'compare'. length is the length of the linked list. |
||||
|
* |
||||
|
* Both routines gracefully handle length == 0 (in which case, list == 0 |
||||
|
* is also allowed). |
||||
|
* |
||||
|
* By default, both routines are declared 'static'. This can be changed |
||||
|
* using '#define DECL_SORT' or '#define DECL_SORT1'. |
||||
|
* |
||||
|
* If field is used, then a pointer to the particular field is passed |
||||
|
* to the comparison function (rather than a TYPE *). |
||||
|
*/ |
||||
|
|
||||
|
/* This file was originally part of Cider 1b1 and has been moved to |
||||
|
* the ngspice misc directory since macros will probably be converted |
||||
|
* into real functions. |
||||
|
* (Paolo Nenzi 2001) |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
|
||||
|
#ifndef DECL_SORT1 |
||||
|
#define DECL_SORT1 static |
||||
|
#endif |
||||
|
|
||||
|
#ifndef DECL_SORT |
||||
|
#define DECL_SORT static |
||||
|
#endif |
||||
|
|
||||
|
DECL_SORT TYPE *SORT(); |
||||
|
|
||||
|
|
||||
|
#ifdef SORT1 |
||||
|
|
||||
|
DECL_SORT1 TYPE *SORT1(list_in, compare) |
||||
|
TYPE *list_in; |
||||
|
int (*compare)(); |
||||
|
{ |
||||
|
register long cnt; |
||||
|
register TYPE *p; |
||||
|
|
||||
|
/* Find the length of the list */ |
||||
|
for(p = list_in, cnt = 0; p != 0; p = p->NEXT, cnt++) |
||||
|
; |
||||
|
return SORT(list_in, compare, cnt); |
||||
|
} |
||||
|
|
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
DECL_SORT TYPE *SORT(list_in, compare, cnt) |
||||
|
TYPE *list_in; |
||||
|
int (*compare)(); |
||||
|
long cnt; |
||||
|
{ |
||||
|
register TYPE *p, **plast, *list1, *list2; |
||||
|
register long i; |
||||
|
|
||||
|
if (cnt > 1) { |
||||
|
/* break the list in half */ |
||||
|
for(p = list_in, i = cnt/2-1; i > 0; p = p->NEXT, i--) |
||||
|
; |
||||
|
list1 = list_in; |
||||
|
list2 = p->NEXT; |
||||
|
p->NEXT = 0; |
||||
|
|
||||
|
/* Recursively sort the sub-lists (unless only 1 element) */ |
||||
|
if ((i = cnt/2) > 1) { |
||||
|
list1 = SORT(list1, compare, i); |
||||
|
} |
||||
|
if ((i = cnt - i) > 1) { |
||||
|
list2 = SORT(list2, compare, i); |
||||
|
} |
||||
|
|
||||
|
/* Merge the two sorted sub-lists */ |
||||
|
plast = &list_in; |
||||
|
for(;;) { |
||||
|
#ifdef FIELD |
||||
|
if ((*compare)(&list1->FIELD, &list2->FIELD) <= 0) { |
||||
|
#else |
||||
|
if ((*compare)(list1, list2) <= 0) { |
||||
|
#endif |
||||
|
*plast = list1; |
||||
|
plast = &(list1->NEXT); |
||||
|
if ((list1 = list1->NEXT) == 0) { |
||||
|
*plast = list2; |
||||
|
break; |
||||
|
} |
||||
|
} else { |
||||
|
*plast = list2; |
||||
|
plast = &(list2->NEXT); |
||||
|
if ((list2 = list2->NEXT) == 0) { |
||||
|
*plast = list1; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return list_in; |
||||
|
} |
||||
@ -0,0 +1,82 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef MATERIAL_H |
||||
|
#define MATERIAL_H |
||||
|
|
||||
|
#ifndef NUM_CARRIERS |
||||
|
#include "numenum.h" |
||||
|
#endif |
||||
|
|
||||
|
/* Information needed by the various physical models */ |
||||
|
|
||||
|
typedef struct sMaterialInfo |
||||
|
{ |
||||
|
int id; /* Unique identification number */ |
||||
|
int material; /* Oxide, Nitride, Silicon, Aluminum */ |
||||
|
int type; /* Insulator, Semiconductor, Metal */ |
||||
|
double tnom; /* Parameter Measurement Temp. */ |
||||
|
|
||||
|
/* Intrinsic-Concentration-Related Parameters */ |
||||
|
double eps; /* Dielectric Permittivity */ |
||||
|
double affin; /* Electron Affinity */ |
||||
|
double refPsi; /* Reference Potential of Intrinsic */ |
||||
|
double ni0; /* Reference Intrinsic Concentration */ |
||||
|
double nc0; /* Conduction Band Num States */ |
||||
|
double nv0; /* Valence Band Num States */ |
||||
|
double mass[NUM_CARRIERS]; /* Conduction Masses */ |
||||
|
double eg0; /* Band Gap */ |
||||
|
double dEgDt; /* Temp-Dep Band Gap Narrowing */ |
||||
|
double trefBGN; /* Ref. Temp for BGN */ |
||||
|
double dEgDn[NUM_CARRIERS]; /* Conc-Dep BGN Constants */ |
||||
|
double nrefBGN[NUM_CARRIERS]; /* Ref. Conc's for BGN */ |
||||
|
|
||||
|
/* Generation-Recombination Parameters */ |
||||
|
double tau0[NUM_CARRIERS]; /* Low-Conc. SRH Lifetimes */ |
||||
|
double nrefSRH[NUM_CARRIERS]; /* Ref. Conc.'s for Lifetime */ |
||||
|
double cAug[NUM_CARRIERS]; /* Auger Constants */ |
||||
|
double aii[NUM_CARRIERS]; /* Avalanche Factors */ |
||||
|
double bii[NUM_CARRIERS]; /* Aval. Critical Fields */ |
||||
|
|
||||
|
/* Incomplete Ionization Parameters */ |
||||
|
double eDon; /* Donor Energy Level */ |
||||
|
double eAcc; /* Acceptor Energy Level */ |
||||
|
double gDon; /* Donor Degeneracy Factor */ |
||||
|
double gAcc; /* Acceptor Degeneracy Factor */ |
||||
|
|
||||
|
/* Carrier-Velocity Related Parameters */ |
||||
|
double aRich[NUM_CARRIERS]; /* Effective Richardson Constants */ |
||||
|
double vRich[NUM_CARRIERS]; /* Effective Recombination Velocities */ |
||||
|
|
||||
|
/* Mobility Concentration and Temperature Dependence */ |
||||
|
int concModel; |
||||
|
int tempModel; |
||||
|
double muMax[NUM_CARRIERS][NUM_CARRTYPES]; |
||||
|
double muMin[NUM_CARRIERS][NUM_CARRTYPES]; |
||||
|
double ntRef[NUM_CARRIERS][NUM_CARRTYPES]; |
||||
|
double ntExp[NUM_CARRIERS][NUM_CARRTYPES]; |
||||
|
|
||||
|
/* Mobility Hot Carrier Dependence */ |
||||
|
int fieldModel; |
||||
|
double vSat[NUM_CARRIERS]; |
||||
|
double vWarm[NUM_CARRIERS]; |
||||
|
|
||||
|
/* Inversion-Layer Mobility */ |
||||
|
int surfModel; |
||||
|
double mus[NUM_CARRIERS]; |
||||
|
double thetaA[NUM_CARRIERS]; |
||||
|
double thetaB[NUM_CARRIERS]; |
||||
|
|
||||
|
struct sMaterialInfo *next; |
||||
|
} MaterialInfo; |
||||
|
typedef struct sMaterialInfo ONEmaterial; |
||||
|
typedef struct sMaterialInfo TWOmaterial; |
||||
|
typedef struct sMaterialInfo MATLmaterial; |
||||
|
|
||||
|
#endif /* MATERIAL_H */ |
||||
@ -0,0 +1,93 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef MATL_H |
||||
|
#define MATL_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sMATLcard { |
||||
|
struct sMATLcard *MATLnextCard; |
||||
|
int MATLnumber; |
||||
|
int MATLmaterial; |
||||
|
double MATLpermittivity; |
||||
|
double MATLaffinity; |
||||
|
double MATLnc0; |
||||
|
double MATLnv0; |
||||
|
double MATLeg0; |
||||
|
double MATLdEgdT; |
||||
|
double MATLtrefEg; |
||||
|
double MATLdEgdN; |
||||
|
double MATLnrefEg; |
||||
|
double MATLdEgdP; |
||||
|
double MATLprefEg; |
||||
|
double MATLtaun0; |
||||
|
double MATLtaup0; |
||||
|
double MATLnrefSRHn; |
||||
|
double MATLnrefSRHp; |
||||
|
double MATLcnAug; |
||||
|
double MATLcpAug; |
||||
|
double MATLaRichN; |
||||
|
double MATLaRichP; |
||||
|
unsigned int MATLnumberGiven : 1; |
||||
|
unsigned int MATLmaterialGiven : 1; |
||||
|
unsigned int MATLpermittivityGiven : 1; |
||||
|
unsigned int MATLaffinityGiven : 1; |
||||
|
unsigned int MATLnc0Given : 1; |
||||
|
unsigned int MATLnv0Given : 1; |
||||
|
unsigned int MATLeg0Given : 1; |
||||
|
unsigned int MATLdEgdTGiven : 1; |
||||
|
unsigned int MATLtrefEgGiven : 1; |
||||
|
unsigned int MATLdEgdNGiven : 1; |
||||
|
unsigned int MATLnrefEgGiven : 1; |
||||
|
unsigned int MATLdEgdPGiven : 1; |
||||
|
unsigned int MATLprefEgGiven : 1; |
||||
|
unsigned int MATLtaun0Given : 1; |
||||
|
unsigned int MATLtaup0Given : 1; |
||||
|
unsigned int MATLnrefSRHnGiven : 1; |
||||
|
unsigned int MATLnrefSRHpGiven : 1; |
||||
|
unsigned int MATLcnAugGiven : 1; |
||||
|
unsigned int MATLcpAugGiven : 1; |
||||
|
unsigned int MATLaRichNGiven : 1; |
||||
|
unsigned int MATLaRichPGiven : 1; |
||||
|
unsigned int MATLtnomGiven : 1; |
||||
|
} MATLcard; |
||||
|
|
||||
|
/* MATL parameters */ |
||||
|
#define MATL_NC0 1 |
||||
|
#define MATL_NV0 2 |
||||
|
#define MATL_EG0 3 |
||||
|
#define MATL_DEGDT 4 |
||||
|
#define MATL_TREF_EG 5 |
||||
|
#define MATL_DEGDN 6 |
||||
|
#define MATL_NREF_EG 7 |
||||
|
#define MATL_DEGDP 8 |
||||
|
#define MATL_PREF_EG 9 |
||||
|
#define MATL_AFFIN 10 |
||||
|
#define MATL_PERMIT 11 |
||||
|
#define MATL_TAUN0 12 |
||||
|
#define MATL_TAUP0 13 |
||||
|
#define MATL_NSRHN 14 |
||||
|
#define MATL_NSRHP 15 |
||||
|
#define MATL_CNAUG 16 |
||||
|
#define MATL_CPAUG 17 |
||||
|
#define MATL_ARICHN 18 |
||||
|
#define MATL_ARICHP 19 |
||||
|
#define MATL_INSULATOR 20 |
||||
|
#define MATL_OXIDE 21 |
||||
|
#define MATL_NITRIDE 22 |
||||
|
#define MATL_SEMICON 23 |
||||
|
#define MATL_SILICON 24 |
||||
|
#define MATL_POLYSIL 25 |
||||
|
#define MATL_GAAS 26 |
||||
|
#define MATL_NUMBER 27 |
||||
|
#define MATL_DEGDC 28 |
||||
|
#define MATL_CREF_EG 29 |
||||
|
|
||||
|
#endif /* MATL_H */ |
||||
@ -0,0 +1,44 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Author: 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef MESH_H |
||||
|
#define MESH_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sMESHcard { |
||||
|
struct sMESHcard *MESHnextCard; |
||||
|
double MESHlocation; |
||||
|
double MESHwidth; |
||||
|
double MESHlocStart; |
||||
|
double MESHlocEnd; |
||||
|
double MESHhStart; |
||||
|
double MESHhEnd; |
||||
|
double MESHhMax; |
||||
|
double MESHratio; |
||||
|
int MESHnumber; |
||||
|
unsigned int MESHlocationGiven : 1; |
||||
|
unsigned int MESHwidthGiven : 1; |
||||
|
unsigned int MESHhStartGiven : 1; |
||||
|
unsigned int MESHhEndGiven : 1; |
||||
|
unsigned int MESHhMaxGiven : 1; |
||||
|
unsigned int MESHratioGiven : 1; |
||||
|
unsigned int MESHnumberGiven : 1; |
||||
|
} MESHcard; |
||||
|
|
||||
|
/* MESH parameters */ |
||||
|
#define MESH_NUMBER 1 |
||||
|
#define MESH_LOCATION 2 |
||||
|
#define MESH_WIDTH 3 |
||||
|
#define MESH_H_START 4 |
||||
|
#define MESH_H_END 5 |
||||
|
#define MESH_H_MAX 6 |
||||
|
#define MESH_RATIO 7 |
||||
|
|
||||
|
#endif /* MESH_H */ |
||||
@ -0,0 +1,27 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Author: 1991 David A. Gates, U. C. Berkeley CAD Group |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
/********** |
||||
|
Mesh Definitions and Declarations. |
||||
|
**********/ |
||||
|
#ifndef MESHEXT_H |
||||
|
#define MESHEXT_H |
||||
|
|
||||
|
#include "meshdefs.h" |
||||
|
#include "gendev.h" |
||||
|
|
||||
|
|
||||
|
extern double *MESHmkArray( MESHcoord *, int ); |
||||
|
extern void MESHiBounds( MESHcoord *, int *, int * ); |
||||
|
extern void MESHlBounds( MESHcoord *, double *, double * ); |
||||
|
extern int MESHlocate( MESHcoord *, double ); |
||||
|
extern int MESHcheck( char, MESHcard * ); |
||||
|
extern int MESHsetup( char, MESHcard *, MESHcoord **, int * ); |
||||
|
|
||||
|
#endif /* MESHEXT_H */ |
||||
@ -0,0 +1,45 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef METH_H |
||||
|
#define METH_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sMETHcard { |
||||
|
struct sMETHcard *METHnextCard; |
||||
|
double METHdabstol; |
||||
|
double METHdreltol; |
||||
|
double METHomega; |
||||
|
int METHoneCarrier; |
||||
|
int METHacAnalysisMethod; |
||||
|
int METHmobDeriv; |
||||
|
int METHitLim; |
||||
|
int METHvoltPred; |
||||
|
unsigned int METHdabstolGiven : 1; |
||||
|
unsigned int METHdreltolGiven : 1; |
||||
|
unsigned int METHomegaGiven : 1; |
||||
|
unsigned int METHoneCarrierGiven : 1; |
||||
|
unsigned int METHacAnalysisMethodGiven : 1; |
||||
|
unsigned int METHmobDerivGiven : 1; |
||||
|
unsigned int METHitLimGiven : 1; |
||||
|
unsigned int METHvoltPredGiven : 1; |
||||
|
} METHcard; |
||||
|
|
||||
|
/* METH parameters */ |
||||
|
#define METH_DABSTOL 1 |
||||
|
#define METH_DRELTOL 2 |
||||
|
#define METH_OMEGA 3 |
||||
|
#define METH_ONEC 4 |
||||
|
#define METH_ACANAL 5 |
||||
|
#define METH_NOMOBDERIV 6 |
||||
|
#define METH_ITLIM 7 |
||||
|
#define METH_VOLTPRED 8 |
||||
|
|
||||
|
#endif /* METH_H */ |
||||
@ -0,0 +1,68 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef MOB_H |
||||
|
#define MOB_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sMOBcard { |
||||
|
struct sMOBcard *MOBnextCard; |
||||
|
int MOBmaterial; |
||||
|
int MOBcarrier; |
||||
|
int MOBcarrType; |
||||
|
double MOBmuMax; |
||||
|
double MOBmuMin; |
||||
|
double MOBntRef; |
||||
|
double MOBntExp; |
||||
|
double MOBvSat; |
||||
|
double MOBvWarm; |
||||
|
double MOBmus; |
||||
|
double MOBecA; |
||||
|
double MOBecB; |
||||
|
int MOBconcModel; |
||||
|
int MOBfieldModel; |
||||
|
int MOBinit; |
||||
|
unsigned MOBmaterialGiven : 1; |
||||
|
unsigned MOBcarrierGiven : 1; |
||||
|
unsigned MOBcarrTypeGiven : 1; |
||||
|
unsigned MOBmuMaxGiven : 1; |
||||
|
unsigned MOBmuMinGiven : 1; |
||||
|
unsigned MOBntRefGiven : 1; |
||||
|
unsigned MOBntExpGiven : 1; |
||||
|
unsigned MOBvSatGiven : 1; |
||||
|
unsigned MOBvWarmGiven : 1; |
||||
|
unsigned MOBmusGiven : 1; |
||||
|
unsigned MOBecAGiven : 1; |
||||
|
unsigned MOBecBGiven : 1; |
||||
|
unsigned MOBconcModelGiven : 1; |
||||
|
unsigned MOBfieldModelGiven : 1; |
||||
|
unsigned MOBinitGiven : 1; |
||||
|
} MOBcard; |
||||
|
|
||||
|
/* MOB parameters */ |
||||
|
#define MOB_ELEC 1 |
||||
|
#define MOB_HOLE 2 |
||||
|
#define MOB_MAJOR 3 |
||||
|
#define MOB_MINOR 4 |
||||
|
#define MOB_MUMAX 5 |
||||
|
#define MOB_MUMIN 6 |
||||
|
#define MOB_NTREF 7 |
||||
|
#define MOB_NTEXP 8 |
||||
|
#define MOB_VSAT 9 |
||||
|
#define MOB_VWARM 10 |
||||
|
#define MOB_MUS 11 |
||||
|
#define MOB_EC_A 12 |
||||
|
#define MOB_EC_B 13 |
||||
|
#define MOB_CONC_MOD 14 |
||||
|
#define MOB_FIELD_MOD 15 |
||||
|
#define MOB_MATERIAL 16 |
||||
|
#define MOB_INIT 17 |
||||
|
|
||||
|
#endif /* MOB_H */ |
||||
@ -0,0 +1,54 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors : 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef MODL_H |
||||
|
#define MODL_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sMODLcard { |
||||
|
struct sMODLcard *MODLnextCard; |
||||
|
int MODLbandGapNarrowing; |
||||
|
int MODLtempDepMobility; |
||||
|
int MODLconcDepMobility; |
||||
|
int MODLfieldDepMobility; |
||||
|
int MODLtransDepMobility; |
||||
|
int MODLsurfaceMobility; |
||||
|
int MODLmatchingMobility; |
||||
|
int MODLsrh; |
||||
|
int MODLconcDepLifetime; |
||||
|
int MODLauger; |
||||
|
int MODLavalancheGen; |
||||
|
unsigned int MODLbandGapNarrowingGiven : 1; |
||||
|
unsigned int MODLtempDepMobilityGiven : 1; |
||||
|
unsigned int MODLconcDepMobilityGiven : 1; |
||||
|
unsigned int MODLfieldDepMobilityGiven : 1; |
||||
|
unsigned int MODLtransDepMobilityGiven : 1; |
||||
|
unsigned int MODLsurfaceMobilityGiven : 1; |
||||
|
unsigned int MODLmatchingMobilityGiven : 1; |
||||
|
unsigned int MODLsrhGiven : 1; |
||||
|
unsigned int MODLconcDepLifetimeGiven : 1; |
||||
|
unsigned int MODLaugerGiven : 1; |
||||
|
unsigned int MODLavalancheGenGiven : 1; |
||||
|
} MODLcard; |
||||
|
|
||||
|
/* MODL parameters */ |
||||
|
#define MODL_BGNW 1 |
||||
|
#define MODL_TEMPMOB 2 |
||||
|
#define MODL_CONCMOB 3 |
||||
|
#define MODL_FIELDMOB 4 |
||||
|
#define MODL_TRANSMOB 5 |
||||
|
#define MODL_SURFMOB 6 |
||||
|
#define MODL_MATCHMOB 7 |
||||
|
#define MODL_SRH 8 |
||||
|
#define MODL_CONCTAU 9 |
||||
|
#define MODL_AUGER 10 |
||||
|
#define MODL_AVAL 11 |
||||
|
|
||||
|
#endif /* MODL_H */ |
||||
@ -0,0 +1,50 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1991 David Gates |
||||
|
**********/ |
||||
|
/* |
||||
|
* Structures for parsing numerical-device input cards |
||||
|
*/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef NUMCARDS_H |
||||
|
#define NUMCARDS_H |
||||
|
|
||||
|
#include "ifsim.h" |
||||
|
|
||||
|
/* |
||||
|
* Generic header for a linked list of cards |
||||
|
*/ |
||||
|
|
||||
|
typedef struct sGENcard { |
||||
|
struct sGENcard *GENnextCard; /* pointer to next card of this type */ |
||||
|
} GENcard; |
||||
|
|
||||
|
/* |
||||
|
* Structure: IFcardInfo |
||||
|
* |
||||
|
* This structure is a generic description of an input card to |
||||
|
* the program. It can be used in situations where input parameters |
||||
|
* need to be grouped together under a single heading. |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
typedef struct sIFcardInfo { |
||||
|
char *name; /* name of the card */ |
||||
|
char *description; /* description of its purpose */ |
||||
|
|
||||
|
int numParms; /* number of parameter descriptors */ |
||||
|
IFparm *cardParms; /* array of parameter descriptors */ |
||||
|
|
||||
|
int (*newCard)(void**,void*); |
||||
|
/* routine to add a new card to a numerical device model */ |
||||
|
int (*setCardParm)(int,IFvalue*,void*); |
||||
|
/* routine to input a parameter to a card instance */ |
||||
|
int (*askCardQuest)(int,IFvalue*,void*); |
||||
|
/* routine to find out about a card's details */ |
||||
|
} IFcardInfo; |
||||
|
|
||||
|
#endif /* NUMCARDS_H */ |
||||
@ -0,0 +1,231 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1987 Karti Mayaram, 1991 David Gates |
||||
|
**********/ |
||||
|
/* |
||||
|
* Constants used by the numerical simulation routines |
||||
|
*/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef NUMCONST_H |
||||
|
#define NUMCONST_H |
||||
|
|
||||
|
/* Mathematical Constants */ |
||||
|
#ifdef PI |
||||
|
#undef PI |
||||
|
#endif |
||||
|
#define PI 3.14159265358973923846264338327950288419716939937511 |
||||
|
#define TWO_PI (2.0 * PI) |
||||
|
#define ROOT_TWO 1.41421356237309504880168872420969807856967187537694 |
||||
|
|
||||
|
/* Basic Physical Constants */ |
||||
|
#ifdef CHARGE |
||||
|
#undef CHARGE |
||||
|
#endif |
||||
|
#define CHARGE 1.602191770e-19 /* C */ |
||||
|
#define BOLTZMANN_CONSTANT 1.38062259e-23 /* J/oK */ |
||||
|
#define VELOCITY_OF_LIGHT 2.997924562e8 /* CM/S */ |
||||
|
#define ELECTRON_MASS 9.10955854e-31 /* kG */ |
||||
|
#define ZERO_DEGREES_CELSIUS 273.15 /* oK */ |
||||
|
#define EPS0 8.854e-14 /* F/CM */ |
||||
|
|
||||
|
|
||||
|
/* Physical Constants of Silicon, GaAs, SiO2, Si3N4 */ |
||||
|
#define EPS_REL_SI 11.7 /* ~EPS0 */ |
||||
|
#define EPS_SI EPS0 * EPS_REL_SI /* F/CM */ |
||||
|
#define EPS_REL_GA 10.9 /* ~EPS0 */ |
||||
|
#define EPS_GA EPS0 * EPS_REL_GA /* F/CM */ |
||||
|
#define EPS_REL_OX 3.9 /* ~EPS0 */ |
||||
|
#define EPS_OX EPS0 * EPS_REL_OX /* F/CM */ |
||||
|
#define EPS_REL_NI 7.5 /* ~EPS0 */ |
||||
|
#define EPS_NI EPS0 * EPS_REL_NI /* F/CM */ |
||||
|
|
||||
|
/* Work Function, Affinity, Band & Bandgap Parameters */ |
||||
|
#define AFFIN_SI 4.05 /* eV */ |
||||
|
#define AFFIN_GA 4.07 /* eV */ |
||||
|
#define AFFIN_OX 0.95 /* eV */ |
||||
|
#define AFFIN_NI 3.10 /* eV */ |
||||
|
#define PHI_METAL 4.10 /* eV */ |
||||
|
#define PHI_ALUM 4.10 /* eV */ |
||||
|
#define PHI_GOLD 4.75 /* eV */ |
||||
|
|
||||
|
#define EGAP300_SI 1.1245 /* eV */ |
||||
|
#define EGAP300_GA 1.43 /* eV */ |
||||
|
#define EGAP300_OX 9.00 /* eV */ |
||||
|
#define EGAP300_NI 4.70 /* eV */ |
||||
|
#define DGAPDT_SI 4.73e-4 /* eV/oK */ |
||||
|
#define DGAPDT_GA 5.405e-4 /* eV/oK */ |
||||
|
#define TREF_EG_SI 636.0 /* oK */ |
||||
|
#define TREF_EG_GA 204.0 /* oK */ |
||||
|
|
||||
|
#define NCV_NOM 2.509e19 /* CM^-3 */ |
||||
|
#define M_N_SI 1.447 /* ~ELECTRON_MASS */ |
||||
|
#define M_P_SI 1.08 /* ~ELECTRON_MASS */ |
||||
|
#define M_N_GA 7.05e-2 /* ~ELECTRON_MASS */ |
||||
|
#define M_P_GA 0.427 /* ~ELECTRON_MASS */ |
||||
|
|
||||
|
/* Physical Model Parameters for Silicon and GaAs*/ |
||||
|
/* N = electrons, P = holes */ |
||||
|
|
||||
|
/* Effective Richardson Constants (ref. PISCES) */ |
||||
|
#define A_RICH_N_SI 110.0 /* A/CM^2/oK^2 */ |
||||
|
#define A_RICH_P_SI 30.0 /* A/CM^2/oK^2 */ |
||||
|
#define A_RICH_N_GA 6.2857 /* A/CM^2/oK^2 */ |
||||
|
#define A_RICH_P_GA 105.0 /* A/CM^2/oK^2 */ |
||||
|
|
||||
|
/* Auger Recombination (ref. PISCES, SOLL90) */ |
||||
|
#define C_AUG_N_SI 1.8e-31 /* CM^6/S */ |
||||
|
#define C_AUG_P_SI 8.3e-32 /* CM^6/S */ |
||||
|
#define C_AUG_N_GA 2.8e-31 /* CM^6/S */ |
||||
|
#define C_AUG_P_GA 9.9e-32 /* CM^6/S */ |
||||
|
|
||||
|
/* SRH Recombination (ref. SOLL90) */ |
||||
|
#define TAU0_N_SI 3.0e-5 /* S */ |
||||
|
#define NSRH_N_SI 1.0e17 /* CM^-3 */ |
||||
|
#define S_N_SI 1.0e4 /* CM/S */ |
||||
|
#define TAU0_P_SI 1.0e-5 /* S */ |
||||
|
#define NSRH_P_SI 1.0e17 /* CM^-3 */ |
||||
|
#define S_P_SI 1.0e4 /* CM/S */ |
||||
|
#define TAU0_N_GA 1.0e-7 /* S */ |
||||
|
#define NSRH_N_GA 5.0e16 /* CM^-3 */ |
||||
|
#define S_N_GA 1.0e4 /* CM/S */ |
||||
|
#define TAU0_P_GA 1.0e-7 /* S */ |
||||
|
#define NSRH_P_GA 5.0e16 /* CM^-3 */ |
||||
|
#define S_P_GA 1.0e4 /* CM/S */ |
||||
|
|
||||
|
/* Bandgap Narrowing (ref. SOLL90) */ |
||||
|
#define DGAPDN_N 1.2e-2 /* V */ |
||||
|
#define NBGN_N 1.0e18 /* CM^-3 */ |
||||
|
#define DGAPDN_P 9.7e-3 /* V */ |
||||
|
#define NBGN_P 1.0e17 /* CM^-3 */ |
||||
|
|
||||
|
/* Mobility Models : */ |
||||
|
/* Scharfetter-Gummel (SG) mobility (ref. SCHA69) */ |
||||
|
#define SG_MUMAX_N 1400.0 |
||||
|
#define SG_MUMIN_N 75.0 |
||||
|
#define SG_NTREF_N 3.0e16 |
||||
|
#define SG_NTEXP_N 0.5 |
||||
|
#define SG_VSAT_N 1.036e7 |
||||
|
#define SG_VWARM_N 4.9e6 |
||||
|
#define SG_FIT_N 8.8 |
||||
|
#define SG_MUMAX_P 480.0 |
||||
|
#define SG_MUMIN_P 53.0 |
||||
|
#define SG_NTREF_P 4.0e16 |
||||
|
#define SG_NTEXP_P 0.5 |
||||
|
#define SG_VSAT_P 1.2e7 |
||||
|
#define SG_VWARM_P 2.928e6 |
||||
|
#define SG_FIT_P 1.6 |
||||
|
|
||||
|
/* Caughey-Thomas (CT) mobility (ref. CAUG67) */ |
||||
|
#define CT_MUMAX_N 1360.0 |
||||
|
#define CT_MUMIN_N 92.0 |
||||
|
#define CT_NTREF_N 1.3e17 |
||||
|
#define CT_NTEXP_N 0.91 |
||||
|
#define CT_VSAT_N 1.1e7 |
||||
|
#define CT_MUMAX_P 520.0 |
||||
|
#define CT_MUMIN_P 65.0 |
||||
|
#define CT_NTREF_P 2.4e17 |
||||
|
#define CT_NTEXP_P 0.61 |
||||
|
#define CT_VSAT_P 9.5e6 |
||||
|
|
||||
|
/* Arora (AR) mobility (ref. AROR82) */ |
||||
|
#define AR_MUMAX_N 1340.0 |
||||
|
#define AR_MUMIN_N 88.0 |
||||
|
#define AR_NTREF_N 1.26e17 |
||||
|
#define AR_NTEXP_N 0.88 |
||||
|
#define AR_VSAT_N 1.38e7 |
||||
|
#define AR_MUMAX_P 461.3 |
||||
|
#define AR_MUMIN_P 54.3 |
||||
|
#define AR_NTREF_P 2.35e17 |
||||
|
#define AR_NTEXP_P 0.88 |
||||
|
#define AR_VSAT_P 9.0e6 |
||||
|
|
||||
|
/* Minority Carrier mobility (ref. SOLL90) */ |
||||
|
/* |
||||
|
* These parameters are flawed in that they don't match the majority |
||||
|
* carrier mobility when the concentration drops to zero. |
||||
|
* Carrier heating effects must be handled by a different model. |
||||
|
*/ |
||||
|
#define UF_MUMAX_N 1412.0 |
||||
|
#define UF_MUMIN_N 232.0 |
||||
|
#define UF_NTREF_N 8.0e16 |
||||
|
#define UF_NTEXP_N 0.9 |
||||
|
#define UF_MUMAX_P 500.0 |
||||
|
#define UF_MUMIN_P 130.0 |
||||
|
#define UF_NTREF_P 8.0e17 |
||||
|
#define UF_NTEXP_P 1.25 |
||||
|
|
||||
|
/* Temperature-Dependence of Arora mobility */ |
||||
|
/* Applicable to all above models, but not necessarily accurate. */ |
||||
|
#define TD_TREFVS_N 175.0 |
||||
|
#define TD_TREFVS_P 312.0 |
||||
|
#define TD_EXPMUMAX_N -2.33 |
||||
|
#define TD_EXPMUMAX_P -2.23 |
||||
|
#define TD_EXPMUMIN_N -0.57 |
||||
|
#define TD_EXPMUMIN_P -0.57 |
||||
|
#define TD_EXPNTREF_N 2.4 |
||||
|
#define TD_EXPNTREF_P 2.4 |
||||
|
#define TD_EXPNTEXP_N -0.146 |
||||
|
#define TD_EXPNTEXP_P -0.146 |
||||
|
|
||||
|
/* |
||||
|
* Inversion-layers are handled differently. They don't fit into the nice |
||||
|
* pattern established above for bulk mobility. |
||||
|
*/ |
||||
|
/* Surface mobility (ref. GATE90) */ |
||||
|
#define MUS_N 991.0 /* CM^2/VS */ |
||||
|
#define THETAA_N 2.67e-6 /* CM/V */ |
||||
|
#define THETAB_N 4.18e-14 /* CM^2/V^2 */ |
||||
|
#define SALPHA_N 1.0 / 2.0 /* --- */ |
||||
|
#define SBETA_N 1.0 / 2.0 /* --- */ |
||||
|
#define MUS_P 240.0 /* CM^2/VS */ |
||||
|
#define THETAA_P 3.07e-6 /* CM/V */ |
||||
|
#define THETAB_P 0.0 /* CM^2/V^2 */ |
||||
|
#define SALPHA_P 2.0 / 3.0 /* --- */ |
||||
|
#define SBETA_P 1.0 / 3.0 /* --- */ |
||||
|
|
||||
|
/* Gallium-Arsenide (GA) mobility (ref. PISCES) */ |
||||
|
#define GA_MUMAX_N 5000.0 |
||||
|
#define GA_MUMIN_N 50.0 |
||||
|
#define GA_NTREF_N 1.0e17 |
||||
|
#define GA_NTEXP_N 1.0 |
||||
|
#define GA_VSAT_N 7.7e6 |
||||
|
#define GA_VWARM_N 2.31e7 |
||||
|
#define GA_MUMAX_P 400.0 |
||||
|
#define GA_MUMIN_P 40.0 |
||||
|
#define GA_NTREF_P 1.0e17 |
||||
|
#define GA_NTEXP_P 1.0 |
||||
|
#define GA_VSAT_P 7.7e6 |
||||
|
#define GA_VWARM_P 2.31e7 |
||||
|
|
||||
|
/* END OF MOBILITY MODELS */ |
||||
|
|
||||
|
/* Freeze Out / Incomplete Ionization Parameters */ |
||||
|
#define E_ARS_SI 0.049 /* eV (Arsenic) */ |
||||
|
#define E_DON_SI 0.044 /* eV (Phosphorus) */ |
||||
|
#define E_ACC_SI 0.045 /* eV (Boron) */ |
||||
|
#define G_DON_SI 2.0 /* --- */ |
||||
|
#define G_ACC_SI 4.0 /* --- */ |
||||
|
#define E_DON_GA 0.005 /* eV */ |
||||
|
#define E_ACC_GA 0.005 /* eV */ |
||||
|
#define G_DON_GA 2.0 /* --- */ |
||||
|
#define G_ACC_GA 2.0 /* --- */ |
||||
|
|
||||
|
/* Impact Ionization / Avalanche Generation Parameters */ |
||||
|
/* These are for Silicon. Need better GaAs parameters. */ |
||||
|
#define AII_N 7.03e5 |
||||
|
#define BII_N 1.231e6 |
||||
|
#define AII_P 1.582e6 |
||||
|
#define BII_P 2.036e6 |
||||
|
|
||||
|
/* Default Surface-State / Fixed-Charge Density */ |
||||
|
#define NSS 0.0 /* CM^-2 */ |
||||
|
|
||||
|
/* Default abstol for Poisson and Current-Continuity Equations */ |
||||
|
#define DABSTOL1D 1.0e-12 /* --- */ |
||||
|
#define DABSTOL2D 1.0e-8 /* --- */ |
||||
|
|
||||
|
#endif /* NUMCONST_H */ |
||||
@ -0,0 +1,93 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1991 David Gates |
||||
|
**********/ |
||||
|
/* |
||||
|
* Enumerations used by the numerical simulation routines |
||||
|
*/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
#ifndef NUMENUM_H |
||||
|
#define NUMENUM_H |
||||
|
|
||||
|
/* Doping Profiles */ |
||||
|
#define UNIF 101 |
||||
|
#define LIN 102 |
||||
|
#define GAUSS 103 |
||||
|
#define EXP 104 |
||||
|
#define ERRFC 105 |
||||
|
#define LOOKUP 106 |
||||
|
#define X 107 |
||||
|
#define Y 108 |
||||
|
|
||||
|
/* AC-Analysis Method */ |
||||
|
#define SOR 201 |
||||
|
#define DIRECT 202 |
||||
|
#define SOR_ONLY 203 |
||||
|
|
||||
|
/* One-Carrier-Simulation Types */ |
||||
|
#define N_TYPE 301 |
||||
|
#define P_TYPE 302 |
||||
|
|
||||
|
/* Element, Node, and Edge Types */ |
||||
|
#define SEMICON 401 |
||||
|
#define INSULATOR 402 |
||||
|
#define METAL 403 |
||||
|
#define INTERFACE 404 |
||||
|
#define CONTACT 405 |
||||
|
#define SCHOTTKY 406 |
||||
|
#define HETERO 407 |
||||
|
|
||||
|
/* Material Types */ |
||||
|
#define OXIDE 1 |
||||
|
#define NITRIDE 2 |
||||
|
#define SILICON 3 |
||||
|
#define POLYSILICON 4 |
||||
|
#define GAAS 5 |
||||
|
|
||||
|
/* Time-Integration Method */ |
||||
|
#ifndef TRAPEZOIDAL |
||||
|
#define TRAPEZOIDAL 1 |
||||
|
#define BDF 2 |
||||
|
#define GEAR 2 |
||||
|
#endif |
||||
|
|
||||
|
/* Mobility Models */ |
||||
|
#define SG 1 /* Scharfetter-Gummel Model */ |
||||
|
#define CT 2 /* Caughey-Thomas Model */ |
||||
|
#define AR 3 /* Arora Model */ |
||||
|
#define UF 4 /* Univ. of Florida Model */ |
||||
|
#define GA 5 /* Gallium-Arsenide Model */ |
||||
|
#define TD 6 /* Temperature Dependent */ |
||||
|
#define CCS 7 /* Carrier-Carrier Scattering */ |
||||
|
|
||||
|
/* Carrier Classification */ |
||||
|
#define NUM_CARRIERS 2 |
||||
|
#define ELEC 0 |
||||
|
#define HOLE 1 |
||||
|
#define NUM_CARRTYPES 2 |
||||
|
#define MAJOR 0 |
||||
|
#define MINOR 1 |
||||
|
|
||||
|
/* Solvers */ |
||||
|
#define SLV_NONE 0 |
||||
|
#define SLV_EQUIL 1 |
||||
|
#define SLV_BIAS 2 |
||||
|
#define SLV_SMSIG 3 |
||||
|
|
||||
|
/* Output Data Formats */ |
||||
|
#define RAWFILE 0 |
||||
|
#define HDF 1 |
||||
|
|
||||
|
/* Time and Memory Statistics Types */ |
||||
|
#define NUM_STATTYPES 4 |
||||
|
#define STAT_SETUP 0 |
||||
|
#define STAT_DC 1 |
||||
|
#define STAT_TRAN 2 |
||||
|
#define STAT_AC 3 |
||||
|
|
||||
|
#endif /* NUMENUM_H */ |
||||
@ -0,0 +1,42 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
* Generic Numerical Model Structure |
||||
|
*/ |
||||
|
#ifndef NUMGEN_H |
||||
|
#define NUMGEN_H |
||||
|
|
||||
|
#include "ifsim.h" |
||||
|
#include "cktdefs.h" |
||||
|
#include "gendefs.h" |
||||
|
#include "carddefs.h" |
||||
|
|
||||
|
typedef struct sGENnumModel { /* model structure for a numerical device */ |
||||
|
int GENmodType; /* type index of this device type */ |
||||
|
struct sGENnumModel *GENnextModel; /* pointer to next model in list */ |
||||
|
GENinstance *GENinstances; /* pointer to list of instances */ |
||||
|
IFuid GENmodName; /* pointer to string naming this model */ |
||||
|
/* Everything below here is numerical-device-specific */ |
||||
|
MESHcard *GENxMeshes; /* list of xmesh cards */ |
||||
|
MESHcard *GENyMeshes; /* list of ymesh cards */ |
||||
|
DOMNcard *GENdomains; /* list of domain cards */ |
||||
|
BDRYcard *GENboundaries; /* list of boundary cards */ |
||||
|
DOPcard *GENdopings; /* list of doping cards */ |
||||
|
ELCTcard *GENelectrodes; /* list of electrode cards */ |
||||
|
CONTcard *GENcontacts; /* list of contact cards */ |
||||
|
MODLcard *GENmodels; /* list of model cards */ |
||||
|
MATLcard *GENmaterials; /* list of material cards */ |
||||
|
MOBcard *GENmobility; /* list of mobility cards */ |
||||
|
METHcard *GENmethods; /* list of method cards */ |
||||
|
OPTNcard *GENoptions; /* list of option cards */ |
||||
|
OUTPcard *GENoutputs; /* list of output cards */ |
||||
|
} GENnumModel; |
||||
|
|
||||
|
#endif /* NUMGEN_H */ |
||||
@ -0,0 +1,59 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1987 Karti Mayaram, 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Define various flags, constants, and indices */ |
||||
|
/* These variables are defined in support/globals.c */ |
||||
|
|
||||
|
#ifndef NUMGLOBS_H |
||||
|
#define NUMGLOBS_H |
||||
|
|
||||
|
extern int BandGapNarrowing; |
||||
|
extern int TempDepMobility; |
||||
|
extern int ConcDepMobility; |
||||
|
extern int FieldDepMobility; |
||||
|
extern int TransDepMobility; |
||||
|
extern int SurfaceMobility; |
||||
|
extern int MatchingMobility; |
||||
|
extern int MobDeriv; |
||||
|
extern int CCScattering; |
||||
|
extern int Srh; |
||||
|
extern int Auger; |
||||
|
extern int ConcDepLifetime; |
||||
|
extern int AvalancheGen; |
||||
|
extern int FreezeOut; |
||||
|
extern int OneCarrier; |
||||
|
extern int MaxIterations; |
||||
|
extern int AcAnalysisMethod; |
||||
|
|
||||
|
extern double Temp; |
||||
|
extern double RelTemp; |
||||
|
extern double Vt; |
||||
|
extern double RefPsi; |
||||
|
extern double EpsNorm; |
||||
|
extern double VNorm; |
||||
|
extern double NNorm; |
||||
|
extern double LNorm; |
||||
|
extern double TNorm; |
||||
|
extern double JNorm; |
||||
|
extern double GNorm; |
||||
|
extern double ENorm; |
||||
|
|
||||
|
typedef struct sGLOBvalues |
||||
|
{ |
||||
|
double Temp; |
||||
|
double RelTemp; |
||||
|
double Vt; |
||||
|
double RefPsi; |
||||
|
double EpsNorm; |
||||
|
double VNorm; |
||||
|
double NNorm; |
||||
|
double LNorm; |
||||
|
double TNorm; |
||||
|
double JNorm; |
||||
|
double GNorm; |
||||
|
double ENorm; |
||||
|
} GLOBvalues; |
||||
|
|
||||
|
#endif /* NUMGLOBS_H */ |
||||
@ -0,0 +1,72 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1987 Karti Mayaram, 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
* One Dimensional Numerical Device Data Structures |
||||
|
*/ |
||||
|
|
||||
|
#ifndef ONEDEV_H |
||||
|
#define ONEDEV_H |
||||
|
|
||||
|
#include "gendev.h" |
||||
|
|
||||
|
typedef struct sONEdevice |
||||
|
{ |
||||
|
double *dcSolution; /* solution vector for device */ |
||||
|
double *dcDeltaSolution; /* delta solution vector */ |
||||
|
double *copiedSolution; /* copy of the solution vector */ |
||||
|
double *rhs; /* rhs vector */ |
||||
|
double *rhsImag; /* imaginary part of rhs vector */ |
||||
|
char *matrix; /* matrix for device equations */ |
||||
|
int solverType; /* type of equations matrix can solve */ |
||||
|
int dimEquil; /* dimension in equilibrium */ |
||||
|
int numOrigEquil; /* orig number of nz's in equilibrium */ |
||||
|
int numFillEquil; /* fill number of nz's in equilibrium */ |
||||
|
int dimBias; /* dimension under bias */ |
||||
|
int numOrigBias; /* orig number of nz's under bias */ |
||||
|
int numFillBias; /* fill number of nz's under bias */ |
||||
|
int numEqns; /* number of equations */ |
||||
|
int poissonOnly; /* flag for Poisson eqn solution */ |
||||
|
struct sONEelem **elemArray; /* array of elements */ |
||||
|
double **devStates; /* device states */ |
||||
|
int numNodes; /* total number of nodes */ |
||||
|
struct sONEcontact *pFirstContact; /* first contact */ |
||||
|
struct sONEcontact *pLastContact; /* last contact */ |
||||
|
struct sMaterialInfo *pMaterials; /* temp-dep material information */ |
||||
|
struct sStatInfo *pStats; /* run-time statistics */ |
||||
|
int converged; /* flag for device convergence */ |
||||
|
int iterationNumber; /* device iteration counter */ |
||||
|
int baseIndex; /* index for base contact in BJTs */ |
||||
|
double baseLength; /* length of base contact in BJTs */ |
||||
|
double area; /* area of device in CM^2 */ |
||||
|
double rhsNorm; /* norm of rhs vector */ |
||||
|
double abstol; /* absolute tolerance for device */ |
||||
|
double reltol; /* relative tolerance for device */ |
||||
|
char *name; /* name of device */ |
||||
|
} ONEdevice; |
||||
|
|
||||
|
#define devState0 devStates[0] |
||||
|
#define devState1 devStates[1] |
||||
|
#define devState2 devStates[2] |
||||
|
#define devState3 devStates[3] |
||||
|
#define devState4 devStates[4] |
||||
|
#define devState5 devStates[5] |
||||
|
#define devState6 devStates[6] |
||||
|
#define devState7 devStates[7] |
||||
|
|
||||
|
typedef struct sONEcontact |
||||
|
{ |
||||
|
struct sONEcontact *next; /* pointer to next contact */ |
||||
|
struct sONEnode **pNodes; /* pointer to the contact nodes */ |
||||
|
int numNodes; /* number of nodes in contact */ |
||||
|
int id; /* unique contact identifier */ |
||||
|
double workf; /* metal work function */ |
||||
|
} ONEcontact; |
||||
|
|
||||
|
#endif /* ONEDEV_H */ |
||||
@ -0,0 +1,130 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1987 Karti Mayaram, 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
* One-Dimensional Element-based Simulation-Mesh Data Structures |
||||
|
*/ |
||||
|
|
||||
|
#ifndef ONEMESH_H |
||||
|
#define ONEMESH_H |
||||
|
|
||||
|
#include "material.h" |
||||
|
|
||||
|
typedef struct sONEelem { |
||||
|
struct sONEelem *pElems[2]; /* array to store neighbor elements */ |
||||
|
struct sONEnode *pNodes[2]; /* array to store the element nodes */ |
||||
|
struct sONEedge *pEdge; /* the edge */ |
||||
|
double dx; /* the x length */ |
||||
|
double rDx; /* 1 / dx */ |
||||
|
int domain; /* domain to which this elem belongs */ |
||||
|
int elemType; /* material type of element */ |
||||
|
ONEmaterial *matlInfo; /* material information */ |
||||
|
double epsRel; /* epsilon of material rel to Semicon */ |
||||
|
int evalNodes[2]; /* nodes to be evaluated in elem */ |
||||
|
} ONEelem; |
||||
|
|
||||
|
#define pLeftElem pElems[0] |
||||
|
#define pRightElem pElems[1] |
||||
|
|
||||
|
#define pLeftNode pNodes[0] |
||||
|
#define pRightNode pNodes[1] |
||||
|
|
||||
|
typedef struct sONEedge { |
||||
|
double mun; /* electron mobility */ |
||||
|
double mup; /* hole mobility */ |
||||
|
double dPsi; /* deltaPsi */ |
||||
|
double jn; /* electron current */ |
||||
|
double jp; /* hole current */ |
||||
|
double jd; /* displacement current */ |
||||
|
double dJnDpsiP1; /* dJn/dPsi(+1) */ |
||||
|
double dJnDn; /* dJnx/dN */ |
||||
|
double dJnDnP1; /* dJn/dN(+1) */ |
||||
|
double dJpDpsiP1; /* dJpx/dPsi(+1) */ |
||||
|
double dJpDp; /* dJpx/dP */ |
||||
|
double dJpDpP1; /* dJpxDp(+1) */ |
||||
|
double dCBand; /* effective delta conduction band */ |
||||
|
double dVBand; /* effective delta valence band */ |
||||
|
int edgeState; /* pointer to state vector */ |
||||
|
unsigned evaluated : 1; /* flag to indicated evaluated */ |
||||
|
} ONEedge; |
||||
|
|
||||
|
typedef struct sONEnode { |
||||
|
double x; /* x location */ |
||||
|
int nodeI; /* node x-index */ |
||||
|
int poiEqn; /* equation number for equil poisson */ |
||||
|
int psiEqn; /* equation number for bias poisson */ |
||||
|
int nEqn; /* equation number for n continuity */ |
||||
|
int pEqn; /* equation number for p continuity */ |
||||
|
int nodeType; /* type of node */ |
||||
|
int baseType; /* baseType n or p or none */ |
||||
|
double vbe; /* base emitter voltage for BJTs */ |
||||
|
struct sONEelem *pElems[2]; /* array of elements */ |
||||
|
double psi0; /* equilibrium potential */ |
||||
|
double psi; /* electrostatic potential */ |
||||
|
double nConc; /* electron conc. */ |
||||
|
double pConc; /* hole conc. */ |
||||
|
double nie; /* effective intrinsic carrier conc. */ |
||||
|
double eg; /* energy gap */ |
||||
|
double eaff; /* electron affinity; work phi for metal*/ |
||||
|
double tn; /* electron lifetime */ |
||||
|
double tp; /* hole lifetime */ |
||||
|
double netConc; /* net conc. */ |
||||
|
double totalConc; /* total conc. */ |
||||
|
double na; /* acceptor conc. */ |
||||
|
double nd; /* donor conc. */ |
||||
|
double qf; /* fixed charge density */ |
||||
|
double nPred; /* predicted electron conc. */ |
||||
|
double pPred; /* predicted hole conc. */ |
||||
|
double uNet; /* net recombination rate */ |
||||
|
double dUdN; /* dU / dN */ |
||||
|
double dUdP; /* dU / dP */ |
||||
|
double dNdT; /* dN / dT value */ |
||||
|
double dPdT; /* dN / dT value */ |
||||
|
int nodeState; /* pointer to the state vector */ |
||||
|
unsigned evaluated : 1; /* flag to indicated evaluated */ |
||||
|
/* sparse matrix pointers. pointers to doubles */ |
||||
|
double *fPsiPsiiM1; |
||||
|
double *fPsiPsi; |
||||
|
double *fPsiPsiiP1; |
||||
|
double *fPsiN; |
||||
|
double *fPsiP; |
||||
|
double *fNPsiiM1; |
||||
|
double *fNPsi; |
||||
|
double *fNPsiiP1; |
||||
|
double *fNNiM1; |
||||
|
double *fNN; |
||||
|
double *fNNiP1; |
||||
|
double *fNPiM1; |
||||
|
double *fNP; |
||||
|
double *fNPiP1; |
||||
|
double *fPPsiiM1; |
||||
|
double *fPPsi; |
||||
|
double *fPPsiiP1; |
||||
|
double *fPPiM1; |
||||
|
double *fPP; |
||||
|
double *fPPiP1; |
||||
|
double *fPNiM1; |
||||
|
double *fPN; |
||||
|
double *fPNiP1; |
||||
|
} ONEnode; |
||||
|
|
||||
|
|
||||
|
#define pLeftElem pElems[0] |
||||
|
#define pRightElem pElems[1] |
||||
|
|
||||
|
#define nodePsi nodeState |
||||
|
#define nodeN nodeState+1 |
||||
|
#define nodeP nodeState+3 |
||||
|
|
||||
|
#define edgeDpsi edgeState |
||||
|
|
||||
|
#define ONEnumNodeStates 5 |
||||
|
#define ONEnumEdgeStates 2 |
||||
|
|
||||
|
#endif /* ONEMESH */ |
||||
@ -0,0 +1,60 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
#ifndef OPTN_H |
||||
|
#define OPTN_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sOPTNcard { |
||||
|
struct sOPTNcard *OPTNnextCard; |
||||
|
char *OPTNicFile; |
||||
|
int OPTNunique; |
||||
|
int OPTNdeviceType; |
||||
|
double OPTNdefa; |
||||
|
double OPTNdefw; |
||||
|
double OPTNdefl; |
||||
|
double OPTNbaseArea; |
||||
|
double OPTNbaseLength; |
||||
|
double OPTNbaseDepth; |
||||
|
double OPTNtnom; |
||||
|
unsigned int OPTNicFileGiven : 1; |
||||
|
unsigned int OPTNuniqueGiven : 1; |
||||
|
unsigned int OPTNdeviceTypeGiven : 1; |
||||
|
unsigned int OPTNdefaGiven : 1; |
||||
|
unsigned int OPTNdefwGiven : 1; |
||||
|
unsigned int OPTNdeflGiven : 1; |
||||
|
unsigned int OPTNbaseAreaGiven : 1; |
||||
|
unsigned int OPTNbaseLengthGiven : 1; |
||||
|
unsigned int OPTNbaseDepthGiven : 1; |
||||
|
unsigned int OPTNtnomGiven : 1; |
||||
|
} OPTNcard; |
||||
|
|
||||
|
/* OPTN parameters */ |
||||
|
#define OPTN_RESISTOR 1 |
||||
|
#define OPTN_CAPACITOR 2 |
||||
|
#define OPTN_DIODE 3 |
||||
|
#define OPTN_BIPOLAR 4 |
||||
|
#define OPTN_SOIBJT 5 |
||||
|
#define OPTN_MOSCAP 6 |
||||
|
#define OPTN_MOSFET 7 |
||||
|
#define OPTN_SOIMOS 8 |
||||
|
#define OPTN_JFET 9 |
||||
|
#define OPTN_MESFET 10 |
||||
|
#define OPTN_DEFA 11 |
||||
|
#define OPTN_DEFW 12 |
||||
|
#define OPTN_DEFL 13 |
||||
|
#define OPTN_BASE_AREA 14 |
||||
|
#define OPTN_BASE_LENGTH 15 |
||||
|
#define OPTN_BASE_DEPTH 16 |
||||
|
#define OPTN_TNOM 17 |
||||
|
#define OPTN_IC_FILE 18 |
||||
|
#define OPTN_UNIQUE 19 |
||||
|
|
||||
|
#endif /* OPTN_H */ |
||||
@ -0,0 +1,107 @@ |
|||||
|
/********** |
||||
|
Copyright 1992 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1992 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
#ifndef OUTP_H |
||||
|
#define OUTP_H |
||||
|
|
||||
|
/* Data Structures and Definitions for Device Simulation Cards */ |
||||
|
|
||||
|
typedef struct sOUTPcard { |
||||
|
struct sOUTPcard *OUTPnextCard; |
||||
|
char *OUTProotFile; |
||||
|
int OUTPnumVars; |
||||
|
int OUTPdcDebug; |
||||
|
int OUTPtranDebug; |
||||
|
int OUTPacDebug; |
||||
|
int OUTPgeom; |
||||
|
int OUTPmesh; |
||||
|
int OUTPmaterial; |
||||
|
int OUTPglobals; |
||||
|
int OUTPstats; |
||||
|
int OUTPfileType; |
||||
|
int OUTPdoping; |
||||
|
int OUTPpsi; |
||||
|
int OUTPequPsi; |
||||
|
int OUTPvacPsi; |
||||
|
int OUTPnConc; |
||||
|
int OUTPpConc; |
||||
|
int OUTPphin; |
||||
|
int OUTPphip; |
||||
|
int OUTPphic; |
||||
|
int OUTPphiv; |
||||
|
int OUTPeField; |
||||
|
int OUTPjc; |
||||
|
int OUTPjd; |
||||
|
int OUTPjn; |
||||
|
int OUTPjp; |
||||
|
int OUTPjt; |
||||
|
int OUTPuNet; |
||||
|
int OUTPmun; |
||||
|
int OUTPmup; |
||||
|
unsigned int OUTProotFileGiven : 1; |
||||
|
unsigned int OUTPdcDebugGiven : 1; |
||||
|
unsigned int OUTPtranDebugGiven : 1; |
||||
|
unsigned int OUTPacDebugGiven : 1; |
||||
|
unsigned int OUTPgeomGiven : 1; |
||||
|
unsigned int OUTPmeshGiven : 1; |
||||
|
unsigned int OUTPmaterialGiven : 1; |
||||
|
unsigned int OUTPglobalsGiven : 1; |
||||
|
unsigned int OUTPstatsGiven : 1; |
||||
|
unsigned int OUTPfileTypeGiven : 1; |
||||
|
unsigned int OUTPdopingGiven : 1; |
||||
|
unsigned int OUTPpsiGiven : 1; |
||||
|
unsigned int OUTPequPsiGiven : 1; |
||||
|
unsigned int OUTPvacPsiGiven : 1; |
||||
|
unsigned int OUTPnConcGiven : 1; |
||||
|
unsigned int OUTPpConcGiven : 1; |
||||
|
unsigned int OUTPphinGiven : 1; |
||||
|
unsigned int OUTPphipGiven : 1; |
||||
|
unsigned int OUTPphicGiven : 1; |
||||
|
unsigned int OUTPphivGiven : 1; |
||||
|
unsigned int OUTPeFieldGiven : 1; |
||||
|
unsigned int OUTPjcGiven : 1; |
||||
|
unsigned int OUTPjdGiven : 1; |
||||
|
unsigned int OUTPjnGiven : 1; |
||||
|
unsigned int OUTPjpGiven : 1; |
||||
|
unsigned int OUTPjtGiven : 1; |
||||
|
unsigned int OUTPuNetGiven : 1; |
||||
|
unsigned int OUTPmunGiven : 1; |
||||
|
unsigned int OUTPmupGiven : 1; |
||||
|
} OUTPcard; |
||||
|
|
||||
|
/* OUTP parameters */ |
||||
|
#define OUTP_ALL_DEBUG 1 |
||||
|
#define OUTP_DC_DEBUG 2 |
||||
|
#define OUTP_TRAN_DEBUG 3 |
||||
|
#define OUTP_AC_DEBUG 4 |
||||
|
#define OUTP_GEOM 5 |
||||
|
#define OUTP_MESH 6 |
||||
|
#define OUTP_MATERIAL 7 |
||||
|
#define OUTP_GLOBALS 8 |
||||
|
#define OUTP_STATS 9 |
||||
|
#define OUTP_ROOTFILE 10 |
||||
|
#define OUTP_RAWFILE 11 |
||||
|
#define OUTP_HDF 12 |
||||
|
#define OUTP_DOPING 13 |
||||
|
#define OUTP_PSI 14 |
||||
|
#define OUTP_EQU_PSI 15 |
||||
|
#define OUTP_VAC_PSI 16 |
||||
|
#define OUTP_N_CONC 17 |
||||
|
#define OUTP_P_CONC 18 |
||||
|
#define OUTP_PHIN 19 |
||||
|
#define OUTP_PHIP 20 |
||||
|
#define OUTP_PHIC 21 |
||||
|
#define OUTP_PHIV 22 |
||||
|
#define OUTP_E_FIELD 23 |
||||
|
#define OUTP_J_C 24 |
||||
|
#define OUTP_J_D 25 |
||||
|
#define OUTP_J_N 26 |
||||
|
#define OUTP_J_P 27 |
||||
|
#define OUTP_J_T 28 |
||||
|
#define OUTP_U_NET 29 |
||||
|
#define OUTP_MUN 30 |
||||
|
#define OUTP_MUP 31 |
||||
|
|
||||
|
#endif /* OUTP_H */ |
||||
@ -0,0 +1,59 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1987 Karti Mayaram, 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
* Doping Profile Data Structures |
||||
|
*/ |
||||
|
#ifndef PROFILE_H |
||||
|
#define PROFILE_H |
||||
|
|
||||
|
typedef struct sDOPprofile { |
||||
|
int type; /* Primary profile type UNIF, EXP, etc */ |
||||
|
int latType; /* Lateral profile type UNIF, EXP, etc */ |
||||
|
int rotate; /* Is lat prof rotation of primary? */ |
||||
|
int numDomains; /* Size of vector of domains to dope */ |
||||
|
int *domains; /* Vector of domains to dope */ |
||||
|
double param[10]; |
||||
|
struct sDOPprofile *next; |
||||
|
} DOPprofile; |
||||
|
|
||||
|
#define BEGIN ??? |
||||
|
#define END ??? |
||||
|
#define LENGTH ??? |
||||
|
#define FORWARD ??? |
||||
|
|
||||
|
#define CONC param[1] |
||||
|
#define PEAK_CONC param[1] |
||||
|
#define IMPID param[1] |
||||
|
#define X_LOW param[2] |
||||
|
#define X_HIGH param[3] |
||||
|
#define Y_LOW param[4] |
||||
|
#define Y_HIGH param[5] |
||||
|
#define RANGE param[6] |
||||
|
#define LOCATION param[6] |
||||
|
#define CHAR_LENGTH param[7] |
||||
|
#define DIRECTION param[8] |
||||
|
#define LAT_RATIO param[9] |
||||
|
|
||||
|
/* Structure for holding lookup tables of concentrations */ |
||||
|
typedef struct sDOPtable { |
||||
|
int impId; /* id of impurity */ |
||||
|
double **dopData; /* Array of doping values */ |
||||
|
struct sDOPtable *next; /* Pointer to next table in list */ |
||||
|
} DOPtable; |
||||
|
|
||||
|
/* define impurity types */ |
||||
|
#define IMP_BORON 1 |
||||
|
#define IMP_PHOSPHORUS 2 |
||||
|
#define IMP_ARSENIC 3 |
||||
|
#define IMP_ANTIMONY 4 |
||||
|
#define IMP_N_TYPE 5 |
||||
|
#define IMP_P_TYPE 6 |
||||
|
|
||||
|
#endif /* PROFILE_H */ |
||||
@ -0,0 +1,106 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1987 Karti Mayaram, 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
* Two-Dimensional Numerical Device Data Structures |
||||
|
*/ |
||||
|
|
||||
|
#ifndef TWODEV_H |
||||
|
#define TWODEV_H |
||||
|
|
||||
|
#include "gendev.h" |
||||
|
|
||||
|
typedef struct sTWOdevice |
||||
|
{ |
||||
|
double *dcSolution; /* solution vector for device */ |
||||
|
double *dcDeltaSolution; /* delta solution vector */ |
||||
|
double *copiedSolution; /* copy of the solution vector */ |
||||
|
double *rhs; /* rhs vector */ |
||||
|
double *rhsImag; /* imaginary part of rhs vector */ |
||||
|
char *matrix; /* matrix for device equations */ |
||||
|
int solverType; /* what is matrix set up to do */ |
||||
|
int dimEquil; /* dimension in equilibrium */ |
||||
|
int numOrigEquil; /* orig number of nz's in equilibrium */ |
||||
|
int numFillEquil; /* fill number of nz's in equilibrium */ |
||||
|
int dimBias; /* dimension under bias */ |
||||
|
int numOrigBias; /* orig number of nz's under bias */ |
||||
|
int numFillBias; /* fill number of nz's under bias */ |
||||
|
int numEqns; /* number of equations */ |
||||
|
int poissonOnly; /* flag for Poisson eqn solution */ |
||||
|
struct sTWOelem **elements; /* 1D list of elements */ |
||||
|
struct sTWOelem ***elemArray; /* 2D list of elements for printing */ |
||||
|
double **devStates; /* device states */ |
||||
|
double *xScale; /* array of X node locations */ |
||||
|
double *yScale; /* array of Y node locations */ |
||||
|
int numXNodes; /* number of X nodes */ |
||||
|
int numYNodes; /* number of Y nodes */ |
||||
|
int numNodes; /* total number of nodes */ |
||||
|
int numEdges; /* total number of edges */ |
||||
|
int numElems; /* total number of elements */ |
||||
|
struct sTWOcontact *pFirstContact; /* first contact */ |
||||
|
struct sTWOcontact *pLastContact; /* last contact */ |
||||
|
struct sTWOchannel *pChannel; /* surface mobility channel */ |
||||
|
struct sMaterialInfo *pMaterials; /* temp-dep material information */ |
||||
|
struct sStatInfo *pStats; /* run-time statistics */ |
||||
|
int converged; /* flag for device convergence */ |
||||
|
int iterationNumber; /* device iteration counter */ |
||||
|
double width; /* device width in CM */ |
||||
|
double rhsNorm; /* norm of rhs vector */ |
||||
|
double abstol; /* absolute tolerance for device */ |
||||
|
double reltol; /* relative tolerance for device */ |
||||
|
char *name; /* name of device */ |
||||
|
} TWOdevice; |
||||
|
|
||||
|
#define devState0 devStates[0] |
||||
|
#define devState1 devStates[1] |
||||
|
#define devState2 devStates[2] |
||||
|
#define devState3 devStates[3] |
||||
|
#define devState4 devStates[4] |
||||
|
#define devState5 devStates[5] |
||||
|
#define devState6 devStates[6] |
||||
|
#define devState7 devStates[7] |
||||
|
|
||||
|
typedef struct sTWOcontact |
||||
|
{ |
||||
|
struct sTWOcontact *next; /* pointer to next contact */ |
||||
|
struct sTWOnode **pNodes; /* pointer to the contact nodes */ |
||||
|
int numNodes; /* number of nodes in contact */ |
||||
|
int id; /* unique contact identifier */ |
||||
|
double workf; /* metal work function */ |
||||
|
} TWOcontact; |
||||
|
|
||||
|
/* Structure for channels. |
||||
|
* A channel is divided into 'columns' that are perpendicular to the |
||||
|
* channel's insulator/semiconductor interface. Each column begins |
||||
|
* at its 'seed', the closest semiconductor element to the interface. |
||||
|
* It is assumed that the current flows parallel to the interface. |
||||
|
*/ |
||||
|
typedef struct sTWOchannel |
||||
|
{ |
||||
|
struct sTWOchannel *next; /* pointer to next channel */ |
||||
|
struct sTWOelem *pSeed; /* pointer to the seed element */ |
||||
|
struct sTWOelem *pNElem; /* pointer to the insulator element */ |
||||
|
int id; /* unique channel identifier */ |
||||
|
int type; /* ID of direction to interface */ |
||||
|
} TWOchannel; |
||||
|
|
||||
|
struct mosConductances |
||||
|
{ |
||||
|
double dIdDVdb; |
||||
|
double dIdDVsb; |
||||
|
double dIdDVgb; |
||||
|
double dIsDVdb; |
||||
|
double dIsDVsb; |
||||
|
double dIsDVgb; |
||||
|
double dIgDVdb; |
||||
|
double dIgDVsb; |
||||
|
double dIgDVgb; |
||||
|
}; |
||||
|
|
||||
|
#endif /* TWODEV_H */ |
||||
@ -0,0 +1,212 @@ |
|||||
|
/********** |
||||
|
Copyright 1991 Regents of the University of California. All rights reserved. |
||||
|
Authors: 1987 Karti Mayaram, 1991 David Gates |
||||
|
**********/ |
||||
|
|
||||
|
/* Member of CIDER device simulator |
||||
|
* Version: 1b1 |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
* Two-Dimensional Element-based Simulation-Mesh Data Structures |
||||
|
*/ |
||||
|
|
||||
|
#ifndef TWOMESH_H |
||||
|
#define TWOMESH_H |
||||
|
|
||||
|
#include "material.h" |
||||
|
|
||||
|
typedef struct sTWOelem |
||||
|
{ |
||||
|
struct sTWOelem *pElems[4]; /* array to store the element neighbors */ |
||||
|
struct sTWOnode *pNodes[4]; /* array to store the element nodes */ |
||||
|
struct sTWOedge *pEdges[4]; /* array to store the edges */ |
||||
|
double dx; /* the x length */ |
||||
|
double dy; /* the y length */ |
||||
|
double dxOverDy; /* dX / dY */ |
||||
|
double dyOverDx; /* dY / dX */ |
||||
|
int domain; /* device domain owning element */ |
||||
|
int elemType; /* material type of element */ |
||||
|
TWOmaterial *matlInfo; /* material information */ |
||||
|
double epsRel; /* relative epsilon */ |
||||
|
/* Values needed to calc. mobility and its derivatives at element center */ |
||||
|
double mun0, mup0; /* temp. and doping-dep. mobilities */ |
||||
|
double mun, mup; /* field and carrier-dep. mobilities */ |
||||
|
double dMunDEs, dMupDEs; /* Mob Deriv surf EFIELD Comp */ |
||||
|
double dMunDEx, dMupDEx; /* Mob Deriv x EFIELD Comp */ |
||||
|
double dMunDEy, dMupDEy; /* Mob Deriv y EFIELD Comp */ |
||||
|
double dMunDWx, dMupDWx; /* Mob Deriv x WDF Comp */ |
||||
|
double dMunDWy, dMupDWy; /* Mob Deriv y WDF Comp */ |
||||
|
double dMunDN, dMupDN; /* Mob Deriv nConc Comp */ |
||||
|
double dMunDP, dMupDP; /* Mob Deriv pConc Comp */ |
||||
|
unsigned surface : 1; /* flag to indicate surface elem */ |
||||
|
int channel; /* id of channel elem is in, 0 is none */ |
||||
|
int direction; /* direction of flow for channels */ |
||||
|
int evalNodes[4]; /* nodes to be evaluated in elem */ |
||||
|
int evalEdges[4]; /* edges to be evaluated in elem */ |
||||
|
} TWOelem; |
||||
|
|
||||
|
#define pTopElem pElems[0] |
||||
|
#define pRightElem pElems[1] |
||||
|
#define pBotElem pElems[2] |
||||
|
#define pLeftElem pElems[3] |
||||
|
|
||||
|
#define pTLNode pNodes[0] |
||||
|
#define pTRNode pNodes[1] |
||||
|
#define pBRNode pNodes[2] |
||||
|
#define pBLNode pNodes[3] |
||||
|
|
||||
|
#define pTopEdge pEdges[0] |
||||
|
#define pRightEdge pEdges[1] |
||||
|
#define pBotEdge pEdges[2] |
||||
|
#define pLeftEdge pEdges[3] |
||||
|
|
||||
|
typedef struct sTWOedge |
||||
|
{ |
||||
|
int edgeType; /* boundary type of edge */ |
||||
|
double dPsi; /* deltaPsi */ |
||||
|
double jn; /* electron current */ |
||||
|
double jp; /* hole current */ |
||||
|
double jd; /* displacement current */ |
||||
|
double dJnDpsiP1; /* dJn/dPsi(+1) */ |
||||
|
double dJnDn; /* dJnx/dN */ |
||||
|
double dJnDnP1; /* dJn/dN(+1) */ |
||||
|
double dJpDpsiP1; /* dJpx/dPsi(+1) */ |
||||
|
double dJpDp; /* dJpx/dP */ |
||||
|
double dJpDpP1; /* dJpxDp(+1) */ |
||||
|
double dCBand; /* effective delta conduction band */ |
||||
|
double dVBand; /* effective delta valence band */ |
||||
|
double qf; /* fixed charge density */ |
||||
|
/* Terms to find weighted carrier driving force and its derivatives */ |
||||
|
double wdfn; /* N weighted driving force */ |
||||
|
double wdfp; /* P weighted driving force */ |
||||
|
double dWnDpsiP1; /* dWn/dPsi(+1) */ |
||||
|
double dWnDn; /* dWn/dN */ |
||||
|
double dWnDnP1; /* dWn/dN(+1) */ |
||||
|
double dWpDpsiP1; /* dWp/dPsi(+1) */ |
||||
|
double dWpDp; /* dWp/dP */ |
||||
|
double dWpDpP1; /* dWp/dP(+1) */ |
||||
|
/* Coefficients for weighting mobility on sides of edges */ |
||||
|
double kNeg; /* Spline for negative side of edge */ |
||||
|
double kPos; /* Spline for positive side of edge */ |
||||
|
|
||||
|
int edgeState; /* pointer to state vector */ |
||||
|
unsigned evaluated : 1; /* flag to indicated evaluated */ |
||||
|
} TWOedge; |
||||
|
|
||||
|
typedef struct sTWOnode { |
||||
|
int nodeType; /* type of node */ |
||||
|
int nodeI; /* node x-index */ |
||||
|
int nodeJ; /* node y-index */ |
||||
|
int poiEqn; /* equation number for equilib poisson */ |
||||
|
int psiEqn; /* equation number for bias poisson */ |
||||
|
int nEqn; /* equation number for n continuity */ |
||||
|
int pEqn; /* equation number for p continuity */ |
||||
|
struct sTWOelem *pElems[4]; /* array of elements */ |
||||
|
double psi0; /* equilibrium potential */ |
||||
|
double psi; /* electrostatic potential */ |
||||
|
double nConc; /* electron conc. */ |
||||
|
double pConc; /* hole conc. */ |
||||
|
double nie; /* effective intrinsic carrier conc. */ |
||||
|
double eg; /* energy gap */ |
||||
|
double eaff; /* electron affinity; work phi for metal*/ |
||||
|
double tn; /* electron lifetime */ |
||||
|
double tp; /* hole lifetime */ |
||||
|
double netConc; /* net doping conc. */ |
||||
|
double totalConc; /* total doping conc. */ |
||||
|
double na; /* acceptor conc. */ |
||||
|
double nd; /* donor conc. */ |
||||
|
double nPred; /* predicted electron conc. */ |
||||
|
double pPred; /* predicted hole conc. */ |
||||
|
double uNet; /* net recombination rate */ |
||||
|
double dUdN; /* dU / dN */ |
||||
|
double dUdP; /* dU / dP */ |
||||
|
double dNdT; /* dN / dT */ |
||||
|
double dPdT; /* dP / dT */ |
||||
|
int nodeState; /* pointer to the state vector */ |
||||
|
unsigned evaluated : 1; /* flag to indicated evaluated */ |
||||
|
/* sparse matrix pointers. pointers to doubles */ |
||||
|
/* DAG: diagonal pointers fXXiX1jX1 */ |
||||
|
double *fPsiPsiiM1; |
||||
|
double *fPsiPsi; |
||||
|
double *fPsiPsiiP1; |
||||
|
double *fPsiPsijM1; |
||||
|
double *fPsiPsijP1; |
||||
|
double *fPsiN; |
||||
|
double *fPsiP; |
||||
|
double *fNPsiiM1; |
||||
|
double *fNPsi; |
||||
|
double *fNPsiiP1; |
||||
|
double *fNPsijM1; |
||||
|
double *fNPsijP1; |
||||
|
double *fNPsiiM1jM1; |
||||
|
double *fNPsiiM1jP1; |
||||
|
double *fNPsiiP1jM1; |
||||
|
double *fNPsiiP1jP1; |
||||
|
double *fNNiM1; |
||||
|
double *fNN; |
||||
|
double *fNNiP1; |
||||
|
double *fNNjM1; |
||||
|
double *fNNjP1; |
||||
|
double *fNNiM1jM1; |
||||
|
double *fNNiM1jP1; |
||||
|
double *fNNiP1jM1; |
||||
|
double *fNNiP1jP1; |
||||
|
double *fNP; |
||||
|
double *fPPsiiM1; |
||||
|
double *fPPsi; |
||||
|
double *fPPsiiP1; |
||||
|
double *fPPsijM1; |
||||
|
double *fPPsijP1; |
||||
|
double *fPPsiiM1jM1; |
||||
|
double *fPPsiiM1jP1; |
||||
|
double *fPPsiiP1jM1; |
||||
|
double *fPPsiiP1jP1; |
||||
|
double *fPPiM1; |
||||
|
double *fPP; |
||||
|
double *fPPiP1; |
||||
|
double *fPPjM1; |
||||
|
double *fPPjP1; |
||||
|
double *fPPiM1jM1; |
||||
|
double *fPPiM1jP1; |
||||
|
double *fPPiP1jM1; |
||||
|
double *fPPiP1jP1; |
||||
|
double *fPN; |
||||
|
/* DAG: Pointers for Surface-Field-Dependent Terms */ |
||||
|
/* For Oxide/Insulator on Silicon/Semiconductor: |
||||
|
Ox |
||||
|
OxM1 + ----- + ----- + OxP1 OXIDE |
||||
|
| | | |
||||
|
| | | |
||||
|
- InM1 + ----- + ----- + InP1 --- INTERFACE |
||||
|
In |
||||
|
*/ |
||||
|
double *fNPsiInM1; |
||||
|
double *fNPsiIn; |
||||
|
double *fNPsiInP1; |
||||
|
double *fNPsiOxM1; |
||||
|
double *fNPsiOx; |
||||
|
double *fNPsiOxP1; |
||||
|
double *fPPsiInM1; |
||||
|
double *fPPsiIn; |
||||
|
double *fPPsiInP1; |
||||
|
double *fPPsiOxM1; |
||||
|
double *fPPsiOx; |
||||
|
double *fPPsiOxP1; |
||||
|
} TWOnode; |
||||
|
|
||||
|
#define pTLElem pElems[0] |
||||
|
#define pTRElem pElems[1] |
||||
|
#define pBRElem pElems[2] |
||||
|
#define pBLElem pElems[3] |
||||
|
|
||||
|
#define nodePsi nodeState |
||||
|
#define nodeN nodeState+1 |
||||
|
#define nodeP nodeState+3 |
||||
|
|
||||
|
#define edgeDpsi edgeState |
||||
|
|
||||
|
#define TWOnumNodeStates 5 |
||||
|
#define TWOnumEdgeStates 2 |
||||
|
|
||||
|
#endif /* TWOMESH_H */ |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue