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.
 
 
 
 
 
 

74 lines
1.7 KiB

/**********
Copyright 1991 Regents of the University of California. All rights reserved.
Author: 1991 David A. Gates, U. C. Berkeley CAD Group
**********/
#include "ngspice/ngspice.h"
#include "ngspice/numglobs.h"
#include "ngspice/numenum.h"
#include "ngspice/onedev.h"
#include "ngspice/onemesh.h"
#include "ngspice/spmatrix.h"
#include "onedext.h"
#include "oneddefs.h"
void
ONEdestroy(ONEdevice *pDevice)
{
int index, eIndex;
ONEelem *pElem;
ONEnode *pNode;
ONEedge *pEdge;
if (!pDevice)
return;
switch (pDevice->solverType) {
case SLV_SMSIG:
case SLV_BIAS:
/* free up memory allocated for the bias solution */
FREE(pDevice->dcSolution);
FREE(pDevice->dcDeltaSolution);
FREE(pDevice->copiedSolution);
FREE(pDevice->rhs);
FREE(pDevice->rhsImag);
spDestroy(pDevice->matrix);
break;
case SLV_EQUIL:
/* free up the vectors allocated in the equilibrium solution */
FREE(pDevice->dcSolution);
FREE(pDevice->dcDeltaSolution);
FREE(pDevice->copiedSolution);
FREE(pDevice->rhs);
spDestroy(pDevice->matrix);
break;
case SLV_NONE:
break;
default:
fprintf(stderr, "Panic: Unknown solver type in ONEdestroy.\n");
exit(-1);
break;
}
/* destroy the mesh */
if (pDevice->elemArray) {
for (eIndex = 1; eIndex < pDevice->numNodes-1; eIndex++) {
pElem = pDevice->elemArray[eIndex];
pEdge = pElem->pEdge;
FREE(pEdge);
for (index = 0; index <= 1; index++) {
if (pElem->evalNodes[index]) {
pNode = pElem->pNodes[index];
FREE(pNode);
}
}
FREE(pElem);
}
FREE(pDevice->elemArray);
}
/* destroy any other lists */
/* NOT IMPLEMENTED */
FREE(pDevice);
}