/********** 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); }