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

📄 soi3load.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 5 页
字号:
                            -(xfact * (*(ckt->CKTstate2 + here->SOI3vbs)));                    *(ckt->CKTstate0 + here->SOI3vgfs) =                            *(ckt->CKTstate1 + here->SOI3vgfs);                    vgfs = (1+xfact)* (*(ckt->CKTstate1 + here->SOI3vgfs))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3vgfs)));                    *(ckt->CKTstate0 + here->SOI3vgbs) =                            *(ckt->CKTstate1 + here->SOI3vgbs);                    vgbs = (1+xfact)* (*(ckt->CKTstate1 + here->SOI3vgbs))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3vgbs)));                    *(ckt->CKTstate0 + here->SOI3vds) =                            *(ckt->CKTstate1 + here->SOI3vds);                    vds = (1+xfact)* (*(ckt->CKTstate1 + here->SOI3vds))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3vds)));                    *(ckt->CKTstate0 + here->SOI3vbd) =                            *(ckt->CKTstate0 + here->SOI3vbs)-                            *(ckt->CKTstate0 + here->SOI3vds);                    *(ckt->CKTstate0 + here->SOI3deltaT) =                            *(ckt->CKTstate1 + here->SOI3deltaT);                    deltaT = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT))));                       /* need to stop deltaT being -ve */                    /* JimB - 19/5/99 */                    if (here->SOI3numThermalNodes == 0)                    {                      deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0.0;                    }                    if (here->SOI3numThermalNodes == 1)                    {                      deltaT1=deltaT;                      deltaT2=deltaT3=deltaT4=deltaT5=0.0;                    }                    if (here->SOI3numThermalNodes == 2)                    {                      deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1))));                      deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2))));                      deltaT3=deltaT4=deltaT5=0.0;                    }                    if (here->SOI3numThermalNodes == 3)                    {                      deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1))));                      deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2))));                      deltaT3 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT3))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT3))));                      deltaT4=deltaT5=0.0;                    }                    if (here->SOI3numThermalNodes == 4)                    {                      deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1))));                      deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2))));                      deltaT3 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT3))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT3))));                      deltaT4 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT4))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT4))));                      deltaT5=0.0;                    }                    if (here->SOI3numThermalNodes == 5)                    {                      deltaT1 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT1))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT1))));                      deltaT2 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT2))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT2))));                      deltaT3 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT3))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT3))));                      deltaT4 = MAX(0,(1+xfact)* (*(ckt->CKTstate1 + here->SOI3deltaT4))                            -(xfact * (*(ckt->CKTstate2 + here->SOI3deltaT4))));                      deltaT5 =MAX(0,deltaT-deltaT1-deltaT2-deltaT3-deltaT4);                    }                    *(ckt->CKTstate0 + here->SOI3idrain) =                            *(ckt->CKTstate1 + here->SOI3idrain);                    *(ckt->CKTstate0 + here->SOI3cgfgf) =                            *(ckt->CKTstate1 + here->SOI3cgfgf);                    *(ckt->CKTstate0 + here->SOI3cgfd) =                            *(ckt->CKTstate1 + here->SOI3cgfd);                    *(ckt->CKTstate0 + here->SOI3cgfs) =                            *(ckt->CKTstate1 + here->SOI3cgfs);                    *(ckt->CKTstate0 + here->SOI3cgfdeltaT) =                            *(ckt->CKTstate1 + here->SOI3cgfdeltaT);                    *(ckt->CKTstate0 + here->SOI3cgfgb) =                            *(ckt->CKTstate1 + here->SOI3cgfgb);                    *(ckt->CKTstate0 + here->SOI3csgf) =                            *(ckt->CKTstate1 + here->SOI3csgf);                    *(ckt->CKTstate0 + here->SOI3csd) =                            *(ckt->CKTstate1 + here->SOI3csd);                    *(ckt->CKTstate0 + here->SOI3css) =                            *(ckt->CKTstate1 + here->SOI3css);                    *(ckt->CKTstate0 + here->SOI3csdeltaT) =                            *(ckt->CKTstate1 + here->SOI3csdeltaT);                    *(ckt->CKTstate0 + here->SOI3csgb) =                            *(ckt->CKTstate1 + here->SOI3csgb);                    *(ckt->CKTstate0 + here->SOI3cdgf) =                            *(ckt->CKTstate1 + here->SOI3cdgf);                    *(ckt->CKTstate0 + here->SOI3cdd) =                            *(ckt->CKTstate1 + here->SOI3cdd);                    *(ckt->CKTstate0 + here->SOI3cds) =                            *(ckt->CKTstate1 + here->SOI3cds);                    *(ckt->CKTstate0 + here->SOI3cddeltaT) =                            *(ckt->CKTstate1 + here->SOI3cddeltaT);                    *(ckt->CKTstate0 + here->SOI3cdgb) =                            *(ckt->CKTstate1 + here->SOI3cdgb);                    *(ckt->CKTstate0 + here->SOI3cgbgf) =                            *(ckt->CKTstate1 + here->SOI3cgbgf);                    *(ckt->CKTstate0 + here->SOI3cgbd) =                            *(ckt->CKTstate1 + here->SOI3cgbd);                    *(ckt->CKTstate0 + here->SOI3cgbs) =                            *(ckt->CKTstate1 + here->SOI3cgbs);                    *(ckt->CKTstate0 + here->SOI3cgbdeltaT) =                            *(ckt->CKTstate1 + here->SOI3cgbdeltaT);                    *(ckt->CKTstate0 + here->SOI3cgbgb) =                            *(ckt->CKTstate1 + here->SOI3cgbgb);                    *(ckt->CKTstate0 + here->SOI3cBJTbsbs) =                            *(ckt->CKTstate1 + here->SOI3cBJTbsbs);                    *(ckt->CKTstate0 + here->SOI3cBJTbsdeltaT) =                            *(ckt->CKTstate1 + here->SOI3cBJTbsdeltaT);                    *(ckt->CKTstate0 + here->SOI3cBJTbdbd) =                            *(ckt->CKTstate1 + here->SOI3cBJTbdbd);                    *(ckt->CKTstate0 + here->SOI3cBJTbddeltaT) =                            *(ckt->CKTstate1 + here->SOI3cBJTbddeltaT);                }                else                {#endif /* PREDICTOR */                    /* general iteration */                    vbs = model->SOI3type * (                        *(ckt->CKTrhsOld+here->SOI3bNode) -                        *(ckt->CKTrhsOld+here->SOI3sNodePrime));                    vgfs = model->SOI3type * (                        *(ckt->CKTrhsOld+here->SOI3gfNode) -                        *(ckt->CKTrhsOld+here->SOI3sNodePrime));                    vgbs = model->SOI3type * (                        *(ckt->CKTrhsOld+here->SOI3gbNode) -                        *(ckt->CKTrhsOld+here->SOI3sNodePrime));                    vds = model->SOI3type * (                        *(ckt->CKTrhsOld+here->SOI3dNodePrime) -                        *(ckt->CKTrhsOld+here->SOI3sNodePrime));                    deltaT = MAX(0,*(ckt->CKTrhsOld+here->SOI3toutNode));                     /* voltage deltaT is V(tout) wrt ground                        and shoule be positive *//* the next lot are needed for the (extra) thermal capacitances */						  /* JimB - 19/5/99 */                    if (here->SOI3numThermalNodes == 0)                    {                       deltaT1=deltaT2=deltaT3=deltaT4=deltaT5=0;                    }                    if (here->SOI3numThermalNodes == 1)                    {                       deltaT1=deltaT;                       deltaT2=deltaT3=deltaT4=deltaT5=0;                    }                    if (here->SOI3numThermalNodes == 2)                    {                       deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node));                       deltaT1 = deltaT - deltaT2;                       deltaT3=deltaT4=deltaT5=0;                    }                    if (here->SOI3numThermalNodes == 3)                    {                       deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node));                    	  deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3);                    	  deltaT1 = deltaT - deltaT2 - deltaT3;                       deltaT4=deltaT5=0;                    }                    if (here->SOI3numThermalNodes == 4)                    {                       deltaT4 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout3Node));                    	  deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node) - deltaT4);                    	  deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3 - deltaT4);                    	  deltaT1 = deltaT - deltaT2 - deltaT3 - deltaT4;                       deltaT5=0;                    }                    if (here->SOI3numThermalNodes == 5)                    {                       deltaT5 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout4Node));                       deltaT4 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout3Node) - deltaT5);                    	  deltaT3 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout2Node) - deltaT4 - deltaT5);                    	  deltaT2 = MAX(0,*(ckt->CKTrhsOld+here->SOI3tout1Node) - deltaT3 - deltaT4 - deltaT5);                    	  deltaT1 = deltaT - deltaT2 - deltaT3 - deltaT4 - deltaT5;                    }#ifndef PREDICTOR                }#endif /* PREDICTOR */                /* now some common crunching for some more useful quantities */                /* bloody useful in our case */                vbd=vbs-vds;                vdb=-vbd;                vsb=-vbs;                                vgfd=vgfs-vds;                vgbd=vgbs-vds;                vgbb=vgbs-vbs;                vgfdo = *(ckt->CKTstate0 + here->SOI3vgfs) -                        *(ckt->CKTstate0 + here->SOI3vds);                vgbdo = *(ckt->CKTstate0 + here->SOI3vgbs) -                        *(ckt->CKTstate0 + here->SOI3vds);                delvbs = vbs - *(ckt->CKTstate0 + here->SOI3vbs);                delvbd = vbd - *(ckt->CKTstate0 + here->SOI3vbd);                delvgfs = vgfs - *(ckt->CKTstate0 + here->SOI3vgfs);                delvgbs = vgbs - *(ckt->CKTstate0 + here->SOI3vgbs);                delvds = vds - *(ckt->CKTstate0 + here->SOI3vds);                delvgfd = vgfd-vgfdo;                delvgbd = vgbd-vgbdo;                deldeltaT = deltaT - *(ckt->CKTstate0 + here->SOI3deltaT);               /* these are needed for convergence testing */               /* we're keeping these the same as convergence on                  vgfs, vbs, vbd, vgbs, deltaT is equiv to conv.                  on vgfb, vsb, vdb, vgb_b, deltaT         */                if (here->SOI3mode >= 0) {  /* normal */                    idhat=                        here->SOI3id-                        here->SOI3gbd * delvbd -                        here->SOI3gbdT * deldeltaT +  /* for -ibd bit of id */                        (here->SOI3gmbs +                        here->SOI3gMmbs) * delvbs +                        (here->SOI3gmf +                        here->SOI3gMmf) * delvgfs +                        (here->SOI3gmb +                        here->SOI3gMmb) * delvgbs +                        (here->SOI3gds +                        here->SOI3gMd) * delvds +                        (here->SOI3gt +                        here->SOI3gMdeltaT) * deldeltaT +                        here->SOI3gBJTdb_bs * delvbs +                        here->SOI3gBJTdb_deltaT * deldeltaT;                    ibhat=                        here->SOI3ibs +                        here->SOI3ibd +                        here->SOI3gbd * delvbd +                        here->SOI3gbdT * deldeltaT +                        here->SOI3gbs * delvbs +                        here->SOI3gbsT * deldeltaT -                        here->SOI3iMdb -                        here->SOI3gMmbs * delvbs -                        here->SOI3gMmf * delvgfs -                        here->SOI3gMmb * delvgbs -                        here->SOI3gMd * delvds -                        here->SOI3gMdeltaT * deldeltaT -                        here->SOI3iBJTsb -                        here->SOI3gBJTsb_bd * delvbd -                        here->SOI3gBJTsb_deltaT * deldeltaT -                        here->SOI3iBJTdb -                        here->SOI3gBJTdb_bs * delvbs -                        here->SOI3gBJTdb_deltaT * deldeltaT;                } else {                   /* A over T */                    idhat=                        here->SOI3id -                        ( here->SOI3gbd +                        here->SOI3gmbs) * delvbd -                        (here->SOI3gmf) * delvgfd -                        (here->SOI3gmb) * delvgbd +                        (here->SOI3gds) * delvds -                        (here->SOI3gt +                         here->SOI3gbdT) * deldeltaT +                        here->SOI3gBJTdb_bs * delvbs +                        here->SOI3gBJTdb_deltaT * deldeltaT;                    ibhat=                        here->SOI3ibs +                        here->SOI3ibd +                        here->SOI3gbd * delvbd +                        here->SOI3gbdT * deldeltaT +                        here->SOI3gbs * delvbs +                        here->SOI3gbsT * deldeltaT -                        here->SOI3iMsb -                        here->SOI3gMmbs * delvbd -                        here->SOI3gMmf * delvgfd -                        here->SOI3gMmb * delvgbd +                        here->SOI3gMd * delvds -   /* gMd should go with vsd */                        here->SOI3gMdeltaT * deldeltaT -                        here->SOI3iBJTsb -                        here->SOI3gBJTsb_bd * delvbd -                        here->SOI3gBJTsb_deltaT * deldeltaT -                        here->SOI3iBJTdb -                        here->SOI3gBJTdb_bs * delvbs -                        here->SOI3gBJTdb_deltaT * deldeltaT;                }/* thermal current source comparator */                iPthat =here->SOI3iPt +                        here->SOI3gPmbs * delvbs +                        here->SOI3gPmf  * delvgfs +                        here->SOI3gPmb  * delvgbs +                        here->SOI3gPds  * delvds * here->SOI3mode +                        here->SOI3gPdT  * deldeltaT;#ifndef NOBYPASS                /* now lets see if we can bypass (ugh) */                /* the following mess should be one if statement, but

⌨️ 快捷键说明

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