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

📄 b1disto.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
        i1h1z,        r1hm2x,        i1hm2x,        r1hm2y,        i1hm2y,        r1hm2z,        i1hm2z);        itemp = ckt->CKTomega * DFnF12(here->qb_x2,        here->qb_y2,        here->qb_z2,        here->qb_xy,        here->qb_yz,        here->qb_xz,        r1h1x,        i1h1x,        r1h1y,        i1h1y,        r1h1z,        i1h1z,        r1hm2x,        i1hm2x,        r1hm2y,        i1hm2y,        r1hm2z,        i1hm2z);        *(ckt->CKTrhs + here->B1bNode) -= temp;        *(ckt->CKTirhs + here->B1bNode) -= itemp;        *(ckt->CKTrhs + here->B1sNodePrime) += temp;        *(ckt->CKTirhs + here->B1sNodePrime) += itemp;        /* qb term over */        /* loading qd term */        /* kernels for vgs,vbs and vds already set up */        temp = -ckt->CKTomega * DFiF12(here->qd_x2,        here->qd_y2,        here->qd_z2,        here->qd_xy,        here->qd_yz,        here->qd_xz,        r1h1x,        i1h1x,        r1h1y,        i1h1y,        r1h1z,        i1h1z,        r1hm2x,        i1hm2x,        r1hm2y,        i1hm2y,        r1hm2z,        i1hm2z);        itemp = ckt->CKTomega * DFnF12(here->qd_x2,        here->qd_y2,        here->qd_z2,        here->qd_xy,        here->qd_yz,        here->qd_xz,        r1h1x,        i1h1x,        r1h1y,        i1h1y,        r1h1z,        i1h1z,        r1hm2x,        i1hm2x,        r1hm2y,        i1hm2y,        r1hm2z,        i1hm2z);        *(ckt->CKTrhs + here->B1dNodePrime) -= temp;        *(ckt->CKTirhs + here->B1dNodePrime) -= itemp;        *(ckt->CKTrhs + here->B1sNodePrime) += temp;        *(ckt->CKTirhs + here->B1sNodePrime) += itemp;        /* qd term over */        /* loading here->B1gbs term */        r1h1x = *(job->r1H1ptr + here->B1bNode) -            *(job->r1H1ptr + here->B1sNodePrime);        i1h1x = *(job->i1H1ptr + here->B1bNode) -            *(job->i1H1ptr + here->B1sNodePrime);        r1hm2x = *(job->r1H2ptr + here->B1bNode) -            *(job->r1H2ptr + here->B1sNodePrime);        i1hm2x = -(*(job->i1H2ptr + here->B1bNode) -            *(job->i1H2ptr + here->B1sNodePrime));        /* now r1h1x = vbs */        temp = D1nF12(here->gbs2,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x);        itemp = D1iF12(here->gbs2,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x);        *(ckt->CKTrhs + here->B1bNode) -= temp;        *(ckt->CKTirhs + here->B1bNode) -= itemp;        *(ckt->CKTrhs + here->B1sNodePrime) += temp;        *(ckt->CKTirhs + here->B1sNodePrime) += itemp;        /* here->B1gbs term over */        /* loading here->B1gbd term */        r1h1x = *(job->r1H1ptr + here->B1bNode) -            *(job->r1H1ptr + here->B1dNodePrime);        i1h1x = *(job->i1H1ptr + here->B1bNode) -            *(job->i1H1ptr + here->B1dNodePrime);        r1hm2x = *(job->r1H2ptr + here->B1bNode) -            *(job->r1H2ptr + here->B1dNodePrime);        i1hm2x = -(*(job->i1H2ptr + here->B1bNode) -            *(job->i1H2ptr + here->B1dNodePrime));        /* now r1h1x = vbd */        temp = D1nF12(here->gbd2,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x);        itemp = D1iF12(here->gbd2,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x);        *(ckt->CKTrhs + here->B1gNode) -= temp;        *(ckt->CKTirhs + here->B1gNode) -= itemp;        *(ckt->CKTrhs + here->B1dNodePrime) += temp;        *(ckt->CKTirhs + here->B1dNodePrime) += itemp;        /* here->B1gbd term over */        /* all done */      }      break;    case D_2F1MF2:      /* from now on, in the 3-var case, x=vgs,y=vbs,z=vds */      {        /* draincurrent term */        r1h1x = *(job->r1H1ptr + here->B1gNode) -             *(job->r1H1ptr + here->B1sNodePrime);        i1h1x = *(job->i1H1ptr + here->B1gNode) -             *(job->i1H1ptr + here->B1sNodePrime);        r1h1y = *(job->r1H1ptr + here->B1bNode) -            *(job->r1H1ptr + here->B1sNodePrime);        i1h1y = *(job->i1H1ptr + here->B1bNode) -            *(job->i1H1ptr + here->B1sNodePrime);        r1h1z = *(job->r1H1ptr + here->B1dNodePrime) -            *(job->r1H1ptr + here->B1sNodePrime);        i1h1z = *(job->i1H1ptr + here->B1dNodePrime) -            *(job->i1H1ptr + here->B1sNodePrime);        r1hm2x = *(job->r1H2ptr + here->B1gNode) -             *(job->r1H2ptr + here->B1sNodePrime);        i1hm2x = -(*(job->i1H2ptr + here->B1gNode) -             *(job->i1H2ptr + here->B1sNodePrime));        r1hm2y = *(job->r1H2ptr + here->B1bNode) -            *(job->r1H2ptr + here->B1sNodePrime);        i1hm2y = -(*(job->i1H2ptr + here->B1bNode) -            *(job->i1H2ptr + here->B1sNodePrime));        r1hm2z = *(job->r1H2ptr + here->B1dNodePrime) -            *(job->r1H2ptr + here->B1sNodePrime);        i1hm2z = -(*(job->i1H2ptr + here->B1dNodePrime) -            *(job->i1H2ptr + here->B1sNodePrime));        r2h11x = *(job->r2H11ptr + here->B1gNode) -             *(job->r2H11ptr + here->B1sNodePrime);        i2h11x = *(job->i2H11ptr + here->B1gNode) -             *(job->i2H11ptr + here->B1sNodePrime);        r2h11y = *(job->r2H11ptr + here->B1bNode) -            *(job->r2H11ptr + here->B1sNodePrime);        i2h11y = *(job->i2H11ptr + here->B1bNode) -            *(job->i2H11ptr + here->B1sNodePrime);        r2h11z = *(job->r2H11ptr + here->B1dNodePrime) -            *(job->r2H11ptr + here->B1sNodePrime);        i2h11z = *(job->i2H11ptr + here->B1dNodePrime) -            *(job->i2H11ptr + here->B1sNodePrime);        r2h1m2x = *(job->r2H1m2ptr + here->B1gNode) -             *(job->r2H1m2ptr + here->B1sNodePrime);        i2h1m2x = *(job->i2H1m2ptr + here->B1gNode) -             *(job->i2H1m2ptr + here->B1sNodePrime);        r2h1m2y = *(job->r2H1m2ptr + here->B1bNode) -            *(job->r2H1m2ptr + here->B1sNodePrime);        i2h1m2y = *(job->i2H1m2ptr + here->B1bNode) -            *(job->i2H1m2ptr + here->B1sNodePrime);        r2h1m2z = *(job->r2H1m2ptr + here->B1dNodePrime) -            *(job->r2H1m2ptr + here->B1sNodePrime);        i2h1m2z = *(job->i2H1m2ptr + here->B1dNodePrime) -            *(job->i2H1m2ptr + here->B1sNodePrime);        /* draincurrent is a function of vgs,vbs,and vds;         * have got their linear kernels; now to call         * load functions          */                pass.cxx = here->DrC_x2;        pass.cyy = here->DrC_y2;        pass.czz = here->DrC_z2;        pass.cxy = here->DrC_xy;        pass.cyz = here->DrC_yz;        pass.cxz = here->DrC_xz;        pass.cxxx = here->DrC_x3;        pass.cyyy = here->DrC_y3;        pass.czzz = here->DrC_z3;        pass.cxxy = here->DrC_x2y;        pass.cxxz = here->DrC_x2z;        pass.cxyy = here->DrC_xy2;        pass.cyyz = here->DrC_y2z;        pass.cxzz = here->DrC_xz2;        pass.cyzz = here->DrC_yz2;        pass.cxyz = here->DrC_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->B1dNodePrime) -= temp;         *(ckt->CKTirhs + here->B1dNodePrime) -= itemp;                 *(ckt->CKTrhs + here->B1sNodePrime) += temp;         *(ckt->CKTirhs + here->B1sNodePrime) += itemp;                 /* draincurrent term loading over */        /* loading qg term */        /* kernels for vgs,vbs and vds already set up */        pass.cxx = here->qg_x2;        pass.cyy = here->qg_y2;        pass.czz = here->qg_z2;        pass.cxy = here->qg_xy;        pass.cyz = here->qg_yz;        pass.cxz = here->qg_xz;        pass.cxxx = here->qg_x3;        pass.cyyy = here->qg_y3;        pass.czzz = here->qg_z3;        pass.cxxy = here->qg_x2y;        pass.cxxz = here->qg_x2z;        pass.cxyy = here->qg_xy2;        pass.cyyz = here->qg_y2z;        pass.cxzz = here->qg_xz2;        pass.cyzz = here->qg_yz2;        pass.cxyz = here->qg_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 = -ckt->CKTomega * DFi2F12(&pass);        itemp = ckt->CKTomega * DFn2F12(&pass);        *(ckt->CKTrhs + here->B1gNode) -= temp;        *(ckt->CKTirhs + here->B1gNode) -= itemp;        *(ckt->CKTrhs + here->B1sNodePrime) += temp;        *(ckt->CKTirhs + here->B1sNodePrime) += itemp;        /* qg term over */        /* loading qb term */        /* kernels for vgs,vbs and vds already set up */        pass.cxx = here->qb_x2;        pass.cyy = here->qb_y2;        pass.czz = here->qb_z2;        pass.cxy = here->qb_xy;        pass.cyz = here->qb_yz;        pass.cxz = here->qb_xz;        pass.cxxx = here->qb_x3;        pass.cyyy = here->qb_y3;        pass.czzz = here->qb_z3;        pass.cxxy = here->qb_x2y;        pass.cxxz = here->qb_x2z;        pass.cxyy = here->qb_xy2;        pass.cyyz = here->qb_y2z;        pass.cxzz = here->qb_xz2;        pass.cyzz = here->qb_yz2;        pass.cxyz = here->qb_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 = -ckt->CKTomega * DFi2F12(&pass);        itemp = ckt->CKTomega * DFn2F12(&pass);        *(ckt->CKTrhs + here->B1bNode) -= temp;        *(ckt->CKTirhs + here->B1bNode) -= itemp;        *(ckt->CKTrhs + here->B1sNodePrime) += temp;        *(ckt->CKTirhs + here->B1sNodePrime) += itemp;        /* qb term over */        /* loading qd term */        /* kernels for vgs,vbs and vds already set up */        pass.cxx = here->qd_x2;        pass.cyy = here->qd_y2;        pass.czz = here->qd_z2;        pass.cxy = here->qd_xy;        pass.cyz = here->qd_yz;        pass.cxz = here->qd_xz;        pass.cxxx = here->qd_x3;        pass.cyyy = here->qd_y3;        pass.czzz = here->qd_z3;        pass.cxxy = here->qd_x2y;        pass.cxxz = here->qd_x2z;        pass.cxyy = here->qd_xy2;        pass.cyyz = here->qd_y2z;        pass.cxzz = here->qd_xz2;        pass.cyzz = here->qd_yz2;        pass.cxyz = here->qd_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 = -ckt->CKTomega * DFi2F12(&pass);        itemp = ckt->CKTomega * DFn2F12(&pass);        *(ckt->CKTrhs + here->B1dNodePrime) -= temp;        *(ckt->CKTirhs + here->B1dNodePrime) -= itemp;        *(ckt->CKTrhs + here->B1sNodePrime) += temp;        *(ckt->CKTirhs + here->B1sNodePrime) += itemp;        /* qd term over */        /* loading here->B1gbs term */        r1h1x = *(job->r1H1ptr + here->B1bNode) -            *(job->r1H1ptr + here->B1sNodePrime);        i1h1x = *(job->i1H1ptr + here->B1bNode) -            *(job->i1H1ptr + here->B1sNodePrime);        r2h11x = *(job->r2H11ptr + here->B1bNode) -            *(job->r2H11ptr + here->B1sNodePrime);        i2h11x = *(job->i2H11ptr + here->B1bNode) -            *(job->i2H11ptr + here->B1sNodePrime);        r1hm2x = *(job->r1H2ptr + here->B1bNode) -            *(job->r1H2ptr + here->B1sNodePrime);        i1hm2x = -(*(job->i1H2ptr + here->B1bNode) -            *(job->i1H2ptr + here->B1sNodePrime));        r2h1m2x = *(job->r2H1m2ptr + here->B1bNode) -            *(job->r2H1m2ptr + here->B1sNodePrime);        i2h1m2x = *(job->i2H1m2ptr + here->B1bNode) -            *(job->i2H1m2ptr + here->B1sNodePrime);        /* now r1h1x = vbs */        temp = D1n2F12(here->gbs2,        here->gbs3,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x,        r2h11x,        i2h11x,        r2h1m2x,        i2h1m2x);        itemp = D1i2F12(here->gbs2,        here->gbs3,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x,        r2h11x,        i2h11x,        r2h1m2x,        i2h1m2x);        *(ckt->CKTrhs + here->B1bNode) -= temp;        *(ckt->CKTirhs + here->B1bNode) -= itemp;        *(ckt->CKTrhs + here->B1sNodePrime) += temp;        *(ckt->CKTirhs + here->B1sNodePrime) += itemp;        /* here->B1gbs term over */        /* loading here->B1gbd term */        r1h1x = *(job->r1H1ptr + here->B1bNode) -            *(job->r1H1ptr + here->B1dNodePrime);        i1h1x = *(job->i1H1ptr + here->B1bNode) -            *(job->i1H1ptr + here->B1dNodePrime);        r2h11x = *(job->r2H11ptr + here->B1bNode) -            *(job->r2H11ptr + here->B1dNodePrime);        i2h11x = *(job->i2H11ptr + here->B1bNode) -            *(job->i2H11ptr + here->B1dNodePrime);        r1hm2x = *(job->r1H2ptr + here->B1bNode) -            *(job->r1H2ptr + here->B1dNodePrime);        i1hm2x = -(*(job->i1H2ptr + here->B1bNode) -            *(job->i1H2ptr + here->B1dNodePrime));        r2h1m2x = *(job->r2H1m2ptr + here->B1bNode) -            *(job->r2H1m2ptr + here->B1dNodePrime);        i2h1m2x = *(job->i2H1m2ptr + here->B1bNode) -            *(job->i2H1m2ptr + here->B1dNodePrime);        /* now r1h1x = vbd */        temp = D1n2F12(here->gbd2,        here->gbd3,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x,        r2h11x,        i2h11x,        r2h1m2x,        i2h1m2x);        itemp = D1i2F12(here->gbd2,        here->gbd3,        r1h1x,        i1h1x,        r1hm2x,        i1hm2x,        r2h11x,        i2h11x,        r2h1m2x,        i2h1m2x);        *(ckt->CKTrhs + here->B1bNode) -= temp;        *(ckt->CKTirhs + here->B1bNode) -= itemp;        *(ckt->CKTrhs + here->B1dNodePrime) += temp;        *(ckt->CKTirhs + here->B1dNodePrime) += itemp;        /* here->B1gbd term over */        /* all done */      }      break;    default:;    ;    }  }}return(OK);}else  return(E_BADPARM);}

⌨️ 快捷键说明

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