8.1
general documentation
cs_paramedmem_coupling.h
Go to the documentation of this file.
1 #ifndef __CS_PARAMEDMEM_HXX__
2 #define __CS_PARAMEDMEM_HXX__
3 
4 /*============================================================================
5  * MEDCoupling ParaMESH/ParaFIELD wrapper functions.
6  *============================================================================*/
7 
8 /*
9  This file is part of code_saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2023 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  * Local headers
30  *----------------------------------------------------------------------------*/
31 
32 #include "cs_defs.h"
33 
34 #include "cs_field.h"
35 #include "cs_zone.h"
36 
37 /*============================================================================
38  * Structure definitions
39  *============================================================================*/
40 
41 typedef struct _cs_paramedmem_coupling_t cs_paramedmem_coupling_t;
42 
43 /*----------------------------------------------------------------------------*/
44 
46 
47 /*============================================================================
48  * Global variable definitions
49  *============================================================================*/
50 
51 typedef enum {
55 
56 typedef enum {
61 
62 typedef enum {
69 
70 /*============================================================================
71  * Public C++ function prototypes
72  *============================================================================*/
73 
74 /*----------------------------------------------------------------------------*/
83 /*----------------------------------------------------------------------------*/
84 
85 cs_paramedmem_coupling_t *
87 
88 /*----------------------------------------------------------------------------*/
96 /*----------------------------------------------------------------------------*/
97 
98 cs_paramedmem_coupling_t *
99 cs_paramedmem_coupling_by_name(const char *name);
100 
101 /*----------------------------------------------------------------------------*/
112 /*----------------------------------------------------------------------------*/
113 
114 cs_paramedmem_coupling_t *
115 cs_paramedmem_coupling_create(const char *app1_name,
116  const char *app2_name,
117  const char *cpl_name);
118 
119 /*----------------------------------------------------------------------------*/
135 /*----------------------------------------------------------------------------*/
136 
137 cs_paramedmem_coupling_t *
138 cs_paramedmem_coupling_create_uncoupled(const char *cpl_name);
139 
140 /*----------------------------------------------------------------------------*/
146 /*----------------------------------------------------------------------------*/
147 
148 void
149 cs_paramedmem_coupling_destroy(cs_paramedmem_coupling_t *c);
150 
151 /*----------------------------------------------------------------------------*/
155 /*----------------------------------------------------------------------------*/
156 
157 void
159 
160 /*----------------------------------------------------------------------------*/
168 /*----------------------------------------------------------------------------*/
169 
170 void
171 cs_paramedmem_add_mesh_from_criteria(cs_paramedmem_coupling_t *c,
172  const char *sel_crit,
173  int elt_dim);
174 
175 /*----------------------------------------------------------------------------*/
182 /*----------------------------------------------------------------------------*/
183 
184 void
185 cs_paramedmem_add_mesh_from_zone(cs_paramedmem_coupling_t *c,
186  const cs_zone_t *zone);
187 
188 /*----------------------------------------------------------------------------*/
197 /*----------------------------------------------------------------------------*/
198 
199 void
200 cs_paramedmem_add_mesh_from_ids(cs_paramedmem_coupling_t *c,
201  cs_lnum_t n_elts,
202  const cs_lnum_t elt_ids[],
203  int elt_dim);
204 
205 /*----------------------------------------------------------------------------*/
211 /*----------------------------------------------------------------------------*/
212 
213 int
215 
216 /*----------------------------------------------------------------------------*/
224 /*----------------------------------------------------------------------------*/
225 
226 cs_lnum_t
227 cs_paramedmem_mesh_get_n_elts(const cs_paramedmem_coupling_t *coupling);
228 
229 /*----------------------------------------------------------------------------*/
237 /*----------------------------------------------------------------------------*/
238 
239 const cs_lnum_t *
240 cs_paramedmem_mesh_get_elt_list(const cs_paramedmem_coupling_t *coupling);
241 
242 /*----------------------------------------------------------------------------*/
250 /*----------------------------------------------------------------------------*/
251 
252 cs_lnum_t
253 cs_paramedmem_mesh_get_n_vertices(const cs_paramedmem_coupling_t *coupling);
254 
255 /*----------------------------------------------------------------------------*/
263 /*----------------------------------------------------------------------------*/
264 
265 const cs_lnum_t *
266 cs_paramedmem_mesh_get_vertex_list(const cs_paramedmem_coupling_t *coupling);
267 
268 /*----------------------------------------------------------------------------*/
281 /*----------------------------------------------------------------------------*/
282 
283 int
284 cs_paramedmem_def_coupled_field(cs_paramedmem_coupling_t *c,
285  const char *name,
286  int dim,
287  cs_medcpl_field_nature_t field_nature,
288  cs_medcpl_space_discr_t space_discr,
289  cs_medcpl_time_discr_t time_discr);
290 
291 /*----------------------------------------------------------------------------*/
302 /*----------------------------------------------------------------------------*/
303 
304 int
305 cs_paramedmem_def_coupled_field_from_cs_field(cs_paramedmem_coupling_t *c,
306  cs_field_t *f,
309 
310 /*----------------------------------------------------------------------------*/
320 /*----------------------------------------------------------------------------*/
321 
322 void
323 cs_paramedmem_field_export(cs_paramedmem_coupling_t *c,
324  const char *name,
325  const double values[]);
326 
327 /*----------------------------------------------------------------------------*/
340 /*----------------------------------------------------------------------------*/
341 
342 void
343 cs_paramedmem_field_export_l(cs_paramedmem_coupling_t *c,
344  const char *name,
345  const double values[]);
346 
347 /*----------------------------------------------------------------------------*/
356 /*----------------------------------------------------------------------------*/
357 
358 void
359 cs_paramedmem_field_import(cs_paramedmem_coupling_t *c,
360  const char *name,
361  double values[]);
362 
363 /*----------------------------------------------------------------------------*/
376 /*----------------------------------------------------------------------------*/
377 
378 void
379 cs_paramedmem_field_import_l(cs_paramedmem_coupling_t *c,
380  const char *name,
381  double values[]);
382 
383 /*----------------------------------------------------------------------------*/
389 /*----------------------------------------------------------------------------*/
390 
391 void
392 cs_paramedmem_sync_dec(cs_paramedmem_coupling_t *c);
393 
394 /*----------------------------------------------------------------------------*/
400 /*----------------------------------------------------------------------------*/
401 
402 void
403 cs_paramedmem_send_data(cs_paramedmem_coupling_t *c);
404 
405 /*----------------------------------------------------------------------------*/
411 /*----------------------------------------------------------------------------*/
412 
413 void
414 cs_paramedmem_recv_data(cs_paramedmem_coupling_t *c);
415 
416 /*----------------------------------------------------------------------------*/
423 /*----------------------------------------------------------------------------*/
424 
425 void
426 cs_paramedmem_attach_field_by_id(cs_paramedmem_coupling_t *c,
427  int field_id);
428 
429 /*----------------------------------------------------------------------------*/
436 /*----------------------------------------------------------------------------*/
437 
438 void
439 cs_paramedmem_attach_field_by_name(cs_paramedmem_coupling_t *c,
440  const char *name);
441 
442 /*----------------------------------------------------------------------------*/
451 /*----------------------------------------------------------------------------*/
452 
453 void
454 cs_paramedmem_send_field_vals(cs_paramedmem_coupling_t *c,
455  const char *name,
456  const double *vals);
457 
458 /*----------------------------------------------------------------------------*/
466 /*----------------------------------------------------------------------------*/
467 
468 void
469 cs_paramedmem_recv_field_vals(cs_paramedmem_coupling_t *c,
470  const char *name,
471  double *vals);
472 
473 /*----------------------------------------------------------------------------*/
477 /*----------------------------------------------------------------------------*/
478 
479 void
481 
482 /*----------------------------------------------------------------------------*/
486 /*----------------------------------------------------------------------------*/
487 
488 void
490 
491 /*----------------------------------------------------------------------------*/
495 /*----------------------------------------------------------------------------*/
496 
497 void
499 
500 /*----------------------------------------------------------------------------*/
501 
503 
504 #endif /* __CS_PARAMEDMEM_HXX__ */
#define BEGIN_C_DECLS
Definition: cs_defs.h:514
#define END_C_DECLS
Definition: cs_defs.h:515
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:313
void cs_paramedmem_coupling_destroy(cs_paramedmem_coupling_t *c)
Destroy a given ParaMEDMEM coupling structure.
Definition: cs_paramedmem_coupling.cxx:537
void cs_paramedmem_add_mesh_from_criteria(cs_paramedmem_coupling_t *c, const char *sel_crit, int elt_dim)
Define coupled mesh based on a selection criteria.
Definition: cs_paramedmem_coupling.cxx:596
void cs_paramedmem_coupling_define_mesh_fields(void)
initialize coupled mesh and fields based on user functions
Definition: cs_paramedmem_coupling.cxx:1613
void cs_paramedmem_field_export_l(cs_paramedmem_coupling_t *c, const char *name, const double values[])
Assign values based on mesh location corresponding to coupled elements (and associated ParaMESH) to a...
Definition: cs_paramedmem_coupling.cxx:1127
cs_paramedmem_coupling_t * cs_paramedmem_coupling_create(const char *app1_name, const char *app2_name, const char *cpl_name)
Create a new ParaMEDMEM coupling.
Definition: cs_paramedmem_coupling.cxx:400
cs_paramedmem_coupling_t * cs_paramedmem_coupling_create_uncoupled(const char *cpl_name)
Create a new ParaMEDMEM handler structure with no actual coupling.
Definition: cs_paramedmem_coupling.cxx:502
cs_medcpl_field_nature_t
Definition: cs_paramedmem_coupling.h:62
@ CS_MEDCPL_FIELD_EXT_CONSERVATION
Definition: cs_paramedmem_coupling.h:65
@ CS_MEDCPL_FIELD_EXT_MAXIMUM
Definition: cs_paramedmem_coupling.h:66
@ CS_MEDCPL_FIELD_INT_CONSERVATION
Definition: cs_paramedmem_coupling.h:63
@ CS_MEDCPL_FIELD_INT_MAXIMUM
Definition: cs_paramedmem_coupling.h:64
@ CS_MEDCPL_FIELD_N_NATURE
Definition: cs_paramedmem_coupling.h:67
void cs_paramedmem_send_data(cs_paramedmem_coupling_t *c)
Send values of field attached to DEC.
Definition: cs_paramedmem_coupling.cxx:1338
void cs_paramedmem_attach_field_by_name(cs_paramedmem_coupling_t *c, const char *name)
Attach a field to InterpKernelDEC for send operation using its name.
Definition: cs_paramedmem_coupling.cxx:1420
int cs_paramedmem_def_coupled_field(cs_paramedmem_coupling_t *c, const char *name, int dim, cs_medcpl_field_nature_t field_nature, cs_medcpl_space_discr_t space_discr, cs_medcpl_time_discr_t time_discr)
Define a coupled field.
Definition: cs_paramedmem_coupling.cxx:867
cs_lnum_t cs_paramedmem_mesh_get_n_vertices(const cs_paramedmem_coupling_t *coupling)
Get number of vertices of coupled mesh.
Definition: cs_paramedmem_coupling.cxx:799
void cs_paramedmem_add_mesh_from_zone(cs_paramedmem_coupling_t *c, const cs_zone_t *zone)
Define coupled mesh based on a cs_zone_t pointer.
Definition: cs_paramedmem_coupling.cxx:627
int cs_paramedmem_get_number_of_couplings(void)
Get number of defined couplings.
Definition: cs_paramedmem_coupling.cxx:707
void cs_paramedmem_attach_field_by_id(cs_paramedmem_coupling_t *c, int field_id)
Attach a field to InterpKernelDEC for send operation using its index.
Definition: cs_paramedmem_coupling.cxx:1391
cs_paramedmem_coupling_t * cs_paramedmem_coupling_by_name(const char *name)
Retrieve coupling struct pointer by name.
Definition: cs_paramedmem_coupling.cxx:360
cs_lnum_t cs_paramedmem_mesh_get_n_elts(const cs_paramedmem_coupling_t *coupling)
Get number of elements of coupled mesh.
Definition: cs_paramedmem_coupling.cxx:737
void cs_paramedmem_field_import(cs_paramedmem_coupling_t *c, const char *name, double values[])
Copy values from associated ParaFIELD object to array defined parent mesh location.
Definition: cs_paramedmem_coupling.cxx:1185
void cs_paramedmem_coupling_all_finalize(void)
Destroy all coupling structures.
Definition: cs_paramedmem_coupling.cxx:575
cs_paramedmem_coupling_t * cs_paramedmem_coupling_by_id(int cpl_id)
Retrieve coupling struct pointer by id.
Definition: cs_paramedmem_coupling.cxx:325
void cs_paramedmem_coupling_all_init(void)
initialize couplings based on user functions
Definition: cs_paramedmem_coupling.cxx:1601
cs_medcpl_time_discr_t
Definition: cs_paramedmem_coupling.h:56
@ CS_MEDCPL_NO_TIME
Definition: cs_paramedmem_coupling.h:57
@ CS_MEDCPL_ONE_TIME
Definition: cs_paramedmem_coupling.h:58
@ CS_MEDCPL_LINEAR_TIME
Definition: cs_paramedmem_coupling.h:59
cs_medcpl_space_discr_t
Definition: cs_paramedmem_coupling.h:51
@ CS_MEDCPL_ON_NODES
Definition: cs_paramedmem_coupling.h:53
@ CS_MEDCPL_ON_CELLS
Definition: cs_paramedmem_coupling.h:52
void cs_paramedmem_sync_dec(cs_paramedmem_coupling_t *c)
Sync the coupling's InterpKernelDEC.
Definition: cs_paramedmem_coupling.cxx:1309
void cs_paramedmem_send_field_vals(cs_paramedmem_coupling_t *c, const char *name, const double *vals)
Send values of a field. If vals pointer is non-null, values are updated before send.
Definition: cs_paramedmem_coupling.cxx:1486
const cs_lnum_t * cs_paramedmem_mesh_get_vertex_list(const cs_paramedmem_coupling_t *coupling)
Get indirection list for vertices in coupled mesh.
Definition: cs_paramedmem_coupling.cxx:831
void cs_paramedmem_recv_data(cs_paramedmem_coupling_t *c)
Recieve values of field attached to DEC.
Definition: cs_paramedmem_coupling.cxx:1364
void cs_paramedmem_add_mesh_from_ids(cs_paramedmem_coupling_t *c, cs_lnum_t n_elts, const cs_lnum_t elt_ids[], int elt_dim)
Define coupled mesh based on a cs_zone_t pointer.
Definition: cs_paramedmem_coupling.cxx:675
int cs_paramedmem_def_coupled_field_from_cs_field(cs_paramedmem_coupling_t *c, cs_field_t *f, cs_medcpl_field_nature_t fn, cs_medcpl_time_discr_t td)
Define a coupled field based on a cs_field_t pointer.
Definition: cs_paramedmem_coupling.cxx:997
void cs_paramedmem_field_import_l(cs_paramedmem_coupling_t *c, const char *name, double values[])
Copy values from associated ParaFIELD structure to array defined on mesh location corresponding to co...
Definition: cs_paramedmem_coupling.cxx:1257
void cs_paramedmem_field_export(cs_paramedmem_coupling_t *c, const char *name, const double values[])
Assign values based on parent mesh location to associated ParaFIELD objects.
Definition: cs_paramedmem_coupling.cxx:1053
void cs_paramedmem_recv_field_vals(cs_paramedmem_coupling_t *c, const char *name, double *vals)
Recieve values of a field.
Definition: cs_paramedmem_coupling.cxx:1523
void cs_paramedmem_coupling_log_setup(void)
Log ParaMEDMEM coupling setup information.
Definition: cs_paramedmem_coupling.cxx:1555
const cs_lnum_t * cs_paramedmem_mesh_get_elt_list(const cs_paramedmem_coupling_t *coupling)
Get indirection list for elements in coupled mesh.
Definition: cs_paramedmem_coupling.cxx:768
double precision, dimension(ncharm), save fn
Definition: cs_coal_incl.f90:42
Field descriptor.
Definition: cs_field.h:131
Definition: cs_zone.h:55