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

📄 trasetup.c

📁 linux平台下类似著名的电路板作图软件 Spice的源代码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. Quarles**********//* */#include "spice.h"#include <stdio.h>#include "util.h"#include "smpdefs.h"#include "cktdefs.h"#include "tradefs.h"#include "sperror.h"#include "suffix.h"/* ARGSUSED */intTRAsetup(matrix,inModel,ckt,state)    register SMPmatrix *matrix;    GENmodel *inModel;    register CKTcircuit *ckt;    int *state;        /* load the transmission line structure with those pointers needed later         * for fast matrix loading          */{    register TRAmodel *model = (TRAmodel *)inModel;    register TRAinstance *here;    int error;    CKTnode *tmp;    /*  loop through all the transmission line models */    for( ; model != NULL; model = model->TRAnextModel ) {        /* loop through all the instances of the model */        for (here = model->TRAinstances; here != NULL ;                here=here->TRAnextInstance) {                        if(here->TRAbrEq1==0) {                error = CKTmkVolt(ckt,&tmp,here->TRAname,"i1");                if(error) return(error);                here->TRAbrEq1 = tmp->number;            }            if(here->TRAbrEq2==0) {                error = CKTmkVolt(ckt,&tmp,here->TRAname,"i2");                if(error) return(error);                here->TRAbrEq2 = tmp->number;            }            if(here->TRAintNode1==0) {                error = CKTmkVolt(ckt,&tmp,here->TRAname,"int1");                if(error) return(error);                here->TRAintNode1 = tmp->number;            }            if(here->TRAintNode2==0) {                error = CKTmkVolt(ckt,&tmp,here->TRAname,"int2");                if(error) return(error);                here->TRAintNode2 = tmp->number;            }            /* allocate the delay table */            here->TRAdelays = (double *)MALLOC(15*sizeof(double));            here->TRAallocDelay = 4;/* macro to make elements with built in test for out of memory */#define TSTALLOC(ptr,first,second) \if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\    return(E_NOMEM);\}            TSTALLOC(TRAibr1Ibr2Ptr, TRAbrEq1, TRAbrEq2)            TSTALLOC(TRAibr1Int1Ptr, TRAbrEq1, TRAintNode1)            TSTALLOC(TRAibr1Neg1Ptr, TRAbrEq1, TRAnegNode1)            TSTALLOC(TRAibr1Neg2Ptr, TRAbrEq1, TRAnegNode2)            TSTALLOC(TRAibr1Pos2Ptr, TRAbrEq1, TRAposNode2)            TSTALLOC(TRAibr2Ibr1Ptr, TRAbrEq2, TRAbrEq1)            TSTALLOC(TRAibr2Int2Ptr, TRAbrEq2, TRAintNode2)            TSTALLOC(TRAibr2Neg1Ptr, TRAbrEq2, TRAnegNode1)            TSTALLOC(TRAibr2Neg2Ptr, TRAbrEq2, TRAnegNode2)            TSTALLOC(TRAibr2Pos1Ptr, TRAbrEq2, TRAposNode1)            TSTALLOC(TRAint1Ibr1Ptr, TRAintNode1, TRAbrEq1)            TSTALLOC(TRAint1Int1Ptr, TRAintNode1, TRAintNode1)            TSTALLOC(TRAint1Pos1Ptr, TRAintNode1, TRAposNode1)            TSTALLOC(TRAint2Ibr2Ptr, TRAintNode2, TRAbrEq2)            TSTALLOC(TRAint2Int2Ptr, TRAintNode2, TRAintNode2)            TSTALLOC(TRAint2Pos2Ptr, TRAintNode2, TRAposNode2)            TSTALLOC(TRAneg1Ibr1Ptr, TRAnegNode1, TRAbrEq1)            TSTALLOC(TRAneg2Ibr2Ptr, TRAnegNode2, TRAbrEq2)            TSTALLOC(TRApos1Int1Ptr, TRAposNode1, TRAintNode1)            TSTALLOC(TRApos1Pos1Ptr, TRAposNode1, TRAposNode1)            TSTALLOC(TRApos2Int2Ptr, TRAposNode2, TRAintNode2)            TSTALLOC(TRApos2Pos2Ptr, TRAposNode2, TRAposNode2)            if(!here->TRAnlGiven) {                here->TRAnl = .25;            }            if(!here->TRAfGiven) {                here->TRAf = 1e9;            }            if(!here->TRAreltolGiven) {                here->TRAreltol = 1;            }            if(!here->TRAabstolGiven) {                here->TRAabstol = 1;            }            if(!here->TRAimpedGiven) {                (*(SPfrontEnd->IFerror))(ERR_FATAL,                        "%s: transmission line z0 must be given",                        &(here->TRAname));                return(E_BADPARM);            }        }    }    return(OK);}intTRAunsetup(inModel,ckt)    GENmodel *inModel;    CKTcircuit *ckt;{#ifndef HAS_BATCHSIM    TRAmodel *model;    TRAinstance *here;    for (model = (TRAmodel *)inModel; model != NULL;	    model = model->TRAnextModel)    {        for (here = model->TRAinstances; here != NULL;                here=here->TRAnextInstance)	{	    if (here->TRAbrEq1) {		CKTdltNNum(ckt, here->TRAbrEq1);		here->TRAbrEq1= 0;	    }	    if (here->TRAbrEq2) {		CKTdltNNum(ckt, here->TRAbrEq2);		here->TRAbrEq2= 0;	    }	    if (here->TRAintNode1) {		CKTdltNNum(ckt, here->TRAintNode1);		here->TRAintNode1= 0;	    }	    if (here->TRAintNode2) {		CKTdltNNum(ckt, here->TRAintNode2);		here->TRAintNode2= 0;	    }	}    }#endif    return OK;}

⌨️ 快捷键说明

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