My Project
programmer's documentation
Functions | Variables
cs_cdovcb_scaleq.c File Reference

Build an algebraic CDO vertex+cell-based system for unsteady convection diffusion reaction of scalar-valued equations with source terms. More...

#include "cs_defs.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <string.h>
#include <float.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_equation_assemble.h"
#include "cs_equation_bc.h"
#include "cs_equation_common.h"
#include "cs_evaluate.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_sles.h"
#include "cs_source_term.h"
#include "cs_static_condensation.h"
#include "cs_timer.h"
#include "cs_cdovcb_scaleq.h"
Include dependency graph for cs_cdovcb_scaleq.c:

Functions

bool cs_cdovcb_scaleq_is_initialized (void)
 Check if the generic structures for building a CDO-vertex+cell based scheme are allocated. More...
 
void cs_cdovcb_scaleq_init_common (const cs_cdo_quantities_t *quant, const cs_cdo_connect_t *connect, const cs_time_step_t *time_step, const cs_matrix_structure_t *ms)
 Allocate work buffer and general structures related to CDO vertex+cell-based schemes Set shared pointers. More...
 
void cs_cdovcb_scaleq_get (cs_cell_sys_t **csys, cs_cell_builder_t **cb)
 Retrieve work buffers used for building a CDO system cellwise. More...
 
void cs_cdovcb_scaleq_finalize_common (void)
 Free work buffer and general structure related to CDO vertex-based schemes. More...
 
void * cs_cdovcb_scaleq_init_context (const cs_equation_param_t *eqp, int var_id, int bflux_id, cs_equation_builder_t *eqb)
 Initialize a cs_cdovcb_scaleq_t structure storing data useful for building and managing such a scheme. More...
 
void * cs_cdovcb_scaleq_free_context (void *data)
 Destroy a cs_cdovcb_scaleq_t structure. More...
 
void cs_cdovcb_scaleq_init_values (cs_real_t t_eval, const int field_id, const cs_mesh_t *mesh, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context)
 Set the initial values of the variable field taking into account the boundary conditions. Case of scalar-valued CDO-VCb schemes. More...
 
void cs_cdovcb_scaleq_solve_steady_state (const cs_mesh_t *mesh, const int field_id, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context)
 Build and solve the linear system arising from a scalar steady-state convection/diffusion/reaction equation with a CDO-VCb scheme One works cellwise and then process to the assembly. More...
 
void cs_cdovcb_scaleq_solve_implicit (const cs_mesh_t *mesh, const int field_id, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context)
 Build and solve the linear system arising from a scalar unsteady convection/diffusion/reaction equation with a CDO-VCb scheme Time scheme is an implicit Euler One works cellwise and then process to the assembly. More...
 
void cs_cdovcb_scaleq_solve_theta (const cs_mesh_t *mesh, const int field_id, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context)
 Build and solve the linear system arising from a scalar unsteady convection/diffusion/reaction equation with a CDO-VCb scheme Time scheme is a theta scheme. One works cellwise and then process to the assembly. More...
 
cs_real_tcs_cdovcb_scaleq_get_vertex_values (void *context)
 Retrieve an array of values at mesh vertices for the variable field associated to the given context The lifecycle of this array is managed by the code. So one does not have to free the return pointer. More...
 
cs_real_tcs_cdovcb_scaleq_get_cell_values (void *context)
 Get the computed values at mesh cells from the inverse operation w.r.t. the static condensation (DoF used in the linear system are located at primal vertices and field related to the structure equation is also attached to primal vertices) The lifecycle of this array is managed by the code. So one does not have to free the return pointer. More...
 
void cs_cdovcb_scaleq_boundary_diff_flux (const cs_real_t t_eval, const cs_equation_param_t *eqp, const cs_real_t *pot_v, const cs_real_t *pot_c, cs_equation_builder_t *eqb, cs_real_t *vf_flux)
 Compute for each vertex of a boundary face, the portion of diffusive flux across the boundary face. The surface attached to each vertex corresponds to the intersection of its dual cell (associated to a vertex of the face) with the face. Case of scalar-valued CDO-VCb schemes. More...
 
void cs_cdovcb_scaleq_flux_across_plane (const cs_real_t normal[], const cs_real_t *pdi, const cs_equation_param_t *eqp, int ml_id, cs_equation_builder_t *eqb, void *context, double *d_flux, double *c_flux)
 Compute the diffusive and convective flux across a list of faces Case of scalar-valued CDO-VCb schemes. More...
 
void cs_cdovcb_scaleq_diff_flux_in_cells (const cs_real_t *values, const cs_equation_param_t *eqp, cs_real_t t_eval, cs_equation_builder_t *eqb, void *context, cs_real_t *diff_flux)
 Cellwise computation of the diffusive flux in each cells. Case of scalar-valued CDO-VCb schemes. More...
 
void cs_cdovcb_scaleq_diff_flux_dfaces (const cs_real_t *values, const cs_equation_param_t *eqp, cs_real_t t_eval, cs_equation_builder_t *eqb, void *context, cs_real_t *diff_flux)
 Cellwise computation of the diffusive flux across dual faces Case of scalar-valued CDO-VCb schemes. More...
 
void cs_cdovcb_scaleq_vtx_gradient (const cs_real_t *v_values, cs_equation_builder_t *eqb, void *context, cs_real_t *v_gradient)
 Cellwise computation of the discrete gradient at vertices. More...
 
void cs_cdovcb_scaleq_read_restart (cs_restart_t *restart, const char *eqname, void *scheme_context)
 Read additional arrays (not defined as fields) but useful for the checkpoint/restart process. More...
 
void cs_cdovcb_scaleq_write_restart (cs_restart_t *restart, const char *eqname, void *scheme_context)
 Write additional arrays (not defined as fields) but useful for the checkpoint/restart process. 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 *context)
 Predefined extra-operations related to this equation. More...
 

Variables

static cs_cell_sys_t ** _vcbs_cell_system = NULL
 
static cs_cell_builder_t ** _vcbs_cell_builder = 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_matrix_structure_tcs_shared_ms
 

Detailed Description

Build an algebraic CDO vertex+cell-based system for unsteady convection diffusion reaction of scalar-valued equations with source terms.

Function Documentation

◆ cs_cdovcb_scaleq_boundary_diff_flux()

void cs_cdovcb_scaleq_boundary_diff_flux ( const cs_real_t  t_eval,
const cs_equation_param_t eqp,
const cs_real_t pot_v,
const cs_real_t pot_c,
cs_equation_builder_t eqb,
cs_real_t vf_flux 
)

Compute for each vertex of a boundary face, the portion of diffusive flux across the boundary face. The surface attached to each vertex corresponds to the intersection of its dual cell (associated to a vertex of the face) with the face. Case of scalar-valued CDO-VCb schemes.

Parameters
[in]t_evaltime at which one performs the evaluation
[in]eqppointer to a cs_equation_param_t structure
[in]pot_vpointer to an array of field values at vertices
[in]pot_cpointer to an array of field values at cells
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]vf_fluxpointer to the values of the diffusive flux

◆ cs_cdovcb_scaleq_diff_flux_dfaces()

void cs_cdovcb_scaleq_diff_flux_dfaces ( const cs_real_t values,
const cs_equation_param_t eqp,
cs_real_t  t_eval,
cs_equation_builder_t eqb,
void *  context,
cs_real_t diff_flux 
)

Cellwise computation of the diffusive flux across dual faces Case of scalar-valued CDO-VCb schemes.

Parameters
[in]valuesdiscrete values for the potential
[in]eqppointer to a cs_equation_param_t structure
[in]t_evaltime at which one performs the evaluation
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer to data structure cast on-the-fly
[in,out]diff_fluxvalue of the diffusive flux

◆ cs_cdovcb_scaleq_diff_flux_in_cells()

void cs_cdovcb_scaleq_diff_flux_in_cells ( const cs_real_t values,
const cs_equation_param_t eqp,
cs_real_t  t_eval,
cs_equation_builder_t eqb,
void *  context,
cs_real_t diff_flux 
)

Cellwise computation of the diffusive flux in each cells. Case of scalar-valued CDO-VCb schemes.

Parameters
[in]valuesdiscrete values for the potential
[in]eqppointer to a cs_equation_param_t structure
[in]t_evaltime at which one performs the evaluation
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer to data structure cast on-the-fly
[in,out]diff_fluxvalue of the diffusive flux

◆ 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 *  context 
)

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]contextpointer to cs_cdovcb_scaleq_t structure

◆ cs_cdovcb_scaleq_finalize_common()

void cs_cdovcb_scaleq_finalize_common ( 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_flux_across_plane()

void cs_cdovcb_scaleq_flux_across_plane ( const cs_real_t  normal[],
const cs_real_t pdi,
const cs_equation_param_t eqp,
int  ml_id,
cs_equation_builder_t eqb,
void *  context,
double *  d_flux,
double *  c_flux 
)

Compute the diffusive and convective flux across a list of faces Case of scalar-valued CDO-VCb schemes.

Compute the diffusive and convective flux across a list of faces Case of scalar-valued CDO-Vcb schemes.

Parameters
[in]normalindicate in which direction flux is > 0
[in]pdipointer to an array of field values
[in]eqppointer to a cs_equation_param_t structure
[in]ml_idid related to a cs_mesh_location_t struct.
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer 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_free_context()

void* cs_cdovcb_scaleq_free_context ( 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()

void cs_cdovcb_scaleq_get ( cs_cell_sys_t **  csys,
cs_cell_builder_t **  cb 
)

Retrieve work buffers used for building a CDO system cellwise.

Parameters
[out]csyspointer to a pointer on a cs_cell_sys_t structure
[out]cbpointer to a pointer on a cs_cell_builder_t structure

◆ cs_cdovcb_scaleq_get_cell_values()

cs_real_t* cs_cdovcb_scaleq_get_cell_values ( void *  context)

Get the computed values at mesh cells from the inverse operation w.r.t. the static condensation (DoF used in the linear system are located at primal vertices and field related to the structure equation is also attached to primal vertices) The lifecycle of this array is managed by the code. So one does not have to free the return pointer.

Parameters
[in,out]contextpointer to a data structure cast on-the-fly
Returns
a pointer to an array of cs_real_t

◆ cs_cdovcb_scaleq_get_vertex_values()

cs_real_t* cs_cdovcb_scaleq_get_vertex_values ( void *  context)

Retrieve an array of values at mesh vertices for the variable field associated to the given context The lifecycle of this array is managed by the code. So one does not have to free the return pointer.

Parameters
[in,out]contextpointer to a data structure cast on-the-fly
Returns
a pointer to an array of cs_real_t

◆ cs_cdovcb_scaleq_init_common()

void cs_cdovcb_scaleq_init_common ( const cs_cdo_quantities_t quant,
const cs_cdo_connect_t connect,
const cs_time_step_t time_step,
const cs_matrix_structure_t ms 
)

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

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

◆ cs_cdovcb_scaleq_init_context()

void* cs_cdovcb_scaleq_init_context ( const cs_equation_param_t eqp,
int  var_id,
int  bflux_id,
cs_equation_builder_t eqb 
)

Initialize a cs_cdovcb_scaleq_t structure storing data useful for building and managing such a scheme.

Parameters
[in]eqppointer to a cs_equation_param_t structure
[in]var_idid of the variable field
[in]bflux_idid of the boundary flux field
[in,out]eqbpointer to a cs_equation_builder_t structure
Returns
a pointer to a new allocated cs_cdovcb_scaleq_t structure

◆ cs_cdovcb_scaleq_init_values()

void cs_cdovcb_scaleq_init_values ( cs_real_t  t_eval,
const int  field_id,
const cs_mesh_t mesh,
const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  context 
)

Set the initial values of the variable field taking into account the boundary conditions. Case of scalar-valued CDO-VCb schemes.

Parameters
[in]t_evaltime at which one evaluates BCs
[in]field_idid related to the variable field of this equation
[in]meshpointer to a cs_mesh_t structure
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer to the scheme context (cast on-the-fly)

◆ cs_cdovcb_scaleq_is_initialized()

bool cs_cdovcb_scaleq_is_initialized ( void  )

Check if the generic structures for building a CDO-vertex+cell based scheme are allocated.

Returns
true or false

◆ cs_cdovcb_scaleq_read_restart()

void cs_cdovcb_scaleq_read_restart ( cs_restart_t restart,
const char *  eqname,
void *  scheme_context 
)

Read additional arrays (not defined as fields) but useful for the checkpoint/restart process.

Parameters
[in,out]restartpointer to cs_restart_t structure
[in]eqnamename of the related equation
[in]scheme_contextpointer to a data structure cast on-the-fly

◆ cs_cdovcb_scaleq_solve_implicit()

void cs_cdovcb_scaleq_solve_implicit ( const cs_mesh_t mesh,
const int  field_id,
const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  context 
)

Build and solve the linear system arising from a scalar unsteady convection/diffusion/reaction equation with a CDO-VCb scheme Time scheme is an implicit Euler One works cellwise and then process to the assembly.

Parameters
[in]meshpointer to a cs_mesh_t structure
[in]field_idid of the variable field related to this equation
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer to cs_cdovcb_scaleq_t structure

◆ cs_cdovcb_scaleq_solve_steady_state()

void cs_cdovcb_scaleq_solve_steady_state ( const cs_mesh_t mesh,
const int  field_id,
const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  context 
)

Build and solve the linear system arising from a scalar steady-state convection/diffusion/reaction equation with a CDO-VCb scheme One works cellwise and then process to the assembly.

Parameters
[in]meshpointer to a cs_mesh_t structure
[in]field_idid of the variable field related to this equation
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer to cs_cdovcb_scaleq_t structure

◆ cs_cdovcb_scaleq_solve_theta()

void cs_cdovcb_scaleq_solve_theta ( const cs_mesh_t mesh,
const int  field_id,
const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  context 
)

Build and solve the linear system arising from a scalar unsteady convection/diffusion/reaction equation with a CDO-VCb scheme Time scheme is a theta scheme. One works cellwise and then process to the assembly.

Parameters
[in]meshpointer to a cs_mesh_t structure
[in]field_idid of the variable field related to this equation
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer to cs_cdovcb_scaleq_t structure

◆ cs_cdovcb_scaleq_vtx_gradient()

void cs_cdovcb_scaleq_vtx_gradient ( const cs_real_t v_values,
cs_equation_builder_t eqb,
void *  context,
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]contextpointer to data structure cast on-the-fly
[in,out]v_gradientgradient at vertices

◆ cs_cdovcb_scaleq_write_restart()

void cs_cdovcb_scaleq_write_restart ( cs_restart_t restart,
const char *  eqname,
void *  scheme_context 
)

Write additional arrays (not defined as fields) but useful for the checkpoint/restart process.

Parameters
[in,out]restartpointer to cs_restart_t structure
[in]eqnamename of the related equation
[in]scheme_contextpointer to a data structure cast on-the-fly

Variable Documentation

◆ _vcbs_cell_builder

cs_cell_builder_t** _vcbs_cell_builder = NULL
static

◆ _vcbs_cell_system

cs_cell_sys_t** _vcbs_cell_system = NULL
static

◆ cs_shared_connect

const cs_cdo_connect_t* cs_shared_connect
static

◆ cs_shared_ms

const cs_matrix_structure_t* cs_shared_ms
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