My Project
programmer's documentation
Macros | Functions | Variables
cs_advection_field.c File Reference
#include "cs_defs.h"
#include <assert.h>
#include <ctype.h>
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <bft_mem.h>
#include "cs_boundary_zone.h"
#include "cs_evaluate.h"
#include "cs_field.h"
#include "cs_log.h"
#include "cs_math.h"
#include "cs_mesh_location.h"
#include "cs_param_cdo.h"
#include "cs_reco.h"
#include "cs_volume_zone.h"
#include "cs_xdef.h"
#include "cs_zone.h"
#include "cs_advection_field.h"
Include dependency graph for cs_advection_field.c:

Macros

#define _dp3   cs_math_3_dot_product
 
#define CS_ADVECTION_FIELD_DBG   0
 
#define CS_ADVECTION_FIELD_ID_NOT_SET   -1
 
#define CS_ADVECTION_FIELD_ID_TO_BE_SET   -2
 

Functions

static int _get_dim_def (const cs_adv_field_t *adv)
 Return the required dimension for the definition of an advection field. More...
 
static void _fill_uniform_boundary_flux (const cs_cdo_quantities_t *const cdoq, const cs_adjacency_t *const f2e, const cs_adjacency_t *const e2v, cs_lnum_t bf_id, cs_real_t face_flux, cs_real_t *fluxes)
 Update the contribution of the flux. More...
 
static void _cw_fill_uniform_boundary_flux (const cs_cell_mesh_t *cm, short int f, cs_real_t face_flux, cs_real_t *fluxes)
 Update the contribution of the flux for each vertex. More...
 
void cs_advection_field_set_shared_pointers (const cs_cdo_quantities_t *quant, const cs_cdo_connect_t *connect)
 Set shared pointers to main domain members. More...
 
int cs_advection_field_get_n_fields (void)
 Get the number of allocated cs_adv_field_t structures. More...
 
cs_adv_field_tcs_advection_field_by_name (const char *name)
 Search in the array of advection field structures which one has the name given in argument. More...
 
cs_adv_field_tcs_advection_field_by_id (int id)
 Search in the array of advection field structures which one has the id given in argument. More...
 
cs_adv_field_tcs_advection_field_add_user (const char *name)
 Add and initialize a new user-defined advection field structure. More...
 
cs_adv_field_tcs_advection_field_add (const char *name, cs_advection_field_status_t status)
 Add and initialize a new advection field structure. More...
 
void cs_advection_field_destroy_all (void)
 Free all alllocated cs_adv_field_t structures and its related array. More...
 
bool cs_advection_field_check_name (const cs_adv_field_t *adv, const char *ref_name)
 Check if the given advection field has the name ref_name. More...
 
void cs_advection_field_log_setup (void)
 Print all setup information related to cs_adv_field_t structures. More...
 
void cs_advection_field_set_option (cs_adv_field_t *adv, cs_advection_field_key_t key)
 Set optional parameters related to a cs_adv_field_t structure. More...
 
void cs_advection_field_def_by_value (cs_adv_field_t *adv, cs_real_t *values)
 Define the value of a cs_adv_field_t structure. More...
 
void cs_advection_field_def_by_analytic (cs_adv_field_t *adv, cs_analytic_func_t *func, void *input)
 Define a cs_adv_field_t structure thanks to an analytic function. More...
 
void cs_advection_field_def_by_array (cs_adv_field_t *adv, cs_flag_t loc, cs_real_t *array, bool is_owner, cs_lnum_t *index)
 Define a cs_adv_field_t structure thanks to an array of values. More...
 
void cs_advection_field_def_by_field (cs_adv_field_t *adv, cs_field_t *field)
 Define a cs_adv_field_t structure thanks to an array of values. More...
 
void cs_advection_field_def_boundary_flux_by_value (cs_adv_field_t *adv, const char *zname, cs_real_t normal_flux)
 Define the value of the boundary normal flux for the given cs_adv_field_t structure. More...
 
void cs_advection_field_def_boundary_flux_by_analytic (cs_adv_field_t *adv, const char *zname, cs_analytic_func_t *func, void *input)
 Define the value of the boundary normal flux for the given cs_adv_field_t structure using an analytic function. More...
 
void cs_advection_field_def_boundary_flux_by_array (cs_adv_field_t *adv, const char *zname, cs_flag_t loc, cs_real_t *array, bool is_owner, cs_lnum_t *index)
 Define the value of the boundary normal flux for the given cs_adv_field_t structure using an array of values. More...
 
void cs_advection_field_create_fields (void)
 Create all needed cs_field_t structures related to an advection field. More...
 
void cs_advection_field_finalize_setup (void)
 Last stage of the definition of an advection field based on several definitions (i.e. definition by subdomains on the boundary) More...
 
void cs_advection_field_get_cell_vector (cs_lnum_t c_id, const cs_adv_field_t *adv, cs_nvec3_t *vect)
 Compute the value of the advection field at the cell center. More...
 
void cs_advection_field_cw_eval_at_xyz (const cs_adv_field_t *adv, const cs_cell_mesh_t *cm, const cs_real_3_t xyz, cs_real_t time_eval, cs_nvec3_t *eval)
 Compute the value of the advection field at a specific location inside a cell. More...
 
void cs_advection_field_in_cells (const cs_adv_field_t *adv, cs_real_t time_eval, cs_real_t *cell_values)
 Compute the mean-value of the advection field inside each cell. More...
 
void cs_advection_field_at_vertices (const cs_adv_field_t *adv, cs_real_t time_eval, cs_real_t *vtx_values)
 Compute the value of the advection field at vertices. More...
 
void cs_advection_field_across_boundary (const cs_adv_field_t *adv, cs_real_t time_eval, cs_real_t *flx_values)
 Compute the value of the normal flux of the advection field across the boundary faces. More...
 
cs_real_t cs_advection_field_cw_boundary_face_flux (const cs_real_t time_eval, const short int f, const cs_cell_mesh_t *cm, const cs_adv_field_t *adv)
 Compute the value of the normal flux of the advection field across a boundary face f (cellwise version) More...
 
void cs_advection_field_cw_boundary_f2v_flux (const cs_cell_mesh_t *cm, const cs_adv_field_t *adv, short int f, cs_real_t time_eval, cs_real_t *fluxes)
 Compute the value of the normal flux of the advection field across the closure of the dual cell related to each vertex belonging to the boundary face f. More...
 
void cs_advection_field_cw_face_flux (const cs_cell_mesh_t *cm, const cs_adv_field_t *adv, cs_real_t time_eval, cs_real_t *fluxes)
 Compute the value of the flux of the advection field across the the (primal) faces of a cell. More...
 
void cs_advection_field_cw_dface_flux (const cs_cell_mesh_t *cm, const cs_adv_field_t *adv, cs_real_t time_eval, cs_real_t *fluxes)
 Compute the value of the flux of the advection field across the the dual faces of a cell. More...
 
void cs_advection_field_update (cs_real_t t_eval, bool cur2prev)
 For each cs_adv_field_t structures, update the values of the related field(s) More...
 
void cs_advection_get_peclet (const cs_adv_field_t *adv, const cs_property_t *diff, cs_real_t t_eval, cs_real_t peclet[])
 Compute the Peclet number in each cell. More...
 
void cs_advection_get_courant (const cs_adv_field_t *adv, cs_real_t dt_cur, cs_real_t courant[])
 Compute the Courant number in each cell. More...
 
cs_real_tcs_advection_field_divergence_at_vertices (const cs_adv_field_t *adv, cs_real_t t_eval)
 Compute the divergence of the advection field at vertices Useful for CDO Vertex-based schemes. More...
 

Variables

static const char _err_empty_adv []
 
static const cs_cdo_quantities_tcs_cdo_quant
 
static const cs_cdo_connect_tcs_cdo_connect
 
static int _n_adv_fields = 0
 
static cs_adv_field_t ** _adv_fields = NULL
 

Macro Definition Documentation

◆ _dp3

#define _dp3   cs_math_3_dot_product

◆ CS_ADVECTION_FIELD_DBG

#define CS_ADVECTION_FIELD_DBG   0

◆ CS_ADVECTION_FIELD_ID_NOT_SET

#define CS_ADVECTION_FIELD_ID_NOT_SET   -1

◆ CS_ADVECTION_FIELD_ID_TO_BE_SET

#define CS_ADVECTION_FIELD_ID_TO_BE_SET   -2

Function Documentation

◆ _cw_fill_uniform_boundary_flux()

static void _cw_fill_uniform_boundary_flux ( const cs_cell_mesh_t cm,
short int  f,
cs_real_t  face_flux,
cs_real_t fluxes 
)
static

Update the contribution of the flux for each vertex.

Parameters
[in]cmpointer to a cs_cell_mesh_t structure
[in]fface id in the cellwise numbering
[in]face_fluxvalue of the normal flux across the face
[in,out]fluxesnormal boundary flux for each vertex of the face

◆ _fill_uniform_boundary_flux()

static void _fill_uniform_boundary_flux ( const cs_cdo_quantities_t *const  cdoq,
const cs_adjacency_t *const  f2e,
const cs_adjacency_t *const  e2v,
cs_lnum_t  bf_id,
cs_real_t  face_flux,
cs_real_t fluxes 
)
static

Update the contribution of the flux.

Parameters
[in]cdoqpointer to a cs_cdo_quantities_t structure
[in]f2eface --> edge connectivity
[in]e2vedge --> vertices connectivity
[in]bf_idboundary face id
[in]face_fluxvalue of the normal flux across the face
[in,out]fluxesarray of values to update

◆ _get_dim_def()

static int _get_dim_def ( const cs_adv_field_t adv)
inlinestatic

Return the required dimension for the definition of an advection field.

Parameters
[in]advpointer to an advection field structure
Returns
the dimension

◆ cs_advection_field_across_boundary()

void cs_advection_field_across_boundary ( const cs_adv_field_t adv,
cs_real_t  time_eval,
cs_real_t flx_values 
)

Compute the value of the normal flux of the advection field across the boundary faces.

Parameters
[in]advpointer to a cs_adv_field_t structure
[in]time_evalphysical time at which one evaluates the term
[in,out]flx_valuesarray storing the results

◆ cs_advection_field_add()

cs_adv_field_t* cs_advection_field_add ( const char *  name,
cs_advection_field_status_t  status 
)

Add and initialize a new advection field structure.

Parameters
[in]namename of the advection field
[in]statusstatus of the advection field to create
Returns
a pointer to the new allocated cs_adv_field_t structure

◆ cs_advection_field_add_user()

cs_adv_field_t* cs_advection_field_add_user ( const char *  name)

Add and initialize a new user-defined advection field structure.

Parameters
[in]namename of the advection field
Returns
a pointer to the new allocated cs_adv_field_t structure

◆ cs_advection_field_at_vertices()

void cs_advection_field_at_vertices ( const cs_adv_field_t adv,
cs_real_t  time_eval,
cs_real_t vtx_values 
)

Compute the value of the advection field at vertices.

Parameters
[in]advpointer to a cs_adv_field_t structure
[in]time_evalphysical time at which one evaluates the term
[in,out]vtx_valuesarray storing the results

◆ cs_advection_field_by_id()

cs_adv_field_t* cs_advection_field_by_id ( int  id)

Search in the array of advection field structures which one has the id given in argument.

Parameters
[in]ididentification number
Returns
a pointer to a cs_adv_field_t structure or NULL if not found

◆ cs_advection_field_by_name()

cs_adv_field_t* cs_advection_field_by_name ( const char *  name)

Search in the array of advection field structures which one has the name given in argument.

Parameters
[in]namename of the advection field
Returns
a pointer to a cs_adv_field_t structure or NULL if not found

◆ cs_advection_field_check_name()

bool cs_advection_field_check_name ( const cs_adv_field_t adv,
const char *  ref_name 
)

Check if the given advection field has the name ref_name.

Parameters
[in]advpointer to a cs_adv_field_t structure to test
[in]ref_namename of the advection field to find
Returns
true if the name of the advection field is ref_name otherwise false

◆ cs_advection_field_create_fields()

void cs_advection_field_create_fields ( void  )

Create all needed cs_field_t structures related to an advection field.

◆ cs_advection_field_cw_boundary_f2v_flux()

void cs_advection_field_cw_boundary_f2v_flux ( const cs_cell_mesh_t cm,
const cs_adv_field_t adv,
short int  f,
cs_real_t  time_eval,
cs_real_t fluxes 
)

Compute the value of the normal flux of the advection field across the closure of the dual cell related to each vertex belonging to the boundary face f.

Parameters
[in]cmpointer to a cs_cell_mesh_t structure
[in]advpointer to a cs_adv_field_t structure
[in]fface id in the cellwise numbering
[in]time_evalphysical time at which one evaluates the term
[in,out]fluxesnormal boundary flux for each vertex of the face

◆ cs_advection_field_cw_boundary_face_flux()

cs_real_t cs_advection_field_cw_boundary_face_flux ( const cs_real_t  time_eval,
const short int  f,
const cs_cell_mesh_t cm,
const cs_adv_field_t adv 
)

Compute the value of the normal flux of the advection field across a boundary face f (cellwise version)

Parameters
[in]time_evalphysical time at which one evaluates the term
[in]fface id in the cellwise numbering
[in]cmpointer to a cs_cell_mesh_t structure
[in]advpointer to a cs_adv_field_t structure
Returns
the normal boundary flux for the face f

◆ cs_advection_field_cw_dface_flux()

void cs_advection_field_cw_dface_flux ( const cs_cell_mesh_t cm,
const cs_adv_field_t adv,
cs_real_t  time_eval,
cs_real_t fluxes 
)

Compute the value of the flux of the advection field across the the dual faces of a cell.

Parameters
[in]cmpointer to a cs_cell_mesh_t structure
[in]advpointer to a cs_adv_field_t structure
[in]time_evalphysical time at which one evaluates the term
[in,out]fluxesarray of values attached to dual faces of a cell

◆ cs_advection_field_cw_eval_at_xyz()

void cs_advection_field_cw_eval_at_xyz ( const cs_adv_field_t adv,
const cs_cell_mesh_t cm,
const cs_real_3_t  xyz,
cs_real_t  time_eval,
cs_nvec3_t eval 
)

Compute the value of the advection field at a specific location inside a cell.

Parameters
[in]advpointer to a cs_adv_field_t structure
[in]cmpointer to a cs_cell_mesh_t structure
[in]xyzlocation where to perform the evaluation
[in]time_evalphysical time at which one evaluates the term
[in,out]evalpointer to a cs_nvec3_t

◆ cs_advection_field_cw_face_flux()

void cs_advection_field_cw_face_flux ( const cs_cell_mesh_t cm,
const cs_adv_field_t adv,
cs_real_t  time_eval,
cs_real_t fluxes 
)

Compute the value of the flux of the advection field across the the (primal) faces of a cell.

Parameters
[in]cmpointer to a cs_cell_mesh_t structure
[in]advpointer to a cs_adv_field_t structure
[in]time_evalphysical time at which one evaluates the term
[in,out]fluxesarray of values attached to primal faces of a cell

◆ cs_advection_field_def_boundary_flux_by_analytic()

void cs_advection_field_def_boundary_flux_by_analytic ( cs_adv_field_t adv,
const char *  zname,
cs_analytic_func_t func,
void *  input 
)

Define the value of the boundary normal flux for the given cs_adv_field_t structure using an analytic function.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]znamename of the boundary zone to consider
[in]funcpointer to a function
[in]inputNULL or pointer to a structure cast on-the-fly

◆ cs_advection_field_def_boundary_flux_by_array()

void cs_advection_field_def_boundary_flux_by_array ( cs_adv_field_t adv,
const char *  zname,
cs_flag_t  loc,
cs_real_t array,
bool  is_owner,
cs_lnum_t index 
)

Define the value of the boundary normal flux for the given cs_adv_field_t structure using an array of values.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]znamename of the boundary zone to consider
[in]locinformation to know where are located values
[in]arraypointer to an array
[in]is_ownertransfer the lifecycle to the cs_xdef_t structure (true or false)
[in]indexoptional pointer to the array index

◆ cs_advection_field_def_boundary_flux_by_value()

void cs_advection_field_def_boundary_flux_by_value ( cs_adv_field_t adv,
const char *  zname,
cs_real_t  normal_flux 
)

Define the value of the boundary normal flux for the given cs_adv_field_t structure.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]znamename of the boundary zone to consider
[in]normal_fluxvalue to set

◆ cs_advection_field_def_by_analytic()

void cs_advection_field_def_by_analytic ( cs_adv_field_t adv,
cs_analytic_func_t func,
void *  input 
)

Define a cs_adv_field_t structure thanks to an analytic function.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]funcpointer to a function
[in]inputNULL or pointer to a structure cast on-the-fly

◆ cs_advection_field_def_by_array()

void cs_advection_field_def_by_array ( cs_adv_field_t adv,
cs_flag_t  loc,
cs_real_t array,
bool  is_owner,
cs_lnum_t index 
)

Define a cs_adv_field_t structure thanks to an array of values.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]locinformation to know where are located values
[in]arraypointer to an array
[in]is_ownertransfer the lifecycle to the cs_xdef_t structure (true or false)
[in]indexoptional pointer to the array index

◆ cs_advection_field_def_by_field()

void cs_advection_field_def_by_field ( cs_adv_field_t adv,
cs_field_t field 
)

Define a cs_adv_field_t structure thanks to an array of values.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]fieldpointer to a cs_field_t structure

◆ cs_advection_field_def_by_value()

void cs_advection_field_def_by_value ( cs_adv_field_t adv,
cs_real_t values 
)

Define the value of a cs_adv_field_t structure.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]valuesvalues to set

◆ cs_advection_field_destroy_all()

void cs_advection_field_destroy_all ( void  )

Free all alllocated cs_adv_field_t structures and its related array.

Returns
a NULL pointer

◆ cs_advection_field_divergence_at_vertices()

cs_real_t* cs_advection_field_divergence_at_vertices ( const cs_adv_field_t adv,
cs_real_t  t_eval 
)

Compute the divergence of the advection field at vertices Useful for CDO Vertex-based schemes.

Parameters
[in]advpointer to the advection field struct.
[in]t_evaltime at which one evaluates the advection field
Returns
a pointer to an array storing the result

◆ cs_advection_field_finalize_setup()

void cs_advection_field_finalize_setup ( void  )

Last stage of the definition of an advection field based on several definitions (i.e. definition by subdomains on the boundary)

◆ cs_advection_field_get_cell_vector()

void cs_advection_field_get_cell_vector ( cs_lnum_t  c_id,
const cs_adv_field_t adv,
cs_nvec3_t vect 
)

Compute the value of the advection field at the cell center.

Parameters
[in]c_idid of the current cell
[in]advpointer to a cs_adv_field_t structure
[in,out]vectpointer to a cs_nvec3_t structure (meas + unitv)

◆ cs_advection_field_get_n_fields()

int cs_advection_field_get_n_fields ( void  )

Get the number of allocated cs_adv_field_t structures.

Returns
the number of advection fields

◆ cs_advection_field_in_cells()

void cs_advection_field_in_cells ( const cs_adv_field_t adv,
cs_real_t  time_eval,
cs_real_t cell_values 
)

Compute the mean-value of the advection field inside each cell.

Parameters
[in]advpointer to a cs_adv_field_t structure
[in]time_evalphysical time at which one evaluates the term
[in,out]cell_valuesarray of values at cell centers

◆ cs_advection_field_log_setup()

void cs_advection_field_log_setup ( void  )

Print all setup information related to cs_adv_field_t structures.

◆ cs_advection_field_set_option()

void cs_advection_field_set_option ( cs_adv_field_t adv,
cs_advection_field_key_t  key 
)

Set optional parameters related to a cs_adv_field_t structure.

Parameters
[in,out]advpointer to a cs_adv_field_t structure
[in]keykey related to the member of adv to set

◆ cs_advection_field_set_shared_pointers()

void cs_advection_field_set_shared_pointers ( const cs_cdo_quantities_t quant,
const cs_cdo_connect_t connect 
)

Set shared pointers to main domain members.

Parameters
[in]quantadditional mesh quantities struct.
[in]connectpointer to a cs_cdo_connect_t struct.

◆ cs_advection_field_update()

void cs_advection_field_update ( cs_real_t  t_eval,
bool  cur2prev 
)

For each cs_adv_field_t structures, update the values of the related field(s)

Parameters
[in]t_evalphysical time at which one evaluates the term
[in]cur2prevtrue or false

◆ cs_advection_get_courant()

void cs_advection_get_courant ( const cs_adv_field_t adv,
cs_real_t  dt_cur,
cs_real_t  courant[] 
)

Compute the Courant number in each cell.

Parameters
[in]advpointer to the advection field struct.
[in]dt_curcurrent time step
[in,out]courantpointer to an array storing the Courant number

◆ cs_advection_get_peclet()

void cs_advection_get_peclet ( const cs_adv_field_t adv,
const cs_property_t diff,
cs_real_t  t_eval,
cs_real_t  peclet[] 
)

Compute the Peclet number in each cell.

Parameters
[in]advpointer to the advection field struct.
[in]diffpointer to the diffusion property struct.
[in]t_evaltime at which one evaluates the advection field
[in,out]pecletpointer to an array storing the Peclet number

Variable Documentation

◆ _adv_fields

cs_adv_field_t** _adv_fields = NULL
static

◆ _err_empty_adv

const char _err_empty_adv[]
static
Initial value:
=
" Stop setting an empty cs_adv_field_t structure.\n"
" Please check your settings.\n"

◆ _n_adv_fields

int _n_adv_fields = 0
static

◆ cs_cdo_connect

const cs_cdo_connect_t* cs_cdo_connect
static

◆ cs_cdo_quant

const cs_cdo_quantities_t* cs_cdo_quant
static