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.
148 lines
6.3 KiB
148 lines
6.3 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Thomas L. Quarles
|
|
Modified: September 2003 Paolo Nenzi
|
|
**********/
|
|
|
|
#ifndef CAP
|
|
#define CAP
|
|
|
|
|
|
#include "ngspice/ifsim.h"
|
|
#include "ngspice/complex.h"
|
|
#include "ngspice/gendefs.h"
|
|
#include "ngspice/cktdefs.h"
|
|
|
|
/* structures used to describe capacitors */
|
|
|
|
|
|
/* information to describe each instance */
|
|
|
|
typedef struct sCAPinstance {
|
|
struct sCAPmodel *CAPmodPtr; /* backpointer to model */
|
|
struct sCAPinstance *CAPnextInstance; /* pointer to next instance of
|
|
* current model*/
|
|
IFuid CAPname; /* pointer to character string naming this instance */
|
|
int CAPstate; /* pointer to start of capacitor state vector */
|
|
int CAPposNode; /* number of positive node of capacitor */
|
|
int CAPnegNode; /* number of negative node of capacitor */
|
|
|
|
double CAPtemp; /* temperature at which this capacitor operates */
|
|
double CAPdtemp; /* delta-temperature of this instance */
|
|
double CAPcapac; /* capacitance */
|
|
double CAPinitCond; /* initial capacitor voltage if specified */
|
|
double CAPwidth; /* width of the capacitor */
|
|
double CAPlength; /* length of the capacitor */
|
|
double CAPscale; /* scale factor */
|
|
double CAPm; /* parallel multiplier */
|
|
double CAPtc1; /* first temperature coefficient of capacitors */
|
|
double CAPtc2; /* second temperature coefficient of capacitors */
|
|
|
|
double *CAPposPosptr; /* pointer to sparse matrix diagonal at
|
|
* (positive,positive) */
|
|
double *CAPnegNegptr; /* pointer to sparse matrix diagonal at
|
|
* (negative,negative) */
|
|
double *CAPposNegptr; /* pointer to sparse matrix offdiagonal at
|
|
* (positive,negative) */
|
|
double *CAPnegPosptr; /* pointer to sparse matrix offdiagonal at
|
|
* (negative,positive) */
|
|
unsigned CAPcapGiven : 1; /* flag to indicate capacitance was specified */
|
|
unsigned CAPicGiven : 1; /* flag to indicate init. cond. was specified */
|
|
unsigned CAPwidthGiven : 1; /* flag to indicate capacitor width given */
|
|
unsigned CAPlengthGiven : 1; /* flag to indicate capacitor length given*/
|
|
unsigned CAPtempGiven : 1; /* flag to indicate operating temp given */
|
|
unsigned CAPdtempGiven : 1; /* flag to indicate delta temp given */
|
|
unsigned CAPscaleGiven : 1; /* flag to indicate scale factor given */
|
|
unsigned CAPmGiven : 1; /* flag to indicate parallel multiplier given */
|
|
unsigned CAPtc1Given : 1; /* flag indicates tc1 was specified */
|
|
unsigned CAPtc2Given : 1; /* flag indicates tc2 was specified */
|
|
int CAPsenParmNo; /* parameter # for sensitivity use;
|
|
set equal to 0 if not a design parameter*/
|
|
|
|
} CAPinstance ;
|
|
|
|
#define CAPqcap CAPstate /* charge on the capacitor */
|
|
#define CAPccap CAPstate+1 /* current through the capacitor */
|
|
#define CAPsensxp CAPstate+2 /* charge sensitivities and their derivatives.
|
|
+3 for the derivatives - pointer to the
|
|
beginning of the array */
|
|
|
|
|
|
/* data per model */
|
|
|
|
typedef struct sCAPmodel { /* model structure for a capacitor */
|
|
int CAPmodType; /* type index of this device type */
|
|
struct sCAPmodel *CAPnextModel; /* pointer to next possible model in
|
|
* linked list */
|
|
CAPinstance * CAPinstances; /* pointer to list of instances that have this
|
|
* model */
|
|
IFuid CAPmodName; /* pointer to character string naming this model */
|
|
|
|
double CAPtnom; /* temperature at which capacitance measured */
|
|
double CAPtempCoeff1; /* linear temperature coefficient */
|
|
double CAPtempCoeff2; /* quadratic temperature coefficient */
|
|
double CAPmCap; /* Model default capacitance */
|
|
double CAPcj; /* Unit Area Capacitance ( F/ M**2 ) */
|
|
double CAPcjsw; /* Unit Length Sidewall Capacitance ( F / M ) */
|
|
double CAPdefWidth; /* the default width of a capacitor */
|
|
double CAPdefLength; /* the default length of a capacitor */
|
|
double CAPnarrow; /* amount by which width are less than drawn */
|
|
double CAPshort; /* amount by which length are less than drawn */
|
|
double CAPdi; /* Relative dielectric constant */
|
|
double CAPthick; /* Insulator thickness */
|
|
unsigned CAPmCapGiven : 1; /* flag indicates default capacitance given */
|
|
unsigned CAPcjGiven : 1; /* Unit Area Capacitance ( F/ M**2 ) */
|
|
unsigned CAPcjswGiven : 1; /* Unit Length Sidewall Capacitance( F/M )*/
|
|
unsigned CAPdefWidthGiven : 1; /* flag indicates default width given*/
|
|
unsigned CAPdefLengthGiven : 1; /* flag indicates deafult lenght given */
|
|
unsigned CAPnarrowGiven : 1; /* flag indicates narrowing factor given */
|
|
unsigned CAPshortGiven : 1; /* flag indicates shortening factor given */
|
|
unsigned CAPtnomGiven : 1; /* flag indicates nominal temp. given */
|
|
unsigned CAPtc1Given : 1; /* flag indicates tc1 was specified */
|
|
unsigned CAPtc2Given : 1; /* flag indicates tc2 was specified */
|
|
unsigned CAPdiGiven : 1; /* flag indicates epsilon-ins given */
|
|
unsigned CAPthickGiven : 1; /* flags indicates insulator thickness given */
|
|
|
|
} CAPmodel;
|
|
|
|
/* device parameters */
|
|
#define CAP_CAP 1
|
|
#define CAP_IC 2
|
|
#define CAP_WIDTH 3
|
|
#define CAP_LENGTH 4
|
|
#define CAP_CAP_SENS 5
|
|
#define CAP_CURRENT 6
|
|
#define CAP_POWER 7
|
|
#define CAP_TEMP 8
|
|
#define CAP_DTEMP 9
|
|
#define CAP_SCALE 10
|
|
#define CAP_M 11
|
|
#define CAP_TC1 12
|
|
#define CAP_TC2 13
|
|
|
|
/* model parameters */
|
|
#define CAP_MOD_CJ 101
|
|
#define CAP_MOD_CJSW 102
|
|
#define CAP_MOD_DEFWIDTH 103
|
|
#define CAP_MOD_C 104
|
|
#define CAP_MOD_NARROW 105
|
|
#define CAP_MOD_SHORT 106
|
|
#define CAP_MOD_TC1 107
|
|
#define CAP_MOD_TC2 108
|
|
#define CAP_MOD_TNOM 109
|
|
#define CAP_MOD_DI 110
|
|
#define CAP_MOD_THICK 111
|
|
#define CAP_MOD_CAP 112
|
|
#define CAP_MOD_DEFLENGTH 113
|
|
|
|
/* device questions */
|
|
#define CAP_QUEST_SENS_REAL 201
|
|
#define CAP_QUEST_SENS_IMAG 202
|
|
#define CAP_QUEST_SENS_MAG 203
|
|
#define CAP_QUEST_SENS_PH 204
|
|
#define CAP_QUEST_SENS_CPLX 205
|
|
#define CAP_QUEST_SENS_DC 206
|
|
|
|
#include "capext.h"
|
|
|
|
#endif /*CAP*/
|