⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twomesh.h

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 H
字号:
/**********Copyright 1991 Regents of the University of California. All rights reserved.Authors: 1987 Karti Mayaram, 1991 David Gates**********//* * 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 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -