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