File: Mongoose_QPDelta.cpp

package info (click to toggle)
suitesparse 1%3A5.4.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 138,928 kB
  • sloc: ansic: 389,614; cpp: 24,213; makefile: 5,965; fortran: 1,927; java: 1,808; csh: 1,750; ruby: 725; sh: 226; perl: 225; python: 209; sed: 164; awk: 60
file content (84 lines) | stat: -rw-r--r-- 2,942 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/* ========================================================================== */
/* === Source/Mongoose_QPDelta.cpp ========================================== */
/* ========================================================================== */

/* -----------------------------------------------------------------------------
 * Mongoose Graph Partitioning Library  Copyright (C) 2017-2018,
 * Scott P. Kolodziej, Nuri S. Yeralan, Timothy A. Davis, William W. Hager
 * Mongoose is licensed under Version 3 of the GNU General Public License.
 * Mongoose is also available under other licenses; contact authors for details.
 * -------------------------------------------------------------------------- */

#include "Mongoose_QPDelta.hpp"
#include "Mongoose_Internal.hpp"

namespace Mongoose
{

QPDelta *QPDelta::Create(Int numVars)
{
    QPDelta *ret = (QPDelta *)SuiteSparse_calloc(1, sizeof(QPDelta));
    if (!ret)
        return NULL;

    ret->x = (double *)SuiteSparse_malloc(static_cast<size_t>(numVars),
                                          sizeof(double));
    ret->FreeSet_status
        = (Int *)SuiteSparse_malloc(static_cast<size_t>(numVars), sizeof(Int));
    ret->FreeSet_list = (Int *)SuiteSparse_malloc(
        static_cast<size_t>(numVars + 1), sizeof(Int));
    ret->gradient = (double *)SuiteSparse_malloc(static_cast<size_t>(numVars),
                                                 sizeof(double));
    ret->D        = (double *)SuiteSparse_malloc(static_cast<size_t>(numVars),
                                          sizeof(double));

    for (int i = 0; i < WISIZE; i++)
    {
        ret->wi[i] = (Int *)SuiteSparse_malloc(static_cast<size_t>(numVars + 1),
                                               sizeof(Int));
    }

    for (Int i = 0; i < WXSIZE; i++)
    {
        ret->wx[i] = (double *)SuiteSparse_malloc(static_cast<size_t>(numVars),
                                                  sizeof(double));
    }

#ifndef NDEBUG
    ret->check_cost = INFINITY;
#endif

    if (!ret->x || !ret->FreeSet_status || !ret->FreeSet_list || !ret->gradient
        || !ret->D || !ret->wi[0]
        || !ret->wi[1]
        //|| !ret->Change_location
        || !ret->wx[0] || !ret->wx[1] || !ret->wx[2])
    {
        ret->~QPDelta();
        ret = (QPDelta *)SuiteSparse_free(ret);
    }

    return ret;
}

QPDelta::~QPDelta()
{
    x              = (double *)SuiteSparse_free(x);
    FreeSet_status = (Int *)SuiteSparse_free(FreeSet_status);
    FreeSet_list   = (Int *)SuiteSparse_free(FreeSet_list);
    gradient       = (double *)SuiteSparse_free(gradient);
    D              = (double *)SuiteSparse_free(D);
    // Change_location = (Int*) SuiteSparse_free(Change_location);

    for (Int i = 0; i < WISIZE; i++)
    {
        wi[i] = (Int *)SuiteSparse_free(wi[i]);
    }

    for (Int i = 0; i < WXSIZE; i++)
    {
        wx[i] = (double *)SuiteSparse_free(wx[i]);
    }
}

} // end namespace Mongoose