diff --git a/bench/dolo/het/dol.pqi b/bench/dolo/het/dol.pqi index b9ff89fd7..f05425129 100644 --- a/bench/dolo/het/dol.pqi +++ b/bench/dolo/het/dol.pqi @@ -4,10 +4,6 @@ SOLUTION 1 temperature 25 pH 7 pe 4 -# C 1e-12 -# Ca 1e-12 -# Cl 1e-12 -# Mg 1e-12 PURE 1 Calcite 0.0 1 END diff --git a/bench/dolo/het/dolo_200.R b/bench/dolo/het/dolo_200.R index 53aee210d..2f24e6d09 100644 --- a/bench/dolo/het/dolo_200.R +++ b/bench/dolo/het/dolo_200.R @@ -53,6 +53,43 @@ fuzz_input_dht_keys <- function(input) { 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, @@ -65,9 +102,12 @@ chemistry_setup <- list( "Calcite" = 4, "Dolomite" = 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 ) )