Jspice3
cktload.c File Reference
#include "spice.h"
#include <stdio.h>
#include "devdefs.h"
#include "optdefs.h"
#include "sperror.h"
#include "cktext.h"
Include dependency graph for cktload.c:

Go to the source code of this file.

Functions

int CKTload (CKTcircuit *ckt)
 

Function Documentation

int CKTload ( CKTcircuit ckt)

Definition at line 23 of file cktload.c.

26 {
27  extern SPICEdev *DEVices[];
28  int i;
29  int size;
30  int error;
31  int (*func)();
32  double startTime;
33  CKTnode *node;
34  struct sCKTmodHead *mh;
35 #ifdef STEPDEBUG
36  int noncon;
37 #endif /* STEPDEBUG */
38 
39  startTime = (*(SPfrontEnd->IFseconds))();
40  size = spGetSize(ckt->CKTmatrix,1);
41  for (i = 0; i <= size; i++) {
42  *(ckt->CKTrhs + i) = 0;
43  }
44 
45  /* Reset the real part of the matrix by loading the imaginary
46  * part, in which things might be cached.
47  */
48  spItoR((char*)ckt->CKTmatrix);
49 
50 #ifdef STEPDEBUG
51  noncon = ckt->CKTnoncon;
52 #endif /* STEPDEBUG */
53 
54  for (mh = ckt->CKTheadList; mh != NULL; mh = mh->next) {
55  if ((func = DEVices[mh->type]->DEVload) != NULL) {
56  error = (*func)(mh->head,ckt);
57 
58 #ifdef STEPDEBUG
59  if(noncon != ckt->CKTnoncon) {
60  printf("device type %s nonconvergence\n",
61  DEVices[mh->type]->DEVpublic.name);
62  noncon = ckt->CKTnoncon;
63  }
64 #endif /* STEPDEBUG */
65 
66  if (error) return (error);
67  }
68  }
69  if (ckt->CKTmode & MODEDC) {
70  /* consider doing nodeset & ic assignments */
71  if (ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) {
72  /* do nodesets */
73  for (node = ckt->CKTnodes; node; node = node->next) {
74  if (node->nsGiven) {
75  *(ckt->CKTrhs + node->number) += node->nodeset;
76  *(node->ptr) += 1;
77  }
78  }
79  }
80  if ((ckt->CKTmode & MODETRANOP) && (!(ckt->CKTmode & MODEUIC))) {
81  for (node = ckt->CKTnodes; node; node = node->next) {
82  if (node->icGiven) {
83  *(ckt->CKTrhs + node->number) += node->ic;
84  *(node->ptr) += 1;
85  }
86  }
87  }
88  }
89  ((STATistics*)ckt->CKTstat)->STATloadTime +=
90  (*(SPfrontEnd->IFseconds))() - startTime;
91  return (OK);
92 }
unsigned int nsGiven
Definition: cktdefs.h:45
#define MODEDC
Definition: cktdefs.h:149
struct sCKTmodHead * next
Definition: cktdefs.h:58
SPICEdev * DEVices[]
Definition: sconfig.c:109
unsigned int icGiven
Definition: cktdefs.h:44
SMPmatrix * CKTmatrix
Definition: cktdefs.h:95
double nodeset
Definition: cktdefs.h:41
IFfrontEnd * SPfrontEnd
Definition: main.c:917
IFdevice DEVpublic
Definition: devdefs.h:44
GENERIC * CKTstat
Definition: cktdefs.h:67
#define OK
Definition: iferrmsg.h:17
struct sCKTmodHead * CKTheadList
Definition: cktdefs.h:63
#define NULL
Definition: spdefs.h:121
struct sCKTnode * next
Definition: cktdefs.h:43
int number
Definition: cktdefs.h:39
CKTnode * CKTnodes
Definition: cktdefs.h:135
#define MODETRANOP
Definition: cktdefs.h:151
double * ptr
Definition: cktdefs.h:42
int spGetSize()
char * name
Definition: ifsim.h:293
#define MODEINITFIX
Definition: cktdefs.h:158
Definition: fteparse.h:37
void spItoR()
int type
Definition: cktdefs.h:56
GENmodel * head
Definition: cktdefs.h:57
int(* DEVload)()
Definition: devdefs.h:92
int CKTnoncon
Definition: cktdefs.h:203
long CKTmode
Definition: cktdefs.h:139
#define MODEINITJCT
Definition: cktdefs.h:157
double ic
Definition: cktdefs.h:40
double * CKTrhs
Definition: cktdefs.h:97
#define MODEUIC
Definition: cktdefs.h:166