programmer's documentation
Macros | Functions | Variables
cs_cdovcb_scaleq.c File Reference
#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"
Include dependency graph for cs_cdovcb_scaleq.c:

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_tcs_cell_condmat = NULL
 
static cs_cdo_locsys_t ** cs_cdovcb_cell_systems = NULL
 
static cs_sla_hmatrix_tcs_cdovcb_hconf = NULL
 
static const cs_cdo_quantities_tcs_shared_quant
 
static const cs_cdo_connect_tcs_shared_connect
 
static const cs_time_step_tcs_shared_time_step
 
static const cs_flag_t cs_cdovcb_cmflag
 

Macro Definition Documentation

◆ _dp3

#define _dp3   cs_math_3_dot_product

◆ CS_CDOVCB_SCALEQ_DBG

#define CS_CDOVCB_SCALEQ_DBG   0

Function Documentation

◆ _add_source_terms()

static void _add_source_terms ( cs_cdovcb_scaleq_t *  b,
cs_real_t  full_rhs[] 
)
static

Compute the contribution of source terms to the rhs for this time step.

Parameters
[in,out]bpointer to a cs_cdovb_scaleq_t structure
[in,out]full_rhsright-hand side

◆ _apply_time_scheme()

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 
)
static

Apply the time discretization to the local system.

Parameters
[in,out]tpty_valcurrent value of the time property
[in]vtx_valpointer to the current value of the field
[in]cmpointer to a cs_locmesh_t structure
[in]loc_hconfpointer to a conforming discrete Hodge op.
[in,out]bpointer to a cs_cdovb_scaleq_t structure
[in,out]loc_syspointer to a cs_locmat_t structure

◆ _build_hvc_conf()

static void _build_hvc_conf ( cs_cdovcb_scaleq_t *  b)
static

Define a discrete Hodge VC conforming op.

Parameters
[in,out]bpointer to a cs_cdovcb_scaleq_t structure

◆ _compute_dir_values()

static void _compute_dir_values ( const cs_mesh_t mesh,
const cs_real_t field_val,
const cs_cdovcb_scaleq_t *  b 
)
static

Compute the values of the Dirichlet BCs.

Parameters
[in]meshpointer to a cs_mesh_t structure
[in]field_valpointer to the current value of the field
[in,out]builderpointer to a cs_cdovcb_scaleq_t structure

◆ _condense_and_store()

static void _condense_and_store ( cs_cdovcb_scaleq_t *  b,
cs_cdo_locsys_t locsys,
cs_locmat_t condmat 
)
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.

Parameters
[in,out]builderpointer to a cs_cdovcb_scaleq_t structure
[in,out]locsyspointer to a cs_cdo_locsys_t structure
[in,out]condmatpointer to the local condensed matrix

◆ _set_cip_coef()

static void _set_cip_coef ( const cs_adv_field_t *  adv)
static

Update the value of stabilization coefficient in given situation.

Parameters
[in]advpointer to a cs_adv_field_t structure

◆ cs_cdovcb_scaleq_build_system()

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.

Parameters
[in]meshpointer to a cs_mesh_t structure
[in]field_valpointer to the current value of the vertex field
[in]dt_curcurrent value of the time step
[in,out]builderpointer to cs_cdovcb_scaleq_t structure
[in,out]rhsright-hand side
[in,out]sla_matpointer to cs_sla_matrix_t structure pointer

◆ cs_cdovcb_scaleq_cellwise_diff_flux()

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.

Parameters
[in]valuesdiscrete values for the potential
[in,out]builderpointer to builder structure
[in,out]diff_fluxvalue of the diffusive flux

◆ cs_cdovcb_scaleq_compute_flux_across_plane()

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.

Parameters
[in]builderpointer to a builder structure
[in]pdipointer to an array of field values
[in]ml_idid related to a cs_mesh_location_t struct.
[in]directionindicate in which direction flux is > 0
[in,out]diff_fluxpointer to the value of the diffusive flux
[in,out]conv_fluxpointer to the value of the convective flux

◆ cs_cdovcb_scaleq_compute_source()

void cs_cdovcb_scaleq_compute_source ( void *  builder)

Compute the contributions of source terms (store inside builder)

Parameters
[in,out]builderpointer to a cs_cdovcb_scaleq_t structure

◆ cs_cdovcb_scaleq_extra_op()

void cs_cdovcb_scaleq_extra_op ( const char *  eqname,
const cs_field_t field,
void *  builder 
)

Predefined extra-operations related to this equation.

Parameters
[in]eqnamename of the equation
[in]fieldpointer to a field strufcture
[in,out]builderpointer to builder structure

◆ cs_cdovcb_scaleq_finalize()

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.

◆ cs_cdovcb_scaleq_free()

void* cs_cdovcb_scaleq_free ( void *  builder)

Destroy a cs_cdovcb_scaleq_t structure.

Parameters
[in,out]builderpointer to a cs_cdovcb_scaleq_t structure
Returns
a NULL pointer

◆ cs_cdovcb_scaleq_free_sysmat()

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.

Parameters
[in,out]builderpointer to a builder structure
[in,out]matrixpointer to a cs_sla_matrix_t structure

◆ cs_cdovcb_scaleq_get_cell_values()

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.

Parameters
[in]builderpointer to a builder structure
Returns
a pointer to an array of double

◆ cs_cdovcb_scaleq_init()

void* cs_cdovcb_scaleq_init ( const cs_equation_param_t eqp,
const cs_mesh_t mesh 
)

Initialize a cs_cdovcb_scaleq_t structure.

Parameters
[in]eqppointer to a cs_equation_param_t structure
[in]meshpointer to a cs_mesh_t structure
Returns
a pointer to a new allocated cs_cdovcb_scaleq_t structure

◆ cs_cdovcb_scaleq_initialize()

void cs_cdovcb_scaleq_initialize ( void  )

Allocate work buffer and general structures related to CDO vertex+cell-based schemes.

◆ cs_cdovcb_scaleq_set_shared_pointers()

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.

Parameters
[in]quantadditional mesh quantities struct.
[in]connectpointer to a cs_cdo_connect_t struct.
[in]time_steppointer to a time step structure

◆ cs_cdovcb_scaleq_update_field()

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)

Parameters
[in]solusolution array
[in]rhsrhs associated to this solution array
[in,out]builderpointer to builder structure
[in,out]field_valpointer to the current value of the field

Variable Documentation

◆ cs_cdovcb_cell_systems

cs_cdo_locsys_t** cs_cdovcb_cell_systems = NULL
static

◆ cs_cdovcb_cmflag

const cs_flag_t cs_cdovcb_cmflag
static
Initial value:
#define CS_CDO_LOCAL_V
Definition: cs_cdo_local.h:47
#define CS_CDO_LOCAL_EV
Definition: cs_cdo_local.h:50
#define CS_CDO_LOCAL_FE
Definition: cs_cdo_local.h:51
#define CS_CDO_LOCAL_E
Definition: cs_cdo_local.h:48
#define CS_CDO_LOCAL_F
Definition: cs_cdo_local.h:49

◆ cs_cdovcb_hconf

cs_sla_hmatrix_t* cs_cdovcb_hconf = NULL
static

◆ cs_cdovcb_threshold

double cs_cdovcb_threshold = 1e-12
static

◆ cs_cell_condmat

cs_locmat_t* cs_cell_condmat = NULL
static

◆ cs_shared_connect

const cs_cdo_connect_t* cs_shared_connect
static

◆ cs_shared_quant

const cs_cdo_quantities_t* cs_shared_quant
static

◆ cs_shared_time_step

const cs_time_step_t* cs_shared_time_step
static