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

📄 diosupd.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. Quarles**********//* *//* update the  charge sensitivities and their derivatives */#include "spice.h"#include <stdio.h>#include "util.h"#include "smpdefs.h"#include "cktdefs.h"#include "diodefs.h"#include "sperror.h"#include "suffix.h"intDIOsUpdate(inModel,ckt)    GENmodel *inModel;    register CKTcircuit *ckt;{    register DIOmodel *model = (DIOmodel*)inModel;    register DIOinstance *here;    int      iparmno;    double   sposprm;    double   sneg;    double   sxp;    double   dummy1;    double   dummy2;    SENstruct *info;    info = ckt->CKTsenInfo;    if(ckt->CKTtime == 0) return(OK);    dummy1=0;    dummy2=0;#ifdef SENSDEBUG    printf("DIOsenUpdate\n");    printf("CKTtime = %.5e\n",ckt->CKTtime);    printf("CKTorder = %.5e\n",ckt->CKTorder);#endif /* SENSDEBUG */    /*  loop through all the diode models */    for( ; model != NULL; model = model->DIOnextModel ) {        /* loop through all the instances of the model */        for (here = model->DIOinstances; here != NULL ;                here=here->DIOnextInstance) {	    if (here->DIOowner != ARCHme) continue;#ifdef SENSDEBUG            printf("capd = %.7e \n",here->DIOcap);#endif /* SENSDEBUG */            for(iparmno = 1;iparmno<=info->SENparms;iparmno++){                sposprm = *(info->SEN_Sap[here->DIOposPrimeNode] + iparmno);                sneg = *(info->SEN_Sap[here->DIOnegNode] + iparmno);                sxp = (sposprm - sneg) * here->DIOcap;                if(iparmno == here->DIOsenParmNo) sxp += *(here->DIOdphidp);                *(ckt->CKTstate0 + here->DIOsensxp + 2 * (iparmno - 1)) = sxp;                NIintegrate(ckt,&dummy1,&dummy2,here->DIOcap,                        (here->DIOsensxp + 2 * (iparmno -1 )));                if(ckt->CKTmode & MODEINITTRAN){                    *(ckt->CKTstate1 + here->DIOsensxp + 2*(iparmno - 1)) = sxp;                    *(ckt->CKTstate1 + here->DIOsensxp + 2*(iparmno - 1)+1) = 0;                }#ifdef SENSDEBUG                printf("iparmno = %d\n",iparmno);                printf("sposprm = %.7e,sneg = %.7e\n",sposprm,sneg);                printf("sxp = %.7e,sdotxp = %.7e\n",                        sxp,*(ckt->CKTstate0 + here->DIOsensxp +                         2*(iparmno - 1) + 1));#endif /* SENSDEBUG */            }        }    }    return(OK);}

⌨️ 快捷键说明

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