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

📄 cktsetup.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. Quarles**********/    /* CKTsetup(ckt)     * this is a driver program to iterate through all the various     * setup functions provided for the circuit elements in the     * given circuit      */#include "spice.h"#include <stdio.h>#include "smpdefs.h"#include "cktdefs.h"#include "misc.h"#include "util.h"#include "devdefs.h"#include "sperror.h"#include "suffix.h"#define CKALLOC(var,size,type) \    if(size && (!(var =(type *)MALLOC((size)*sizeof(type))))){\            return(E_NOMEM);\}extern SPICEdev *DEVices[];intCKTsetup(ckt)    register CKTcircuit *ckt;{    register int i;    int error;    register SMPmatrix *matrix;    ckt->CKTnumStates=0;#ifdef HAS_SENSE2    if(ckt->CKTsenInfo){        if (error = CKTsenSetup(ckt)) return(error);    }#endif    if (ckt->CKTisSetup)	return E_NOCHANGE;    CKTpartition(ckt);    error = NIinit(ckt);    if (error) return(error);    ckt->CKTisSetup = 1;    matrix = ckt->CKTmatrix;    for (i=0;i<DEVmaxnum;i++) {        if ( ((*DEVices[i]).DEVsetup != NULL) && (ckt->CKThead[i] != NULL) ){            error = (*((*DEVices[i]).DEVsetup))(matrix,ckt->CKThead[i],ckt,                    &ckt->CKTnumStates);            if(error) return(error);        }    }    for(i=0;i<=ckt->CKTmaxOrder+1;i++) {        CKALLOC(ckt->CKTstates[i],ckt->CKTnumStates,double);    }#ifdef HAS_SENSE2    if(ckt->CKTsenInfo){        /* to allocate memory to sensitivity structures if          * it is not done before */        error = NIsenReinit(ckt);         if(error) return(error);    }#endif    if(ckt->CKTniState & NIUNINITIALIZED) {        error = NIreinit(ckt);        if(error) return(error);    }    return(OK);}intCKTunsetup(ckt)    CKTcircuit *ckt;{    int i, error, e2;    error = OK;    if (!ckt->CKTisSetup)	return OK;    for(i=0;i<=ckt->CKTmaxOrder+1;i++) {        tfree(ckt->CKTstates[i]);    }    for (i=0;i<DEVmaxnum;i++) {        if ( ((*DEVices[i]).DEVunsetup != NULL) && (ckt->CKThead[i] != NULL) ){            e2 = (*((*DEVices[i]).DEVunsetup))(ckt->CKThead[i],ckt);	    if (!error && e2)		error = e2;        }    }    ckt->CKTisSetup = 0;    if(error) return(error);    NIdestroy(ckt);    /*    if (ckt->CKTmatrix)        SMPdestroy(ckt->CKTmatrix);    ckt->CKTmatrix = NULL;    */    return OK;}

⌨️ 快捷键说明

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