1 /**********
2 Copyright 1990 Regents of the University of California.  All rights reserved.
3 Author: 1985 Thomas L. Quarles
4 **********/
5 
6 #include "ngspice/ngspice.h"
7 #include "ngspice/cktdefs.h"
8 #include "ngspice/smpdefs.h"
9 #include "ngspice/sperror.h"
10 #include "ngspice/devdefs.h"
11 
12 
13 int
CKTic(CKTcircuit * ckt)14 CKTic(CKTcircuit *ckt)
15 {
16     int error;
17     int size;
18     int i;
19     CKTnode *node;
20 
21     size = SMPmatSize(ckt->CKTmatrix);
22     for (i=0;i<=size;i++) {
23         ckt->CKTrhs[i]=0;
24     }
25 
26     for(node = ckt->CKTnodes;node != NULL; node = node->next) {
27         if(node->nsGiven) {
28             node->ptr = SMPmakeElt(ckt->CKTmatrix,node->number,node->number);
29             if(node->ptr == NULL) return(E_NOMEM);
30             ckt->CKThadNodeset = 1;
31             ckt->CKTrhsOld[node->number] = ckt->CKTrhs[node->number] = node->nodeset;
32         }
33         if(node->icGiven) {
34             if(! ( node->ptr)) {
35                 node->ptr = SMPmakeElt(ckt->CKTmatrix,node->number,
36                         node->number);
37                 if(node->ptr == NULL) return(E_NOMEM);
38             }
39             ckt->CKTrhsOld[node->number] = ckt->CKTrhs[node->number] = node->ic;
40         }
41     }
42 
43     if(ckt->CKTmode & MODEUIC) {
44         for (i=0;i<DEVmaxnum;i++) {
45             if( DEVices[i] && DEVices[i]->DEVsetic && ckt->CKThead[i] ) {
46                 error = DEVices[i]->DEVsetic (ckt->CKThead[i], ckt);
47                 if(error) return(error);
48             }
49         }
50     }
51 
52     return(OK);
53 }
54