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

📄 txlload.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 2 页
字号:
      q = pool_vi_txl;      pool_vi_txl = pool_vi_txl->pool;      return(q);   } else       return((VI_list_txl *) tmalloc (sizeof (VI_list_txl)));}static void free_vi_txl(VI_list_txl *q){   q->pool = pool_vi_txl;   pool_vi_txl = q;}static int add_new_vi_txl(TXLinstance *here, CKTcircuit *ckt, int time){   VI_list_txl *vi;   TXLine *tx, *tx2;   tx = here->txline;   tx2 = here->txline2;   vi = new_vi_txl();   vi->time = time;   tx->vi_tail->next = vi;   tx2->vi_tail->next = vi;   vi->next = NULL;   tx->vi_tail = vi;   tx2->vi_tail = vi;      vi->v_i = *(ckt->CKTrhsOld + here->TXLposNode);   vi->v_o = *(ckt->CKTrhsOld + here->TXLnegNode);   vi->i_i = *(ckt->CKTrhsOld + here->TXLibr1);   vi->i_o = *(ckt->CKTrhsOld + here->TXLibr2);   return(1);}static int get_pvs_vi_txl(int t1, int t2, TXLine *tx, double *v1_i, double *v2_i, double *i1_i, double *i2_i,                double *v1_o, double *v2_o, double *i1_o, double *i2_o){   double ta, tb;    VI_list_txl *vi, *vi1;   double f;   int ext = 0;   ta = t1 - tx->taul;   tb = t2 - tx->taul;   if (tb <= 0) {      *v1_i = *v2_i = tx->dc1;       *v2_o = *v1_o = tx->dc2;      *i1_i = *i2_i = *i1_o = *i2_o = 0;      return(ext);   }   if (ta <= 0) {      *i1_i = *i1_o = 0.0;       *v1_i = tx->dc1;      *v1_o = tx->dc2;       vi1 = tx->vi_head;      vi = vi1->next;   } else {      vi1 = tx->vi_head;      for (vi = vi1->next; vi->time < ta; vi = vi->next) {	 /* free_vi_txl(vi1); */	 vi1 = vi;      }      f = (ta - vi1->time) / (vi->time - vi1->time);      *v1_i = vi1->v_i + f * (vi->v_i - vi1->v_i);      *v1_o = vi1->v_o + f * (vi->v_o - vi1->v_o);      *i1_i = vi1->i_i + f * (vi->i_i - vi1->i_i);      *i1_o = vi1->i_o + f * (vi->i_o - vi1->i_o);      tx->vi_head = vi1;   }   if (tb > t1) {           /* fprintf(stderr, "pvs: time = %d\n", t2); */      ext = 1;      /*           f = tb - t1;      *v2_i = tx->in_node->V + tx->in_node->dv * f;      *v2_o = tx->out_node->V + tx->out_node->dv * f;            if (vi) {         for (; vi->time != t1; vi = vi->next) 	    vi1 = vi;         f /= (double) (t1 - vi1->time);         *i2_i = vi->i_i + f * (vi->i_i - vi1->i_i);         *i2_o = vi->i_o + f * (vi->i_o - vi1->i_o);      } else {         *i2_i = vi1->i_i;         *i2_o = vi1->i_o;      }       */      ratio[0] = f = (tb - t1) / (t2 - t1);      if (vi)	 for (; vi->time != t1; vi = vi->next);      else 	 vi = vi1;      f = 1 - f;      *v2_i = vi->v_i * f;      *v2_o = vi->v_o * f;      *i2_i = vi->i_i * f;      *i2_o = vi->i_o * f;   } else {      for (; vi->time < tb; vi = vi->next) 	 vi1 = vi;            f = (tb - vi1->time) / (vi->time - vi1->time);      *v2_i = vi1->v_i + f * (vi->v_i - vi1->v_i);      *v2_o = vi1->v_o + f * (vi->v_o - vi1->v_o);      *i2_i = vi1->i_i + f * (vi->i_i - vi1->i_i);      *i2_o = vi1->i_o + f * (vi->i_o - vi1->i_o);   }   return(ext);}static intright_consts_txl(TXLine *tx, int t, int time, double h, double h1, int l1, int l2, CKTcircuit *ckt)/***  h1 = 0.5 * h  ***/{   int i;   double ff=0.0, gg=0.0, e;   double v1_i, v2_i, i1_i, i2_i;   double v1_o, v2_o, i1_o, i2_o;   int ext;   if (! tx->lsl) {   double ff1=0.0;   for (i = 0; i < 3; i++) {      tx->h1e[i] = e = exp((double) tx->h1_term[i].x * h);      ff1 -= tx->h1_term[i].c * e;      ff  -= tx->h1_term[i].cnv_i * e;      gg  -= tx->h1_term[i].cnv_o * e;   }   ff += ff1 * h1 * tx->in_node->V;   gg += ff1 * h1 * tx->out_node->V;   }   ext = get_pvs_vi_txl(t, time, tx, &v1_i, &v2_i, &i1_i, &i2_i, &v1_o, &v2_o, &i1_o, &i2_o);   if (tx->lsl) {	   ff = tx->h3_aten * v2_o + tx->h2_aten * i2_o;	   gg = tx->h3_aten * v2_i + tx->h2_aten * i2_i;  } else {   if (tx->ifImg) {      double a, b, er, ei, a1, b1, a2, b2;      for (i = 0; i < 4; i++) {     TERM *tm;     tm = &(tx->h3_term[i]);     e =  exp((double) tm->x * h);     tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (v1_i * e + v2_i);     tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (v1_o * e + v2_o);      }      expC(tx->h3_term[4].x, tx->h3_term[5].x, h, &er, &ei);      a2 = h1 * tx->h3_term[4].c;      b2 = h1 * tx->h3_term[5].c;      a = tx->h3_term[4].cnv_i;      b = tx->h3_term[5].cnv_i;      multC(a, b, er, ei, &a, &b);      multC(a2, b2, v1_i * er + v2_i, v1_i * ei, &a1, &b1);      tx->h3_term[4].cnv_i = a + a1;      tx->h3_term[5].cnv_i = b + b1;      a = tx->h3_term[4].cnv_o;      b = tx->h3_term[5].cnv_o;      multC(a, b, er, ei, &a, &b);      multC(a2, b2, v1_o * er + v2_o, v1_o * ei, &a1, &b1);      tx->h3_term[4].cnv_o = a + a1;      tx->h3_term[5].cnv_o = b + b1;      ff += tx->h3_aten * v2_o;      gg += tx->h3_aten * v2_i;      for (i = 0; i < 5; i++) {     ff += tx->h3_term[i].cnv_o;     gg += tx->h3_term[i].cnv_i;      }      ff += tx->h3_term[4].cnv_o;      gg += tx->h3_term[4].cnv_i;      {     TERM *tm;     tm = &(tx->h2_term[0]);     e =  exp((double) tm->x * h);     tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (i1_i * e + i2_i);     tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (i1_o * e + i2_o);      }      expC(tx->h2_term[1].x, tx->h2_term[2].x, h, &er, &ei);      a2 = h1 * tx->h2_term[1].c;      b2 = h1 * tx->h2_term[2].c;      a = tx->h2_term[1].cnv_i;      b = tx->h2_term[2].cnv_i;      multC(a, b, er, ei, &a, &b);      multC(a2, b2, i1_i * er + i2_i, i1_i * ei, &a1, &b1);      tx->h2_term[1].cnv_i = a + a1;      tx->h2_term[2].cnv_i = b + b1;      a = tx->h2_term[1].cnv_o;      b = tx->h2_term[2].cnv_o;      multC(a, b, er, ei, &a, &b);      multC(a2, b2, i1_o * er + i2_o, i1_o * ei, &a1, &b1);      tx->h2_term[1].cnv_o = a + a1;      tx->h2_term[2].cnv_o = b + b1;      ff += tx->h2_aten * i2_o + tx->h2_term[0].cnv_o +          2.0 * tx->h2_term[1].cnv_o;      gg += tx->h2_aten * i2_i + tx->h2_term[0].cnv_i +          2.0 * tx->h2_term[1].cnv_i;   } else {      for (i = 0; i < 6; i++) {     TERM *tm;     tm = &(tx->h3_term[i]);     e =  exp((double) tm->x * h);     tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (v1_i * e + v2_i);     tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (v1_o * e + v2_o);      }      ff += tx->h3_aten * v2_o;      gg += tx->h3_aten * v2_i;      for (i = 0; i < 6; i++) {     ff += tx->h3_term[i].cnv_o;     gg += tx->h3_term[i].cnv_i;      }      for (i = 0; i < 3; i++) {     TERM *tm;     tm = &(tx->h2_term[i]);     e =  exp((double) tm->x * h);     tm->cnv_i = tm->cnv_i * e + h1 * tm->c * (i1_i * e + i2_i);     tm->cnv_o = tm->cnv_o * e + h1 * tm->c * (i1_o * e + i2_o);      }      ff += tx->h2_aten * i2_o;      gg += tx->h2_aten * i2_i;      for (i = 0; i < 3; i++) {     ff += tx->h2_term[i].cnv_o;     gg += tx->h2_term[i].cnv_i;      }   }   }	*(ckt->CKTrhs + l1) = ff;	*(ckt->CKTrhs + l2) = gg;   return(ext);}static int update_delayed_cnv_txl(TXLine *tx, float h){   float ratio;   double f;   VI_list_txl *vi;   TERM *tms;   h *= 0.5e-12;   ratio = tx->ratio;   vi = tx->vi_tail;   if (ratio > 0.0) {      tms = tx->h3_term;      f = h * ratio * vi->v_i;      tms[0].cnv_i += f *  tms[0].c;      tms[1].cnv_i += f *  tms[1].c;      tms[2].cnv_i += f *  tms[2].c;      tms[3].cnv_i += f *  tms[3].c;      tms[4].cnv_i += f *  tms[4].c;      tms[5].cnv_i += f *  tms[5].c;      f = h * ratio * vi->v_o;      tms[0].cnv_o += f *  tms[0].c;      tms[1].cnv_o += f *  tms[1].c;      tms[2].cnv_o += f *  tms[2].c;      tms[3].cnv_o += f *  tms[3].c;      tms[4].cnv_o += f *  tms[4].c;      tms[5].cnv_o += f *  tms[5].c;      tms = tx->h2_term;      f = h * ratio * vi->i_i;      tms[0].cnv_i += f *  tms[0].c;      tms[1].cnv_i += f *  tms[1].c;      tms[2].cnv_i += f *  tms[2].c;      f = h * ratio * vi->i_o;      tms[0].cnv_o += f *  tms[0].c;      tms[1].cnv_o += f *  tms[1].c;      tms[2].cnv_o += f *  tms[2].c;   }   return(1);}static int expC(double ar, double ai, float h, double *cr, double *ci){   double e, cs, si;   e = exp((double) ar * h);   cs = cos((double) ai * h);   si = sin((double) ai * h);   *cr = e * cs;   *ci = e * si;   return(1);}static int multC(double ar, double ai, double br, double bi, double *cr, double *ci){	register double tp;	tp = ar*br - ai*bi;	*ci = ar*bi + ai*br;	*cr = tp;	return (1);}

⌨️ 快捷键说明

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