/* ========================================================================== */ /* === KLU_free_numeric ===================================================== */ /* ========================================================================== */ /* Free the KLU Numeric object. */ #include "klu_internal.h" Int KLU_free_numeric ( KLU_numeric **NumericHandle, KLU_common *Common ) { KLU_numeric *Numeric ; Unit **LUbx ; size_t *LUsize ; Int block, n, nzoff, nblocks ; if (Common == NULL) { return (FALSE) ; } if (NumericHandle == NULL || *NumericHandle == NULL) { return (TRUE) ; } Numeric = *NumericHandle ; n = Numeric->n ; nzoff = Numeric->nzoff ; nblocks = Numeric->nblocks ; LUsize = Numeric->LUsize ; LUbx = (Unit **) Numeric->LUbx ; if (LUbx != NULL) { for (block = 0 ; block < nblocks ; block++) { KLU_free (LUbx [block], LUsize ? LUsize [block] : 0, sizeof (Unit), Common) ; } } KLU_free (Numeric->Pnum, n, sizeof (Int), Common) ; KLU_free (Numeric->Offp, n+1, sizeof (Int), Common) ; KLU_free (Numeric->Offi, nzoff+1, sizeof (Int), Common) ; KLU_free (Numeric->Offx, nzoff+1, sizeof (Entry), Common) ; KLU_free (Numeric->Lip, n, sizeof (Int), Common) ; KLU_free (Numeric->Llen, n, sizeof (Int), Common) ; KLU_free (Numeric->Uip, n, sizeof (Int), Common) ; KLU_free (Numeric->Ulen, n, sizeof (Int), Common) ; KLU_free (Numeric->LUsize, nblocks, sizeof (size_t), Common) ; KLU_free (Numeric->LUbx, nblocks, sizeof (Unit *), Common) ; KLU_free (Numeric->Udiag, n, sizeof (Entry), Common) ; KLU_free (Numeric->Rs, n, sizeof (double), Common) ; KLU_free (Numeric->Pinv, n, sizeof (Int), Common) ; KLU_free (Numeric->Work, Numeric->worksize, 1, Common) ; KLU_free (Numeric, 1, sizeof (KLU_numeric), Common) ; *NumericHandle = NULL ; return (TRUE) ; }