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

📄 bjtdisto.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
        itemp = DFi3F1( here->ibb_x2,        here->ibb_y2,        here->ibb_z2,        here->ibb_xy,        here->ibb_yz,        here->ibb_xz,        here->ibb_x3,        here->ibb_y3,        here->ibb_z3,        here->ibb_x2y,        here->ibb_x2z,        here->ibb_xy2,        here->ibb_y2z,        here->ibb_xz2,        here->ibb_yz2,        here->ibb_xyz,        r1h1x,        i1h1x,        r1h1y,        i1h1y,        r1h1z,        i1h1z,        r2h11x,        i2h11x,        r2h11y,        i2h11y,        r2h11z,        i2h11z);        *(ckt->CKTrhs + here->BJTbaseNode) -= temp;        *(ckt->CKTirhs + here->BJTbaseNode) -= itemp;        *(ckt->CKTrhs + here->BJTbasePrimeNode) += temp;        *(ckt->CKTirhs + here->BJTbasePrimeNode) += itemp;      }      /* ibb term over */      /* loading qbe term */      /* x = vbe, y = vbc, z not used */      /* (have to multiply by j omega for charge storage         * elements to get the current)        */      temp = - ckt->CKTomega*          DFi3F1( here->qbe_x2,      here->qbe_y2,      0.0,      here->qbe_xy,      0.0,      0.0,      here->qbe_x3,      here->qbe_y3,      0.0,      here->qbe_x2y,      0.0,      here->qbe_xy2,      0.0,      0.0,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r2h11x,      i2h11x,      r2h11y,      i2h11y,      0.0,      0.0);      itemp = ckt->CKTomega*          DFn3F1( here->qbe_x2,      here->qbe_y2,      0.0,      here->qbe_xy,      0.0,      0.0,      here->qbe_x3,      here->qbe_y3,      0.0,      here->qbe_x2y,      0.0,      here->qbe_xy2,      0.0,      0.0,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r2h11x,      i2h11x,      r2h11y,      i2h11y,      0.0,      0.0);      *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp;      /* qbe term over */      /* loading qbx term */      /* z = vbx= vb - vcPrime */      r1h1z = r1h1z + r1h1y;      i1h1z = i1h1z + i1h1y;      r2h11z = r2h11z + r2h11y;      i2h11z = i2h11z + i2h11y;#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))();#endif      temp = - ckt->CKTomega *          D1i3F1(here->capbx2,      here->capbx3,      r1h1z,      i1h1z,      r2h11z,      i2h11z);      itemp = ckt->CKTomega *          D1n3F1(here->capbx2,      here->capbx3,      r1h1z,      i1h1z,      r2h11z,      i2h11z);#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))() - time;printf("Time for D1n3F1: %g seconds \n", time);#endif      *(ckt->CKTrhs + here->BJTbaseNode) -= temp;      *(ckt->CKTirhs + here->BJTbaseNode) -= itemp;      *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp;      /* qbx term over */      /* loading qbc term */      temp = - ckt->CKTomega *          D1i3F1(here->capbc2,      here->capbc3,      r1h1y,      i1h1y,      r2h11y,      i2h11y);      itemp = ckt->CKTomega *          D1n3F1(here->capbc2,      here->capbc3,      r1h1y,      i1h1y,      r2h11y,      i2h11y);      *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp;      /* qbc term over */      /* loading qsc term */      /* z = vsc */      r1h1z = *(job->r1H1ptr + (here->BJTsubstNode)) -          *(job->r1H1ptr + (here->BJTcolPrimeNode));      i1h1z = *(job->i1H1ptr + (here->BJTsubstNode)) -          *(job->i1H1ptr + (here->BJTcolPrimeNode));      r2h11z = *(job->r2H11ptr + (here->BJTsubstNode)) -          *(job->r2H11ptr + (here->BJTcolPrimeNode));      i2h11z = *(job->i2H11ptr + (here->BJTsubstNode)) -          *(job->i2H11ptr + (here->BJTcolPrimeNode));      temp = - ckt->CKTomega *          D1i3F1(here->capsc2,      here->capsc3,      r1h1z,      i1h1z,      r2h11z,      i2h11z);      itemp = ckt->CKTomega *          D1n3F1(here->capsc2,      here->capsc3,      r1h1z,      i1h1z,      r2h11z,      i2h11z);      *(ckt->CKTrhs + here->BJTsubstNode) -= temp;      *(ckt->CKTirhs + here->BJTsubstNode) -= itemp;      *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp;      /* qsc term over */      break;    case D_F1PF2:      /* ic term */      temp = DFnF12( here->ic_x2,      here->ic_y2,      here->ic_w2,      here->ic_xy,      here->ic_yw,      here->ic_xw,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      r1h1z,      i1h1z,      r1h2x,      i1h2x,      r1h2y,      i1h2y,      r1h2z,      i1h2z);      itemp = DFiF12( here->ic_x2,      here->ic_y2,      here->ic_w2,      here->ic_xy,      here->ic_yw,      here->ic_xw,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      r1h1z,      i1h1z,      r1h2x,      i1h2x,      r1h2y,      i1h2y,      r1h2z,      i1h2z);      *(ckt->CKTrhs + here->BJTcolPrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp;      /* finish ic term */      /* loading ib term */      /* x and y still the same */#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))();#endif      temp = DFnF12( here->ib_x2,      here->ib_y2,      0.0,      here->ib_xy,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r1h2x,      i1h2x,      r1h2y,      i1h2y,      0.0,      0.0);      itemp = DFiF12( here->ib_x2,      here->ib_y2,      0.0,      here->ib_xy,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r1h2x,      i1h2x,      r1h2y,      i1h2y,      0.0,      0.0);#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))() - time;printf("Time for DFnF12: %g seconds \n", time);#endif      *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp;      /* ib term over */      /* loading ibb term */      if ( !((model->BJTminBaseResist == 0.0) &&          (model->BJTbaseResist == model->BJTminBaseResist))) {        /* now x = vbe, y = vbc, z = vbb */        r1h1z = *(job->r1H1ptr + (here->BJTbaseNode)) -            *(job->r1H1ptr + (here->BJTbasePrimeNode));        i1h1z = *(job->i1H1ptr + (here->BJTbaseNode)) -            *(job->i1H1ptr + (here->BJTbasePrimeNode));        r1h2z = *(job->r1H2ptr + (here->BJTbaseNode)) -            *(job->r1H2ptr + (here->BJTbasePrimeNode));        i1h2z = *(job->i1H2ptr + (here->BJTbaseNode)) -            *(job->i1H2ptr + (here->BJTbasePrimeNode));        temp = DFnF12( here->ibb_x2,        here->ibb_y2,        here->ibb_z2,        here->ibb_xy,        here->ibb_yz,        here->ibb_xz,        r1h1x,        i1h1x,        r1h1y,        i1h1y,        r1h1z,        i1h1z,        r1h2x,        i1h2x,        r1h2y,        i1h2y,        r1h2z,        i1h2z);        itemp = DFiF12( here->ibb_x2,        here->ibb_y2,        here->ibb_z2,        here->ibb_xy,        here->ibb_yz,        here->ibb_xz,        r1h1x,        i1h1x,        r1h1y,        i1h1y,        r1h1z,        i1h1z,        r1h2x,        i1h2x,        r1h2y,        i1h2y,        r1h2z,        i1h2z);        *(ckt->CKTrhs + here->BJTbaseNode) -= temp;        *(ckt->CKTirhs + here->BJTbaseNode) -= itemp;        *(ckt->CKTrhs + here->BJTbasePrimeNode) += temp;        *(ckt->CKTirhs + here->BJTbasePrimeNode) += itemp;      }      /* ibb term over */      /* loading qbe term */      /* x = vbe, y = vbc, z not used */      /* (have to multiply by j omega for charge storage         * elements - to get the current)        */      temp = - ckt->CKTomega*          DFiF12( here->qbe_x2,      here->qbe_y2,      0.0,      here->qbe_xy,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r1h2x,      i1h2x,      r1h2y,      i1h2y,      0.0,      0.0);      itemp = ckt->CKTomega*          DFnF12( here->qbe_x2,      here->qbe_y2,      0.0,      here->qbe_xy,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r1h2x,      i1h2x,      r1h2y,      i1h2y,      0.0,      0.0);      *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp;      /* qbe term over */      /* loading qbx term */      /* z = vbx= vb - vcPrime */      r1h1z = r1h1z + r1h1y;      i1h1z = i1h1z + i1h1y;      r1h2z = r1h2z + r1h2y;      i1h2z = i1h2z + i1h2y;#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))();#endif      temp = - ckt->CKTomega *          D1iF12(here->capbx2,      r1h1z,      i1h1z,      r1h2z,      i1h2z);      itemp = ckt->CKTomega *          D1nF12(here->capbx2,      r1h1z,      i1h1z,      r1h2z,      i1h2z);#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))() - time;printf("Time for D1nF12: %g seconds \n", time);#endif      *(ckt->CKTrhs + here->BJTbaseNode) -= temp;      *(ckt->CKTirhs + here->BJTbaseNode) -= itemp;      *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp;      /* qbx term over */      /* loading qbc term */      temp = - ckt->CKTomega *          D1iF12(here->capbc2,      r1h1y,      i1h1y,      r1h2y,      i1h2y);      itemp = ckt->CKTomega *          D1nF12(here->capbc2,      r1h1y,      i1h1y,      r1h2y,      i1h2y);      *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp;      /* qbc term over */      /* loading qsc term */      /* z = vsc */      r1h1z = *(job->r1H1ptr + (here->BJTsubstNode)) -          *(job->r1H1ptr + (here->BJTcolPrimeNode));      i1h1z = *(job->i1H1ptr + (here->BJTsubstNode)) -          *(job->i1H1ptr + (here->BJTcolPrimeNode));      r1h2z = *(job->r1H2ptr + (here->BJTsubstNode)) -          *(job->r1H2ptr + (here->BJTcolPrimeNode));      i1h2z = *(job->i1H2ptr + (here->BJTsubstNode)) -          *(job->i1H2ptr + (here->BJTcolPrimeNode));      temp = - ckt->CKTomega *          D1iF12(here->capsc2,      r1h1z,      i1h1z,      r1h2z,      i1h2z);      itemp = ckt->CKTomega *          D1nF12(here->capsc2,      r1h1z,      i1h1z,      r1h2z,      i1h2z);      *(ckt->CKTrhs + here->BJTsubstNode) -= temp;      *(ckt->CKTirhs + here->BJTsubstNode) -= itemp;      *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp;      /* qsc term over */      break;    case D_F1MF2:      /* ic term */      temp = DFnF12( here->ic_x2,      here->ic_y2,      here->ic_w2,      here->ic_xy,      here->ic_yw,      here->ic_xw,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      r1h1z,      i1h1z,      r1hm2x,      i1hm2x,      r1hm2y,      i1hm2y,      r1hm2z,      i1hm2z);      itemp = DFiF12( here->ic_x2,      here->ic_y2,      here->ic_w2,      here->ic_xy,      here->ic_yw,      here->ic_xw,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      r1h1z,      i1h1z,      r1hm2x,      i1hm2x,      r1hm2y,      i1hm2y,      r1hm2z,      i1hm2z);      *(ckt->CKTrhs + here->BJTcolPrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp;      /* finish ic term */      /* loading ib term */      /* x and y still the same */      temp = DFnF12( here->ib_x2,      here->ib_y2,      0.0,      here->ib_xy,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r1hm2x,      i1hm2x,      r1hm2y,      i1hm2y,      0.0,      0.0);      itemp = DFiF12( here->ib_x2,      here->ib_y2,      0.0,      here->ib_xy,      0.0,      0.0,      r1h1x,      i1h1x,      r1h1y,      i1h1y,      0.0,      0.0,      r1hm2x,      i1hm2x,      r1hm2y,      i1hm2y,      0.0,      0.0);      *(ckt->CKTrhs + here->BJTbasePrimeNode) -= temp;      *(ckt->CKTirhs + here->BJTbasePrimeNode) -= itemp;      *(ckt->CKTrhs + here->BJTemitPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTemitPrimeNode) += itemp;

⌨️ 快捷键说明

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