![]() |
programmer's documentation
|
#include "cs_defs.h"
#include <assert.h>
#include <ctype.h>
#include <float.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <bft_mem.h>
#include <bft_printf.h>
#include "cs_base.h"
#include "cs_cdo.h"
#include "cs_cdovb_scaleq.h"
#include "cs_cdovcb_scaleq.h"
#include "cs_cdofb_scaleq.h"
#include "cs_evaluate.h"
#include "cs_sles.h"
#include "cs_mesh_location.h"
#include "cs_post.h"
#include "cs_timer_stats.h"
#include "cs_equation.h"
Typedefs | |
typedef void *( | cs_equation_init_builder_t) (const cs_equation_param_t *eqp, const cs_mesh_t *mesh) |
Initialize a builder structure. More... | |
typedef void( | cs_equation_compute_source_t) (void *builder) |
Compute the contribution of source terms for the current time. More... | |
typedef void( | cs_equation_build_system_t) (const cs_mesh_t *mesh, const cs_real_t *field_val, double dt_cur, void *builder, cs_real_t **rhs, cs_sla_matrix_t **sla_mat) |
Build a linear system within the CDO framework. More... | |
typedef void( | cs_equation_update_field_t) (const cs_real_t *solu, const cs_real_t *rhs, void *builder, cs_real_t *field_val) |
Store solution(s) of the linear system into a field structure Update extra-field values if required (for hybrid discretization) More... | |
typedef void( | cs_equation_extra_op_t) (const char *eqname, const cs_field_t *field, void *builder) |
Extra-operation related to this equation. More... | |
typedef double *( | cs_equation_get_extra_values_t) (const void *builder) |
Get the computed values at a different location than that of the field associated to this equation. More... | |
typedef void( | cs_equation_flux_plane_t) (const void *builder, const cs_real_t *f_vals, int ml_id, const cs_real_t direction[], double *diff_flux, double *conv_flux) |
Compute the diffusive and convective flux across a list of faces. More... | |
typedef void( | cs_equation_cell_difflux_t) (const cs_real_t *f_vals, void *builder, cs_real_t *d_flux) |
Cellwise computation of the diffusive flux across all faces. Primal or dual faces are considered according to the space scheme. More... | |
typedef void *( | cs_equation_free_builder_t) (void *builder) |
Destroy a builder structure. More... | |
typedef void( | cs_equation_free_sysmat_t) (void *builder, cs_sla_matrix_t *matrix) |
Destroy a cs_sla_matrix_t related to the system to solve. More... | |
Functions | |
static void | _check_ml_name (const char *ml_name, int *p_ml_id) |
Given its name, get the id related to a cs_mesh_location_t structure. More... | |
static void | _initialize_field_from_ic (cs_equation_t *eq) |
Set the initial values for the variable related to an equation. More... | |
cs_equation_t * | cs_equation_create (const char *eqname, const char *varname, cs_equation_type_t eqtype, cs_param_var_type_t vartype, cs_param_bc_type_t default_bc) |
Define and initialize a new structure to store parameters related to an equation. More... | |
cs_equation_t * | cs_equation_free (cs_equation_t *eq) |
Destroy a cs_equation_t structure. More... | |
void | cs_equation_summary (const cs_equation_t *eq) |
Summary of a cs_equation_t structure. More... | |
void | cs_equation_set_timer_stats (cs_equation_t *eq) |
Create timer statistics structures to enable a "home-made" profiling. More... | |
void | cs_equation_last_setup (cs_equation_t *eq) |
Assign a set of pointer functions for managing the cs_equation_t structure during the computation. More... | |
void | cs_equation_set_param (cs_equation_t *eq, cs_equation_key_t key, const char *keyval) |
Set a parameter in a cs_equation_t structure attached to keyname. More... | |
void | cs_equation_link (cs_equation_t *eq, const char *keyword, void *pointer) |
Associate a material property or an advection field with an equation for a given term (diffusion, time, convection) More... | |
void | cs_equation_set_ic (cs_equation_t *eq, const char *ml_name, const char *def_key, void *val) |
Define the initial condition of the unknown related to this equation This definition can be done mesh location by mesh location Available types of definition are: "value" and "analytic". More... | |
void | cs_equation_add_bc (cs_equation_t *eq, const char *ml_name, const char *bc_key, const char *def_key, const void *val) |
Define and initialize a new structure to store parameters related to an equation bc_key among "dirichlet", "neumann" or "robin" def_key among "value", "analytic", "user". More... | |
void | cs_equation_add_linear_reaction (cs_equation_t *eq, cs_property_t *property, const char *r_name) |
Define and initialize a new structure to store parameters related to a reaction term. More... | |
void | cs_equation_add_gravity_source_term (cs_equation_t *eq, int ml_id, cs_desc_t array_desc, cs_real_t *array_values) |
Define and initialize a new structure to store parameters related to a source term def_key among "value", "analytic", "user"... More... | |
void | cs_equation_add_source_term_by_val (cs_equation_t *eq, const char *st_name, const char *ml_name, const void *val) |
Define and initialize by value a new structure to store parameters related to a source term defined by a user. More... | |
void | cs_equation_add_source_term_by_analytic (cs_equation_t *eq, const char *st_name, const char *ml_name, cs_analytic_func_t *ana) |
Define and initialize by an analytical function a new structure related to a source term defined by a user. More... | |
void | cs_equation_set_source_term_quadrature (cs_equation_t *eq, const char *st_name, cs_quadra_type_t quad_type) |
Set the type of quadrature to use for computing a source term If st_name is NULL, all source terms of the given equation are set. More... | |
void | cs_equation_set_source_term_reduction (cs_equation_t *eq, const char *st_name, cs_source_term_reduction_t type) |
Set the type of quadrature to use for computing a source term If st_name is NULL, all source terms of the given equation are set. More... | |
void | cs_equation_create_field (cs_equation_t *eq) |
Create a field structure related to this cs_equation_t structure to an equation. More... | |
void | cs_equation_init_system (const cs_mesh_t *mesh, cs_equation_t *eq) |
Initialize the values of a field according to the initial condition related to its equation. More... | |
bool | cs_equation_needs_build (const cs_equation_t *eq) |
Check if one has to build the linear system. More... | |
void | cs_equation_build_system (const cs_mesh_t *mesh, const cs_time_step_t *time_step, double dt_cur, cs_equation_t *eq) |
Build the linear system for this equation. More... | |
void | cs_equation_solve (cs_equation_t *eq, bool do_logcvg) |
Solve the linear system for this equation. More... | |
void | cs_equation_extra_op (const cs_equation_t *eq, const cs_time_step_t *ts, double dt) |
Predefined extra-operations related to this equation. More... | |
bool | cs_equation_is_steady (const cs_equation_t *eq) |
Return true is the given equation is steady otherwise false. More... | |
const char * | cs_equation_get_name (const cs_equation_t *eq) |
Return the name related to the given cs_equation_t structure to an equation. More... | |
cs_field_t * | cs_equation_get_field (const cs_equation_t *eq) |
Return the field structure associated to a cs_equation_t structure. More... | |
cs_flag_t | cs_equation_get_flag (const cs_equation_t *eq) |
Return the flag associated to an equation. More... | |
const cs_equation_param_t * | cs_equation_get_param (const cs_equation_t *eq) |
Return the cs_equation_param_t structure associated to a cs_equation_t structure. More... | |
cs_property_t * | cs_equation_get_diffusion_property (const cs_equation_t *eq) |
Return a pointer to the cs_property_t structure associated to the diffusion term for this equation (NULL if not activated). More... | |
cs_property_t * | cs_equation_get_time_property (const cs_equation_t *eq) |
Return a pointer to the cs_property_t structure associated to the unsteady term for this equation (NULL if not activated). More... | |
cs_property_t * | cs_equation_get_reaction_property (const cs_equation_t *eq, const char *r_name) |
Return a pointer to the cs_property_t structure associated to the reaction term called r_name and related to this equation. More... | |
cs_space_scheme_t | cs_equation_get_space_scheme (const cs_equation_t *eq) |
Return the type of numerical scheme used for the discretization in space. More... | |
cs_param_var_type_t | cs_equation_get_var_type (const cs_equation_t *eq) |
Return the type of variable solved by this equation. More... | |
cs_equation_type_t | cs_equation_get_type (const cs_equation_t *eq) |
Return the type of equation for the given equation structure. More... | |
const cs_real_t * | cs_equation_get_face_values (const cs_equation_t *eq) |
Get the values at each face of the mesh for the field unknowns related to this equation. More... | |
const cs_real_t * | cs_equation_get_cell_values (const cs_equation_t *eq) |
Get the values at each cell centers for the field unknowns related to this equation. More... | |
void | cs_equation_compute_flux_across_plane (const cs_equation_t *eq, const char *ml_name, const cs_real_3_t direction, cs_real_t *diff_flux, cs_real_t *conv_flux) |
Compute the diffusive and convective flux accross a plane defined by a mesh location structure attached to the name ml_name. More... | |
void | cs_equation_compute_diff_flux (const cs_equation_t *eq, cs_real_t *diff_flux) |
Cellwise computation of the diffusive flux across all cell faces. Primal or dual faces are considered according to the space scheme. More... | |
Variables | |
static const char | _err_empty_eq [] |
typedef void( cs_equation_build_system_t) (const cs_mesh_t *mesh, const cs_real_t *field_val, double dt_cur, void *builder, cs_real_t **rhs, cs_sla_matrix_t **sla_mat) |
Build a linear system within the CDO framework.
[in] | m | pointer to a cs_mesh_t structure |
[in] | field_val | pointer to the current value of the field |
[in] | dt_cur | current value of the time step |
[in,out] | builder | pointer to builder structure |
[in,out] | rhs | pointer to a right-hand side array pointer |
[in,out] | sla_mat | pointer to cs_sla_matrix_t structure pointer |
typedef void( cs_equation_cell_difflux_t) (const cs_real_t *f_vals, void *builder, cs_real_t *d_flux) |
Cellwise computation of the diffusive flux across all faces. Primal or dual faces are considered according to the space scheme.
[in] | builder | pointer to a builder structure |
[in] | f_vals | pointer to an array of field values |
[in,out] | diff_flux | pointer to the value of the diffusive flux |
typedef void( cs_equation_compute_source_t) (void *builder) |
Compute the contribution of source terms for the current time.
[in,out] | builder | pointer to builder structure |
typedef void( cs_equation_extra_op_t) (const char *eqname, const cs_field_t *field, void *builder) |
Extra-operation related to this equation.
[in] | eqname | name of the equation |
[in] | field | pointer to a field structure |
[in,out] | builder | pointer to builder structure |
typedef void( cs_equation_flux_plane_t) (const void *builder, const cs_real_t *f_vals, int ml_id, const cs_real_t direction[], double *diff_flux, double *conv_flux) |
Compute the diffusive and convective flux across a list of faces.
[in] | builder | pointer to a builder structure |
[in] | f_vals | pointer to an array of field values |
[in] | ml_id | id related to a cs_mesh_location_t struct. |
[in] | direction | indicate in which direction flux is > 0 |
[in,out] | diff_flux | pointer to the value of the diffusive flux |
[in,out] | conv_flux | pointer to the value of the convective flux |
typedef void*( cs_equation_free_builder_t) (void *builder) |
Destroy a builder structure.
[in,out] | builder | pointer to a builder structure |
typedef void( cs_equation_free_sysmat_t) (void *builder, cs_sla_matrix_t *matrix) |
Destroy a cs_sla_matrix_t related to the system to solve.
[in,out] | builder | pointer to a builder structure |
[in,out] | matrix | pointer to a cs_sla_matrix_t structure |
typedef double*( cs_equation_get_extra_values_t) (const void *builder) |
Get the computed values at a different location than that of the field associated to this equation.
[in] | builder | pointer to a builder structure |
typedef void*( cs_equation_init_builder_t) (const cs_equation_param_t *eqp, const cs_mesh_t *mesh) |
Initialize a builder structure.
[in] | eq | pointer to a cs_equation_param_t structure |
[in] | mesh | pointer to a cs_mesh_t structure |
typedef void( cs_equation_update_field_t) (const cs_real_t *solu, const cs_real_t *rhs, void *builder, cs_real_t *field_val) |
Store solution(s) of the linear system into a field structure Update extra-field values if required (for hybrid discretization)
[in] | solu | solution array |
[in] | rhs | rhs associated to this solution array |
[in,out] | builder | pointer to builder structure |
[in,out] | field_val | pointer to the current value of the field |
|
static |
Given its name, get the id related to a cs_mesh_location_t structure.
[in] | ml_name | name of the location |
[in,out] | p_ml_id | pointer on the id of the related mesh location |
|
static |
Set the initial values for the variable related to an equation.
[in,out] | eq | pointer to a cs_equation_t structure |
void cs_equation_add_bc | ( | cs_equation_t * | eq, |
const char * | ml_name, | ||
const char * | bc_key, | ||
const char * | def_key, | ||
const void * | val | ||
) |
Define and initialize a new structure to store parameters related to an equation bc_key among "dirichlet", "neumann" or "robin" def_key among "value", "analytic", "user".
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | ml_name | name of the related mesh location |
[in] | bc_key | type of boundary condition to add |
[in] | def_key | way of defining the value of the bc |
[in] | val | pointer to the value |
void cs_equation_add_gravity_source_term | ( | cs_equation_t * | eq, |
int | ml_id, | ||
cs_desc_t | array_desc, | ||
cs_real_t * | array_values | ||
) |
Define and initialize a new structure to store parameters related to a source term def_key among "value", "analytic", "user"...
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | ml_id | id related to a mesh location |
[in] | array_desc | short description of this array (mask of bits) |
[in] | array_values | pointer to the array values |
void cs_equation_add_linear_reaction | ( | cs_equation_t * | eq, |
cs_property_t * | property, | ||
const char * | r_name | ||
) |
Define and initialize a new structure to store parameters related to a reaction term.
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | property | pointer to a cs_property_t struct. |
[in] | r_name | name of the reaction term (optional, i.e. NULL) |
void cs_equation_add_source_term_by_analytic | ( | cs_equation_t * | eq, |
const char * | st_name, | ||
const char * | ml_name, | ||
cs_analytic_func_t * | ana | ||
) |
Define and initialize by an analytical function a new structure related to a source term defined by a user.
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | st_name | name of the source term or NULL |
[in] | ml_name | name of the related mesh location |
[in] | ana | pointer to an analytical function |
void cs_equation_add_source_term_by_val | ( | cs_equation_t * | eq, |
const char * | st_name, | ||
const char * | ml_name, | ||
const void * | val | ||
) |
Define and initialize by value a new structure to store parameters related to a source term defined by a user.
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | st_name | name of the source term or NULL |
[in] | ml_name | name of the related mesh location |
[in] | val | pointer to the value |
void cs_equation_build_system | ( | const cs_mesh_t * | mesh, |
const cs_time_step_t * | time_step, | ||
double | dt_cur, | ||
cs_equation_t * | eq | ||
) |
Build the linear system for this equation.
[in] | m | pointer to a cs_mesh_t structure |
[in] | time_step | pointer to a time step structure |
[in] | dt_cur | value of the current time step |
[in,out] | eq | pointer to a cs_equation_t structure |
void cs_equation_compute_diff_flux | ( | const cs_equation_t * | eq, |
cs_real_t * | diff_flux | ||
) |
Cellwise computation of the diffusive flux across all cell faces. Primal or dual faces are considered according to the space scheme.
[in] | eq | pointer to a cs_equation_t structure |
[in,out] | diff_flux | value of the diffusive flux |
void cs_equation_compute_flux_across_plane | ( | const cs_equation_t * | eq, |
const char * | ml_name, | ||
const cs_real_3_t | direction, | ||
cs_real_t * | diff_flux, | ||
cs_real_t * | conv_flux | ||
) |
Compute the diffusive and convective flux accross a plane defined by a mesh location structure attached to the name ml_name.
[in] | eq | pointer to a cs_equation_t structure |
[in] | ml_name | name of the related mesh location |
[in] | direction | vector indicating in which direction flux is > 0 |
[in,out] | diff_flux | value of the diffusive part of the flux |
[in,out] | conv_flux | value of the convective part of the flux |
cs_equation_t* cs_equation_create | ( | const char * | eqname, |
const char * | varname, | ||
cs_equation_type_t | eqtype, | ||
cs_param_var_type_t | vartype, | ||
cs_param_bc_type_t | default_bc | ||
) |
Define and initialize a new structure to store parameters related to an equation.
[in] | eqname | name of the equation |
[in] | varname | name of the variable associated to this equation |
[in] | eqtype | type of equation (user, predefined...) |
[in] | vartype | type of variable (scalar, vector, tensor...) |
[in] | default_bc | type of boundary condition set by default |
void cs_equation_create_field | ( | cs_equation_t * | eq | ) |
Create a field structure related to this cs_equation_t structure to an equation.
[in,out] | eq | pointer to a cs_equation_t structure |
void cs_equation_extra_op | ( | const cs_equation_t * | eq, |
const cs_time_step_t * | ts, | ||
double | dt | ||
) |
Predefined extra-operations related to this equation.
[in] | eq | pointer to a cs_equation_t structure |
[in] | ts | pointer to a cs_time_step_t struct. |
[in] | dt | value of the cureent time step |
cs_equation_t* cs_equation_free | ( | cs_equation_t * | eq | ) |
Destroy a cs_equation_t structure.
[in,out] | eq | pointer to a cs_equation_t structure |
const cs_real_t* cs_equation_get_cell_values | ( | const cs_equation_t * | eq | ) |
Get the values at each cell centers for the field unknowns related to this equation.
[in] | eq | pointer to a cs_equation_t structure |
cs_property_t* cs_equation_get_diffusion_property | ( | const cs_equation_t * | eq | ) |
Return a pointer to the cs_property_t structure associated to the diffusion term for this equation (NULL if not activated).
Return a pointer to the cs_property_t structure associated to the diffusion term for this equation.
[in] | eq | pointer to a cs_equation_t structure |
const cs_real_t* cs_equation_get_face_values | ( | const cs_equation_t * | eq | ) |
Get the values at each face of the mesh for the field unknowns related to this equation.
[in] | eq | pointer to a cs_equation_t structure |
cs_field_t* cs_equation_get_field | ( | const cs_equation_t * | eq | ) |
Return the field structure associated to a cs_equation_t structure.
[in] | eq | pointer to a cs_equation_t structure |
cs_flag_t cs_equation_get_flag | ( | const cs_equation_t * | eq | ) |
Return the flag associated to an equation.
[in] | eq | pointer to a cs_equation_t structure |
const char* cs_equation_get_name | ( | const cs_equation_t * | eq | ) |
Return the name related to the given cs_equation_t structure to an equation.
[in] | eq | pointer to a cs_equation_t structure |
const cs_equation_param_t* cs_equation_get_param | ( | const cs_equation_t * | eq | ) |
Return the cs_equation_param_t structure associated to a cs_equation_t structure.
[in] | eq | pointer to a cs_equation_t structure |
cs_property_t* cs_equation_get_reaction_property | ( | const cs_equation_t * | eq, |
const char * | r_name | ||
) |
Return a pointer to the cs_property_t structure associated to the reaction term called r_name and related to this equation.
[in] | eq | pointer to a cs_equation_t structure |
cs_space_scheme_t cs_equation_get_space_scheme | ( | const cs_equation_t * | eq | ) |
Return the type of numerical scheme used for the discretization in space.
[in] | eq | pointer to a cs_equation_t structure |
cs_property_t* cs_equation_get_time_property | ( | const cs_equation_t * | eq | ) |
Return a pointer to the cs_property_t structure associated to the unsteady term for this equation (NULL if not activated).
Return a pointer to the cs_property_t structure associated to the unsteady term for this equation.
[in] | eq | pointer to a cs_equation_t structure |
cs_equation_type_t cs_equation_get_type | ( | const cs_equation_t * | eq | ) |
Return the type of equation for the given equation structure.
[in] | eq | pointer to a cs_equation_t structure |
cs_param_var_type_t cs_equation_get_var_type | ( | const cs_equation_t * | eq | ) |
Return the type of variable solved by this equation.
[in] | eq | pointer to a cs_equation_t structure |
void cs_equation_init_system | ( | const cs_mesh_t * | mesh, |
cs_equation_t * | eq | ||
) |
Initialize the values of a field according to the initial condition related to its equation.
[in] | mesh | pointer to the mesh structure |
[in,out] | eq | pointer to a cs_equation_t structure |
bool cs_equation_is_steady | ( | const cs_equation_t * | eq | ) |
Return true is the given equation is steady otherwise false.
[in] | eq | pointer to a cs_equation_t structure |
void cs_equation_last_setup | ( | cs_equation_t * | eq | ) |
Assign a set of pointer functions for managing the cs_equation_t structure during the computation.
[in,out] | eq | pointer to a cs_equation_t structure |
void cs_equation_link | ( | cs_equation_t * | eq, |
const char * | keyword, | ||
void * | pointer | ||
) |
Associate a material property or an advection field with an equation for a given term (diffusion, time, convection)
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | keyword | "time", "diffusion", "advection" |
[in] | pointer | pointer to a given structure |
bool cs_equation_needs_build | ( | const cs_equation_t * | eq | ) |
Check if one has to build the linear system.
[in] | eq | pointer to a cs_equation_t structure |
void cs_equation_set_ic | ( | cs_equation_t * | eq, |
const char * | ml_name, | ||
const char * | def_key, | ||
void * | val | ||
) |
Define the initial condition of the unknown related to this equation This definition can be done mesh location by mesh location Available types of definition are: "value" and "analytic".
Define the initial condition of the unknown related to this equation This definition can be done by mesh location Available types of definition are: "value" and "analytic".
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | ml_name | name of the associated mesh location (if NULL or "" all entities are considered) |
[in] | def_key | way of defining the value of the BC |
[in] | val | pointer to the value |
void cs_equation_set_param | ( | cs_equation_t * | eq, |
cs_equation_key_t | key, | ||
const char * | keyval | ||
) |
Set a parameter in a cs_equation_t structure attached to keyname.
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | key | key related to the member of eq to set |
[in] | keyval | accessor to the value to set |
void cs_equation_set_source_term_quadrature | ( | cs_equation_t * | eq, |
const char * | st_name, | ||
cs_quadra_type_t | quad_type | ||
) |
Set the type of quadrature to use for computing a source term If st_name is NULL, all source terms of the given equation are set.
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | st_name | name of the source term |
[in] | quad_type | type of quadrature to use |
void cs_equation_set_source_term_reduction | ( | cs_equation_t * | eq, |
const char * | st_name, | ||
cs_source_term_reduction_t | type | ||
) |
Set the type of quadrature to use for computing a source term If st_name is NULL, all source terms of the given equation are set.
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | st_name | name of the source term |
[in] | type | type of reduction to apply |
void cs_equation_set_timer_stats | ( | cs_equation_t * | eq | ) |
Create timer statistics structures to enable a "home-made" profiling.
[in,out] | eq | pointer to a cs_equation_t structure |
void cs_equation_solve | ( | cs_equation_t * | eq, |
bool | do_logcvg | ||
) |
Solve the linear system for this equation.
[in,out] | eq | pointer to a cs_equation_t structure |
[in] | do_logcvg | output information on convergence or not |
void cs_equation_summary | ( | const cs_equation_t * | eq | ) |
Summary of a cs_equation_t structure.
[in] | eq | pointer to a cs_equation_t structure |