Jspice3
resnoise.c File Reference
#include "spice.h"
#include <stdio.h>
#include <math.h>
#include "resdefs.h"
#include "noisedef.h"
#include "fteconst.h"
#include "iferrmsg.h"
#include "util.h"
Include dependency graph for resnoise.c:

Go to the source code of this file.

Functions

int RESnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, GENERIC *dataptr, double *OnDens)
 

Function Documentation

int RESnoise ( int  mode,
int  operation,
GENmodel genmodel,
CKTcircuit ckt,
GENERIC dataptr,
double *  OnDens 
)

Definition at line 28 of file resnoise.c.

36 {
37  Ndata *data = (Ndata*)dataptr;
38  RESmodel *model = (RESmodel *) genmodel;
39  RESinstance *inst;
40  char name[N_MXVLNTH];
41  double tempOutNoise;
42  double tempInNoise;
43  double noizDens;
44  double lnNdens;
45  int error;
46 
47  if (operation == N_OPEN) {
48 
49  /* see if we have to to produce a summary report
50  * if so, name the noise generator
51  */
52 
53  if (((NOISEAN*)ckt->CKTcurJob)->NStpsSm == 0)
54  return (OK);
55 
56  if (mode == N_DENS) {
57 
58  for ( ; model; model = model->RESnextModel) {
59  for (inst = model->RESinstances; inst;
60  inst = inst->RESnextInstance) {
61 
62  (void)sprintf(name,"onoise.%s",inst->RESname);
63 
64  data->namelist =
65  (IFuid *)trealloc((char *)data->namelist,
66  (data->numPlots + 1)*sizeof(IFuid));
67 
68  if (!data->namelist)
69  return (E_NOMEM);
70 
71  (*(SPfrontEnd->IFnewUid))(ckt,
72  &(data->namelist[data->numPlots++]),
73  (IFuid)NULL,name,UID_OTHER,(GENERIC **)NULL);
74  /* we've added one more plot */
75  }
76  }
77  return (OK);
78  }
79 
80  if (mode == INT_NOIZ) {
81 
82  for ( ; model; model = model->RESnextModel) {
83  for (inst = model->RESinstances; inst;
84  inst = inst->RESnextInstance) {
85 
86  (void)sprintf(name,"onoise_total.%s",inst->RESname);
87 
88  data->namelist =
89  (IFuid *)trealloc((char *)data->namelist,
90  (data->numPlots + 1)*sizeof(IFuid));
91 
92  if (!data->namelist)
93  return (E_NOMEM);
94 
95  (*(SPfrontEnd->IFnewUid))(ckt,
96  &(data->namelist[data->numPlots++]),
97  (IFuid)NULL,name,UID_OTHER,(GENERIC **)NULL);
98  /* we've added one more plot */
99 
100  (void)sprintf(name,"inoise_total.%s",inst->RESname);
101 
102  data->namelist =
103  (IFuid *)trealloc((char *)data->namelist,
104  (data->numPlots + 1)*sizeof(IFuid));
105 
106  if (!data->namelist)
107  return(E_NOMEM);
108 
109  (*(SPfrontEnd->IFnewUid))(ckt,
110  &(data->namelist[data->numPlots++]),
111  (IFuid)NULL,name,UID_OTHER,(GENERIC **)NULL);
112  /* we've added one more plot */
113  }
114  }
115  }
116  return (OK);
117  }
118 
119  if (operation == N_CALC) {
120 
121  if (mode == N_DENS) {
122 
123  for ( ; model; model = model->RESnextModel) {
124  for (inst = model->RESinstances; inst;
125  inst = inst->RESnextInstance) {
126 
127  NevalSrc(&noizDens,&lnNdens,ckt,THERMNOISE,
128  inst->RESposNode,inst->RESnegNode,inst->RESconduct);
129 
130  *OnDens += noizDens;
131 
132  if (data->delFreq == 0.0) {
133 
134  /* if we haven't done any previous integration,
135  * we need to initialize our "history" variables
136  */
137 
138  inst->RESnVar[LNLSTDENS] = lnNdens;
139 
140  /* clear out our integration variable if it's the
141  * first pass
142  */
143 
144  if (data->freq ==
145  ((NOISEAN*)ckt->CKTcurJob)->AC.fstart) {
146  inst->RESnVar[OUTNOIZ] = 0.0;
147  }
148  }
149  else {
150  /* data->delFreq != 0.0 (we have to integrate) */
151  tempOutNoise = Nintegrate(noizDens, lnNdens,
152  inst->RESnVar[LNLSTDENS], data);
153  tempInNoise = Nintegrate(noizDens *
154  data->GainSqInv ,lnNdens + data->lnGainInv,
155  inst->RESnVar[LNLSTDENS] + data->lnGainInv,
156  data);
157  inst->RESnVar[OUTNOIZ] += tempOutNoise;
158  inst->RESnVar[INNOIZ] += tempInNoise;
159  data->outNoiz += tempOutNoise;
160  data->inNoise += tempInNoise;
161  inst->RESnVar[LNLSTDENS] = lnNdens;
162  }
163  if (data->prtSummary) {
164  data->outpVector[data->outNumber++] = noizDens;
165  }
166  }
167  }
168  return (OK);
169  }
170 
171  if (mode == INT_NOIZ) {
172 
173  if (((NOISEAN*)ckt->CKTcurJob)->NStpsSm == 0)
174  return (OK);
175 
176  for ( ; model; model = model->RESnextModel) {
177  for (inst = model->RESinstances; inst;
178  inst = inst->RESnextInstance) {
179 
180  /* already calculated, just output */
181  data->outpVector[data->outNumber++] =
182  inst->RESnVar[OUTNOIZ];
183  data->outpVector[data->outNumber++] =
184  inst->RESnVar[INNOIZ];
185  }
186  }
187  }
188  }
189  return (OK);
190 }
int RESnegNode
Definition: resdefs.h:26
#define N_MXVLNTH
Definition: noisedef.h:124
#define N_OPEN
Definition: noisedef.h:85
double * outpVector
Definition: noisedef.h:33
Definition: cddefs.h:119
int IFnewUid()
struct sRESmodel * RESnextModel
Definition: resdefs.h:56
#define LNLSTDENS
Definition: noisedef.h:62
if(TDesc==NULL)
Definition: cd.c:1326
IFuid * namelist
Definition: noisedef.h:35
void NevalSrc()
IFfrontEnd * SPfrontEnd
Definition: main.c:917
double lnGainInv
Definition: noisedef.h:25
#define INNOIZ
Definition: noisedef.h:64
int RESposNode
Definition: resdefs.h:25
#define OK
Definition: iferrmsg.h:17
GENERIC * IFuid
Definition: ifsim.h:72
unsigned int prtSummary
Definition: noisedef.h:32
double RESconduct
Definition: resdefs.h:29
double RESnVar[NSTATVARS]
Definition: resdefs.h:47
#define NULL
Definition: spdefs.h:121
#define INT_NOIZ
Definition: noisedef.h:84
IFuid RESname
Definition: resdefs.h:22
#define E_NOMEM
Definition: iferrmsg.h:27
#define N_DENS
Definition: noisedef.h:83
double Nintegrate()
double GainSqInv
Definition: noisedef.h:24
static char model[32]
Definition: subckt.c:76
int outNumber
Definition: noisedef.h:29
return(True)
#define THERMNOISE
Definition: noisedef.h:89
#define UID_OTHER
Definition: ifsim.h:85
int numPlots
Definition: noisedef.h:30
RESinstance * RESinstances
Definition: resdefs.h:58
double delFreq
Definition: noisedef.h:21
double outNoiz
Definition: noisedef.h:22
struct sRESinstance * RESnextInstance
Definition: resdefs.h:20
double inNoise
Definition: noisedef.h:23
double freq
Definition: noisedef.h:19
#define N_CALC
Definition: noisedef.h:86
JOB * CKTcurJob
Definition: cktdefs.h:216
#define OUTNOIZ
Definition: noisedef.h:63
char * trealloc()
char GENERIC
Definition: ifsim.h:27
Definition: noisedef.h:18