My Project
programmer's documentation
Macros | Functions | Variables
cs_hho_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_boundary_zone.h"
#include "cs_cdo_advection.h"
#include "cs_cdo_bc.h"
#include "cs_cdo_diffusion.h"
#include "cs_equation_assemble.h"
#include "cs_equation_bc.h"
#include "cs_equation_common.h"
#include "cs_hho_builder.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_scheme_geometry.h"
#include "cs_search.h"
#include "cs_sdm.h"
#include "cs_source_term.h"
#include "cs_hho_scaleq.h"
Include dependency graph for cs_hho_scaleq.c:

Macros

#define CS_HHO_SCALEQ_DBG   0
 
#define _dp3   cs_math_3_dot_product
 

Functions

static cs_cell_builder_t_cell_builder_create (cs_param_space_scheme_t space_scheme, const cs_cdo_connect_t *connect)
 Initialize the local builder structure used for building the system cellwise. More...
 
static void _init_cell_system (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_hho_scaleq_t *eqc, cs_real_t t_eval, cs_hho_builder_t *hhob, cs_cell_sys_t *csys, cs_cell_builder_t *cb)
 Initialize the local structures for the current cell. More...
 
static void _condense_and_store (const cs_adjacency_t *c2f, cs_hho_scaleq_t *eqc, 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...
 
void cs_hho_scaleq_init_common (cs_flag_t scheme_flag, const cs_cdo_quantities_t *quant, const cs_cdo_connect_t *connect, const cs_time_step_t *time_step, const cs_matrix_structure_t *ms0, const cs_matrix_structure_t *ms1, const cs_matrix_structure_t *ms2)
 Allocate work buffer and general structures related to HHO schemes Set shared pointers. More...
 
void cs_hho_scaleq_get (cs_cell_sys_t **csys, cs_cell_builder_t **cb, cs_hho_builder_t **hhob)
 Retrieve work buffers used for building a CDO system cellwise. More...
 
void cs_hho_scaleq_finalize_common (void)
 Free buffers and generic structures related to HHO schemes. More...
 
void * cs_hho_scaleq_init_context (const cs_equation_param_t *eqp, int var_id, int bflux_id, cs_equation_builder_t *eqb)
 Initialize a cs_hho_scaleq_t structure storing data useful for building and managing such a scheme. More...
 
void * cs_hho_scaleq_free_context (void *data)
 Destroy a cs_hho_scaleq_t structure. More...
 
void cs_hho_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 HHO schemes. More...
 
void cs_hho_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_hho_scaleq_build_system (const cs_mesh_t *mesh, const cs_real_t *field_val, 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 HHO scheme. One works cellwise and then process to the assembly. More...
 
void cs_hho_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 required for hybrid discretization. More...
 
cs_real_tcs_hho_scaleq_get_face_values (void *data)
 Get the computed values at faces (DoF used in the linear system are located at primal faces) More...
 
cs_real_tcs_hho_scaleq_get_cell_values (void *data)
 Get the computed values at cells (DoF used in the linear system are located at primal faces) More...
 
void cs_hho_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_hho_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_hho_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_hho_cell_sys = NULL
 
static cs_cell_builder_t ** cs_hho_cell_bld = NULL
 
static cs_hho_builder_t ** cs_hho_builders = 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_ms0
 
static const cs_matrix_structure_tcs_shared_ms1
 
static const cs_matrix_structure_tcs_shared_ms2
 

Macro Definition Documentation

◆ _dp3

#define _dp3   cs_math_3_dot_product

◆ CS_HHO_SCALEQ_DBG

#define CS_HHO_SCALEQ_DBG   0

Function Documentation

◆ _cell_builder_create()

static cs_cell_builder_t* _cell_builder_create ( cs_param_space_scheme_t  space_scheme,
const cs_cdo_connect_t connect 
)
static

Initialize the local builder structure used for building the system cellwise.

Parameters
[in]space_schemediscretization scheme
[in]connectpointer to a cs_cdo_connect_t structure
Returns
a pointer to a new allocated cs_cell_builder_t structure

◆ _condense_and_store()

static void _condense_and_store ( const cs_adjacency_t c2f,
cs_hho_scaleq_t *  eqc,
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]c2fpointer to a cs_adjacency_t structure
[in,out]eqcpointer to a cs_hho_scaleq_t structure
[in,out]cbpointer to a cs_cell_builder_t structure
[in,out]csyspointer to a cs_cell_sys_t structure

◆ _init_cell_system()

static void _init_cell_system ( 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_hho_scaleq_t *  eqc,
cs_real_t  t_eval,
cs_hho_builder_t hhob,
cs_cell_sys_t csys,
cs_cell_builder_t cb 
)
static

Initialize the local structures 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]eqcpointer to a cs_hho_scaleq_t structure
[in]t_evaltime at which one performs the evaluation
[in,out]hhobpointer to a cs_hho_builder_t structure
[in,out]csyspointer to a cellwise view of the system
[in,out]cbpointer to a cellwise builder

◆ cs_hho_scaleq_build_system()

void cs_hho_scaleq_build_system ( const cs_mesh_t mesh,
const cs_real_t field_val,
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 HHO 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 field
[in]eqppointer to a cs_equation_param_t structure
[in,out]eqbpointer to a cs_equation_builder_t structure
[in,out]datapointer to cs_hho_scaleq_t structure
[in,out]rhsright-hand side
[in,out]matrixpointer to cs_matrix_t structure to compute

◆ cs_hho_scaleq_extra_op()

void cs_hho_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_hho_scaleq_t structure

◆ cs_hho_scaleq_finalize_common()

void cs_hho_scaleq_finalize_common ( void  )

Free buffers and generic structures related to HHO schemes.

◆ cs_hho_scaleq_free_context()

void* cs_hho_scaleq_free_context ( void *  data)

Destroy a cs_hho_scaleq_t structure.

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

◆ cs_hho_scaleq_get()

void cs_hho_scaleq_get ( cs_cell_sys_t **  csys,
cs_cell_builder_t **  cb,
cs_hho_builder_t **  hhob 
)

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
[out]hhobpointer to a pointer on a cs_hho_builder_t structure

◆ cs_hho_scaleq_get_cell_values()

cs_real_t* cs_hho_scaleq_get_cell_values ( void *  data)

Get the computed values at cells (DoF used in the linear system are located at primal faces)

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

◆ cs_hho_scaleq_get_face_values()

cs_real_t* cs_hho_scaleq_get_face_values ( void *  data)

Get the computed values at faces (DoF used in the linear system are located at primal faces)

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

◆ cs_hho_scaleq_init_common()

void cs_hho_scaleq_init_common ( cs_flag_t  scheme_flag,
const cs_cdo_quantities_t quant,
const cs_cdo_connect_t connect,
const cs_time_step_t time_step,
const cs_matrix_structure_t ms0,
const cs_matrix_structure_t ms1,
const cs_matrix_structure_t ms2 
)

Allocate work buffer and general structures related to HHO schemes Set shared pointers.

Parameters
[in]scheme_flagflag to identify which kind of numerical scheme is requested to solve the computational domain
[in]quantadditional mesh quantities struct.
[in]connectpointer to a cs_cdo_connect_t struct.
[in]time_steppointer to a time step structure
[in]ms0pointer to a cs_matrix_structure_t structure (P0)
[in]ms1pointer to a cs_matrix_structure_t structure (P1)
[in]ms2pointer to a cs_matrix_structure_t structure (P2)

◆ cs_hho_scaleq_init_context()

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

Initialize a cs_hho_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_hho_scaleq_t structure

◆ cs_hho_scaleq_init_values()

void cs_hho_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 HHO 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_hho_scaleq_initialize_system()

void cs_hho_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 generic data 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_hho_scaleq_read_restart()

void cs_hho_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_hho_scaleq_update_field()

void cs_hho_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 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_hho_scaleq_t structure
[in,out]field_valpointer to the current value of the field

◆ cs_hho_scaleq_write_restart()

void cs_hho_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

◆ cs_hho_builders

cs_hho_builder_t** cs_hho_builders = NULL
static

◆ cs_hho_cell_bld

cs_cell_builder_t** cs_hho_cell_bld = NULL
static

◆ cs_hho_cell_sys

cs_cell_sys_t** cs_hho_cell_sys = NULL
static

◆ cs_shared_connect

const cs_cdo_connect_t* cs_shared_connect
static

◆ cs_shared_ms0

const cs_matrix_structure_t* cs_shared_ms0
static

◆ cs_shared_ms1

const cs_matrix_structure_t* cs_shared_ms1
static

◆ cs_shared_ms2

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