1 /**********
2 Copyright 1991 Regents of the University of California. All rights reserved.
3 Authors: 1987 Karti Mayaram, 1991 David Gates
4 **********/
5 
6 #ifndef NUMD2_H
7 #define NUMD2_H
8 
9 /* data structures used to describe 2D numerical diodes */
10 
11 /* circuit level includes */
12 #include "ngspice/ifsim.h"
13 #include "ngspice/cktdefs.h"
14 #include "ngspice/gendefs.h"
15 
16 /* device level includes */
17 #include "ngspice/twomesh.h"
18 #include "ngspice/twodev.h"
19 #include "ngspice/profile.h"
20 #include "ngspice/numglobs.h"
21 #include "ngspice/carddefs.h"
22 
23 /* information needed per instance */
24 typedef struct sNUMD2instance {
25 
26   struct GENinstance gen;
27 
28 #define NUMD2modPtr(inst) ((struct sNUMD2model *)((inst)->gen.GENmodPtr))
29 #define NUMD2nextInstance(inst) ((struct sNUMD2instance *)((inst)->gen.GENnextInstance))
30 #define NUMD2name gen.GENname
31 #define NUMD2state gen.GENstate
32 
33 #define NUMD2voltage NUMD2state
34 #define NUMD2id NUMD2state+1
35 #define NUMD2conduct NUMD2state+2
36 #define NUMD2numStates 3
37 
38   const int NUMD2posNode;	/* number of positive node of diode */
39   const int NUMD2negNode;	/* number of negative node of diode */
40   TWOdevice *NUMD2pDevice;
41   GLOBvalues NUMD2globals;	/* Temp.-Dep. Global Parameters */
42   int NUMD2type;		/* device type pn or np */
43   double NUMD2width;		/* width factor for the diode */
44   double NUMD2area;		/* area factor for the diode */
45   double NUMD2temp;		/* instance temperature */
46   double NUMD2c11;		/* small-signal capacitance */
47   double NUMD2y11r;		/* small-signal admittance, real part */
48   double NUMD2y11i;		/* small-signal admittance, imag part */
49   int NUMD2print;		/* number of timesteps after which print
50 				 * internal */
51   char *NUMD2icFile;            /* Name of initial condition file */
52   double *NUMD2negPosPtr;	/* pointer to sparse matrix at
53 				 * (negative,positive) */
54   double *NUMD2posNegPtr;	/* pointer to sparse matrix at
55 				 * (positive,negative) */
56   double *NUMD2posPosPtr;	/* pointer to sparse matrix at
57 				 * (positive,positive) */
58   double *NUMD2negNegPtr;	/* pointer to sparse matrix at
59 				 * (negative,negative) */
60 
61   int NUMD2off;			/* 'off' flag for diode */
62   unsigned NUMD2smSigAvail:1;	/* flag to indicate small-signal done */
63   unsigned NUMD2widthGiven:1;	/* flag to indicate width was specified */
64   unsigned NUMD2areaGiven:1;	/* flag to indicate area was specified */
65   unsigned NUMD2icFileGiven:1;	/* flag to indicate init. cond. file given */
66   unsigned NUMD2tempGiven:1;	/* flag to indicate temp was specified */
67   unsigned NUMD2printGiven:1;	/* flag to indicate if print was specified */
68 } NUMD2instance;
69 
70 
71 /* per model data */
72 
73 typedef struct sNUMD2model {	/* model structure for a diode */
74 
75   struct GENmodel gen;
76 
77 #define NUMD2modType gen.GENmodType
78 #define NUMD2nextModel(inst) ((struct sNUMD2model *)((inst)->gen.GENnextModel))
79 #define NUMD2instances(inst) ((NUMD2instance *)((inst)->gen.GENinstances))
80 #define NUMD2modName gen.GENmodName
81 
82   MESHcard *NUMD2xMeshes;	/* list of xmesh cards */
83   MESHcard *NUMD2yMeshes;	/* list of ymesh cards */
84   DOMNcard *NUMD2domains;	/* list of domain cards */
85   BDRYcard *NUMD2boundaries;	/* list of boundary cards */
86   DOPcard *NUMD2dopings;	/* list of doping cards */
87   ELCTcard *NUMD2electrodes;	/* list of electrode cards */
88   CONTcard *NUMD2contacts;	/* list of contact cards */
89   MODLcard *NUMD2models;	/* list of model cards */
90   MATLcard *NUMD2materials;	/* list of material cards */
91   MOBcard *NUMD2mobility;	/* list of mobility cards */
92   METHcard *NUMD2methods;	/* list of method cards */
93   OPTNcard *NUMD2options;	/* list of option cards */
94   OUTPcard *NUMD2outputs;	/* list of output cards */
95   TWOtranInfo *NUMD2pInfo;	/* transient analysis information */
96   DOPprofile *NUMD2profiles;	/* expanded list of doping profiles */
97   DOPtable *NUMD2dopTables;	/* list of tables used by profiles */
98   TWOmaterial *NUMD2matlInfo;	/* list of material info structures */
99 } NUMD2model;
100 
101 /* type of 2D diode */
102 #define PN  1
103 #define NP -1
104 
105 /* device parameters */
106 #define NUMD2_WIDTH 1
107 #define NUMD2_AREA 2
108 #define NUMD2_IC_FILE 3
109 #define NUMD2_OFF 4
110 #define NUMD2_PRINT 5
111 #define NUMD2_TEMP 6
112 #define NUMD2_VD 7
113 #define NUMD2_ID 8
114 
115 #define NUMD2_G11 9
116 #define NUMD2_C11 10
117 #define NUMD2_Y11 11
118 #define NUMD2_G12 12
119 #define NUMD2_C12 13
120 #define NUMD2_Y12 14
121 #define NUMD2_G21 15
122 #define NUMD2_C21 16
123 #define NUMD2_Y21 17
124 #define NUMD2_G22 18
125 #define NUMD2_C22 19
126 #define NUMD2_Y22 20
127 
128 /* model parameters */
129 /* NOTE: all true model parameters have been moved to IFcardInfo structures */
130 #define NUMD2_MOD_NUMD 101
131 
132 /* device questions */
133 
134 /* model questions */
135 
136 #include "numd2ext.h"
137 
138 #endif				/* NUMD2_H */
139