void XtFree(xlist **xt) { xlist *r=*xt; if (r) { if (r->loca) { iFree(&r->head); iFree(&r->port); iFree(&r->fwrd); iFree(&r->bwrd); } free(r); *xt=NULL; } } /* XtFree */
int GetOrder(order *od, int *p) { int ierr=0,bbufs=2,*bbuf[2]={0}, ibufs=9,*ibuf[9]={0}, n,*iwmd; xlist *xt; n=od->nnod; ierr=XtAlloc(n,n+1,"xt, GetOrder",&xt); if(ierr) return FALSE; ierr=iAlloc(n,"ibuf21, GetOrder",&iwmd); if(ierr) return FALSE; IptAlloc(ibufs,n,ibuf,"ibuf, GetOrder"); IptAlloc(bbufs,n,bbuf,"bbuf, GetOrder"); OdProc(od,xt,ibuf[0],ibuf[1],ibuf[2],ibuf[3],ibuf[4],ibuf[5], ibuf[6],ibuf[7],ibuf[8],iwmd,bbuf[0],bbuf[1],p); /* XtFree(&xt); */ free(xt->head); free(xt->port); free(xt->fwrd); free(xt->bwrd); free(xt); iFree(&iwmd); IptFree(ibufs,ibuf); IptFree(bbufs,bbuf); return TRUE; } /* GetOrder */
void SyoFree(syoff **a) { syoff *r=*a; if (r) { if (r->roff) { iFree(&r->roff->ja); dFree(&r->roff->an); free(r->roff); r->roff=NULL; } r->nrow=0; free(r); *a=NULL; } } /* SyoFree */
void SymFree(symat **a) { symat *r=*a; if (r) { dFree(&r->diag); if (r->roff) { iFree(&r->roff->ja); dFree(&r->roff->an); free(r->roff); r->roff=NULL; } r->nrow=0; free(r); *a=NULL; } } /* SymFree */
void SmtFree(smatx **a) { smatx *r=*a; if (r) { if (r->rows) { iFree(&r->rows->ja); dFree(&r->rows->an); free(r->rows); r->rows=NULL; } r->maxnrow=0; r->nrow=0; free(r); *a=NULL; } } /* SmatFree */
void OdFree(order **od) { order *r; if (*od) { r=*od; iFree(&r->adjn); iFree(&r->rbeg); iFree(&r->rexs); iFree(&r->rlen); iFree(&r->rend); iFree(&r->pres); iFree(&r->succ); free(*od); *od=NULL; } } /* OdFree */
void ShutDown(void) { clock_t tim; double rtmp; rtmp=fabs(sdat->pobj-sdat->dobj)/(1.0+fabs(sdat->dobj)); if (rtmp>sdat->par.tolgap) { tim=GetTime()-stim[START]; #ifdef PCMACHINE printf(" time=%.2f\n\n",(double)tim/CLOCKS_PER_SEC); #else printf(" time=%.2f\n\n",(double)0.01*tim); #endif fclose(fout); } dFree(&sdat->y); dFree(&sdat->dy); dFree(&sdat->s); dFree(&sdat->sinv); SmtFree(&sdat->c); SymFree(&sdat->cy); SyoFree(&sdat->st); if (sdat->mf) sdat->mf->uval=NULL; CfcFree(&sdat->mf); CfcFree(&sdat->sf); dPtFree(&sdat->u); dPtFree(&sdat->v); iFree(&sdat->iw); dFree(&sdat->rw); } /* ShutDown */
static void copyChl(chfac *af, chfac *bf) { iFree(&af->shead); iFree(&af->ssize); iFree(&af->ssub); iFree(&bf->shead); iFree(&bf->ssize); iFree(&bf->ssub); bf->unnz =af->unnz; bf->ujnz =af->ujnz; bf->nsnds=af->nsnds; bf->ndens=af->ndens; bf->nsndn=af->nsndn; bf->sdens=af->sdens; bf->upst =af->upst; bf->usub =iAlloc(bf->ujnz,"usub, copyChl"); bf->uval =dAlloc(bf->unnz,"uval, copyChl"); iCopy(af->ujnz,af->usub,bf->usub); iCopy(af->nrow,af->ujbeg,bf->ujbeg); iCopy(af->nrow,af->uhead,bf->uhead); iCopy(af->nrow,af->ujsze,bf->ujsze); iCopy(af->nrow,af->perm,bf->perm); iCopy(af->nrow,af->invp,bf->invp); iCopy(af->nrow+1,af->subg,bf->subg); bf->dhead=iAlloc(af->ndens+1,"dhead, copyChl"); iCopy(af->ndens+1,af->dhead,bf->dhead); if (af->nsnds) { bf->dbeg=iAlloc(af->nsnds,"dbeg, copyChl"); bf->dsub=iAlloc(af->nsnds,"dsub, copyChl"); iCopy(af->nsnds,af->dbeg,bf->dbeg); iCopy(af->nsnds,af->dsub,bf->dsub); } } /* copyChl */
void CfcFree(chfac **sf) { chfac *r=*sf; if (*sf) { iFree(&r->shead); iFree(&r->ssize); iFree(&r->ssub); dFree(&r->diag); iFree(&r->ujbeg); iFree(&r->uhead); iFree(&r->ujsze); iFree(&r->usub); dFree(&r->uval); iFree(&r->perm); iFree(&r->invp); iFree(&r->subg); iFree(&r->dhead); iFree(&r->dbeg); iFree(&r->dsub); free(r); } *sf=NULL; } /* CfcFree */
void CfcFree(chfac **sf) { chfac *r=*sf; if (*sf) { iFree(&r->shead); iFree(&r->ssize); iFree(&r->ssub); dFree(&r->diag); dFree(&r->sqrtdiag); iFree(&r->uhead); iFree(&r->ujsze); dFree(&r->uval); iFree(&r->perm); iFree(&r->subg); iFree(&r->dhead); iFree(&r->dbeg); iFree(&r->dsub); iFree(&r->iw); dFree(&r->rw); if (r->alldense){ r->invp=0; r->ujbeg=0; r->usub=0; }else{ iFree(&r->invp); iFree(&r->ujbeg); iFree(&r->usub); } free(r); } *sf=NULL; } /* CfcFree */