📄 bjtdisto.c
字号:
/* 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 + -