8.2
general documentation
Loading...
Searching...
No Matches
cs_internal_coupling.h
Go to the documentation of this file.
1#ifndef __CS_INTERNAL_COUPLING_H__
2#define __CS_INTERNAL_COUPLING_H__
3
4/*============================================================================
5 * Internal coupling: coupling for one instance of code_saturne
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/*----------------------------------------------------------------------------
31 * PLE library headers
32 *----------------------------------------------------------------------------*/
33
34#include <ple_locator.h>
35
36/*----------------------------------------------------------------------------
37 * Local headers
38 *----------------------------------------------------------------------------*/
39
40#include "cs_defs.h"
41
42#include "cs_base.h"
43#include "cs_field.h"
44#include "cs_matrix_assembler.h"
45#include "cs_mesh.h"
46#include "cs_mesh_quantities.h"
47#include "cs_parameters.h"
48
49/*----------------------------------------------------------------------------*/
50
52
53/*=============================================================================
54 * Macro definitions
55 *============================================================================*/
56
57/*============================================================================
58 * Type definitions
59 *============================================================================*/
60
61/* Internal coupling structure definition */
62
63typedef struct {
64
65 /* Id */
66 int id;
67
68 /* Locator + tag for exchanging variables */
69 ple_locator_t *locator;
70 int *c_tag;
71
72 /* Selection criteria for coupled domains */
75
78
79 /* Associated zone ids */
80
83
84 cs_lnum_t n_local; /* Number of faces */
85 cs_lnum_t *faces_local; /* Coupling boundary faces, numbered 0..n-1 */
86
87 cs_lnum_t n_distant; /* Number of faces in faces_distant */
88 cs_lnum_t *faces_distant; /* Distant boundary faces associated with locator */
89
90 /* Face i is coupled in this entity if coupled_faces[i] = true */
92
93 /* Geometrical weights around coupling interface */
95
96 /* IJ vectors */
98
99 /* OF vectors */
101
103
104/*============================================================================
105 * Public function prototypes
106 *============================================================================*/
107
108/*----------------------------------------------------------------------------*/
114/*----------------------------------------------------------------------------*/
115
116int
118
119/*----------------------------------------------------------------------------*/
128/*----------------------------------------------------------------------------*/
129
130void
131cs_internal_coupling_add(const char criteria_cells[],
132 const char criteria_faces[]);
133
134/*----------------------------------------------------------------------------*/
141/*----------------------------------------------------------------------------*/
142
143void
144cs_internal_coupling_add_volume(const char criteria_cells[]);
145
146/*----------------------------------------------------------------------------*/
153/*----------------------------------------------------------------------------*/
154
155void
157
158/*----------------------------------------------------------------------------*/
166/*----------------------------------------------------------------------------*/
167
168void
170 const int zone_ids[]);
171
172/*----------------------------------------------------------------------------*/
188/*----------------------------------------------------------------------------*/
189
190void
192 const char *interior_name,
193 const char *exterior_name);
194
195/*----------------------------------------------------------------------------*/
201/*----------------------------------------------------------------------------*/
202
203void
204cs_internal_coupling_bcs(int bc_type[]);
205
206/*----------------------------------------------------------------------------*/
210/*----------------------------------------------------------------------------*/
211
212void
214
215/*----------------------------------------------------------------------------*/
223/*----------------------------------------------------------------------------*/
224
226cs_internal_coupling_by_id(int coupling_id);
227
228/*----------------------------------------------------------------------------*/
238/*----------------------------------------------------------------------------*/
239
240void
242 int stride,
243 cs_real_t distant[],
244 cs_real_t local[]);
245
246/*----------------------------------------------------------------------------*/
255/*----------------------------------------------------------------------------*/
256
257void
259 int stride,
260 const cs_real_t tab[],
261 cs_real_t local[]);
262
263/*----------------------------------------------------------------------------*/
272/*----------------------------------------------------------------------------*/
273
274void
276 int stride,
277 const cs_real_t tab[],
278 cs_real_t local[]);
279
280/*----------------------------------------------------------------------------
281 * Modify iterative COCG matrix to include internal coupling
282 *
283 * parameters:
284 * cpl <-- pointer to coupling entity
285 * cocg <-> cocg matrix modified
286 *----------------------------------------------------------------------------*/
287
288void
290 cs_real_33_t cocg[]);
291
292/*----------------------------------------------------------------------------*/
296/*----------------------------------------------------------------------------*/
297
298void
300
301/*----------------------------------------------------------------------------*/
305/*----------------------------------------------------------------------------*/
306
307void
309
310/*----------------------------------------------------------------------------*/
321/*----------------------------------------------------------------------------*/
322
323void
325 const cs_internal_coupling_t *cpl,
326 const cs_real_t c_weight[],
327 cs_real_3_t *restrict grad,
328 const cs_real_t pvar[],
329 cs_real_3_t rhs[]);
330
331/*----------------------------------------------------------------------------*/
342/*----------------------------------------------------------------------------*/
343
344void
346 const cs_internal_coupling_t *cpl,
347 const cs_real_t c_weight[],
349 const cs_real_3_t pvar[],
350 cs_real_33_t rhs[]);
351
352/*----------------------------------------------------------------------------*/
363/*----------------------------------------------------------------------------*/
364
365void
367 const cs_internal_coupling_t *cpl,
368 const cs_real_t c_weight[],
370 const cs_real_6_t pvar[],
371 cs_real_63_t rhs[]);
372
373/*----------------------------------------------------------------------------*/
382/*----------------------------------------------------------------------------*/
383
384void
386 const cs_internal_coupling_t *cpl,
387 cs_real_3_t *restrict r_grad,
388 cs_real_3_t grad[]);
389
390/*----------------------------------------------------------------------------*/
399/*----------------------------------------------------------------------------*/
400
401void
403 const cs_internal_coupling_t *cpl,
404 cs_real_33_t *restrict r_grad,
405 cs_real_33_t grad[]);
406
407/*----------------------------------------------------------------------------*/
416/*----------------------------------------------------------------------------*/
417
418void
420 const cs_internal_coupling_t *cpl,
421 cs_real_63_t *restrict r_grad,
422 cs_real_63_t grad[]);
423
424/*----------------------------------------------------------------------------*/
438/*----------------------------------------------------------------------------*/
439
440void
442 const cs_internal_coupling_t *cpl,
443 cs_halo_type_t halo_type,
444 int w_stride,
445 double clip_coeff,
446 const cs_real_t *var,
447 const cs_real_t *c_weight);
448
449/*----------------------------------------------------------------------------*/
462/*----------------------------------------------------------------------------*/
463
464void
466 const cs_internal_coupling_t *cpl,
467 cs_halo_type_t halo_type,
468 double clip_coeff,
469 const cs_real_3_t *var,
470 const cs_real_t *c_weight);
471
472/*----------------------------------------------------------------------------
473 * Addition to matrix-vector product in case of internal coupling.
474 *
475 * parameters:
476 * exclude_diag <-- extra diagonal flag
477 * f <-- associated field pointer
478 * x <-- vector x in m * x = y
479 * y <-> vector y in m * x = y
480 *----------------------------------------------------------------------------*/
481
482void
484 const cs_field_t *f,
485 const cs_real_t *restrict x,
487
488/*----------------------------------------------------------------------------
489 * Add coupling term coordinates to matrix assembler.
490 *
491 * parameters:
492 * coupling_id
493 * r_g_id <-- global row ids (per cell)
494 * ma <-> matrix assembler
495 *----------------------------------------------------------------------------*/
496
497void
499 const cs_gnum_t *r_g_id,
501
502/*----------------------------------------------------------------------------
503 * Add coupling terms to matrix values assembly.
504 *
505 * parameters:
506 * f <-- associated field
507 * db_size <-- diagonal block size
508 * eb_size <-- extra-diagonal block size
509 * r_g_id <-- global row ids (per cell)
510 * mav <-> matrix values assembler
511 *----------------------------------------------------------------------------*/
512
513void
515 cs_lnum_t db_size,
516 cs_lnum_t eb_size,
517 const cs_gnum_t r_g_id[],
519
520/*----------------------------------------------------------------------------
521 * Return pointers to coupling components
522 *
523 * parameters:
524 * cpl <-- pointer to coupling entity
525 * n_local --> NULL or pointer to component n_local
526 * faces_local --> NULL or pointer to component faces_local
527 * n_distant --> NULL or pointer to component n_distant
528 * faces_distant --> NULL or pointer to component faces_distant
529 *----------------------------------------------------------------------------*/
530
531void
533 cs_lnum_t *n_local,
534 const cs_lnum_t *faces_local[],
535 cs_lnum_t *n_distant,
536 const cs_lnum_t *faces_distant[]);
537
538/*----------------------------------------------------------------------------
539 * Log information about a given internal coupling entity
540 *
541 * parameters:
542 * cpl <-- pointer to coupling entity
543 *----------------------------------------------------------------------------*/
544
545void
547
548/*----------------------------------------------------------------------------
549 * Print informations about all coupling entities
550 *
551 * parameters:
552 * cpl <-- pointer to coupling entity
553 *----------------------------------------------------------------------------*/
554
555void
557
558/*----------------------------------------------------------------------------
559 * Add preprocessing operations required by coupling volume using given
560 * criteria.
561 *
562 * The volume is separated from the rest of the domain with inserted
563 * boundaries.
564 *
565 * parameters:
566 * mesh <-> pointer to mesh structure to modify
567 *----------------------------------------------------------------------------*/
568
569void
571
572/*----------------------------------------------------------------------------
573 * Define face to face mappings for internal couplings.
574 *
575 * parameters:
576 * mesh <-> pointer to mesh structure to modify
577 *----------------------------------------------------------------------------*/
578
579void
581
582/*----------------------------------------------------------------------------
583 * Define coupling entity using given criteria.
584 *
585 * parameters:
586 * f_id <-- id of the field
587 *----------------------------------------------------------------------------*/
588
589void
591
592/*----------------------------------------------------------------------------*/
602/*----------------------------------------------------------------------------*/
603
604void
606 const cs_internal_coupling_t *cpl,
607 const cs_real_t c_weight[],
608 const cs_real_t pvar[],
609 cs_real_3_t *restrict grad);
610
611/*----------------------------------------------------------------------------*/
621/*----------------------------------------------------------------------------*/
622
623void
625 const cs_internal_coupling_t *cpl,
626 const cs_real_t c_weight[],
627 const cs_real_3_t pvar[],
628 cs_real_33_t *restrict grad);
629
630
631/*----------------------------------------------------------------------------*/
641/*----------------------------------------------------------------------------*/
642
643void
645 const cs_internal_coupling_t *cpl,
646 const cs_real_t c_weight[],
647 const cs_real_6_t pvar[],
648 cs_real_63_t *restrict grad);
649
650/*----------------------------------------------------------------------------*/
658/*----------------------------------------------------------------------------*/
659
660void
662 const cs_real_t *hbnd);
663
664/*----------------------------------------------------------------------------*/
674/*----------------------------------------------------------------------------*/
675
676void
677cs_ic_field_dist_data_by_face_id(const int field_id,
678 int stride,
679 const cs_real_t tab_distant[],
680 cs_real_t tab_local[]);
681
682/*----------------------------------------------------------------------------*/
683
685
686#endif /* __CS_INTERNAL_COUPLING_H__ */
#define restrict
Definition cs_defs.h:141
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition cs_defs.h:356
#define BEGIN_C_DECLS
Definition cs_defs.h:528
double cs_real_t
Floating-point value.
Definition cs_defs.h:332
cs_real_t cs_real_6_t[6]
vector of 6 floating-point values
Definition cs_defs.h:349
#define END_C_DECLS
Definition cs_defs.h:529
cs_real_t cs_real_63_t[6][3]
Definition cs_defs.h:364
int cs_lnum_t
local mesh entity id
Definition cs_defs.h:325
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition cs_defs.h:347
cs_halo_type_t
Definition cs_halo.h:56
void cs_internal_coupling_reconstruct_vector_gradient(const cs_internal_coupling_t *cpl, cs_real_33_t *restrict r_grad, cs_real_33_t grad[])
Add internal coupling contribution for reconstruction of the gradient of a vector.
Definition cs_internal_coupling.c:1747
void cs_internal_coupling_preprocess(cs_mesh_t *mesh)
Definition cs_internal_coupling.c:2773
void cs_internal_coupling_matrix_add_ids(int coupling_id, const cs_gnum_t *r_g_id, cs_matrix_assembler_t *ma)
Definition cs_internal_coupling.c:2427
void cs_internal_coupling_log(const cs_internal_coupling_t *cpl)
Definition cs_internal_coupling.c:2700
void cs_internal_coupling_add_volume_zone(const cs_zone_t *z)
Define coupling volume using a cs_zone_t. Then, this volume will be separated from the rest of the do...
Definition cs_internal_coupling.c:999
void cs_internal_coupling_add_boundary_groups(cs_internal_coupling_t *cpl, const char *interior_name, const char *exterior_name)
Define internal coupling volume boundary group names.
Definition cs_internal_coupling.c:1062
void cs_internal_coupling_reconstruct_scalar_gradient(const cs_internal_coupling_t *cpl, cs_real_3_t *restrict r_grad, cs_real_3_t grad[])
Add internal coupling contribution for reconstruction of the gradient of a scalar.
void cs_internal_coupling_initialize(void)
Initialize internal coupling related structures.
Definition cs_internal_coupling.c:2683
void cs_internal_coupling_initialize_scalar_gradient(const cs_internal_coupling_t *cpl, const cs_real_t c_weight[], const cs_real_t pvar[], cs_real_3_t *restrict grad)
Add contribution from coupled faces (internal coupling) to initialisation for iterative scalar gradie...
Definition cs_internal_coupling.c:1117
void cs_internal_coupling_exchange_var(const cs_internal_coupling_t *cpl, int stride, cs_real_t distant[], cs_real_t local[])
Exchange quantities from distant to local (update local using distant).
Definition cs_internal_coupling.c:1946
void cs_internal_coupling_finalize(void)
Destruction of all internal coupling related structures.
Definition cs_internal_coupling.c:1901
void cs_internal_coupling_initialize_tensor_gradient(const cs_internal_coupling_t *cpl, const cs_real_t c_weight[], const cs_real_6_t pvar[], cs_real_63_t *restrict grad)
Add contribution from coupled faces (internal coupling) to initialisation for iterative symmetric ten...
Definition cs_internal_coupling.c:1284
void cs_internal_coupling_coupled_faces(const cs_internal_coupling_t *cpl, cs_lnum_t *n_local, const cs_lnum_t *faces_local[], cs_lnum_t *n_distant, const cs_lnum_t *faces_distant[])
Definition cs_internal_coupling.c:2061
void cs_internal_coupling_iterative_scalar_gradient(const cs_internal_coupling_t *cpl, const cs_real_t c_weight[], cs_real_3_t *restrict grad, const cs_real_t pvar[], cs_real_3_t rhs[])
Add internal coupling rhs contribution for iterative gradient calculation.
Definition cs_internal_coupling.c:1372
void cs_internal_coupling_reconstruct_tensor_gradient(const cs_internal_coupling_t *cpl, cs_real_63_t *restrict r_grad, cs_real_63_t grad[])
Add internal coupling contribution for reconstruction of the gradient of a symmetric tensor.
Definition cs_internal_coupling.c:1808
void cs_internal_coupling_bcs(int bc_type[])
Impose wall BCs to internal coupled faces if not yet defined.
Definition cs_internal_coupling.c:1086
void cs_internal_coupling_matrix_add_values(const cs_field_t *f, cs_lnum_t db_size, cs_lnum_t eb_size, const cs_gnum_t r_g_id[], cs_matrix_assembler_values_t *mav)
Definition cs_internal_coupling.c:2500
void cs_internal_coupling_add_volume_zones(int n_zones, const int zone_ids[])
Define coupling volume using given cs_zone_t. Then, this volume will be separated from the rest of th...
Definition cs_internal_coupling.c:1017
void cs_internal_coupling_it_cocg_contribution(const cs_internal_coupling_t *cpl, cs_real_33_t cocg[])
Definition cs_internal_coupling.c:1866
int cs_internal_coupling_n_couplings(void)
Return number of defined internal couplings.
Definition cs_internal_coupling.c:923
void cs_ic_field_dist_data_by_face_id(const int field_id, int stride, const cs_real_t tab_distant[], cs_real_t tab_local[])
Get distant data using face id at all coupling faces for a given field id.
Definition cs_internal_coupling.c:2886
void cs_internal_coupling_exchange_by_cell_id(const cs_internal_coupling_t *cpl, int stride, const cs_real_t tab[], cs_real_t local[])
Exchange variable between groups using cell id.
Definition cs_internal_coupling.c:1972
void cs_internal_coupling_iterative_vector_gradient(const cs_internal_coupling_t *cpl, const cs_real_t c_weight[], cs_real_33_t *restrict grad, const cs_real_3_t pvar[], cs_real_33_t rhs[])
Add internal coupling rhs contribution for iterative vector gradient calculation.
Definition cs_internal_coupling.c:1476
void cs_internal_coupling_exchange_by_face_id(const cs_internal_coupling_t *cpl, int stride, const cs_real_t tab[], cs_real_t local[])
Exchange variable between groups using face id.
Definition cs_internal_coupling.c:2021
cs_internal_coupling_t * cs_internal_coupling_by_id(int coupling_id)
Return the coupling associated with a given coupling_id.
Definition cs_internal_coupling.c:1923
void cs_internal_coupling_map(cs_mesh_t *mesh)
Definition cs_internal_coupling.c:2794
void cs_internal_coupling_update_bc_coeff_s(const cs_field_bc_coeffs_t *bc_coeffs, const cs_internal_coupling_t *cpl, cs_halo_type_t halo_type, int w_stride, double clip_coeff, const cs_real_t *var, const cs_real_t *c_weight)
Compute scalar boundary condition coefficients for internal coupling.
Definition cs_internal_coupling.c:2093
void cs_internal_coupling_add_volume(const char criteria_cells[])
Define coupling volume using given criteria. Then, this volume will be separated from the rest of the...
Definition cs_internal_coupling.c:968
void cs_ic_field_set_exchcoeff(const cs_field_t *f, const cs_real_t *hbnd)
Update internal coupling coefficients of the field of the given id using given boundary exchange coef...
Definition cs_internal_coupling.c:2840
void cs_internal_coupling_dump(void)
Definition cs_internal_coupling.c:2746
void cs_internal_coupling_spmv_contribution(bool exclude_diag, const cs_field_t *f, const cs_real_t *restrict x, cs_real_t *restrict y)
Definition cs_internal_coupling.c:2325
void cs_internal_coupling_update_bc_coeff_v(const cs_field_bc_coeffs_t *bc_coeffs_v, const cs_internal_coupling_t *cpl, cs_halo_type_t halo_type, double clip_coeff, const cs_real_3_t *var, const cs_real_t *c_weight)
Update vector boundary condition coefficients for internal coupling.
Definition cs_internal_coupling.c:2210
void cs_internal_coupling_add_entity(int f_id)
Definition cs_internal_coupling.c:2814
void cs_internal_coupling_iterative_tensor_gradient(const cs_internal_coupling_t *cpl, const cs_real_t c_weight[], cs_real_63_t *restrict grad, const cs_real_6_t pvar[], cs_real_63_t rhs[])
Add internal coupling rhs contribution for iterative tensor gradient calculation.
Definition cs_internal_coupling.c:1584
void cs_internal_coupling_setup(void)
Setup internal coupling related parameters.
Definition cs_internal_coupling.c:2630
void cs_internal_coupling_add(const char criteria_cells[], const char criteria_faces[])
Define coupling volume using given selection criteria.
Definition cs_internal_coupling.c:940
void cs_internal_coupling_initialize_vector_gradient(const cs_internal_coupling_t *cpl, const cs_real_t c_weight[], const cs_real_3_t pvar[], cs_real_33_t *restrict grad)
Add contribution from coupled faces (internal coupling) to initialisation for iterative vector gradie...
Definition cs_internal_coupling.c:1198
struct _cs_matrix_assembler_t cs_matrix_assembler_t
Definition cs_matrix_assembler.h:61
struct _cs_matrix_assembler_values_t cs_matrix_assembler_values_t
Definition cs_matrix_assembler.h:65
Definition mesh.f90:26
Field boundary condition descriptor (for variables)
Definition cs_field.h:104
Field descriptor.
Definition cs_field.h:131
Definition cs_internal_coupling.h:63
ple_locator_t * locator
Definition cs_internal_coupling.h:69
cs_lnum_t * faces_local
Definition cs_internal_coupling.h:85
cs_lnum_t * faces_distant
Definition cs_internal_coupling.h:88
int n_volume_zones
Definition cs_internal_coupling.h:81
bool * coupled_faces
Definition cs_internal_coupling.h:91
int * c_tag
Definition cs_internal_coupling.h:70
int id
Definition cs_internal_coupling.h:66
char * interior_faces_group_name
Definition cs_internal_coupling.h:76
cs_real_3_t * ci_cj_vect
Definition cs_internal_coupling.h:97
char * exterior_faces_group_name
Definition cs_internal_coupling.h:77
char * cells_criteria
Definition cs_internal_coupling.h:73
cs_real_3_t * offset_vect
Definition cs_internal_coupling.h:100
cs_lnum_t n_distant
Definition cs_internal_coupling.h:87
cs_lnum_t n_local
Definition cs_internal_coupling.h:84
char * faces_criteria
Definition cs_internal_coupling.h:74
cs_real_t * g_weight
Definition cs_internal_coupling.h:94
int * volume_zone_ids
Definition cs_internal_coupling.h:82
Definition cs_mesh.h:85
Definition cs_zone.h:55