9.0
general documentation
Loading...
Searching...
No Matches
cs_xdef.h
Go to the documentation of this file.
1#ifndef __CS_XDEF_H__
2#define __CS_XDEF_H__
3
4/*============================================================================
5 * Functions to handle extended definitions of quantities
6 *============================================================================*/
7
8/*
9 This file is part of code_saturne, a general-purpose CFD tool.
10
11 Copyright (C) 1998-2025 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 * Standard C library headers
32 *----------------------------------------------------------------------------*/
33
34#include <string.h>
35
36/*----------------------------------------------------------------------------
37 * Local headers
38 *----------------------------------------------------------------------------*/
39
40#include "base/cs_base.h"
42#include "base/cs_field.h"
43#include "base/cs_param_types.h"
44#include "base/cs_volume_zone.h"
45#include "cdo/cs_quadrature.h"
47
48/*----------------------------------------------------------------------------*/
49
51
52/*============================================================================
53 * Macro definitions
54 *============================================================================*/
55
56/*============================================================================
57 * Type definitions
58 *============================================================================*/
59
60/*----------------------------------------------------------------------------*/
73/*----------------------------------------------------------------------------*/
74
75typedef void *
76(cs_xdef_free_input_t)(void *input);
77
113
129
143
144typedef enum {
145
146 CS_XDEF_SUPPORT_TIME, /* support for time step description */
147 CS_XDEF_SUPPORT_BOUNDARY, /* zones attached to boundary faces */
149
151
153
159
207
212
213typedef struct {
214
266
267 int z_id;
272
274
275 /* Automatic parameter */
276
278
279 /* Optional parameters */
280
284
286
291
292typedef struct {
293
297
298 int z_id;
299
303
305
310
311 void *input;
312
316
318
320
325
326typedef struct {
327
331
332 int z_id;
333
338
340
344
346
351
352 void *input;
353
357
359
361
366
367typedef struct {
368
372
373 int z_id;
374
378
380
385
386 void *input;
387
391
393
395
396/*============================================================================
397 * Public function prototypes
398 *============================================================================*/
399
400/*----------------------------------------------------------------------------*/
410/*----------------------------------------------------------------------------*/
411
412static inline cs_real_t
414{
415 assert(def != NULL);
416 assert(def->dim == 1);
417 assert(def->type == CS_XDEF_BY_VALUE);
418
419 cs_real_t *value = (cs_real_t *)def->context;
420
421 return value[0];
422}
423
424/*----------------------------------------------------------------------------*/
433/*----------------------------------------------------------------------------*/
434
435static inline void
437 cs_real_t val)
438{
439 assert(def != NULL);
440 assert(def->dim == 1);
441 assert(def->type == CS_XDEF_BY_VALUE);
442
443 cs_real_t *values = (cs_real_t *)def->context;
444
445 values[0] = val;
446}
447
448/*----------------------------------------------------------------------------*/
457/*----------------------------------------------------------------------------*/
458
459static inline cs_real_t *
461{
462 if (def == NULL)
463 return NULL;
464
465 assert(def->type == CS_XDEF_BY_ARRAY);
466
468
469 return ai->values;
470}
471
472/*----------------------------------------------------------------------------*/
481/*----------------------------------------------------------------------------*/
482
483static inline cs_field_t *
485{
486 if (def == NULL)
487 return NULL;
488
489 assert(def->type == CS_XDEF_BY_FIELD);
490
491 return (cs_field_t *)def->context;
492}
493
494/*============================================================================
495 * Public function prototypes
496 *============================================================================*/
497
498/*----------------------------------------------------------------------------*/
512/*----------------------------------------------------------------------------*/
513
514cs_xdef_t *
516 int dim,
517 int z_id,
518 cs_flag_t state,
519 cs_flag_t meta,
520 void *context);
521
522/*----------------------------------------------------------------------------*/
536/*----------------------------------------------------------------------------*/
537
538cs_xdef_t *
540 int dim,
541 int z_id,
542 cs_flag_t state,
543 cs_flag_t meta,
544 void *context);
545
546/*----------------------------------------------------------------------------*/
559/*----------------------------------------------------------------------------*/
560
561cs_xdef_t *
563 cs_flag_t state,
564 cs_flag_t meta,
565 void *context);
566
567/*----------------------------------------------------------------------------*/
575/*----------------------------------------------------------------------------*/
576
577cs_xdef_t *
579
580/*----------------------------------------------------------------------------*/
588/*----------------------------------------------------------------------------*/
589
590cs_xdef_t *
592
593/*----------------------------------------------------------------------------*/
604/*----------------------------------------------------------------------------*/
605
606void
608 void *input);
609
610/*----------------------------------------------------------------------------*/
621/*----------------------------------------------------------------------------*/
622
623void
625 cs_xdef_free_input_t *free_input);
626
627/*----------------------------------------------------------------------------*/
635/*----------------------------------------------------------------------------*/
636
637void
640
641/*----------------------------------------------------------------------------*/
650/*----------------------------------------------------------------------------*/
651
654
655/*----------------------------------------------------------------------------*/
663/*----------------------------------------------------------------------------*/
664
667
668/*----------------------------------------------------------------------------*/
676/*----------------------------------------------------------------------------*/
677
680
681/*----------------------------------------------------------------------------*/
689/*----------------------------------------------------------------------------*/
690
691void
692cs_xdef_log_setup(const char *prefix,
693 const cs_xdef_t *d);
694
695/*----------------------------------------------------------------------------*/
703/*----------------------------------------------------------------------------*/
704
705void
706cs_xdef_log(cs_log_t log_type,
707 const char *prefix,
708 const cs_xdef_t *d);
709
710/*----------------------------------------------------------------------------*/
718/*----------------------------------------------------------------------------*/
719
720const char *
722
723/*----------------------------------------------------------------------------*/
732/*----------------------------------------------------------------------------*/
733
734void
736 bool is_owner,
737 cs_real_t *values);
738
739/*----------------------------------------------------------------------------*/
749/*----------------------------------------------------------------------------*/
750
751void
753 int z_id);
754
755/*----------------------------------------------------------------------------*/
764/*----------------------------------------------------------------------------*/
765
766void
768
769/*----------------------------------------------------------------------------*/
776/*----------------------------------------------------------------------------*/
777
778void
780 const cs_adjacency_t *adj);
781
782/*----------------------------------------------------------------------------*/
792/*----------------------------------------------------------------------------*/
793
794void
796 cs_lnum_t n_elts,
797 const cs_lnum_t elt_ids[]);
798
799/*----------------------------------------------------------------------------*/
807/*----------------------------------------------------------------------------*/
808
809cs_real_t *
811
812/*----------------------------------------------------------------------------*/
813
815
816#endif /* __CS_XDEF_H__ */
#define BEGIN_C_DECLS
Definition cs_defs.h:542
double cs_real_t
Floating-point value.
Definition cs_defs.h:342
#define END_C_DECLS
Definition cs_defs.h:543
int cs_lnum_t
local mesh entity id
Definition cs_defs.h:335
unsigned short int cs_flag_t
Definition cs_defs.h:344
cs_log_t
Definition cs_log.h:48
void cs_time_func_t(double time, void *input, cs_real_t *retval)
Function which defines the evolution of a quantity according to the current time and any structure gi...
Definition cs_param_types.h:172
void cs_analytic_func_t(cs_real_t time, cs_lnum_t n_elts, const cs_lnum_t *elt_ids, const cs_real_t *coords, bool dense_output, void *input, cs_real_t *retval)
Generic function pointer for an evaluation relying on an analytic function.
Definition cs_param_types.h:127
void cs_dof_func_t(cs_lnum_t n_elts, const cs_lnum_t *elt_ids, bool dense_output, void *input, cs_real_t *retval)
Generic function pointer for computing a quantity at predefined locations such as degrees of freedom ...
Definition cs_param_types.h:154
cs_quadrature_type_t
Type of quadrature to use when computing an integral quantity. This rationale is used for integrals a...
Definition cs_quadrature.h:84
void cs_xdef_array_build_full2subset(const cs_xdef_t *d)
In case of definition by array, build the full2subset array. The direct members of the cs_xdef_t stru...
Definition cs_xdef.cpp:1149
cs_quadrature_type_t cs_xdef_get_quadrature(cs_xdef_t *d)
Get the type of quadrature to use for evaluating the given description.
Definition cs_xdef.cpp:846
cs_xdef_t * cs_xdef_volume_create(cs_xdef_type_t type, int dim, int z_id, cs_flag_t state, cs_flag_t meta, void *context)
Allocate and initialize a new cs_xdef_t structure based on volumic elements.
Definition cs_xdef.cpp:116
void cs_xdef_array_set_zone_id(cs_xdef_t *d, int z_id)
In case of definition by array, set the zone id related to the size of the array. By default,...
Definition cs_xdef.cpp:1120
cs_xdef_type_t cs_xdef_get_type(const cs_xdef_t *d)
Retrieve the flag dedicated to the state.
Definition cs_xdef.cpp:865
cs_xdef_t * cs_xdef_copy(cs_xdef_t *src)
copy a cs_xdef_t structure
Definition cs_xdef.cpp:651
void cs_xdef_array_set_sublist(cs_xdef_t *d, cs_lnum_t n_elts, const cs_lnum_t elt_ids[])
In case of definition by array, set the optional sub-list of elements used to link elements in the pa...
Definition cs_xdef.cpp:1237
static cs_field_t * cs_xdef_field_get(cs_xdef_t *def)
When the definition relies on a cs_field_t structure, return the pointer to the field structure.
Definition cs_xdef.h:484
cs_xdef_type_t
Definition cs_xdef.h:114
@ CS_XDEF_BY_ANALYTIC_FUNCTION
Definition cs_xdef.h:116
@ CS_XDEF_BY_TIME_FUNCTION
Definition cs_xdef.h:123
@ CS_XDEF_BY_ARRAY
Definition cs_xdef.h:117
@ CS_XDEF_BY_DOF_FUNCTION
Definition cs_xdef.h:118
@ CS_XDEF_BY_QOV
Definition cs_xdef.h:121
@ CS_XDEF_BY_VALUE
Definition cs_xdef.h:124
@ CS_XDEF_BY_FIELD
Definition cs_xdef.h:119
@ CS_N_XDEF_TYPES
Definition cs_xdef.h:126
@ CS_XDEF_BY_SUB_DEFINITIONS
Definition cs_xdef.h:122
@ CS_XDEF_BY_FUNCTION
Definition cs_xdef.h:120
void cs_xdef_array_set_values(cs_xdef_t *d, bool is_owner, cs_real_t *values)
In case of definition by array, set the array values after having added this definition.
Definition cs_xdef.cpp:1082
void * cs_xdef_free_input_t(void *input)
Destroy an input data structure. Complex data structure can be used when a cs_xdef_t structure is def...
Definition cs_xdef.h:76
cs_xdef_t * cs_xdef_free(cs_xdef_t *d)
Free a cs_xdef_t structure.
Definition cs_xdef.cpp:568
cs_xdef_t * cs_xdef_boundary_create(cs_xdef_type_t type, int dim, int z_id, cs_flag_t state, cs_flag_t meta, void *context)
Allocate and initialize a new cs_xdef_t structure based on boundary elements.
Definition cs_xdef.cpp:304
void cs_xdef_set_input_context(cs_xdef_t *d, void *input)
In the case of a definition by an analytic function, a time function or a function relying on degrees...
Definition cs_xdef.cpp:712
cs_flag_t cs_xdef_get_state_flag(const cs_xdef_t *d)
Retrieve the flag dedicated to the state.
Definition cs_xdef.cpp:884
cs_real_t * cs_xdef_field_get_values(cs_xdef_t *def)
Get the current field values in case of definition by field.
Definition cs_xdef.cpp:1267
void cs_xdef_array_set_adjacency(cs_xdef_t *d, const cs_adjacency_t *adj)
In case of definition by array, set the optional adjacency structure.
Definition cs_xdef.cpp:1207
void cs_xdef_log_setup(const char *prefix, const cs_xdef_t *d)
Output the settings related to a cs_xdef_t structure in the setup logging file.
Definition cs_xdef.cpp:903
cs_xdef_support_t
Definition cs_xdef.h:144
@ CS_XDEF_SUPPORT_VOLUME
Definition cs_xdef.h:148
@ CS_XDEF_SUPPORT_TIME
Definition cs_xdef.h:146
@ CS_N_XDEF_SUPPORTS
Definition cs_xdef.h:150
@ CS_XDEF_SUPPORT_BOUNDARY
Definition cs_xdef.h:147
static cs_real_t cs_xdef_get_scalar_value(cs_xdef_t *def)
Retrieve the value associated to the given definition. This should be a definition by value and the d...
Definition cs_xdef.h:413
void cs_xdef_log(cs_log_t log_type, const char *prefix, const cs_xdef_t *d)
Output the settings related to a cs_xdef_t structure.
Definition cs_xdef.cpp:920
void cs_xdef_set_free_input_function(cs_xdef_t *d, cs_xdef_free_input_t *free_input)
In case of a definition by an analytic function, a time function or a function relying on degrees of ...
Definition cs_xdef.cpp:770
const char * cs_xdef_type_get_name(cs_xdef_type_t xdef_type)
Retrieve a pointer to the cs_xdef_type's name string.
Definition cs_xdef.cpp:1062
void cs_xdef_set_quadrature(cs_xdef_t *d, cs_quadrature_type_t qtype)
Set the type of quadrature to use for evaluating the given description.
Definition cs_xdef.cpp:825
static void cs_xdef_set_scalar_value(cs_xdef_t *def, cs_real_t val)
Set the value associated to the given definition. This should be a definition by value and the dimens...
Definition cs_xdef.h:436
static cs_real_t * cs_xdef_array_get_values(const cs_xdef_t *def)
Retrieve the values associated to the given definition. This should be a definition by array.
Definition cs_xdef.h:460
cs_xdef_t * cs_xdef_timestep_create(cs_xdef_type_t type, cs_flag_t state, cs_flag_t meta, void *context)
Allocate and initialize a new cs_xdef_t structure for setting the time step.
Definition cs_xdef.cpp:497
Definition cs_mesh_adjacencies.h:68
Field descriptor.
Definition cs_field.h:158
Context structure when a definition by analytic function is used.
Definition cs_xdef.h:292
int z_id
Definition cs_xdef.h:298
void * input
Definition cs_xdef.h:311
cs_xdef_free_input_t * free_input
Definition cs_xdef.h:317
cs_analytic_func_t * func
Definition cs_xdef.h:304
Context structure when an array is used for the definition.
Definition cs_xdef.h:213
int stride
Definition cs_xdef.h:268
const cs_lnum_t * elt_ids
Definition cs_xdef.h:282
cs_real_t * values
Definition cs_xdef.h:273
int z_id
Definition cs_xdef.h:267
bool is_owner
Definition cs_xdef.h:270
bool full_length
Definition cs_xdef.h:271
const cs_adjacency_t * adjacency
Definition cs_xdef.h:283
cs_lnum_t * full2subset
Definition cs_xdef.h:277
cs_lnum_t n_list_elts
Definition cs_xdef.h:281
cs_flag_t value_location
Definition cs_xdef.h:269
Context structure when a definition by DoF function is used.
Definition cs_xdef.h:326
cs_dof_func_t * func
Definition cs_xdef.h:345
cs_flag_t dof_location
Definition cs_xdef.h:339
int z_id
Definition cs_xdef.h:332
void * input
Definition cs_xdef.h:352
cs_xdef_free_input_t * free_input
Definition cs_xdef.h:358
Structure storing medata for defining a quantity in a very flexible way.
Definition cs_xdef.h:160
cs_xdef_type_t type
Definition cs_xdef.h:195
cs_quadrature_type_t qtype
Definition cs_xdef.h:202
cs_flag_t state
Definition cs_xdef.h:199
cs_xdef_support_t support
Definition cs_xdef.h:197
int dim
Definition cs_xdef.h:194
int z_id
Definition cs_xdef.h:196
cs_flag_t meta
Definition cs_xdef.h:200
void * context
Definition cs_xdef.h:204
Context structure when a time step function is used for the definition.
Definition cs_xdef.h:367
cs_time_func_t * func
Definition cs_xdef.h:379
int z_id
Definition cs_xdef.h:373
void * input
Definition cs_xdef.h:386
cs_xdef_free_input_t * free_input
Definition cs_xdef.h:392