programmer's documentation
cs_reco.h
Go to the documentation of this file.
1 #ifndef __CS_RECO_H__
2 #define __CS_RECO_H__
3 
4 /*============================================================================
5  * Routines to handle the reconstruction of fields
6  *============================================================================*/
7 
8 /*
9  This file is part of Code_Saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2018 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 "assert.h"
35 
36 #include "cs_cdo_connect.h"
37 #include "cs_cdo_local.h"
38 #include "cs_cdo_quantities.h"
39 #include "cs_flag.h"
40 
41 /*----------------------------------------------------------------------------*/
42 
44 
45 /*============================================================================
46  * Macro definitions
47  *============================================================================*/
48 
49 /*============================================================================
50  * Type definitions
51  *============================================================================*/
52 
53 /*============================================================================
54  * Inline public function prototypes
55  *============================================================================*/
56 
57 /*----------------------------------------------------------------------------*/
67 /*----------------------------------------------------------------------------*/
68 
69 static inline cs_real_t
71  const cs_real_t *p_v)
72 {
73  cs_real_t p_f = 0.;
74 
75  if (p_v == NULL)
76  return p_f;
77 
78  const cs_quant_t pfq = fm->face;
79 
80  for (short int e = 0; e < fm->n_ef; e++)
81  p_f += (p_v[fm->e2v_ids[2*e]] + p_v[fm->e2v_ids[2*e+1]]) * fm->tef[e];
82  p_f *= 0.5 / pfq.meas;
83 
84  return p_f;
85 }
86 
87 /*----------------------------------------------------------------------------*/
98 /*----------------------------------------------------------------------------*/
99 
100 static inline cs_real_t
102  const cs_real_t *array)
103 {
104  /* Sanity checks */
105  assert(cm != NULL && array != NULL);
107 
108  /* Reconstruct the value at the cell center */
109  cs_real_t pc = 0.;
110  for (short int v = 0; v < cm->n_vc; v++)
111  pc += cm->wvc[v] * array[cm->v_ids[v]];
112 
113  return pc;
114 }
115 
116 /*============================================================================
117  * Public function prototypes
118  *============================================================================*/
119 
120 /*----------------------------------------------------------------------------*/
132 /*----------------------------------------------------------------------------*/
133 
134 void
136  const cs_cdo_quantities_t *quant,
137  const double *dof,
138  double *p_crec[],
139  double *p_frec[]);
140 
141 /*----------------------------------------------------------------------------*/
151 /*----------------------------------------------------------------------------*/
152 
153 void
155  const cs_cdo_quantities_t *quant,
156  const double *array,
157  cs_real_t *val_xc);
158 
159 /*----------------------------------------------------------------------------*/
170 /*----------------------------------------------------------------------------*/
171 
172 void
174  const cs_cdo_quantities_t *quant,
175  const double *array,
176  cs_real_t *val_xc);
177 
178 /*----------------------------------------------------------------------------*/
189 /*----------------------------------------------------------------------------*/
190 
191 void
193  const cs_adjacency_t *c2v,
194  const cs_cdo_quantities_t *quant,
195  const double *array,
196  cs_real_t *val_xc);
197 
198 /*----------------------------------------------------------------------------*/
208 /*----------------------------------------------------------------------------*/
209 
210 void
212  const cs_cdo_quantities_t *quant,
213  const double *val,
214  cs_real_t *reco_val);
215 
216 /*----------------------------------------------------------------------------*/
227 /*----------------------------------------------------------------------------*/
228 
229 void
231  const cs_cdo_connect_t *connect,
232  const cs_cdo_quantities_t *quant,
233  const double *pdi,
234  cs_real_t *pdi_f);
235 
236 /*----------------------------------------------------------------------------*/
248 /*----------------------------------------------------------------------------*/
249 
250 void
252  const cs_adjacency_t *c2e,
253  const cs_cdo_quantities_t *quant,
254  const double *array,
255  cs_real_3_t val_xc);
256 
257 /*----------------------------------------------------------------------------*/
269 /*----------------------------------------------------------------------------*/
270 
271 void
273  const cs_real_t *array,
274  cs_real_3_t val_c);
275 
276 /*----------------------------------------------------------------------------*/
290 /*----------------------------------------------------------------------------*/
291 
292 void
294  short int e,
295  const cs_real_t *array,
296  cs_real_3_t val_pec);
297 
298 /*----------------------------------------------------------------------------*/
308 /*----------------------------------------------------------------------------*/
309 
310 void
312  const cs_adjacency_t *c2e,
313  const cs_cdo_quantities_t *quant,
314  const double *dof,
315  double reco[]);
316 
317 /*----------------------------------------------------------------------------*/
326 /*----------------------------------------------------------------------------*/
327 
328 void
330  const cs_cdo_quantities_t *quant,
331  const double *dof,
332  double *p_ccrec[]);
333 
334 /*----------------------------------------------------------------------------*/
345 /*----------------------------------------------------------------------------*/
346 
347 void
349  const cs_cdo_connect_t *connect,
350  const cs_cdo_quantities_t *quant,
351  const cs_real_t *pdi,
352  cs_real_t val_xc[]);
353 
354 /*----------------------------------------------------------------------------*/
365 /*----------------------------------------------------------------------------*/
366 
367 void
369  const cs_real_t pdi[],
370  cs_real_t *cell_gradient);
371 
372 /*----------------------------------------------------------------------------*/
385 /*----------------------------------------------------------------------------*/
386 
387 cs_real_t
389  const cs_real_t pdi[],
390  const cs_real_t length_xcxp,
391  const cs_real_t unitv_xcxp[],
392  cs_real_t wbuf[]);
393 
394 /*----------------------------------------------------------------------------*/
407 /*----------------------------------------------------------------------------*/
408 
409 void
411  const cs_real_t *pot,
412  cs_cell_builder_t *cb,
413  cs_real_t *vgrd);
414 
415 /*----------------------------------------------------------------------------*/
427 /*----------------------------------------------------------------------------*/
428 
429 void
431  const cs_real_t *pot,
432  cs_cell_builder_t *cb,
433  cs_real_t *cgrd);
434 
435 /*----------------------------------------------------------------------------*/
436 
438 
439 #endif /* __CS_RECO_H__ */
void cs_reco_cw_cgrd_wbs_from_pvc(const cs_cell_mesh_t *cm, const cs_real_t *pot, cs_cell_builder_t *cb, cs_real_t *cgrd)
Compute the mean value of a gradient inside a given primal cell. Use the WBS algo. for approximating the gradient. The computation takes into account a subdivision into tetrahedra of the current cell based on p_{ef,c}.
Definition: cs_reco.c:879
static bool cs_flag_test(cs_flag_t flag_to_check, cs_flag_t reference)
Check if a two flag share the same pattern Return true if the flag to check has at least the pattern ...
Definition: cs_flag.h:165
void cs_reco_ccen_edge_dof(cs_lnum_t cid, const cs_adjacency_t *c2e, const cs_cdo_quantities_t *quant, const double *dof, double reco[])
Reconstruct at the cell center a field of edge-based DoFs.
Definition: cs_reco.c:548
void cs_reco_conf_vtx_dofs(const cs_cdo_connect_t *connect, const cs_cdo_quantities_t *quant, const double *dof, double *p_crec[], double *p_frec[])
Reconstruct at cell centers and face centers a vertex-based field Linear interpolation. If p_crec and/or p_frec are not allocated, this done in this subroutine.
Definition: cs_reco.c:81
double * wvc
Definition: cs_cdo_local.h:183
double * tef
Definition: cs_cdo_local.h:247
Definition: cs_mesh_adjacencies.h:90
#define BEGIN_C_DECLS
Definition: cs_defs.h:462
#define CS_CDO_LOCAL_PVQ
Definition: cs_cdo_local.h:52
double meas
Definition: cs_cdo_quantities.h:88
Set of local quantities and connectivities related to a mesh cell This is a key structure for all cel...
Definition: cs_cdo_local.h:163
Definition: cs_cdo_connect.h:74
void cs_reco_pv_at_cell_center(cs_lnum_t c_id, const cs_adjacency_t *c2v, const cs_cdo_quantities_t *quant, const double *array, cs_real_t *val_xc)
Reconstruct the value at the cell center from an array of values defined on primal vertices...
Definition: cs_reco.c:263
void cs_reco_grad_cell_from_pv(cs_lnum_t c_id, const cs_cdo_connect_t *connect, const cs_cdo_quantities_t *quant, const cs_real_t *pdi, cs_real_t val_xc[])
Reconstruct the value at the cell center of the gradient of a field defined on primal vertices...
Definition: cs_reco.c:632
short int n_ef
Definition: cs_cdo_local.h:244
double cs_real_t
Floating-point value.
Definition: cs_defs.h:297
Definition: cs_cdo_quantities.h:94
cs_lnum_t * v_ids
Definition: cs_cdo_local.h:181
double precision, dimension(:,:,:), allocatable v
Definition: atimbr.f90:114
Definition: cs_field_pointer.h:123
cs_real_t cs_reco_cw_scalar_pv_inside_cell(const cs_cell_mesh_t *cm, const cs_real_t pdi[], const cs_real_t length_xcxp, const cs_real_t unitv_xcxp[], cs_real_t wbuf[])
Reconstruct the value of a scalar potential at a point inside a cell The scalar potential has DoFs lo...
Definition: cs_reco.c:725
void cs_reco_ccen_edge_dofs(const cs_cdo_connect_t *connect, const cs_cdo_quantities_t *quant, const double *dof, double *p_ccrec[])
Reconstruct at each cell center a field of edge-based DoFs.
Definition: cs_reco.c:590
void cs_reco_vect_pv_at_cell_centers(const cs_adjacency_t *c2v, const cs_cdo_quantities_t *quant, const double *array, cs_real_t *val_xc)
Reconstruct the value at all cell centers from an array of values defined on primal vertices...
Definition: cs_reco.c:213
short int * e2v_ids
Definition: cs_cdo_local.h:250
Set of local and temporary buffers useful for building the algebraic system with a cellwise process...
Definition: cs_cdo_local.h:75
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:310
cs_flag_t flag
Definition: cs_cdo_local.h:165
void cs_reco_dfbyc_in_cell(const cs_cell_mesh_t *cm, const cs_real_t *array, cs_real_3_t val_c)
Reconstruct a constant vector inside the cell c. array is scanned thanks to the c2e connectivity...
Definition: cs_reco.c:449
cs_quant_t face
Definition: cs_cdo_local.h:234
static cs_real_t cs_reco_fw_scalar_pv_at_face_center(const cs_face_mesh_t *fm, const cs_real_t *p_v)
Reconstruct the value at the face center from an array of values defined on primal vertices...
Definition: cs_reco.h:70
static cs_real_t cs_reco_cw_scalar_pv_at_cell_center(const cs_cell_mesh_t *cm, const cs_real_t *array)
Reconstruct the value of a scalar potential at the cell center from an array of values defined on pri...
Definition: cs_reco.h:101
Definition: cs_cdo_quantities.h:86
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:293
short int n_vc
Definition: cs_cdo_local.h:180
void cs_reco_dfbyc_at_cell_center(cs_lnum_t c_id, const cs_adjacency_t *c2e, const cs_cdo_quantities_t *quant, const double *array, cs_real_3_t val_xc)
Reconstruct a constant vector at the cell center from an array of values defined on dual faces lying ...
Definition: cs_reco.c:408
#define END_C_DECLS
Definition: cs_defs.h:463
#define CS_CDO_LOCAL_PV
Definition: cs_cdo_local.h:51
void cs_reco_vect_pv_from_pc(const cs_adjacency_t *c2v, const cs_cdo_quantities_t *quant, const double *val, cs_real_t *reco_val)
Reconstruct a vector-valued array at vertices from a vector-valued array at cells.
Definition: cs_reco.c:306
void cs_reco_pf_from_pv(cs_lnum_t f_id, const cs_cdo_connect_t *connect, const cs_cdo_quantities_t *quant, const double *pdi, cs_real_t *pdi_f)
Reconstruct the value at the face center from an array of values defined on primal vertices...
Definition: cs_reco.c:357
void cs_reco_cw_vgrd_wbs_from_pvc(const cs_cell_mesh_t *cm, const cs_real_t *pot, cs_cell_builder_t *cb, cs_real_t *vgrd)
Compute the weighted (by volume) gradient inside a given primal cell for the related vertices...
Definition: cs_reco.c:781
Set of local quantities and connectivities related to a mesh face Structure used to get a better memo...
Definition: cs_cdo_local.h:224
void cs_reco_cw_cell_grad_from_scalar_pv(const cs_cell_mesh_t *cm, const cs_real_t pdi[], cs_real_t *cell_gradient)
Reconstruct the value of a scalar potential at a point inside a cell The scalar potential has DoFs lo...
Definition: cs_reco.c:684
void cs_reco_pv_at_cell_centers(const cs_adjacency_t *c2v, const cs_cdo_quantities_t *quant, const double *array, cs_real_t *val_xc)
Reconstruct the value at all cell centers from an array of values defined on primal vertices...
Definition: cs_reco.c:167
void cs_reco_dfbyc_in_pec(const cs_cell_mesh_t *cm, short int e, const cs_real_t *array, cs_real_3_t val_pec)
Reconstruct a constant vector inside pec which is a volume surrounding the edge e inside the cell c...
Definition: cs_reco.c:495