libmetis/proto.h
Go to the documentation of this file.
1 /*
2  * Copyright 1997, Regents of the University of Minnesota
3  *
4  * proto.h
5  *
6  * This file contains header files
7  *
8  * Started 10/19/95
9  * George
10  *
11  * $Id: proto.h 13933 2013-03-29 22:20:46Z karypis $
12  *
13  */
14 
15 #ifndef _LIBMETIS_PROTO_H_
16 #define _LIBMETIS_PROTO_H_
17 
18 /* auxapi.c */
19 
20 /* balance.c */
21 void Balance2Way(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts);
22 void Bnd2WayBalance(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts);
23 void General2WayBalance(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts);
24 void McGeneral2WayBalance(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts);
25 
26 
27 /* bucketsort.c */
29  idx_t *tperm, idx_t *perm);
30 
31 
32 /* checkgraph.c */
33 int CheckGraph(graph_t *graph, int numflag, int verbose);
37 
38 
39 /* coarsen.c */
45  idx_t cnvtxs, size_t nunmatched);
47  idx_t cnvtxs, size_t *r_nunmatched, size_t maxdegree);
49  idx_t cnvtxs, size_t *r_nunmatched, size_t maxdegree);
50 void PrintCGraphStats(ctrl_t *ctrl, graph_t *graph);
51 void CreateCoarseGraph(ctrl_t *ctrl, graph_t *graph, idx_t cnvtxs,
52  idx_t *match);
53 void CreateCoarseGraphNoMask(ctrl_t *ctrl, graph_t *graph, idx_t cnvtxs,
54  idx_t *match);
55 void CreateCoarseGraphPerm(ctrl_t *ctrl, graph_t *graph, idx_t cnvtxs,
56  idx_t *match, idx_t *perm);
57 graph_t *SetupCoarseGraph(graph_t *graph, idx_t cnvtxs, idx_t dovsize);
58 void ReAdjustMemory(ctrl_t *ctrl, graph_t *graph, graph_t *cgraph);
59 
60 
61 
62 /* compress.c */
64  idx_t *vwgt, idx_t *cptr, idx_t *cind);
65 graph_t *PruneGraph(ctrl_t *ctrl, idx_t nvtxs, idx_t *xadj, idx_t *adjncy,
66  idx_t *vwgt, idx_t *iperm, real_t factor);
67 
68 
69 /* contig.c */
71  idx_t *cptr, idx_t *cind);
72 void ComputeBFSOrdering(ctrl_t *ctrl, graph_t *graph, idx_t *bfsperm);
77 void MoveGroupContigForCut(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t gid,
78  idx_t *ptr, idx_t *ind);
79 void MoveGroupContigForVol(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t gid,
80  idx_t *ptr, idx_t *ind, idx_t *vmarker, idx_t *pmarker,
81  idx_t *modind);
82 
83 
84 /* debug.c */
91 idx_t CheckRInfo(ctrl_t *ctrl, ckrinfo_t *rinfo);
95 
96 
97 /* fm.c */
98 void FM_2WayRefine(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niter);
99 void FM_2WayCutRefine(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niter);
100 void FM_Mc2WayCutRefine(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niter);
101 void SelectQueue(graph_t *graph, real_t *pijbm, real_t *ubfactors, rpq_t **queues,
102  idx_t *from, idx_t *cnum);
103 void Print2WayRefineStats(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts,
104  real_t deltabal, idx_t mincutorder);
105 
106 
107 /* fortran.c */
108 void Change2CNumbering(idx_t, idx_t *, idx_t *);
109 void Change2FNumbering(idx_t, idx_t *, idx_t *, idx_t *);
110 void Change2FNumbering2(idx_t, idx_t *, idx_t *);
113 void ChangeMesh2FNumbering(idx_t n, idx_t *ptr, idx_t *ind, idx_t nvtxs,
114  idx_t *xadj, idx_t *adjncy);
116  idx_t *epart, idx_t *npart);
117 
118 
119 /* graph.c */
120 graph_t *SetupGraph(ctrl_t *ctrl, idx_t nvtxs, idx_t ncon, idx_t *xadj,
124 graph_t *SetupSplitGraph(graph_t *graph, idx_t snvtxs, idx_t snedges);
125 graph_t *CreateGraph(void);
126 void InitGraph(graph_t *graph);
127 void FreeRData(graph_t *graph);
128 void FreeGraph(graph_t **graph);
129 
130 
131 /* initpart.c */
132 void Init2WayPartition(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts);
133 void InitSeparator(ctrl_t *ctrl, graph_t *graph, idx_t niparts);
134 void RandomBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts);
135 void GrowBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts);
136 void McRandomBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts);
137 void McGrowBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts);
138 void GrowBisectionNode(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts);
139 void GrowBisectionNode2(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts);
140 
141 
142 /* kmetis.c */
145 
146 
147 /* kwayfm.c */
148 void Greedy_KWayOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter,
149  real_t ffactor, idx_t omode);
150 void Greedy_KWayCutOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter,
151  real_t ffactor, idx_t omode);
152 void Greedy_KWayVolOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter,
153  real_t ffactor, idx_t omode);
154 void Greedy_McKWayCutOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter,
155  real_t ffactor, idx_t omode);
156 void Greedy_McKWayVolOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter,
157  real_t ffactor, idx_t omode);
159  idx_t *bfslvl, idx_t *bfsind, idx_t *bfsmrk);
160 void KWayVolUpdate(ctrl_t *ctrl, graph_t *graph, idx_t v, idx_t from,
161  idx_t to, ipq_t *queue, idx_t *vstatus, idx_t *r_nupd, idx_t *updptr,
162  idx_t *updind, idx_t bndtype, idx_t *vmarker, idx_t *pmarker,
163  idx_t *modind);
164 
165 
166 /* kwayrefine.c */
167 void RefineKWay(ctrl_t *ctrl, graph_t *orggraph, graph_t *graph);
171 void ComputeKWayBoundary(ctrl_t *ctrl, graph_t *graph, idx_t bndtype);
173 int IsBalanced(ctrl_t *ctrl, graph_t *graph, real_t ffactor);
174 
175 
176 /* mcutil.c */
177 int rvecle(idx_t n, real_t *x, real_t *y);
178 int rvecge(idx_t n, real_t *x, real_t *y);
179 int rvecsumle(idx_t n, real_t *x1, real_t *x2, real_t *y);
181 int ivecle(idx_t n, idx_t *x, idx_t *z);
182 int ivecge(idx_t n, idx_t *x, idx_t *z);
183 int ivecaxpylez(idx_t n, idx_t a, idx_t *x, idx_t *y, idx_t *z);
184 int ivecaxpygez(idx_t n, idx_t a, idx_t *x, idx_t *y, idx_t *z);
185 int BetterVBalance(idx_t ncon, real_t *itvwgt, idx_t *v_vwgt, idx_t *u1_vwgt,
186  idx_t *u2_vwgt);
189  idx_t *pt1, real_t *bm1, idx_t a2, idx_t *pt2, real_t *bm2);
192  real_t *ubvec);
194  real_t *ubfactors, real_t *diffvec);
196  real_t *lbvec);
197 
198 
199 /* mesh.c */
201  idx_t **r_xadj, idx_t **r_adjncy);
202 idx_t FindCommonElements(idx_t qid, idx_t elen, idx_t *eind, idx_t *nptr,
203  idx_t *nind, idx_t *eptr, idx_t ncommon, idx_t *marker, idx_t *nbrs);
205  idx_t **r_adjncy);
206 idx_t FindCommonNodes(idx_t qid, idx_t nelmnts, idx_t *elmntids, idx_t *eptr,
207  idx_t *eind, idx_t *marker, idx_t *nbrs);
208 mesh_t *CreateMesh(void);
209 void InitMesh(mesh_t *mesh);
210 void FreeMesh(mesh_t **mesh);
211 
212 
213 /* meshpart.c */
214 void InduceRowPartFromColumnPart(idx_t nrows, idx_t *rowptr, idx_t *rowind,
215  idx_t *rpart, idx_t *cpart, idx_t nparts, real_t *tpwgts);
216 
217 
218 /* minconn.c */
220 void UpdateEdgeSubDomainGraph(ctrl_t *ctrl, idx_t u, idx_t v, idx_t ewgt,
221  idx_t *r_maxndoms);
224 void MoveGroupMinConnForCut(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t nind,
225  idx_t *ind);
226 void MoveGroupMinConnForVol(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t nind,
227  idx_t *ind, idx_t *vmarker, idx_t *pmarker, idx_t *modind);
228 
229 
230 /* mincover.o */
231 void MinCover(idx_t *, idx_t *, idx_t, idx_t, idx_t *, idx_t *);
233 void MinCover_Decompose(idx_t *, idx_t *, idx_t, idx_t, idx_t *, idx_t *, idx_t *);
234 void MinCover_ColDFS(idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t);
235 void MinCover_RowDFS(idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t);
236 
237 
238 /* mmd.c */
239 void genmmd(idx_t, idx_t *, idx_t *, idx_t *, idx_t *, idx_t , idx_t *, idx_t *, idx_t *, idx_t *, idx_t, idx_t *);
240 void mmdelm(idx_t, idx_t *xadj, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t, idx_t);
241 idx_t mmdint(idx_t, idx_t *xadj, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *);
242 void mmdnum(idx_t, idx_t *, idx_t *, idx_t *);
243 void mmdupd(idx_t, idx_t, idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t, idx_t *tag);
244 
245 
246 /* ometis.c */
247 void MlevelNestedDissection(ctrl_t *ctrl, graph_t *graph, idx_t *order,
248  idx_t lastvtx);
249 void MlevelNestedDissectionCC(ctrl_t *ctrl, graph_t *graph, idx_t *order,
250  idx_t lastvtx);
252 void MlevelNodeBisectionL2(ctrl_t *ctrl, graph_t *graph, idx_t niparts);
253 void MlevelNodeBisectionL1(ctrl_t *ctrl, graph_t *graph, idx_t niparts);
254 void SplitGraphOrder(ctrl_t *ctrl, graph_t *graph, graph_t **r_lgraph,
255  graph_t **r_rgraph);
257  idx_t *cptr, idx_t *cind);
258 void MMDOrder(ctrl_t *ctrl, graph_t *graph, idx_t *order, idx_t lastvtx);
259 
260 
261 /* options.c */
266 void PrintCtrl(ctrl_t *ctrl);
267 int CheckParams(ctrl_t *ctrl);
268 void FreeCtrl(ctrl_t **r_ctrl);
269 
270 
271 /* parmetis.c */
272 void MlevelNestedDissectionP(ctrl_t *ctrl, graph_t *graph, idx_t *order,
273  idx_t lastvtx, idx_t npes, idx_t cpos, idx_t *sizes);
275  real_t ubfactor, idx_t npasses);
277  real_t ubfactor, idx_t npasses);
278 
279 
280 /* pmetis.c */
282  idx_t *part, real_t *tpwgts, idx_t fpart);
284 void SplitGraphPart(ctrl_t *ctrl, graph_t *graph, graph_t **r_lgraph, graph_t **r_rgraph);
285 
286 
287 /* refine.c */
288 void Refine2Way(ctrl_t *ctrl, graph_t *orggraph, graph_t *graph, real_t *rtpwgts);
292 
293 
294 /* separator.c */
295 void ConstructSeparator(ctrl_t *ctrl, graph_t *graph);
297 
298 
299 /* sfm.c */
300 void FM_2WayNodeRefine2Sided(ctrl_t *ctrl, graph_t *graph, idx_t niter);
301 void FM_2WayNodeRefine1Sided(ctrl_t *ctrl, graph_t *graph, idx_t niter);
302 void FM_2WayNodeBalance(ctrl_t *ctrl, graph_t *graph);
303 
304 
305 /* srefine.c */
306 void Refine2WayNode(ctrl_t *ctrl, graph_t *orggraph, graph_t *graph);
310 
311 
312 /* stat.c */
316 
317 
318 /* timing.c */
319 void InitTimers(ctrl_t *);
320 void PrintTimers(ctrl_t *);
321 
322 /* util.c */
323 idx_t iargmax_strd(size_t, idx_t *, idx_t);
324 idx_t iargmax_nrm(size_t n, idx_t *x, real_t *y);
325 idx_t iargmax2_nrm(size_t n, idx_t *x, real_t *y);
326 idx_t rargmax2(size_t, real_t *);
327 void InitRandom(idx_t);
328 int metis_rcode(int sigrval);
329 
330 
331 
332 /* wspace.c */
333 void AllocateWorkSpace(ctrl_t *ctrl, graph_t *graph);
334 void AllocateRefinementWorkSpace(ctrl_t *ctrl, idx_t nbrpoolsize);
335 void FreeWorkSpace(ctrl_t *ctrl);
336 void *wspacemalloc(ctrl_t *ctrl, size_t nbytes);
337 void wspacepush(ctrl_t *ctrl);
338 void wspacepop(ctrl_t *ctrl);
341 ikv_t *ikvwspacemalloc(ctrl_t *, idx_t);
342 void cnbrpoolReset(ctrl_t *ctrl);
343 idx_t cnbrpoolGetNext(ctrl_t *ctrl, idx_t nnbrs);
344 void vnbrpoolReset(ctrl_t *ctrl);
345 idx_t vnbrpoolGetNext(ctrl_t *ctrl, idx_t nnbrs);
346 
347 
348 #endif
GrowBisectionNode2
void GrowBisectionNode2(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts)
Definition: initpart.c:570
ind
std::vector< int > ind
Definition: Slicing_stdvector_cxx11.cpp:1
MinCover_Augment
idx_t MinCover_Augment(idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t *, idx_t)
Definition: mincover.c:126
CheckGraph
int CheckGraph(graph_t *graph, int numflag, int verbose)
Definition: checkgraph.c:32
Greedy_McKWayVolOptimize
void Greedy_McKWayVolOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter, real_t ffactor, idx_t omode)
Definition: kwayfm.c:1026
perm
idx_t idx_t idx_t idx_t idx_t * perm
Definition: include/metis.h:223
Allocate2WayNodePartitionMemory
void Allocate2WayNodePartitionMemory(ctrl_t *ctrl, graph_t *graph)
Definition: srefine.c:66
FM_2WayRefine
void FM_2WayRefine(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niter)
Definition: fm.c:17
moptype_et
moptype_et
Definition: include/metis.h:262
wspacepop
void wspacepop(ctrl_t *ctrl)
Definition: wspace.c:127
CheckNodePartitionParams
idx_t CheckNodePartitionParams(graph_t *)
Definition: debug.c:255
General2WayBalance
void General2WayBalance(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts)
Definition: balance.c:169
npes
idx_t idx_t idx_t idx_t npes
Definition: include/metis.h:233
mmdnum
void mmdnum(idx_t, idx_t *, idx_t *, idx_t *)
Definition: mmd.c:348
MlevelNestedDissectionCC
void MlevelNestedDissectionCC(ctrl_t *ctrl, graph_t *graph, idx_t *order, idx_t lastvtx)
Definition: ometis.c:236
ubvec
idx_t idx_t idx_t idx_t idx_t idx_t idx_t real_t real_t * ubvec
Definition: include/metis.h:199
ComputeKWayVolGains
void ComputeKWayVolGains(ctrl_t *ctrl, graph_t *graph)
Definition: kwayrefine.c:562
ComputeLoadImbalanceVec
void ComputeLoadImbalanceVec(graph_t *graph, idx_t nparts, real_t *pijbm, real_t *lbvec)
Definition: mcutil.c:311
FixGraph
graph_t * FixGraph(graph_t *graph)
Definition: checkgraph.c:176
numflag
idx_t idx_t idx_t idx_t idx_t * numflag
Definition: include/metis.h:208
CheckNodeBnd
idx_t CheckNodeBnd(graph_t *, idx_t)
Definition: debug.c:195
genmmd
void genmmd(idx_t, idx_t *, idx_t *, idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t *, idx_t *, idx_t, idx_t *)
Definition: mmd.c:53
FreeRData
void FreeRData(graph_t *graph)
Definition: libmetis/graph.c:228
adjwgt
idx_t idx_t idx_t idx_t idx_t idx_t * adjwgt
Definition: include/metis.h:198
InitTimers
void InitTimers(ctrl_t *)
Definition: timing.c:21
cnbrpoolGetNext
idx_t cnbrpoolGetNext(ctrl_t *ctrl, idx_t nnbrs)
Definition: wspace.c:172
CreateMesh
mesh_t * CreateMesh(void)
Definition: mesh.c:380
PrintCtrl
void PrintCtrl(ctrl_t *ctrl)
Definition: options.c:168
CoarsenGraphNlevels
graph_t * CoarsenGraphNlevels(ctrl_t *ctrl, graph_t *graph, idx_t nlevels)
Definition: coarsen.c:85
keys
const KeyVector keys
Definition: testRegularImplicitSchurFactor.cpp:40
mesh_t
Definition: libmetis/struct.h:126
Balance2Way
void Balance2Way(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts)
Definition: balance.c:16
vsize
idx_t idx_t idx_t idx_t idx_t * vsize
Definition: include/metis.h:198
CompressGraph
graph_t * CompressGraph(ctrl_t *ctrl, idx_t nvtxs, idx_t *xadj, idx_t *adjncy, idx_t *vwgt, idx_t *cptr, idx_t *cind)
Definition: compress.c:25
MoveGroupContigForVol
void MoveGroupContigForVol(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t gid, idx_t *ptr, idx_t *ind, idx_t *vmarker, idx_t *pmarker, idx_t *modind)
Definition: contig.c:601
UpdateEdgeSubDomainGraph
void UpdateEdgeSubDomainGraph(ctrl_t *ctrl, idx_t u, idx_t v, idx_t ewgt, idx_t *r_maxndoms)
Definition: minconn.c:134
IsArticulationNode
idx_t IsArticulationNode(idx_t i, idx_t *xadj, idx_t *adjncy, idx_t *where, idx_t *bfslvl, idx_t *bfsind, idx_t *bfsmrk)
Definition: kwayfm.c:1361
ctrl_t
Definition: libmetis/struct.h:139
GrowBisection
void GrowBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts)
Definition: initpart.c:189
x
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition: gnuplot_common_settings.hh:12
PrintSubDomainGraph
void PrintSubDomainGraph(graph_t *graph, idx_t nparts, idx_t *where)
Definition: minconn.c:683
AllocateWorkSpace
void AllocateWorkSpace(ctrl_t *ctrl, graph_t *graph)
Definition: wspace.c:17
tpwgts
idx_t idx_t idx_t idx_t idx_t idx_t idx_t real_t * tpwgts
Definition: include/metis.h:199
adjncy
idx_t idx_t idx_t * adjncy
Definition: include/metis.h:198
FindSepInducedComponents
idx_t FindSepInducedComponents(ctrl_t *, graph_t *, idx_t *, idx_t *)
Definition: contig.c:267
MoveGroupMinConnForCut
void MoveGroupMinConnForCut(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t nind, idx_t *ind)
Definition: minconn.c:477
Allocate2WayPartitionMemory
void Allocate2WayPartitionMemory(ctrl_t *ctrl, graph_t *graph)
Definition: refine.c:52
ComputeVolume
idx_t ComputeVolume(graph_t *, idx_t *)
Definition: debug.c:48
ChangeMesh2FNumbering
void ChangeMesh2FNumbering(idx_t n, idx_t *ptr, idx_t *ind, idx_t nvtxs, idx_t *xadj, idx_t *adjncy)
Definition: fortran.c:106
KWayVolUpdate
void KWayVolUpdate(ctrl_t *ctrl, graph_t *graph, idx_t v, idx_t from, idx_t to, ipq_t *queue, idx_t *vstatus, idx_t *r_nupd, idx_t *updptr, idx_t *updind, idx_t bndtype, idx_t *vmarker, idx_t *pmarker, idx_t *modind)
Definition: kwayfm.c:1460
McGeneral2WayBalance
void McGeneral2WayBalance(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts)
Definition: balance.c:281
sizes
std::vector< Array2i > sizes
Definition: dense_solvers.cpp:12
FreeGraph
void FreeGraph(graph_t **graph)
Definition: libmetis/graph.c:247
ivecaxpylez
int ivecaxpylez(idx_t n, idx_t a, idx_t *x, idx_t *y, idx_t *z)
Definition: mcutil.c:114
iargmax_nrm
idx_t iargmax_nrm(size_t n, idx_t *x, real_t *y)
Definition: libmetis/util.c:31
rvecge
int rvecge(idx_t n, real_t *x, real_t *y)
Definition: mcutil.c:38
ncommon
idx_t idx_t idx_t idx_t * ncommon
Definition: include/metis.h:208
SetupGraph_tvwgt
void SetupGraph_tvwgt(graph_t *graph)
Definition: libmetis/graph.c:99
MultilevelBisect
idx_t MultilevelBisect(ctrl_t *ctrl, graph_t *graph, real_t *tpwgts)
Definition: pmetis.c:226
wspacemalloc
void * wspacemalloc(ctrl_t *ctrl, size_t nbytes)
Definition: wspace.c:108
ReAdjustMemory
void ReAdjustMemory(ctrl_t *ctrl, graph_t *graph, graph_t *cgraph)
Definition: coarsen.c:1126
CreateCoarseGraph
void CreateCoarseGraph(ctrl_t *ctrl, graph_t *graph, idx_t cnvtxs, idx_t *match)
Definition: coarsen.c:621
CheckRInfo
idx_t CheckRInfo(ctrl_t *ctrl, ckrinfo_t *rinfo)
Definition: debug.c:232
Compute2WayNodePartitionParams
void Compute2WayNodePartitionParams(ctrl_t *ctrl, graph_t *graph)
Definition: srefine.c:83
InduceRowPartFromColumnPart
void InduceRowPartFromColumnPart(idx_t nrows, idx_t *rowptr, idx_t *rowind, idx_t *rpart, idx_t *cpart, idx_t nparts, real_t *tpwgts)
Definition: meshpart.c:179
Match_2HopAll
idx_t Match_2HopAll(ctrl_t *ctrl, graph_t *graph, idx_t *perm, idx_t *match, idx_t cnvtxs, size_t *r_nunmatched, size_t maxdegree)
Definition: coarsen.c:516
rargmax2
idx_t rargmax2(size_t, real_t *)
Definition: libmetis/util.c:63
SelectQueue
void SelectQueue(graph_t *graph, real_t *pijbm, real_t *ubfactors, rpq_t **queues, idx_t *from, idx_t *cnum)
Definition: fm.c:439
ivecle
int ivecle(idx_t n, idx_t *x, idx_t *z)
Definition: mcutil.c:86
ComputeKWayPartitionParams
void ComputeKWayPartitionParams(ctrl_t *ctrl, graph_t *graph)
Definition: kwayrefine.c:149
mmdint
idx_t mmdint(idx_t, idx_t *xadj, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *)
Definition: mmd.c:305
MlevelNodeBisectionL1
void MlevelNodeBisectionL1(ctrl_t *ctrl, graph_t *graph, idx_t niparts)
Definition: ometis.c:395
npart
idx_t idx_t idx_t idx_t idx_t idx_t real_t idx_t idx_t idx_t idx_t * npart
Definition: include/metis.h:215
rvecsumle
int rvecsumle(idx_t n, real_t *x1, real_t *x2, real_t *y)
Definition: mcutil.c:54
Refine2WayNode
void Refine2WayNode(ctrl_t *ctrl, graph_t *orggraph, graph_t *graph)
Definition: srefine.c:23
CheckBnd
idx_t CheckBnd(graph_t *)
Definition: debug.c:121
SetupSplitGraph
graph_t * SetupSplitGraph(graph_t *graph, idx_t snvtxs, idx_t snedges)
Definition: libmetis/graph.c:133
SetupGraph
graph_t * SetupGraph(ctrl_t *ctrl, idx_t nvtxs, idx_t ncon, idx_t *xadj, idx_t *adjncy, idx_t *vwgt, idx_t *vsize, idx_t *adjwgt)
Definition: libmetis/graph.c:17
BetterVBalance
int BetterVBalance(idx_t ncon, real_t *itvwgt, idx_t *v_vwgt, idx_t *u1_vwgt, idx_t *u2_vwgt)
Definition: mcutil.c:143
CreateGraphDual
void CreateGraphDual(idx_t ne, idx_t nn, idx_t *eptr, idx_t *eind, idx_t ncommon, idx_t **r_xadj, idx_t **r_adjncy)
Definition: mesh.c:162
CheckKWayVolPartitionParams
void CheckKWayVolPartitionParams(ctrl_t *ctrl, graph_t *graph)
Definition: debug.c:339
n
int n
Definition: BiCGSTAB_simple.cpp:1
FM_Mc2WayCutRefine
void FM_Mc2WayCutRefine(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niter)
Definition: fm.c:207
InitGraph
void InitGraph(graph_t *graph)
Definition: libmetis/graph.c:177
align_3::a1
Point2 a1
Definition: testPose2.cpp:769
ComputeLoadImbalanceDiffVec
real_t ComputeLoadImbalanceDiffVec(graph_t *graph, idx_t nparts, real_t *pijbm, real_t *ubfactors, real_t *diffvec)
Definition: mcutil.c:284
FreeMesh
void FreeMesh(mesh_t **mesh)
Definition: mesh.c:404
CheckInputGraphWeights
int CheckInputGraphWeights(idx_t nvtxs, idx_t ncon, idx_t *xadj, idx_t *adjncy, idx_t *vwgt, idx_t *vsize, idx_t *adjwgt)
Definition: checkgraph.c:120
ncon
idx_t * ncon
Definition: include/metis.h:197
ConstructMinCoverSeparator
void ConstructMinCoverSeparator(ctrl_t *ctrl, graph_t *graph)
Definition: separator.c:69
nparts
idx_t idx_t idx_t idx_t idx_t idx_t idx_t * nparts
Definition: include/metis.h:199
CreateCoarseGraphPerm
void CreateCoarseGraphPerm(ctrl_t *ctrl, graph_t *graph, idx_t cnvtxs, idx_t *match, idx_t *perm)
Definition: coarsen.c:932
Bnd2WayBalance
void Bnd2WayBalance(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts)
Definition: balance.c:41
ChangeMesh2FNumbering2
void ChangeMesh2FNumbering2(idx_t ne, idx_t nn, idx_t *ptr, idx_t *ind, idx_t *epart, idx_t *npart)
Definition: fortran.c:126
iperm
idx_t idx_t idx_t idx_t idx_t idx_t * iperm
Definition: include/metis.h:223
match
bool match(const T &xpr, std::string ref, std::string str_xpr="")
Definition: indexed_view.cpp:54
MlevelNodeBisectionMultiple
void MlevelNodeBisectionMultiple(ctrl_t *ctrl, graph_t *graph)
Definition: ometis.c:300
FM_2WayCutRefine
void FM_2WayCutRefine(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niter)
Definition: fm.c:29
ComputeLoadImbalanceDiff
real_t ComputeLoadImbalanceDiff(graph_t *graph, idx_t nparts, real_t *pijbm, real_t *ubvec)
Definition: mcutil.c:256
x1
Pose3 x1
Definition: testPose3.cpp:663
ComputeLoadImbalance
real_t ComputeLoadImbalance(graph_t *graph, idx_t nparts, real_t *pijbm)
Definition: mcutil.c:228
Refine2Way
void Refine2Way(ctrl_t *ctrl, graph_t *orggraph, graph_t *graph, real_t *rtpwgts)
Definition: refine.c:17
rvecmaxdiff
real_t rvecmaxdiff(idx_t n, real_t *x, real_t *y)
Definition: mcutil.c:68
FindCommonElements
idx_t FindCommonElements(idx_t qid, idx_t elen, idx_t *eind, idx_t *nptr, idx_t *nind, idx_t *eptr, idx_t ncommon, idx_t *marker, idx_t *nbrs)
Definition: mesh.c:237
SetupKWayBalMultipliers
void SetupKWayBalMultipliers(ctrl_t *ctrl, graph_t *graph)
Definition: options.c:140
CreateGraphNodal
void CreateGraphNodal(idx_t ne, idx_t nn, idx_t *eptr, idx_t *eind, idx_t **r_xadj, idx_t **r_adjncy)
Definition: mesh.c:277
ComputeBFSOrdering
void ComputeBFSOrdering(ctrl_t *ctrl, graph_t *graph, idx_t *bfsperm)
Definition: contig.c:115
CheckBnd2
idx_t CheckBnd2(graph_t *)
Definition: debug.c:158
BucketSortKeysInc
void BucketSortKeysInc(ctrl_t *ctrl, idx_t n, idx_t max, idx_t *keys, idx_t *tperm, idx_t *perm)
Definition: bucketsort.c:23
PrintCGraphStats
void PrintCGraphStats(ctrl_t *ctrl, graph_t *graph)
Definition: coarsen.c:601
CoarsenGraph
graph_t * CoarsenGraph(ctrl_t *ctrl, graph_t *graph)
Definition: coarsen.c:22
McGrowBisection
void McGrowBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts)
Definition: initpart.c:385
r_adjncy
idx_t idx_t idx_t idx_t idx_t idx_t idx_t ** r_adjncy
Definition: include/metis.h:208
ComputeElementBalance
real_t ComputeElementBalance(idx_t, idx_t, idx_t *)
Definition: libmetis/stat.c:160
iwspacemalloc
idx_t * iwspacemalloc(ctrl_t *, idx_t)
Definition: wspace.c:136
ckrinfo_t
Definition: libmetis/struct.h:34
Greedy_KWayCutOptimize
void Greedy_KWayCutOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter, real_t ffactor, idx_t omode)
Definition: kwayfm.c:60
InitKWayPartitioning
void InitKWayPartitioning(ctrl_t *ctrl, graph_t *graph)
Definition: kmetis.c:172
IsSeparable
idx_t IsSeparable(graph_t *)
Definition: debug.c:309
eind
idx_t idx_t idx_t * eind
Definition: include/metis.h:207
Change2CNumbering
void Change2CNumbering(idx_t, idx_t *, idx_t *)
Definition: fortran.c:19
mmdupd
void mmdupd(idx_t, idx_t, idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t, idx_t *tag)
Definition: mmd.c:412
ComputeMaxCut
idx_t ComputeMaxCut(graph_t *graph, idx_t nparts, idx_t *where)
Definition: debug.c:85
CheckParams
int CheckParams(ctrl_t *ctrl)
Definition: options.c:287
Match_2HopAny
idx_t Match_2HopAny(ctrl_t *ctrl, graph_t *graph, idx_t *perm, idx_t *match, idx_t cnvtxs, size_t *r_nunmatched, size_t maxdegree)
Definition: coarsen.c:437
FM_2WayNodeRefine2Sided
void FM_2WayNodeRefine2Sided(ctrl_t *ctrl, graph_t *graph, idx_t niter)
Definition: sfm.c:21
BetterBalanceKWay
int BetterBalanceKWay(idx_t ncon, idx_t *vwgt, real_t *itvwgt, idx_t a1, idx_t *pt1, real_t *bm1, idx_t a2, idx_t *pt2, real_t *bm2)
Definition: mcutil.c:189
MinCover_Decompose
void MinCover_Decompose(idx_t *, idx_t *, idx_t, idx_t, idx_t *, idx_t *, idx_t *)
Definition: mincover.c:163
MoveGroupContigForCut
void MoveGroupContigForCut(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t gid, idx_t *ptr, idx_t *ind)
Definition: contig.c:531
rwspacemalloc
real_t * rwspacemalloc(ctrl_t *, idx_t)
Definition: wspace.c:145
ChangeMesh2CNumbering
void ChangeMesh2CNumbering(idx_t n, idx_t *ptr, idx_t *ind)
Definition: fortran.c:92
ProjectKWayPartition
void ProjectKWayPartition(ctrl_t *ctrl, graph_t *graph)
Definition: kwayrefine.c:315
pybind_wrapper_test_script.z
z
Definition: pybind_wrapper_test_script.py:61
metis_rcode
int metis_rcode(int sigrval)
Definition: libmetis/util.c:123
Print2WayRefineStats
void Print2WayRefineStats(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, real_t deltabal, idx_t mincutorder)
Definition: fm.c:515
ComputeSubDomainGraph
void ComputeSubDomainGraph(ctrl_t *ctrl, graph_t *graph)
Definition: minconn.c:18
FindPartitionInducedComponents
idx_t FindPartitionInducedComponents(graph_t *graph, idx_t *where, idx_t *cptr, idx_t *cind)
Definition: contig.c:32
Project2WayPartition
void Project2WayPartition(ctrl_t *ctrl, graph_t *graph)
Definition: refine.c:141
vwgt
idx_t idx_t idx_t idx_t * vwgt
Definition: include/metis.h:198
SetupCtrl
ctrl_t * SetupCtrl(moptype_et optype, idx_t *options, idx_t ncon, idx_t nparts, real_t *tpwgts, real_t *ubvec)
Definition: options.c:17
rvecle
int rvecle(idx_t n, real_t *x, real_t *y)
Definition: mcutil.c:22
MoveGroupMinConnForVol
void MoveGroupMinConnForVol(ctrl_t *ctrl, graph_t *graph, idx_t to, idx_t nind, idx_t *ind, idx_t *vmarker, idx_t *pmarker, idx_t *modind)
Definition: minconn.c:561
Match_SHEM
idx_t Match_SHEM(ctrl_t *ctrl, graph_t *graph)
Definition: coarsen.c:276
PrintTimers
void PrintTimers(ctrl_t *)
Definition: timing.c:42
FreeCtrl
void FreeCtrl(ctrl_t **r_ctrl)
Definition: options.c:520
Compute2WayPartitionParams
void Compute2WayPartitionParams(ctrl_t *ctrl, graph_t *graph)
Definition: refine.c:71
ubfactor
idx_t idx_t idx_t idx_t idx_t real_t ubfactor
Definition: include/metis.h:240
part
idx_t idx_t idx_t idx_t idx_t idx_t idx_t real_t real_t idx_t idx_t idx_t * part
Definition: include/metis.h:200
MlevelNodeBisectionL2
void MlevelNodeBisectionL2(ctrl_t *ctrl, graph_t *graph, idx_t niparts)
Definition: ometis.c:345
ivecaxpygez
int ivecaxpygez(idx_t n, idx_t a, idx_t *x, idx_t *y, idx_t *z)
Definition: mcutil.c:128
ComputeKWayBoundary
void ComputeKWayBoundary(ctrl_t *ctrl, graph_t *graph, idx_t bndtype)
Definition: kwayrefine.c:507
ComputeCut
idx_t ComputeCut(graph_t *graph, idx_t *where)
Definition: debug.c:21
y
Scalar * y
Definition: level1_cplx_impl.h:124
EliminateSubDomainEdges
void EliminateSubDomainEdges(ctrl_t *ctrl, graph_t *graph)
Definition: minconn.c:192
MlevelKWayPartitioning
idx_t MlevelKWayPartitioning(ctrl_t *ctrl, graph_t *graph, idx_t *part)
Definition: kmetis.c:103
Match_2Hop
idx_t Match_2Hop(ctrl_t *ctrl, graph_t *graph, idx_t *perm, idx_t *match, idx_t cnvtxs, size_t nunmatched)
Definition: coarsen.c:415
vnbrpoolReset
void vnbrpoolReset(ctrl_t *ctrl)
Definition: wspace.c:191
eptr
idx_t idx_t * eptr
Definition: include/metis.h:207
xadj
idx_t idx_t * xadj
Definition: include/metis.h:197
IsBalanced
int IsBalanced(ctrl_t *ctrl, graph_t *graph, real_t ffactor)
Definition: kwayrefine.c:666
iargmax2_nrm
idx_t iargmax2_nrm(size_t n, idx_t *x, real_t *y)
Definition: libmetis/util.c:93
AllocateRefinementWorkSpace
void AllocateRefinementWorkSpace(ctrl_t *ctrl, idx_t nbrpoolsize)
Definition: wspace.c:43
a
ArrayXXi a
Definition: Array_initializer_list_23_cxx11.cpp:1
cnbrpoolReset
void cnbrpoolReset(ctrl_t *ctrl)
Definition: wspace.c:163
epart
idx_t idx_t idx_t idx_t idx_t idx_t real_t idx_t idx_t idx_t * epart
Definition: include/metis.h:215
MlevelNestedDissectionP
void MlevelNestedDissectionP(ctrl_t *ctrl, graph_t *graph, idx_t *order, idx_t lastvtx, idx_t npes, idx_t cpos, idx_t *sizes)
Definition: parmetis.c:105
FreeWorkSpace
void FreeWorkSpace(ctrl_t *ctrl)
Definition: wspace.c:80
ComputePartitionInfoBipartite
void ComputePartitionInfoBipartite(graph_t *, idx_t, idx_t *)
Definition: libmetis/stat.c:21
hmarker
idx_t idx_t idx_t idx_t idx_t * hmarker
Definition: include/metis.h:240
PruneGraph
graph_t * PruneGraph(ctrl_t *ctrl, idx_t nvtxs, idx_t *xadj, idx_t *adjncy, idx_t *vwgt, idx_t *iperm, real_t factor)
Definition: compress.c:150
MinCover
void MinCover(idx_t *, idx_t *, idx_t, idx_t, idx_t *, idx_t *)
Definition: mincover.c:42
SetupGraph_label
void SetupGraph_label(graph_t *graph)
Definition: libmetis/graph.c:118
MlevelNestedDissection
void MlevelNestedDissection(ctrl_t *ctrl, graph_t *graph, idx_t *order, idx_t lastvtx)
Definition: ometis.c:183
wspacepush
void wspacepush(ctrl_t *ctrl)
Definition: wspace.c:118
EliminateComponents
void EliminateComponents(ctrl_t *ctrl, graph_t *graph)
Definition: contig.c:336
FM_2WayNodeRefine2SidedP
void FM_2WayNodeRefine2SidedP(ctrl_t *ctrl, graph_t *graph, idx_t *hmarker, real_t ubfactor, idx_t npasses)
Definition: parmetis.c:467
Match_RM
idx_t Match_RM(ctrl_t *ctrl, graph_t *graph)
Definition: coarsen.c:149
IsConnected
idx_t IsConnected(graph_t *graph, idx_t report)
Definition: contig.c:167
align_3::a2
Point2 a2
Definition: testPose2.cpp:770
FM_2WayNodeBalance
void FM_2WayNodeBalance(ctrl_t *ctrl, graph_t *graph)
Definition: sfm.c:476
ConstructSeparator
void ConstructSeparator(ctrl_t *ctrl, graph_t *graph)
Definition: separator.c:21
CreateCoarseGraphNoMask
void CreateCoarseGraphNoMask(ctrl_t *ctrl, graph_t *graph, idx_t cnvtxs, idx_t *match)
Definition: coarsen.c:800
MlevelRecursiveBisection
idx_t MlevelRecursiveBisection(ctrl_t *ctrl, graph_t *graph, idx_t nparts, idx_t *part, real_t *tpwgts, idx_t fpart)
Definition: pmetis.c:157
Change2FNumberingOrder
void Change2FNumberingOrder(idx_t, idx_t *, idx_t *, idx_t *, idx_t *)
Definition: fortran.c:68
ivecge
int ivecge(idx_t n, idx_t *x, idx_t *z)
Definition: mcutil.c:100
IsConnectedSubdomain
idx_t IsConnectedSubdomain(ctrl_t *, graph_t *, idx_t, idx_t)
Definition: contig.c:184
FM_2WayNodeRefine1Sided
void FM_2WayNodeRefine1Sided(ctrl_t *ctrl, graph_t *graph, idx_t niter)
Definition: sfm.c:263
Greedy_KWayVolOptimize
void Greedy_KWayVolOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter, real_t ffactor, idx_t omode)
Definition: kwayfm.c:370
Project2WayNodePartition
void Project2WayNodePartition(ctrl_t *ctrl, graph_t *graph)
Definition: srefine.c:137
Init2WayPartition
void Init2WayPartition(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts)
Definition: initpart.c:19
McRandomBisection
void McRandomBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts)
Definition: initpart.c:325
v
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
Greedy_KWayOptimize
void Greedy_KWayOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter, real_t ffactor, idx_t omode)
Definition: kwayfm.c:20
Setup2WayBalMultipliers
void Setup2WayBalMultipliers(ctrl_t *ctrl, graph_t *graph, real_t *tpwgts)
Definition: options.c:154
GrowBisectionNode
void GrowBisectionNode(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts)
Definition: initpart.c:433
real_t
float real_t
Definition: include/metis.h:132
MinCover_RowDFS
void MinCover_RowDFS(idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t)
Definition: mincover.c:237
AllocateKWayPartitionMemory
void AllocateKWayPartitionMemory(ctrl_t *ctrl, graph_t *graph)
Definition: kwayrefine.c:116
RandomBisection
void RandomBisection(ctrl_t *ctrl, graph_t *graph, real_t *ntpwgts, idx_t niparts)
Definition: initpart.c:114
SplitGraphPart
void SplitGraphPart(ctrl_t *ctrl, graph_t *graph, graph_t **r_lgraph, graph_t **r_rgraph)
Definition: pmetis.c:280
SetupCoarseGraph
graph_t * SetupCoarseGraph(graph_t *graph, idx_t cnvtxs, idx_t dovsize)
Definition: coarsen.c:1093
MMDOrder
void MMDOrder(ctrl_t *ctrl, graph_t *graph, idx_t *order, idx_t lastvtx)
Definition: ometis.c:655
InitMesh
void InitMesh(mesh_t *mesh)
Definition: mesh.c:395
where
idx_t idx_t idx_t idx_t * where
Definition: include/metis.h:240
SplitGraphOrderCC
graph_t ** SplitGraphOrderCC(ctrl_t *ctrl, graph_t *graph, idx_t ncmps, idx_t *cptr, idx_t *cind)
Definition: ometis.c:552
BetterBalance2Way
int BetterBalance2Way(idx_t n, real_t *x, real_t *y)
Definition: mcutil.c:169
ComputePartitionBalance
void ComputePartitionBalance(graph_t *, idx_t, idx_t *, real_t *)
Definition: libmetis/stat.c:125
ikvwspacemalloc
ikv_t * ikvwspacemalloc(ctrl_t *, idx_t)
Definition: wspace.c:154
RefineKWay
void RefineKWay(ctrl_t *ctrl, graph_t *orggraph, graph_t *graph)
Definition: kwayrefine.c:17
Greedy_McKWayCutOptimize
void Greedy_McKWayCutOptimize(ctrl_t *ctrl, graph_t *graph, idx_t niter, real_t ffactor, idx_t omode)
Definition: kwayfm.c:684
graph
NonlinearFactorGraph graph
Definition: doc/Code/OdometryExample.cpp:2
iargmax_strd
idx_t iargmax_strd(size_t, idx_t *, idx_t)
Definition: libmetis/util.c:46
mmdelm
void mmdelm(idx_t, idx_t *xadj, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t *, idx_t, idx_t)
Definition: mmd.c:171
nn
idx_t * nn
Definition: include/metis.h:207
max
#define max(a, b)
Definition: datatypes.h:20
FM_2WayNodeRefine1SidedP
void FM_2WayNodeRefine1SidedP(ctrl_t *ctrl, graph_t *graph, idx_t *hmarker, real_t ubfactor, idx_t npasses)
Definition: parmetis.c:237
FindCommonNodes
idx_t FindCommonNodes(idx_t qid, idx_t nelmnts, idx_t *elmntids, idx_t *eptr, idx_t *eind, idx_t *marker, idx_t *nbrs)
Definition: mesh.c:348
options
Definition: options.h:16
x2
Pose3 x2(Rot3::Ypr(0.0, 0.0, 0.0), l2)
Change2FNumbering
void Change2FNumbering(idx_t, idx_t *, idx_t *, idx_t *)
Definition: fortran.c:34
i
int i
Definition: BiCGSTAB_step_by_step.cpp:9
SplitGraphOrder
void SplitGraphOrder(ctrl_t *ctrl, graph_t *graph, graph_t **r_lgraph, graph_t **r_rgraph)
Definition: ometis.c:422
Change2FNumbering2
void Change2FNumbering2(idx_t, idx_t *, idx_t *)
Definition: fortran.c:51
InitRandom
void InitRandom(idx_t)
Definition: libmetis/util.c:21
InitSeparator
void InitSeparator(ctrl_t *ctrl, graph_t *graph, idx_t niparts)
Definition: initpart.c:67
vnbrpoolGetNext
idx_t vnbrpoolGetNext(ctrl_t *ctrl, idx_t nnbrs)
Definition: wspace.c:200
graph_t
Definition: libmetis/struct.h:82
MinCover_ColDFS
void MinCover_ColDFS(idx_t *, idx_t *, idx_t, idx_t *, idx_t *, idx_t)
Definition: mincover.c:212
idx_t
int32_t idx_t
Definition: include/metis.h:101
r_xadj
idx_t idx_t idx_t idx_t idx_t idx_t ** r_xadj
Definition: include/metis.h:208
CreateGraph
graph_t * CreateGraph(void)
Definition: libmetis/graph.c:162


gtsam
Author(s):
autogenerated on Sat Nov 16 2024 04:03:53