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

📄 niinteg.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. Quarles**********//* NIintegrate(ckt,geq,ceq,cap,qcap) *  integrate the specified capacitor - method and order in the *  ckt structure, ccap follows qcap. */#include "spice.h"#include <stdio.h>#include "cktdefs.h"#include "sperror.h"#include "util.h"#include "suffix.h"#define ccap qcap+1intNIintegrate(ckt,geq,ceq,cap,qcap)    register CKTcircuit *ckt;    double *geq;    double *ceq;    double cap;    int qcap;{    static char *ordmsg = "Illegal integration order";    static char *methodmsg = "Unknown integration method";    switch(ckt->CKTintegrateMethod) {    case TRAPEZOIDAL:        switch(ckt->CKTorder) {        case 1:            *(ckt->CKTstate0+ccap) = ckt->CKTag[0] * (*(ckt->CKTstate0+qcap))                     + ckt->CKTag[1] * (*(ckt->CKTstate1+qcap));            break;        case 2:            *(ckt->CKTstate0+ccap) = - *(ckt->CKTstate1+ccap) * ckt->CKTag[1] +                     ckt->CKTag[0] *                     ( *(ckt->CKTstate0+qcap) - *(ckt->CKTstate1+qcap) );            break;        default:            errMsg = MALLOC(strlen(ordmsg)+1);            strcpy(errMsg,ordmsg);            return(E_ORDER);        }        break;    case GEAR:        *(ckt->CKTstate0+ccap)=0;        switch(ckt->CKTorder) {        case 6:            *(ckt->CKTstate0+ccap) += ckt->CKTag[6]* *(ckt->CKTstate6+qcap);            /* fall through */        case 5:            *(ckt->CKTstate0+ccap) += ckt->CKTag[5]* *(ckt->CKTstate5+qcap);            /* fall through */        case 4:            *(ckt->CKTstate0+ccap) += ckt->CKTag[4]* *(ckt->CKTstate4+qcap);            /* fall through */        case 3:            *(ckt->CKTstate0+ccap) += ckt->CKTag[3]* *(ckt->CKTstate3+qcap);            /* fall through */        case 2:            *(ckt->CKTstate0+ccap) += ckt->CKTag[2]* *(ckt->CKTstate2+qcap);            /* fall through */        case 1:            *(ckt->CKTstate0+ccap) += ckt->CKTag[1]* *(ckt->CKTstate1+qcap);            *(ckt->CKTstate0+ccap) += ckt->CKTag[0]* *(ckt->CKTstate0+qcap);            break;        default:            return(E_ORDER);        }        break;    default:        errMsg = MALLOC(strlen(methodmsg)+1);        strcpy(errMsg,methodmsg);        return(E_METHOD);    }    *ceq = *(ckt->CKTstate0+ccap) - ckt->CKTag[0] * *(ckt->CKTstate0+qcap);    *geq = ckt->CKTag[0] * cap;    return(OK);}

⌨️ 快捷键说明

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