7.2
general documentation
cs_property.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 <math.h>
#include <bft_mem.h>
#include "cs_log.h"
#include "cs_param_cdo.h"
#include "cs_reco.h"
#include "cs_volume_zone.h"
#include "cs_xdef_eval.h"
#include "cs_property.h"
+ Include dependency graph for cs_property.c:

Macros

#define CS_PROPERTY_DBG   0
 

Functions

void cs_property_init_sharing (const cs_cdo_quantities_t *quant, const cs_cdo_connect_t *connect)
 Set shared pointers to main domain members. More...
 
int cs_property_get_n_properties (void)
 Retrieve the number of properties. More...
 
cs_property_tcs_property_add (const char *name, cs_property_type_t type)
 Create and initialize a new property structure. More...
 
cs_property_tcs_property_subcell_add (const char *name, cs_property_type_t type)
 Create and initialize a new property structure with an evaluation which can be called on a sub-partition of a cell. This kind of property is not available for all numerical scheme. By default, only one evaluation is performed in each cell. More...
 
cs_property_tcs_property_add_as_product (const char *name, const cs_property_t *pty_a, const cs_property_t *pty_b)
 Define a cs_property_t structure thanks to the product of two properties The type is infered from that of the related properties The value of the property is given as: value_ab = value_a * value_b. More...
 
cs_property_tcs_property_by_name (const char *name)
 Find the related property definition from its name. More...
 
cs_property_tcs_property_by_id (int id)
 Find the related property definition from its id. More...
 
void cs_property_set_option (cs_property_t *pty, cs_property_key_t key)
 Set optional parameters related to a cs_property_t structure. More...
 
void cs_property_set_reference_value (cs_property_t *pty, double refval)
 Set the reference value associated to a cs_property_t structure This is a real number even whatever the type of property is. More...
 
void cs_property_destroy_all (void)
 Free all cs_property_t structures and the array storing all the structures. More...
 
void cs_property_finalize_setup (void)
 Last stage of the definition of a property based on several definitions (i.e. definition by subdomains) More...
 
cs_property_data_t cs_property_data_define (bool need_tensor, bool need_eigen, const cs_property_t *property)
 Define a cs_property_data_t structure (not a pointer to this structure). If property is NULL then one considers that this is a unitary property. More...
 
void cs_property_data_init (bool need_tensor, bool need_eigen, const cs_property_t *property, cs_property_data_t *data)
 Initialize a cs_property_data_t structure. If property is NULL then one considers that this is a unitary property. More...
 
cs_xdef_tcs_property_def_constant_value (cs_property_t *pty, double val)
 Define a single uniform and steady isotropic definition for the given cs_property_t structure. This is a specialized variant of cs_property_def_iso_by_value since several assumptions are satisfied. More...
 
cs_xdef_tcs_property_def_iso_by_value (cs_property_t *pty, const char *zname, double val)
 Define an isotropic cs_property_t structure by value for entities related to a volume zone. More...
 
cs_xdef_tcs_property_def_ortho_by_value (cs_property_t *pty, const char *zname, double val[])
 Define an orthotropic cs_property_t structure by value for entities related to a volume zone. More...
 
cs_xdef_tcs_property_def_aniso_by_value (cs_property_t *pty, const char *zname, cs_real_t tens[3][3])
 Define an anisotropic cs_property_t structure by value for entities related to a volume zone. More...
 
cs_xdef_tcs_property_def_aniso_sym_by_value (cs_property_t *pty, const char *zname, cs_real_t symtens[6])
 Define an anisotropic cs_property_t structure by value for entities related to a volume zone. More...
 
cs_xdef_tcs_property_def_by_time_func (cs_property_t *pty, const char *zname, cs_time_func_t *func, void *input)
 Define a cs_property_t structure thanks to an analytic function in a subdomain attached to the mesh location named ml_name. More...
 
cs_xdef_tcs_property_def_by_analytic (cs_property_t *pty, const char *zname, cs_analytic_func_t *func, void *input)
 Define a cs_property_t structure thanks to an analytic function in a subdomain attached to the mesh location named ml_name. More...
 
cs_xdef_tcs_property_def_by_func (cs_property_t *pty, const char *zname, void *context, cs_xdef_eval_t *get_eval_at_cell, cs_xdef_cw_eval_t *get_eval_at_cell_cw)
 Define a cs_property_t structure thanks to law depending on one scalar variable in a subdomain attached to the mesh location named ml_name. More...
 
cs_xdef_tcs_property_def_by_array (cs_property_t *pty, cs_flag_t loc, cs_real_t *array, bool is_owner, const cs_lnum_t *index, const cs_lnum_t *ids)
 Define a cs_property_t structure thanks to an array of values. More...
 
void cs_property_def_by_field (cs_property_t *pty, cs_field_t *field)
 Define a cs_property_t structure thanks to a field structure. More...
 
void cs_property_iso_get_cell_values (cs_real_t t_eval, const cs_property_t *pty, int *pty_stride, cs_real_t **p_pty_vals)
 Evaluate the value of the property at each cell. Store the evaluation in the given array. More...
 
void cs_property_eval_at_cells (cs_real_t t_eval, const cs_property_t *pty, cs_real_t *array)
 Evaluate the value of the property at each cell. Store the evaluation in the given array. More...
 
void cs_property_get_cell_tensor (cs_lnum_t c_id, cs_real_t t_eval, const cs_property_t *pty, bool do_inversion, cs_real_t tensor[3][3])
 Compute the value of the tensor attached a property at the cell center. More...
 
cs_real_t cs_property_get_cell_value (cs_lnum_t c_id, cs_real_t t_eval, const cs_property_t *pty)
 Compute the value of a property at the cell center. More...
 
void cs_property_tensor_in_cell (const cs_cell_mesh_t *cm, const cs_property_t *pty, cs_real_t t_eval, bool do_inversion, cs_real_t tensor[3][3])
 Compute the value of the tensor attached to a property at the cell center Version using a cs_cell_mesh_t structure. More...
 
cs_real_t cs_property_value_in_cell (const cs_cell_mesh_t *cm, const cs_property_t *pty, cs_real_t t_eval)
 Compute the value of a property at the cell center Version using a cs_cell_mesh_t structure. More...
 
void cs_property_c2v_values (const cs_cell_mesh_t *cm, const cs_property_t *pty, cs_real_t t_eval, cs_real_t *eval)
 Compute the values of an isotropic property in each portion of dual cell in a (primal) cell. This relies on the c2v connectivity. More...
 
void cs_property_get_fourier (const cs_property_t *pty, cs_real_t t_eval, double dt, cs_real_t fourier[])
 Compute the Fourier number in each cell. More...
 
void cs_property_log_setup (void)
 Print a summary of the settings for all defined cs_property_t structures. More...
 

Variables

static const char _err_empty_pty []
 
static const cs_cdo_quantities_tcs_cdo_quant
 
static const cs_cdo_connect_tcs_cdo_connect
 
static int _n_properties = 0
 
static int _n_max_properties = 0
 
static cs_property_t ** _properties = NULL
 

Macro Definition Documentation

◆ CS_PROPERTY_DBG

#define CS_PROPERTY_DBG   0

Function Documentation

◆ cs_property_add()

cs_property_t* cs_property_add ( const char *  name,
cs_property_type_t  type 
)

Create and initialize a new property structure.

Parameters
[in]namename of the property
[in]typetype of property
Returns
a pointer to a new allocated cs_property_t structure

◆ cs_property_add_as_product()

cs_property_t* cs_property_add_as_product ( const char *  name,
const cs_property_t pty_a,
const cs_property_t pty_b 
)

Define a cs_property_t structure thanks to the product of two properties The type is infered from that of the related properties The value of the property is given as: value_ab = value_a * value_b.

Parameters
[in]namename of the property
[in]pty_apointer to a cs_property_t structure
[in]pty_bpointer to a cs_property_t structure
Returns
a pointer to a new allocated cs_property_t structure

◆ cs_property_by_id()

cs_property_t* cs_property_by_id ( int  id)

Find the related property definition from its id.

Parameters
[in]idid of the property to find
Returns
NULL if not found otherwise the associated pointer

◆ cs_property_by_name()

cs_property_t* cs_property_by_name ( const char *  name)

Find the related property definition from its name.

Parameters
[in]namename of the property to find
Returns
NULL if not found otherwise the associated pointer

◆ cs_property_c2v_values()

void cs_property_c2v_values ( const cs_cell_mesh_t cm,
const cs_property_t pty,
cs_real_t  t_eval,
cs_real_t eval 
)

Compute the values of an isotropic property in each portion of dual cell in a (primal) cell. This relies on the c2v connectivity.

Parameters
[in]cmpointer to a cs_cell_mesh_t structure
[in]ptypointer to a cs_property_t structure
[in]t_evalphysical time at which one evaluates the term
[in,out]evalarray of values storing the evaluation

◆ cs_property_data_define()

cs_property_data_t cs_property_data_define ( bool  need_tensor,
bool  need_eigen,
const cs_property_t property 
)

Define a cs_property_data_t structure (not a pointer to this structure). If property is NULL then one considers that this is a unitary property.

Parameters
[in]need_tensortrue if one needs a tensor-valued evaluation
[in]need_eigentrue if one needs an evaluation of eigen values
[in]propertypointer to the cs_property_t structure
Returns
an initialized structure

◆ cs_property_data_init()

void cs_property_data_init ( bool  need_tensor,
bool  need_eigen,
const cs_property_t property,
cs_property_data_t data 
)

Initialize a cs_property_data_t structure. If property is NULL then one considers that this is a unitary property.

Parameters
[in]need_tensortrue if one needs a tensor-valued evaluation
[in]need_eigentrue if one needs an evaluation of eigen values
[in]propertypointer to the cs_property_t structure
[in,out]datastructure to initialize (already allocated)

◆ cs_property_def_aniso_by_value()

cs_xdef_t* cs_property_def_aniso_by_value ( cs_property_t pty,
const char *  zname,
cs_real_t  tens[3][3] 
)

Define an anisotropic cs_property_t structure by value for entities related to a volume zone.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]znamename of the associated zone (if NULL or "" all cells are considered)
[in]tensvalues to set (3x3 tensor)
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_aniso_sym_by_value()

cs_xdef_t* cs_property_def_aniso_sym_by_value ( cs_property_t pty,
const char *  zname,
cs_real_t  symtens[6] 
)

Define an anisotropic cs_property_t structure by value for entities related to a volume zone.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]znamename of the associated zone (if NULL or "" all cells are considered)
[in]symtensvalues to set (6 values – symmetric storage)
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_by_analytic()

cs_xdef_t* cs_property_def_by_analytic ( cs_property_t pty,
const char *  zname,
cs_analytic_func_t func,
void *  input 
)

Define a cs_property_t structure thanks to an analytic function in a subdomain attached to the mesh location named ml_name.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]znamename of the associated zone (if NULL or "" all cells are considered)
[in]funcpointer to a cs_analytic_func_t function
[in]inputNULL or pointer to a structure cast on-the-fly
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_by_array()

cs_xdef_t* cs_property_def_by_array ( cs_property_t pty,
cs_flag_t  loc,
cs_real_t array,
bool  is_owner,
const cs_lnum_t index,
const cs_lnum_t ids 
)

Define a cs_property_t structure thanks to an array of values.

Parameters
[in,out]ptypointer to a cs_property_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 an array of index values
[in]idsoptional pointer to a list of entity ids
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_by_field()

void cs_property_def_by_field ( cs_property_t pty,
cs_field_t field 
)

Define a cs_property_t structure thanks to a field structure.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]fieldpointer to a cs_field_t structure

◆ cs_property_def_by_func()

cs_xdef_t* cs_property_def_by_func ( cs_property_t pty,
const char *  zname,
void *  context,
cs_xdef_eval_t get_eval_at_cell,
cs_xdef_cw_eval_t get_eval_at_cell_cw 
)

Define a cs_property_t structure thanks to law depending on one scalar variable in a subdomain attached to the mesh location named ml_name.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]znamename of the associated zone (if NULL or "" all cells are considered)
[in]contextpointer to a structure (may be NULL)
[in]get_eval_at_cellpointer to a function
[in]get_eval_at_cell_cwpointer to a function
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_by_time_func()

cs_xdef_t* cs_property_def_by_time_func ( cs_property_t pty,
const char *  zname,
cs_time_func_t func,
void *  input 
)

Define a cs_property_t structure thanks to an analytic function in a subdomain attached to the mesh location named ml_name.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]znamename of the associated zone (if NULL or "" all cells are considered)
[in]funcpointer to a cs_analytic_func_t function
[in]inputNULL or pointer to a structure cast on-the-fly
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_constant_value()

cs_xdef_t* cs_property_def_constant_value ( cs_property_t pty,
double  val 
)

Define a single uniform and steady isotropic definition for the given cs_property_t structure. This is a specialized variant of cs_property_def_iso_by_value since several assumptions are satisfied.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]valvalue to set
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_iso_by_value()

cs_xdef_t* cs_property_def_iso_by_value ( cs_property_t pty,
const char *  zname,
double  val 
)

Define an isotropic cs_property_t structure by value for entities related to a volume zone.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]znamename of the associated zone (if NULL or "" all cells are considered)
[in]valvalue to set
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_def_ortho_by_value()

cs_xdef_t* cs_property_def_ortho_by_value ( cs_property_t pty,
const char *  zname,
double  val[] 
)

Define an orthotropic cs_property_t structure by value for entities related to a volume zone.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]znamename of the associated zone (if NULL or "" all cells are considered)
[in]valvalues to set (vector of size 3)
Returns
a pointer to the resulting cs_xdef_t structure

◆ cs_property_destroy_all()

void cs_property_destroy_all ( void  )

Free all cs_property_t structures and the array storing all the structures.

◆ cs_property_eval_at_cells()

void cs_property_eval_at_cells ( cs_real_t  t_eval,
const cs_property_t pty,
cs_real_t array 
)

Evaluate the value of the property at each cell. Store the evaluation in the given array.

Parameters
[in]t_evalphysical time at which one evaluates the term
[in]ptypointer to a cs_property_t structure
[in,out]arraypointer to an array of values (must be allocated)

◆ cs_property_finalize_setup()

void cs_property_finalize_setup ( void  )

Last stage of the definition of a property based on several definitions (i.e. definition by subdomains)

◆ cs_property_get_cell_tensor()

void cs_property_get_cell_tensor ( cs_lnum_t  c_id,
cs_real_t  t_eval,
const cs_property_t pty,
bool  do_inversion,
cs_real_t  tensor[3][3] 
)

Compute the value of the tensor attached a property at the cell center.

Compute the value of the tensor attached to a property at the cell center.

Parameters
[in]c_idid of the current cell
[in]t_evalphysical time at which one evaluates the term
[in]ptypointer to a cs_property_t structure
[in]do_inversiontrue or false
[in,out]tensor3x3 matrix

◆ cs_property_get_cell_value()

cs_real_t cs_property_get_cell_value ( cs_lnum_t  c_id,
cs_real_t  t_eval,
const cs_property_t pty 
)

Compute the value of a property at the cell center.

Parameters
[in]c_idid of the current cell
[in]t_evalphysical time at which one evaluates the term
[in]ptypointer to a cs_property_t structure
Returns
the value of the property for the given cell

◆ cs_property_get_fourier()

void cs_property_get_fourier ( const cs_property_t pty,
cs_real_t  t_eval,
double  dt,
cs_real_t  fourier[] 
)

Compute the Fourier number in each cell.

Parameters
[in]ptypointer to the diffusive property struct.
[in]t_evalphysical time at which one evaluates the term
[in]dtvalue of the current time step
[in,out]fourierpointer to an array storing Fourier numbers

◆ cs_property_get_n_properties()

int cs_property_get_n_properties ( void  )

Retrieve the number of properties.

Returns
the number of properties

◆ cs_property_init_sharing()

void cs_property_init_sharing ( 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_property_iso_get_cell_values()

void cs_property_iso_get_cell_values ( cs_real_t  t_eval,
const cs_property_t pty,
int *  pty_stride,
cs_real_t **  p_pty_vals 
)

Evaluate the value of the property at each cell. Store the evaluation in the given array.

Parameters
[in]t_evalphysical time at which one evaluates the term
[in]ptypointer to a cs_property_t structure
[out]pty_stride= 0 if uniform, =1 otherwise
[in,out]pty_valspointer to an array of values. Allocated if not The size of the allocation depends on the value of the pty_stride

◆ cs_property_log_setup()

void cs_property_log_setup ( void  )

Print a summary of the settings for all defined cs_property_t structures.

◆ cs_property_set_option()

void cs_property_set_option ( cs_property_t pty,
cs_property_key_t  key 
)

Set optional parameters related to a cs_property_t structure.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]keykey related to a setting option

◆ cs_property_set_reference_value()

void cs_property_set_reference_value ( cs_property_t pty,
double  refval 
)

Set the reference value associated to a cs_property_t structure This is a real number even whatever the type of property is.

Parameters
[in,out]ptypointer to a cs_property_t structure
[in]refvalvalue to set

◆ cs_property_subcell_add()

cs_property_t* cs_property_subcell_add ( const char *  name,
cs_property_type_t  type 
)

Create and initialize a new property structure with an evaluation which can be called on a sub-partition of a cell. This kind of property is not available for all numerical scheme. By default, only one evaluation is performed in each cell.

Parameters
[in]namename of the property
[in]typetype of property
Returns
a pointer to a new allocated cs_property_t structure

◆ cs_property_tensor_in_cell()

void cs_property_tensor_in_cell ( const cs_cell_mesh_t cm,
const cs_property_t pty,
cs_real_t  t_eval,
bool  do_inversion,
cs_real_t  tensor[3][3] 
)

Compute the value of the tensor attached to a property at the cell center Version using a cs_cell_mesh_t structure.

Parameters
[in]cmpointer to a cs_cell_mesh_t structure
[in]ptypointer to a cs_property_t structure
[in]t_evalphysical time at which one evaluates the term
[in]do_inversiontrue or false
[in,out]tensor3x3 matrix

◆ cs_property_value_in_cell()

cs_real_t cs_property_value_in_cell ( const cs_cell_mesh_t cm,
const cs_property_t pty,
cs_real_t  t_eval 
)

Compute the value of a property at the cell center Version using a cs_cell_mesh_t structure.

Parameters
[in]cmpointer to a cs_cell_mesh_t structure
[in]ptypointer to a cs_property_t structure
[in]t_evalphysical time at which one evaluates the term
Returns
the value of the property for the given cell

Variable Documentation

◆ _err_empty_pty

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

◆ _n_max_properties

int _n_max_properties = 0
static

◆ _n_properties

int _n_properties = 0
static

◆ _properties

cs_property_t** _properties = NULL
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