programmer's documentation
Macros | Functions | Variables
cs_groundwater.c File Reference
#include "cs_defs.h"
#include <assert.h>
#include <ctype.h>
#include <float.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <bft_mem.h>
#include <bft_printf.h>
#include "cs_post.h"
#include "cs_mesh_location.h"
#include "cs_field.h"
#include "cs_cdo.h"
#include "cs_math.h"
#include "cs_param.h"
#include "cs_reco.h"
#include "cs_hodge.h"
#include "cs_groundwater.h"
Include dependency graph for cs_groundwater.c:

Macros

#define CS_GROUNDWATER_POST_MOISTURE   (1 << 0)
 

Functions

static void _set_tracer_param (cs_gw_tracer_t *tp, double wmd, double alpha_l, double alpha_t, double bulk_density, double distrib_coef, double reaction_rate)
 Set a cs_gw_tracer_t structure. More...
 
static void _init_soil (const char *ml_name, const char *model_kw, int n_tracers, cs_gw_soil_t *soil)
 Initialize a cs_gw_soil_t structure (already allocated) More...
 
static int _get_tracer_id (const cs_groundwater_t *gw, int tracer_eq_id)
 Get the id in a cs_groundwater_t structure from the tracer equation id. More...
 
static void _get_tracer_diffusion_tensor (double theta, const double v[], const void *tracer_struc, cs_get_t *result)
 Define the coefficient appearing in the diffusion term of the tracer equation. More...
 
static void _get_tracer_time_coeff (double theta, const void *tracer_struc, cs_get_t *result)
 Define the coefficient appearing in time-dependent term of the simulation of tracer equations. More...
 
static void _get_tracer_reaction_coeff (double theta, const void *tracer_struc, cs_get_t *result)
 Define the coefficient appearing in reaction term for the simulation of tracer equations. More...
 
static void _permeability_by_genuchten_law (double h, const void *soil_struc, cs_get_t *result)
 Define the permeability (or hydraulic conductivity) using the van Genuchten-Mualen law. More...
 
static void _moisture_by_genuchten_law (double h, const void *soil_struc, cs_get_t *result)
 Define the moisture content using the Van Genuchten law. More...
 
static void _capacity_by_genuchten_law (double h, const void *soil_struc, cs_get_t *result)
 Define the moisture content using the Van Genuchten law. More...
 
static void _permeability_by_tracy_law (double h, const void *soil_struc, cs_get_t *result)
 Define the permeability (or hydraulic conductivity) using the Tracy law. More...
 
static void _moisture_by_tracy_law (double h, const void *soil_struc, cs_get_t *result)
 Define the moisture content using the Tracy law. More...
 
static void _update_head (const cs_cdo_connect_t *connect, const cs_cdo_quantities_t *cdoq, const cs_equation_t *richards, cs_groundwater_t *gw)
 Update the pressure head from the value of the hydraulic head. More...
 
static void _update_moisture_content (const cs_cdo_quantities_t *cdoq, const cs_equation_t *richards, cs_groundwater_t *gw)
 Update the moisture content from the value of the hydraulic head. More...
 
static void _check_settings (const cs_groundwater_t *gw)
 Check if the setting is correct. More...
 
cs_groundwater_t * cs_groundwater_create (void)
 Create a structure dedicated to manage groundwater flows. More...
 
cs_groundwater_t * cs_groundwater_finalize (cs_groundwater_t *gw)
 Free the main structure related to groundwater flows. More...
 
int cs_groundwater_get_n_soils (const cs_groundwater_t *gw)
 Get the number of requested soils. More...
 
void cs_groundwater_set_param (cs_groundwater_t *gw, cs_groundwater_key_t key, const char *keyval)
 Set parameters related to a cs_groundwater_t structure. More...
 
void cs_groundwater_summary (const cs_groundwater_t *gw)
 Summary of a cs_groundwater_t structure. More...
 
cs_equation_t * cs_groundwater_initialize (const cs_cdo_connect_t *connect, int richards_eq_id, int n_soils, int n_tracer_eqs, cs_property_t *permeability, cs_property_t *soil_capacity, cs_adv_field_t *adv_field, cs_groundwater_t *gw)
 Initialize the module dedicated to groundwater flows. More...
 
void cs_groundwater_add_soil_by_value (cs_groundwater_t *gw, const char *ml_name, const char *model_kw, const char *pty_val)
 Add a new type of soil to consider in the groundwater module. More...
 
void cs_groundwater_set_soil_param (cs_groundwater_t *gw, const char *ml_name, cs_groundwater_soilkey_t key, const char *keyval)
 Set parameters related to a cs_groundwater_t structure. More...
 
cs_equation_t * cs_groundwater_add_tracer (cs_groundwater_t *gw, int tracer_eq_id, const char *eqname, const char *varname)
 Add a new equation related to the groundwater flow module This equation is a specific unsteady advection/diffusion/reaction eq. Tracer is advected thanks to the darcian velocity which is given by the resolution of the Richards equation. Diffusion and reaction parameters result from a physical modelling. More...
 
void cs_groundwater_set_tracer_param (cs_groundwater_t *gw, int tracer_eq_id, const char *ml_name, double wmd, double alpha_l, double alpha_t, double bulk_density, double distrib_coef, double reaction_rate)
 Add a new equation related to the groundwater flow module This equation is a specific unsteady advection/diffusion/reaction eq. Tracer is advected thanks to the darcian velocity which is given by the resolution of the Richards equation. Diffusion/reaction parameters result from a physical modelling. More...
 
void cs_groundwater_richards_setup (cs_groundwater_t *gw, cs_equation_t *richards)
 Predefined settings for the Richards equation. More...
 
bool cs_groundwater_tracer_needs_reaction (const cs_groundwater_t *gw, int eq_id)
 Check if one needs to add a reaction term for a given tracer. More...
 
bool cs_groundwater_tracer_needs_diffusion (const cs_groundwater_t *gw, int eq_id)
 Check if one needs to add a diffusion term for a given tracer. More...
 
void cs_groundwater_tracer_setup (int tracer_eq_id, cs_equation_t *eq, cs_groundwater_t *gw)
 Predefined settings for a tracer equation. More...
 
void cs_groundwater_compute (const cs_mesh_t *mesh, const cs_time_step_t *time_step, double dt_cur, const cs_cdo_connect_t *connect, const cs_cdo_quantities_t *cdoq, bool do_logcvg, cs_equation_t *eqs[], cs_groundwater_t *gw)
 Compute the system related to groundwater flows module. More...
 
void cs_groundwater_extra_post (void *input, int mesh_id, int cat_id, int ent_flag[5], cs_lnum_t n_cells, cs_lnum_t n_i_faces, cs_lnum_t n_b_faces, const cs_lnum_t cell_list[], const cs_lnum_t i_face_list[], const cs_lnum_t b_face_list[], const cs_time_step_t *time_step)
 Predefined post-processing output for the groundwater flow module prototype of this function is fixed since it is a function pointer defined in cs_post.h (cs_post_time_mesh_dep_output_t) More...
 

Variables

static const char _err_empty_gw []
 

Macro Definition Documentation

◆ CS_GROUNDWATER_POST_MOISTURE

#define CS_GROUNDWATER_POST_MOISTURE   (1 << 0)

Function Documentation

◆ _capacity_by_genuchten_law()

static void _capacity_by_genuchten_law ( double  h,
const void *  soil_struc,
cs_get_t result 
)
static

Define the moisture content using the Van Genuchten law.

Parameters
[in]hvalue of the hydralic head
[in]soil_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _check_settings()

static void _check_settings ( const cs_groundwater_t *  gw)
static

Check if the setting is correct.

Parameters
[in]gwpointer to a cs_groundwater_t struct.

◆ _get_tracer_diffusion_tensor()

static void _get_tracer_diffusion_tensor ( double  theta,
const double  v[],
const void *  tracer_struc,
cs_get_t result 
)
inlinestatic

Define the coefficient appearing in the diffusion term of the tracer equation.

Parameters
[in]thetavalue of the moisture content
[in]vvalue of the local velocity
[in]tracer_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _get_tracer_id()

static int _get_tracer_id ( const cs_groundwater_t *  gw,
int  tracer_eq_id 
)
inlinestatic

Get the id in a cs_groundwater_t structure from the tracer equation id.

Parameters
[in]gwpointer to a cs_groundwater_t structure
[in]tracer_eq_idtracer equation id
Returns
an id related to this tracer equation id

◆ _get_tracer_reaction_coeff()

static void _get_tracer_reaction_coeff ( double  theta,
const void *  tracer_struc,
cs_get_t result 
)
inlinestatic

Define the coefficient appearing in reaction term for the simulation of tracer equations.

Parameters
[in]thetavalue of the moisture content
[in]tracer_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _get_tracer_time_coeff()

static void _get_tracer_time_coeff ( double  theta,
const void *  tracer_struc,
cs_get_t result 
)
inlinestatic

Define the coefficient appearing in time-dependent term of the simulation of tracer equations.

Parameters
[in]thetavalue of the moisture content
[in]tracer_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _init_soil()

static void _init_soil ( const char *  ml_name,
const char *  model_kw,
int  n_tracers,
cs_gw_soil_t *  soil 
)
static

Initialize a cs_gw_soil_t structure (already allocated)

Parameters
[in]ml_namename of the mesh location
[in]model_kwkeyword related to the modelling
[in]n_tracersnumber of related tracer eqs
[in,out]soilpointer to a cs_gw_soil_t structure

◆ _moisture_by_genuchten_law()

static void _moisture_by_genuchten_law ( double  h,
const void *  soil_struc,
cs_get_t result 
)
static

Define the moisture content using the Van Genuchten law.

Parameters
[in]hvalue of the hydralic head
[in]soil_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _moisture_by_tracy_law()

static void _moisture_by_tracy_law ( double  h,
const void *  soil_struc,
cs_get_t result 
)
inlinestatic

Define the moisture content using the Tracy law.

Parameters
[in]hvalue of the hydralic head
[in]soil_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _permeability_by_genuchten_law()

static void _permeability_by_genuchten_law ( double  h,
const void *  soil_struc,
cs_get_t result 
)
inlinestatic

Define the permeability (or hydraulic conductivity) using the van Genuchten-Mualen law.

Parameters
[in]hvalue of the hydralic head
[in]soil_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _permeability_by_tracy_law()

static void _permeability_by_tracy_law ( double  h,
const void *  soil_struc,
cs_get_t result 
)
inlinestatic

Define the permeability (or hydraulic conductivity) using the Tracy law.

Parameters
[in]hvalue of the hydralic head
[in]soil_strucpointer to a soil structure
[in,out]resultpointer to a cs_get_t structure

◆ _set_tracer_param()

static void _set_tracer_param ( cs_gw_tracer_t *  tp,
double  wmd,
double  alpha_l,
double  alpha_t,
double  bulk_density,
double  distrib_coef,
double  reaction_rate 
)
static

Set a cs_gw_tracer_t structure.

Parameters
[in,out]tppointer to a cs_gw_tracer_t structure
[in]wmdvalue of the water molecular diffusivity
[in]alpha_lvalue of the longitudinal dispersivity
[in]alpha_tvalue of the transversal dispersivity
[in]bulk_densityvalue of the bulk density
[in]distrib_coefvalue of the distribution coefficient
[in]reaction_ratevalue of the first order rate of reaction

◆ _update_head()

static void _update_head ( const cs_cdo_connect_t connect,
const cs_cdo_quantities_t cdoq,
const cs_equation_t *  richards,
cs_groundwater_t *  gw 
)
static

Update the pressure head from the value of the hydraulic head.

Parameters
[in]connectpointer to a cs_cdo_connect_t structure
[in]cdoqpointer to a cs_cdo_quantities_t structure
[in]richardspointer to the Richards equation structure
[in,out]gwpointer to a cs_groundwater_t structure

◆ _update_moisture_content()

static void _update_moisture_content ( const cs_cdo_quantities_t cdoq,
const cs_equation_t *  richards,
cs_groundwater_t *  gw 
)
static

Update the moisture content from the value of the hydraulic head.

Parameters
[in]cdoqpointer to a cs_cdo_quantities_t structure
[in]richardspointer to the Richards equation structure
[in,out]gwpointer to a cs_groundwater_t structure

◆ cs_groundwater_add_soil_by_value()

void cs_groundwater_add_soil_by_value ( cs_groundwater_t *  gw,
const char *  ml_name,
const char *  model_kw,
const char *  pty_val 
)

Add a new type of soil to consider in the groundwater module.

Parameters
[in,out]gwpointer to a cs_groundwater_t structure
[in]ml_namename of the mesh location related to this soil
[in]model_kwkeyword related to the model used
[in]ksvalue(s) of the saturated permeability

◆ cs_groundwater_add_tracer()

cs_equation_t* cs_groundwater_add_tracer ( cs_groundwater_t *  gw,
int  tracer_eq_id,
const char *  eqname,
const char *  varname 
)

Add a new equation related to the groundwater flow module This equation is a specific unsteady advection/diffusion/reaction eq. Tracer is advected thanks to the darcian velocity which is given by the resolution of the Richards equation. Diffusion and reaction parameters result from a physical modelling.

Parameters
[in,out]gwpointer to a cs_groundwater_t structure
[in]tracer_eq_idid related to the tracer equation
[in]eqnamename of the equation
[in]varnamename of the related variable
Returns
a pointer to a new allocated equation structure (Tracer eq.)

◆ cs_groundwater_compute()

void cs_groundwater_compute ( const cs_mesh_t mesh,
const cs_time_step_t time_step,
double  dt_cur,
const cs_cdo_connect_t connect,
const cs_cdo_quantities_t cdoq,
bool  do_logcvg,
cs_equation_t *  eqs[],
cs_groundwater_t *  gw 
)

Compute the system related to groundwater flows module.

Parameters
[in]meshpointer to a cs_mesh_t structure
[in]time_steppointer to a cs_time_step_t structure
[in]dt_curcurrent value of the time step
[in]connectpointer to a cs_cdo_connect_t structure
[in]cdoqpointer to a cs_cdo_quantities_t structure
[in]do_logcvgoutput information on convergence or not
[in,out]eqsarray of pointers to cs_equation_t structures
[in,out]gwpointer to a cs_groundwater_t structure

◆ cs_groundwater_create()

cs_groundwater_t* cs_groundwater_create ( void  )

Create a structure dedicated to manage groundwater flows.

Returns
a pointer to a new allocated cs_groundwater_t structure

◆ cs_groundwater_extra_post()

void cs_groundwater_extra_post ( void *  input,
int  mesh_id,
int  cat_id,
int  ent_flag[5],
cs_lnum_t  n_cells,
cs_lnum_t  n_i_faces,
cs_lnum_t  n_b_faces,
const cs_lnum_t  cell_list[],
const cs_lnum_t  i_face_list[],
const cs_lnum_t  b_face_list[],
const cs_time_step_t time_step 
)

Predefined post-processing output for the groundwater flow module prototype of this function is fixed since it is a function pointer defined in cs_post.h (cs_post_time_mesh_dep_output_t)

Parameters
[in,out]inputpointer to a optional structure (here a cs_groundwater_t structure)
[in]mesh_idid of the output mesh for the current call
[in]cat_idcategory id of the output mesh for this call
[in]ent_flagindicate global presence of cells (ent_flag[0]), interior faces (ent_flag[1]), boundary faces (ent_flag[2]), particles (ent_flag[3]) or probes (ent_flag[4])
[in]n_cellslocal number of cells of post_mesh
[in]n_i_faceslocal number of interior faces of post_mesh
[in]n_b_faceslocal number of boundary faces of post_mesh
[in]cell_listlist of cells (1 to n)
[in]i_face_listlist of interior faces (1 to n)
[in]b_face_listlist of boundary faces (1 to n)
[in]time_steppointer to a cs_time_step_t struct.

◆ cs_groundwater_finalize()

cs_groundwater_t* cs_groundwater_finalize ( cs_groundwater_t *  gw)

Free the main structure related to groundwater flows.

Parameters
[in,out]gwpointer to a cs_groundwater_t struct. to free
Returns
a NULL pointer

◆ cs_groundwater_get_n_soils()

int cs_groundwater_get_n_soils ( const cs_groundwater_t *  gw)

Get the number of requested soils.

Parameters
[in]gwpointer to a cs_groundwater_t structure
Returns
the number of requested soils

◆ cs_groundwater_initialize()

cs_equation_t* cs_groundwater_initialize ( const cs_cdo_connect_t connect,
int  richards_eq_id,
int  n_soils,
int  n_tracer_eqs,
cs_property_t *  permeability,
cs_property_t *  soil_capacity,
cs_adv_field_t *  adv_field,
cs_groundwater_t *  gw 
)

Initialize the module dedicated to groundwater flows.

Parameters
[in]connectpointer to a cs_cdo_connect_t structure
[in]richards_eq_idid related to the Richards equation
[in]n_soilsnumber of soils to consider
[in]n_tracersnumber of tracers to consider
[in,out]permeabilitypointer to a property structure
[in,out]soil_capacitypointer to a property structure
[in,out]adv_fieldpointer to a cs_adv_field_t structure
[in,out]gwpointer to a cs_groundwater_t structure
Returns
a pointer to a new allocated equation structure (Richards eq.)

◆ cs_groundwater_richards_setup()

void cs_groundwater_richards_setup ( cs_groundwater_t *  gw,
cs_equation_t *  richards 
)

Predefined settings for the Richards equation.

Parameters
[in,out]gwpointer to a cs_groundwater_t structure
[in,out]richardspointer to the related cs_equation_t structure

◆ cs_groundwater_set_param()

void cs_groundwater_set_param ( cs_groundwater_t *  gw,
cs_groundwater_key_t  key,
const char *  keyval 
)

Set parameters related to a cs_groundwater_t structure.

Parameters
[in,out]gwpointer to a cs_groundwater_t structure
[in]keykey related to the member of gw to set
[in]keyvalaccessor to the value to set

◆ cs_groundwater_set_soil_param()

void cs_groundwater_set_soil_param ( cs_groundwater_t *  gw,
const char *  ml_name,
cs_groundwater_soilkey_t  key,
const char *  keyval 
)

Set parameters related to a cs_groundwater_t structure.

Parameters
[in,out]gwpointer to a cs_groundwater_t structure
[in]ml_namename of the mesh location associated to this soil
[in]keykey related to a member of the soil to set
[in]keyvalaccessor to the value to set

◆ cs_groundwater_set_tracer_param()

void cs_groundwater_set_tracer_param ( cs_groundwater_t *  gw,
int  tracer_eq_id,
const char *  ml_name,
double  wmd,
double  alpha_l,
double  alpha_t,
double  bulk_density,
double  distrib_coef,
double  reaction_rate 
)

Add a new equation related to the groundwater flow module This equation is a specific unsteady advection/diffusion/reaction eq. Tracer is advected thanks to the darcian velocity which is given by the resolution of the Richards equation. Diffusion/reaction parameters result from a physical modelling.

Parameters
[in,out]gwpointer to a cs_groundwater_t structure
[in]tracer_eq_idid related to the tracer equation
[in]ml_namename of the related mesh location
[in]wmdvalue of the water molecular diffusivity
[in]alpha_lvalue of the longitudinal dispersivity
[in]alpha_tvalue of the transversal dispersivity
[in]bulk_densityvalue of the bulk density
[in]distrib_coefvalue of the distribution coefficient
[in]reaction_ratevalue of the first order rate of reaction

◆ cs_groundwater_summary()

void cs_groundwater_summary ( const cs_groundwater_t *  gw)

Summary of a cs_groundwater_t structure.

Parameters
[in]gwpointer to a cs_groundwater_t struct. to summarize

◆ cs_groundwater_tracer_needs_diffusion()

bool cs_groundwater_tracer_needs_diffusion ( const cs_groundwater_t *  gw,
int  eq_id 
)

Check if one needs to add a diffusion term for a given tracer.

Parameters
[in]gwpointer to a cs_groundwater_t structure
[in]eq_idid of the equation related to this tracer
Returns
true or false

◆ cs_groundwater_tracer_needs_reaction()

bool cs_groundwater_tracer_needs_reaction ( const cs_groundwater_t *  gw,
int  eq_id 
)

Check if one needs to add a reaction term for a given tracer.

Parameters
[in]gwpointer to a cs_groundwater_t structure
[in]eq_idid of the equation related to this tracer
Returns
true or false

◆ cs_groundwater_tracer_setup()

void cs_groundwater_tracer_setup ( int  tracer_eq_id,
cs_equation_t *  eq,
cs_groundwater_t *  gw 
)

Predefined settings for a tracer equation.

Parameters
[in]tracer_eq_idid of the equation related to this tracer
[in,out]eqpointer to the related cs_equation_t structure
[in,out]gwpointer to a cs_groundwater_t structure

Variable Documentation

◆ _err_empty_gw

const char _err_empty_gw[]
static
Initial value:
=
" Stop execution. The structure related to the groundwater module is empty.\n"
" Please check your settings.\n"