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

📄 cktsetbk.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. Quarles**********//* */    /* CKTsetBreak(ckt,time)     *   add the given time to the breakpoint table for the given circuit     */#include "spice.h"#include <stdio.h>#include "cktdefs.h"#include "util.h"#include "ifsim.h"#include "sperror.h"#include "suffix.h"intCKTsetBreak(ckt,time)    register CKTcircuit *ckt;    double time;{    double *tmp;    register int i,j;    if(ckt->CKTtime > time) {        (*(SPfrontEnd->IFerror))(ERR_PANIC,"breakpoint in the past - HELP!",                (IFuid *)NULL);        return(E_INTERN);    }    for(i=0;i<ckt->CKTbreakSize;i++) {        if(*(ckt->CKTbreaks+i)>time) { /* passed */            if((*(ckt->CKTbreaks+i)-time) <= ckt->CKTminBreak) {                /* very close together - take earlier point */                *(ckt->CKTbreaks+i) = time;                return(OK);            }            if(time-*(ckt->CKTbreaks+i-1) <= ckt->CKTminBreak) {                /* very close together, but after, so skip */                return(OK);            }            /* fits in middle - new array & insert */            tmp = (double *)MALLOC((ckt->CKTbreakSize+1)*sizeof(double));            if(tmp == (double *)NULL) return(E_NOMEM);            for(j=0;j<i;j++) {                *(tmp+j) = *(ckt->CKTbreaks+j);            }            *(tmp+i)=time;            for(j=i;j<ckt->CKTbreakSize;j++) {                *(tmp+j+1) = *(ckt->CKTbreaks+j);            }            FREE(ckt->CKTbreaks);            ckt->CKTbreakSize++;            ckt->CKTbreaks=tmp;            return(OK);        }    }    /* never found it - beyond end of time - extend out idea of time */    if(time-ckt->CKTbreaks[ckt->CKTbreakSize-1]<=ckt->CKTminBreak) {        /* very close tegether - keep earlier, throw out new point */        return(OK);    }    /* fits at end - grow array & add on */    ckt->CKTbreaks = (double *)REALLOC(ckt->CKTbreaks,            (ckt->CKTbreakSize+1)*sizeof(double));    ckt->CKTbreakSize++;    ckt->CKTbreaks[ckt->CKTbreakSize-1]=time;    return(OK);}

⌨️ 快捷键说明

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