Jspice3
capload.c File Reference
#include "spice.h"
#include <stdio.h>
#include "capdefs.h"
#include "util.h"
#include "sperror.h"
#include "niext.h"
Include dependency graph for capload.c:

Go to the source code of this file.

Functions

int CAPload (GENmodel *inModel, CKTcircuit *ckt)
 

Function Documentation

int CAPload ( GENmodel inModel,
CKTcircuit ckt 
)

Definition at line 17 of file capload.c.

24 {
25  CAPmodel *model = (CAPmodel*)inModel;
26  CAPinstance *here;
27  int error;
28 
29  if (ckt->CKTmode & MODEDC)
30  return (OK);
31 
32  if (ckt->CKTmode & MODEINITFLOAT) {
33  double ag0 = ckt->CKTag[0];
34  double qcap;
35 
36  /* loop through all the capacitor models */
37  for ( ; model != NULL; model = model->CAPnextModel) {
38 
39  /* loop through all the instances of the model */
40  for (here = model->CAPinstances; here != NULL;
41  here = here->CAPnextInstance) {
42 
43  qcap = here->CAPcapac *
44  (*(ckt->CKTrhsOld + here->CAPposNode) -
45  *(ckt->CKTrhsOld + here->CAPnegNode));
46 
47  *(ckt->CKTstate0 + here->CAPqcap) = qcap;
48 
49  *(ckt->CKTstate0 + here->CAPccap) =
50  ag0*qcap + here->CAPceq;
51 
52  if (here->CAPposNode == 0) {
53  *(ckt->CKTrhs + here->CAPnegNode) += here->CAPceq;
54  *(here->CAPnegNegptr) += here->CAPgeq;
55  continue;
56  }
57  if (here->CAPnegNode == 0) {
58  *(ckt->CKTrhs + here->CAPposNode) -= here->CAPceq;
59  *(here->CAPposPosptr) += here->CAPgeq;
60  continue;
61  }
62  *(here->CAPposPosptr) += here->CAPgeq;
63  *(here->CAPnegNegptr) += here->CAPgeq;
64  *(here->CAPposNegptr) -= here->CAPgeq;
65  *(here->CAPnegPosptr) -= here->CAPgeq;
66  *(ckt->CKTrhs + here->CAPposNode) -= here->CAPceq;
67  *(ckt->CKTrhs + here->CAPnegNode) += here->CAPceq;
68  }
69  }
70  return (OK);
71  }
72 
73  if (ckt->CKTmode & MODEINITPRED) {
74 
75  /* loop through all the capacitor models */
76  for ( ; model != NULL; model = model->CAPnextModel) {
77 
78  /* loop through all the instances of the model */
79  for (here = model->CAPinstances; here != NULL;
80  here = here->CAPnextInstance) {
81 
82  here->CAPgeq = ckt->CKTag[0] * here->CAPcapac;
83 
84  NI_SUM(ckt,here->CAPceq,here->CAPqcap);
85 
86  if (here->CAPposNode == 0) {
87  *(ckt->CKTrhs + here->CAPnegNode) += here->CAPceq;
88  *(here->CAPnegNegptr) += here->CAPgeq;
89  continue;
90  }
91  if (here->CAPnegNode == 0) {
92  *(ckt->CKTrhs + here->CAPposNode) -= here->CAPceq;
93  *(here->CAPposPosptr) += here->CAPgeq;
94  continue;
95  }
96  *(here->CAPposPosptr) += here->CAPgeq;
97  *(here->CAPnegNegptr) += here->CAPgeq;
98  *(here->CAPposNegptr) -= here->CAPgeq;
99  *(here->CAPnegPosptr) -= here->CAPgeq;
100  *(ckt->CKTrhs + here->CAPposNode) -= here->CAPceq;
101  *(ckt->CKTrhs + here->CAPnegNode) += here->CAPceq;
102  }
103  }
104  return (OK);
105  }
106 
107  if (ckt->CKTmode & MODEINITTRAN) {
108 
109  /* loop through all the capacitor models */
110  for ( ; model != NULL; model = model->CAPnextModel) {
111 
112  /* loop through all the instances of the model */
113  for (here = model->CAPinstances; here != NULL;
114  here = here->CAPnextInstance) {
115 
116  if (ckt->CKTmode & MODEUIC) {
117  *(ckt->CKTstate1 + here->CAPqcap) =
118  here->CAPcapac * here->CAPinitCond;
119  }
120  else {
121  *(ckt->CKTstate1 + here->CAPqcap) =
122  here->CAPcapac *
123  (*(ckt->CKTrhsOld + here->CAPposNode) -
124  *(ckt->CKTrhsOld + here->CAPnegNode));
125  }
126 
127  here->CAPgeq = ckt->CKTag[0] * here->CAPcapac;
128 
129  NI_SUM(ckt,here->CAPceq,here->CAPqcap);
130 
131  *(here->CAPposPosptr) += here->CAPgeq;
132  *(here->CAPnegNegptr) += here->CAPgeq;
133  *(here->CAPposNegptr) -= here->CAPgeq;
134  *(here->CAPnegPosptr) -= here->CAPgeq;
135  *(ckt->CKTrhs + here->CAPposNode) -= here->CAPceq;
136  *(ckt->CKTrhs + here->CAPnegNode) += here->CAPceq;
137  }
138  }
139  }
140  return (OK);
141 }
int CAPnegNode
Definition: capdefs.h:26
#define MODEINITPRED
Definition: cktdefs.h:161
#define MODEDC
Definition: cktdefs.h:149
double * CAPnegPosptr
Definition: capdefs.h:40
struct sCAPinstance * CAPnextInstance
Definition: capdefs.h:21
double CAPceq
Definition: capdefs.h:29
if(TDesc==NULL)
Definition: cd.c:1326
#define MODEINITFLOAT
Definition: cktdefs.h:156
#define MODEINITTRAN
Definition: cktdefs.h:160
#define NI_SUM(ckt, ceq, qcap)
Definition: devdefs.h:130
double CAPgeq
Definition: capdefs.h:30
double * CAPposNegptr
Definition: capdefs.h:38
CAPinstance * CAPinstances
Definition: capdefs.h:57
#define OK
Definition: iferrmsg.h:17
double * CKTrhsOld
Definition: cktdefs.h:98
double * CAPposPosptr
Definition: capdefs.h:34
#define NULL
Definition: spdefs.h:121
int CAPposNode
Definition: capdefs.h:25
double CAPinitCond
Definition: capdefs.h:28
double CKTag[7]
Definition: cktdefs.h:83
static char model[32]
Definition: subckt.c:76
double * CAPnegNegptr
Definition: capdefs.h:36
double CAPcapac
Definition: capdefs.h:27
long CKTmode
Definition: cktdefs.h:139
struct sCAPmodel * CAPnextModel
Definition: capdefs.h:55
double * CKTrhs
Definition: cktdefs.h:97
#define MODEUIC
Definition: cktdefs.h:166