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