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

📄 jfet2set.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
字号:
/**********Based on jfetset.cCopyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. QuarlesModified to add PS model and new parameter definitions ( Anthony E. Parker )   Copyright 1994  Macquarie University, Sydney Australia.   10 Feb 1994: Added call to jfetparm.h, used JFET_STATE_COUNT**********/#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "jfet2defs.h"#include "const.h"#include "sperror.h"#include "suffix.h"intJFET2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)        /* load the diode structure with those pointers needed later          * for fast matrix loading          */{    JFET2model *model = (JFET2model*)inModel;    JFET2instance *here;    int error;    CKTnode *tmp;    /*  loop through all the diode models */    for( ; model != NULL; model = model->JFET2nextModel ) {        if( (model->JFET2type != NJF) && (model->JFET2type != PJF) ) {            model->JFET2type = NJF;        }#define  PARAM(code,id,flag,ref,default,descrip) \              if(!model->flag) {model->ref = default;}#include "jfet2parm.h"        /* loop through all the instances of the model */        for (here = model->JFET2instances; here != NULL ;                here=here->JFET2nextInstance) {            if (here->JFET2owner != ARCHme) goto matrixpointers2;                        if(!here->JFET2areaGiven) {                here->JFET2area = 1;            }              if(!here->JFET2mGiven) {                here->JFET2m = 1;            }            here->JFET2state = *states;            *states += JFET2_STATE_COUNT + 1;matrixpointers2:            if(model->JFET2rs != 0 && here->JFET2sourcePrimeNode==0) {                error = CKTmkVolt(ckt,&tmp,here->JFET2name,"source");                if(error) return(error);                here->JFET2sourcePrimeNode = tmp->number;                if (ckt->CKTcopyNodesets) {		    CKTnode *tmpNode;		    IFuid tmpName;                              if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {                     if (tmpNode->nsGiven) {                       tmp->nodeset=tmpNode->nodeset;                        tmp->nsGiven=tmpNode->nsGiven;                      }                  }                }            } else {                here->JFET2sourcePrimeNode = here->JFET2sourceNode;            }            if(model->JFET2rd != 0 && here->JFET2drainPrimeNode==0) {                error = CKTmkVolt(ckt,&tmp,here->JFET2name,"drain");                if(error) return(error);                here->JFET2drainPrimeNode = tmp->number;                if (ckt->CKTcopyNodesets) {		    CKTnode *tmpNode;		    IFuid tmpName;                  if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {                     if (tmpNode->nsGiven) {                       tmp->nodeset=tmpNode->nodeset;                        tmp->nsGiven=tmpNode->nsGiven;                      }                  }                }                            } else {                here->JFET2drainPrimeNode = here->JFET2drainNode;            }/* 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(JFET2drainDrainPrimePtr,JFET2drainNode,JFET2drainPrimeNode)            TSTALLOC(JFET2gateDrainPrimePtr,JFET2gateNode,JFET2drainPrimeNode)            TSTALLOC(JFET2gateSourcePrimePtr,JFET2gateNode,JFET2sourcePrimeNode)            TSTALLOC(JFET2sourceSourcePrimePtr,JFET2sourceNode,                    JFET2sourcePrimeNode)            TSTALLOC(JFET2drainPrimeDrainPtr,JFET2drainPrimeNode,JFET2drainNode)            TSTALLOC(JFET2drainPrimeGatePtr,JFET2drainPrimeNode,JFET2gateNode)            TSTALLOC(JFET2drainPrimeSourcePrimePtr,JFET2drainPrimeNode,                    JFET2sourcePrimeNode)            TSTALLOC(JFET2sourcePrimeGatePtr,JFET2sourcePrimeNode,JFET2gateNode)            TSTALLOC(JFET2sourcePrimeSourcePtr,JFET2sourcePrimeNode,                    JFET2sourceNode)            TSTALLOC(JFET2sourcePrimeDrainPrimePtr,JFET2sourcePrimeNode,                    JFET2drainPrimeNode)            TSTALLOC(JFET2drainDrainPtr,JFET2drainNode,JFET2drainNode)            TSTALLOC(JFET2gateGatePtr,JFET2gateNode,JFET2gateNode)            TSTALLOC(JFET2sourceSourcePtr,JFET2sourceNode,JFET2sourceNode)            TSTALLOC(JFET2drainPrimeDrainPrimePtr,JFET2drainPrimeNode,                    JFET2drainPrimeNode)            TSTALLOC(JFET2sourcePrimeSourcePrimePtr,JFET2sourcePrimeNode,                    JFET2sourcePrimeNode)        }    }    return(OK);}intJFET2unsetup(GENmodel *inModel, CKTcircuit *ckt){    JFET2model *model;    JFET2instance *here;    for (model = (JFET2model *)inModel; model != NULL;	    model = model->JFET2nextModel)    {        for (here = model->JFET2instances; here != NULL;                here=here->JFET2nextInstance)	{	    if (here->JFET2sourcePrimeNode		    && here->JFET2sourcePrimeNode != here->JFET2sourceNode)	    {		CKTdltNNum(ckt, here->JFET2sourcePrimeNode);		here->JFET2sourcePrimeNode = 0;	    }	    if (here->JFET2drainPrimeNode		    && here->JFET2drainPrimeNode != here->JFET2drainNode)	    {		CKTdltNNum(ckt, here->JFET2drainPrimeNode);		here->JFET2drainPrimeNode = 0;	    }	}    }    return OK;}

⌨️ 快捷键说明

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