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/bft_mem.h"
#include "bft/bft_printf.h"
#include "base/cs_array.h"
#include "base/cs_field.h"
#include "base/cs_log.h"
#include "base/cs_math.h"
#include "base/cs_parall.h"
#include "base/cs_param_types.h"
#include "base/cs_post.h"
#include "cdo/cs_reco.h"
#include "base/cs_volume_zone.h"
#include "gwf/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. | |
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. | |
cs_gwf_soil_t * | cs_gwf_soil_by_id (int id) |
Retrieve a soil structure from its id. | |
cs_gwf_soil_t * | cs_gwf_soil_by_name (const char *name) |
Retrieve a soil structure from its name. | |
const cs_zone_t * | cs_gwf_soil_get_zone (int soil_id) |
Retrieve a zone associated to a soil from its id. | |
void | cs_gwf_soil_free_all (void) |
Free all cs_gwf_soil_t structures. | |
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. | |
void | cs_gwf_soil_log_setup (void) |
Summary of the settings related to all cs_gwf_soil_t structures. | |
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. | |
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. | |
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. | |
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. | |
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() | |
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. | |
const short int * | cs_gwf_soil_get_cell2soil (void) |
Get the array storing the associated soil for each cell. | |
const int * | cs_gwf_soil_get_soil_state (void) |
Get the array storing the soil state associated to each cell. | |
cs_real_t | cs_gwf_soil_get_porosity (int soil_id) |
Get the porosity value for the given soil id. | |
cs_real_t | cs_gwf_soil_get_saturated_moisture (int soil_id) |
Get the saturated moisture for the given soil id. | |
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. | |
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. | |
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. | |
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. | |
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. |
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 |