📄 mifcmdat.h
字号:
#ifndef MIFCMDAT#define MIFCMDAT/* ===========================================================================FILE MIFcmdat.hMEMBER OF process XSPICECopyright 1991Georgia Tech Research CorporationAtlanta, Georgia 30332All Rights ReservedPROJECT A-8503AUTHORS 9/12/91 Bill KuhnMODIFICATIONS <date> <person name> <nature of modifications>SUMMARY This file contains the data structure definitions used by code model and the associated MIF package. A special preprocessor (cmpp) is used on models written by a user to turn items like INPUT(<name>) into the appropriate structure reference.INTERFACES None.REFERENCED FILES None.NON-STANDARD FEATURES None.=========================================================================== */#include "miftypes.h"/* ************************************************************************** *//* * Pointers into matrix for a voltage input, voltage output partial */typedef struct Mif_E_Ptr_s { double *branch_poscntl; /* Branch row, positive controlling column */ double *branch_negcntl; /* Branch row, negative controlling column */} Mif_E_Ptr_t;/* * Pointers into matrix for a current input, current output partial */typedef struct Mif_F_Ptr_s { double *pos_ibranchcntl; /* Positive row, controlling branch column */ double *neg_ibranchcntl; /* Negative row, controlling branch column */} Mif_F_Ptr_t;/* * Pointers into matrix for a voltage input, current output partial */typedef struct Mif_G_Ptr_s { double *pos_poscntl; /* Positive row, positive controlling column */ double *pos_negcntl; /* Positive row, negative controlling column */ double *neg_poscntl; /* Negative row, positive controlling column */ double *neg_negcntl; /* Negative row, negative controlling column */} Mif_G_Ptr_t;/* * Pointers into matrix for a current input, voltage output partial */typedef struct Mif_H_Ptr_s { double *branch_ibranchcntl; /* Branch row, controlling branch column */} Mif_H_Ptr_t;/* * Matrix pointers associated with a particular port (of a particular type) */typedef union Mif_Port_Ptr_u { Mif_E_Ptr_t e; /* Pointers for voltage input, voltage output */ Mif_F_Ptr_t f; /* Pointers for current input, current output */ Mif_G_Ptr_t g; /* Pointers for voltage input, current output */ Mif_H_Ptr_t h; /* Pointers for current input, voltage output */} Mif_Port_Ptr_t;/* * Array of matrix data pointers for particular ports in a connection */typedef struct Mif_Conn_Ptr_s { Mif_Port_Ptr_t *port; /* Data for a particular port */} Mif_Conn_Ptr_t;/* * Row numbers and matrix entry pointers for loading the matrix and RHS with * data appropriate for the particular output port and input ports. */typedef struct Mif_Smp_Ptr_s { /* Data at this level is for this connection. The Mif_Conn_Ptr_t */ /* subtree is used only if this connection is an output. It supplies */ /* the matrix pointers required for loading the partials from each */ /* input. */ /* node connection equation numbers */ int pos_node; /* Row associated with positive node */ int neg_node; /* Row associated with negative node */ /* V source branch equation numbers */ int branch; /* Row associated with V output branch */ int ibranch; /* Row associated with I input branch */ /* matrix pointers for V source output */ double *pos_branch; /* Positive node row, branch column */ double *neg_branch; /* Negative node row, branch column */ double *branch_pos; /* Branch row, positive node column */ double *branch_neg; /* Branch row, negative node column */ /* matrix pointers for the zero-valued V source associated with an I input */ double *pos_ibranch; /* Positive node row, branch column */ double *neg_ibranch; /* Negative node row, branch column */ double *ibranch_pos; /* Branch row, positive node column */ double *ibranch_neg; /* Branch row, negative node column */ /* array of pointer info required for putting partials into the matrix */ Mif_Conn_Ptr_t *input; /* Matrix pointers associated with inputs */} Mif_Smp_Ptr_t;/* ******************************************************************** *//* * Partial derivatives wrt ports of a particular input connection */typedef struct Mif_Partial_s { double *port; /* Partial wrt this port */} Mif_Partial_t;/* * AC gains wrt ports of a particular input connection */typedef struct Mif_AC_Gain_s { Mif_Complex_t *port; /* AC gain wrt this port */} Mif_AC_Gain_t;/* * Data used to access information in event struct in CKTcircuit struct ckt */typedef struct { int node_index; /* Index of node in event-driven structures */ int output_subindex; /* Subindex of output on node */ int port_index; /* Index of port in event-driven structures */ int output_index; /* Index of output in event-driven structures */} Mif_Evt_Data_t;/* * Information about individual port(s) of a connection. */typedef struct Mif_Port_Data_s { Mif_Port_Type_t type; /* Port type - e.g. MIF_VOLTAGE, ... */ char *type_str; /* Port type in string form */ char *pos_node_str; /* Positive node identifier */ char *neg_node_str; /* Negative node identifier */ char *vsource_str; /* Voltage source identifier */ Mif_Boolean_t is_null; /* Set to true if null in SPICE deck */ Mif_Value_t input; /* The input value */ Mif_Value_t output; /* The output value */ Mif_Partial_t *partial; /* Partials for this port wrt inputs */ Mif_AC_Gain_t *ac_gain; /* AC gains for this port wrt inputs */ int old_input; /* Index into CKTstate for old input */ Mif_Boolean_t invert; /* True if state should be inverted */ Mif_Boolean_t changed; /* A new output has been assigned */ double load; /* Load factor output to this port */ double total_load; /* Total load for this port */ double delay; /* Digital delay for this output port */ char *msg; /* Message string output to port */ Mif_Smp_Ptr_t smp_data; /* Pointers used to load matrix/rhs */ Mif_Evt_Data_t evt_data; /* Data used to access evt struct */ double nominal_output; /* Saved output when doing auto partial */} Mif_Port_Data_t;/* ******************************************************************** *//* * Information in MIFinstance struct used by cm_.. support functions. */typedef struct Mif_State_s { /* for cm_analog_alloc() */ int tag; /* Tag identifying this particular state */ int index; /* Index into ckt->CKTstate[i] vector */ int doubles; /* Number of doubles allocated for this state */ int bytes; /* Actual number of bytes requested by cm_analog_alloc() */} Mif_State_t;typedef struct Mif_Intgr_s { /* for cm_analog_integrate() */ int byte_index; /* Byte offset into state array */} Mif_Intgr_t;typedef struct Mif_Conv_s { /* for cm_analog_converge() */ int byte_index; /* Byte offset into state array */ double last_value; /* Value at last iteration */} Mif_Conv_t;/* ******************************************************************** *//* * Information about the circuit in which this model is simulating. */typedef struct Mif_Circ_Data_s { Mif_Boolean_t init; /* True if first call to model - a setup pass */ Mif_Analysis_t anal_type; /* Current analysis type */ Mif_Boolean_t anal_init; /* True if first call in this analysis type */ Mif_Call_Type_t call_type; /* Analog or event type call */ double time; /* Current analysis time */ double frequency; /* Current analysis frequency */ double temperature; /* Current analysis temperature */ double t[8]; /* History of last 8 analysis times t[0]=time */} Mif_Circ_Data_t;/* * The structure associated with a named "connection" on the model. */typedef struct Mif_Conn_Data_s { char *name; /* Name of this connection - currently unused */ char *description; /* Description of this connection - unused */ Mif_Boolean_t is_null; /* Set to true if null in SPICE deck */ Mif_Boolean_t is_input; /* Set to true if connection is an input */ Mif_Boolean_t is_output; /* Set to true if connection is an output */ int size; /* The size of an array (1 if scalar) */ Mif_Port_Data_t **port; /* Pointer(s) to port(s) for this connection */} Mif_Conn_Data_t;/* * Values for model parameters */typedef struct Mif_Param_Data_s { Mif_Boolean_t is_null; /* True if no value given on .model card */ int size; /* Size of array (1 if scalar) */ Mif_Value_t *element; /* Value of parameter(s) */} Mif_Param_Data_t;/* * Values for instance variables */typedef struct Mif_Inst_Var_Data_s { int size; /* Size of array (1 if scalar) */ Mif_Value_t *element; /* Value of instance variables(s) */} Mif_Inst_Var_Data_t;/* ************************************************************************* *//* * HERE IT IS!!! * The top level data structure passed to code models. */typedef struct Mif_Private_s { Mif_Circ_Data_t circuit; /* Information about the circuit */ int num_conn; /* Number of connections on this model */ Mif_Conn_Data_t **conn; /* Information about each connection */ int num_param; /* Number of parameters on this model */ Mif_Param_Data_t **param; /* Information about each parameter */ int num_inst_var; /* Number of instance variables */ Mif_Inst_Var_Data_t **inst_var; /* Information about each inst variable */} Mif_Private_t;#endif /* MIFCMDAT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -