programmer's documentation
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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 "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_cdovb_scaleq.h"
Include dependency graph for cs_cdovb_scaleq.c:

Macros

#define CS_CDOVB_SCALEQ_DBG   0
 
#define CS_CDOVB_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_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...
 
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_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_cdovb_scaleq_free_data (void *builder)
 Destroy a cs_cdovb_scaleq_t structure. More...
 
void cs_cdovb_scaleq_compute_source (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *data)
 Compute the contributions of source terms (store inside builder) More...
 
void cs_cdovb_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 builder structure. More...
 
void cs_cdovb_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-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, 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...
 
void cs_cdovb_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_cdovb_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_cdovb_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_cdovb_cell_sys = NULL
 
static cs_cell_bc_t ** cs_cdovb_cell_bc = NULL
 
static cs_cell_builder_t ** cs_cdovb_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

#define _dp3   cs_math_3_dot_product
#define CS_CDOVB_SCALEQ_DBG   0
#define CS_CDOVB_SCALEQ_MODULO   100

Function Documentation

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
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_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]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
void cs_cdovb_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-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
void cs_cdovb_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 cs_cdovb_scaleq_t structure
[in,out]locationwhere the flux is defined
[in,out]diff_fluxvalue of the diffusive flux
void cs_cdovb_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
void cs_cdovb_scaleq_compute_source ( const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  data 
)

Compute the contributions of source terms (store inside builder)

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_cdovb_scaleq_t structure
void cs_cdovb_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
void cs_cdovb_scaleq_finalize ( void  )

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

void* cs_cdovb_scaleq_free_data ( void *  builder)

Destroy a cs_cdovb_scaleq_t structure.

Parameters
[in,out]builderpointer to a cs_cdovb_scaleq_t structure
Returns
a NULL pointer
void* cs_cdovb_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
void cs_cdovb_scaleq_initialize ( void  )

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

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

Variable Documentation

cs_cell_bc_t** cs_cdovb_cell_bc = NULL
static
cs_cell_builder_t** cs_cdovb_cell_bld = NULL
static
cs_cell_sys_t** cs_cdovb_cell_sys = NULL
static
const cs_cdo_connect_t* cs_shared_connect
static
const cs_cdo_quantities_t* cs_shared_quant
static
const cs_time_step_t* cs_shared_time_step
static