📄 cktsetup.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 + -