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.
68 lines
2.0 KiB
68 lines
2.0 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Gordon Jacobs
|
|
**********/
|
|
/*
|
|
*/
|
|
|
|
#include "ngspice.h"
|
|
#include "smpdefs.h"
|
|
#include "cktdefs.h"
|
|
#include "swdefs.h"
|
|
#include "sperror.h"
|
|
#include "suffix.h"
|
|
|
|
|
|
int
|
|
SWsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|
/* load the switch conductance with those pointers needed later
|
|
* for fast matrix loading
|
|
*/
|
|
{
|
|
SWmodel *model = (SWmodel *)inModel;
|
|
SWinstance *here;
|
|
|
|
/* loop through all the current source models */
|
|
for( ; model != NULL; model = model->SWnextModel ) {
|
|
/* Default Value Processing for Switch Model */
|
|
if (!model->SWthreshGiven) {
|
|
model->SWvThreshold = 0;
|
|
}
|
|
if (!model->SWhystGiven) {
|
|
model->SWvHysteresis = 0;
|
|
}
|
|
if (!model->SWonGiven) {
|
|
model->SWonConduct = SW_ON_CONDUCTANCE;
|
|
model->SWonResistance = 1.0/model->SWonConduct;
|
|
}
|
|
if (!model->SWoffGiven) {
|
|
model->SWoffConduct = SW_OFF_CONDUCTANCE;
|
|
model->SWoffResistance = 1.0/model->SWoffConduct;
|
|
}
|
|
|
|
/* loop through all the instances of the model */
|
|
for (here = model->SWinstances; here != NULL ;
|
|
here=here->SWnextInstance) {
|
|
if (here->SWowner != ARCHme) goto matrixpointers;
|
|
|
|
here->SWstate = *states;
|
|
*states += SW_NUM_STATES;
|
|
|
|
/* Default Value Processing for Switch Instance */
|
|
/* none */
|
|
|
|
/* macro to make elements with built in test for out of memory */
|
|
#define TSTALLOC(ptr,first,second) \
|
|
if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\
|
|
return(E_NOMEM);\
|
|
}
|
|
|
|
matrixpointers:
|
|
TSTALLOC(SWposPosptr, SWposNode, SWposNode)
|
|
TSTALLOC(SWposNegptr, SWposNode, SWnegNode)
|
|
TSTALLOC(SWnegPosptr, SWnegNode, SWposNode)
|
|
TSTALLOC(SWnegNegptr, SWnegNode, SWnegNode)
|
|
}
|
|
}
|
|
return(OK);
|
|
}
|