programmer's documentation
Functions
cs_cdovb_scaleq.h File Reference
#include "cs_base.h"
#include "cs_cdo_connect.h"
#include "cs_cdo_local.h"
#include "cs_cdo_quantities.h"
#include "cs_cdovb_priv.h"
#include "cs_equation_common.h"
#include "cs_equation_param.h"
#include "cs_field.h"
#include "cs_matrix.h"
#include "cs_mesh.h"
#include "cs_source_term.h"
#include "cs_time_step.h"
Include dependency graph for cs_cdovb_scaleq.h:

Go to the source code of this file.

Functions

bool cs_cdovb_scaleq_is_initialized (void)
 Check if the generic structures for building a CDO-Vb scheme are allocated. More...
 
void cs_cdovb_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-based schemes Set shared pointers. More...
 
void cs_cdovb_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_cdovb_scaleq_finalize_common (void)
 Free work buffer and general structure related to CDO vertex-based schemes. More...
 
void * cs_cdovb_scaleq_init_context (const cs_equation_param_t *eqp, int var_id, int bflux_id, cs_equation_builder_t *eqb)
 Initialize a cs_cdovb_scaleq_t structure storing data useful for building and managing such a scheme. More...
 
void * cs_cdovb_scaleq_free_context (void *builder)
 Destroy a cs_cdovb_scaleq_t structure. 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_set_dir_bc (const cs_mesh_t *mesh, const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, cs_real_t t_eval, cs_real_t field_val[])
 Set the boundary conditions known from the settings when the fields stem from a scalar CDO vertex-based scheme. More...
 
void cs_cdovb_scaleq_solve_steady_state (double dt_cur, 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-Vb scheme One works cellwise and then process to the assembly. More...
 
void cs_cdovb_scaleq_solve_implicit (double dt_cur, 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-Vb scheme Implicit time scheme is used to progress in time. One works cellwise and then process to the assembly. More...
 
void cs_cdovb_scaleq_solve_theta (double dt_cur, 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-Vb scheme Theta time scheme is used to progress in time. One works cellwise and then process to the assembly. 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 *context, 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...
 
cs_real_tcs_cdovb_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_cdovb_scaleq_get_cell_values (void *context)
 Compute an array of values at mesh cells by interpolating the variable field associated to the given context located at mesh vertices The lifecycle of this array is managed by the code. So one does not have to free the return pointer. More...
 
cs_equation_balance_tcs_cdovb_scaleq_balance (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context, cs_real_t dt_cur)
 Compute the balance for an equation over the full computational domain between time t_cur and t_cur + dt_cur Case of scalar-valued CDO vertex-based scheme. 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_real_t t_eval, 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 *context)
 Predefined extra-operations related to this equation. More...
 

Function Documentation

◆ cs_cdovb_scaleq_balance()

cs_equation_balance_t* cs_cdovb_scaleq_balance ( const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  context,
cs_real_t  dt_cur 
)

Compute the balance for an equation over the full computational domain between time t_cur and t_cur + dt_cur Case of scalar-valued CDO vertex-based scheme.

Parameters
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]contextpointer to a scheme builder structure
[in]dt_curcurrent value of the time step
Returns
a pointer to a cs_equation_balance_t structure

◆ 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,
const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
void *  context,
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]contextpointer to cs_cdovb_scaleq_t structure
[in,out]rhsright-hand side
[in,out]matrixpointer to cs_matrix_t structure to compute

◆ cs_cdovb_scaleq_cellwise_diff_flux()

void cs_cdovb_scaleq_cellwise_diff_flux ( const cs_real_t values,
const cs_equation_param_t eqp,
cs_real_t  t_eval,
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]t_evaltime at which one performs the evaluation
[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

◆ cs_cdovb_scaleq_compute_flux_across_plane()

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

◆ cs_cdovb_scaleq_extra_op()

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 *  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_cdovb_scaleq_t structure

◆ cs_cdovb_scaleq_finalize_common()

void cs_cdovb_scaleq_finalize_common ( void  )

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

◆ cs_cdovb_scaleq_free_context()

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

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

cs_real_t* cs_cdovb_scaleq_get_cell_values ( void *  context)

Compute an array of values at mesh cells by interpolating the variable field associated to the given context located at mesh 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_cdovb_scaleq_get_vertex_values()

cs_real_t* cs_cdovb_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_cdovb_scaleq_init_common()

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

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

Initialize a cs_cdovb_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 struct.
Returns
a pointer to a new allocated cs_cdovb_scaleq_t structure

◆ cs_cdovb_scaleq_initialize_system()

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

◆ cs_cdovb_scaleq_is_initialized()

bool cs_cdovb_scaleq_is_initialized ( void  )

Check if the generic structures for building a CDO-Vb scheme are allocated.

Returns
true or false

◆ cs_cdovb_scaleq_set_dir_bc()

void cs_cdovb_scaleq_set_dir_bc ( const cs_mesh_t mesh,
const cs_equation_param_t eqp,
cs_equation_builder_t eqb,
cs_real_t  t_eval,
cs_real_t  field_val[] 
)

Set the boundary conditions known from the settings when the fields stem from a scalar CDO vertex-based scheme.

Parameters
[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]t_evaltime at which one evaluates BCs
[in,out]field_valpointer to the values of the variable field

◆ cs_cdovb_scaleq_solve_implicit()

void cs_cdovb_scaleq_solve_implicit ( double  dt_cur,
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-Vb scheme Implicit time scheme is used to progress in time. One works cellwise and then process to the assembly.

Parameters
[in]dt_curcurrent value of the time step
[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_cdovb_scaleq_t structure

◆ cs_cdovb_scaleq_solve_steady_state()

void cs_cdovb_scaleq_solve_steady_state ( double  dt_cur,
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-Vb scheme One works cellwise and then process to the assembly.

Parameters
[in]dt_curcurrent value of the time step
[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_cdovb_scaleq_t structure

◆ cs_cdovb_scaleq_solve_theta()

void cs_cdovb_scaleq_solve_theta ( double  dt_cur,
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-Vb scheme Theta time scheme is used to progress in time. One works cellwise and then process to the assembly.

Parameters
[in]dt_curcurrent value of the time step
[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_cdovb_scaleq_t structure

◆ cs_cdovb_scaleq_update_field()

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