///<param name = "*ckt"> Circuit to operate on </param> void NIdestroy(register CKTcircuit *ckt) { if (ckt->CKTmatrix) SMPdestroy(ckt->CKTmatrix); ckt->CKTmatrix = 0; if (ckt->CKTrhs) FREE(ckt->CKTrhs); if (ckt->CKTrhsOld) FREE(ckt->CKTrhsOld); if (ckt->CKTrhsSpare) FREE(ckt->CKTrhsSpare); if (ckt->CKTirhs) FREE(ckt->CKTirhs); if (ckt->CKTirhsOld) FREE(ckt->CKTirhsOld); if (ckt->CKTirhsSpare) FREE(ckt->CKTirhsSpare); #ifdef HAS_SENSE2 if (ckt->CKTsenInfo) { if (ckt->CKTrhsOp) FREE(((CKTcircuit *)ckt)->CKTrhsOp); if (ckt->CKTsenRhs) FREE(((CKTcircuit *)ckt)->CKTsenRhs); if (ckt->CKTseniRhs) FREE(((CKTcircuit *)ckt)->CKTseniRhs); SENdestroy(ckt->CKTsenInfo); } #endif }
int CKTdestroy(CKTcircuit *inCkt) { CKTcircuit *ckt = /* fixme, drop that */ inCkt; int i; CKTnode *node; CKTnode *nnode; #ifdef WANT_SENSE2 if(ckt->CKTsenInfo){ if(ckt->CKTrhsOp) FREE(ckt->CKTrhsOp); if(ckt->CKTsenRhs) FREE(ckt->CKTsenRhs); if(ckt->CKTseniRhs) FREE(ckt->CKTseniRhs); SENdestroy(ckt->CKTsenInfo); } #endif for (i=0;i<DEVmaxnum;i++) { if ( DEVices[i] && ((*DEVices[i]).DEVdestroy != NULL) && (ckt->CKThead[i] != NULL) ){ (*((*DEVices[i]).DEVdestroy))(&(ckt->CKThead[i])); } } for(i=0;i<=ckt->CKTmaxOrder+1;i++){ FREE(ckt->CKTstates[i]); } if(ckt->CKTmatrix) SMPdestroy(ckt->CKTmatrix); if(ckt->CKTbreaks) FREE(ckt->CKTbreaks); for(node = ckt->CKTnodes; node; ) { nnode = node->next; FREE(node); node = nnode; } ckt->CKTnodes = (CKTnode *)NULL; ckt->CKTlastNode = (CKTnode *)NULL; FREE(ckt); return(OK); }