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

📄 bjt2load.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. QuarlesModified: Alan Gillespie**********//* * This is the function called each iteration to evaluate the * BJT2s in the circuit and load them into the matrix as appropriate */#include "ngspice.h"#include "cktdefs.h"#include "bjt2defs.h"#include "const.h"#include "trandefs.h"#include "sperror.h"#include "devdefs.h"#include "suffix.h"intBJT2load(GENmodel *inModel, CKTcircuit *ckt)        /* actually load the current resistance value into the          * sparse matrix previously provided          */{    BJT2model *model = (BJT2model*)inModel;    BJT2instance *here;    double arg1;    double arg2;    double arg3;    double arg;    double argtf;    double c2;    double c4;    double capbc;    double capbe;    double capbx=0;    double capsub=0;    double cb;    double cbc;    double cbcn;    double cbe;    double cben;    double cbhat;    double cc;    double cchat;    double cdis;    double ceq;    double ceqbc;    double ceqbe;    double ceqbx;    double geqsub;    double ceqsub;    double cex;    double csat;    double csubsat;    double ctot;    double czbc;    double czbcf2;    double czbe;    double czbef2;    double czbx;    double czbxf2;    double czsub;    double delvbc;    double delvbe;    double denom;    double dqbdvc;    double dqbdve;    double evbc;    double evbcn;    double evbe;    double evben;    double f1;    double f2;    double f3;    double fcpc;    double fcpe;    double gbc;    double gbcn;    double gbe;    double gben;    double gcsub;    double gcpr;    double gepr;    double geq;    double geqbx;    double geqcb;    double gex;    double gm;    double gmu;    double go;    double gpi;    double gx;    double oik;    double oikr;    double ovtf;    double pc;    double pe;    double ps;    double q1;    double q2;    double qb;    double rbpi;    double rbpr;    double sarg;    double sqarg;    double td;    double temp;    double tf;    double tr;    double vbc;    double vbe;    double vbx = 0.0;    double vce;    double vsub = 0.0;    double vt;    double vtc;    double vte;    double vtn;    double xfact;    double xjrb;    double xjtf;    double xmc;    double xme;    double xms;    double xtf;    double evsub;    double gdsub;    double cdsub;    int icheck;    int ichk1;    int error;    int SenCond=0;    double m;        /*  loop through all the models */    for( ; model != NULL; model = model->BJT2nextModel ) {        /* loop through all the instances of the model */        for (here = model->BJT2instances; here != NULL ;                here=here->BJT2nextInstance) {            if (here->BJT2owner != ARCHme) continue;           	    vt = here->BJT2temp * CONSTKoverQ;            if(ckt->CKTsenInfo){#ifdef SENSDEBUG                printf("BJT2load \n");#endif /* SENSDEBUG */                if((ckt->CKTsenInfo->SENstatus == PERTURBATION)&&                    (here->BJT2senPertFlag == OFF)) continue;                SenCond = here->BJT2senPertFlag;            }            gcsub=0;            ceqsub=0;            geqbx=0;            ceqbx=0;            geqcb=0;            /*             *   dc model paramters             */            csat=here->BJT2tSatCur*here->BJT2area;            csubsat=here->BJT2tSubSatCur*here->BJT2area;            rbpr=here->BJT2tMinBaseResist/here->BJT2area;            rbpi=here->BJT2tBaseResist/here->BJT2area-rbpr;            gcpr=here->BJT2tCollectorConduct*here->BJT2area;            gepr=here->BJT2tEmitterConduct*here->BJT2area;            oik=model->BJT2invRollOffF/here->BJT2area;            c2=here->BJT2tBEleakCur*here->BJT2area;            vte=model->BJT2leakBEemissionCoeff*vt;            oikr=model->BJT2invRollOffR/here->BJT2area;	    	    if (model->BJT2subs == VERTICAL)                c4=here->BJT2tBCleakCur * here->BJT2areab;            else	        c4=here->BJT2tBCleakCur * here->BJT2areac;	    	    vtc=model->BJT2leakBCemissionCoeff*vt;            td=model->BJT2excessPhaseFactor;            xjrb=model->BJT2baseCurrentHalfResist*here->BJT2area;            if(SenCond){#ifdef SENSDEBUG                printf("BJT2senPertFlag = ON \n");#endif /* SENSDEBUG */                if((ckt->CKTsenInfo->SENmode == TRANSEN)&&                    (ckt->CKTmode & MODEINITTRAN)) {                    vbe = *(ckt->CKTstate1 + here->BJT2vbe);                    vbc = *(ckt->CKTstate1 + here->BJT2vbc);                    vbx=model->BJT2type*(                        *(ckt->CKTrhsOp+here->BJT2baseNode)-                        *(ckt->CKTrhsOp+here->BJT2colPrimeNode));                    vsub=model->BJT2type*model->BJT2subs*(                      *(ckt->CKTrhsOp+here->BJT2substNode)-                      *(ckt->CKTrhsOp+here->BJT2substConNode));                }                else{                    vbe = *(ckt->CKTstate0 + here->BJT2vbe);                    vbc = *(ckt->CKTstate0 + here->BJT2vbc);                    if((ckt->CKTsenInfo->SENmode == DCSEN)||                        (ckt->CKTsenInfo->SENmode == TRANSEN)){                        vbx=model->BJT2type*(                            *(ckt->CKTrhsOld+here->BJT2baseNode)-                            *(ckt->CKTrhsOld+here->BJT2colPrimeNode));                        vsub=model->BJT2type*model->BJT2subs*(                            *(ckt->CKTrhsOld+here->BJT2substNode)-                            *(ckt->CKTrhsOld+here->BJT2substConNode));                    }                    if(ckt->CKTsenInfo->SENmode == ACSEN){                        vbx=model->BJT2type*(                            *(ckt->CKTrhsOp+here->BJT2baseNode)-                            *(ckt->CKTrhsOp+here->BJT2colPrimeNode));                        vsub=model->BJT2type*model->BJT2subs*(                            *(ckt->CKTrhsOp+here->BJT2substNode)-                            *(ckt->CKTrhsOp+here->BJT2substConNode));                    }                }                goto next1;            }            /*             *   initialization             */            icheck=1;            if(ckt->CKTmode & MODEINITSMSIG) {                vbe= *(ckt->CKTstate0 + here->BJT2vbe);                vbc= *(ckt->CKTstate0 + here->BJT2vbc);                vbx=model->BJT2type*(                    *(ckt->CKTrhsOld+here->BJT2baseNode)-                    *(ckt->CKTrhsOld+here->BJT2colPrimeNode));                vsub=model->BJT2type*model->BJT2subs*(                    *(ckt->CKTrhsOld+here->BJT2substNode)-                    *(ckt->CKTrhsOld+here->BJT2substConNode));            } else if(ckt->CKTmode & MODEINITTRAN) {                vbe = *(ckt->CKTstate1 + here->BJT2vbe);                vbc = *(ckt->CKTstate1 + here->BJT2vbc);                vbx=model->BJT2type*(                    *(ckt->CKTrhsOld+here->BJT2baseNode)-                    *(ckt->CKTrhsOld+here->BJT2colPrimeNode));                vsub=model->BJT2type*model->BJT2subs*(                    *(ckt->CKTrhsOld+here->BJT2substNode)-                    *(ckt->CKTrhsOld+here->BJT2substConNode));                if( (ckt->CKTmode & MODETRAN) && (ckt->CKTmode & MODEUIC) ) {                    vbx=model->BJT2type*(here->BJT2icVBE-here->BJT2icVCE);                    vsub=0;                }            } else if((ckt->CKTmode & MODEINITJCT) &&                     (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)){                vbe=model->BJT2type*here->BJT2icVBE;                vce=model->BJT2type*here->BJT2icVCE;                vbc=vbe-vce;                vbx=vbc;                vsub=0;            } else if((ckt->CKTmode & MODEINITJCT) && (here->BJT2off==0)) {                vbe=here->BJT2tVcrit;                vbc=0;                /* ERROR:  need to initialize VCS, VBX here */                vsub=vbx=0;            } else if((ckt->CKTmode & MODEINITJCT) ||                    ( (ckt->CKTmode & MODEINITFIX) && (here->BJT2off!=0))) {                vbe=0;                vbc=0;                /* ERROR:  need to initialize VCS, VBX here */                vsub=vbx=0;            } else {#ifndef PREDICTOR

⌨️ 快捷键说明

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