ngspice/src/spicelib/devices/cccs/cccsset.c

55 lines
1.6 KiB
C

/**********
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
**********/
/*
*/
/* load the voltage source structure with those pointers needed later
* for fast matrix loading
*/
#include "ngspice/ngspice.h"
#include "ngspice/smpdefs.h"
#include "ngspice/cktdefs.h"
#include "cccsdefs.h"
#include "ngspice/sperror.h"
#include "ngspice/suffix.h"
/*ARGSUSED*/
int
CCCSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
{
CCCSmodel *model = (CCCSmodel*)inModel;
CCCSinstance *here;
NG_IGNORE(states);
/* loop through all the voltage source models */
for( ; model != NULL; model = model->CCCSnextModel ) {
/* loop through all the instances of the model */
for (here = model->CCCSinstances; here != NULL ;
here=here->CCCSnextInstance) {
here->CCCScontBranch = CKTfndBranch(ckt,here->CCCScontName);
if(here->CCCScontBranch == 0) {
SPfrontEnd->IFerrorf (ERR_FATAL,
"%s: unknown controlling source %s", here->CCCSname, here->CCCScontName);
return(E_BADPARM);
}
/* macro to make elements with built in test for out of memory */
#define TSTALLOC(ptr,first,second) \
do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
return(E_NOMEM);\
} } while(0)
TSTALLOC(CCCSposContBrptr,CCCSposNode,CCCScontBranch);
TSTALLOC(CCCSnegContBrptr,CCCSnegNode,CCCScontBranch);
}
}
return(OK);
}