programmer's documentation
Macros | Functions | Variables
cs_cdovb_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_cdovb_scaleq.h"
Include dependency graph for cs_cdovb_scaleq.c:

Macros

#define CS_CDOVB_SCALEQ_DBG   0
 
#define _dp3   cs_math_3_dot_product
 

Functions

static void _add_source_terms (cs_cdovb_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_hvpcd_conf (cs_cdovb_scaleq_t *b)
 Compute a discrete Hodge op. Vp–>Cd using conforming reco. op. More...
 
static void _apply_time_scheme (double tpty_val, const cs_real_t *field_val, const cs_cell_mesh_t *cm, const cs_locmat_t *loc_hconf, cs_cdovb_scaleq_t *b, cs_cdo_locsys_t *loc_sys)
 Apply the time discretization to the local system. More...
 
static void _compute_dir_values (const cs_mesh_t *mesh, const cs_real_t *field_val, const cs_cdovb_scaleq_t *builder)
 Compute the values of the Dirichlet BCs. More...
 
static void _strong_bc_enforcement (cs_cdovb_scaleq_t *bld, cs_real_t **rhs, cs_sla_matrix_t **matrix)
 Apply boundary conditions. Update right-hand side and the system matrix. More...
 
static void _enforce_bc (cs_cdovb_scaleq_t *bld, cs_real_t **rhs, cs_sla_matrix_t **matrix)
 Modify the matrix of the linear system and its right hand side to take into account a strong enforcement or a large penalization of the boundary conditions. Nothing to do in case of weak enforcement. More...
 
void cs_cdovb_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_cdovb_scaleq_initialize (void)
 Allocate work buffer and general structures related to CDO vertex-based schemes. More...
 
void cs_cdovb_scaleq_finalize (void)
 Free work buffer and general structure related to CDO vertex-based schemes. More...
 
void * cs_cdovb_scaleq_init (const cs_equation_param_t *eqp, const cs_mesh_t *mesh)
 Initialize a cs_cdovb_scaleq_t structure. More...
 
void * cs_cdovb_scaleq_free (void *builder)
 Destroy a cs_cdovb_scaleq_t structure. More...
 
void cs_cdovb_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_cdovb_scaleq_compute_source (void *builder)
 Compute the contributions of source terms (store inside builder) More...
 
void cs_cdovb_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_cdovb_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...
 
void cs_cdovb_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_cdovb_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_cdovb_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_cdovb_threshold = 1e-12
 
static cs_sla_matrix_tcs_cdovb_hconf = NULL
 
static cs_cdo_locsys_tcs_cell_sys = 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_cdovb_cmflag
 

Macro Definition Documentation

◆ _dp3

#define _dp3   cs_math_3_dot_product

◆ CS_CDOVB_SCALEQ_DBG

#define CS_CDOVB_SCALEQ_DBG   0

Function Documentation

◆ _add_source_terms()

static void _add_source_terms ( cs_cdovb_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 field_val,
const cs_cell_mesh_t cm,
const cs_locmat_t loc_hconf,
cs_cdovb_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]loc_fvalpointer 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_hvpcd_conf()

static void _build_hvpcd_conf ( cs_cdovb_scaleq_t *  b)
static

Compute a discrete Hodge op. Vp–>Cd using conforming reco. op.

Parameters
[in,out]bpointer to a cs_cdovb_scaleq_t structure

◆ _compute_dir_values()

static void _compute_dir_values ( const cs_mesh_t mesh,
const cs_real_t field_val,
const cs_cdovb_scaleq_t *  builder 
)
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_cdovb_scaleq_t structure

◆ _enforce_bc()

static void _enforce_bc ( cs_cdovb_scaleq_t *  bld,
cs_real_t **  rhs,
cs_sla_matrix_t **  matrix 
)
static

Modify the matrix of the linear system and its right hand side to take into account a strong enforcement or a large penalization of the boundary conditions. Nothing to do in case of weak enforcement.

Parameters
[in,out]bldpointer to a cs_cdovb_scaleq_t structure
[in,out]rhsright-hand side
[in,out]matrixmatrix of the linear system

◆ _strong_bc_enforcement()

static void _strong_bc_enforcement ( cs_cdovb_scaleq_t *  bld,
cs_real_t **  rhs,
cs_sla_matrix_t **  matrix 
)
static

Apply boundary conditions. Update right-hand side and the system matrix.

Parameters
[in,out]bldpointer to a cs_cdovb_scaleq_t structure
[in,out]full_rhsright-hand side
[in,out]full_matrixmatrix of the linear system

◆ cs_cdovb_scaleq_build_system()

void cs_cdovb_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 field
[in]dt_curcurrent value of the time step
[in,out]builderpointer to cs_cdovb_scaleq_t structure
[in,out]rhsright-hand side
[in,out]sla_matpointer to cs_sla_matrix_t structure pointer

◆ cs_cdovb_scaleq_cellwise_diff_flux()

void cs_cdovb_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_cdovb_scaleq_compute_flux_across_plane()

void cs_cdovb_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_cdovb_scaleq_compute_source()

void cs_cdovb_scaleq_compute_source ( void *  builder)

Compute the contributions of source terms (store inside builder)

Parameters
[in,out]builderpointer to a cs_cdovb_scaleq_t structure

◆ cs_cdovb_scaleq_extra_op()

void cs_cdovb_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_cdovb_scaleq_finalize()

void cs_cdovb_scaleq_finalize ( void  )

Free work buffer and general structure related to CDO vertex-based schemes.

◆ cs_cdovb_scaleq_free()

void* cs_cdovb_scaleq_free ( void *  builder)

Destroy a cs_cdovb_scaleq_t structure.

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

◆ cs_cdovb_scaleq_free_sysmat()

void cs_cdovb_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_cdovb_scaleq_init()

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

Initialize a cs_cdovb_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_cdovb_scaleq_t structure

◆ cs_cdovb_scaleq_initialize()

void cs_cdovb_scaleq_initialize ( void  )

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

◆ cs_cdovb_scaleq_set_shared_pointers()

void cs_cdovb_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_cdovb_scaleq_update_field()

void cs_cdovb_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 cs_cdovb_scaleq_t structure
[in,out]field_valpointer to the current value of the field

Variable Documentation

◆ cs_cdovb_cmflag

const cs_flag_t cs_cdovb_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_E
Definition: cs_cdo_local.h:48

◆ cs_cdovb_hconf

cs_sla_matrix_t* cs_cdovb_hconf = NULL
static

◆ cs_cdovb_threshold

double cs_cdovb_threshold = 1e-12
static

◆ cs_cell_sys

cs_cdo_locsys_t* cs_cell_sys = 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