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

📄 bjtdisto.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
      /* 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));        r1hm2z = *(job->r1H2ptr + (here->BJTbaseNode)) -            *(job->r1H2ptr + (here->BJTbasePrimeNode));        i1hm2z = *(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,        r1hm2x,        i1hm2x,        r1hm2y,        i1hm2y,        r1hm2z,        i1hm2z);        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,        r1hm2x,        i1hm2x,        r1hm2y,        i1hm2y,        r1hm2z,        i1hm2z);        *(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,      r1hm2x,      i1hm2x,      r1hm2y,      i1hm2y,      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,      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;      /* qbe term over */      /* loading qbx term */      /* z = vbx= vb - vcPrime */      r1h1z = r1h1z + r1h1y;      i1h1z = i1h1z + i1h1y;      r1hm2z = r1hm2z + r1hm2y;      i1hm2z = i1hm2z + i1hm2y;      temp = - ckt->CKTomega *          D1iF12(here->capbx2,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z);      itemp = ckt->CKTomega *          D1nF12(here->capbx2,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z);      *(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,      r1hm2y,      i1hm2y);      itemp = ckt->CKTomega *          D1nF12(here->capbc2,      r1h1y,      i1h1y,      r1hm2y,      i1hm2y);      *(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));      r1hm2z = *(job->r1H2ptr + (here->BJTsubstNode)) -          *(job->r1H2ptr + (here->BJTcolPrimeNode));      i1hm2z = *(job->i1H2ptr + (here->BJTsubstNode)) -          *(job->i1H2ptr + (here->BJTcolPrimeNode));      temp = - ckt->CKTomega *          D1iF12(here->capsc2,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z);      itemp = ckt->CKTomega *          D1nF12(here->capsc2,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z);      *(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_2F1MF2:      /* ic term */      {        pass.cxx =   here->ic_x2;        pass.cyy =   here->ic_y2;        pass.czz =   here->ic_w2;        pass.cxy =   here->ic_xy;        pass.cyz =   here->ic_yw;        pass.cxz =   here->ic_xw;        pass.cxxx =   here->ic_x3;        pass.cyyy =   here->ic_y3;        pass.czzz =   here->ic_w3;        pass.cxxy =   here->ic_x2y;        pass.cxxz =   here->ic_x2w;        pass.cxyy =   here->ic_xy2;        pass.cyyz =   here->ic_y2w;        pass.cxzz =   here->ic_xw2;        pass.cyzz =   here->ic_yw2;        pass.cxyz =   here->ic_xyw;        pass.r1h1x =   r1h1x;        pass.i1h1x =   i1h1x;        pass.r1h1y =   r1h1y;        pass.i1h1y =   i1h1y;        pass.r1h1z =   r1h1z;        pass.i1h1z =   i1h1z;        pass.r1h2x =   r1hm2x;        pass.i1h2x =   i1hm2x;        pass.r1h2y =   r1hm2y;        pass.i1h2y =   i1hm2y;        pass.r1h2z =   r1hm2z;        pass.i1h2z =   i1hm2z;        pass.r2h11x =   r2h11x;        pass.i2h11x =  i2h11x;        pass.r2h11y =   r2h11y;        pass.i2h11y =  i2h11y;        pass.r2h11z =   r2h11z;        pass.i2h11z =  i2h11z;        pass.h2f1f2x =   r2h1m2x;        pass.ih2f1f2x =  i2h1m2x;        pass.h2f1f2y =   r2h1m2y;        pass.ih2f1f2y =  i2h1m2y;        pass.h2f1f2z =  r2h1m2z;        pass.ih2f1f2z =   i2h1m2z;#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))();#endif        temp = DFn2F12(&pass);        itemp = DFi2F12(&pass);#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))() - time;printf("Time for DFn2F12: %g seconds \n", time);#endif      }      *(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 */      {        pass.cxx = here->ib_x2;        pass.cyy = here->ib_y2;        pass.czz = 0.0;        pass.cxy = here->ib_xy;        pass.cyz = 0.0;        pass.cxz = 0.0;        pass.cxxx = here->ib_x3;        pass.cyyy = here->ib_y3;        pass.czzz = 0.0;        pass.cxxy = here->ib_x2y;        pass.cxxz = 0.0;        pass.cxyy = here->ib_xy2;        pass.cyyz = 0.0;        pass.cxzz = 0.0;        pass.cyzz = 0.0;        pass.cxyz = 0.0;        pass.r1h1x = r1h1x;        pass.i1h1x = i1h1x;        pass.r1h1y = r1h1y;        pass.i1h1y = i1h1y;        pass.r1h1z = 0.0;        pass.i1h1z = 0.0;        pass.r1h2x = r1hm2x;        pass.i1h2x = i1hm2x;        pass.r1h2y = r1hm2y;        pass.i1h2y = i1hm2y;        pass.r1h2z = 0.0;        pass.i1h2z = 0.0;        pass.r2h11x = r2h11x;        pass.i2h11x = i2h11x;        pass.r2h11y = r2h11y;        pass.i2h11y = i2h11y;        pass.r2h11z = 0.0;        pass.i2h11z = 0.0;        pass.h2f1f2x = r2h1m2x;        pass.ih2f1f2x = i2h1m2x;        pass.h2f1f2y = r2h1m2y;        pass.ih2f1f2y = i2h1m2y;        pass.h2f1f2z = 0.0;        pass.ih2f1f2z = 0.0;        temp = DFn2F12(&pass);        itemp = DFi2F12(&pass);      }      *(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));        r1hm2z = *(job->r1H2ptr + (here->BJTbaseNode)) -            *(job->r1H2ptr + (here->BJTbasePrimeNode));        i1hm2z = -(*(job->i1H2ptr + (here->BJTbaseNode)) -            *(job->i1H2ptr + (here->BJTbasePrimeNode)));        r2h11z = *(job->r2H11ptr + (here->BJTbaseNode)) -            *(job->r2H11ptr + (here->BJTbasePrimeNode));        i2h11z = *(job->i2H11ptr + (here->BJTbaseNode)) -            *(job->i2H11ptr + (here->BJTbasePrimeNode));        r2h1m2z = *(job->r2H1m2ptr + (here->BJTbaseNode)) -            *(job->r2H1m2ptr + (here->BJTbasePrimeNode));        i2h1m2z = *(job->i2H1m2ptr + (here->BJTbaseNode)) -            *(job->i2H1m2ptr + (here->BJTbasePrimeNode));        {          pass.cxx = here->ibb_x2;          pass.cyy = here->ibb_y2;          pass.czz = here->ibb_z2;          pass.cxy = here->ibb_xy;          pass.cyz = here->ibb_yz;          pass.cxz = here->ibb_xz;          pass.cxxx = here->ibb_x3;          pass.cyyy = here->ibb_y3;          pass.czzz = here->ibb_z3;          pass.cxxy = here->ibb_x2y;          pass.cxxz = here->ibb_x2z;          pass.cxyy = here->ibb_xy2;          pass.cyyz = here->ibb_y2z;          pass.cxzz = here->ibb_xz2;          pass.cyzz = here->ibb_yz2;          pass.cxyz = here->ibb_xyz;          pass.r1h1x = r1h1x;          pass.i1h1x = i1h1x;          pass.r1h1y = r1h1y;          pass.i1h1y = i1h1y;          pass.r1h1z = r1h1z;          pass.i1h1z = i1h1z;          pass.r1h2x = r1hm2x;          pass.i1h2x = i1hm2x;          pass.r1h2y = r1hm2y;          pass.i1h2y = i1hm2y;          pass.r1h2z = r1hm2z;          pass.i1h2z = i1hm2z;          pass.r2h11x = r2h11x;          pass.i2h11x = i2h11x;          pass.r2h11y = r2h11y;          pass.i2h11y = i2h11y;          pass.r2h11z = r2h11z;          pass.i2h11z = i2h11z;          pass.h2f1f2x = r2h1m2x;          pass.ih2f1f2x = i2h1m2x;          pass.h2f1f2y = r2h1m2y;          pass.ih2f1f2y = i2h1m2y;          pass.h2f1f2z = r2h1m2z;          pass.ih2f1f2z = i2h1m2z;          temp = DFn2F12(&pass);          itemp = DFi2F12(&pass);        }        *(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)        */      {        pass.cxx = here->qbe_x2;        pass.cyy = here->qbe_y2;        pass.czz = 0.0;        pass.cxy = here->qbe_xy;        pass.cyz = 0.0;        pass.cxz = 0.0;        pass.cxxx = here->qbe_x3;        pass.cyyy = here->qbe_y3;        pass.czzz = 0.0;        pass.cxxy = here->qbe_x2y;        pass.cxxz = 0.0;        pass.cxyy = here->qbe_xy2;        pass.cyyz = 0.0;        pass.cxzz = 0.0;        pass.cyzz = 0.0;        pass.cxyz = 0.0;        pass.r1h1x = r1h1x;        pass.i1h1x = i1h1x;        pass.r1h1y = r1h1y;        pass.i1h1y = i1h1y;        pass.r1h1z = 0.0;        pass.i1h1z = 0.0;        pass.r1h2x = r1hm2x;        pass.i1h2x = i1hm2x;        pass.r1h2y = r1hm2y;        pass.i1h2y = i1hm2y;        pass.r1h2z = 0.0;        pass.i1h2z = 0.0;        pass.r2h11x = r2h11x;        pass.i2h11x = i2h11x;        pass.r2h11y = r2h11y;        pass.i2h11y = i2h11y;        pass.r2h11z = 0.0;        pass.i2h11z = 0.0;        pass.h2f1f2x = r2h1m2x;        pass.ih2f1f2x = i2h1m2x;        pass.h2f1f2y = r2h1m2y;        pass.ih2f1f2y = i2h1m2y;        pass.h2f1f2z = 0.0;        pass.ih2f1f2z = 0.0;        temp = - ckt->CKTomega*            DFi2F12(&pass);        itemp = ckt->CKTomega*            DFn2F12(&pass);      }      *(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;      r1hm2z = r1hm2z + r1hm2y;      i1hm2z = i1hm2z + i1hm2y;      r2h11z = r2h11z + r2h11y;      i2h11z = i2h11z + i2h11y;      r2h1m2z = r2h1m2z + r2h1m2y;      i2h1m2z = i2h1m2z + i2h1m2y;#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))();#endif      temp = - ckt->CKTomega *          D1i2F12(here->capbx2,      here->capbx3,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z,      r2h11z,      i2h11z,      r2h1m2z,      i2h1m2z);      itemp = ckt->CKTomega *          D1n2F12(here->capbx2,      here->capbx3,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z,      r2h11z,      i2h11z,      r2h1m2z,      i2h1m2z);#ifdef D_DBG_SMALLTIMEStime = (*(SPfrontEnd->IFseconds))() - time;printf("Time for D1n2F12: %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 *          D1i2F12(here->capbc2,      here->capbc3,      r1h1y,      i1h1y,      r1hm2y,      i1hm2y,      r2h11y,      i2h11y,      r2h1m2y,      i2h1m2y);      itemp = ckt->CKTomega *          D1n2F12(here->capbc2,      here->capbc3,      r1h1y,      i1h1y,      r1hm2y,      i1hm2y,      r2h11y,      i2h11y,      r2h1m2y,      i2h1m2y);      *(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));      r1hm2z = *(job->r1H2ptr + (here->BJTsubstNode)) -          *(job->r1H2ptr + (here->BJTcolPrimeNode));      i1hm2z = -(*(job->i1H2ptr + (here->BJTsubstNode)) -          *(job->i1H2ptr + (here->BJTcolPrimeNode)));      r2h11z = *(job->r2H11ptr + (here->BJTsubstNode)) -          *(job->r2H11ptr + (here->BJTcolPrimeNode));      i2h11z = *(job->i2H11ptr + (here->BJTsubstNode)) -          *(job->i2H11ptr + (here->BJTcolPrimeNode));      r2h1m2z = *(job->r2H1m2ptr + (here->BJTsubstNode)) -          *(job->r2H1m2ptr + (here->BJTcolPrimeNode));      i2h1m2z = *(job->i2H1m2ptr + (here->BJTsubstNode)) -          *(job->i2H1m2ptr + (here->BJTcolPrimeNode));      temp = - ckt->CKTomega *          D1i2F12(here->capsc2,      here->capsc3,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z,      r2h11z,      i2h11z,      r2h1m2z,      i2h1m2z);      itemp = ckt->CKTomega *          D1n2F12(here->capsc2,      here->capsc3,      r1h1z,      i1h1z,      r1hm2z,      i1hm2z,      r2h11z,      i2h11z,      r2h1m2z,      i2h1m2z);      *(ckt->CKTrhs + here->BJTsubstNode) -= temp;      *(ckt->CKTirhs + here->BJTsubstNode) -= itemp;      *(ckt->CKTrhs + here->BJTcolPrimeNode) += temp;      *(ckt->CKTirhs + here->BJTcolPrimeNode) += itemp;      /* qsc term over */      break;    default:;	;    }  }}return(OK);}  else    return(E_BADPARM);}

⌨️ 快捷键说明

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