Build an algebraic CDO face-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 <bft_mem.h>
#include "cs_array.h"
#include "cs_cdo_advection.h"
#include "cs_cdo_bc.h"
#include "cs_cdo_diffusion.h"
#include "cs_cdo_toolbox.h"
#include "cs_cdo_solve.h"
#include "cs_equation_bc.h"
#include "cs_equation_builder.h"
#include "cs_evaluate.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_sles.h"
#include "cs_source_term.h"
#include "cs_static_condensation.h"
#include "cs_cdofb_scaleq.h"
Functions | |
bool | cs_cdofb_scaleq_is_initialized (void) |
Check if the generic structures for building a CDO-Fb scheme are allocated. More... | |
void | cs_cdofb_scaleq_init_sharing (const cs_cdo_quantities_t *quant, const cs_cdo_connect_t *connect, const cs_time_step_t *time_step) |
Allocate work buffer and general structures related to CDO scalar-valued face-based schemes. Set shared pointers from the main domain members. More... | |
void | cs_cdofb_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_cdofb_scaleq_finalize_sharing (void) |
Free work buffer and general structure related to CDO face-based schemes. More... | |
void * | cs_cdofb_scaleq_init_context (cs_equation_param_t *eqp, int var_id, int bflux_id, cs_equation_builder_t *eqb) |
Initialize a cs_cdofb_scaleq_t structure storing data useful for building and managing such a scheme. More... | |
void * | cs_cdofb_scaleq_free_context (void *data) |
Destroy a cs_cdofb_scaleq_t structure. More... | |
void | cs_cdofb_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-Fb schemes. More... | |
void | cs_cdofb_scaleq_interpolate (const cs_mesh_t *mesh, const cs_real_t *cell_values, 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-Fb scheme Use for interpolation purpose from cell values to face values. One works cellwise and then process to the assembly. More... | |
void | cs_cdofb_scaleq_solve_steady_state (bool cur2prev, 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-Fb scheme One works cellwise and then process to the assembly. More... | |
void | cs_cdofb_scaleq_solve_implicit (bool cur2prev, 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 convection/diffusion/reaction equation with a CDO-Fb scheme and an implicit Euler scheme. One works cellwise and then process to the assembly. More... | |
void | cs_cdofb_scaleq_solve_theta (bool cur2prev, 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 convection/diffusion/reaction equation with a CDO-Fb scheme and an implicit/explicit theta scheme. One works cellwise and then process to the assembly. More... | |
cs_cdo_balance_t * | cs_cdofb_scaleq_balance (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context) |
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 face-based scheme. More... | |
void | cs_cdofb_scaleq_diff_flux_faces (const cs_real_t *f_values, const cs_real_t *c_values, const cs_equation_param_t *eqp, const cs_property_t *diff_pty, cs_real_t t_eval, cs_equation_builder_t *eqb, void *context, cs_real_t *diff_flux) |
Cellwise computation of the diffusive flux accross primal faces. Interior faces first and then boundary faces. Values at faces are recovered thanks to the equation builder Case of scalar-valued CDO-Fb schemes. More... | |
void | cs_cdofb_scaleq_boundary_diff_flux (const cs_real_t *pot_f, const cs_real_t *pot_c, const cs_equation_param_t *eqp, const cs_property_t *diff_pty, const cs_real_t t_eval, cs_equation_builder_t *eqb, void *context, cs_real_t *bflux) |
Compute an approximation of the the diffusive flux across each boundary face. Case of scalar-valued CDO-Fb schemes. More... | |
void | cs_cdofb_scaleq_current_to_previous (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context) |
Operate a current to previous operation for the field associated to this equation and potentially for related fields/arrays. More... | |
void | cs_cdofb_scaleq_extra_post (const cs_equation_param_t *eqp, cs_equation_builder_t *eqb, void *context) |
Predefined extra-operations related to this equation. More... | |
cs_real_t * | cs_cdofb_scaleq_get_cell_values (void *context, bool previous) |
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 faces) The lifecycle of this array is managed by the code. So one does not have to free the return pointer. More... | |
cs_real_t * | cs_cdofb_scaleq_get_face_values (void *context, bool previous) |
Retrieve an array of values at mesh faces for the current context. The lifecycle of this array is managed by the code. So one does not have to free the return pointer. More... | |
cs_real_t * | cs_cdofb_scaleq_get_source_term_values (void *context) |
Retrieve the array storing the source term values at mesh cells. The lifecycle of this array is managed by the code. So one does not have to free the return pointer. More... | |
void | cs_cdofb_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_cdofb_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... | |
Build an algebraic CDO face-based system for unsteady convection-diffusion-reaction of scalar-valued equations with source terms.
cs_cdo_balance_t * cs_cdofb_scaleq_balance | ( | const cs_equation_param_t * | eqp, |
cs_equation_builder_t * | eqb, | ||
void * | context | ||
) |
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 face-based scheme.
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to a scheme builder structure |
void cs_cdofb_scaleq_boundary_diff_flux | ( | const cs_real_t * | pot_f, |
const cs_real_t * | pot_c, | ||
const cs_equation_param_t * | eqp, | ||
const cs_property_t * | diff_pty, | ||
const cs_real_t | t_eval, | ||
cs_equation_builder_t * | eqb, | ||
void * | context, | ||
cs_real_t * | bflux | ||
) |
Compute an approximation of the the diffusive flux across each boundary face. Case of scalar-valued CDO-Fb schemes.
[in] | pot_f | array of values at faces |
[in] | pot_c | array of values at cells |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in] | diff_pty | pointer to the diffusion property to use |
[in] | t_eval | time at which one performs the evaluation |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to a scheme builder structure |
[in,out] | bflux | pointer to the values of the diffusive flux |
void cs_cdofb_scaleq_current_to_previous | ( | const cs_equation_param_t * | eqp, |
cs_equation_builder_t * | eqb, | ||
void * | context | ||
) |
Operate a current to previous operation for the field associated to this equation and potentially for related fields/arrays.
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to cs_cdofb_scaleq_t structure |
void cs_cdofb_scaleq_diff_flux_faces | ( | const cs_real_t * | f_values, |
const cs_real_t * | c_values, | ||
const cs_equation_param_t * | eqp, | ||
const cs_property_t * | diff_pty, | ||
cs_real_t | t_eval, | ||
cs_equation_builder_t * | eqb, | ||
void * | context, | ||
cs_real_t * | diff_flux | ||
) |
Cellwise computation of the diffusive flux accross primal faces. Interior faces first and then boundary faces. Values at faces are recovered thanks to the equation builder Case of scalar-valued CDO-Fb schemes.
[in] | f_values | values for the potential at faces |
[in] | c_values | values for the potential at cells |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in] | diff_pty | pointer to the diffusion property to use |
[in] | t_eval | time at which one performs the evaluation |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to cs_cdovb_scaleq_t structure |
[in,out] | diff_flux | value of the diffusive flux at primal faces |
void cs_cdofb_scaleq_extra_post | ( | const cs_equation_param_t * | eqp, |
cs_equation_builder_t * | eqb, | ||
void * | context | ||
) |
Predefined extra-operations related to this equation.
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to cs_cdofb_scaleq_t structure |
void cs_cdofb_scaleq_finalize_sharing | ( | void | ) |
Free work buffer and general structure related to CDO face-based schemes.
void * cs_cdofb_scaleq_free_context | ( | void * | data | ) |
Destroy a cs_cdofb_scaleq_t structure.
[in,out] | data | pointer to a cs_cdofb_scaleq_t structure |
void cs_cdofb_scaleq_get | ( | cs_cell_sys_t ** | csys, |
cs_cell_builder_t ** | cb | ||
) |
Retrieve work buffers used for building a CDO system cellwise.
[out] | csys | pointer to a pointer on a cs_cell_sys_t structure |
[out] | cb | pointer to a pointer on a cs_cell_builder_t structure |
cs_real_t * cs_cdofb_scaleq_get_cell_values | ( | void * | context, |
bool | previous | ||
) |
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 faces) The lifecycle of this array is managed by the code. So one does not have to free the return pointer.
[in,out] | context | pointer to a data structure cast on-the-fly |
[in] | previous | retrieve the previous state (true/false) |
cs_real_t * cs_cdofb_scaleq_get_face_values | ( | void * | context, |
bool | previous | ||
) |
Retrieve an array of values at mesh faces for the current context. The lifecycle of this array is managed by the code. So one does not have to free the return pointer.
[in,out] | context | pointer to a data structure cast on-the-fly |
[in] | previous | retrieve the previous state (true/false) |
cs_real_t * cs_cdofb_scaleq_get_source_term_values | ( | void * | context | ) |
Retrieve the array storing the source term values at mesh cells. The lifecycle of this array is managed by the code. So one does not have to free the return pointer.
[in,out] | context | pointer to a data structure cast on-the-fly |
void * cs_cdofb_scaleq_init_context | ( | cs_equation_param_t * | eqp, |
int | var_id, | ||
int | bflux_id, | ||
cs_equation_builder_t * | eqb | ||
) |
Initialize a cs_cdofb_scaleq_t structure storing data useful for building and managing such a scheme.
[in,out] | eqp | set of parameters related an equation |
[in] | var_id | id of the variable field |
[in] | bflux_id | id of the boundary flux field |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
void cs_cdofb_scaleq_init_sharing | ( | const cs_cdo_quantities_t * | quant, |
const cs_cdo_connect_t * | connect, | ||
const cs_time_step_t * | time_step | ||
) |
Allocate work buffer and general structures related to CDO scalar-valued face-based schemes. Set shared pointers from the main domain members.
[in] | quant | additional mesh quantities struct. |
[in] | connect | pointer to a cs_cdo_connect_t struct. |
[in] | time_step | pointer to a time step structure |
void cs_cdofb_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-Fb schemes.
[in] | t_eval | time at which one evaluates BCs |
[in] | field_id | id related to the variable field of this equation |
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to the scheme context (cast on-the-fly) |
void cs_cdofb_scaleq_interpolate | ( | const cs_mesh_t * | mesh, |
const cs_real_t * | cell_values, | ||
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-Fb scheme Use for interpolation purpose from cell values to face values. One works cellwise and then process to the assembly.
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | cell_values | array of cell values |
[in] | field_id | id of the variable field |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to cs_cdofb_scaleq_t structure |
bool cs_cdofb_scaleq_is_initialized | ( | void | ) |
Check if the generic structures for building a CDO-Fb scheme are allocated.
void cs_cdofb_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.
[in,out] | restart | pointer to cs_restart_t structure |
[in] | eqname | name of the related equation |
[in] | scheme_context | pointer to a data structure cast on-the-fly |
void cs_cdofb_scaleq_solve_implicit | ( | bool | cur2prev, |
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 convection/diffusion/reaction equation with a CDO-Fb scheme and an implicit Euler scheme. One works cellwise and then process to the assembly.
[in] | cur2prev | true="current to previous" operation is performed |
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | field_id | id of the variable field related to this equation |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to cs_cdofb_scaleq_t structure |
void cs_cdofb_scaleq_solve_steady_state | ( | bool | cur2prev, |
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-Fb scheme One works cellwise and then process to the assembly.
[in] | cur2prev | true="current to previous" operation is performed |
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | field_id | id of the variable field related to this equation |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to cs_cdofb_scaleq_t structure |
void cs_cdofb_scaleq_solve_theta | ( | bool | cur2prev, |
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 convection/diffusion/reaction equation with a CDO-Fb scheme and an implicit/explicit theta scheme. One works cellwise and then process to the assembly.
[in] | cur2prev | true="current to previous" operation is performed |
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | field_id | id of the variable field related to this equation |
[in] | eqp | pointer to a cs_equation_param_t structure |
[in,out] | eqb | pointer to a cs_equation_builder_t structure |
[in,out] | context | pointer to cs_cdofb_scaleq_t structure |
void cs_cdofb_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.
[in,out] | restart | pointer to cs_restart_t structure |
[in] | eqname | name of the related equation |
[in] | scheme_context | pointer to a data structure cast on-the-fly |