1 /**********
2 Copyright 1990 Regents of the University of California.  All rights reserved.
3 Author: 1985 Thomas L. Quarles
4 **********/
5 
6 #ifndef VSRC
7 #define VSRC
8 
9 #include "ngspice/ifsim.h"
10 #include "ngspice/cktdefs.h"
11 #include "ngspice/gendefs.h"
12 #include "ngspice/complex.h"
13 
14 struct trnoise_state;
15 
16 /*
17  * structures to describe independent voltage sources
18  */
19 
20 
21 /* information needed for each instance */
22 
23 typedef struct sVSRCinstance {
24 
25     struct GENinstance gen;
26 
27 #define VSRCmodPtr(inst) ((struct sVSRCmodel *)((inst)->gen.GENmodPtr))
28 #define VSRCnextInstance(inst) ((struct sVSRCinstance *)((inst)->gen.GENnextInstance))
29 #define VSRCname gen.GENname
30 #define VSRCstate gen.GENstate
31 
32     const int VSRCposNode;    /* number of positive node of source */
33     const int VSRCnegNode;    /* number of negative node of source */
34 
35     int VSRCbranch; /* equation number of branch equation added for source */
36 
37     int VSRCfunctionType;   /* code number of function type for source */
38     int VSRCfunctionOrder;  /* order of the function for the source */
39     int VSRCrBreakpt;       /* pwl repeat breakpoint index */
40     double *VSRCcoeffs; /* pointer to array of coefficients */
41 
42     double VSRCdcValue; /* DC and TRANSIENT value of source */
43 
44     double VSRCacPhase; /* AC phase angle */
45     double VSRCacMag; /* AC magnitude */
46 
47     double VSRCacReal; /* AC real component */
48     double VSRCacImag; /* AC imaginary component */
49 
50     double VSRCdF1mag; /* distortion f1 magnitude */
51     double VSRCdF2mag; /* distortion f2 magnitude */
52     double VSRCdF1phase; /* distortion f1 phase */
53     double VSRCdF2phase; /* distortion f2 phase */
54 
55     struct trnoise_state *VSRCtrnoise_state; /* transient noise */
56     struct trrandom_state *VSRCtrrandom_state; /* transient random source */
57 
58     double VSRCr;           /* pwl repeat */
59     double VSRCrdelay;     /* pwl delay period */
60     double *VSRCposIbrPtr;  /* pointer to sparse matrix element at
61                              * (positive node, branch equation) */
62     double *VSRCnegIbrPtr;  /* pointer to sparse matrix element at
63                              * (negative node, branch equation) */
64     double *VSRCibrPosPtr;  /* pointer to sparse matrix element at
65                              * (branch equation, positive node) */
66     double *VSRCibrNegPtr;  /* pointer to sparse matrix element at
67                              * (branch equation, negative node) */
68     double *VSRCibrIbrPtr;  /* pointer to sparse matrix element at
69                              * (branch equation, branch equation) */
70     unsigned VSRCdcGiven     :1 ;  /* flag to indicate dc value given */
71     unsigned VSRCacGiven     :1 ;  /* flag to indicate ac keyword given */
72     unsigned VSRCacMGiven    :1 ;  /* flag to indicate ac magnitude given */
73     unsigned VSRCacPGiven    :1 ;  /* flag to indicate ac phase given */
74     unsigned VSRCfuncTGiven  :1 ;  /* flag to indicate function type given */
75     unsigned VSRCcoeffsGiven :1 ;  /* flag to indicate function coeffs given */
76     unsigned VSRCdGiven      :1 ;  /* flag to indicate source is a distortion input */
77     unsigned VSRCdF1given    :1 ;  /* flag to indicate source is an f1 distortion input */
78     unsigned VSRCdF2given    :1 ;  /* flag to indicate source is an f2 distortion input */
79     unsigned VSRCrGiven      :1 ;  /* flag to indicate repeating pwl */
80 } VSRCinstance ;
81 
82 
83 /* per model data */
84 
85 typedef struct sVSRCmodel {
86 
87     struct GENmodel gen;
88 
89 #define VSRCmodType gen.GENmodType
90 #define VSRCnextModel(inst) ((struct sVSRCmodel *)((inst)->gen.GENnextModel))
91 #define VSRCinstances(inst) ((VSRCinstance *)((inst)->gen.GENinstances))
92 #define VSRCmodName gen.GENmodName
93 
94 } VSRCmodel;
95 
96 /* source function types (shared with current sources) */
97 #ifndef PULSE_FUN_TYPES
98 #define PULSE_FUN_TYPES
99 enum {
100     PULSE = 1,
101     SINE,
102     EXP,
103     SFFM,
104     PWL,
105     AM,
106     TRNOISE,
107     TRRANDOM,
108     EXTERNAL,
109 };
110 
111 #endif
112 
113 /* device parameters */
114 enum {
115     VSRC_DC = 1,
116     VSRC_AC,
117     VSRC_AC_MAG,
118     VSRC_AC_PHASE,
119     VSRC_PULSE,
120     VSRC_SINE,
121     VSRC_EXP,
122     VSRC_PWL,
123     VSRC_SFFM,
124     VSRC_BR,
125     VSRC_FCN_TYPE,
126     VSRC_FCN_ORDER,
127     VSRC_FCN_COEFFS,
128     VSRC_AC_REAL,
129     VSRC_AC_IMAG,
130     VSRC_POS_NODE,
131     VSRC_NEG_NODE,
132     VSRC_CURRENT,
133     VSRC_POWER,
134     VSRC_D_F1,
135     VSRC_D_F2,
136     VSRC_AM,
137     VSRC_R,
138     VSRC_TD,
139     VSRC_TRNOISE,
140     VSRC_TRRANDOM,
141     VSRC_EXTERNAL,
142 };
143 
144 /* model parameters */
145 
146 /* device questions */
147 
148 /* model questions */
149 
150 #include "vsrcext.h"
151 
152 #endif /*VSRC*/
153