Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/elmergrid/src/metis-5.1.0/libmetis/gklib.c
3206 views
1
/*!
2
\file gklib.c
3
\brief Various helper routines generated using GKlib's templates
4
5
\date Started 4/12/2007
6
\author George
7
\author Copyright 1997-2009, Regents of the University of Minnesota
8
\version\verbatim $Id: gklib.c 10395 2011-06-23 23:28:06Z karypis $ \endverbatim
9
*/
10
11
12
#include "metislib.h"
13
14
15
/*************************************************************************/
16
/*! BLAS routines */
17
/*************************************************************************/
18
GK_MKBLAS(i, idx_t, idx_t)
19
GK_MKBLAS(r, real_t, real_t)
20
21
/*************************************************************************/
22
/*! Memory allocation routines */
23
/*************************************************************************/
24
GK_MKALLOC(i, idx_t)
25
GK_MKALLOC(r, real_t)
26
GK_MKALLOC(ikv, ikv_t)
27
GK_MKALLOC(rkv, rkv_t)
28
29
/*************************************************************************/
30
/*! Priority queues routines */
31
/*************************************************************************/
32
#define key_gt(a, b) ((a) > (b))
33
GK_MKPQUEUE(ipq, ipq_t, ikv_t, idx_t, idx_t, ikvmalloc, IDX_MAX, key_gt)
34
GK_MKPQUEUE(rpq, rpq_t, rkv_t, real_t, idx_t, rkvmalloc, REAL_MAX, key_gt)
35
#undef key_gt
36
37
/*************************************************************************/
38
/*! Random number generation routines */
39
/*************************************************************************/
40
GK_MKRANDOM(i, idx_t, idx_t)
41
42
/*************************************************************************/
43
/*! Utility routines */
44
/*************************************************************************/
45
GK_MKARRAY2CSR(i, idx_t)
46
47
/*************************************************************************/
48
/*! Sorting routines */
49
/*************************************************************************/
50
void isorti(size_t n, idx_t *base)
51
{
52
#define i_lt(a, b) ((*a) < (*b))
53
GK_MKQSORT(idx_t, base, n, i_lt);
54
#undef i_lt
55
}
56
57
void isortd(size_t n, idx_t *base)
58
{
59
#define i_gt(a, b) ((*a) > (*b))
60
GK_MKQSORT(idx_t, base, n, i_gt);
61
#undef i_gt
62
}
63
64
void rsorti(size_t n, real_t *base)
65
{
66
#define r_lt(a, b) ((*a) < (*b))
67
GK_MKQSORT(real_t, base, n, r_lt);
68
#undef r_lt
69
}
70
71
void rsortd(size_t n, real_t *base)
72
{
73
#define r_gt(a, b) ((*a) > (*b))
74
GK_MKQSORT(real_t, base, n, r_gt);
75
#undef r_gt
76
}
77
78
void ikvsorti(size_t n, ikv_t *base)
79
{
80
#define ikey_lt(a, b) ((a)->key < (b)->key)
81
GK_MKQSORT(ikv_t, base, n, ikey_lt);
82
#undef ikey_lt
83
}
84
85
/* Sorts based both on key and val */
86
void ikvsortii(size_t n, ikv_t *base)
87
{
88
#define ikeyval_lt(a, b) ((a)->key < (b)->key || ((a)->key == (b)->key && (a)->val < (b)->val))
89
GK_MKQSORT(ikv_t, base, n, ikeyval_lt);
90
#undef ikeyval_lt
91
}
92
93
void ikvsortd(size_t n, ikv_t *base)
94
{
95
#define ikey_gt(a, b) ((a)->key > (b)->key)
96
GK_MKQSORT(ikv_t, base, n, ikey_gt);
97
#undef ikey_gt
98
}
99
100
void rkvsorti(size_t n, rkv_t *base)
101
{
102
#define rkey_lt(a, b) ((a)->key < (b)->key)
103
GK_MKQSORT(rkv_t, base, n, rkey_lt);
104
#undef rkey_lt
105
}
106
107
void rkvsortd(size_t n, rkv_t *base)
108
{
109
#define rkey_gt(a, b) ((a)->key > (b)->key)
110
GK_MKQSORT(rkv_t, base, n, rkey_gt);
111
#undef rkey_gt
112
}
113
114
void uvwsorti(size_t n, uvw_t *base)
115
{
116
#define uvwkey_lt(a, b) ((a)->u < (b)->u || ((a)->u == (b)->u && (a)->v < (b)->v))
117
GK_MKQSORT(uvw_t, base, n, uvwkey_lt);
118
#undef uvwkey_lt
119
}
120
121
122