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

📄 vbicload.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 5 页
字号:
                            *(ckt->CKTstate1 + here->VBICiccp_Vbep);                    *(ckt->CKTstate0 + here->VBICiccp_Vbci) =                             *(ckt->CKTstate1 + here->VBICiccp_Vbci);                    *(ckt->CKTstate0 + here->VBICiccp_Vbcp) =                             *(ckt->CKTstate1 + here->VBICiccp_Vbcp);                } else {#endif /* PREDICTOR */                    /*                     *   compute new nonlinear branch voltages                     */                    Vbei = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICbaseBINode)-                        *(ckt->CKTrhsOld+here->VBICemitEINode));                    Vbex = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICbaseBXNode)-                        *(ckt->CKTrhsOld+here->VBICemitEINode));                    Vbci = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICbaseBINode)-                        *(ckt->CKTrhsOld+here->VBICcollCINode));                    Vbcx = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICbaseBINode)-                        *(ckt->CKTrhsOld+here->VBICcollCXNode));                    Vbep = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICbaseBXNode)-                        *(ckt->CKTrhsOld+here->VBICbaseBPNode));                    Vrci = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICcollCXNode)-                        *(ckt->CKTrhsOld+here->VBICcollCINode));                    Vrbi = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICbaseBXNode)-                        *(ckt->CKTrhsOld+here->VBICbaseBINode));                    Vrbp = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICbaseBPNode)-                        *(ckt->CKTrhsOld+here->VBICcollCXNode));                    Vbcp = model->VBICtype*(                        *(ckt->CKTrhsOld+here->VBICsubsSINode)-                        *(ckt->CKTrhsOld+here->VBICbaseBPNode));#ifndef PREDICTOR                }#endif /* PREDICTOR */                delvbei = Vbei - *(ckt->CKTstate0 + here->VBICvbei);                delvbex = Vbex - *(ckt->CKTstate0 + here->VBICvbex);                delvbci = Vbci - *(ckt->CKTstate0 + here->VBICvbci);                delvbcx = Vbcx - *(ckt->CKTstate0 + here->VBICvbcx);                delvbep = Vbep - *(ckt->CKTstate0 + here->VBICvbep);                delvrci = Vrci - *(ckt->CKTstate0 + here->VBICvrci);                delvrbi = Vrbi - *(ckt->CKTstate0 + here->VBICvrbi);                delvrbp = Vrbp - *(ckt->CKTstate0 + here->VBICvrbp);                delvbcp = Vbcp - *(ckt->CKTstate0 + here->VBICvbcp);                Vbe = model->VBICtype*(                    *(ckt->CKTrhsOld+here->VBICbaseNode)-                    *(ckt->CKTrhsOld+here->VBICemitNode));                Vbc = model->VBICtype*(                    *(ckt->CKTrhsOld+here->VBICbaseNode)-                    *(ckt->CKTrhsOld+here->VBICcollNode));                Vrcx = model->VBICtype*(                    *(ckt->CKTrhsOld+here->VBICcollNode)-                    *(ckt->CKTrhsOld+here->VBICcollCXNode));                Vrbx = model->VBICtype*(                    *(ckt->CKTrhsOld+here->VBICbaseNode)-                    *(ckt->CKTrhsOld+here->VBICbaseBXNode));                Vre = model->VBICtype*(                    *(ckt->CKTrhsOld+here->VBICemitNode)-                    *(ckt->CKTrhsOld+here->VBICemitEINode));                Vrs = model->VBICtype*(                    *(ckt->CKTrhsOld+here->VBICsubsNode)-                    *(ckt->CKTrhsOld+here->VBICsubsSINode));                ibehat = *(ckt->CKTstate0 + here->VBICibe) +                          *(ckt->CKTstate0 + here->VBICibe_Vbei)*delvbei;                ibexhat = *(ckt->CKTstate0 + here->VBICibex) +                          *(ckt->CKTstate0 + here->VBICibex_Vbex)*delvbex;                itzfhat = *(ckt->CKTstate0 + here->VBICitzf) +                          *(ckt->CKTstate0 + here->VBICitzf_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzf_Vbci)*delvbci;                itzrhat = *(ckt->CKTstate0 + here->VBICitzr) +                          *(ckt->CKTstate0 + here->VBICitzr_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzr_Vbci)*delvbci;                ibchat = *(ckt->CKTstate0 + here->VBICibc) +                          *(ckt->CKTstate0 + here->VBICibc_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICibc_Vbci)*delvbci;                ibephat = *(ckt->CKTstate0 + here->VBICibep) +                          *(ckt->CKTstate0 + here->VBICibep_Vbep)*delvbep;                ircihat = *(ckt->CKTstate0 + here->VBICirci) + *(ckt->CKTstate0 + here->VBICirci_Vrci)*delvrci +                         *(ckt->CKTstate0 + here->VBICirci_Vbcx)*delvbcx + *(ckt->CKTstate0 + here->VBICirci_Vbci)*delvbci;                irbihat = *(ckt->CKTstate0 + here->VBICirbi) + *(ckt->CKTstate0 + here->VBICirbi_Vrbi)*delvrbi +                         *(ckt->CKTstate0 + here->VBICirbi_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICirbi_Vbci)*delvbci;                irbphat = *(ckt->CKTstate0 + here->VBICirbp) + *(ckt->CKTstate0 + here->VBICirbp_Vrbp)*delvrbp +                         *(ckt->CKTstate0 + here->VBICirbp_Vbep)*delvbep + *(ckt->CKTstate0 + here->VBICirbp_Vbci)*delvbci;                ibcphat = *(ckt->CKTstate0 + here->VBICibcp) +                          *(ckt->CKTstate0 + here->VBICibcp_Vbcp)*delvbcp;                iccphat = *(ckt->CKTstate0 + here->VBICiccp) + *(ckt->CKTstate0 + here->VBICiccp_Vbep)*delvbep +                          *(ckt->CKTstate0 + here->VBICiccp_Vbci)*delvbci + *(ckt->CKTstate0 + here->VBICiccp_Vbcp)*delvbcp;                /*                 *    bypass if solution has not changed                 */                /* the following collections of if's would be just one                 * if the average compiler could handle it, but many                 * find the expression too complicated, thus the split.                 */                if( (ckt->CKTbypass) &&                        (!(ckt->CKTmode & MODEINITPRED)) &&                        (fabs(delvbei) < (ckt->CKTreltol*MAX(fabs(Vbei),                            fabs(*(ckt->CKTstate0 + here->VBICvbei)))+                            ckt->CKTvoltTol)) )                    if( (fabs(delvbex) < ckt->CKTreltol*MAX(fabs(Vbex),                            fabs(*(ckt->CKTstate0 + here->VBICvbex)))+                            ckt->CKTvoltTol) )                    if( (fabs(delvbci) < ckt->CKTreltol*MAX(fabs(Vbci),                            fabs(*(ckt->CKTstate0 + here->VBICvbci)))+                            ckt->CKTvoltTol) )                    if( (fabs(delvbcx) < ckt->CKTreltol*MAX(fabs(Vbcx),                            fabs(*(ckt->CKTstate0 + here->VBICvbcx)))+                            ckt->CKTvoltTol) )                    if( (fabs(delvbep) < ckt->CKTreltol*MAX(fabs(Vbep),                            fabs(*(ckt->CKTstate0 + here->VBICvbep)))+                            ckt->CKTvoltTol) )                    if( (fabs(delvrci) < ckt->CKTreltol*MAX(fabs(Vrci),                            fabs(*(ckt->CKTstate0 + here->VBICvrci)))+                            ckt->CKTvoltTol) )                    if( (fabs(delvrbi) < ckt->CKTreltol*MAX(fabs(Vrbi),                            fabs(*(ckt->CKTstate0 + here->VBICvrbi)))+                            ckt->CKTvoltTol) )                    if( (fabs(delvrbp) < ckt->CKTreltol*MAX(fabs(Vrbp),                            fabs(*(ckt->CKTstate0 + here->VBICvrbp)))+                            ckt->CKTvoltTol) )                    if( (fabs(delvbcp) < ckt->CKTreltol*MAX(fabs(Vbcp),                            fabs(*(ckt->CKTstate0 + here->VBICvbcp)))+                            ckt->CKTvoltTol) )                    if( (fabs(ibehat-*(ckt->CKTstate0 + here->VBICibe)) <                             ckt->CKTreltol* MAX(fabs(ibehat),                            fabs(*(ckt->CKTstate0 + here->VBICibe)))+                            ckt->CKTabstol) )                    if( (fabs(ibexhat-*(ckt->CKTstate0 + here->VBICibex)) <                             ckt->CKTreltol* MAX(fabs(ibexhat),                            fabs(*(ckt->CKTstate0 + here->VBICibex)))+                            ckt->CKTabstol) )                    if( (fabs(itzfhat-*(ckt->CKTstate0 + here->VBICitzf)) <                             ckt->CKTreltol* MAX(fabs(itzfhat),                            fabs(*(ckt->CKTstate0 + here->VBICitzf)))+                            ckt->CKTabstol) )                    if( (fabs(itzrhat-*(ckt->CKTstate0 + here->VBICitzr)) <                             ckt->CKTreltol* MAX(fabs(itzrhat),                            fabs(*(ckt->CKTstate0 + here->VBICitzr)))+                            ckt->CKTabstol) )                    if( (fabs(ibchat-*(ckt->CKTstate0 + here->VBICibc)) <                             ckt->CKTreltol* MAX(fabs(ibchat),                            fabs(*(ckt->CKTstate0 + here->VBICibc)))+                            ckt->CKTabstol) )                    if( (fabs(ibephat-*(ckt->CKTstate0 + here->VBICibep)) <                             ckt->CKTreltol* MAX(fabs(ibephat),                            fabs(*(ckt->CKTstate0 + here->VBICibep)))+                            ckt->CKTabstol) )                    if( (fabs(ircihat-*(ckt->CKTstate0 + here->VBICirci)) <                             ckt->CKTreltol* MAX(fabs(ircihat),                            fabs(*(ckt->CKTstate0 + here->VBICirci)))+                            ckt->CKTabstol) )                    if( (fabs(irbihat-*(ckt->CKTstate0 + here->VBICirbi)) <                             ckt->CKTreltol* MAX(fabs(irbihat),                            fabs(*(ckt->CKTstate0 + here->VBICirbi)))+                            ckt->CKTabstol) )                    if( (fabs(irbphat-*(ckt->CKTstate0 + here->VBICirbp)) <                             ckt->CKTreltol* MAX(fabs(irbphat),                            fabs(*(ckt->CKTstate0 + here->VBICirbp)))+                            ckt->CKTabstol) )                    if( (fabs(ibcphat-*(ckt->CKTstate0 + here->VBICibcp)) <                             ckt->CKTreltol* MAX(fabs(ibcphat),                            fabs(*(ckt->CKTstate0 + here->VBICibcp)))+                            ckt->CKTabstol) )                    if( (fabs(iccphat-*(ckt->CKTstate0 + here->VBICiccp)) <                             ckt->CKTreltol* MAX(fabs(iccphat),                            fabs(*(ckt->CKTstate0 + here->VBICiccp)))+                            ckt->CKTabstol) ) {                    /*                     * bypassing....                     */                    Vbei = *(ckt->CKTstate0 + here->VBICvbei);                    Vbex = *(ckt->CKTstate0 + here->VBICvbex);                    Vbci = *(ckt->CKTstate0 + here->VBICvbci);                    Vbcx = *(ckt->CKTstate0 + here->VBICvbcx);                    Vbep = *(ckt->CKTstate0 + here->VBICvbep);                    Vrci = *(ckt->CKTstate0 + here->VBICvrci);                    Vrbi = *(ckt->CKTstate0 + here->VBICvrbi);                    Vrbp = *(ckt->CKTstate0 + here->VBICvrbp);                    Vbcp = *(ckt->CKTstate0 + here->VBICvbcp);                    Ibe       = *(ckt->CKTstate0 + here->VBICibe);                    Ibe_Vbei  = *(ckt->CKTstate0 + here->VBICibe_Vbei);                    Ibex      = *(ckt->CKTstate0 + here->VBICibex);                    Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex);                    Itzf      = *(ckt->CKTstate0 + here->VBICitzf);                    Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei);                    Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci);                    Itzr      = *(ckt->CKTstate0 + here->VBICitzr);                    Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci);                    Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei);                    Ibc       = *(ckt->CKTstate0 + here->VBICibc);                    Ibc_Vbci  = *(ckt->CKTstate0 + here->VBICibc_Vbci);                    Ibc_Vbei  = *(ckt->CKTstate0 + here->VBICibc_Vbei);                    Ibep      = *(ckt->CKTstate0 + here->VBICibep);                    Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep);                    Irci      = *(ckt->CKTstate0 + here->VBICirci);                    Irci_Vrci = *(ckt->CKTstate0 + here->VBICirci_Vrci);                    Irci_Vbci = *(ckt->CKTstate0 + here->VBICirci_Vbci);                    Irci_Vbcx = *(ckt->CKTstate0 + here->VBICirci_Vbcx);                    Irbi      = *(ckt->CKTstate0 + here->VBICirbi);                    Irbi_Vrbi = *(ckt->CKTstate0 + here->VBICirbi_Vrbi);                    Irbi_Vbei = *(ckt->CKTstate0 + here->VBICirbi_Vbei);                    Irbi_Vbci = *(ckt->CKTstate0 + here->VBICirbi_Vbci);                    Irbp      = *(ckt->CKTstate0 + here->VBICirbp);                    Irbp_Vrbp = *(ckt->CKTstate0 + here->VBICirbp_Vrbp);                    Irbp_Vbep = *(ckt->CKTstate0 + here->VBICirbp_Vbep);                    Irbp_Vbci = *(ckt->CKTstate0 + here->VBICirbp_Vbci);                    gqbeo     = *(ckt->CKTstate0 + here->VBICgqbeo);                    gqbco     = *(ckt->CKTstate0 + here->VBICgqbco);                    Ibcp      = *(ckt->CKTstate0 + here->VBICibcp);                    Ibcp_Vbcp = *(ckt->CKTstate0 + here->VBICibcp_Vbcp);                    Iccp      = *(ckt->CKTstate0 + here->VBICiccp);                    Iccp_Vbep = *(ckt->CKTstate0 + here->VBICiccp_Vbep);                    Iccp_Vbci = *(ckt->CKTstate0 + here->VBICiccp_Vbci);                    Iccp_Vbcp = *(ckt->CKTstate0 + here->VBICiccp_Vbcp);                    goto load;                }                /*                 *   limit nonlinear branch voltages                 */                ichk1 = 1;                Vbei = DEVpnjlim(Vbei,*(ckt->CKTstate0 + here->VBICvbei),vt,                        here->VBICtVcrit,&icheck);                Vbex = DEVpnjlim(Vbex,*(ckt->CKTstate0 + here->VBICvbex),vt,                        here->VBICtVcrit,&ichk1);                Vbci = DEVpnjlim(Vbci,*(ckt->CKTstate0 + here->VBICvbci),vt,                        here->VBICtVcrit,&ichk2);                Vbcx = DEVpnjlim(Vbcx,*(ckt->CKTstate0 + here->VBICvbcx),vt,                        here->VBICtVcrit,&ichk3);                Vbep = DEVpnjlim(Vbep,*(ckt->CKTstate0 + here->VBICvbep),vt,                        here->VBICtVcrit,&ichk4);                Vbcp = DEVpnjlim(Vbcp,*(ckt->CKTstate0 + here->VBICvbcp),vt,                        here->VBICtVcrit,&ichk5);                if ((ichk1 == 1) || (ichk2 == 1) || (ichk3 == 1) || (ichk4 == 1) || (ichk5 == 1)) icheck=1;            }            /*             *   determine dc current and derivitives             */next1:                  iret = vbic_4T_it_cf_fj(p            ,&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

⌨️ 快捷键说明

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