Code_Saturne
CFD tool
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
ecs_table.h
Go to the documentation of this file.
1 #ifndef _ECS_CHAMP_H_
2 #define _ECS_CHAMP_H_
3 
4 /*============================================================================
5  * Prototypes des fonctions de base
6  * associées à la structure `ecs_table_t' décrivant une table
7  *============================================================================*/
8 
9 /*
10  This file is part of Code_Saturne, a general-purpose CFD tool.
11 
12  Copyright (C) 1998-2012 EDF S.A.
13 
14  This program is free software; you can redistribute it and/or modify it under
15  the terms of the GNU General Public License as published by the Free Software
16  Foundation; either version 2 of the License, or (at your option) any later
17  version.
18 
19  This program is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
21  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
22  details.
23 
24  You should have received a copy of the GNU General Public License along with
25  this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
26  Street, Fifth Floor, Boston, MA 02110-1301, USA.
27 */
28 
29 /*----------------------------------------------------------------------------*/
30 
31 
32 /*============================================================================
33  * Visibilité
34  *============================================================================*/
35 
36 /*----------------------------------------------------------------------------
37  * Fichiers `include' librairie standard C ou BFT
38  *----------------------------------------------------------------------------*/
39 
40 #include <stdio.h>
41 
42 
43 /*----------------------------------------------------------------------------
44  * Fichiers `include' publics du paquetage global "Utilitaire"
45  *----------------------------------------------------------------------------*/
46 
47 #include "ecs_def.h"
48 
49 
50 /*----------------------------------------------------------------------------
51  * Fichiers `include' publics des paquetages visibles
52  *----------------------------------------------------------------------------*/
53 
54 #include "ecs_descr.h"
55 
56 
57 /*----------------------------------------------------------------------------
58  * Fichiers `include' publics du paquetage courant
59  *----------------------------------------------------------------------------*/
60 
61 
62 /*============================================================================
63  * Déclaration de la structure
64  *============================================================================*/
65 
66 typedef struct _ecs_table_t ecs_table_t;
67 
68 
69 /*============================================================================
70  * Définitions d'énumérations
71  *============================================================================*/
72 
73 typedef enum {
74 
81 
82 } ECS_TABLE_E;
83 
84 
85 #define ECS_TABLE_DEB ECS_TABLE_DEF
86 
87 
88 /*============================================================================
89  * Définition de macros
90  *============================================================================*/
91 
92 
93 /*============================================================================
94  * Prototypes de fonctions publiques
95  *============================================================================*/
96 
97 /*----------------------------------------------------------------------------
98  * Fonction qui crée une structure `ecs_table_t'
99  *
100  * La structure devient propriétaire des tableaux tab_pos et tab_val
101  * fournis en argument.
102  *
103  * nbr : Nombre d'éléments à remplir
104  * pas : Pas des positions si REGLE
105  * pos : Positions des éléments si non REGLE
106  * val : Valeurs des éléments
107  * descr : Pointeur sur le descripteur
108  * statut_e : Statut dans une transformation
109  *----------------------------------------------------------------------------*/
110 
111 ecs_table_t *
112 ecs_table__cree(size_t nbr,
113  size_t pas,
114  ecs_size_t *pos,
115  ecs_int_t *val,
116  ecs_descr_t *descr);
117 
118 /*----------------------------------------------------------------------------
119  * Fonction qui crée une structure `ecs_table_t'
120  *
121  * nbr : Nombre d'éléments à remplir
122  * nbr_val : Nombre de valeurs à remplir
123  *----------------------------------------------------------------------------*/
124 
125 ecs_table_t *
126 ecs_table__alloue(size_t nbr,
127  size_t nbr_val);
128 
129 /*----------------------------------------------------------------------------
130  * Fonction libérant une structure `ecs_table_t' donnée en argument.
131  *----------------------------------------------------------------------------*/
132 
133 void
134 ecs_table__detruit(ecs_table_t **this_table);
135 
136 /*----------------------------------------------------------------------------
137  * Fonction qui convertit, si possible,
138  * le tableau des positions d'une table en REGLE
139  *----------------------------------------------------------------------------*/
140 
141 void
143 
144 /*----------------------------------------------------------------------------
145  * Fonction qui construit, si nécessaire, un tableau des positions à
146  * partir d'une REGLE.
147  *----------------------------------------------------------------------------*/
148 
149 void
151 
152 /*----------------------------------------------------------------------------
153  * Fonction qui libère, si possible, le tableau des positions d'un table.
154  * Ce tableau ne doit pas avoir été modifié.
155  *----------------------------------------------------------------------------*/
156 
157 void
159 
160 /*----------------------------------------------------------------------------
161  * Fonction imprimant le contenu d'une structure `ecs_table_t' donnée
162  * sur le flux décrit par la structure `FILE'
163  *----------------------------------------------------------------------------*/
164 
165 void
166 ecs_table__imprime(const ecs_table_t *this_table,
167  size_t imp_col,
168  size_t nbr_imp,
169  FILE *fic_imp);
170 
171 /*----------------------------------------------------------------------------
172  * Fonction qui renvoie la taille en octets d'une structure `ecs_table_t'
173  *----------------------------------------------------------------------------*/
174 
175 size_t
176 ecs_table__ret_taille(const ecs_table_t *this_table);
177 
178 /*----------------------------------------------------------------------------
179  * Fonction qui renvoie une table entièrement réallouée
180  * dont le contenu est copié à partir de la table donnée
181  *
182  * Le membre donnant le lien sur une table suivante `l_table_sui'
183  * n'est pas copié et est mis à `NULL'
184  *----------------------------------------------------------------------------*/
185 
186 ecs_table_t *
187 ecs_table__copie(ecs_table_t *table_init);
188 
189 /*----------------------------------------------------------------------------
190  * Fonction qui créé une structure `ecs_table_t'
191  * à partir d'un tableau `tab_elt' contenant les valeurs du table.
192  *
193  * Si un élément n'a pas de valeur associée, la valeur correspondante
194  * dans `tab_elt' est `0'
195  *----------------------------------------------------------------------------*/
196 
197 ecs_table_t *
198 ecs_table__transforme_tableau(size_t nbr_elt,
199  const ecs_int_t *tab_elt,
200  ecs_descr_t *descr);
201 
202 /*----------------------------------------------------------------------------
203  * Fonction renvoyant le nombre d'éléments associés à une table donnée
204  *----------------------------------------------------------------------------*/
205 
206 size_t
207 ecs_table__ret_elt_nbr(const ecs_table_t *this_table);
208 
209 /*----------------------------------------------------------------------------
210  * Fonction renvoyant le nombre de valeurs associées à une table donnée
211  *----------------------------------------------------------------------------*/
212 
213 size_t
214 ecs_table__ret_val_nbr(const ecs_table_t *this_table);
215 
216 /*----------------------------------------------------------------------------
217  * Fonction retournant le nombre de descripteurs d'une table donnée
218  *----------------------------------------------------------------------------*/
219 
220 size_t
221 ecs_table__ret_descr_nbr(const ecs_table_t *this_table);
222 
223 /*----------------------------------------------------------------------------
224  * Fonction retournant le type des valeurs d'une table donnée
225  *----------------------------------------------------------------------------*/
226 
228 ecs_table__ret_val_typ(const ecs_table_t *this_table);
229 
230 /*----------------------------------------------------------------------------
231  * Fonction libérant un pointeur sur le tableau des positions d'une
232  * structure `ecs_table_t' donnée.
233  *
234  * Si les positions correspondent à une REGLE, le tableau est libéré.
235  * Sinon, il est conservé par la structure ecs_table_t.
236  *----------------------------------------------------------------------------*/
237 
238 void
239 ecs_table__libere_pos_tab(const ecs_table_t *this_table,
240  ecs_size_t *pos_tab);
241 
242 /*----------------------------------------------------------------------------
243  * Fonction qui concatène deux tables, et supprime la table à concaténer
244  *----------------------------------------------------------------------------*/
245 
246 void
247 ecs_table__concatene(ecs_table_t **this_table,
248  ecs_table_t **concat_table,
249  size_t nbr_elt_init,
250  size_t nbr_elt_ent_concat);
251 
252 /*----------------------------------------------------------------------------
253  * Fonction qui concatène deux tables de type connectivité,
254  * et supprime la table à concaténer
255  *----------------------------------------------------------------------------*/
256 
257 void
259  ecs_table_t **concat_table,
260  size_t nbr_elt_init,
261  size_t nbr_elt_concat);
262 
263 /*----------------------------------------------------------------------------
264  * Fonction qui prolonge une table réceptrice donnée
265  *
266  * Il s'agit en fait de concaténer le table avec une table vide. Seule la
267  * table des positions est modifiée. Les autres membres de la structure du
268  * table récepteur ne sont pas modifiés.
269  *----------------------------------------------------------------------------*/
270 
271 void
272 ecs_table__prolonge(ecs_table_t *this_table,
273  size_t nbr_elt_prec,
274  size_t nbr_elt_suiv);
275 
276 /*----------------------------------------------------------------------------
277  * Fonction réalisant la transformation d'une table
278  * en appliquant directement le vecteur de transformation donné
279  * sur ses positions
280  *
281  * Le nombre de valeurs transformées doit être égal
282  * au nombre de valeurs avant transformation
283  *----------------------------------------------------------------------------*/
284 
285 void
287  size_t nbr_elt_ref,
288  const ecs_tab_int_t vect_transf);
289 
290 /*----------------------------------------------------------------------------
291  * Fonction qui incrémente les valeurs d'une table donnée
292  * d'une constante donnée
293  *----------------------------------------------------------------------------*/
294 
295 void
297  const ecs_int_t increment);
298 
299 /*----------------------------------------------------------------------------
300  * Fonction réalisant la transformation d'un vecteur indexé
301  * en appliquant directement le vecteur de transformation donné
302  * sur les valeurs associées à ses éléments
303  *----------------------------------------------------------------------------*/
304 
305 void
307  const ecs_tab_int_t vect_transf,
308  const ecs_tab_int_t signe_elt);
309 
310 /*----------------------------------------------------------------------------
311  * Fonction qui détermine une nouvelle table à partir d'une table de référence
312  * en extrayant de ce dernier les éléments sélectionnés
313  * par le tableau de booléens
314  *----------------------------------------------------------------------------*/
315 
316 ecs_table_t *
318  bool elt_select[]);
319 
320 /*----------------------------------------------------------------------------*/
321 
322 #endif /* _ECS_TABLE_H_ */
ECS_TABLE_E
Definition: ecs_table.h:73
ecs_int_t * val
Definition: ecs_table_priv.h:72
void ecs_table__concatene(ecs_table_t **this_table, ecs_table_t **concat_table, size_t nbr_elt_init, size_t nbr_elt_ent_concat)
Definition: ecs_table.c:920
void ecs_table__incremente_val(ecs_table_t *this_table, const ecs_int_t increment)
Definition: ecs_table.c:1117
int ecs_int_t
Definition: ecs_def.h:131
Definition: ecs_table.h:77
size_t nbr
Definition: ecs_table_priv.h:65
Definition: ecs_descr_priv.h:58
void ecs_table__libere_pos(ecs_table_t *this_table)
Definition: ecs_table.c:612
void ecs_table__imprime(const ecs_table_t *this_table, size_t imp_col, size_t nbr_imp, FILE *fic_imp)
Definition: ecs_table.c:628
size_t ecs_table__ret_descr_nbr(const ecs_table_t *this_table)
Definition: ecs_table.c:887
void ecs_table__prolonge(ecs_table_t *this_table, size_t nbr_elt_prec, size_t nbr_elt_suiv)
Definition: ecs_table.c:977
void ecs_table__libere_pos_tab(const ecs_table_t *this_table, ecs_size_t *pos_tab)
Definition: ecs_table.c:903
void ecs_table__detruit(ecs_table_t **this_table)
Definition: ecs_table.c:497
ecs_size_t * pos
Definition: ecs_table_priv.h:69
void ecs_table__regle_en_pos(ecs_table_t *this_table)
Definition: ecs_table.c:586
size_t ecs_size_t
Definition: ecs_def.h:132
ecs_table_t * ecs_table__extrait(ecs_table_t *table_ref, bool elt_select[])
Definition: ecs_table.c:1189
size_t ecs_table__ret_val_nbr(const ecs_table_t *this_table)
Definition: ecs_table.c:866
size_t pas
Definition: ecs_table_priv.h:67
ecs_table_t * ecs_table__cree(size_t nbr, size_t pas, ecs_size_t *pos, ecs_int_t *val, ecs_descr_t *descr)
Definition: ecs_table.c:412
ecs_table_t * ecs_table__alloue(size_t nbr, size_t nbr_val)
Definition: ecs_table.c:458
void ecs_table__concatene_connect(ecs_table_t **this_table, ecs_table_t **concat_table, size_t nbr_elt_init, size_t nbr_elt_concat)
Definition: ecs_tab.h:39
size_t ecs_table__ret_taille(const ecs_table_t *this_table)
Definition: ecs_table.c:694
Definition: ecs_table_priv.h:63
Definition: ecs_table.h:76
void ecs_table__transforme_pos(ecs_table_t *this_table, size_t nbr_elt_ref, const ecs_tab_int_t vect_transf)
Definition: ecs_table.c:1050
Definition: ecs_table.h:78
Definition: ecs_table.h:79
size_t ecs_table__ret_elt_nbr(const ecs_table_t *this_table)
Definition: ecs_table.c:848
ecs_table_t * ecs_table__transforme_tableau(size_t nbr_elt, const ecs_int_t *tab_elt, ecs_descr_t *descr)
Definition: ecs_table.c:777
ecs_type_t
Definition: ecs_def.h:138
ecs_type_t ecs_table__ret_val_typ(const ecs_table_t *this_table)
ecs_descr_t * descr
Definition: ecs_table_priv.h:74
ecs_table_t * ecs_table__copie(ecs_table_t *table_init)
Definition: ecs_table.c:729
Definition: ecs_table.h:75
void ecs_table__renumerote(ecs_table_t *this_table, const ecs_tab_int_t vect_transf, const ecs_tab_int_t signe_elt)
Definition: ecs_table.c:1146
Definition: ecs_table.h:80
void ecs_table__pos_en_regle(ecs_table_t *this_table)
Definition: ecs_table.c:542