src/alge/cs_gradient_perio.h Source File

| programmer's documentation

- Main Page
- Related Pages
- Modules
- Data Structures
- Files

- File List
- Globals

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cs_gradient_perio.h
Go to the documentation of this file.
1 #ifndef __CS_GRADIENT_PERIO_H__
2 #define __CS_GRADIENT_PERIO_H__
3
4 /*============================================================================
5 * Gradient reconstruction.
6 *============================================================================*/
7
8 /*
9 This file is part of Code_Saturne, a general-purpose CFD tool.
10
11 Copyright (C) 1998-2013 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_field.h"
36
37 /*----------------------------------------------------------------------------*/
38
39 BEGIN_C_DECLS
40
41 /*=============================================================================
42 * Local Macro definitions
43 *============================================================================*/
44
45 /*============================================================================
46 * Type definition
47 *============================================================================*/
48
49 /*============================================================================
50 * Global variables
51 *============================================================================*/
52
53 /*============================================================================
54 * Public function prototypes for Fortran API
55 *============================================================================*/
56
57 /*----------------------------------------------------------------------------
58 * Periodicity management for INIMAS
59 *
60 * If INIMAS is called by NAVSTO :
61 * We assume that gradient on ghost cells given by a rotation is known
62 * and is equal to the velocity one for the previous time step.
63 * If INIMAS is called by DIVRIJ
64 * We assume that (more justifiable than in previous case) gradient on
65 * ghost cells given by rotation is equal to Rij gradient for the previous
66 * time step.
67 *
68 * Fortran Interface:
69 *
70 * subroutine permas
71 * *****************
72 *
73 * integer iappel : -> : indicateur d'appel dans inimas
74 * = 1 si appel au debut
75 * = 2 si appel a la fin
76 * double precision rom(ncelet) : -> : masse volumique aux cellules
77 *
78 * Size of DRDXYZ and WDRDXY = n_ghost_cells*6*3
79 *----------------------------------------------------------------------------*/
80
81 void
82 CS_PROCF (permas, PERMAS)(const cs_int_t *iappel,
83 cs_real_t rom[]);
84
85 /*----------------------------------------------------------------------------
86 * Preparation rotation periodicity for Reynolds stresses.
87 *
88 * Compute an estimation of the velocity gradient.
89 * The gradient is not reconstructed (as we would need a gradient,
90 * thus periodicity). I seems possible to use a least-squares gradient.
91 *
92 * The gradient is then saved in an array representing the ghost cells, then
93 * rotated where necessary to be ready for use (cf. pering).
94 *
95 * Compute cell gradient of vector field.
96 *----------------------------------------------------------------------------*/
97
98 void CS_PROCF (perinr, PERINR)
99 (
100 const cs_int_t *const imrgra, /* <-- gradient computation mode */
101 const cs_int_t *const iwarnp, /* <-- verbosity level */
102 const cs_real_t *const epsrgp, /* <-- precision for iterative gradient
103 calculation */
104 const cs_real_t *const extrap /* <-- extrapolate gradient at boundary */
105 );
106
107 /*----------------------------------------------------------------------------
108 * Process dpdx, dpdy, dpdz buffers in case of rotation on
109 * Reynolds stress tensor.
110 *
111 * We retrieve the gradient given by perinr (phyvar) for the Reynolds
112 * stress tensor in a buffer on ghost cells. then we define
113 * dpdx, dpdy and dpdz gradient (1 -> n_cells_with_ghosts).
114 *
115 * We can't implicitly take into account rotation of a gradient of a tensor
116 * variable because we have to know the all three components.
117 *
118 * We set idimtr to 2 for the Reynolds stress tensor.
119 *
120 * We assume that is correct to treat periodicities implicitly for the other
121 * variables when reconstructing gradients.
122 *
123 * Fortran Interface:
124 *
125 * subroutine pering
126 * *****************
127 *
128 * integer f_id : <-- : field_id
129 * integer tr_dim : --> : 2 for tensor (Rij) in case of
130 * rotation, 0 otherwise
131 * double precision dpdx(ncelet) : <-> : gradient of ivar
132 * double precision dpdy(ncelet) : <-> : " "
133 * double precision dpdz(ncelet) : <-> : " "
134 *
135 * size of _drdxyz and _wdrdxy = n_ghost_cells*6*3
136 *----------------------------------------------------------------------------*/
137
138 void
139 CS_PROCF (pering, PERING)(const cs_int_t *f_id,
140 cs_int_t *tr_dim,
141 cs_real_t dpdx[],
142 cs_real_t dpdy[],
143 cs_real_t dpdz[]);
144
145 /*=============================================================================
146 * Public function prototypes
147 *============================================================================*/
148
149 /*----------------------------------------------------------------------------
150 * Initialize gradient computation API.
151 *----------------------------------------------------------------------------*/
152
153 void
154 cs_gradient_perio_initialize(void);
155
156 /*----------------------------------------------------------------------------
157 * Finalize gradient computation API.
158 *----------------------------------------------------------------------------*/
159
160 void
161 cs_gradient_perio_finalize(void);
162
163 /*----------------------------------------------------------------------------
164 * Update gradient rotational periodicity computation API in case of
165 * mesh modification.
166 *----------------------------------------------------------------------------*/
167
168 void
169 cs_gradient_perio_update_mesh(void);
170
171 /*----------------------------------------------------------------------------
172 * Initialize ghost cell values for Reynolds stress tensor gradient.
173 *
174 * We retrieve the gradient given by perinr (phyvar) for the Reynolds
175 * stress tensor in a buffer on ghost cells. then we define
176 * dpdx, dpdy and dpdz gradient (1 -> n_cells_with_ghosts).
177 *
178 * We can't implicitly take into account rotation of a gradient of a tensor
179 * variable because we have to know all components.
180 *
181 * We set idimtr to 2 for the Reynolds stress tensor.
182 *
183 * We assume that is correct to treat periodicities implicitly for the other
184 * variables when reconstructing gradients.
185 *
186 * parameters:
187 * f <-- pointer to field
188 * tr_dim --> 2 for tensor (Rij) in case of rotation, 0 otherwise
189 * grad <-> gradient of field
190 *----------------------------------------------------------------------------*/
191
192 void
193 cs_gradient_perio_init_rij(const cs_field_t *f,
194 int *tr_dim,
195 cs_real_3_t grad[]);
196
197 /*----------------------------------------------------------------------------*/
217 /*----------------------------------------------------------------------------*/
218
219 void
220 cs_gradient_perio_process_rij(const cs_int_t *f_id,
221 cs_real_3_t grad[]);
222
223 /*----------------------------------------------------------------------------*/
224
225 END_C_DECLS
226
227 #endif /* __CS_GRADIENT_PERIO__ */