def test_phreeqpython_hematite_and_many_more_closed_open(): fname = inspect.stack()[0][3] """ FAILING HERE: IMPORTANT The redux is needed to provide Fe+++ from Fe++ Thus, for a proper execution of Fe solids I will need to implement the redox scheme. FAILING HERE: Arcanite not in the phreeqc.dat database """ comp_dict = {"FeCO3": 10.0, "K2SO4": 10.0, "Al(OH)3": 10.0} start = time.time() solution_ref1 = REF_SOLUTIONS[fname][0] print("Elapsed PHREEQC = {}".format(time.time() - start)) start = time.time() solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, element_mass_balance=["Fe", "K", "Al", "S", "C"], ) print("Elapsed = {}".format(time.time() - start)) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] start = time.time() solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Fe", "K", "Al", "S"], ) print("Elapsed = {}".format(time.time() - start)) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_pH_as_a_closing_equation(): comps = {"NaHCO3": 10, "CaCl2": 5.0} sol1 = pyequion.solve_solution(comps) pyequion.print_solution(sol1) x_guess = sol1.x pH = 8.5 solution_comps = pyequion.solve_solution(comps, close_type=ClosingEquationType.PH, pH_fixed=pH, element_mass_balance=['Na']) pyequion.print_solution(solution_comps) assert (np.isclose(solution_comps.pH, pH)) pH = 7.9386654148526965 solution_comps2 = pyequion.solve_solution( comps, close_type=ClosingEquationType.PH, pH_fixed=pH, x_guess=x_guess, element_mass_balance=['Na'], ) pyequion.print_solution(solution_comps2) assert (np.isclose(solution_comps2.pH, pH)) assert (np.isclose(solution_comps2.DIC, comps['NaHCO3'] * 1e-3)) return
def test_phreeqpython_nahco3_cacl2_open_15_5(): fname = inspect.stack()[0][3] comp_dict = {"NaHCO3": 15.0, "CaCl2": 5.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution(comp_dict, initial_feed_mass_balance=["Cl-"]) print("") assert_solid(solution, solution_ref1, {"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1}) solution_ref3 = REF_SOLUTIONS[fname][2] # si_max = max([(v, k) for k, v in solution_ref3["phases"].items()])[1] solution = solve_solution( comp_dict, initial_feed_mass_balance=["Cl-"], close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=comp_dict["NaHCO3"], allow_precipitation=True, ) assert_solution(solution, solution_ref3, tol={"pH": 1e-2}) assert_solid(solution, solution_ref3, tol={"si": 1e-1})
def test_from_ions_is_equal_to_from_compounds(): comps = {"Na+": 10, "HCO3-": 10, "Ca++": 5.0, "Cl-": 10.0} solution_ions = pyequion.solve_solution(comps) pyequion.print_solution(solution_ions) comps = {"NaHCO3": 10, "CaCl2": 5.0} solution_comps = pyequion.solve_solution(comps) pyequion.print_solution(solution_comps) assert np.isclose(solution_ions.pH, solution_comps.pH)
def test_phreeqpython_caco3_closed_1(): fname = inspect.stack()[0][3] comp_dict = {"CaCO3": 1.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution(comp_dict, close_type=ClosingEquationType.NONE) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-1})
def xtest_phreeqpython_baco3_open(): fname = inspect.stack()[0][3] # FIXME -> not sure why is breaking comp_dict = {"BaCO3": 1.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution(comp_dict) assert_solution(solution, solution_ref) assert_solid(solution, solution_ref)
def test_phreeqpython_srco3_closed_open(): fname = inspect.stack()[0][3] comp_dict = {"SrCO3": 20.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=comp_dict["SrCO3"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution(comp_dict, close_type=ClosingEquationType.OPEN) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_phreeqpython_nahco3_open(): comp_dict = {"NaHCO3": 1.0} solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, ) fname = inspect.stack()[0][3] solution_ref = REF_SOLUTIONS[fname][0] assert_solution(solution, solution_ref)
def test_phreeqpython_caso4_open(): fname = inspect.stack()[0][3] comp_dict = {"CaSO4": 1.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Ca", "S"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2})
def test_phreeqpython_cacl2_baco3_nahco3_open(): fname = inspect.stack()[0][3] comp_dict = {"CaCl2": 1.0, "BaCO3": 1.0, "NaHCO3": 1.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-1})
def test_phreeqpython_caco3_closed_100(): fname = inspect.stack()[0][3] comp_dict = {"CaCO3": 100.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=comp_dict["CaCO3"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-1})
def test_phreeqpython_caso4_bacl2_closed_open(): fname = inspect.stack()[0][3] comp_dict = {"CaSO4": 1.0, "BaCl2": 1.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, element_mass_balance=["Ca", "S", "Ba"], initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Ca", "S", "Ba"], initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2})
def test_phreeqpython_cacl2_closed_and_open(): fname = inspect.stack()[0][3] comp_dict = {"CaCl2": 15.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_phreeqpython_mnco3_open(): fname = inspect.stack()[0][3] comp_dict = {"MnCO3": 150.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Mn"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-1})
def test_phreeqpython_srso4_closed_open(): fname = inspect.stack()[0][3] comp_dict = {"SrSO4": 100.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, element_mass_balance=["Sr", "S"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Sr", "S"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_phreeqpython_anorthite_closed_open(): fname = inspect.stack()[0][3] comp_dict = {"CaCO3": 10.0, "H4SiO4": 10.0, "Al(OH)3": 10.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, element_mass_balance=["Ca", "Si", "Al", "C"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Ca", "Si", "Al"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_phreeqpython_hydroxiapatite_closed_open(): fname = inspect.stack()[0][3] comp_dict = {"H3PO4": 10.0, "CaCO3": 10.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.CARBON_TOTAL, element_mass_balance=["Ca", "P"], carbon_total=comp_dict["CaCO3"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Ca", "P"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_phreeqpython_dolamite_open(): fname = inspect.stack()[0][3] comp_dict = {"MgCO3": 15.0, "CaCl2": 15.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType. OPEN, # element_mass_balance=['Mg', ''], initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-1})
def test_phreeqpython_baco3_baso4_closed(): fname = inspect.stack()[0][3] comp_dict = {"BaCO3": 1.0, "BaSO4": 1.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=comp_dict["BaCO3"], element_mass_balance=["Ba", "S"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-2})
def test_phreeqpython_baco3_cacl2_closed_5_2(): fname = inspect.stack()[0][3] comp_dict = {"BaCO3": 5.0, "CaCl2": 2.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, initial_feed_mass_balance=["Cl-"], close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=5.0, ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1) pyequion.print_solution(solution) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_phreeqpython_cacl2_baco3_nahco3_closed(): fname = inspect.stack()[0][3] comp_dict = {"CaCl2": 10.0, "BaCO3": 10.0, "NaHCO3": 10.0} solution_ref = REF_SOLUTIONS[fname][0] c_tot = comp_dict["BaCO3"] + comp_dict["NaHCO3"] solution = solve_solution( comp_dict, close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=c_tot, initial_feed_mass_balance=["Cl-"], ) print("") assert_solid(solution, solution_ref)
def test_phreeqpython_cacl2_caco3_closed(): fname = inspect.stack()[0][3] comp_dict = {"CaCO3": 80.0, "CaCl2": 33.25} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, initial_feed_mass_balance=["Cl-"], element_mass_balance=["Ca"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2, "I": 1e-1}) print("") assert_solid(solution, solution_ref)
def test_phreeqpython_gibbsite_closed_open(): fname = inspect.stack()[0][3] comp_dict = {"Al(OH)3": 10.0, "NaCl": 10.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, element_mass_balance=["Al", "Na"], initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Al", "Na"], initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def main_check_jit(): pyequion.jit_compile_functions() sys_eq = pyequion.create_equilibrium(feed_compounds=["CaCl2"], initial_feed_mass_balance=["Cl-"]) solution = pyequion.solve_solution( {"CaCl2": 1 * 1e3}, sys_eq, activity_model_type="debye", ) print("end first call") tstart = time.time() solution = pyequion.solve_solution( {"CaCl2": 1 * 1e3}, sys_eq, activity_model_type="debye", ) print("Elapsed time = ", time.time() - tstart, solution.pH) args = (np.array([1.0]), 25 + 273.15, np.nan) tstart = time.time() solution = pyequion.solve_equilibrium(sys_eq, args=args) print("Elapsed time = ", time.time() - tstart, solution.pH) quit() tstart = time.time() cIn_span = np.geomspace(1e-3, 3.0, 1) gamma_mean = np.empty_like(cIn_span) for i, c in enumerate(cIn_span): solution = pyequion.solve_solution( {"CaCl2": c * 1e3}, sys_eq, activity_model_type="debye", ) gamma_mean[i] = pyequion.get_mean_activity_coeff(solution, "CaCl2") # pylint: disable=unsupported-assignment-operation print("Elapsed time = ", time.time() - tstart) print(gamma_mean)
def test_phreeqpython_barite_whiterite_calcite_closed_open(): fname = inspect.stack()[0][3] comp_dict = {"BaCO3": 80.0, "CaCl2": 33.25, "NaHSO4": 20.0} solution_ref1 = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, element_mass_balance=["Ba", "Ca", "Na", "S", "C"], initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref1, tol={"pH": 1e-2}) assert_solid(solution, solution_ref1, tol={"si": 1e-1}) solution_ref2 = REF_SOLUTIONS[fname][1] solution = solve_solution( comp_dict, close_type=ClosingEquationType.OPEN, element_mass_balance=["Ba", "Ca", "Na", "S"], initial_feed_mass_balance=["Cl-"], ) assert_solution(solution, solution_ref2, tol={"pH": 1e-2}) assert_solid(solution, solution_ref2, tol={"si": 1e-1})
def test_phreeqpython_baso4_closed(): fname = inspect.stack()[0][3] """ Low accuracy! """ comp_dict = {"BaSO4": 15.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.NONE, element_mass_balance=["Ba", "S"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-2})
def test_phreeqpython_caco3_closed_Thotter(): fname = inspect.stack()[0][3] """Higher Temperature starts to introduce error... Need to implement the delta_h van Hoff for the species that does not analytic log_K(T) """ TC = 50.0 comp_dict = {"CaCO3": 5.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=comp_dict["CaCO3"], TC=TC, ) assert_solution(solution, solution_ref, tol={"pH": 1e-2}) assert_solid(solution, solution_ref, tol={"si": 1e-1})
def _test_phreeqpython_cacl2_caso4_closed(): "Error in Gypsum" fname = inspect.stack()[0][3] "Small error in Gypsum" comp_dict = {"BaCO3": 100.0, "CaSO4": 50.0} solution_ref = REF_SOLUTIONS[fname][0] solution = solve_solution( comp_dict, close_type=ClosingEquationType.CARBON_TOTAL, carbon_total=comp_dict["BaCO3"], element_mass_balance=["Ba", "Ca", "S"], ) assert_solution(solution, solution_ref, tol={"pH": 1e-2, "I": 1e-1}) print("") assert_solid(solution, solution_ref, tol={"si": 1e-1}) # small error in gypsum...
def main_cacl2_meancoeff(): sys_eq = pyequion.create_equilibrium(feed_compounds=["CaCl2"], initial_feed_mass_balance=["Cl-"]) cIn_span = np.geomspace(1e-3, 3.0, 61) methods = ["debye", "bromley", "sit", "pitzer"] solutions = { key: [ pyequion.solve_solution({"CaCl2": c * 1e3}, sys_eq, activity_model_type=key) for c in cIn_span ] for key in methods } gamma_means = { key: np.array([ pyequion.get_mean_activity_coeff(sol, "CaCl2") for sol in solutions[key] ]) for key in methods } I = {key: np.array([sol.I for sol in solutions[key]]) for key in methods} I_exp_cnv = conv_c2I_X1A2(data_exp_raw_collected[:, 0]) plot_opts = { "debye": "-k", "bromley": ":k", "sit": "-.k", "pitzer": "--k", } plt.figure() plt.plot(I_exp_cnv, data_exp_raw_collected[:, 1], "sk", label="exp") for key in methods: plt.plot(I[key], gamma_means[key], plot_opts[key], label=key) plt.legend() plt.show() return
def test_precip_Al2SO43_K3PO4_CaCl2(): EXPECTED = { "pH": (2.29, 3.0), "I": (187.467e-3, 3.0), "sat-conc": { "Gypsum": (8.78 * 1e-3, 25.0), }, } comp_dict = {"Al2(SO4)3": 30.0, "H3PO4": 15.0, "CaCl2": 30.0} # comp_dict = {'NaHCO3':2.0, 'CaCl2':1.0} solution = solve_solution( comp_dict, element_mass_balance=["Al", "P", "Ca", "S"], initial_feed_mass_balance=["Cl-"], close_type=ClosingEquationType.NONE, allow_precipitation=True, ) assert_solution_result(solution, EXPECTED) for tag in EXPECTED["sat-conc"]: assert compare_with_expected_perc_tuple( solution.preciptation_conc[tag], EXPECTED["sat-conc"][tag])