dolo_interp benchmark for naa-naaice

This commit is contained in:
Marco De Lucia 2025-12-04 17:49:16 +01:00
parent 3a83ca1346
commit cb01ce3d67
4 changed files with 66 additions and 50 deletions

View File

@ -1,9 +1,11 @@
SOLUTION 1
units mol/kgw
water 1
temperature 25
pH 7
pe 4
units mol/kgw
water 1
temperature 25
pH 7
pe 4
Mg 1E-12
Cl 2E-12
PURE 1
Calcite 0.0 1
END
@ -41,3 +43,7 @@ SOLUTION 4
Mg 0.002
Cl 0.004
END
RUN_CELLS
-cells 2 3 4
END

View File

@ -1,15 +1,15 @@
rows <- 400
cols <- 200
rows <- 200
cols <- 400
grid_def <- matrix(2, nrow = rows, ncol = cols)
# Define grid configuration for POET model
## 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(2.5, 5), # Size of the grid in meters
constant_cells = c() # IDs of cells with constant concentration
pqc_db_file = "./phreeqc_kin.dat",
grid_def = grid_def,
grid_size = c(5, 2.5),
constant_cells = c()
)
bound_def_we <- list(
@ -41,29 +41,29 @@ diffusion_setup <- list(
)
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)
# }
## 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" = 6,
# "Ca" = 6,
# "Cl" = 3,
# "Mg" = 5,
# "Calcite" = 4,
# "Dolomite" = 4
# )
# return(input[names(dht_species)])
# }
## fuzz_input_dht_keys <- function(input) {
## dht_species <- c(
## "H" = 3,
## "O" = 3,
## "Charge" = 3,
## "C" = 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(
@ -74,32 +74,32 @@ check_sign_cal_dol_interp <- function(to_interp, data_set) {
"Ca" = 6,
"Cl" = 3,
"Mg" = 5,
"Calcite" = 4,
"Dolomite" = 4
"Calcite_kin" = 4,
"Dolomite_kin" = 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 <- (data_set$Calcite_kin == 0) == (to_interp["Calcite_kin"] == 0)
dol <- (data_set$Dolomite_kin == 0) == (to_interp["Dolomite_kin"] == 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)
neg_sign <- (result["Calcite_kin"] < 0) || (result["Dolomite_kin"] < 0)
return(neg_sign)
}
# Optional when using Interpolation (example with less key species and custom
# significant digits)
## Optional when using Interpolation (example with less key species
## and custom significant digits)
pht_species <- c(
"C" = 3,
"Ca" = 3,
"Mg" = 2,
"Calcite" = 2,
"Dolomite" = 2
"Calcite_kin" = 2,
"Dolomite_kin" = 2
)
chemistry_setup <- list(
@ -111,21 +111,21 @@ chemistry_setup <- list(
"Ca" = 6,
"Cl" = 3,
"Mg" = 5,
"Calcite" = 4,
"Dolomite" = 4
"Calcite_kin" = 4,
"Dolomite_kin" = 4
),
pht_species = pht_species,
hooks = list(
dht_fill = check_sign_cal_dol_dht,
# dht_fuzz = fuzz_input_dht_keys,
## 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
## 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
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
)

View File

@ -1,7 +1,7 @@
iterations <- 20000
iterations <- 2000
dt <- 200
out_save <- seq(50, iterations, by = 50)
out_save <- c(1, 5, 10, seq(20, iterations, by = 20))
list(
timesteps = rep(dt, iterations),

View File

@ -0,0 +1,10 @@
iterations <- 2000
dt <- 200
out_save <- c(1, 5, 10, seq(20, iterations, by = 20))
list(
timesteps = rep(dt, iterations),
store_result = TRUE,
out_save = out_save
)