19 #include <grass/N_gwflow.h> 266 double hc_e = 0, hc_w = 0, hc_n = 0, hc_s = 0, hc_t = 0, hc_b = 0;
267 double dx, dy, dz, Ax, Ay, Az;
268 double hc_x, hc_y, hc_z;
269 double hc_xw, hc_yn, hc_zt;
270 double hc_xe, hc_ys, hc_zb;
273 double C,
W, E,
N, S, T, B, V;
284 Ay = geom->
dx * geom->
dz;
285 Ax = geom->
dz * geom->
dy;
316 W = -1 * Ax * hc_w / dx;
318 E = -1 * Ax * hc_e / dx;
320 N = -1 * Ay * hc_n / dy;
322 S = -1 * Ay * hc_s / dy;
324 T = -1 * Az * hc_t / dz;
326 B = -1 * Az * hc_b / dz;
332 C = -1 * (W + E + N + S + T + B - Ss / data->
dt * Az);
335 V = (q + hc_start * Ss / data->
dt * Az);
338 if (depth == geom->
depths - 2) {
343 G_debug(5,
"N_callback_gwflow_3d: called [%i][%i][%i]", depth, col, row);
384 for (z = 0; z <
depths; z++) {
385 for (y = 0; y <
rows; y++) {
387 for (x = 0; x <
cols; x++) {
401 val += dstar->
E * (hc - h);
405 val += dstar->
W * (hc - h);
409 val += dstar->
S * (hc - h);
413 val += dstar->
N * (hc - h);
417 val += dstar->
T * (hc - h);
421 val += dstar->
B * (hc - h);
435 if(fabs(sum) < 0.0000000001)
436 G_message(
_(
"The total sum of the water budget: %g\n"), sum);
438 G_warning(
_(
"The total sum of the water budget is significantly larger then 0: %g\n"), sum);
467 double T_e = 0, T_w = 0, T_n = 0, T_s = 0;
468 double z_e = 0, z_w = 0, z_n = 0, z_s = 0;
478 double C,
W, E,
N, S, V;
481 double river_vect = 0;
482 double river_mat = 0;
483 double drain_vect = 0;
484 double drain_mat = 0;
545 if (z_w > 0 || z_w < 0 || z_w == 0)
549 if (z_e > 0 || z_e < 0 || z_e == 0)
553 if (z_n > 0 || z_n < 0 || z_n == 0)
557 if (z_s > 0 || z_s < 0 || z_s == 0)
614 W = -1 * T_w * dy / dx;
616 E = -1 * T_e * dy / dx;
618 N = -1 * T_n * dx / dy;
620 S = -1 * T_s * dx / dy;
623 C = -1 * (W + E + N + S - Az *Ss / data->
dt - river_mat * Az -
627 V = (q + hc_start * Az * Ss / data->
dt) + r + river_vect * Az +
630 G_debug(5,
"N_callback_gwflow_2d: called [%i][%i]", row, col);
672 for (y = 0; y <
rows; y++) {
674 for (x = 0; x <
cols; x++) {
688 val += dstar->
E * (hc - h);
692 val += dstar->
W * (hc - h);
696 val += dstar->
S * (hc - h);
700 val += dstar->
N * (hc - h);
714 if(fabs(sum) < 0.0000000001)
715 G_message(
_(
"The total sum of the water budget: %g\n"), sum);
717 G_warning(
_(
"The total sum of the water budget is significantly larger then 0: %g\n"), sum);
void Rast_set_null_value(void *, int, RASTER_MAP_TYPE)
To set one or more raster values to null.
Matrix entries for a mass balance 5/7/9 star system.
double N_get_array_3d_d_value(N_array_3d *data, int col, int row, int depth)
This function returns the value of type float at position col, row, depth.
N_array_3d * N_alloc_array_3d(int cols, int rows, int depths, int offset, int type)
Allocate memory for a N_array_3d data structure.
N_array_2d * N_alloc_array_2d(int cols, int rows, int offset, int type)
Allocate memory for a N_array_2d data structure.
N_gwflow_data2d * N_alloc_gwflow_data2d(int cols, int rows, int river, int drain)
Alllocate memory for the groundwater calculation data structure in 2 dimensions.
void G_free(void *)
Free allocated memory.
This data structure contains all data needed to compute the groundwater mass balance in three dimensi...
N_data_star * N_callback_gwflow_3d(void *gwdata, N_geom_data *geom, int col, int row, int depth)
This callback function creates the mass balance of a 7 point star.
void N_free_gwflow_data2d(N_gwflow_data2d *data)
Release the memory of the groundwater flow data structure in two dimensions.
void N_gwflow_2d_calc_water_budget(N_gwflow_data2d *data, N_geom_data *geom, N_array_2d *budget)
This function computes the water budget of the entire groundwater.
double top
Extent coordinates (top) - 3D data.
void G_message(const char *,...) __attribute__((format(printf
Geometric information about the structured grid.
void N_free_array_2d(N_array_2d *data)
Release the memory of a N_array_2d structure.
void N_put_array_3d_d_value(N_array_3d *data, int col, int row, int depth, double value)
Writes a double value to the N_array_3d struct at position col, row, depth.
void N_gwflow_3d_calc_water_budget(N_gwflow_data3d *data, N_geom_data *geom, N_array_3d *budget)
This function computes the water budget of the entire groundwater.
N_data_star * N_create_7star(double C, double W, double E, double N, double S, double T, double B, double V)
allocate and initialize a 7 point star data structure
int depths
number of depths for 3D data
double N_get_geom_data_area_of_cell(N_geom_data *geom, int row)
Get the areay size in square meter of one cell (x*y) at row.
double N_calc_arith_mean(double a, double b)
Calculate the arithmetic mean of values a and b.
void N_free_gwflow_data3d(N_gwflow_data3d *data)
Release the memory of the groundwater flow data structure in three dimensions.
void G_percent(long, long, int)
Print percent complete messages.
int cols
Number of columns for 2D data.
This data structure contains all data needed to compute the groundwater mass balance in two dimension...
CELL N_get_array_2d_c_value(N_array_2d *data, int col, int row)
Returns the value of type CELL at position col, row.
N_data_star * N_callback_gwflow_2d(void *gwdata, N_geom_data *geom, int col, int row)
This callback function creates the mass balance of a 5 point star.
void G_warning(const char *,...) __attribute__((format(printf
void N_put_array_2d_d_value(N_array_2d *data, int col, int row, DCELL value)
Writes a DCELL value to the N_array_2d struct at position col, row.
double N_calc_harmonic_mean(double a, double b)
Calculate the harmonical mean of values a and b.
DCELL N_get_array_2d_d_value(N_array_2d *data, int col, int row)
Returns the value of type DCELL at position col, row.
N_gwflow_data3d * N_alloc_gwflow_data3d(int cols, int rows, int depths, int river, int drain)
Alllocate memory for the groundwater calculation data structure in 3 dimensions.
void N_free_array_3d(N_array_3d *data)
Release the memory of a N_array_3d.
int rows
Number of rows for 2D data.
int G_debug(int, const char *,...) __attribute__((format(printf
N_data_star * N_create_5star(double C, double W, double E, double N, double S, double V)
allocate and initialize a 5 point star data structure