PaStiX Handbook 6.4.0
Loading...
Searching...
No Matches
order.h
Go to the documentation of this file.
1/**
2 *
3 * @file order.h
4 *
5 * PaStiX order structure routines
6 *
7 * @copyright 2004-2025 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
8 * Univ. Bordeaux. All rights reserved.
9 *
10 * @version 6.4.0
11 * @author Francois Pellegrini
12 * @author Mathieu Faverge
13 * @author Gregoire Pichon
14 * @author Pierre Ramet
15 * @date 2024-07-05
16 *
17 *
18 * @addtogroup pastix_order
19 * @{
20 * @brief Functions to generate and manipulate the order structure.
21 *
22 * This module provides the set of function to prepare the order structure
23 * associated to a given sparse matrix. It is possible to call Scotch,
24 * PT-Scotch, Metis and ParMetis to build a new ordering that minimize the
25 * fill-in and maximize the level of parallelism.
26 *
27 **/
28#ifndef _pastix_order_h_
29#define _pastix_order_h_
30
31#include "pastix/config.h"
32#include "pastix/datatypes.h"
33
34BEGIN_C_DECLS
35
36#ifndef DOXYGEN_SHOULD_SKIP_THIS
37struct etree_s;
38typedef struct etree_s EliminTree;
39#endif /* DOXYGEN_SHOULD_SKIP_THIS */
40
41/**
42 * @brief Order structure.
43 *
44 * This structure stores the permutation (and inverse permutation) associated to the ordering.
45 * It also stores the partitioning tree and the set of supernodes.
46 */
47typedef struct pastix_order_s {
48 pastix_int_t baseval; /**< base value used for numbering */
49 pastix_int_t vertnbr; /**< Number of vertices */
50 pastix_int_t cblknbr; /**< Number of column blocks */
51 pastix_int_t *permtab; /**< Permutation array of size vertnbr [based] */
52 pastix_int_t *peritab; /**< Inverse permutation array of size vertnbr [based] */
53 pastix_int_t *rangtab; /**< Supernode array of size cblknbr+1 [based,+1] */
54 pastix_int_t *treetab; /**< Partitioning tree of size cblknbr+1 [based] */
55 int8_t *selevtx; /**< Selected vertices for low-rank clustering of size cblknbr */
56 pastix_int_t sndenbr; /**< The number of original supernodes before clustering */
57 pastix_int_t *sndetab; /**< Original supernode array of size sndenbr [based,+1] */
58 pastix_int_t *peritab_exp; /**< Computed field that should not be modified by the user */
60
61/**
62 * @name Order basic subroutines
63 * @{
64 */
66 pastix_int_t baseval,
67 pastix_int_t vertnbr,
68 pastix_int_t cblknbr,
69 pastix_int_t *perm,
70 pastix_int_t *invp,
71 pastix_int_t *rang,
72 pastix_int_t *tree );
73
75 pastix_int_t vertnbr,
76 pastix_int_t cblknbr );
77
79 pastix_int_t vertnbr );
80
81void pastixOrderExit( pastix_order_t *ordeptr );
82
83void pastixOrderBase( pastix_order_t *ordeptr,
84 pastix_int_t baseval );
85
86int pastixOrderCheck( const pastix_order_t *ordeptr );
87
89 const spmatrix_t *spm );
90
92 const pastix_order_t *ordesrc );
93
94pastix_order_t *pastixOrderGet( const pastix_data_t *pastix_data );
95
96void pastixOrderBcast( pastix_order_t *ordemesh,
97 int root,
98 PASTIX_Comm pastix_comm );
99
100int pastixOrderGrid( pastix_order_t **myorder,
101 pastix_int_t nx,
102 pastix_int_t ny,
103 pastix_int_t nz );
104
105/**
106 * @}
107 * @name Order IO subroutines
108 * @{
109 */
110int pastixOrderLoad( const pastix_data_t *pastix_data,
111 pastix_order_t *ordeptr );
112
113int pastixOrderSave( pastix_data_t *pastix_data,
114 const pastix_order_t *ordeptr );
115
116/**
117 * @}
118 */
119
120END_C_DECLS
121
122#endif /* _pastix_order_h_ */
123
124/**
125 * @}
126 */
BEGIN_C_DECLS typedef int pastix_int_t
Definition datatypes.h:51
Elimination tree.
Definition elimintree.h:39
pastix_int_t baseval
Definition order.h:48
pastix_int_t * peritab_exp
Definition order.h:58
pastix_int_t * treetab
Definition order.h:54
pastix_int_t * sndetab
Definition order.h:57
int8_t * selevtx
Definition order.h:55
pastix_int_t * permtab
Definition order.h:51
pastix_int_t * peritab
Definition order.h:52
pastix_int_t cblknbr
Definition order.h:50
pastix_int_t sndenbr
Definition order.h:56
pastix_int_t * rangtab
Definition order.h:53
pastix_int_t vertnbr
Definition order.h:49
void pastixOrderExpand(pastix_order_t *ordeptr, const spmatrix_t *spm)
This routine expand the permutation arrays and the rangtab when the spm is using multiple dof per unk...
Definition order.c:396
int pastixOrderAlloc(pastix_order_t *ordeptr, pastix_int_t vertnbr, pastix_int_t cblknbr)
Allocate the order structure.
Definition order.c:55
void pastixOrderBase(pastix_order_t *ordeptr, pastix_int_t baseval)
This routine sets the base of the given ordering structure to the given base value.
Definition order.c:322
BEGIN_C_DECLS struct pastix_order_s pastix_order_t
Order structure.
int pastixOrderSave(pastix_data_t *pastix_data, const pastix_order_t *ordeptr)
Save an ordering to a file.
Definition order_io.c:293
pastix_order_t * pastixOrderGet(const pastix_data_t *pastix_data)
This routine returns the pointer to the internal order structure to access permutation information.
Definition order.c:649
int pastixOrderGrid(pastix_order_t **myorder, pastix_int_t nx, pastix_int_t ny, pastix_int_t nz)
void pastixOrderBcast(pastix_order_t *ordemesh, int root, PASTIX_Comm pastix_comm)
This routine broadcast the ordemesh structure from node root to all the other nodes.
Definition order.c:679
int pastixOrderInit(pastix_order_t *ordeptr, pastix_int_t baseval, pastix_int_t vertnbr, pastix_int_t cblknbr, pastix_int_t *perm, pastix_int_t *invp, pastix_int_t *rang, pastix_int_t *tree)
Initialize the order structure with the given values.
Definition order.c:212
int pastixOrderCheck(const pastix_order_t *ordeptr)
This routine checks the correctness of the ordering structure.
Definition order_check.c:39
int pastixOrderCopy(pastix_order_t *ordedst, const pastix_order_t *ordesrc)
This routine copy a given ordering in a new one.
Definition order.c:570
int pastixOrderAllocId(pastix_order_t *ordeptr, pastix_int_t vertnbr)
Allocate the order structure for a given number of vertices with no cblk, and id permutation.
Definition order.c:123
void pastixOrderExit(pastix_order_t *ordeptr)
Free the arrays initialized in the order structure.
Definition order.c:273
int pastixOrderLoad(const pastix_data_t *pastix_data, pastix_order_t *ordeptr)
Load an ordering from a file.
Definition order_io.c:132
Order structure.
Definition order.h:47
Main PaStiX data structure.
Definition pastixdata.h:68