diff --git a/src/spicelib/devices/asrc/asrcset.c b/src/spicelib/devices/asrc/asrcset.c index d053c56fb..71a65b685 100644 --- a/src/spicelib/devices/asrc/asrcset.c +++ b/src/spicelib/devices/asrc/asrcset.c @@ -43,9 +43,6 @@ ASRCsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) if (!here->ASRCreciproctcGiven) here->ASRCreciproctc = 0; - here->ASRCposptr = NULL; - j = 0; /* strchr of the array holding ptrs to SMP */ - if (here->ASRCtype == ASRC_VOLTAGE) if (here->ASRCbranch == 0) { error = CKTmkCur(ckt, &tmp, here->ASRCname, "branch"); @@ -65,12 +62,24 @@ ASRCsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) return(E_NOMEM); \ } } while(0) + switch (here->ASRCtype) { + case ASRC_VOLTAGE: + j = 4 + here->ASRCtree->numVars; + break; + case ASRC_CURRENT: + j = 2 * here->ASRCtree->numVars; + break; + default: + return (E_BADPARM); + } + + here->ASRCposptr = TMALLOC(double *, j); + /* For each controlling variable set the entries in the vector of the positions of the SMP */ + j = 0; if (here->ASRCtype == ASRC_VOLTAGE) { - here->ASRCposptr = TREALLOC(double *, here->ASRCposptr, j + 4); - TSTALLOC(ASRCposptr[j++], here->ASRCposNode, here->ASRCbranch); TSTALLOC(ASRCposptr[j++], here->ASRCnegNode, here->ASRCbranch); TSTALLOC(ASRCposptr[j++], here->ASRCbranch, here->ASRCnegNode); @@ -96,18 +105,11 @@ ASRCsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) return (E_BADPARM); } - switch (here->ASRCtype) { - case ASRC_VOLTAGE: - here->ASRCposptr = TREALLOC(double *, here->ASRCposptr, j + 1); + if (here->ASRCtype == ASRC_VOLTAGE) { TSTALLOC(ASRCposptr[j++], here->ASRCbranch, column); - break; - case ASRC_CURRENT: - here->ASRCposptr = TREALLOC(double *, here->ASRCposptr, j + 2); + } else { TSTALLOC(ASRCposptr[j++], here->ASRCposNode, column); TSTALLOC(ASRCposptr[j++], here->ASRCnegNode, column); - break; - default: - return (E_BADPARM); } } }