8.3
general documentation
cs_part_to_block.h
Go to the documentation of this file.
1#ifndef __CS_PART_TO_BLOCK_H__
2#define __CS_PART_TO_BLOCK_H__
3
4/*============================================================================
5 * Convert between general domain partition and block distribution.
6 *============================================================================*/
7
8/*
9 This file is part of code_saturne, a general-purpose CFD tool.
10
11 Copyright (C) 1998-2024 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#if defined(HAVE_MPI)
31#include <mpi.h>
32#endif
33
34/*----------------------------------------------------------------------------
35 * Local headers
36 *----------------------------------------------------------------------------*/
37
38#include "cs_defs.h"
39#include "cs_block_dist.h"
40
41/*----------------------------------------------------------------------------*/
42
44
45/*=============================================================================
46 * Macro definitions
47 *============================================================================*/
48
49/*============================================================================
50 * Type definitions
51 *============================================================================*/
52
53/* Opaque general domain partitioning to block distribution structure */
54
55#if defined(HAVE_MPI)
56
57typedef struct _cs_part_to_block_t cs_part_to_block_t;
58
59#endif
60
61/*=============================================================================
62 * Public function prototypes
63 *============================================================================*/
64
65#if defined(HAVE_MPI)
66
67/*----------------------------------------------------------------------------
68 * Initialize partition to block distributor based on global entity numbers.
69 *
70 * arguments:
71 * comm <-- communicator
72 * bi <-- block size and range info
73 * n_ents <-- number of elements in partition
74 * global_ent_num <-- global entity numbers
75 *
76 * returns:
77 * initialized partition to block distributor
78 *----------------------------------------------------------------------------*/
79
83 cs_lnum_t n_ents,
84 const cs_gnum_t global_ent_num[]);
85
86/*----------------------------------------------------------------------------
87 * Destroy a partition to block distributor structure.
88 *
89 * arguments:
90 * d <-> pointer to partition to block distributor structure pointer
91 *----------------------------------------------------------------------------*/
92
93void
95
96/*----------------------------------------------------------------------------
97 * Transfer ownership of global entity numbers to a block distributor.
98 *
99 * The global_ent_num[] array should be the same as the one used
100 * for the creation of the block distributor.
101 *
102 * arguments:
103 * d <-- distributor helper
104 * global_ent_num <-> global entity numbers
105 *----------------------------------------------------------------------------*/
106
107void
109 cs_gnum_t global_ent_num[]);
110
111/*----------------------------------------------------------------------------
112 * Return number of entities associated with local partition
113 *
114 * arguments:
115 * d <-- distribtor helper
116 *
117 * returns:
118 * number of entities associated with distribution receive
119 *----------------------------------------------------------------------------*/
120
123
124/*----------------------------------------------------------------------------
125 * Copy array data from general domain partition to block distribution.
126 *
127 * arguments:
128 * d <-- partition to block distributor
129 * datatype <-- type of data considered
130 * stride <-- number of values per entity (interlaced)
131 * part_values <-- values in general domain partition
132 * block_values --> values in block distribution
133 *----------------------------------------------------------------------------*/
134
135void
137 cs_datatype_t datatype,
138 int stride,
139 const void *part_values,
140 void *block_values);
141
142/*----------------------------------------------------------------------------
143 * Copy local index from general domain partition to block distribution.
144 *
145 * This is useful for distribution of entity connectivity information.
146 *
147 * arguments:
148 * d <-- partition to block distributor
149 * part_index <-- local index in general partition distribution
150 * (size: n_part_entities + 1)
151 * block_index --> local index in block distribution
152 * (size: n_block_entities + 1)
153 *----------------------------------------------------------------------------*/
154
155void
157 const cs_lnum_t *part_index,
158 cs_lnum_t *block_index);
159
160/*----------------------------------------------------------------------------
161 * Copy indexed data from general domain partition to block distribution.
162 *
163 * This is useful for distribution of entity connectivity information.
164 *
165 * arguments:
166 * d <-- partition to block distributor
167 * datatype <-- type of data considered
168 * part_index <-- local index in general distribution
169 * part_val <-- numbers in general distribution
170 * (size: part_index[n_part_ents])
171 * block_index --> local index in block distribution
172 * block_val --> values in block distribution
173 * (size: block_index[n_block_ents])
174 *----------------------------------------------------------------------------*/
175
176void
178 cs_datatype_t datatype,
179 const cs_lnum_t *part_index,
180 const void *part_val,
181 const cs_lnum_t *block_index,
182 void *block_val);
183
184#endif /* defined(HAVE_MPI) */
185
186/*----------------------------------------------------------------------------*/
187
189
190#endif /* __CS_PART_TO_BLOCK_H__ */
cs_datatype_t
Definition: cs_defs.h:300
#define BEGIN_C_DECLS
Definition: cs_defs.h:542
uint64_t cs_gnum_t
global mesh entity number
Definition: cs_defs.h:325
#define END_C_DECLS
Definition: cs_defs.h:543
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:335
void cs_part_to_block_transfer_gnum(cs_part_to_block_t *d, cs_gnum_t global_ent_num[])
Definition: cs_part_to_block.cpp:621
void cs_part_to_block_copy_indexed(cs_part_to_block_t *d, cs_datatype_t datatype, const cs_lnum_t *part_index, const void *part_val, const cs_lnum_t *block_index, void *block_val)
Definition: cs_part_to_block.cpp:727
void cs_part_to_block_destroy(cs_part_to_block_t **d)
Definition: cs_part_to_block.cpp:589
cs_part_to_block_t * cs_part_to_block_create_by_gnum(MPI_Comm comm, cs_block_dist_info_t bi, cs_lnum_t n_ents, const cs_gnum_t global_ent_num[])
Definition: cs_part_to_block.cpp:551
void cs_part_to_block_copy_array(cs_part_to_block_t *d, cs_datatype_t datatype, int stride, const void *part_values, void *block_values)
Definition: cs_part_to_block.cpp:662
cs_lnum_t cs_part_to_block_get_n_part_ents(cs_part_to_block_t *d)
Definition: cs_part_to_block.cpp:640
void cs_part_to_block_copy_index(cs_part_to_block_t *d, const cs_lnum_t *part_index, cs_lnum_t *block_index)
Definition: cs_part_to_block.cpp:696
struct _cs_part_to_block_t cs_part_to_block_t
Definition: cs_part_to_block.h:57
Definition: cs_block_dist.h:50