1 /* ========================================================================== */
2 /* === KLU_free_numeric ===================================================== */
3 /* ========================================================================== */
4
5 /* Free the KLU Numeric object. */
6
7 #include "klu_internal.h"
8
KLU_free_numeric(KLU_numeric ** NumericHandle,KLU_common * Common)9 Int KLU_free_numeric
10 (
11 KLU_numeric **NumericHandle,
12 KLU_common *Common
13 )
14 {
15 KLU_numeric *Numeric ;
16 Unit **LUbx ;
17 size_t *LUsize ;
18 Int block, n, nzoff, nblocks ;
19
20 if (Common == NULL)
21 {
22 return (FALSE) ;
23 }
24 if (NumericHandle == NULL || *NumericHandle == NULL)
25 {
26 return (TRUE) ;
27 }
28
29 Numeric = *NumericHandle ;
30
31 n = Numeric->n ;
32 nzoff = Numeric->nzoff ;
33 nblocks = Numeric->nblocks ;
34 LUsize = Numeric->LUsize ;
35
36 LUbx = (Unit **) Numeric->LUbx ;
37 if (LUbx != NULL)
38 {
39 for (block = 0 ; block < nblocks ; block++)
40 {
41 KLU_free (LUbx [block], LUsize ? LUsize [block] : 0,
42 sizeof (Unit), Common) ;
43 }
44 }
45
46 KLU_free (Numeric->Pnum, n, sizeof (Int), Common) ;
47 KLU_free (Numeric->Offp, n+1, sizeof (Int), Common) ;
48 KLU_free (Numeric->Offi, nzoff+1, sizeof (Int), Common) ;
49 KLU_free (Numeric->Offx, nzoff+1, sizeof (Entry), Common) ;
50
51 KLU_free (Numeric->Lip, n, sizeof (Int), Common) ;
52 KLU_free (Numeric->Llen, n, sizeof (Int), Common) ;
53 KLU_free (Numeric->Uip, n, sizeof (Int), Common) ;
54 KLU_free (Numeric->Ulen, n, sizeof (Int), Common) ;
55
56 KLU_free (Numeric->LUsize, nblocks, sizeof (size_t), Common) ;
57
58 KLU_free (Numeric->LUbx, nblocks, sizeof (Unit *), Common) ;
59
60 KLU_free (Numeric->Udiag, n, sizeof (Entry), Common) ;
61
62 KLU_free (Numeric->Rs, n, sizeof (double), Common) ;
63 KLU_free (Numeric->Pinv, n, sizeof (Int), Common) ;
64
65 KLU_free (Numeric->Work, Numeric->worksize, 1, Common) ;
66
67 KLU_free (Numeric, 1, sizeof (KLU_numeric), Common) ;
68
69 *NumericHandle = NULL ;
70 return (TRUE) ;
71 }
72