programmer's documentation
cs_renumber.h
Go to the documentation of this file.
1 #ifndef __CS_RENUMBER_H__
2 #define __CS_RENUMBER_H__
3 
4 /*============================================================================
5  * Optional mesh renumbering
6  *============================================================================*/
7 
8 /*
9  This file is part of Code_Saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2015 EDF S.A.
12 
13  This program is free software; you can redistribute it and/or modify it under
14  the terms of the GNU General Public License as published by the Free Software
15  Foundation; either version 2 of the License, or (at your option) any later
16  version.
17 
18  This program is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21  details.
22 
23  You should have received a copy of the GNU General Public License along with
24  this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
25  Street, Fifth Floor, Boston, MA 02110-1301, USA.
26 */
27 
28 /*----------------------------------------------------------------------------*/
29 
30 /*----------------------------------------------------------------------------
31  * Local headers
32  *----------------------------------------------------------------------------*/
33 
34 #include "cs_base.h"
35 #include "cs_mesh.h"
36 
37 /*----------------------------------------------------------------------------*/
38 
40 
41 /*============================================================================
42  * Macro definitions
43  *============================================================================*/
44 
45 /*============================================================================
46  * Type definitions
47  *============================================================================*/
48 
49 /* Renumbering algorithms */
50 
51 typedef enum {
52 
53  CS_RENUMBER_CELLS_SCOTCH_PART, /* SCOTCH partitioning */
54  CS_RENUMBER_CELLS_SCOTCH_ORDER, /* SCOTCH ordering */
55  CS_RENUMBER_CELLS_METIS_PART, /* METIS partitioning */
56  CS_RENUMBER_CELLS_METIS_ORDER, /* METIS ordering */
57  CS_RENUMBER_CELLS_MORTON, /* Morton space filling curve */
58  CS_RENUMBER_CELLS_HILBERT, /* Hilbert space filling curve */
59  CS_RENUMBER_CELLS_NONE /* No interior face numbering */
60 
62 
63 typedef enum {
64 
65  CS_RENUMBER_I_FACES_BLOCK, /* No shared cell in block */
66  CS_RENUMBER_I_FACES_MULTIPASS, /* Use multipass face numbering */
67  CS_RENUMBER_I_FACES_SIMD, /* Renumber for vector (SIMD) operations */
68  CS_RENUMBER_I_FACES_NONE /* No interior face numbering */
69 
71 
72 typedef enum {
73 
74  CS_RENUMBER_B_FACES_THREAD, /* No cell shared between threads */
75  CS_RENUMBER_B_FACES_SIMD, /* Renumber for vector (SIMD) operations */
76  CS_RENUMBER_B_FACES_NONE /* No interior face numbering */
77 
79 
80 /* Ordering options for adjacency arrays */
81 
82 typedef enum {
83 
84  CS_RENUMBER_ADJACENT_LOW, /* Lowest adjacent id first */
85  CS_RENUMBER_ADJACENT_HIGH /* Highest adjacent id first */
86 
88 
89 /*=============================================================================
90  * Public function prototypes
91  *============================================================================*/
92 
93 /*----------------------------------------------------------------------------
94  * Set the target number of threads for mesh renumbering.
95  *
96  * By default, the target number of threads is set to cs_glob_n_threads,
97  * but the value may be forced using this function. This is mainly useful
98  * for testing purposes.
99  *
100  * parameters:
101  * n_threads <-- target number of threads for mesh numbering
102  *----------------------------------------------------------------------------*/
103 
104 void
105 cs_renumber_set_n_threads(int n_threads);
106 
107 /*----------------------------------------------------------------------------
108  * Return the target number of threads for mesh renumbering.
109  *
110  * returns:
111  * the target number of threads for mesh numbering
112  *----------------------------------------------------------------------------*/
113 
114 int
116 
117 /*----------------------------------------------------------------------------
118  * Set the minimum sunset sizes when renumbering for threads.
119  *
120  * parameters:
121  * min_i_subset_size <-- minimum number of interior faces per
122  * thread per group
123  * min_b_subset_size <-- minimum number of boundary faces per
124  * thread per group
125  *----------------------------------------------------------------------------*/
126 
127 void
129  cs_lnum_t min_b_subset_size);
130 
131 /*----------------------------------------------------------------------------
132  * Get the minimum sunset sizes when renumbering for threads.
133  *
134  * min_i_subset_size --> minimum number of interior faces per
135  * thread per group, or NULL
136  * min_b_subset_size --> minimum number of boundary faces per
137  * thread per group, or NULL
138  *----------------------------------------------------------------------------*/
139 
140 void
141 cs_renumber_get_min_subset_size(cs_lnum_t *min_i_subset_size,
142  cs_lnum_t *min_b_subset_size);
143 
144 /*----------------------------------------------------------------------------
145  * Select the options for interior faces renumbering.
146  *
147  * parameters:
148  * halo_adjacent_cells_last <-- if true, cells adjacent to ghost cells
149  * will be placed last (after pre-numbering)
150  * halo_adjacent_faces_last <-- if true, interior faces adjacent to ghost
151  * cells will be placed last (after pre-numbering)
152  * i_faces_base_ordering <-- pre-ordering of interior faces by
153  * lowest or highest adjacent cell id
154  * cells_pre_numbering <-- algorithm for cells pre-numbering
155  * cells_numbering <-- algorithm for cells numbering
156  * i_faces_numbering <-- algorithm for interior faces numbering
157  * b_faces_numbering <-- algorithm for boundary faces numbering
158  *----------------------------------------------------------------------------*/
159 
160 void
161 cs_renumber_set_algorithm(bool halo_adjacent_cells_last,
162  bool halo_adjacent_faces_last,
163  cs_renumber_ordering_t i_faces_base_ordering,
164  cs_renumber_cells_type_t cells_pre_numbering,
165  cs_renumber_cells_type_t cells_numbering,
166  cs_renumber_i_faces_type_t i_faces_numbering,
167  cs_renumber_b_faces_type_t b_faces_numbering);
168 
169 /*----------------------------------------------------------------------------
170  * Return the options for interior faces renumbering.
171  *
172  * Any argument may be passed NULL if this option is not queried.
173  *
174  * parameters:
175  * halo_adjacent_cells_last --> if true, cells adjacent to ghost cells
176  * will be placed last (after pre-numbering)
177  * halo_adjacent_faces_last --> if true, interior faces adjacent to ghost
178  * cells will be placed last (after pre-numbering)
179  * i_faces_base_ordering --> pre-ordering of interior faces by
180  * lowest or highest adjacent cell id
181  * cells_pre_numbering --> algorithm for cells pre-numbering
182  * cells_numbering --> algorithm for cells numbering
183  * i_faces_numbering --> algorithm for interior faces numbering
184  * b_faces_numbering --> algorithm for boundary faces numbering
185  *----------------------------------------------------------------------------*/
186 
187 void
188 cs_renumber_get_algorithm(bool *halo_adjacent_cells_last,
189  bool *halo_adjacent_faces_last,
190  cs_renumber_ordering_t *i_faces_base_ordering,
191  cs_renumber_cells_type_t *cells_pre_numbering,
192  cs_renumber_cells_type_t *cells_numbering,
193  cs_renumber_i_faces_type_t *i_faces_numbering,
194  cs_renumber_i_faces_type_t *b_faces_numbering);
195 
196 /*----------------------------------------------------------------------------
197  * Renumber mesh elements for vectorization or threading depending on code
198  * options and target machine.
199  *
200  * Renumbering cells may also allow improving locality (and favor faces
201  * renumbering).
202  * It is also possible to place cells connected to ghost cells last,
203  * which may be useful to enable computation/communication overlap.
204  *
205  * parameters:
206  * mesh <-> pointer to global mesh structure
207  *----------------------------------------------------------------------------*/
208 
209 void
211 
212 /*----------------------------------------------------------------------------
213  * Renumber interior faces for vectorization or threading depending on code
214  * options and target machine.
215  *
216  * parameters:
217  * mesh <-> pointer to global mesh structure
218  *----------------------------------------------------------------------------*/
219 
220 void
222 
223 /*----------------------------------------------------------------------------
224  * Renumber boundary faces for vectorization or threading depending on code
225  * options and target machine.
226  *
227  * parameters:
228  * mesh <-> pointer to global mesh structure
229  *----------------------------------------------------------------------------*/
230 
231 void
233 
234 /*----------------------------------------------------------------------------*/
235 
237 
238 #endif /* __CS_RENUMBER_H__ */
Definition: cs_renumber.h:85
Definition: cs_renumber.h:53
int cs_renumber_get_n_threads(void)
Return the target number of threads for mesh renumbering.
Definition: cs_renumber.c:5511
Definition: cs_renumber.h:59
Definition: cs_renumber.h:68
cs_renumber_b_faces_type_t
Boundary faces renumbering algorithm types.
Definition: cs_renumber.h:72
Definition: cs_renumber.h:84
Definition: cs_renumber.h:58
cs_renumber_cells_type_t
Cell renumbering algorithm types.
Definition: cs_renumber.h:51
Definition: cs_renumber.h:76
#define BEGIN_C_DECLS
Definition: cs_defs.h:429
Definition: cs_renumber.h:75
void cs_renumber_set_n_threads(int n_threads)
Set the target number of threads for mesh renumbering.
Definition: cs_renumber.c:5486
cs_renumber_i_faces_type_t
Interior faces renumbering algorithm types.
Definition: cs_renumber.h:63
Definition: cs_renumber.h:66
void cs_renumber_b_faces(cs_mesh_t *mesh)
Renumber boundary faces for vectorization or threading depending on code options and target machine...
Definition: cs_renumber.c:5745
Definition: cs_mesh.h:62
void cs_renumber_get_algorithm(bool *halo_adjacent_cells_last, bool *halo_adjacent_faces_last, cs_renumber_ordering_t *i_faces_base_ordering, cs_renumber_cells_type_t *cells_pre_numbering, cs_renumber_cells_type_t *cells_numbering, cs_renumber_i_faces_type_t *i_faces_numbering, cs_renumber_i_faces_type_t *b_faces_numbering)
Return the algorithms for mesh renumbering.
Definition: cs_renumber.c:5619
Definition: cs_renumber.h:56
Definition: cs_renumber.h:55
Definition: cs_renumber.h:74
void cs_renumber_get_min_subset_size(cs_lnum_t *min_i_subset_size, cs_lnum_t *min_b_subset_size)
Get the minimum sunset sizes when renumbering for threads.
Definition: cs_renumber.c:5550
Definition: cs_renumber.h:57
Definition: cs_renumber.h:65
void cs_renumber_i_faces(cs_mesh_t *mesh)
Renumber interior faces for vectorization or threading depending on code options and target machine...
Definition: cs_renumber.c:5696
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:292
#define END_C_DECLS
Definition: cs_defs.h:430
Definition: cs_renumber.h:67
void cs_renumber_set_min_subset_size(cs_lnum_t min_i_subset_size, cs_lnum_t min_b_subset_size)
Set the minimum sunset sizes when renumbering for threads.
Definition: cs_renumber.c:5531
Definition: cs_renumber.h:54
cs_renumber_ordering_t
Ordering options for adjacency arrays.
Definition: cs_renumber.h:82
void cs_renumber_mesh(cs_mesh_t *mesh)
Renumber mesh elements for vectorization or threading depending on code options and target machine...
Definition: cs_renumber.c:5662
Definition: mesh.f90:26
void cs_renumber_set_algorithm(bool halo_adjacent_cells_last, bool halo_adjacent_faces_last, cs_renumber_ordering_t i_faces_base_ordering, cs_renumber_cells_type_t cells_pre_numbering, cs_renumber_cells_type_t cells_numbering, cs_renumber_i_faces_type_t i_faces_numbering, cs_renumber_b_faces_type_t b_faces_numbering)
Select the algorithm for mesh renumbering.
Definition: cs_renumber.c:5579