pyEQL 1.4.0rc9__cp312-cp312-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyEQL/__init__.py +50 -0
- pyEQL/_phreeqc.cpython-312-darwin.so +0 -0
- pyEQL/activity_correction.py +879 -0
- pyEQL/database/geothermal.dat +5693 -0
- pyEQL/database/llnl.dat +19305 -0
- pyEQL/database/phreeqc_license.txt +54 -0
- pyEQL/database/pyeql_db.json +35607 -0
- pyEQL/engines.py +1153 -0
- pyEQL/equilibrium.py +227 -0
- pyEQL/functions.py +281 -0
- pyEQL/phreeqc/__init__.py +5 -0
- pyEQL/phreeqc/bindings.cpp +84 -0
- pyEQL/phreeqc/core.py +239 -0
- pyEQL/phreeqc/database/Amm.dat +1968 -0
- pyEQL/phreeqc/database/CMakeLists.txt +32 -0
- pyEQL/phreeqc/database/ColdChem.dat +267 -0
- pyEQL/phreeqc/database/Concrete_PHR.dat +158 -0
- pyEQL/phreeqc/database/Concrete_PZ.dat +195 -0
- pyEQL/phreeqc/database/Kinec.v2.dat +12039 -0
- pyEQL/phreeqc/database/Kinec_v3.dat +12159 -0
- pyEQL/phreeqc/database/Makefile.am +28 -0
- pyEQL/phreeqc/database/Makefile.in +530 -0
- pyEQL/phreeqc/database/PHREEQC_ThermoddemV1.10_15Dec2020.dat +12965 -0
- pyEQL/phreeqc/database/Tipping_Hurley.dat +4137 -0
- pyEQL/phreeqc/database/__init__.py +0 -0
- pyEQL/phreeqc/database/core10.dat +6824 -0
- pyEQL/phreeqc/database/frezchem.dat +634 -0
- pyEQL/phreeqc/database/iso.dat +7235 -0
- pyEQL/phreeqc/database/llnl.dat +19310 -0
- pyEQL/phreeqc/database/minteq.dat +5654 -0
- pyEQL/phreeqc/database/minteq.v4.dat +13212 -0
- pyEQL/phreeqc/database/phreeqc.dat +1972 -0
- pyEQL/phreeqc/database/phreeqc_rates.dat +3158 -0
- pyEQL/phreeqc/database/pitzer.dat +1044 -0
- pyEQL/phreeqc/database/sit.dat +14348 -0
- pyEQL/phreeqc/database/wateq4f.dat +4036 -0
- pyEQL/phreeqc/ext/README.md +10 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/CMakeLists.txt +476 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/INSTALL +302 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/IPhreeqc.rc +61 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/IPhreeqcConfig.cmake.in +4 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/Makefile.am +8 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/Makefile.in +816 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/aclocal.m4 +1217 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/CTestScript.cmake +167 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/CSelectedOutput.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/IPhreeqc.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/IPhreeqcLib.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/IPhreeqc_interface_F.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/Var.c.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Dictionary.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ExchComp.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Exchange.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/GasComp.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/GasPhase.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ISolution.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ISolutionComp.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/KineticsComp.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/NameDouble.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/NumKeyword.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PBasic.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PHRQ_io_output.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PPassemblage.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PPassemblageComp.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Phreeqc.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PhreeqcKeywords/Keywords.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Pressure.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Reaction.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ReadClass.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SS.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SSassemblage.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SScomp.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SelectedOutput.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Serializer.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Solution.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SolutionIsotope.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/StorageBin.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/StorageBinList.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Surface.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SurfaceCharge.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SurfaceComp.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/System.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Temperature.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Use.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/UserPunch.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/advection.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/basicsubs.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cl1.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/PHRQ_base.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/PHRQ_io.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/Parser.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/Utils.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cvdense.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cvode.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cxxKinetics.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cxxMix.cxx.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/dense.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/dumper.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/gases.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/input.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/integrate.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/inverse.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/isotopes.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/kinetics.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/mainsubs.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/model.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/nvector.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/nvector_serial.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/parse.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/phqalloc.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/pitzer.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/pitzer_structures.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/prep.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/print.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/read.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/readtr.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/runner.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/sit.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/smalldense.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/spread.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/step.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/structures.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/sundialsmath.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/tally.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/tidy.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/transport.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/utilities.cpp.o +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CTestTestfile.cmake +6 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/DartConfiguration.tcl +109 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/cmake_install.cmake +45 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/libIPhreeqc.a +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/ar-lib +270 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/compile +347 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/config.guess +1441 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/config.sub +1813 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/depcomp +791 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/install-sh +508 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/ltmain.sh +11156 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/missing +215 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/test-driver +148 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/configure +23867 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/configure.ac +136 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Amm.dat +1968 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/CMakeLists.txt +32 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/ColdChem.dat +267 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Concrete_PHR.dat +158 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Concrete_PZ.dat +195 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Kinec.v2.dat +12039 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Kinec_v3.dat +12159 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Makefile.am +28 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Makefile.in +530 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/PHREEQC_ThermoddemV1.10_15Dec2020.dat +12965 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Tipping_Hurley.dat +4137 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/core10.dat +6824 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/frezchem.dat +634 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/iso.dat +7235 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/llnl.dat +19310 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/minteq.dat +5654 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/minteq.v4.dat +13212 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/phreeqc.dat +1972 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/phreeqc_rates.dat +3158 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/pitzer.dat +1044 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/sit.dat +14348 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/wateq4f.dat +4036 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/CMakeLists.txt +35 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/IPhreeqc.pdf +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Makefile.am +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Makefile.in +545 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/NOTICE +51 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Phreeqc_2_1999_manual.pdf +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Phreeqc_3_2013_manual.pdf +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/README +428 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/RELEASE +7294 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8h.html +5096 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8h_source.html +389 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8hpp.html +83 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8hpp_source.html +478 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/Var_8h.html +318 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/Var_8h_source.html +200 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/bc_s.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/bdwn.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqc.html +2274 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqc.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqcStop.html +69 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqcStop.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/closed.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +68 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/doxygen.css +1440 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/doxygen.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/dynsections.js +97 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2blank.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2doc.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2folderclosed.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2folderopen.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2lastnode.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2link.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2mlastnode.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2mnode.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2node.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2plastnode.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2pnode.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2splitbar.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2vertline.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/index.html +58 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/jquery.js +31 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_f.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_g.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_h.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/open.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/structVAR.html +143 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/sync_off.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/sync_on.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_a.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_b.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_h.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_s.png +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tabs.css +60 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/phreeqc3.chm +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/CMakeLists.txt +11 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/Makefile.am +88 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/Makefile.in +696 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/CMakeLists.txt +1 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/CMakeLists.txt +35 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/CMakeLists.txt.in +21 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/README.txt +44 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/advect.c +101 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/ic +17 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/phreeqc.dat +1579 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/CMakeLists.txt +10 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/README.txt +3 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/CMakeLists.txt +9 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/phreeqc.dat +1582 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/runphreeqc.xls +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/withcallback.xls +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/CMakeLists.txt +11 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/Gypsum.py +52 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/parallel_advect.py +465 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/phreeqc.dat +1582 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/pitzer.dat +790 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/wateq4f.dat +3846 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/CMakeLists.txt +1 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/CMakeLists.txt +35 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/CMakeLists.txt.in +20 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/README.txt +45 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/advect.cpp +110 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/ic +17 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/phreeqc.dat +1579 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/CMakeLists.txt +1 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/CMakeLists.txt +44 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/CMakeLists.txt.in +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/README.txt +45 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/advect.F90 +102 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/ic +17 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/phreeqc.dat +1579 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/CMakeLists.txt +26 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/CMakeLists.txt.in +20 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/README.txt +37 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/ex2 +26 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/main.cpp +20 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/phreeqc.dat +1837 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/post-install.cmake.in +7 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/CMakeLists.txt +185 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/FileTest.cpp +171 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/FileTest.h +34 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/Makefile.am +18 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/Makefile.in +466 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestCVar.cpp +9 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestIPhreeqc.cpp +4901 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestIPhreeqcLib.cpp +4644 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestSelectedOutput.cpp +669 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestVar.cpp +10 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/conv_fail.in +11 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/dump +42 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/iso.dat +7231 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/kinn20140218 +349 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/missing_e.dat +1556 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/multi_punch +105 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/multi_punch_no_set +102 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/phreeqc.dat.90a6449 +1935 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/phreeqc.dat.old +1556 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/libtool.m4 +8388 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltoptions.m4 +437 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltsugar.m4 +124 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltversion.m4 +23 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/lt~obsolete.m4 +99 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/resource.h +14 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CSelectedOutput.cpp +401 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CSelectedOutput.hxx +77 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CVar.hxx +162 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Debug.h +12 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/ErrorReporter.hxx +70 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.cpp +1889 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.f.inc +91 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.f90.inc +603 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.h +2182 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.hpp +1027 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcCallbacks.h +19 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcF.f +653 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcLib.cpp +1098 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface.F90 +1283 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface_F.cpp +535 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface_F.h +162 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Makefile.am +210 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Makefile.in +1294 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/README.Fortran +17 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Var.c +84 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Var.h +152 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Version.h +36 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fimpl.h +282 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap.cpp +646 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap.h +163 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap1.cpp +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap2.cpp +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap3.cpp +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap4.cpp +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap5.cpp +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap6.cpp +25 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap7.cpp +25 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap8.cpp +24 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartHandler.cpp +225 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartHandler.h +59 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartObject.cpp +1382 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartObject.h +444 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/CurveObject.cpp +42 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/CurveObject.h +79 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Dictionary.cpp +41 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Dictionary.h +28 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ExchComp.cxx +398 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ExchComp.h +117 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Exchange.cxx +466 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Exchange.h +74 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Form1.h +1184 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Form1.resX +36 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasComp.cxx +265 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasComp.h +59 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasPhase.cxx +659 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasPhase.h +103 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolution.cxx +40 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolution.h +53 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolutionComp.cxx +202 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolutionComp.h +138 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/KineticsComp.cxx +318 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/KineticsComp.h +81 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NA.h +1 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NameDouble.cxx +537 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NameDouble.h +66 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NumKeyword.cxx +190 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NumKeyword.h +67 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PBasic.cpp +8350 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PBasic.h +572 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PHRQ_io_output.cpp +411 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblage.cxx +375 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblage.h +70 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblageComp.cxx +441 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblageComp.h +83 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Phreeqc.cpp +2087 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Phreeqc.h +2164 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PhreeqcKeywords/Keywords.cpp +242 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PhreeqcKeywords/Keywords.h +104 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Pressure.cxx +417 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Pressure.h +43 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Reaction.cxx +284 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Reaction.h +57 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ReadClass.cxx +1150 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SS.cxx +609 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SS.h +128 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SSassemblage.cxx +317 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SSassemblage.h +59 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SScomp.cxx +297 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SScomp.h +66 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SelectedOutput.cpp +115 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SelectedOutput.h +209 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Serializer.cxx +213 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Serializer.h +42 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Solution.cxx +1795 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Solution.h +154 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SolutionIsotope.cxx +333 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SolutionIsotope.h +85 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBin.cxx +1507 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBin.h +141 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBinList.cpp +358 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBinList.h +81 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Surface.cxx +837 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Surface.h +108 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceCharge.cxx +617 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceCharge.h +137 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceComp.cxx +509 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceComp.h +70 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/System.cxx +103 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/System.h +89 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Temperature.cxx +423 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Temperature.h +42 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Use.cpp +78 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Use.h +159 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/UserPunch.cpp +32 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/UserPunch.h +39 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ZedGraph.dll +0 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/advection.cpp +140 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/basicsubs.cpp +4333 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cl1.cpp +881 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_base.cxx +117 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_base.h +48 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_exports.h +20 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_io.cpp +914 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_io.h +207 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Parser.cxx +1331 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Parser.h +310 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Utils.cxx +263 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Utils.h +29 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/phrqtype.h +18 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvdense.cpp +566 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvdense.h +267 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvode.cpp +3939 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvode.h +940 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxKinetics.cxx +617 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxKinetics.h +78 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxMix.cxx +154 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxMix.h +58 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dense.cpp +175 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dense.h +341 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dumper.cpp +277 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dumper.h +60 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/gases.cpp +748 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/global_structures.h +1672 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/input.cpp +133 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/integrate.cpp +1219 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/inverse.cpp +5135 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/isotopes.cpp +1813 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/kinetics.cpp +3180 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/mainsubs.cpp +2320 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/model.cpp +5843 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector.cpp +272 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector.h +485 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector_serial.cpp +1032 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector_serial.h +369 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/parse.cpp +1044 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/phqalloc.cpp +316 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/phqalloc.h +47 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/pitzer.cpp +2709 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/pitzer_structures.cpp +225 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/prep.cpp +6267 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/print.cpp +3673 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/read.cpp +10245 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/readtr.cpp +1495 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/runner.cpp +158 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/runner.h +33 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sit.cpp +1684 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/smalldense.cpp +324 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/smalldense.h +261 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/spread.cpp +1309 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/step.cpp +1566 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/structures.cpp +3381 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialsmath.cpp +133 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialsmath.h +162 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialstypes.h +183 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/tally.cpp +1288 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/tidy.cpp +5600 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/transport.cpp +6403 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/utilities.cpp +1339 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/thread.h +64 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/CMakeLists.txt +133 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/Makefile.am +45 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/Makefile.in +1128 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/ex2.in +26 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main.f90 +31 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main77.f +6 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main_fortran.cxx +8 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/phreeqc.dat.in +1556 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_c.c +148 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_cxx.cxx +152 -0
- pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_f90.F90 +328 -0
- pyEQL/phreeqc/iphreeqc_wrapper.cpp +75 -0
- pyEQL/phreeqc/solution.py +74 -0
- pyEQL/phreeqc/var.py +50 -0
- pyEQL/presets/Ringers lactate.yaml +20 -0
- pyEQL/presets/__init__.py +17 -0
- pyEQL/presets/normal saline.yaml +17 -0
- pyEQL/presets/rainwater.yaml +17 -0
- pyEQL/presets/seawater.yaml +29 -0
- pyEQL/presets/urine.yaml +26 -0
- pyEQL/presets/wastewater.yaml +21 -0
- pyEQL/py.typed +0 -0
- pyEQL/salt_ion_match.py +112 -0
- pyEQL/solute.py +163 -0
- pyEQL/solution.py +2714 -0
- pyEQL/utils.py +237 -0
- pyeql-1.4.0rc9.dist-info/METADATA +130 -0
- pyeql-1.4.0rc9.dist-info/RECORD +491 -0
- pyeql-1.4.0rc9.dist-info/WHEEL +6 -0
- pyeql-1.4.0rc9.dist-info/licenses/AUTHORS.md +21 -0
- pyeql-1.4.0rc9.dist-info/licenses/LICENSE.txt +20 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from copy import deepcopy
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PHRQSol:
|
|
6
|
+
def __init__(self, props, phreeqc=None):
|
|
7
|
+
self._phreeqc = phreeqc
|
|
8
|
+
self._number = -1
|
|
9
|
+
self._input_props = props
|
|
10
|
+
self._calculated_props = {}
|
|
11
|
+
|
|
12
|
+
def __str__(self):
|
|
13
|
+
return "\n".join(f"{k} {v}" for k, v in self._input_props.items())
|
|
14
|
+
|
|
15
|
+
def _set_calculated_props(self, props: dict[Any, Any]):
|
|
16
|
+
self._calculated_props = deepcopy(props)
|
|
17
|
+
|
|
18
|
+
def _get_calculated_props(self):
|
|
19
|
+
return self._calculated_props
|
|
20
|
+
|
|
21
|
+
def _get_calculated_prop(self, which, species: str | None = None, eq_species: str | None = None):
|
|
22
|
+
if species is not None:
|
|
23
|
+
species_props = self._calculated_props["species"].get(species)
|
|
24
|
+
return species_props[which] if species_props is not None else None
|
|
25
|
+
if eq_species is not None:
|
|
26
|
+
eq_species_props = self._calculated_props["eq_species"].get(eq_species)
|
|
27
|
+
return eq_species_props[which] if eq_species_props is not None else None
|
|
28
|
+
return self._calculated_props[which]
|
|
29
|
+
|
|
30
|
+
def get_activity(self, species) -> float:
|
|
31
|
+
return self._get_calculated_prop("ACT", species=species)
|
|
32
|
+
|
|
33
|
+
def get_molality(self, species) -> float:
|
|
34
|
+
return self._get_calculated_prop("MOL", species=species)
|
|
35
|
+
|
|
36
|
+
def get_diffusion_coefficient(self, species) -> float:
|
|
37
|
+
return self._get_calculated_prop("DIFF_C", species=species)
|
|
38
|
+
|
|
39
|
+
def get_osmotic_coefficient(self) -> float:
|
|
40
|
+
return self._get_calculated_prop("OSMOTIC")
|
|
41
|
+
|
|
42
|
+
def get_species_list(self) -> list[str]:
|
|
43
|
+
return list(self._calculated_props["species"])
|
|
44
|
+
|
|
45
|
+
def get_kgw(self) -> float:
|
|
46
|
+
return self._get_calculated_prop("TOT['water']")
|
|
47
|
+
|
|
48
|
+
def get_moles(self, species) -> float:
|
|
49
|
+
return self.get_molality(species) * self.get_kgw()
|
|
50
|
+
|
|
51
|
+
def equalize(self, phases: list[str], saturation_indices: list[float], amounts: list[float]) -> None:
|
|
52
|
+
if self._phreeqc is not None:
|
|
53
|
+
self._phreeqc().equalize(self._number, phases, saturation_indices, amounts)
|
|
54
|
+
|
|
55
|
+
def si(self, eq_species) -> float:
|
|
56
|
+
return self._get_calculated_prop("SI", eq_species=eq_species)
|
|
57
|
+
|
|
58
|
+
"""
|
|
59
|
+
The following properties are somewhat redundant, but included in here
|
|
60
|
+
so we can act as a drop-in replacement for PhreeqPython as far as its
|
|
61
|
+
usage in pyEQL.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def species(self) -> list[str]:
|
|
66
|
+
return self.get_species_list()
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def species_moles(self) -> dict[str, float]:
|
|
70
|
+
return {species: self.get_moles(species) for species in self.species}
|
|
71
|
+
|
|
72
|
+
def forget(self) -> None:
|
|
73
|
+
if self._phreeqc is not None:
|
|
74
|
+
self._phreeqc().remove_solution(self._number)
|
pyEQL/phreeqc/var.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from pyEQL._phreeqc import PY_VAR_TYPE, PY_VRESULT, PyVar
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Var:
|
|
7
|
+
def __init__(self, value: Any | None = None):
|
|
8
|
+
self._var = PyVar()
|
|
9
|
+
self._var.var.type = PY_VAR_TYPE.TT_EMPTY
|
|
10
|
+
self.value = value # will invoke setter
|
|
11
|
+
|
|
12
|
+
@property
|
|
13
|
+
def value(self) -> Any:
|
|
14
|
+
match self._var.var.type:
|
|
15
|
+
case PY_VAR_TYPE.TT_EMPTY:
|
|
16
|
+
return None
|
|
17
|
+
case PY_VAR_TYPE.TT_ERROR:
|
|
18
|
+
return self._var.var.vresult
|
|
19
|
+
case PY_VAR_TYPE.TT_LONG:
|
|
20
|
+
return self._var.var.lVal
|
|
21
|
+
case PY_VAR_TYPE.TT_DOUBLE:
|
|
22
|
+
return self._var.var.dVal
|
|
23
|
+
case PY_VAR_TYPE.TT_STRING:
|
|
24
|
+
return self._var.var.sVal
|
|
25
|
+
case _:
|
|
26
|
+
raise RuntimeError("Unknown type")
|
|
27
|
+
|
|
28
|
+
@value.setter
|
|
29
|
+
def value(self, value) -> None:
|
|
30
|
+
# If we were previously holding a string, we need to free it by
|
|
31
|
+
# creating a new PyVar
|
|
32
|
+
if self._var.var.type == PY_VAR_TYPE.TT_STRING:
|
|
33
|
+
self._var = PyVar()
|
|
34
|
+
|
|
35
|
+
if isinstance(value, PY_VRESULT):
|
|
36
|
+
self._var.var.type = PY_VAR_TYPE.TT_ERROR
|
|
37
|
+
self._var.var.vresult = value
|
|
38
|
+
elif isinstance(value, int):
|
|
39
|
+
self._var.var.type = PY_VAR_TYPE.TT_LONG
|
|
40
|
+
self._var.var.lVal = value
|
|
41
|
+
elif isinstance(value, float):
|
|
42
|
+
self._var.var.type = PY_VAR_TYPE.TT_DOUBLE
|
|
43
|
+
self._var.var.dVal = value
|
|
44
|
+
elif isinstance(value, str):
|
|
45
|
+
self._var.var.type = PY_VAR_TYPE.TT_STRING
|
|
46
|
+
self._var.var.sVal = value
|
|
47
|
+
elif value is None:
|
|
48
|
+
self._var.var.type = PY_VAR_TYPE.TT_EMPTY
|
|
49
|
+
else:
|
|
50
|
+
raise RuntimeError("Unknown type")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"@module": pyEQL.solution
|
|
2
|
+
"@class": Solution
|
|
3
|
+
"@version": 0.0.post1.dev699+g0764b1c
|
|
4
|
+
solutes:
|
|
5
|
+
H2O(aq): 55.2313771443148 mol
|
|
6
|
+
Na[+1]: 0.13 mol
|
|
7
|
+
Cl[-1]: 0.109 mol
|
|
8
|
+
H5(CO)3[-1]: 0.028 mol
|
|
9
|
+
K[+1]: 0.004 mol
|
|
10
|
+
Ca[+2]: 0.0015 mol
|
|
11
|
+
H[+1]: 3.162277660168379e-07 mol
|
|
12
|
+
OH[-1]: 3.162277660168379e-08 mol
|
|
13
|
+
volume: 1 l
|
|
14
|
+
temperature: 298.15 K
|
|
15
|
+
pressure: 1 atm
|
|
16
|
+
pH: 6.5
|
|
17
|
+
pE: 8.5
|
|
18
|
+
balance_charge:
|
|
19
|
+
solvent: H2O(aq)
|
|
20
|
+
engine: native
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Partial pressures of reactive gases in atmosphere
|
|
2
|
+
# Obtained from https://www.noaa.gov/jetstream/atmosphere on 12/15/25
|
|
3
|
+
# (N2=78.084%, O2=20.946%, CO2=0.042%)
|
|
4
|
+
ATMOSPHERE = {"N2": -0.1074379, "CO2": -3.3767507, "O2": -0.6788989}
|
|
5
|
+
|
|
6
|
+
# The amount, in moles, of an assemblage of pure phases that can react
|
|
7
|
+
# reversibly with the aqueous phase.
|
|
8
|
+
|
|
9
|
+
# See:
|
|
10
|
+
# https://wwwbrr.cr.usgs.gov/projects/GWC_coupled/phreeqc/html/final-38.html
|
|
11
|
+
# ".. This number of moles defines the maximum amount of the mineral or gas
|
|
12
|
+
# that can dissolve. It may be possible to dissolve the entire amount without
|
|
13
|
+
# reaching the target saturation index, in which case the solution will have a
|
|
14
|
+
# smaller saturation index for this phase than the target saturation index.".
|
|
15
|
+
|
|
16
|
+
# We set it to 100 moles to approximate an "infinite" supply mineral/gas.
|
|
17
|
+
EQUILIBRIUM_PHASE_AMOUNT = 100
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"@module": pyEQL.solution
|
|
2
|
+
"@class": Solution
|
|
3
|
+
"@version": 0.0.post1.dev699+g0764b1c
|
|
4
|
+
solutes:
|
|
5
|
+
H2O(aq): 55.19703719794332 mol
|
|
6
|
+
Na[+1]: 0.154 mol
|
|
7
|
+
Cl[-1]: 0.154 mol
|
|
8
|
+
H[+1]: 1e-07 mol
|
|
9
|
+
OH[-1]: 1e-07 mol
|
|
10
|
+
volume: 1 l
|
|
11
|
+
temperature: 298.15 K
|
|
12
|
+
pressure: 1 atm
|
|
13
|
+
pH: 7.0
|
|
14
|
+
pE: 8.5
|
|
15
|
+
balance_charge:
|
|
16
|
+
solvent: H2O(aq)
|
|
17
|
+
engine: native
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"@module": pyEQL.solution
|
|
2
|
+
"@class": Solution
|
|
3
|
+
"@version": 0.0.post1.dev699+g0764b1c
|
|
4
|
+
solutes:
|
|
5
|
+
H2O(aq): 55.34454944845822 mol
|
|
6
|
+
HCO3[-1]: 3.162277660168379e-06 mol
|
|
7
|
+
H[+1]: 1e-06 mol
|
|
8
|
+
OH[-1]: 1e-08 mol
|
|
9
|
+
CO3[-2]: 1e-09 mol
|
|
10
|
+
volume: 1 l
|
|
11
|
+
temperature: 298.15 K
|
|
12
|
+
pressure: 1 atm
|
|
13
|
+
pH: 6.0
|
|
14
|
+
pE: 8.5
|
|
15
|
+
balance_charge:
|
|
16
|
+
solvent: H2O(aq)
|
|
17
|
+
engine: native
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"@module": pyEQL.solution
|
|
2
|
+
"@class": Solution
|
|
3
|
+
"@version": 0.0.post1.dev699+g0764b1c
|
|
4
|
+
solutes:
|
|
5
|
+
H2O(aq): 55.34455401423017 mol
|
|
6
|
+
Cl[-1]: 0.54425785619973 mol
|
|
7
|
+
Na[+1]: 0.4675827371496296 mol
|
|
8
|
+
Mg[+2]: 0.05266118052346798 mol
|
|
9
|
+
SO4[-2]: 0.02815187344845402 mol
|
|
10
|
+
Ca[+2]: 0.010251594148212317 mol
|
|
11
|
+
K[+1]: 0.010177468379526855 mol
|
|
12
|
+
HCO3[-1]: 0.0017126511769261989 mol
|
|
13
|
+
Br[-1]: 0.0008395244921424561 mol
|
|
14
|
+
B(OH)3(aq): 0.0003134669156396757 mol
|
|
15
|
+
CO3[-2]: 0.00023825904349479544 mol
|
|
16
|
+
B(OH)4(aq): 0.0001005389715937341 mol
|
|
17
|
+
Sr[+2]: 9.046483353663284e-05 mol
|
|
18
|
+
F[-1]: 6.822478260456777e-05 mol
|
|
19
|
+
CO2(aq): 9.515218476861173e-06 mol
|
|
20
|
+
OH[-1]: 8.207436858780224e-06 mol
|
|
21
|
+
H[+1]: 7.943282347242822e-09 mol
|
|
22
|
+
volume: 1.0080615264452506 l
|
|
23
|
+
temperature: 298.15 K
|
|
24
|
+
pressure: 1 atm
|
|
25
|
+
pH: 8.103487039827968
|
|
26
|
+
pE: 8.5
|
|
27
|
+
balance_charge:
|
|
28
|
+
solvent: H2O(aq)
|
|
29
|
+
engine: native
|
pyEQL/presets/urine.yaml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"@module": pyEQL.solution
|
|
2
|
+
"@class": Solution
|
|
3
|
+
"@version": 0.0.post1.dev699+g0764b1c
|
|
4
|
+
solutes:
|
|
5
|
+
H2O(aq): 55.135679438263864 mol
|
|
6
|
+
H4CN2O(aq): 0.333026615820163 mol
|
|
7
|
+
Na[+1]: 0.26098565526795925 mol
|
|
8
|
+
Cl[-1]: 0.05359207965475418 mol
|
|
9
|
+
K[+1]: 0.038364839391994025 mol
|
|
10
|
+
H4N[+1]: 0.027718552470665455 mol
|
|
11
|
+
SO4[-2]: 0.018737781405042127 mol
|
|
12
|
+
PO4[-3]: 0.012635387918307416 mol
|
|
13
|
+
H7C4N3O(aq): 0.008840335409397701 mol
|
|
14
|
+
HCO3[-1]: 0.004916675462052772 mol
|
|
15
|
+
Mg[+2]: 0.004114379757251594 mol
|
|
16
|
+
H4C5N4O3(aq): 0.0017845430730997621 mol
|
|
17
|
+
H[+1]: 1e-07 mol
|
|
18
|
+
OH[-1]: 1e-07 mol
|
|
19
|
+
volume: 1 l
|
|
20
|
+
temperature: 298.15 K
|
|
21
|
+
pressure: 1 atm
|
|
22
|
+
pH: 7.0
|
|
23
|
+
pE: 8.5
|
|
24
|
+
balance_charge:
|
|
25
|
+
solvent: H2O(aq)
|
|
26
|
+
engine: native
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"@module": pyEQL.solution
|
|
2
|
+
"@class": Solution
|
|
3
|
+
"@version": 0.0.post1.dev699+g0764b1c
|
|
4
|
+
solutes:
|
|
5
|
+
H2O(aq): 55.342123269143364 mol
|
|
6
|
+
CH3COOH(aq): 0.006827420786931851 mol
|
|
7
|
+
Cl[-1]: 0.0016641751050686824 mol
|
|
8
|
+
H3N(aq): 0.0014268501490265714 mol
|
|
9
|
+
K[+1]: 0.0004092249535146029 mol
|
|
10
|
+
SO4[-2]: 0.00027065684251727516 mol
|
|
11
|
+
PO4[-3]: 8.002412348261364e-05 mol
|
|
12
|
+
H[+1]: 1e-07 mol
|
|
13
|
+
OH[-1]: 1e-07 mol
|
|
14
|
+
volume: 1 l
|
|
15
|
+
temperature: 298.15 K
|
|
16
|
+
pressure: 1 atm
|
|
17
|
+
pH: 7.0
|
|
18
|
+
pE: 8.5
|
|
19
|
+
balance_charge:
|
|
20
|
+
solvent: H2O(aq)
|
|
21
|
+
engine: native
|
pyEQL/py.typed
ADDED
|
File without changes
|
pyEQL/salt_ion_match.py
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"""
|
|
2
|
+
pyEQL salt matching library.
|
|
3
|
+
|
|
4
|
+
This file contains functions that allow a pyEQL Solution object composed of
|
|
5
|
+
individual species (usually ions) to be mapped to a solution of one or more
|
|
6
|
+
salts. This mapping is necessary because some parameters (such as activity
|
|
7
|
+
coefficient data) can only be determined for salts (e.g. NaCl) and not individual
|
|
8
|
+
species (e.g. Na+)
|
|
9
|
+
|
|
10
|
+
:copyright: 2013-2024 by Ryan S. Kingsbury
|
|
11
|
+
:license: LGPL, see LICENSE for more details.
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from monty.json import MSONable
|
|
16
|
+
from pymatgen.core.ion import Ion
|
|
17
|
+
|
|
18
|
+
from pyEQL.utils import standardize_formula
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Salt(MSONable):
|
|
22
|
+
"""Class to represent a salt."""
|
|
23
|
+
|
|
24
|
+
def __init__(self, cation, anion) -> None:
|
|
25
|
+
"""
|
|
26
|
+
Create a Salt object based on its component ions.
|
|
27
|
+
|
|
28
|
+
Parameters:
|
|
29
|
+
cation, anion: (str) Chemical formula of the cation and anion, respectively.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Salt : An object representing the properties of the salt
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
>>> Salt('Na+','Cl-').formula
|
|
36
|
+
'NaCl'
|
|
37
|
+
|
|
38
|
+
>>> Salt('Mg++','Cl-').formula
|
|
39
|
+
'MgCl2'
|
|
40
|
+
"""
|
|
41
|
+
# create pymatgen Ion objects
|
|
42
|
+
pmg_cat = Ion.from_formula(cation)
|
|
43
|
+
pmg_an = Ion.from_formula(anion)
|
|
44
|
+
# standardize the cation and anion formulas
|
|
45
|
+
self.cation = standardize_formula(cation)
|
|
46
|
+
self.anion = standardize_formula(anion)
|
|
47
|
+
|
|
48
|
+
# get the charges on cation and anion
|
|
49
|
+
self.z_cation = pmg_cat.charge
|
|
50
|
+
self.z_anion = pmg_an.charge
|
|
51
|
+
|
|
52
|
+
# assign stoichiometric coefficients by finding a common multiple
|
|
53
|
+
self.nu_cation = int(abs(self.z_anion))
|
|
54
|
+
self.nu_anion = int(abs(self.z_cation))
|
|
55
|
+
|
|
56
|
+
# if both coefficients are the same, set each to one
|
|
57
|
+
if self.nu_cation == self.nu_anion:
|
|
58
|
+
self.nu_cation = 1
|
|
59
|
+
self.nu_anion = 1
|
|
60
|
+
|
|
61
|
+
# start building the formula, cation first
|
|
62
|
+
salt_formula = ""
|
|
63
|
+
if self.nu_cation > 1:
|
|
64
|
+
# add parentheses if the cation is a polyatomic ion
|
|
65
|
+
if len(pmg_cat.elements) > 1:
|
|
66
|
+
salt_formula += "("
|
|
67
|
+
salt_formula += self.cation.split("[")[0]
|
|
68
|
+
salt_formula += ")"
|
|
69
|
+
else:
|
|
70
|
+
salt_formula += self.cation.split("[")[0]
|
|
71
|
+
salt_formula += str(self.nu_cation)
|
|
72
|
+
else:
|
|
73
|
+
salt_formula += self.cation.split("[")[0]
|
|
74
|
+
|
|
75
|
+
if self.nu_anion > 1:
|
|
76
|
+
# add parentheses if the anion is a polyatomic ion
|
|
77
|
+
if len(pmg_an.elements) > 1:
|
|
78
|
+
salt_formula += "("
|
|
79
|
+
salt_formula += self.anion.split("[")[0]
|
|
80
|
+
salt_formula += ")"
|
|
81
|
+
else:
|
|
82
|
+
salt_formula += self.anion.split("[")[0]
|
|
83
|
+
salt_formula += str(self.nu_anion)
|
|
84
|
+
else:
|
|
85
|
+
salt_formula += self.anion.split("[")[0]
|
|
86
|
+
|
|
87
|
+
self.formula = salt_formula
|
|
88
|
+
|
|
89
|
+
# TODO - consider whether this should be adjusted to be based on total concentrations or not
|
|
90
|
+
# NOTE: speciating the solution results in a decrease in the overall ionic strength, because some of the
|
|
91
|
+
# Mg+2 is converted to monovalent complexes like MgOH+. Hence, the activity coefficients deviate a bit from
|
|
92
|
+
# the published values.
|
|
93
|
+
def get_effective_molality(self, ionic_strength):
|
|
94
|
+
r"""Calculate the effective molality according to [mistry13]_.
|
|
95
|
+
|
|
96
|
+
.. math:: 2 I \over (\nu_+ z_+^2 + \nu_- z_- ^2)
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
ionic_strength: Quantity
|
|
100
|
+
The ionic strength of the parent solution, mol/kg
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Quantity: the effective molality of the salt in the parent solution
|
|
104
|
+
|
|
105
|
+
References:
|
|
106
|
+
.. [mistry13] Mistry, K. H.; Hunter, H. a.; Lienhard V, J. H. Effect of composition and nonideal solution behavior
|
|
107
|
+
on desalination calculations for mixed electrolyte solutions with comparison to seawater. Desalination
|
|
108
|
+
2013, 318, 34-47.
|
|
109
|
+
"""
|
|
110
|
+
m_effective = 2 * ionic_strength / (self.nu_cation * self.z_cation**2 + self.nu_anion * self.z_anion**2)
|
|
111
|
+
|
|
112
|
+
return m_effective.to("mol/kg")
|
pyEQL/solute.py
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"""
|
|
2
|
+
pyEQL Solute class.
|
|
3
|
+
|
|
4
|
+
This file contains functions and methods for managing properties of
|
|
5
|
+
individual solutes. The Solute class contains methods for accessing
|
|
6
|
+
ONLY those properties that DO NOT depend on solution composition.
|
|
7
|
+
Solute properties such as activity coefficient or concentration
|
|
8
|
+
that do depend on compsition are accessed via Solution class methods.
|
|
9
|
+
|
|
10
|
+
:copyright: 2013-2024 by Ryan S. Kingsbury
|
|
11
|
+
:license: LGPL, see LICENSE for more details.
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
import warnings
|
|
19
|
+
from dataclasses import asdict, dataclass, field
|
|
20
|
+
from typing import Literal
|
|
21
|
+
|
|
22
|
+
import numpy as np
|
|
23
|
+
from pymatgen.core.ion import Ion
|
|
24
|
+
|
|
25
|
+
from pyEQL.utils import standardize_formula
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class Datum:
|
|
32
|
+
"""Document containing data for a single computed or experimental property."""
|
|
33
|
+
|
|
34
|
+
value: str
|
|
35
|
+
reference: str | None = None
|
|
36
|
+
data_type: Literal["computed", "experimental", "fitted", "unknown"] = "unknown"
|
|
37
|
+
|
|
38
|
+
@property
|
|
39
|
+
def magnitude(self):
|
|
40
|
+
"""Return the numerical value of a Datum."""
|
|
41
|
+
return float(self.value.split(" ")[0])
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def unit(self):
|
|
45
|
+
"""Return the unit of a Datum."""
|
|
46
|
+
return self.value.split(" ")[-1]
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def uncertainty(self):
|
|
50
|
+
"""Return the uncertainty of a Datum."""
|
|
51
|
+
if len(self.value.split(" ")) > 3:
|
|
52
|
+
return float(self.value.split(" ")[2])
|
|
53
|
+
return np.nan
|
|
54
|
+
|
|
55
|
+
def as_dict(self):
|
|
56
|
+
"""Return a dictionary representation of the Datum."""
|
|
57
|
+
return dict(asdict(self).items())
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass
|
|
61
|
+
class Solute:
|
|
62
|
+
"""
|
|
63
|
+
represent each chemical species as an object containing its formal charge,
|
|
64
|
+
transport numbers, concentration, activity, etc.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
formula: Chemical formula for the solute. Charged species must contain a + or - and (for polyvalent solutes)
|
|
68
|
+
a number representing the net charge (e.g. 'SO4-2').
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
formula: str
|
|
72
|
+
charge: int
|
|
73
|
+
molecular_weight: str
|
|
74
|
+
elements: list
|
|
75
|
+
chemsys: str
|
|
76
|
+
pmg_ion: Ion
|
|
77
|
+
formula_html: str
|
|
78
|
+
formula_latex: str
|
|
79
|
+
formula_hill: str
|
|
80
|
+
formula_pretty: str
|
|
81
|
+
oxi_state_guesses: dict[str, float]
|
|
82
|
+
n_atoms: int
|
|
83
|
+
n_elements: int
|
|
84
|
+
size: dict = field(
|
|
85
|
+
default_factory=lambda: {
|
|
86
|
+
"radius_ionic": None,
|
|
87
|
+
"radius_hydrated": None,
|
|
88
|
+
"radius_vdw": None,
|
|
89
|
+
"molar_volume": None,
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
thermo: dict = field(default_factory=lambda: {"ΔG_hydration": None, "ΔG_formation": None})
|
|
93
|
+
transport: dict = field(default_factory=lambda: {"diffusion_coefficient": None})
|
|
94
|
+
model_parameters: dict = field(
|
|
95
|
+
default_factory=lambda: {
|
|
96
|
+
"activity_pitzer": {"Beta0": None, "Beta1": None, "Beta2": None, "Cphi": None, "Max_C": None},
|
|
97
|
+
"molar_volume_pitzer": {
|
|
98
|
+
"Beta0": None,
|
|
99
|
+
"Beta1": None,
|
|
100
|
+
"Beta2": None,
|
|
101
|
+
"Cphi": None,
|
|
102
|
+
"V_o": None,
|
|
103
|
+
"Max_C": None,
|
|
104
|
+
},
|
|
105
|
+
"viscosity_jones_dole": {"B": None},
|
|
106
|
+
"diffusion_temp_smolyakov": {"a1": None, "a2": None, "d": None},
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
@classmethod
|
|
111
|
+
def from_formula(cls, formula: str):
|
|
112
|
+
"""
|
|
113
|
+
Create an Ion document from a chemical formula. The formula is passed to
|
|
114
|
+
pymatgen.core.Ion.from_formula() and used to populate the basic chemical
|
|
115
|
+
informatics fields (e.g., formula, charge, molecular weight, elements, etc.)
|
|
116
|
+
of the IonDoc.
|
|
117
|
+
"""
|
|
118
|
+
pmg_ion = Ion.from_formula(formula)
|
|
119
|
+
f, factor = pmg_ion.get_reduced_formula_and_factor()
|
|
120
|
+
rform = standardize_formula(formula)
|
|
121
|
+
charge = int(pmg_ion.charge)
|
|
122
|
+
els = [str(el) for el in pmg_ion.elements]
|
|
123
|
+
mw = f"{float(pmg_ion.weight / factor)} g/mol" # weight is a FloatWithUnit
|
|
124
|
+
chemsys = pmg_ion.chemical_system
|
|
125
|
+
# store only the most likely oxi_state guesses
|
|
126
|
+
try:
|
|
127
|
+
oxi_states = pmg_ion.oxi_state_guesses(all_oxi_states=True)[0]
|
|
128
|
+
except (IndexError, ValueError):
|
|
129
|
+
warnings.warn(f"Guessing oxi states failed for {formula}")
|
|
130
|
+
oxi_states = {}
|
|
131
|
+
|
|
132
|
+
return cls(
|
|
133
|
+
rform,
|
|
134
|
+
charge=charge,
|
|
135
|
+
molecular_weight=mw,
|
|
136
|
+
elements=els,
|
|
137
|
+
chemsys=chemsys,
|
|
138
|
+
pmg_ion=pmg_ion,
|
|
139
|
+
formula_html=pmg_ion.to_html_string(),
|
|
140
|
+
formula_latex=pmg_ion.to_latex_string(),
|
|
141
|
+
formula_hill=pmg_ion.hill_formula,
|
|
142
|
+
formula_pretty=pmg_ion.to_pretty_string(),
|
|
143
|
+
oxi_state_guesses=oxi_states,
|
|
144
|
+
n_atoms=int(pmg_ion.num_atoms),
|
|
145
|
+
n_elements=len(els),
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
def as_dict(self):
|
|
149
|
+
"""Return a dictionary representation of the Solute."""
|
|
150
|
+
return dict(asdict(self).items())
|
|
151
|
+
|
|
152
|
+
# set output of the print() statement
|
|
153
|
+
def __str__(self) -> str:
|
|
154
|
+
return (
|
|
155
|
+
"Species "
|
|
156
|
+
+ str(self.formula)
|
|
157
|
+
+ " MW="
|
|
158
|
+
+ str(self.mw)
|
|
159
|
+
+ " Formal Charge="
|
|
160
|
+
+ str(self.charge)
|
|
161
|
+
+ " Amount= "
|
|
162
|
+
+ str(self.moles)
|
|
163
|
+
)
|