![]() |
programmer's documentation
|
#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 "cs_cdo.h"
#include "cs_field.h"
#include "cs_hodge.h"
#include "cs_log.h"
#include "cs_math.h"
#include "cs_mesh_location.h"
#include "cs_parall.h"
#include "cs_param.h"
#include "cs_post.h"
#include "cs_reco.h"
#include "cs_gwf.h"
Macros | |
#define | CS_GWF_DBG 0 |
Functions | |
static void | _set_tracer_param (cs_gwf_tracer_t *tp, double wmd, double alpha_l, double alpha_t, double bulk_density, double distrib_coef, double reaction_rate) |
Set a cs_gwf_tracer_t structure. More... | |
static int | _get_tracer_id (const cs_gwf_t *gw, int tracer_eq_id) |
Get the id in a cs_gwf_t structure from the tracer equation id. More... | |
static void | _get_tracer_time_coeff (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t theta[], const void *tracer_struc, cs_real_t *result) |
Define the coefficient appearing in time-dependent term of the simulation of tracer equations This function fits the generic prototype of cs_onevar_law_func_t. More... | |
static void | _get_tracer_reaction_coeff (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t theta[], const void *tracer_struc, cs_real_t *result) |
Define the coefficient appearing in reaction term for the simulation of tracer equations This function fits the generic prototype of cs_onevar_law_func_t. More... | |
static void | _get_tracer_diffusion_tensor (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t theta[], const cs_real_t velocity[], const void *tracer_struc, cs_real_t *result) |
Define the coefficient appearing in the diffusion term of the tracer equation This function fits the generic prototype of cs_twovar_law_func_t. More... | |
static void | _genuchten_permeability_from_c_head (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t h_vals[], const void *soil_struc, cs_real_t *result) |
Define the permeability (or hydraulic conductivity) using the van Genuchten-Mualen law One assumes that pressure head is located at cells This function fits the generic prototype of cs_onevar_law_func_t. More... | |
static void | _genuchten_moisture_from_c_head (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t h_vals[], const void *soil_struc, cs_real_t result[]) |
Define the moisture content using the Van Genuchten law This function fits the generic prototype of cs_onevar_law_func_t. More... | |
static void | _genuchten_capacity_from_c_head (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t h_vals[], const void *soil_struc, cs_real_t result[]) |
Define the moisture content using the Van Genuchten law This function fits the generic prototype of cs_onevar_law_func_t. More... | |
static void | _tracy_permeability_from_c_head (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t h_vals[], const void *soil_struc, cs_real_t result[]) |
Define the permeability (or hydraulic conductivity) using the Tracy law This function fits the generic prototype of cs_onevar_law_func_t. More... | |
static void | _tracy_moisture_from_c_head (cs_lnum_t n_elts, const cs_lnum_t elt_ids[], const cs_real_t h_vals[], const void *soil_struc, cs_real_t result[]) |
Define the moisture content using the Tracy law This function fits the generic prototype of cs_onevar_law_func_t. More... | |
static void | _update_system (const cs_cdo_quantities_t *cdoq, const cs_cdo_connect_t *connect, const cs_equation_t *richards, bool cur2prev, cs_gwf_t *gw) |
Update the groundwater system (pressure head, head in law, moisture content, darcian velocity) More... | |
static cs_gwf_soil_t * | _init_soil (cs_gwf_t *gw, const char *ml_name, cs_gwf_hydraulic_model_t model, double theta_s, double rho) |
Initialize a cs_gwf_soil_t structure (already allocated) More... | |
cs_gwf_t * | cs_gwf_create (void) |
Create a structure dedicated to manage groundwater flows. More... | |
cs_gwf_t * | cs_gwf_finalize (cs_gwf_t *gw) |
Free the main structure related to groundwater flows. More... | |
int | cs_gwf_get_n_soils (const cs_gwf_t *gw) |
Get the number of requested soils. More... | |
void | cs_gwf_set_gravity_vector (cs_gwf_t *gw, const cs_real_3_t gvec) |
Activate the gravity and set the gravitaty vector. More... | |
void | cs_gwf_set_darcian_flux_location (cs_gwf_t *gw, cs_flag_t location_flag) |
Advanced setting: indicate where the darcian flux is stored cs_cdo_primal_cell is the default setting cs_cdo_dual_face_byc is a valid choice for vertex-based schemes. More... | |
void | cs_gwf_summary (const cs_gwf_t *gw) |
Summary of a cs_gwf_t structure. More... | |
cs_equation_t * | cs_gwf_initialize (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_gwf_t *gw) |
Initialize the module dedicated to groundwater flows. More... | |
void | cs_gwf_add_iso_soil_by_value (cs_gwf_t *gw, cs_gwf_hydraulic_model_t model, const char *ml_name, double k_s, double theta_s, double rho) |
Add a new soil attached to an isotropic permeability. More... | |
void | cs_gwf_add_ortho_soil_by_value (cs_gwf_t *gw, cs_gwf_hydraulic_model_t model, const char *ml_name, cs_real_t *ks, double theta_s, double rho) |
Add a new soil attached to an orthotropic permeability. More... | |
void | cs_gwf_add_aniso_soil_by_value (cs_gwf_t *gw, cs_gwf_hydraulic_model_t model, const char *ml_name, cs_real_t *ks, double theta_s, double rho) |
Add a new soil attached to an orthotropic permeability. More... | |
void | cs_gwf_set_soil_param (cs_gwf_t *gw, const char *ml_name, cs_gwf_soilkey_t key, const cs_real_t val) |
Set parameters related to a cs_gwf_t structure. More... | |
cs_equation_t * | cs_gwf_add_tracer (cs_gwf_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_gwf_set_tracer_param (cs_gwf_t *gw, int tracer_eq_id, const char *ml_name, double wmd, double alpha_l, double alpha_t, 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_gwf_richards_setup (cs_gwf_t *gw, cs_equation_t *richards) |
Predefined settings for the Richards equation. More... | |
bool | cs_gwf_tracer_needs_reaction (const cs_gwf_t *gw, int eq_id) |
Check if one needs to add a reaction term for a given tracer. More... | |
bool | cs_gwf_tracer_needs_diffusion (const cs_gwf_t *gw, int eq_id) |
Check if one needs to add a diffusion term for a given tracer. More... | |
void | cs_gwf_tracer_setup (int tracer_eq_id, cs_equation_t *eq, cs_gwf_t *gw) |
Predefined settings for a tracer equation. More... | |
void | cs_gwf_final_initialization (const cs_cdo_connect_t *connect, int n_equations, cs_equation_t **equations, cs_gwf_t *gw) |
Last initialization step of the groundwater flow module. More... | |
void | cs_gwf_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, cs_equation_t *eqs[], cs_gwf_t *gw) |
Compute the system related to groundwater flows module. More... | |
void | cs_gwf_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_ids[], const cs_lnum_t i_face_ids[], const cs_lnum_t b_face_ids[], 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 [] |
#define CS_GWF_DBG 0 |
|
static |
Define the moisture content using the Van Genuchten law This function fits the generic prototype of cs_onevar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | h_vals | values of the pressure head |
[in] | soil_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
static |
Define the moisture content using the Van Genuchten law This function fits the generic prototype of cs_onevar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | h_vals | values of the pressure head |
[in] | soil_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
static |
Define the permeability (or hydraulic conductivity) using the van Genuchten-Mualen law One assumes that pressure head is located at cells This function fits the generic prototype of cs_onevar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | h_vals | values of the pressure head |
[in] | soil_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
static |
Define the coefficient appearing in the diffusion term of the tracer equation This function fits the generic prototype of cs_twovar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | theta | values of the moisture content |
[in] | velocity | values of the local velocity |
[in] | tracer_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
inlinestatic |
Get the id in a cs_gwf_t structure from the tracer equation id.
[in] | gw | pointer to a cs_gwf_t structure |
[in] | tracer_eq_id | tracer equation id |
|
inlinestatic |
Define the coefficient appearing in reaction term for the simulation of tracer equations This function fits the generic prototype of cs_onevar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | theta | values of the moisture content |
[in] | tracer_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
inlinestatic |
Define the coefficient appearing in time-dependent term of the simulation of tracer equations This function fits the generic prototype of cs_onevar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | theta | values of the moisture content |
[in] | tracer_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
static |
Initialize a cs_gwf_soil_t structure (already allocated)
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | ml_name | name of the mesh location |
[in] | model | hydraulic modelling for this soil |
[in] | tetha_s | saturated moisture |
[in] | rho | bulk density |
|
inlinestatic |
Set a cs_gwf_tracer_t structure.
[in,out] | tp | pointer to a cs_gwf_tracer_t structure |
[in] | wmd | value of the water molecular diffusivity |
[in] | alpha_l | value of the longitudinal dispersivity |
[in] | alpha_t | value of the transversal dispersivity |
[in] | bulk_density | value of the bulk density |
[in] | distrib_coef | value of the distribution coefficient |
[in] | reaction_rate | value of the first order rate of reaction |
|
static |
Define the moisture content using the Tracy law This function fits the generic prototype of cs_onevar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | h_vals | values of the pressure head |
[in] | soil_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
inlinestatic |
Define the permeability (or hydraulic conductivity) using the Tracy law This function fits the generic prototype of cs_onevar_law_func_t.
[in] | n_elts | number of elements to treat |
[in] | elt_ids | list of element ids (NULL if no indirection) |
[in] | h_vals | values of the hydralic head |
[in] | soil_struc | pointer to a soil structure |
[in,out] | result | array storing the result |
|
static |
Update the groundwater system (pressure head, head in law, moisture content, darcian velocity)
[in] | cdoq | pointer to a cs_cdo_quantities_t structure |
[in] | connect | pointer to a cs_cdo_connect_t structure |
[in] | richards | pointer to the Richards equation structure |
[in] | cur2prev | true or false |
[in,out] | gw | pointer to a cs_gwf_t structure |
void cs_gwf_add_aniso_soil_by_value | ( | cs_gwf_t * | gw, |
cs_gwf_hydraulic_model_t | model, | ||
const char * | ml_name, | ||
cs_real_t * | ks, | ||
double | theta_s, | ||
double | rho | ||
) |
Add a new soil attached to an orthotropic permeability.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | model | type of modeling for the hydraulic behavior |
[in] | ml_name | name of the mesh location related to this soil |
[in] | k_s | value of the saturated permeability |
[in] | theta_s | saturated moisture |
[in] | rho | bulk density |
void cs_gwf_add_iso_soil_by_value | ( | cs_gwf_t * | gw, |
cs_gwf_hydraulic_model_t | model, | ||
const char * | ml_name, | ||
double | k_s, | ||
double | theta_s, | ||
double | rho | ||
) |
Add a new soil attached to an isotropic permeability.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | model | type of modeling for the hydraulic behavior |
[in] | ml_name | name of the mesh location related to this soil |
[in] | k_s | value of the saturated permeability |
[in] | theta_s | saturated moisture |
[in] | rho | bulk density |
void cs_gwf_add_ortho_soil_by_value | ( | cs_gwf_t * | gw, |
cs_gwf_hydraulic_model_t | model, | ||
const char * | ml_name, | ||
cs_real_t * | ks, | ||
double | theta_s, | ||
double | rho | ||
) |
Add a new soil attached to an orthotropic permeability.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | model | type of modeling for the hydraulic behavior |
[in] | ml_name | name of the mesh location related to this soil |
[in] | ks | value of the saturated permeability |
[in] | theta_s | saturated moisture |
[in] | rho | bulk density |
cs_equation_t* cs_gwf_add_tracer | ( | cs_gwf_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.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | tracer_eq_id | id related to the tracer equation |
[in] | eqname | name of the equation |
[in] | varname | name of the related variable |
void cs_gwf_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, | ||
cs_equation_t * | eqs[], | ||
cs_gwf_t * | gw | ||
) |
Compute the system related to groundwater flows module.
[in] | mesh | pointer to a cs_mesh_t structure |
[in] | time_step | pointer to a cs_time_step_t structure |
[in] | dt_cur | current value of the time step |
[in] | connect | pointer to a cs_cdo_connect_t structure |
[in] | cdoq | pointer to a cs_cdo_quantities_t structure |
[in,out] | eqs | array of pointers to cs_equation_t structures |
[in,out] | gw | pointer to a cs_gwf_t structure |
cs_gwf_t* cs_gwf_create | ( | void | ) |
Create a structure dedicated to manage groundwater flows.
void cs_gwf_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_ids[], | ||
const cs_lnum_t | i_face_ids[], | ||
const cs_lnum_t | b_face_ids[], | ||
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)
[in,out] | input | pointer to a optional structure (here a cs_gwf_t structure) |
[in] | mesh_id | id of the output mesh for the current call |
[in] | cat_id | category id of the output mesh for this call |
[in] | ent_flag | indicate 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_cells | local number of cells of post_mesh |
[in] | n_i_faces | local number of interior faces of post_mesh |
[in] | n_b_faces | local number of boundary faces of post_mesh |
[in] | cell_ids | list of cells (0 to n-1) |
[in] | i_face_ids | list of interior faces (0 to n-1) |
[in] | b_face_ids | list of boundary faces (0 to n-1) |
[in] | time_step | pointer to a cs_time_step_t struct. |
void cs_gwf_final_initialization | ( | const cs_cdo_connect_t * | connect, |
int | n_equations, | ||
cs_equation_t ** | equations, | ||
cs_gwf_t * | gw | ||
) |
Last initialization step of the groundwater flow module.
[in] | connect | pointer to a cs_cdo_connect_t structure |
[in] | n_equations | number of equations in the list |
[in,out] | equations | pointer to a list of cs_equation_t structures |
[in,out] | gw | pointer to a cs_gwf_t structure |
cs_gwf_t* cs_gwf_finalize | ( | cs_gwf_t * | gw | ) |
Free the main structure related to groundwater flows.
[in,out] | gw | pointer to a cs_gwf_t struct. to free |
int cs_gwf_get_n_soils | ( | const cs_gwf_t * | gw | ) |
Get the number of requested soils.
[in] | gw | pointer to a cs_gwf_t structure |
cs_equation_t* cs_gwf_initialize | ( | 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_gwf_t * | gw | ||
) |
Initialize the module dedicated to groundwater flows.
[in] | richards_eq_id | id related to the Richards equation |
[in] | n_soils | number of soils to consider |
[in] | n_tracers | number of tracers to consider |
[in,out] | permeability | pointer to a property structure |
[in,out] | soil_capacity | pointer to a property structure |
[in,out] | adv_field | pointer to a cs_adv_field_t structure |
[in,out] | gw | pointer to a cs_gwf_t structure |
void cs_gwf_richards_setup | ( | cs_gwf_t * | gw, |
cs_equation_t * | richards | ||
) |
Predefined settings for the Richards equation.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in,out] | richards | pointer to the related cs_equation_t structure |
void cs_gwf_set_darcian_flux_location | ( | cs_gwf_t * | gw, |
cs_flag_t | location_flag | ||
) |
Advanced setting: indicate where the darcian flux is stored cs_cdo_primal_cell is the default setting cs_cdo_dual_face_byc is a valid choice for vertex-based schemes.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | location_flag | where the flux is defined |
void cs_gwf_set_gravity_vector | ( | cs_gwf_t * | gw, |
const cs_real_3_t | gvec | ||
) |
Activate the gravity and set the gravitaty vector.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | gvec | values of the gravity vector |
void cs_gwf_set_soil_param | ( | cs_gwf_t * | gw, |
const char * | ml_name, | ||
cs_gwf_soilkey_t | key, | ||
const cs_real_t | val | ||
) |
Set parameters related to a cs_gwf_t structure.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | ml_name | name of the mesh location associated to this soil |
[in] | key | key related to a member of the soil to set |
[in] | val | value to set |
void cs_gwf_set_tracer_param | ( | cs_gwf_t * | gw, |
int | tracer_eq_id, | ||
const char * | ml_name, | ||
double | wmd, | ||
double | alpha_l, | ||
double | alpha_t, | ||
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.
[in,out] | gw | pointer to a cs_gwf_t structure |
[in] | tracer_eq_id | id related to the tracer equation |
[in] | ml_name | name of the related mesh location |
[in] | wmd | value of the water molecular diffusivity |
[in] | alpha_l | value of the longitudinal dispersivity |
[in] | alpha_t | value of the transversal dispersivity |
[in] | distrib_coef | value of the distribution coefficient |
[in] | reaction_rate | value of the first order rate of reaction |
void cs_gwf_summary | ( | const cs_gwf_t * | gw | ) |
Summary of a cs_gwf_t structure.
[in] | gw | pointer to a cs_gwf_t struct. to summarize |
bool cs_gwf_tracer_needs_diffusion | ( | const cs_gwf_t * | gw, |
int | eq_id | ||
) |
Check if one needs to add a diffusion term for a given tracer.
[in] | gw | pointer to a cs_gwf_t structure |
[in] | eq_id | id of the equation related to this tracer |
bool cs_gwf_tracer_needs_reaction | ( | const cs_gwf_t * | gw, |
int | eq_id | ||
) |
Check if one needs to add a reaction term for a given tracer.
[in] | gw | pointer to a cs_gwf_t structure |
[in] | eq_id | id of the equation related to this tracer |
void cs_gwf_tracer_setup | ( | int | tracer_eq_id, |
cs_equation_t * | eq, | ||
cs_gwf_t * | gw | ||
) |
Predefined settings for a tracer equation.
[in] | tracer_eq_id | id of the equation related to this tracer |
[in,out] | eq | pointer to the related cs_equation_t structure |
[in,out] | gw | pointer to a cs_gwf_t structure |
|
static |