niconv.c
来自「ngspice又一个电子CAD仿真软件代码.功能更全」· C语言 代码 · 共 66 行
C
66 行
/**********Copyright 1990 Regents of the University of California. All rights reserved.Author: 1985 Thomas L. Quarles**********//* * NIconvTest(ckt) * perform the convergence test - returns 1 if any of the * values in the old and new arrays have changed by more * than absTol + relTol*(max(old,new)), otherwise returns 0 */#include "ngspice.h"#include "cktdefs.h"#include "smpdefs.h"#include "niconv.h"intNIconvTest(CKTcircuit *ckt){ int i; /* generic loop variable */ int size; /* size of the matrix */ CKTnode *node; /* current matrix entry */ double old; double new; double tol; node = ckt->CKTnodes; size = SMPmatSize(ckt->CKTmatrix); for (i=1;i<=size;i++) { node = node->next; new = *((ckt->CKTrhs) + i ) ; old = *((ckt->CKTrhsOld) + i ) ; if(node->type == 3) { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTvoltTol; if (fabs(new-old) >tol ) {#ifdef STEPDEBUG printf(" non-convergence at node %s\n",CKTnodName(ckt,i));#endif /* STEPDEBUG */ ckt->CKTtroubleNode = i; ckt->CKTtroubleElt = NULL; return(1); } } else { tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + ckt->CKTabstol; if (fabs(new-old) >tol ) {#ifdef STEPDEBUG printf(" non-convergence at node %s\n",CKTnodName(ckt,i));#endif /* STEPDEBUG */ ckt->CKTtroubleNode = i; ckt->CKTtroubleElt = NULL; return(1); } } } i = CKTconvTest(ckt); if (i) ckt->CKTtroubleNode = 0; return(i);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?