Main functions dedicated to soil management in groundwater flows when using CDO schemes. More...
#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_array.h"
#include "cs_field.h"
#include "cs_log.h"
#include "cs_math.h"
#include "cs_parall.h"
#include "cs_param_types.h"
#include "cs_post.h"
#include "cs_reco.h"
#include "cs_volume_zone.h"
#include "cs_gwf_soil.h"
Macros | |
#define | CS_GWF_SOIL_DBG 0 |
Functions | |
int | cs_gwf_get_n_soils (void) |
Get the number of allocated soils. More... | |
cs_gwf_soil_t * | cs_gwf_soil_create (const cs_zone_t *zone, cs_gwf_model_type_t hydraulic_model, cs_gwf_soil_model_t model, cs_property_type_t perm_type, double k_abs[3][3], double porosity, double bulk_density, void *hydraulic_context) |
Create a new cs_gwf_soil_t structure and add it to the array of soils. An initialization by default of all members is performed. More... | |
cs_gwf_soil_t * | cs_gwf_soil_by_id (int id) |
Retrieve a soil structure from its id. More... | |
cs_gwf_soil_t * | cs_gwf_soil_by_name (const char *name) |
Retrieve a soil structure from its name. More... | |
const cs_zone_t * | cs_gwf_soil_get_zone (int soil_id) |
Retrieve a zone associated to a soil from its id. More... | |
void | cs_gwf_soil_free_all (void) |
Free all cs_gwf_soil_t structures. More... | |
void | cs_gwf_soil_finalize_setup (cs_gwf_model_type_t gwf_model, cs_flag_t post_flag, cs_lnum_t n_cells) |
Last initialization step for the soil structures/parameters. More... | |
void | cs_gwf_soil_log_setup (void) |
Summary of the settings related to all cs_gwf_soil_t structures. More... | |
void | cs_gwf_soil_update (cs_real_t time_eval, const cs_mesh_t *mesh, const cs_cdo_connect_t *connect, const cs_cdo_quantities_t *cdoq) |
Update the soil properties. More... | |
void | cs_gwf_soil_update_soil_state (cs_lnum_t n_cells, const cs_real_t *sliq) |
Update the soil state associated to each cell w.r.t. the given liquid saturation. More... | |
void | cs_gwf_soil_define_shared_properties (cs_property_t *abs_permeability, cs_property_t *soil_porosity) |
Set the definition of the soil porosity and absolute permeability (which are properties always defined in the GWF module). One relies on the definition of these properties in each soil. More... | |
void | cs_gwf_soil_define_sspf_property (cs_property_t *moisture_content) |
Set the definition of the soil porosity and absolute porosity (which are properties always defined). This relies on the definition of each soil. More... | |
void | cs_gwf_soil_build_dual_porous_volume (const cs_cdo_quantities_t *cdoq, const cs_cdo_connect_t *connect) |
Build an array storing the dual volume associated to each vertex taking into account the porosity of the soil The computed quantity is stored as a static array. Use the function cs_gwf_soil_get_dual_vol_l() More... | |
const double * | cs_gwf_soil_get_dual_porous_volume (void) |
Get the array storing the dual volume weighted by the soil porosity Array of size n_vertices. More... | |
const short int * | cs_gwf_soil_get_cell2soil (void) |
Get the array storing the associated soil for each cell. More... | |
const int * | cs_gwf_soil_get_soil_state (void) |
Get the array storing the soil state associated to each cell. More... | |
cs_real_t | cs_gwf_soil_get_porosity (int soil_id) |
Get the porosity value for the given soil id. More... | |
cs_real_t | cs_gwf_soil_get_saturated_moisture (int soil_id) |
Get the saturated moisture for the given soil id. More... | |
int | cs_gwf_soil_get_permeability_max_dim (void) |
Retrieve the max dim (aniso=9; iso=1) for the absolute permeability associated to each soil. More... | |
void | cs_gwf_soil_set_vgm_spf_param (cs_gwf_soil_t *soil, double theta_r, double alpha, double n, double L) |
Set a soil defined by a Van Genuchten-Mualem model in the case of single-phase flow in an (unsaturated) porous media. More... | |
void | cs_gwf_soil_set_vgm_tpf_param (cs_gwf_soil_t *soil, double n, double pr_r, double sl_r, double sl_s) |
Set the parameters related to a Van Genuchten-Mualen model to defined the behavior of a soil in the case of two-phase flow in an porous media. More... | |
void | cs_gwf_soil_set_vgm_tpf_advanced_param (cs_gwf_soil_t *soil, cs_gwf_soil_join_type_t sle_jtype, cs_gwf_soil_join_type_t kr_jtype, double sle_thres) |
Set advanced parameter settings related to a Van Genuchten-Mualen soil model. More... | |
void | cs_gwf_soil_set_user_model_param (cs_gwf_soil_t *soil, void *param, cs_gwf_soil_update_t *update_func, cs_gwf_soil_free_param_t *free_param_func) |
Set a soil defined by a user-defined model. More... | |
Main functions dedicated to soil management in groundwater flows when using CDO schemes.
#define CS_GWF_SOIL_DBG 0 |
int cs_gwf_get_n_soils | ( | void | ) |
Get the number of allocated soils.
void cs_gwf_soil_build_dual_porous_volume | ( | const cs_cdo_quantities_t * | cdoq, |
const cs_cdo_connect_t * | connect | ||
) |
Build an array storing the dual volume associated to each vertex taking into account the porosity of the soil The computed quantity is stored as a static array. Use the function cs_gwf_soil_get_dual_vol_l()
[in] | cdoq | additional geometrical quantities for CDO schemes |
[in] | connect | additional connectivities for CDO schemes |
cs_gwf_soil_t* cs_gwf_soil_by_id | ( | int | id | ) |
Retrieve a soil structure from its id.
[in] | id | id to look for |
cs_gwf_soil_t* cs_gwf_soil_by_name | ( | const char * | name | ) |
Retrieve a soil structure from its name.
[in] | name | name to look for |
cs_gwf_soil_t* cs_gwf_soil_create | ( | const cs_zone_t * | zone, |
cs_gwf_model_type_t | hydraulic_model, | ||
cs_gwf_soil_model_t | model, | ||
cs_property_type_t | perm_type, | ||
double | k_abs[3][3], | ||
double | porosity, | ||
double | bulk_density, | ||
void * | hydraulic_context | ||
) |
Create a new cs_gwf_soil_t structure and add it to the array of soils. An initialization by default of all members is performed.
[in] | zone | pointer to a volume zone structure |
[in] | hydraulic_model | main hydraulic model for the module |
[in] | model | type of model for the soil behavior |
[in] | perm_type | type of permeability (iso/anisotropic) |
[in] | k_abs | absolute (intrisic) permeability |
[in] | porosity | porosity or max. moisture content |
[in] | bulk_density | value of the mass density |
[in] | hydraulic_context | pointer to the context structure |
void cs_gwf_soil_define_shared_properties | ( | cs_property_t * | abs_permeability, |
cs_property_t * | soil_porosity | ||
) |
Set the definition of the soil porosity and absolute permeability (which are properties always defined in the GWF module). One relies on the definition of these properties in each soil.
[in,out] | abs_permeability | pointer to a cs_property_t structure |
[in,out] | soil_porosity | pointer to a cs_property_t structure |
void cs_gwf_soil_define_sspf_property | ( | cs_property_t * | moisture_content | ) |
Set the definition of the soil porosity and absolute porosity (which are properties always defined). This relies on the definition of each soil.
[in,out] | moisture_content | pointer to a cs_property_t structure |
void cs_gwf_soil_finalize_setup | ( | cs_gwf_model_type_t | gwf_model, |
cs_flag_t | post_flag, | ||
cs_lnum_t | n_cells | ||
) |
Last initialization step for the soil structures/parameters.
[in] | gwf_model | modelling used for the GWF module |
[in] | post_flag | which post-processing to do |
[in] | n_cells | number of cells |
void cs_gwf_soil_free_all | ( | void | ) |
Free all cs_gwf_soil_t structures.
const short int* cs_gwf_soil_get_cell2soil | ( | void | ) |
Get the array storing the associated soil for each cell.
const double* cs_gwf_soil_get_dual_porous_volume | ( | void | ) |
Get the array storing the dual volume weighted by the soil porosity Array of size n_vertices.
int cs_gwf_soil_get_permeability_max_dim | ( | void | ) |
Retrieve the max dim (aniso=9; iso=1) for the absolute permeability associated to each soil.
cs_real_t cs_gwf_soil_get_porosity | ( | int | soil_id | ) |
Get the porosity value for the given soil id.
[in] | soil_id | id of the requested soil |
cs_real_t cs_gwf_soil_get_saturated_moisture | ( | int | soil_id | ) |
Get the saturated moisture for the given soil id.
[in] | soil_id | id of the requested soil |
const int* cs_gwf_soil_get_soil_state | ( | void | ) |
Get the array storing the soil state associated to each cell.
const cs_zone_t* cs_gwf_soil_get_zone | ( | int | soil_id | ) |
Retrieve a zone associated to a soil from its id.
[in] | soil_id | id to look for |
void cs_gwf_soil_log_setup | ( | void | ) |
Summary of the settings related to all cs_gwf_soil_t structures.
void cs_gwf_soil_set_user_model_param | ( | cs_gwf_soil_t * | soil, |
void * | param, | ||
cs_gwf_soil_update_t * | update_func, | ||
cs_gwf_soil_free_param_t * | free_param_func | ||
) |
Set a soil defined by a user-defined model.
[in,out] | soil | pointer to a cs_gwf_soil_t structure |
[in] | param | pointer to a structure cast on-the-fly |
[in] | update_func | function pointer to update propoerties |
[in] | free_param_func | function pointer to free the param struct. |
void cs_gwf_soil_set_vgm_spf_param | ( | cs_gwf_soil_t * | soil, |
double | theta_r, | ||
double | alpha, | ||
double | n, | ||
double | L | ||
) |
Set a soil defined by a Van Genuchten-Mualem model in the case of single-phase flow in an (unsaturated) porous media.
The (effective) liquid saturation (also called moisture content) follows the identity S_l,eff = (S_l - theta_r)/(theta_s - theta_r) = (1 + |alpha . h|^n)^(-m)
The isotropic relative permeability is defined as: k_r = S_l,eff^L * (1 - (1 - S_l,eff^(1/m))^m))^2 where m = 1 - 1/n
[in,out] | soil | pointer to a cs_gwf_soil_t structure |
[in] | theta_r | residual moisture |
[in] | alpha | scale parameter (in m^-1) |
[in] | n | shape parameter |
[in] | L | tortuosity parameter |
void cs_gwf_soil_set_vgm_tpf_advanced_param | ( | cs_gwf_soil_t * | soil, |
cs_gwf_soil_join_type_t | sle_jtype, | ||
cs_gwf_soil_join_type_t | kr_jtype, | ||
double | sle_thres | ||
) |
Set advanced parameter settings related to a Van Genuchten-Mualen soil model.
[in,out] | soil | pointer to a cs_gwf_soil_t structure |
[in] | sle_jtype | type of joining function for the effective Sl |
[in] | kr_jtype | type of joining function for krg and krl |
[in] | sle_thres | value of the effective liquid saturation above which a joining function is used |
void cs_gwf_soil_set_vgm_tpf_param | ( | cs_gwf_soil_t * | soil, |
double | n, | ||
double | pr_r, | ||
double | sl_r, | ||
double | sl_s | ||
) |
Set the parameters related to a Van Genuchten-Mualen model to defined the behavior of a soil in the case of two-phase flow in an porous media.
The (effective) liquid saturation follows the identity sl_eff = (sl - sl_r)/(sl_s - sl_r) = (1 + |Pc/Pr_r|^n)^(-m) where m = 1 - 1/n
The isotropic relative permeability in the liquid and gaz are defined as: krl = sl_eff^(1/2) * (1 - (1 - sl_eff^(1/m))^m))^2 krg = (1 - sl_eff)^(1/2) * (1 - sl_eff^(1/m))^(2m)
[in,out] | soil | pointer to a cs_gwf_soil_t structure |
[in] | n | shape parameter |
[in] | pr_r | reference (capillarity) pressure |
[in] | sl_r | residual liquid saturation |
[in] | sl_s | saturated (max.) liquid saturation |
void cs_gwf_soil_update | ( | cs_real_t | time_eval, |
const cs_mesh_t * | mesh, | ||
const cs_cdo_connect_t * | connect, | ||
const cs_cdo_quantities_t * | cdoq | ||
) |
Update the soil properties.
[in] | time_eval | time at which one evaluates properties |
[in] | mesh | pointer to the mesh structure |
[in] | connect | pointer to the cdo connectivity |
[in] | cdoq | pointer to the cdo quantities |