![]() |
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 <bft_printf.h>
#include "cs_cdo_advection.h"
#include "cs_cdo_bc.h"
#include "cs_cdo_diffusion.h"
#include "cs_cdo_scheme_geometry.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_post.h"
#include "cs_quadrature.h"
#include "cs_reco.h"
#include "cs_search.h"
#include "cs_source_term.h"
#include "cs_cdovcb_scaleq.h"
Macros | |
#define | CS_CDOVCB_SCALEQ_DBG 0 |
#define | _dp3 cs_math_3_dot_product |
Functions | |
static void | _add_source_terms (cs_cdovcb_scaleq_t *b, cs_real_t full_rhs[]) |
Compute the contribution of source terms to the rhs for this time step. More... | |
static void | _build_hvc_conf (cs_cdovcb_scaleq_t *b) |
Define a discrete Hodge VC conforming op. More... | |
static void | _compute_dir_values (const cs_mesh_t *mesh, const cs_real_t *field_val, const cs_cdovcb_scaleq_t *b) |
Compute the values of the Dirichlet BCs. More... | |
static void | _apply_time_scheme (double tpty_val, const cs_real_t *vtx_val, const cs_cell_mesh_t *cm, const cs_locmat_t *loc_hconf, cs_cdovcb_scaleq_t *b, cs_cdo_locsys_t *loc_sys) |
Apply the time discretization to the local system. More... | |
static void | _condense_and_store (cs_cdovcb_scaleq_t *b, cs_cdo_locsys_t *locsys, cs_locmat_t *condmat) |
Proceed to a static condensation of the local system and keep information inside hydrid_storage to be able to compute the values at cell centers rhs stored in cs_cell_sys is also updated. More... | |
static void | _set_cip_coef (const cs_adv_field_t *adv) |
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 (const cs_equation_param_t *eqp, const cs_mesh_t *mesh) |
Initialize a cs_cdovcb_scaleq_t structure. More... | |
void * | cs_cdovcb_scaleq_free (void *builder) |
Destroy a cs_cdovcb_scaleq_t structure. More... | |
void | cs_cdovcb_scaleq_free_sysmat (void *builder, cs_sla_matrix_t *matrix) |
Destroy a cs_sla_matrix_t related to the system to solve. More... | |
void | cs_cdovcb_scaleq_compute_source (void *builder) |
Compute the contributions of source terms (store inside builder) More... | |
void | cs_cdovcb_scaleq_build_system (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 the linear system arising from a scalar convection/diffusion equation with a CDO vertex-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, 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... | |
double * | cs_cdovcb_scaleq_get_cell_values (const void *builder) |
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 void *builder, const cs_real_t *pdi, 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... | |
void | cs_cdovcb_scaleq_cellwise_diff_flux (const cs_real_t *values, void *builder, cs_real_t *diff_flux) |
Cellwise computation of the diffusive flux across all dual faces. More... | |
void | cs_cdovcb_scaleq_extra_op (const char *eqname, const cs_field_t *field, void *builder) |
Predefined extra-operations related to this equation. More... | |
Variables | |
static double | cs_cdovcb_threshold = 1e-12 |
static cs_locmat_t * | cs_cell_condmat = NULL |
static cs_cdo_locsys_t ** | cs_cdovcb_cell_systems = NULL |
static cs_sla_hmatrix_t * | cs_cdovcb_hconf = 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 |
static const cs_flag_t | cs_cdovcb_cmflag |
#define _dp3 cs_math_3_dot_product |
#define CS_CDOVCB_SCALEQ_DBG 0 |
|
static |
Compute the contribution of source terms to the rhs for this time step.
[in,out] | b | pointer to a cs_cdovb_scaleq_t structure |
[in,out] | full_rhs | right-hand side |
|
static |
Apply the time discretization to the local system.
[in,out] | tpty_val | current value of the time property |
[in] | vtx_val | pointer to the current value of the field |
[in] | cm | pointer to a cs_locmesh_t structure |
[in] | loc_hconf | pointer to a conforming discrete Hodge op. |
[in,out] | b | pointer to a cs_cdovb_scaleq_t structure |
[in,out] | loc_sys | pointer to a cs_locmat_t structure |
|
static |
Define a discrete Hodge VC conforming op.
[in,out] | b | pointer to a cs_cdovcb_scaleq_t structure |
|
static |
Compute the values of the Dirichlet BCs.
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | field_val | pointer to the current value of the field |
[in,out] | builder | pointer to a cs_cdovcb_scaleq_t structure |
|
static |
Proceed to a static condensation of the local system and keep information inside hydrid_storage to be able to compute the values at cell centers rhs stored in cs_cell_sys is also updated.
[in,out] | builder | pointer to a cs_cdovcb_scaleq_t structure |
[in,out] | locsys | pointer to a cs_cdo_locsys_t structure |
[in,out] | condmat | pointer to the local condensed matrix |
|
static |
Update the value of stabilization coefficient in given situation.
[in] | adv | pointer to a cs_adv_field_t structure |
void cs_cdovcb_scaleq_build_system | ( | 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 the linear system arising from a scalar convection/diffusion equation with a CDO vertex-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,out] | builder | pointer to cs_cdovcb_scaleq_t structure |
[in,out] | rhs | right-hand side |
[in,out] | sla_mat | pointer to cs_sla_matrix_t structure pointer |
void cs_cdovcb_scaleq_cellwise_diff_flux | ( | const cs_real_t * | values, |
void * | builder, | ||
cs_real_t * | diff_flux | ||
) |
Cellwise computation of the diffusive flux across all dual faces.
[in] | values | discrete values for the potential |
[in,out] | builder | pointer to builder structure |
[in,out] | diff_flux | value of the diffusive flux |
void cs_cdovcb_scaleq_compute_flux_across_plane | ( | const void * | builder, |
const cs_real_t * | pdi, | ||
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] | pdi | 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 |
void cs_cdovcb_scaleq_compute_source | ( | void * | builder | ) |
Compute the contributions of source terms (store inside builder)
[in,out] | builder | pointer to a cs_cdovcb_scaleq_t structure |
void cs_cdovcb_scaleq_extra_op | ( | const char * | eqname, |
const cs_field_t * | field, | ||
void * | builder | ||
) |
Predefined extra-operations related to this equation.
[in] | eqname | name of the equation |
[in] | field | pointer to a field strufcture |
[in,out] | builder | pointer to builder 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 | ( | void * | builder | ) |
Destroy a cs_cdovcb_scaleq_t structure.
[in,out] | builder | pointer to a cs_cdovcb_scaleq_t structure |
void cs_cdovcb_scaleq_free_sysmat | ( | 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 |
double* cs_cdovcb_scaleq_get_cell_values | ( | const void * | builder | ) |
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] | builder | pointer to a builder structure |
void* cs_cdovcb_scaleq_init | ( | const cs_equation_param_t * | eqp, |
const cs_mesh_t * | mesh | ||
) |
Initialize a cs_cdovcb_scaleq_t structure.
[in] | eqp | pointer to a cs_equation_param_t structure |
[in] | mesh | pointer to a cs_mesh_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_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, | ||
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 |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |