![]() |
programmer's documentation
|
#include "cs_defs.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <assert.h>
#include <string.h>
#include <bft_mem.h>
#include "cs_cdo_advection.h"
#include "cs_cdo_bc.h"
#include "cs_cdo_diffusion.h"
#include "cs_cdo_local.h"
#include "cs_cdo_time.h"
#include "cs_equation_common.h"
#include "cs_hodge.h"
#include "cs_log.h"
#include "cs_math.h"
#include "cs_mesh_location.h"
#include "cs_param.h"
#include "cs_post.h"
#include "cs_quadrature.h"
#include "cs_reco.h"
#include "cs_scheme_geometry.h"
#include "cs_search.h"
#include "cs_source_term.h"
#include "cs_timer.h"
#include "cs_cdovcb_scaleq.h"
Macros | |
#define | CS_CDOVCB_SCALEQ_DBG 0 |
#define | CS_CDOVCB_SCALEQ_MODULO 100 |
#define | _dp3 cs_math_3_dot_product |
Functions | |
static void | _get_f2v (short int f, const cs_cell_mesh_t *cm, short int *n_vf, short int *v_ids) |
Retrieve the list of vertices attached to a face. More... | |
static void | _init_cell_structures (const cs_flag_t cell_flag, const cs_cell_mesh_t *cm, const cs_equation_param_t *eqp, const cs_equation_builder_t *eqb, const cs_cdovcb_scaleq_t *eqd, const cs_real_t dir_values[], const short int neu_tags[], const cs_real_t field_tn[], cs_cell_sys_t *csys, cs_cell_bc_t *cbc, cs_cell_builder_t *cb) |
Initialize the local structure for the current cell. More... | |
static void | _condense_and_store (const cs_adjacency_t *c2v, cs_cdovcb_scaleq_t *eqd, cs_cell_builder_t *cb, cs_cell_sys_t *csys) |
Proceed to a static condensation of the local system and keep information inside the builder to be able to compute the values at cell centers. More... | |
static void | _set_cip_coef (const cs_equation_param_t *eqp) |
Update the value of stabilization coefficient in given situation. More... | |
void | cs_cdovcb_scaleq_set_shared_pointers (const cs_cdo_quantities_t *quant, const cs_cdo_connect_t *connect, const cs_time_step_t *time_step) |
Set shared pointers from the main domain members. More... | |
void | cs_cdovcb_scaleq_initialize (void) |
Allocate work buffer and general structures related to CDO vertex+cell-based schemes. More... | |
void | cs_cdovcb_scaleq_finalize (void) |
Free work buffer and general structure related to CDO vertex-based schemes. More... | |
void * | cs_cdovcb_scaleq_init_data (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb) |
Initialize a cs_cdovb_scaleq_t structure storing data useful for managing such a scheme. More... | |
void * | cs_cdovcb_scaleq_free_data (void *data) |
Destroy a cs_cdovcb_scaleq_t structure. More... | |
void | cs_cdovcb_scaleq_compute_source (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data) |
Compute the contributions of source terms (store inside data) More... | |
void | cs_cdovcb_scaleq_initialize_system (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data, cs_matrix_t **system_matrix, cs_real_t **system_rhs) |
Create the matrix of the current algebraic system. Allocate and initialize the right-hand side associated to the given data structure. More... | |
void | cs_cdovcb_scaleq_build_system (const cs_mesh_t *mesh, const cs_real_t *field_val, double dt_cur, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data, cs_real_t *rhs, cs_matrix_t *matrix) |
Build the linear system arising from a scalar convection/diffusion equation with a CDO vertex+cell-based scheme. One works cellwise and then process to the assembly. More... | |
void | cs_cdovcb_scaleq_update_field (const cs_real_t *solu, const cs_real_t *rhs, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data, 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... | |
double * | cs_cdovcb_scaleq_get_cell_values (const void *data) |
Get the computed values at cell centers (DoF used in the linear system are located at primal vertices and field related to the structure equation is also attached to primal vertices. More... | |
void | cs_cdovcb_scaleq_compute_flux_across_plane (const cs_real_t normal[], const cs_real_t *pdi, int ml_id, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data, double *d_flux, double *c_flux) |
Compute the diffusive and convective flux across a list of faces. More... | |
void | cs_cdovcb_scaleq_cellwise_diff_flux (const cs_real_t *values, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data, cs_flag_t location, cs_real_t *diff_flux) |
Cellwise computation of the diffusive flux. More... | |
void | cs_cdovcb_scaleq_vtx_gradient (const cs_real_t *v_values, cs_equation_builder_t *eqb, void *data, cs_real_t *v_gradient) |
Cellwise computation of the discrete gradient at vertices. More... | |
void | cs_cdovcb_scaleq_extra_op (const char *eqname, const cs_field_t *field, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data) |
Predefined extra-operations related to this equation. More... | |
Variables | |
static cs_cell_sys_t ** | cs_cdovcb_cell_sys = NULL |
static cs_cell_bc_t ** | cs_cdovcb_cell_bc = NULL |
static cs_cell_builder_t ** | cs_cdovcb_cell_bld = NULL |
static const cs_cdo_quantities_t * | cs_shared_quant |
static const cs_cdo_connect_t * | cs_shared_connect |
static const cs_time_step_t * | cs_shared_time_step |
#define _dp3 cs_math_3_dot_product |
#define CS_CDOVCB_SCALEQ_DBG 0 |
#define CS_CDOVCB_SCALEQ_MODULO 100 |
|
static |
Proceed to a static condensation of the local system and keep information inside the builder to be able to compute the values at cell centers.
[in] | c2v | pointer to a cs_adjacency_t structure |
[in,out] | builder | pointer to a cs_cdovcb_scaleq_t structure |
[in,out] | cb | pointer to a cs_cell_builder_t structure |
[in,out] | csys | pointer to a cs_cell_sys_t structure |
|
inlinestatic |
Retrieve the list of vertices attached to a face.
[in] | f | face id in the cell numbering |
[in] | cm | pointer to a cs_cell_mesh_t structure |
[in,out] | n_vf | pointer of pointer to a cellwise view of the mesh |
[in,out] | v_ids | list of vertex ids in the cell numbering |
|
static |
Initialize the local structure for the current cell.
[in] | cell_flag | flag related to the current cell |
[in] | cm | pointer to a cellwise view of the mesh |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in] | eqb | pointer to a cs_equation_builder_t structure |
[in] | eqd | pointer to a cs_cdovb_scaleq_t structure |
[in] | dir_values | Dirichlet values associated to each vertex |
[in] | neu_tags | Definition id related to each Neumann face |
[in] | field_tn | values of the field at the last computed time |
[in,out] | csys | pointer to a cellwise view of the system |
[in,out] | cbc | pointer to a cellwise view of the BCs |
[in,out] | cb | pointer to a cellwise builder |
|
static |
Update the value of stabilization coefficient in given situation.
[in] | eqp | pointer to a cs_equation_param_t structure |
void cs_cdovcb_scaleq_build_system | ( | const cs_mesh_t * | mesh, |
const cs_real_t * | field_val, | ||
double | dt_cur, | ||
const cs_equation_param_t * | eqp, | ||
cs_equation_builder_t * | eqb, | ||
void * | data, | ||
cs_real_t * | rhs, | ||
cs_matrix_t * | matrix | ||
) |
Build the linear system arising from a scalar convection/diffusion equation with a CDO vertex+cell-based scheme. One works cellwise and then process to the assembly.
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | field_val | pointer to the current value of the vertex field |
[in] | dt_cur | current value of the time step |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to cs_cdovcb_scaleq_t structure |
[in,out] | rhs | right-hand side |
[in,out] | matrix | pointer to cs_matrix_t structure to compute |
void cs_cdovcb_scaleq_cellwise_diff_flux | ( | const cs_real_t * | values, |
const cs_equation_param_t * | eqp, | ||
cs_equation_builder_t * | eqb, | ||
void * | data, | ||
cs_flag_t | location, | ||
cs_real_t * | diff_flux | ||
) |
Cellwise computation of the diffusive flux.
[in] | values | discrete values for the potential |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to data specific for this scheme |
[in,out] | location | where the flux is defined |
[in,out] | diff_flux | value of the diffusive flux |
void cs_cdovcb_scaleq_compute_flux_across_plane | ( | const cs_real_t | normal[], |
const cs_real_t * | pdi, | ||
int | ml_id, | ||
const cs_equation_param_t * | eqp, | ||
cs_equation_builder_t * | eqb, | ||
void * | data, | ||
double * | d_flux, | ||
double * | c_flux | ||
) |
Compute the diffusive and convective flux across a list of faces.
[in] | normal | indicate in which direction flux is > 0 |
[in] | pdi | pointer to an array of field values |
[in] | ml_id | id related to a cs_mesh_location_t struct. |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to data specific for this scheme |
[in,out] | d_flux | pointer to the value of the diffusive flux |
[in,out] | c_flux | pointer to the value of the convective flux |
void cs_cdovcb_scaleq_compute_source | ( | const cs_equation_param_t * | eqp, |
cs_equation_builder_t * | eqb, | ||
void * | data | ||
) |
Compute the contributions of source terms (store inside data)
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to a cs_cdovcb_scaleq_t structure |
void cs_cdovcb_scaleq_extra_op | ( | const char * | eqname, |
const cs_field_t * | field, | ||
const cs_equation_param_t * | eqp, | ||
cs_equation_builder_t * | eqb, | ||
void * | data | ||
) |
Predefined extra-operations related to this equation.
[in] | eqname | name of the equation |
[in] | field | pointer to a field structure |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to cs_cdovb_scaleq_t structure |
void cs_cdovcb_scaleq_finalize | ( | void | ) |
Free work buffer and general structure related to CDO vertex-based schemes.
Free buffers and generic structures related to CDO vertex+cell-based schemes.
void* cs_cdovcb_scaleq_free_data | ( | void * | data | ) |
Destroy a cs_cdovcb_scaleq_t structure.
[in,out] | data | pointer to a cs_cdovcb_scaleq_t structure |
double* cs_cdovcb_scaleq_get_cell_values | ( | const void * | data | ) |
Get the computed values at cell centers (DoF used in the linear system are located at primal vertices and field related to the structure equation is also attached to primal vertices.
[in] | data | pointer to a data structure |
void* cs_cdovcb_scaleq_init_data | ( | const cs_equation_param_t * | eqp, |
cs_equation_builder_t * | eqb | ||
) |
Initialize a cs_cdovb_scaleq_t structure storing data useful for managing such a scheme.
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
void cs_cdovcb_scaleq_initialize | ( | void | ) |
Allocate work buffer and general structures related to CDO vertex+cell-based schemes.
void cs_cdovcb_scaleq_initialize_system | ( | const cs_equation_param_t * | eqp, |
cs_equation_builder_t * | eqb, | ||
void * | data, | ||
cs_matrix_t ** | system_matrix, | ||
cs_real_t ** | system_rhs | ||
) |
Create the matrix of the current algebraic system. Allocate and initialize the right-hand side associated to the given data structure.
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to cs_cdovcb_scaleq_t structure |
[in,out] | system_matrix | pointer of pointer to a cs_matrix_t struct. |
[in,out] | system_rhs | pointer of pointer to an array of double |
void cs_cdovcb_scaleq_set_shared_pointers | ( | const cs_cdo_quantities_t * | quant, |
const cs_cdo_connect_t * | connect, | ||
const cs_time_step_t * | time_step | ||
) |
Set shared pointers from the main domain members.
[in] | quant | additional mesh quantities struct. |
[in] | connect | pointer to a cs_cdo_connect_t struct. |
[in] | time_step | pointer to a time step structure |
void cs_cdovcb_scaleq_update_field | ( | const cs_real_t * | solu, |
const cs_real_t * | rhs, | ||
const cs_equation_param_t * | eqp, | ||
cs_equation_builder_t * | eqb, | ||
void * | data, | ||
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] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to data structure |
[in,out] | field_val | pointer to the current value of the field |
void cs_cdovcb_scaleq_vtx_gradient | ( | const cs_real_t * | v_values, |
cs_equation_builder_t * | eqb, | ||
void * | data, | ||
cs_real_t * | v_gradient | ||
) |
Cellwise computation of the discrete gradient at vertices.
[in] | v_values | discrete values for the potential at vertices |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | data | pointer to data structure |
[in,out] | v_gradient | gradient at vertices |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |