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

📄 cktdojob.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. Quarles**********/#include "spice.h"#include "cktdefs.h"#include <stdio.h>#include "sperror.h"#include "trandefs.h"#include "util.h"#include "suffix.h"extern SPICEanalysis *analInfo[];extern int ANALmaxnum;intCKTdoJob(inCkt,reset,inTask)    GENERIC *inCkt;    int reset;    GENERIC *inTask;{    CKTcircuit	*ckt = (CKTcircuit *)inCkt;    TSKtask	*task = (TSKtask *)inTask;    JOB		*job;    double	startTime;    int		error, i, error2;#ifdef HAS_SENSE2    int		senflag;    static int	sens_num = -1;    /* Sensitivity is special */    if (sens_num < 0) {	for (i = 0; i <  ANALmaxnum; i++)	    if (!strcmp("SENS2", analInfo[i]->public.name))		break;	sens_num = i;    }#endif    startTime = (*(SPfrontEnd->IFseconds))( );    ckt->CKTtemp  = task->TSKtemp;    ckt->CKTnomTemp  = task->TSKnomTemp;    ckt->CKTmaxOrder  = task->TSKmaxOrder;    ckt->CKTintegrateMethod  = task->TSKintegrateMethod;    ckt->CKTbypass  = task->TSKbypass;    ckt->CKTdcMaxIter  = task->TSKdcMaxIter;    ckt->CKTdcTrcvMaxIter  = task->TSKdcTrcvMaxIter;    ckt->CKTtranMaxIter  = task->TSKtranMaxIter;    ckt->CKTnumSrcSteps  = task->TSKnumSrcSteps;    ckt->CKTnumGminSteps  = task->TSKnumGminSteps;    ckt->CKTminBreak  = task->TSKminBreak;    ckt->CKTabstol  = task->TSKabstol;    ckt->CKTpivotAbsTol  = task->TSKpivotAbsTol;    ckt->CKTpivotRelTol  = task->TSKpivotRelTol;    ckt->CKTreltol  = task->TSKreltol;    ckt->CKTchgtol  = task->TSKchgtol;    ckt->CKTvoltTol  = task->TSKvoltTol;    ckt->CKTgmin  = task->TSKgmin;    ckt->CKTdelmin  = task->TSKdelmin;    ckt->CKTtrtol  = task->TSKtrtol;    ckt->CKTdefaultMosL  = task->TSKdefaultMosL;    ckt->CKTdefaultMosW  = task->TSKdefaultMosW;    ckt->CKTdefaultMosAD  = task->TSKdefaultMosAD;    ckt->CKTdefaultMosAS  = task->TSKdefaultMosAS;    ckt->CKTfixLimit  = task->TSKfixLimit;    ckt->CKTnoOpIter  = task->TSKnoOpIter;    ckt->CKTtryToCompact = task->TSKtryToCompact;    ckt->CKTbadMos3 = task->TSKbadMos3;    ckt->CKTkeepOpInfo = task->TSKkeepOpInfo;    ckt->CKTtroubleNode  = 0;    ckt->CKTtroubleElt  = NULL;#ifdef NEWTRUNC    ckt->CKTlteReltol = task->TSKlteReltol;    ckt->CKTlteAbstol = task->TSKlteAbstol;#endif /* NEWTRUNC */    error = 0;    if (reset) {	ckt->CKTdelta = 0.0;	ckt->CKTtime = 0.0;	ckt->CKTcurrentAnalysis = 0;#ifdef HAS_SENSE2	senflag = 0;	if (sens_num < ANALmaxnum)	    for (job = task->jobs; !error && job; job = job->JOBnextJob) {		if (job->JOBtype == sens_num) {		    senflag = 1;		    ckt->CKTcurJob = job;		    ckt->CKTsenInfo = (SENstruct *) job;		    error = (*(analInfo[sens_num]->an_func))(ckt, reset);		}	    }	if (ckt->CKTsenInfo && (!senflag || error))	    FREE(ckt->CKTsenInfo);#endif	/* normal reset */	if (!error)	    error = CKTunsetup(ckt);	if (!error)	    error = CKTsetup(ckt);	if (!error)	    error = CKTtemp(ckt);	if (error)	    return error;    }    error2 = OK;    /* Analysis order is important */    for (i = 0; i < ANALmaxnum; i++) {#ifdef HAS_SENSE2	if (i == sens_num)	    continue;#endif	for (job = task->jobs; job; job = job->JOBnextJob) {	    if (job->JOBtype == i) {                ckt->CKTcurJob=job;		error = OK;		if (analInfo[i]->an_init)		    error = (*(analInfo[i]->an_init))(ckt, job);		if (!error && analInfo[i]->do_ic)		    error = CKTic(ckt);		if (!error)		    error = (*(analInfo[i]->an_func))(ckt, reset);		if (error)		    error2 = error;	    }	}    }    ckt->CKTstat->STATtotAnalTime += (*(SPfrontEnd->IFseconds))( ) - startTime;#ifdef HAS_SENSE2    if (ckt->CKTsenInfo)	SENdestroy(ckt->CKTsenInfo);#endif    return(error2);}

⌨️ 快捷键说明

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