Browse Source

devices/vccs: implement multiplier `m' (G source)

pre-master-46
h_vogt 13 years ago
committed by rlar
parent
commit
a469aa9387
  1. 1
      src/spicelib/devices/vccs/vccs.c
  2. 3
      src/spicelib/devices/vccs/vccsask.c
  3. 3
      src/spicelib/devices/vccs/vccsdefs.h
  4. 6
      src/spicelib/devices/vccs/vccspar.c

1
src/spicelib/devices/vccs/vccs.c

@ -11,6 +11,7 @@ Author: 1987 Thomas L. Quarles
IFparm VCCSpTable[] = { /* parameters */ IFparm VCCSpTable[] = { /* parameters */
IOPU("gain", VCCS_TRANS, IF_REAL, "Transconductance of source (gain)"), IOPU("gain", VCCS_TRANS, IF_REAL, "Transconductance of source (gain)"),
IOP ( "m", VCCS_M, IF_REAL , "Parallel multiplier"),
IP("sens_trans", VCCS_TRANS_SENS,IF_FLAG, IP("sens_trans", VCCS_TRANS_SENS,IF_FLAG,
"flag to request sensitivity WRT transconductance"), "flag to request sensitivity WRT transconductance"),
OPU("pos_node", VCCS_POS_NODE, IF_INTEGER, "Positive node of source"), OPU("pos_node", VCCS_POS_NODE, IF_INTEGER, "Positive node of source"),

3
src/spicelib/devices/vccs/vccsask.c

@ -31,6 +31,9 @@ VCCSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *
case VCCS_TRANS: case VCCS_TRANS:
value->rValue = here->VCCScoeff; value->rValue = here->VCCScoeff;
return (OK); return (OK);
case VCCS_M:
value->rValue = here->VCCSmValue;
return (OK);
case VCCS_POS_NODE: case VCCS_POS_NODE:
value->iValue = here->VCCSposNode; value->iValue = here->VCCSposNode;
return (OK); return (OK);

3
src/spicelib/devices/vccs/vccsdefs.h

@ -31,6 +31,7 @@ typedef struct sVCCSinstance {
double VCCSinitCond; /* initial condition (of controlling source) */ double VCCSinitCond; /* initial condition (of controlling source) */
double VCCScoeff; /* coefficient */ double VCCScoeff; /* coefficient */
double VCCSmValue; /* Parallel multiplier */
double *VCCSposContPosptr; /* pointer to sparse matrix element at double *VCCSposContPosptr; /* pointer to sparse matrix element at
* (positive node, control positive node) */ * (positive node, control positive node) */
@ -41,6 +42,7 @@ typedef struct sVCCSinstance {
double *VCCSnegContNegptr; /* pointer to sparse matrix element at double *VCCSnegContNegptr; /* pointer to sparse matrix element at
* (negative node, control negative node) */ * (negative node, control negative node) */
unsigned VCCScoeffGiven :1 ;/* flag to indicate function coeffs given */ unsigned VCCScoeffGiven :1 ;/* flag to indicate function coeffs given */
unsigned VCCSmGiven :1 ;/* flag to indicate multiplier given */
int VCCSsenParmNo; /* parameter # for sensitivity use; int VCCSsenParmNo; /* parameter # for sensitivity use;
set equal to 0 if not a design parameter*/ set equal to 0 if not a design parameter*/
@ -73,6 +75,7 @@ typedef struct sVCCSmodel { /* model structure for a source */
#define VCCS_CURRENT 9 #define VCCS_CURRENT 9
#define VCCS_POWER 10 #define VCCS_POWER 10
#define VCCS_VOLTS 11 #define VCCS_VOLTS 11
#define VCCS_M 12
/* model parameters */ /* model parameters */

6
src/spicelib/devices/vccs/vccspar.c

@ -24,6 +24,12 @@ VCCSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
case VCCS_TRANS: case VCCS_TRANS:
here->VCCScoeff = value->rValue; here->VCCScoeff = value->rValue;
here->VCCScoeffGiven = TRUE; here->VCCScoeffGiven = TRUE;
if (here->VCCSmGiven)
here->VCCScoeff *= here->VCCSmValue;
break;
case VCCS_M:
here->VCCSmValue = value->rValue;
here->VCCSmGiven = TRUE;
break; break;
case VCCS_TRANS_SENS: case VCCS_TRANS_SENS:
here->VCCSsenParmNo = value->iValue; here->VCCSsenParmNo = value->iValue;

Loading…
Cancel
Save