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

📄 vbicload.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 5 页
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. QuarlesModel Author: 1995 Colin McAndrew MotorolaSpice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH**********//* * This is the function called each iteration to evaluate the * VBICs in the circuit and load them into the matrix as appropriate */#include "ngspice.h"#include "cktdefs.h"#include "vbicdefs.h"#include "const.h"#include "trandefs.h"#include "sperror.h"#include "devdefs.h"#include "suffix.h"intVBICload(GENmodel *inModel, CKTcircuit *ckt)        /* actually load the current resistance value into the          * sparse matrix previously provided          */{    VBICmodel *model = (VBICmodel*)inModel;    VBICinstance *here;    double p[108]    ,Vbei,Vbex,Vbci,Vbep,Vbcp,Vrcx    ,Vbcx,Vrci,Vrbx,Vrbi,Vre,Vrbp,Vrs    ,Vbe,Vbc,Ibe,Ibe_Vbei,Ibex,Ibex_Vbex,Itzf    ,Itzf_Vbei,Itzf_Vbci,Itzr,Itzr_Vbci,Itzr_Vbei,Ibc,Ibc_Vbci    ,Ibc_Vbei,Ibep,Ibep_Vbep,Ircx,Ircx_Vrcx,Irci,Irci_Vrci    ,Irci_Vbci,Irci_Vbcx,Irbx,Irbx_Vrbx,Irbi,Irbi_Vrbi,Irbi_Vbei    ,Irbi_Vbci,Ire,Ire_Vre,Irbp,Irbp_Vrbp,Irbp_Vbep,Irbp_Vbci    ,Qbe,Qbe_Vbei,Qbe_Vbci,Qbex,Qbex_Vbex,Qbc,Qbc_Vbci    ,Qbcx,Qbcx_Vbcx,Qbep,Qbep_Vbep,Qbep_Vbci,Qbeo,Qbeo_Vbe    ,Qbco,Qbco_Vbc,Ibcp,Ibcp_Vbcp,Iccp,Iccp_Vbep,Iccp_Vbci    ,Iccp_Vbcp,Irs,Irs_Vrs,Qbcp,Qbcp_Vbcp,SCALE;    int iret;    int vbic_4T_it_cf_fj(double *        ,double *,double *,double *,double *,double *,double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *, double *        ,double *,double *,double *,double *,double *,double *);    double vce, xfact;    double vt;    double delvbei;    double delvbex;    double delvbci;    double delvbcx;    double delvbep;    double delvrci;    double delvrbi;    double delvrbp;    double delvbcp;    double ibehat;    double ibexhat;    double itzfhat;    double itzrhat;    double ibchat;    double ibephat;    double ircihat;    double irbihat;    double irbphat;    double ibcphat;    double iccphat;    double ceq, geq, rhs_current;    int icheck;    int ichk1, ichk2, ichk3, ichk4, ichk5;    int error;    int SenCond=0;    double gqbeo, cqbeo, gqbco, cqbco, gbcx, cbcx;    /*  loop through all the models */    for( ; model != NULL; model = model->VBICnextModel ) {        /* loop through all the instances of the model */        for (here = model->VBICinstances; here != NULL ;                here=here->VBICnextInstance) {            if (here->VBICowner != ARCHme) continue;            vt = here->VBICtemp * CONSTKoverQ;            if(ckt->CKTsenInfo){#ifdef SENSDEBUG                printf("VBICload\n");#endif /* SENSDEBUG */                if((ckt->CKTsenInfo->SENstatus == PERTURBATION)&&                    (here->VBICsenPertFlag == OFF)) continue;                SenCond = here->VBICsenPertFlag;            }            gbcx = 0.0;            cbcx = 0.0;            gqbeo = 0.0;            cqbeo = 0.0;            gqbco = 0.0;            cqbco = 0.0;            /*             *   dc model paramters             */            p[0] = here->VBICttnom;            p[1] = here->VBICtextCollResist;            p[2] = here->VBICtintCollResist;            p[3] = here->VBICtepiSatVoltage;            p[4] = here->VBICtepiDoping;            p[5] = model->VBIChighCurFac;            p[6] = here->VBICtextBaseResist;            p[7] = here->VBICtintBaseResist;            p[8] = here->VBICtemitterResist;            p[9] = here->VBICtsubstrateResist;            p[10] = here->VBICtparBaseResist;            p[11] = here->VBICtsatCur;            p[12] = here->VBICtemissionCoeffF;            p[13] = here->VBICtemissionCoeffR;            p[14] = model->VBICdeplCapLimitF;            p[15] = model->VBICextOverlapCapBE;            p[16] = here->VBICtdepletionCapBE;            p[17] = here->VBICtpotentialBE;            p[18] = model->VBICjunctionExpBE;            p[19] = model->VBICsmoothCapBE;            p[20] = model->VBICextOverlapCapBC;            p[21] = here->VBICtdepletionCapBC;            p[22] = model->VBICepiCharge;            p[23] = here->VBICtextCapBC;            p[24] = here->VBICtpotentialBC;            p[25] = model->VBICjunctionExpBC;            p[26] = model->VBICsmoothCapBC;            p[27] = here->VBICtextCapSC;            p[28] = here->VBICtpotentialSC;            p[29] = model->VBICjunctionExpSC;            p[30] = model->VBICsmoothCapSC;            p[31] = here->VBICtidealSatCurBE;            p[32] = model->VBICportionIBEI;            p[33] = model->VBICidealEmissCoeffBE;            p[34] = here->VBICtnidealSatCurBE;            p[35] = model->VBICnidealEmissCoeffBE;            p[36] = here->VBICtidealSatCurBC;            p[37] = model->VBICidealEmissCoeffBC;            p[38] = here->VBICtnidealSatCurBC;            p[39] = model->VBICnidealEmissCoeffBC;            p[40] = model->VBICavalanchePar1BC;            p[41] = here->VBICtavalanchePar2BC;            p[42] = here->VBICtparasitSatCur;            p[43] = model->VBICportionICCP;            p[44] = model->VBICparasitFwdEmissCoeff;            p[45] = here->VBICtidealParasitSatCurBE;            p[46] = here->VBICtnidealParasitSatCurBE;            p[47] = here->VBICtidealParasitSatCurBC;            p[48] = model->VBICidealParasitEmissCoeffBC;            p[49] = here->VBICtnidealParasitSatCurBC;            p[50] = model->VBICnidealParasitEmissCoeffBC;            p[51] = model->VBICearlyVoltF;            p[52] = model->VBICearlyVoltR;            p[53] = here->VBICtrollOffF;            p[54] = model->VBICrollOffR;            p[55] = model->VBICparRollOff;            p[56] = model->VBICtransitTimeF;            p[57] = model->VBICvarTransitTimeF;            p[58] = model->VBICtransitTimeBiasCoeffF;            p[59] = model->VBICtransitTimeFVBC;            p[60] = model->VBICtransitTimeHighCurrentF;            p[61] = model->VBICtransitTimeR;            p[62] = model->VBICdelayTimeF;            p[63] = model->VBICfNcoef;            p[64] = model->VBICfNexpA;            p[65] = model->VBICfNexpB;            p[66] = model->VBICtempExpRE;            p[67] = model->VBICtempExpRBI;            p[68] = model->VBICtempExpRCI;            p[69] = model->VBICtempExpRS;            p[70] = model->VBICtempExpVO;            p[71] = model->VBICactivEnergyEA;            p[72] = model->VBICactivEnergyEAIE;            p[73] = model->VBICactivEnergyEAIC;            p[74] = model->VBICactivEnergyEAIS;            p[75] = model->VBICactivEnergyEANE;            p[76] = model->VBICactivEnergyEANC;            p[77] = model->VBICactivEnergyEANS;            p[78] = model->VBICtempExpIS;            p[79] = model->VBICtempExpII;            p[80] = model->VBICtempExpIN;            p[81] = model->VBICtempExpNF;            p[82] = model->VBICtempExpAVC;            p[83] = model->VBICthermalResist;            p[84] = model->VBICthermalCapacitance;            p[85] = model->VBICpunchThroughVoltageBC;            p[86] = model->VBICdeplCapCoeff1;            p[87] = model->VBICfixedCapacitanceCS;            p[88] = model->VBICsgpQBselector;            p[89] = model->VBIChighCurrentBetaRolloff;            p[90] = model->VBICtempExpIKF;            p[91] = model->VBICtempExpRCX;            p[92] = model->VBICtempExpRBX;            p[93] = model->VBICtempExpRBP;            p[94] = here->VBICtsepISRR;            p[95] = model->VBICtempExpXISR;            p[96] = model->VBICdear;            p[97] = model->VBICeap;            p[98] = here->VBICtvbbe;            p[99] = here->VBICtnbbe;            p[100] = model->VBICibbe;            p[101] = model->VBICtvbbe1;            p[102] = model->VBICtvbbe2;            p[103] = model->VBICtnbbe;            p[104] = model->VBICebbe;            p[105] = model->VBIClocTempDiff;            p[106] = model->VBICrevVersion;            p[107] = model->VBICrefVersion;            SCALE = here->VBICarea * here->VBICm;            if(SenCond){#ifdef SENSDEBUG                printf("VBICsenPertFlag = ON \n");#endif /* SENSDEBUG */                if((ckt->CKTsenInfo->SENmode == TRANSEN)&&                    (ckt->CKTmode & MODEINITTRAN)) {                    Vbe = model->VBICtype*(                        *(ckt->CKTrhsOp+here->VBICbaseNode)-                        *(ckt->CKTrhsOp+here->VBICemitNode));                    Vbc = model->VBICtype*(                        *(ckt->CKTrhsOp+here->VBICbaseNode)-                        *(ckt->CKTrhsOp+here->VBICcollNode));                    Vbei = *(ckt->CKTstate1 + here->VBICvbei);                    Vbex = *(ckt->CKTstate1 + here->VBICvbex);                    Vbci = *(ckt->CKTstate1 + here->VBICvbci);                    Vbcx = *(ckt->CKTstate1 + here->VBICvbcx);                    Vbep = *(ckt->CKTstate1 + here->VBICvbep);                    Vrci = *(ckt->CKTstate1 + here->VBICvrci);                    Vrbi = *(ckt->CKTstate1 + here->VBICvrbi);                    Vrbp = *(ckt->CKTstate1 + here->VBICvrbp);                    Vrcx = model->VBICtype*(                        *(ckt->CKTrhsOp+here->VBICcollNode)-                        *(ckt->CKTrhsOp+here->VBICcollCXNode));                    Vrbx = model->VBICtype*(                        *(ckt->CKTrhsOp+here->VBICbaseNode)-                        *(ckt->CKTrhsOp+here->VBICbaseBXNode));                    Vre = model->VBICtype*(

⌨️ 快捷键说明

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