You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
8.2 KiB
226 lines
8.2 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Thomas L. Quarles
|
|
**********/
|
|
|
|
#ifndef IND
|
|
#define IND
|
|
|
|
|
|
/* turn on mutual inductor code */
|
|
#define MUTUAL
|
|
|
|
#include "ngspice/ifsim.h"
|
|
#include "ngspice/complex.h"
|
|
#include "ngspice/gendefs.h"
|
|
#include "ngspice/cktdefs.h"
|
|
|
|
typedef struct sINDinstance INDinstance;
|
|
typedef struct sINDmodel INDmodel;
|
|
typedef struct sMUTinstance MUTinstance;
|
|
typedef struct sMUTmodel MUTmodel;
|
|
|
|
|
|
/* structures used to descrive inductors */
|
|
|
|
|
|
/* information needed for each instance */
|
|
|
|
struct sINDinstance {
|
|
INDmodel *INDmodPtr; /* backpointer to model */
|
|
INDinstance *INDnextInstance; /* pointer to next instance of
|
|
* current model */
|
|
IFuid INDname; /* pointer to character string naming this instance */
|
|
int INDstate; /* pointer to beginning of state vector for inductor */
|
|
int INDposNode; /* number of positive node of inductor */
|
|
int INDnegNode; /* number of negative node of inductor */
|
|
|
|
int INDbrEq; /* number of the branch equation added for current */
|
|
double INDinduct; /* inductance */
|
|
double INDm; /* Parallel multiplier */
|
|
double INDtc1; /* first temperature coefficient of resistors */
|
|
double INDtc2; /* second temperature coefficient of resistors */
|
|
double INDtemp; /* Instance operating temperature */
|
|
double INDdtemp; /* Delta temp. of instance */
|
|
double INDscale; /* Scale factor */
|
|
double INDnt; /* Number of turns */
|
|
double INDinitCond; /* initial inductor voltage if specified */
|
|
|
|
double *INDposIbrptr; /* pointer to sparse matrix diagonal at
|
|
* (positive,branch eq) */
|
|
double *INDnegIbrptr; /* pointer to sparse matrix diagonal at
|
|
* (negative,branch eq) */
|
|
double *INDibrNegptr; /* pointer to sparse matrix offdiagonal at
|
|
* (branch eq,negative) */
|
|
double *INDibrPosptr; /* pointer to sparse matrix offdiagonal at
|
|
* (branch eq,positive) */
|
|
double *INDibrIbrptr; /* pointer to sparse matrix offdiagonal at
|
|
* (branch eq,branch eq) */
|
|
|
|
unsigned INDindGiven : 1; /* flag to indicate inductance was specified */
|
|
unsigned INDicGiven : 1; /* flag to indicate init. cond. was specified */
|
|
unsigned INDmGiven : 1; /* flag to indicate multiplier given */
|
|
unsigned INDtc1Given : 1; /* indicates tc1 parameter specified */
|
|
unsigned INDtc2Given : 1; /* indicates tc2 parameter specified */
|
|
unsigned INDtempGiven : 1; /* flag to indicate operating temp. given */
|
|
unsigned INDdtempGiven : 1; /* flag to indicate delta temp. given */
|
|
unsigned INDscaleGiven : 1; /* flag to indicate scale factor given */
|
|
unsigned INDntGiven : 1; /* flag to indicate number of turns given */
|
|
int INDsenParmNo; /* parameter # for sensitivity use;
|
|
* set equal to 0 if not a design parameter */
|
|
|
|
struct INDsystem *system;
|
|
INDinstance *system_next_ind;
|
|
int system_idx;
|
|
};
|
|
|
|
#define INDflux INDstate /* flux in the inductor */
|
|
#define INDvolt INDstate+1 /* voltage - save an entry in table */
|
|
#define INDsensxp INDstate+2 /* charge sensitivities and their derivatives.
|
|
* +3 for the derivatives - pointer to the
|
|
* beginning of the array */
|
|
|
|
|
|
/* per model data */
|
|
|
|
struct sINDmodel { /* model structure for an inductor */
|
|
int INDmodType; /* type index of this device type */
|
|
INDmodel *INDnextModel; /* pointer to next possible model in
|
|
* linked list */
|
|
INDinstance *INDinstances; /* pointer to list of instances that have this
|
|
* model */
|
|
IFuid INDmodName; /* pointer to character string naming this model */
|
|
|
|
/* --- end of generic struct GENmodel --- */
|
|
|
|
double INDmInd; /* Model inductance */
|
|
double INDtnom; /* temperature at which inductance measured */
|
|
double INDtempCoeff1; /* first temperature coefficient */
|
|
double INDtempCoeff2; /* second temperature coefficient */
|
|
double INDcsect; /* Cross section of inductor */
|
|
double INDlength; /* Mean length of magnetic path */
|
|
double INDmodNt; /* Model number of turns */
|
|
double INDmu; /* Relative magnetic permeability */
|
|
|
|
unsigned INDtnomGiven : 1; /* flag to indicate nominal temp was given */
|
|
unsigned INDtc1Given : 1; /* flag to indicate tc1 was specified */
|
|
unsigned INDtc2Given : 1; /* flag to indicate tc2 was specified */
|
|
unsigned INDcsectGiven : 1; /* flag to indicate cross section given */
|
|
unsigned INDlengthGiven: 1; /* flag to indicate length given */
|
|
unsigned INDmodNtGiven : 1; /* flag to indicate mod. n. of turns given */
|
|
unsigned INDmuGiven : 1; /* flag to indicate mu_r given */
|
|
unsigned INDmIndGiven : 1; /* flag to indicate model inductance given */
|
|
|
|
double INDspecInd; /* Specific (one turn) inductance */
|
|
};
|
|
|
|
|
|
#ifdef MUTUAL
|
|
|
|
/* structures used to describe mutual inductors */
|
|
|
|
|
|
/* information needed for each instance */
|
|
|
|
struct sMUTinstance {
|
|
MUTmodel *MUTmodPtr; /* backpointer to model */
|
|
MUTinstance *MUTnextInstance; /* pointer to next instance of
|
|
* current model */
|
|
IFuid MUTname; /* pointer to character string naming this instance */
|
|
double MUTcoupling; /* mutual inductance input by user */
|
|
double MUTfactor; /* mutual inductance scaled for internal use */
|
|
IFuid MUTindName1; /* name of coupled inductor 1 */
|
|
IFuid MUTindName2; /* name of coupled inductor 2 */
|
|
INDinstance *MUTind1; /* pointer to coupled inductor 1 */
|
|
INDinstance *MUTind2; /* pointer to coupled inductor 2 */
|
|
double *MUTbr1br2; /* pointers to off-diagonal intersections of */
|
|
double *MUTbr2br1; /* current branch equations in matrix */
|
|
|
|
unsigned MUTindGiven : 1; /* flag to indicate inductance was specified */
|
|
int MUTsenParmNo; /* parameter # for sensitivity use;
|
|
* set equal to 0 if not a design parameter */
|
|
|
|
MUTinstance *system_next_mut;
|
|
};
|
|
|
|
|
|
/* per model data */
|
|
|
|
struct sMUTmodel { /* model structure for a mutual inductor */
|
|
int MUTmodType; /* type index of this device type */
|
|
MUTmodel *MUTnextModel; /* pointer to next possible model in
|
|
* linked list */
|
|
MUTinstance *MUTinstances; /* pointer to list of instances that have this
|
|
* model */
|
|
IFuid MUTmodName; /* pointer to character string naming this model */
|
|
|
|
/* --- end of generic struct GENmodel --- */
|
|
};
|
|
|
|
|
|
struct INDsystem {
|
|
int size;
|
|
INDinstance *first_ind;
|
|
MUTinstance *first_mut;
|
|
struct INDsystem *next_system;
|
|
};
|
|
|
|
#endif /*MUTUAL*/
|
|
|
|
/* device parameters */
|
|
#define IND_IND 1
|
|
#define IND_IC 2
|
|
#define IND_FLUX 3
|
|
#define IND_VOLT 4
|
|
#define IND_IND_SENS 5
|
|
#define IND_CURRENT 6
|
|
#define IND_POWER 7
|
|
#define IND_M 8
|
|
#define IND_TEMP 9
|
|
#define IND_DTEMP 10
|
|
#define IND_SCALE 11
|
|
#define IND_NT 12
|
|
#define IND_TC1 13
|
|
#define IND_TC2 14
|
|
|
|
/* model parameters */
|
|
#define IND_MOD_IND 100
|
|
#define IND_MOD_TC1 101
|
|
#define IND_MOD_TC2 102
|
|
#define IND_MOD_TNOM 103
|
|
#define IND_MOD_CSECT 104
|
|
#define IND_MOD_LENGTH 105
|
|
#define IND_MOD_NT 106
|
|
#define IND_MOD_MU 107
|
|
#define IND_MOD_L 108
|
|
|
|
/* device questions */
|
|
#define IND_QUEST_SENS_REAL 201
|
|
#define IND_QUEST_SENS_IMAG 202
|
|
#define IND_QUEST_SENS_MAG 203
|
|
#define IND_QUEST_SENS_PH 204
|
|
#define IND_QUEST_SENS_CPLX 205
|
|
#define IND_QUEST_SENS_DC 206
|
|
|
|
#ifdef MUTUAL
|
|
/* device parameters */
|
|
#define MUT_COEFF 401
|
|
#define MUT_IND1 402
|
|
#define MUT_IND2 403
|
|
#define MUT_COEFF_SENS 404
|
|
|
|
/* model parameters */
|
|
|
|
/* device questions */
|
|
#define MUT_QUEST_SENS_REAL 601
|
|
#define MUT_QUEST_SENS_IMAG 602
|
|
#define MUT_QUEST_SENS_MAG 603
|
|
#define MUT_QUEST_SENS_PH 604
|
|
#define MUT_QUEST_SENS_CPLX 605
|
|
#define MUT_QUEST_SENS_DC 606
|
|
|
|
#endif /*MUTUAL*/
|
|
|
|
#include "indext.h"
|
|
|
|
#endif /*IND*/
|