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

📄 bjtdisto.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 3 页
字号:
					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_SMALLTIMES		    time = (*(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_SMALLTIMES		    time = (*(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_SMALLTIMES		    time = (*(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_SMALLTIMES		    time = (*(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_SMALLTIMES		    time = (*(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_SMALLTIMES		    time = (*(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;		    /* ib term over */		    /* loading ibb term */

⌨️ 快捷键说明

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