mirror of
https://git.gfz-potsdam.de/naaice/poet.git
synced 2025-12-15 12:28:22 +01:00
116 lines
2.9 KiB
R
116 lines
2.9 KiB
R
rows <- 2000
|
|
cols <- 1000
|
|
|
|
grid_def <- matrix(2, nrow = rows, ncol = cols)
|
|
|
|
# Define grid configuration for POET model
|
|
grid_setup <- list(
|
|
pqc_in_file = "./dol.pqi",
|
|
pqc_db_file = "./phreeqc_kin.dat", # Path to the database file for Phreeqc
|
|
grid_def = grid_def, # Definition of the grid, containing IDs according to the Phreeqc input script
|
|
grid_size = c(cols, rows) / 100, # Size of the grid in meters
|
|
constant_cells = c() # IDs of cells with constant concentration
|
|
)
|
|
|
|
bound_size <- 2
|
|
|
|
diffusion_setup <- list(
|
|
inner_boundaries = list(
|
|
"row" = c(400, 1400, 1600),
|
|
"col" = c(200, 800, 800),
|
|
"sol_id" = c(3, 4, 4)
|
|
),
|
|
alpha_x = 1e-6,
|
|
alpha_y = 1e-6
|
|
)
|
|
|
|
check_sign_cal_dol_dht <- function(old, new) {
|
|
if ((old["Calcite"] == 0) != (new["Calcite"] == 0)) {
|
|
return(TRUE)
|
|
}
|
|
if ((old["Dolomite"] == 0) != (new["Dolomite"] == 0)) {
|
|
return(TRUE)
|
|
}
|
|
return(FALSE)
|
|
}
|
|
|
|
fuzz_input_dht_keys <- function(input) {
|
|
dht_species <- c(
|
|
"H" = 3,
|
|
"O" = 3,
|
|
"Charge" = 3,
|
|
"C(4)" = 6,
|
|
"Ca" = 6,
|
|
"Cl" = 3,
|
|
"Mg" = 5,
|
|
"Calcite" = 4,
|
|
"Dolomite" = 4
|
|
)
|
|
return(input[names(dht_species)])
|
|
}
|
|
|
|
check_sign_cal_dol_interp <- function(to_interp, data_set) {
|
|
dht_species <- c(
|
|
"H" = 3,
|
|
"O" = 3,
|
|
"Charge" = 3,
|
|
"C(4)" = 6,
|
|
"Ca" = 6,
|
|
"Cl" = 3,
|
|
"Mg" = 5,
|
|
"Calcite" = 4,
|
|
"Dolomite" = 4
|
|
)
|
|
data_set <- as.data.frame(do.call(rbind, data_set), check.names = FALSE, optional = TRUE)
|
|
names(data_set) <- names(dht_species)
|
|
cal <- (data_set$Calcite == 0) == (to_interp["Calcite"] == 0)
|
|
dol <- (data_set$Dolomite == 0) == (to_interp["Dolomite"] == 0)
|
|
|
|
cal_dol_same_sig <- cal == dol
|
|
return(rev(which(!cal_dol_same_sig)))
|
|
}
|
|
|
|
check_neg_cal_dol <- function(result) {
|
|
neg_sign <- (result["Calcite"] < 0) || (result["Dolomite"] < 0)
|
|
return(neg_sign)
|
|
}
|
|
|
|
# Optional when using Interpolation (example with less key species and custom
|
|
# significant digits)
|
|
|
|
pht_species <- c(
|
|
"C(4)" = 3,
|
|
"Ca" = 3,
|
|
"Mg" = 2,
|
|
"Calcite" = 2,
|
|
"Dolomite" = 2
|
|
)
|
|
|
|
chemistry_setup <- list(
|
|
dht_species = c(
|
|
"H" = 3,
|
|
"O" = 3,
|
|
"Charge" = 3,
|
|
"C(4)" = 6,
|
|
"Ca" = 6,
|
|
"Cl" = 3,
|
|
"Mg" = 5,
|
|
"Calcite" = 4,
|
|
"Dolomite" = 4
|
|
),
|
|
pht_species = pht_species,
|
|
hooks = list(
|
|
dht_fill = check_sign_cal_dol_dht,
|
|
dht_fuzz = fuzz_input_dht_keys,
|
|
interp_pre = check_sign_cal_dol_interp,
|
|
interp_post = check_neg_cal_dol
|
|
)
|
|
)
|
|
|
|
# Define a setup list for simulation configuration
|
|
setup <- list(
|
|
Grid = grid_setup, # Parameters related to the grid structure
|
|
Diffusion = diffusion_setup, # Parameters related to the diffusion process
|
|
Chemistry = chemistry_setup # Parameters related to the chemistry process
|
|
)
|