From cb01ce3d67bfd7e5e03080889b73a10974a8bf08 Mon Sep 17 00:00:00 2001 From: Marco De Lucia Date: Thu, 4 Dec 2025 17:49:16 +0100 Subject: [PATCH] dolo_interp benchmark for naa-naaice --- bench/dolo/dol.pqi | 16 ++++-- bench/dolo/dolo_interp.R | 86 +++++++++++++++--------------- bench/dolo/dolo_interp_rt.R | 4 +- bench/dolo/dolo_interp_rt_dt2000.R | 10 ++++ 4 files changed, 66 insertions(+), 50 deletions(-) create mode 100644 bench/dolo/dolo_interp_rt_dt2000.R diff --git a/bench/dolo/dol.pqi b/bench/dolo/dol.pqi index 30a6674d7..79a23d831 100644 --- a/bench/dolo/dol.pqi +++ b/bench/dolo/dol.pqi @@ -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 diff --git a/bench/dolo/dolo_interp.R b/bench/dolo/dolo_interp.R index 1dc6ae950..703269865 100644 --- a/bench/dolo/dolo_interp.R +++ b/bench/dolo/dolo_interp.R @@ -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 ) diff --git a/bench/dolo/dolo_interp_rt.R b/bench/dolo/dolo_interp_rt.R index 417cd5b8d..4816a0edb 100644 --- a/bench/dolo/dolo_interp_rt.R +++ b/bench/dolo/dolo_interp_rt.R @@ -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), diff --git a/bench/dolo/dolo_interp_rt_dt2000.R b/bench/dolo/dolo_interp_rt_dt2000.R new file mode 100644 index 000000000..4816a0edb --- /dev/null +++ b/bench/dolo/dolo_interp_rt_dt2000.R @@ -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 +)