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 "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"
Include dependency graph for cs_cdovcb_scaleq.c:

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_tcs_shared_quant
 
static const cs_cdo_connect_tcs_shared_connect
 
static const cs_time_step_tcs_shared_time_step
 

Macro Definition Documentation

◆ _dp3

#define _dp3   cs_math_3_dot_product

◆ CS_CDOVCB_SCALEQ_DBG

#define CS_CDOVCB_SCALEQ_DBG   0

◆ CS_CDOVCB_SCALEQ_MODULO

#define CS_CDOVCB_SCALEQ_MODULO   100

Function Documentation

◆ _condense_and_store()

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

Parameters
[in]c2vpointer to a cs_adjacency_t structure
[in,out]builderpointer to a cs_cdovcb_scaleq_t structure
[in,out]cbpointer to a cs_cell_builder_t structure
[in,out]csyspointer to a cs_cell_sys_t structure

◆ _get_f2v()

static void _get_f2v ( short int  f,
const cs_cell_mesh_t cm,
short int *  n_vf,
short int *  v_ids 
)
inlinestatic

Retrieve the list of vertices attached to a face.

Parameters
[in]fface id in the cell numbering
[in]cmpointer to a cs_cell_mesh_t structure
[in,out]n_vfpointer of pointer to a cellwise view of the mesh
[in,out]v_idslist of vertex ids in the cell numbering

◆ _init_cell_structures()

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

Initialize the local structure for the current cell.

Parameters
[in]cell_flagflag related to the current cell
[in]cmpointer to a cellwise view of the mesh
[in]eqppointer to a cs_equation_param_t structure
[in]eqbpointer to a cs_equation_builder_t structure
[in]eqdpointer to a cs_cdovb_scaleq_t structure
[in]dir_valuesDirichlet values associated to each vertex
[in]neu_tagsDefinition id related to each Neumann face
[in]field_tnvalues of the field at the last computed time
[in,out]csyspointer to a cellwise view of the system
[in,out]cbcpointer to a cellwise view of the BCs
[in,out]cbpointer to a cellwise builder

◆ _set_cip_coef()

static void _set_cip_coef ( const cs_equation_param_t eqp)
static

Update the value of stabilization coefficient in given situation.

Parameters
[in]eqppointer to a cs_equation_param_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,
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.

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]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to cs_cdovcb_scaleq_t structure
[in,out]rhsright-hand side
[in,out]matrixpointer to cs_matrix_t structure to compute

◆ cs_cdovcb_scaleq_cellwise_diff_flux()

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.

Parameters
[in]valuesdiscrete values for the potential
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to data specific for this scheme
[in,out]locationwhere the flux is defined
[in,out]diff_fluxvalue of the diffusive flux

◆ cs_cdovcb_scaleq_compute_flux_across_plane()

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.

Parameters
[in]normalindicate in which direction flux is > 0
[in]pdipointer to an array of field values
[in]ml_idid related to a cs_mesh_location_t struct.
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to data specific for this scheme
[in,out]d_fluxpointer to the value of the diffusive flux
[in,out]c_fluxpointer to the value of the convective flux

◆ cs_cdovcb_scaleq_compute_source()

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)

Parameters
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer 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,
const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  data 
)

Predefined extra-operations related to this equation.

Parameters
[in]eqnamename of the equation
[in]fieldpointer to a field structure
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to cs_cdovb_scaleq_t 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_data()

void* cs_cdovcb_scaleq_free_data ( void *  data)

Destroy a cs_cdovcb_scaleq_t structure.

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

◆ cs_cdovcb_scaleq_get_cell_values()

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.

Parameters
[in]datapointer to a data structure
Returns
a pointer to an array of double

◆ cs_cdovcb_scaleq_init_data()

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.

Parameters
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
Returns
a pointer to a new allocated cs_cdovb_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_initialize_system()

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.

Parameters
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to cs_cdovcb_scaleq_t structure
[in,out]system_matrixpointer of pointer to a cs_matrix_t struct.
[in,out]system_rhspointer of pointer to an array of double

◆ 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,
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)

Parameters
[in]solusolution array
[in]rhsrhs associated to this solution array
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to data structure
[in,out]field_valpointer to the current value of the field

◆ cs_cdovcb_scaleq_vtx_gradient()

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.

Parameters
[in]v_valuesdiscrete values for the potential at vertices
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to data structure
[in,out]v_gradientgradient at vertices

Variable Documentation

◆ cs_cdovcb_cell_bc

cs_cell_bc_t** cs_cdovcb_cell_bc = NULL
static

◆ cs_cdovcb_cell_bld

cs_cell_builder_t** cs_cdovcb_cell_bld = NULL
static

◆ cs_cdovcb_cell_sys

cs_cell_sys_t** cs_cdovcb_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