Exemplo n.º 1
0
///<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
}
Exemplo n.º 2
0
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);
}