pyEQL 1.4.0rc9__cp310-cp310-win_amd64.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.
Files changed (519) hide show
  1. pyEQL/__init__.py +50 -0
  2. pyEQL/_phreeqc.cp310-win_amd64.pyd +0 -0
  3. pyEQL/activity_correction.py +879 -0
  4. pyEQL/database/geothermal.dat +5693 -0
  5. pyEQL/database/llnl.dat +19305 -0
  6. pyEQL/database/phreeqc_license.txt +54 -0
  7. pyEQL/database/pyeql_db.json +35607 -0
  8. pyEQL/engines.py +1153 -0
  9. pyEQL/equilibrium.py +227 -0
  10. pyEQL/functions.py +281 -0
  11. pyEQL/phreeqc/__init__.py +5 -0
  12. pyEQL/phreeqc/bindings.cpp +84 -0
  13. pyEQL/phreeqc/core.py +239 -0
  14. pyEQL/phreeqc/database/Amm.dat +1968 -0
  15. pyEQL/phreeqc/database/CMakeLists.txt +32 -0
  16. pyEQL/phreeqc/database/ColdChem.dat +267 -0
  17. pyEQL/phreeqc/database/Concrete_PHR.dat +158 -0
  18. pyEQL/phreeqc/database/Concrete_PZ.dat +195 -0
  19. pyEQL/phreeqc/database/Kinec.v2.dat +12039 -0
  20. pyEQL/phreeqc/database/Kinec_v3.dat +12159 -0
  21. pyEQL/phreeqc/database/Makefile.am +28 -0
  22. pyEQL/phreeqc/database/Makefile.in +530 -0
  23. pyEQL/phreeqc/database/PHREEQC_ThermoddemV1.10_15Dec2020.dat +12965 -0
  24. pyEQL/phreeqc/database/Tipping_Hurley.dat +4137 -0
  25. pyEQL/phreeqc/database/__init__.py +0 -0
  26. pyEQL/phreeqc/database/core10.dat +6824 -0
  27. pyEQL/phreeqc/database/frezchem.dat +634 -0
  28. pyEQL/phreeqc/database/iso.dat +7235 -0
  29. pyEQL/phreeqc/database/llnl.dat +19310 -0
  30. pyEQL/phreeqc/database/minteq.dat +5654 -0
  31. pyEQL/phreeqc/database/minteq.v4.dat +13212 -0
  32. pyEQL/phreeqc/database/phreeqc.dat +1972 -0
  33. pyEQL/phreeqc/database/phreeqc_rates.dat +3158 -0
  34. pyEQL/phreeqc/database/pitzer.dat +1044 -0
  35. pyEQL/phreeqc/database/sit.dat +14348 -0
  36. pyEQL/phreeqc/database/wateq4f.dat +4036 -0
  37. pyEQL/phreeqc/ext/README.md +10 -0
  38. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/CMakeLists.txt +476 -0
  39. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/INSTALL +302 -0
  40. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/IPhreeqc.rc +61 -0
  41. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/IPhreeqcConfig.cmake.in +4 -0
  42. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/Makefile.am +8 -0
  43. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/Makefile.in +816 -0
  44. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/aclocal.m4 +1217 -0
  45. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/ALL_BUILD.vcxproj +185 -0
  46. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/ALL_BUILD.vcxproj.filters +8 -0
  47. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/generate.stamp +1 -0
  48. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/generate.stamp.depend +79 -0
  49. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CTestTestfile.cmake +6 -0
  50. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/Continuous.vcxproj +240 -0
  51. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/Continuous.vcxproj.filters +17 -0
  52. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/DartConfiguration.tcl +109 -0
  53. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/Experimental.vcxproj +240 -0
  54. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/Experimental.vcxproj.filters +17 -0
  55. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/INSTALL.vcxproj +209 -0
  56. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/INSTALL.vcxproj.filters +13 -0
  57. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/CSelectedOutput.obj +0 -0
  58. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Dictionary.obj +0 -0
  59. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/ExchComp.obj +0 -0
  60. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Exchange.obj +0 -0
  61. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/GasComp.obj +0 -0
  62. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/GasPhase.obj +0 -0
  63. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.lib.recipe +11 -0
  64. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.obj +0 -0
  65. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/CL.command.1.tlog +0 -0
  66. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/CL.read.1.tlog +0 -0
  67. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/CL.write.1.tlog +0 -0
  68. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/Cl.items.tlog +82 -0
  69. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/CustomBuild.command.1.tlog +10 -0
  70. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/CustomBuild.read.1.tlog +78 -0
  71. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/CustomBuild.write.1.tlog +2 -0
  72. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/IPhreeqc.lastbuildstate +2 -0
  73. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/Lib-link.read.1.tlog +0 -0
  74. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/Lib-link.write.1.tlog +0 -0
  75. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc.tlog/Lib.command.1.tlog +0 -0
  76. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqcLib.obj +0 -0
  77. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/IPhreeqc_interface_F.obj +0 -0
  78. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/ISolution.obj +0 -0
  79. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/ISolutionComp.obj +0 -0
  80. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Keywords.obj +0 -0
  81. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/KineticsComp.obj +0 -0
  82. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/NameDouble.obj +0 -0
  83. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/NumKeyword.obj +0 -0
  84. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/PBasic.obj +0 -0
  85. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/PHRQ_base.obj +0 -0
  86. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/PHRQ_io.obj +0 -0
  87. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/PHRQ_io_output.obj +0 -0
  88. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/PPassemblage.obj +0 -0
  89. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/PPassemblageComp.obj +0 -0
  90. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Parser.obj +0 -0
  91. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Phreeqc.obj +0 -0
  92. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Pressure.obj +0 -0
  93. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Reaction.obj +0 -0
  94. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/ReadClass.obj +0 -0
  95. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/SS.obj +0 -0
  96. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/SSassemblage.obj +0 -0
  97. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/SScomp.obj +0 -0
  98. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/SelectedOutput.obj +0 -0
  99. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Serializer.obj +0 -0
  100. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Solution.obj +0 -0
  101. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/SolutionIsotope.obj +0 -0
  102. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/StorageBin.obj +0 -0
  103. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/StorageBinList.obj +0 -0
  104. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Surface.obj +0 -0
  105. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/SurfaceCharge.obj +0 -0
  106. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/SurfaceComp.obj +0 -0
  107. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/System.obj +0 -0
  108. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Temperature.obj +0 -0
  109. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Use.obj +0 -0
  110. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/UserPunch.obj +0 -0
  111. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Utils.obj +0 -0
  112. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/Var.obj +0 -0
  113. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/advection.obj +0 -0
  114. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/basicsubs.obj +0 -0
  115. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/cl1.obj +0 -0
  116. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/cvdense.obj +0 -0
  117. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/cvode.obj +0 -0
  118. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/cxxKinetics.obj +0 -0
  119. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/cxxMix.obj +0 -0
  120. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/dense.obj +0 -0
  121. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/dumper.obj +0 -0
  122. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/gases.obj +0 -0
  123. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/input.obj +0 -0
  124. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/integrate.obj +0 -0
  125. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/inverse.obj +0 -0
  126. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/isotopes.obj +0 -0
  127. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/kinetics.obj +0 -0
  128. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/mainsubs.obj +0 -0
  129. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/model.obj +0 -0
  130. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/nvector.obj +0 -0
  131. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/nvector_serial.obj +0 -0
  132. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/parse.obj +0 -0
  133. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/phqalloc.obj +0 -0
  134. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/pitzer.obj +0 -0
  135. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/pitzer_structures.obj +0 -0
  136. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/prep.obj +0 -0
  137. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/print.obj +0 -0
  138. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/read.obj +0 -0
  139. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/readtr.obj +0 -0
  140. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/runner.obj +0 -0
  141. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/sit.obj +0 -0
  142. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/smalldense.obj +0 -0
  143. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/spread.obj +0 -0
  144. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/step.obj +0 -0
  145. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/structures.obj +0 -0
  146. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/sundialsmath.obj +0 -0
  147. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/tally.obj +0 -0
  148. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/tidy.obj +0 -0
  149. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/transport.obj +0 -0
  150. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.dir/Release/utilities.obj +0 -0
  151. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.sln +116 -0
  152. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.vcxproj +443 -0
  153. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/IPhreeqc.vcxproj.filters +456 -0
  154. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/Nightly.vcxproj +240 -0
  155. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/Nightly.vcxproj.filters +17 -0
  156. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/NightlyMemoryCheck.vcxproj +240 -0
  157. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/NightlyMemoryCheck.vcxproj.filters +17 -0
  158. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/Release/IPhreeqc.lib +0 -0
  159. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/cmake_install.cmake +40 -0
  160. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/ar-lib +270 -0
  161. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/compile +347 -0
  162. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/config.guess +1441 -0
  163. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/config.sub +1813 -0
  164. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/depcomp +791 -0
  165. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/install-sh +508 -0
  166. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/ltmain.sh +11156 -0
  167. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/missing +215 -0
  168. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/test-driver +148 -0
  169. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/configure +23867 -0
  170. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/configure.ac +136 -0
  171. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Amm.dat +1968 -0
  172. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/CMakeLists.txt +32 -0
  173. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/ColdChem.dat +267 -0
  174. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Concrete_PHR.dat +158 -0
  175. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Concrete_PZ.dat +195 -0
  176. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Kinec.v2.dat +12039 -0
  177. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Kinec_v3.dat +12159 -0
  178. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Makefile.am +28 -0
  179. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Makefile.in +530 -0
  180. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/PHREEQC_ThermoddemV1.10_15Dec2020.dat +12965 -0
  181. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Tipping_Hurley.dat +4137 -0
  182. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/core10.dat +6824 -0
  183. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/frezchem.dat +634 -0
  184. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/iso.dat +7235 -0
  185. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/llnl.dat +19310 -0
  186. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/minteq.dat +5654 -0
  187. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/minteq.v4.dat +13212 -0
  188. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/phreeqc.dat +1972 -0
  189. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/phreeqc_rates.dat +3158 -0
  190. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/pitzer.dat +1044 -0
  191. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/sit.dat +14348 -0
  192. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/wateq4f.dat +4036 -0
  193. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/CMakeLists.txt +35 -0
  194. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/IPhreeqc.pdf +0 -0
  195. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Makefile.am +24 -0
  196. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Makefile.in +545 -0
  197. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/NOTICE +51 -0
  198. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Phreeqc_2_1999_manual.pdf +0 -0
  199. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Phreeqc_3_2013_manual.pdf +0 -0
  200. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/README +428 -0
  201. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/RELEASE +7294 -0
  202. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8h.html +5096 -0
  203. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8h_source.html +389 -0
  204. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8hpp.html +83 -0
  205. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8hpp_source.html +478 -0
  206. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/Var_8h.html +318 -0
  207. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/Var_8h_source.html +200 -0
  208. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/bc_s.png +0 -0
  209. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/bdwn.png +0 -0
  210. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqc.html +2274 -0
  211. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqc.png +0 -0
  212. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqcStop.html +69 -0
  213. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqcStop.png +0 -0
  214. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/closed.png +0 -0
  215. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +68 -0
  216. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/doxygen.css +1440 -0
  217. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/doxygen.png +0 -0
  218. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/dynsections.js +97 -0
  219. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2blank.png +0 -0
  220. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2doc.png +0 -0
  221. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2folderclosed.png +0 -0
  222. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2folderopen.png +0 -0
  223. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2lastnode.png +0 -0
  224. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2link.png +0 -0
  225. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2mlastnode.png +0 -0
  226. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2mnode.png +0 -0
  227. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2node.png +0 -0
  228. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2plastnode.png +0 -0
  229. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2pnode.png +0 -0
  230. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2splitbar.png +0 -0
  231. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2vertline.png +0 -0
  232. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/index.html +58 -0
  233. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/jquery.js +31 -0
  234. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_f.png +0 -0
  235. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_g.png +0 -0
  236. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_h.png +0 -0
  237. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/open.png +0 -0
  238. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/structVAR.html +143 -0
  239. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/sync_off.png +0 -0
  240. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/sync_on.png +0 -0
  241. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_a.png +0 -0
  242. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_b.png +0 -0
  243. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_h.png +0 -0
  244. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_s.png +0 -0
  245. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tabs.css +60 -0
  246. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/phreeqc3.chm +0 -0
  247. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/CMakeLists.txt +11 -0
  248. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/Makefile.am +88 -0
  249. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/Makefile.in +696 -0
  250. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/CMakeLists.txt +1 -0
  251. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/CMakeLists.txt +35 -0
  252. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/CMakeLists.txt.in +21 -0
  253. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/README.txt +44 -0
  254. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/advect.c +101 -0
  255. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/ic +17 -0
  256. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/phreeqc.dat +1579 -0
  257. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/CMakeLists.txt +10 -0
  258. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/README.txt +3 -0
  259. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/CMakeLists.txt +9 -0
  260. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/phreeqc.dat +1582 -0
  261. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/runphreeqc.xls +0 -0
  262. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/withcallback.xls +0 -0
  263. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/CMakeLists.txt +11 -0
  264. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/Gypsum.py +52 -0
  265. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/parallel_advect.py +465 -0
  266. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/phreeqc.dat +1582 -0
  267. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/pitzer.dat +790 -0
  268. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/wateq4f.dat +3846 -0
  269. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/CMakeLists.txt +1 -0
  270. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/CMakeLists.txt +35 -0
  271. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/CMakeLists.txt.in +20 -0
  272. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/README.txt +45 -0
  273. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/advect.cpp +110 -0
  274. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/ic +17 -0
  275. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/phreeqc.dat +1579 -0
  276. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/CMakeLists.txt +1 -0
  277. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/CMakeLists.txt +44 -0
  278. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/CMakeLists.txt.in +24 -0
  279. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/README.txt +45 -0
  280. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/advect.F90 +102 -0
  281. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/ic +17 -0
  282. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/phreeqc.dat +1579 -0
  283. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/CMakeLists.txt +26 -0
  284. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/CMakeLists.txt.in +20 -0
  285. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/README.txt +37 -0
  286. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/ex2 +26 -0
  287. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/main.cpp +20 -0
  288. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/phreeqc.dat +1837 -0
  289. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/post-install.cmake.in +7 -0
  290. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/CMakeLists.txt +185 -0
  291. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/FileTest.cpp +171 -0
  292. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/FileTest.h +34 -0
  293. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/Makefile.am +18 -0
  294. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/Makefile.in +466 -0
  295. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestCVar.cpp +9 -0
  296. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestIPhreeqc.cpp +4901 -0
  297. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestIPhreeqcLib.cpp +4644 -0
  298. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestSelectedOutput.cpp +669 -0
  299. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestVar.cpp +10 -0
  300. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/conv_fail.in +11 -0
  301. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/dump +42 -0
  302. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/iso.dat +7231 -0
  303. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/kinn20140218 +349 -0
  304. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/missing_e.dat +1556 -0
  305. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/multi_punch +105 -0
  306. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/multi_punch_no_set +102 -0
  307. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/phreeqc.dat.90a6449 +1935 -0
  308. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/phreeqc.dat.old +1556 -0
  309. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/libtool.m4 +8388 -0
  310. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltoptions.m4 +437 -0
  311. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltsugar.m4 +124 -0
  312. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltversion.m4 +23 -0
  313. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/lt~obsolete.m4 +99 -0
  314. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/resource.h +14 -0
  315. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CSelectedOutput.cpp +401 -0
  316. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CSelectedOutput.hxx +77 -0
  317. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CVar.hxx +162 -0
  318. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Debug.h +12 -0
  319. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/ErrorReporter.hxx +70 -0
  320. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.cpp +1889 -0
  321. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.f.inc +91 -0
  322. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.f90.inc +603 -0
  323. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.h +2182 -0
  324. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.hpp +1027 -0
  325. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcCallbacks.h +19 -0
  326. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcF.f +653 -0
  327. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcLib.cpp +1098 -0
  328. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface.F90 +1283 -0
  329. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface_F.cpp +535 -0
  330. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface_F.h +162 -0
  331. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Makefile.am +210 -0
  332. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Makefile.in +1294 -0
  333. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/README.Fortran +17 -0
  334. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Var.c +84 -0
  335. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Var.h +152 -0
  336. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Version.h +36 -0
  337. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fimpl.h +282 -0
  338. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap.cpp +646 -0
  339. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap.h +163 -0
  340. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap1.cpp +24 -0
  341. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap2.cpp +24 -0
  342. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap3.cpp +24 -0
  343. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap4.cpp +24 -0
  344. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap5.cpp +24 -0
  345. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap6.cpp +25 -0
  346. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap7.cpp +25 -0
  347. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap8.cpp +24 -0
  348. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartHandler.cpp +225 -0
  349. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartHandler.h +59 -0
  350. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartObject.cpp +1382 -0
  351. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartObject.h +444 -0
  352. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/CurveObject.cpp +42 -0
  353. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/CurveObject.h +79 -0
  354. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Dictionary.cpp +41 -0
  355. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Dictionary.h +28 -0
  356. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ExchComp.cxx +398 -0
  357. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ExchComp.h +117 -0
  358. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Exchange.cxx +466 -0
  359. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Exchange.h +74 -0
  360. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Form1.h +1184 -0
  361. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Form1.resX +36 -0
  362. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasComp.cxx +265 -0
  363. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasComp.h +59 -0
  364. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasPhase.cxx +659 -0
  365. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasPhase.h +103 -0
  366. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolution.cxx +40 -0
  367. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolution.h +53 -0
  368. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolutionComp.cxx +202 -0
  369. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolutionComp.h +138 -0
  370. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/KineticsComp.cxx +318 -0
  371. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/KineticsComp.h +81 -0
  372. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NA.h +1 -0
  373. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NameDouble.cxx +537 -0
  374. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NameDouble.h +66 -0
  375. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NumKeyword.cxx +190 -0
  376. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NumKeyword.h +67 -0
  377. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PBasic.cpp +8350 -0
  378. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PBasic.h +572 -0
  379. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PHRQ_io_output.cpp +411 -0
  380. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblage.cxx +375 -0
  381. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblage.h +70 -0
  382. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblageComp.cxx +441 -0
  383. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblageComp.h +83 -0
  384. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Phreeqc.cpp +2087 -0
  385. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Phreeqc.h +2164 -0
  386. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PhreeqcKeywords/Keywords.cpp +242 -0
  387. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PhreeqcKeywords/Keywords.h +104 -0
  388. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Pressure.cxx +417 -0
  389. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Pressure.h +43 -0
  390. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Reaction.cxx +284 -0
  391. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Reaction.h +57 -0
  392. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ReadClass.cxx +1150 -0
  393. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SS.cxx +609 -0
  394. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SS.h +128 -0
  395. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SSassemblage.cxx +317 -0
  396. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SSassemblage.h +59 -0
  397. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SScomp.cxx +297 -0
  398. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SScomp.h +66 -0
  399. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SelectedOutput.cpp +115 -0
  400. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SelectedOutput.h +209 -0
  401. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Serializer.cxx +213 -0
  402. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Serializer.h +42 -0
  403. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Solution.cxx +1795 -0
  404. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Solution.h +154 -0
  405. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SolutionIsotope.cxx +333 -0
  406. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SolutionIsotope.h +85 -0
  407. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBin.cxx +1507 -0
  408. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBin.h +141 -0
  409. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBinList.cpp +358 -0
  410. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBinList.h +81 -0
  411. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Surface.cxx +837 -0
  412. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Surface.h +108 -0
  413. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceCharge.cxx +617 -0
  414. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceCharge.h +137 -0
  415. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceComp.cxx +509 -0
  416. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceComp.h +70 -0
  417. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/System.cxx +103 -0
  418. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/System.h +89 -0
  419. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Temperature.cxx +423 -0
  420. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Temperature.h +42 -0
  421. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Use.cpp +78 -0
  422. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Use.h +159 -0
  423. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/UserPunch.cpp +32 -0
  424. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/UserPunch.h +39 -0
  425. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ZedGraph.dll +0 -0
  426. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/advection.cpp +140 -0
  427. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/basicsubs.cpp +4333 -0
  428. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cl1.cpp +881 -0
  429. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_base.cxx +117 -0
  430. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_base.h +48 -0
  431. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_exports.h +20 -0
  432. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_io.cpp +914 -0
  433. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_io.h +207 -0
  434. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Parser.cxx +1331 -0
  435. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Parser.h +310 -0
  436. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Utils.cxx +263 -0
  437. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Utils.h +29 -0
  438. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/phrqtype.h +18 -0
  439. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvdense.cpp +566 -0
  440. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvdense.h +267 -0
  441. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvode.cpp +3939 -0
  442. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvode.h +940 -0
  443. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxKinetics.cxx +617 -0
  444. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxKinetics.h +78 -0
  445. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxMix.cxx +154 -0
  446. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxMix.h +58 -0
  447. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dense.cpp +175 -0
  448. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dense.h +341 -0
  449. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dumper.cpp +277 -0
  450. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dumper.h +60 -0
  451. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/gases.cpp +748 -0
  452. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/global_structures.h +1672 -0
  453. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/input.cpp +133 -0
  454. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/integrate.cpp +1219 -0
  455. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/inverse.cpp +5135 -0
  456. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/isotopes.cpp +1813 -0
  457. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/kinetics.cpp +3180 -0
  458. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/mainsubs.cpp +2320 -0
  459. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/model.cpp +5843 -0
  460. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector.cpp +272 -0
  461. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector.h +485 -0
  462. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector_serial.cpp +1032 -0
  463. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector_serial.h +369 -0
  464. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/parse.cpp +1044 -0
  465. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/phqalloc.cpp +316 -0
  466. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/phqalloc.h +47 -0
  467. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/pitzer.cpp +2709 -0
  468. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/pitzer_structures.cpp +225 -0
  469. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/prep.cpp +6267 -0
  470. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/print.cpp +3673 -0
  471. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/read.cpp +10245 -0
  472. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/readtr.cpp +1495 -0
  473. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/runner.cpp +158 -0
  474. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/runner.h +33 -0
  475. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sit.cpp +1684 -0
  476. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/smalldense.cpp +324 -0
  477. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/smalldense.h +261 -0
  478. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/spread.cpp +1309 -0
  479. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/step.cpp +1566 -0
  480. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/structures.cpp +3381 -0
  481. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialsmath.cpp +133 -0
  482. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialsmath.h +162 -0
  483. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialstypes.h +183 -0
  484. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/tally.cpp +1288 -0
  485. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/tidy.cpp +5600 -0
  486. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/transport.cpp +6403 -0
  487. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/utilities.cpp +1339 -0
  488. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/thread.h +64 -0
  489. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/CMakeLists.txt +133 -0
  490. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/Makefile.am +45 -0
  491. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/Makefile.in +1128 -0
  492. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/ex2.in +26 -0
  493. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main.f90 +31 -0
  494. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main77.f +6 -0
  495. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main_fortran.cxx +8 -0
  496. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/phreeqc.dat.in +1556 -0
  497. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_c.c +148 -0
  498. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_cxx.cxx +152 -0
  499. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_f90.F90 +328 -0
  500. pyEQL/phreeqc/iphreeqc_wrapper.cpp +75 -0
  501. pyEQL/phreeqc/solution.py +74 -0
  502. pyEQL/phreeqc/var.py +50 -0
  503. pyEQL/presets/Ringers lactate.yaml +20 -0
  504. pyEQL/presets/__init__.py +17 -0
  505. pyEQL/presets/normal saline.yaml +17 -0
  506. pyEQL/presets/rainwater.yaml +17 -0
  507. pyEQL/presets/seawater.yaml +29 -0
  508. pyEQL/presets/urine.yaml +26 -0
  509. pyEQL/presets/wastewater.yaml +21 -0
  510. pyEQL/py.typed +0 -0
  511. pyEQL/salt_ion_match.py +112 -0
  512. pyEQL/solute.py +163 -0
  513. pyEQL/solution.py +2714 -0
  514. pyEQL/utils.py +237 -0
  515. pyeql-1.4.0rc9.dist-info/METADATA +130 -0
  516. pyeql-1.4.0rc9.dist-info/RECORD +519 -0
  517. pyeql-1.4.0rc9.dist-info/WHEEL +5 -0
  518. pyeql-1.4.0rc9.dist-info/licenses/AUTHORS.md +21 -0
  519. pyeql-1.4.0rc9.dist-info/licenses/LICENSE.txt +20 -0
@@ -0,0 +1,1795 @@
1
+ // Solution.cxx: implementation of the cxxSolution class.
2
+ //
3
+ //////////////////////////////////////////////////////////////////////
4
+ #ifdef _DEBUG
5
+ #pragma warning(disable : 4786) // disable truncation warning (Only used by debugger)
6
+ #endif
7
+
8
+ #include <set>
9
+ #include <cassert> // assert
10
+ #include <algorithm> // std::sort
11
+ #include "Utils.h" // define first
12
+ #include "Phreeqc.h"
13
+ #include "Solution.h"
14
+ #include "cxxMix.h"
15
+ #include "phqalloc.h"
16
+ #include "Dictionary.h"
17
+
18
+ #if defined(PHREEQCI_GUI)
19
+ #ifdef _DEBUG
20
+ #define new DEBUG_NEW
21
+ #undef THIS_FILE
22
+ static char THIS_FILE[] = __FILE__;
23
+ #endif
24
+ #endif
25
+
26
+ //////////////////////////////////////////////////////////////////////
27
+ // Construction/Destruction
28
+ //////////////////////////////////////////////////////////////////////
29
+
30
+
31
+ cxxSolution::cxxSolution(PHRQ_io * io)
32
+ //
33
+ // default constructor for cxxSolution
34
+ //
35
+ : cxxNumKeyword(io)
36
+ {
37
+ this->io = io;
38
+ this->new_def = false;
39
+ this->patm = 1.0;
40
+ this->potV = 0.0;
41
+ this->tc = 25.0;
42
+ this->ph = 7.0;
43
+ this->pe = 4.0;
44
+ this->mu = 1e-7;
45
+ this->ah2o = 1.0;
46
+ this->total_h = 111.1;
47
+ this->total_o = 55.55;
48
+ this->cb = 0.0;
49
+ this->density = 1.0;
50
+ this->viscosity = 1.0;
51
+ this->viscos_0 = 1.0;
52
+ this->mass_water = 1.0;
53
+ this->soln_vol = 1.0;
54
+ this->total_alkalinity = 0.0;
55
+ this->totals.type = cxxNameDouble::ND_ELT_MOLES;
56
+ this->master_activity.type = cxxNameDouble::ND_SPECIES_LA;
57
+ this->species_gamma.type = cxxNameDouble::ND_SPECIES_GAMMA;
58
+ this->initial_data = NULL;
59
+ }
60
+ cxxSolution::cxxSolution(const cxxSolution &old_sol)
61
+ : initial_data(NULL)
62
+ {
63
+ *this = old_sol;
64
+ }
65
+ const cxxSolution &
66
+ cxxSolution::operator =(const cxxSolution &rhs)
67
+ {
68
+ if (this != &rhs)
69
+ {
70
+ this->io = rhs.io;
71
+ this->n_user = rhs.n_user;
72
+ this->n_user_end = rhs.n_user_end;
73
+ this->description = rhs.description;
74
+ this->new_def = rhs.new_def;
75
+ this->patm = rhs.patm;
76
+ this->potV = rhs.potV;
77
+ this->tc = rhs.tc;
78
+ this->ph = rhs.ph;
79
+ this->pe = rhs.pe;
80
+ this->mu = rhs.mu;
81
+ this->ah2o = rhs.ah2o;
82
+ this->total_h = rhs.total_h;
83
+ this->total_o = rhs.total_o;
84
+ this->density = rhs.density;
85
+ this->viscosity = rhs.viscosity;
86
+ this->viscos_0 = rhs.viscos_0;
87
+ this->cb = rhs.cb;
88
+ this->mass_water = rhs.mass_water;
89
+ this->soln_vol = rhs.soln_vol;
90
+ this->total_alkalinity = rhs.total_alkalinity;
91
+ this->totals = rhs.totals;
92
+ this->master_activity = rhs.master_activity;
93
+ this->species_gamma = rhs.species_gamma;
94
+ this->isotopes = rhs.isotopes;
95
+ this->species_map = rhs.species_map;
96
+ this->log_gamma_map = rhs.log_gamma_map;
97
+ this->log_molalities_map = rhs.log_molalities_map;
98
+ if (this->initial_data)
99
+ delete initial_data;
100
+ if (rhs.initial_data != NULL)
101
+ this->initial_data = new cxxISolution(*rhs.initial_data);
102
+ else
103
+ this->initial_data = NULL;
104
+ }
105
+ return *this;
106
+ }
107
+ cxxSolution::cxxSolution(std::map < int, cxxSolution > &solutions,
108
+ cxxMix & mix, int l_n_user, PHRQ_io * io)
109
+ //
110
+ // constructor for cxxSolution from mixture of solutions
111
+ //
112
+ : cxxNumKeyword(io)
113
+ {
114
+ //
115
+ // Zero out solution data
116
+ //
117
+ this->zero();
118
+ this->n_user = this->n_user_end = l_n_user;
119
+ this->new_def = false;
120
+ this->ah2o = 0;
121
+ // potV is an external variable, imposed in a given solution, not mixed.
122
+ std::map < int, cxxSolution >::const_iterator sol = solutions.find(mix.Get_n_user());
123
+ const cxxSolution *cxxsoln_ptr1;
124
+ if (sol != solutions.end())
125
+ {
126
+ cxxsoln_ptr1 = &(sol->second);
127
+ if (cxxsoln_ptr1->new_def)
128
+ this->potV = 0.0;
129
+ else
130
+ this->potV = cxxsoln_ptr1->potV;
131
+ }
132
+ //
133
+ // Mix solutions
134
+ //
135
+ const std::map < int, LDBLE >&mixcomps = mix.Get_mixComps();
136
+ std::map < int, LDBLE >::const_iterator it;
137
+ for (it = mixcomps.begin(); it != mixcomps.end(); it++)
138
+ {
139
+ sol = solutions.find(it->first);
140
+ if (sol == solutions.end())
141
+ {
142
+ std::ostringstream msg;
143
+ msg << "Solution " << it->first << " not found in mix_cxxSolutions.";
144
+ error_msg(msg.str(), CONTINUE);
145
+ }
146
+ else
147
+ {
148
+ cxxsoln_ptr1 = &(sol->second);
149
+ this->add(*cxxsoln_ptr1, it->second);
150
+ }
151
+ }
152
+
153
+ }
154
+ cxxSolution::~cxxSolution()
155
+ {
156
+ delete this->initial_data;
157
+ }
158
+
159
+ void
160
+ cxxSolution::dump_xml(std::ostream & s_oss, unsigned int indent) const
161
+ {
162
+ unsigned int i;
163
+ s_oss.precision(DBL_DIG - 1);
164
+ std::string indent0(""), indent1("");
165
+ for (i = 0; i < indent; ++i)
166
+ indent0.append(Utilities::INDENT);
167
+ for (i = 0; i < indent + 1; ++i)
168
+ indent1.append(Utilities::INDENT);
169
+
170
+ // Solution element and attributes
171
+ s_oss << indent0;
172
+ s_oss << "<solution " << "\n";
173
+
174
+ s_oss << indent1;
175
+ s_oss << "soln_n_user=\"" << this->n_user << "\" " << "\n";
176
+
177
+ s_oss << indent1;
178
+ s_oss << "soln_description=\"" << this->description << "\"" << "\n";
179
+
180
+ s_oss << indent1;
181
+ s_oss << "soln_tc=\"" << this->tc << "\"" << "\n";
182
+
183
+ s_oss << indent1;
184
+ s_oss << "soln_ph=\"" << this->ph << "\"" << "\n";
185
+
186
+ s_oss << indent1;
187
+ s_oss << "soln_solution_pe=\"" << this->pe << "\"" << "\n";
188
+
189
+ s_oss << indent1;
190
+ s_oss << "soln_mu=\"" << this->mu << "\"" << "\n";
191
+
192
+ s_oss << indent1;
193
+ s_oss << "soln_ah2o=\"" << this->ah2o << "\"" << "\n";
194
+
195
+ s_oss << indent1;
196
+ s_oss << "soln_total_h=\"" << this->total_h << "\"" << "\n";
197
+
198
+ s_oss << indent1;
199
+ s_oss << "soln_total_o=\"" << this->total_o << "\"" << "\n";
200
+
201
+ s_oss << indent1;
202
+ s_oss << "soln_cb=\"" << this->cb << "\"" << "\n";
203
+
204
+ s_oss << indent1;
205
+ s_oss << "soln_mass_water=\"" << this->mass_water << "\"" << "\n";
206
+
207
+ s_oss << indent1;
208
+ s_oss << "soln_vol=\"" << this->soln_vol << "\"" << "\n";
209
+
210
+ s_oss << indent1;
211
+ s_oss << "soln_total_alkalinity=\"" << this->
212
+ total_alkalinity << "\"" << "\n";
213
+
214
+ s_oss << indent1;
215
+ s_oss << "\">" << "\n";
216
+
217
+ // soln_total conc structures
218
+ this->totals.dump_xml(s_oss, indent + 1);
219
+
220
+ // master_activity map
221
+ this->master_activity.dump_xml(s_oss, indent + 1);
222
+
223
+ // species_gamma map
224
+ this->species_gamma.dump_xml(s_oss, indent + 1);
225
+
226
+ // End of solution
227
+ s_oss << indent0;
228
+ s_oss << "</solution>" << "\n";
229
+
230
+ return;
231
+ }
232
+
233
+ void
234
+ cxxSolution::dump_raw(std::ostream & s_oss, unsigned int indent, int *n_out) const
235
+ {
236
+ unsigned int i;
237
+ s_oss.precision(DBL_DIG - 1);
238
+ std::string indent0(""), indent1(""), indent2("");
239
+ for (i = 0; i < indent; ++i)
240
+ indent0.append(Utilities::INDENT);
241
+ for (i = 0; i < indent + 1; ++i)
242
+ indent1.append(Utilities::INDENT);
243
+ for (i = 0; i < indent + 2; ++i)
244
+ indent2.append(Utilities::INDENT);
245
+
246
+ // Solution element and attributes
247
+ s_oss << indent0;
248
+ int n_user_local = (n_out != NULL) ? *n_out : this->n_user;
249
+ s_oss << "SOLUTION_RAW " << n_user_local << " " << this->description << "\n";
250
+
251
+ s_oss << indent1;
252
+ s_oss << "-temp " << this->tc << "\n";
253
+
254
+ s_oss << indent1;
255
+ s_oss << "-pressure " << this->patm << "\n";
256
+
257
+ s_oss << indent1;
258
+ s_oss << "-potential " << this->potV << "\n";
259
+
260
+ // new identifier
261
+ s_oss << indent1;
262
+ s_oss << "-total_h " << this->total_h << "\n";
263
+
264
+ // new identifier
265
+ s_oss << indent1;
266
+ s_oss << "-total_o " << this->total_o << "\n";
267
+
268
+ // new identifier
269
+ s_oss << indent1;
270
+ s_oss << "-cb " << this->cb << "\n";
271
+
272
+ // new identifier
273
+ s_oss << indent1;
274
+ s_oss << "-density " << this->density << "\n";
275
+
276
+ // new identifier
277
+ s_oss << indent1;
278
+ s_oss << "-viscosity " << this->viscosity << "\n";
279
+ s_oss << indent1;
280
+ s_oss << "-viscos_0 " << this->viscos_0 << "\n";
281
+
282
+ // soln_total conc structures
283
+ s_oss << indent1;
284
+ s_oss << "-totals" << "\n";
285
+ this->totals.dump_raw(s_oss, indent + 2);
286
+
287
+ // Isotopes
288
+ {
289
+ for (std::map < std::string, cxxSolutionIsotope >::const_iterator it =
290
+ this->isotopes.begin(); it != isotopes.end(); ++it)
291
+ {
292
+ s_oss << indent1 << "-Isotope" << "\n";
293
+ it->second.dump_raw(s_oss, indent + 2);
294
+ }
295
+ }
296
+
297
+ s_oss << indent1;
298
+ s_oss << "-pH " << this->ph << "\n";
299
+
300
+ s_oss << indent1;
301
+ s_oss << "-pe " << this->pe << "\n";
302
+
303
+ // new identifier
304
+ s_oss << indent1;
305
+ s_oss << "-mu " << this->mu << "\n";
306
+
307
+ // new identifier
308
+ s_oss << indent1;
309
+ s_oss << "-ah2o " << this->ah2o << "\n";
310
+
311
+ // new identifier
312
+ s_oss << indent1;
313
+ s_oss << "-mass_water " << this->mass_water << "\n";
314
+
315
+ // new identifier
316
+ s_oss << indent1;
317
+ s_oss << "-soln_vol " << this->soln_vol << "\n";
318
+
319
+ // new identifier
320
+ s_oss << indent1;
321
+ s_oss << "-total_alkalinity " << this->total_alkalinity << "\n";
322
+
323
+ // master_activity map
324
+ s_oss << indent1;
325
+ s_oss << "-activities" << "\n";
326
+ this->master_activity.dump_raw(s_oss, indent + 2);
327
+
328
+ // species_gamma map
329
+ s_oss << indent1;
330
+ s_oss << "-gammas" << "\n";
331
+ this->species_gamma.dump_raw(s_oss, indent + 2);
332
+
333
+ // species_map
334
+ if (species_map.size() > 0)
335
+ {
336
+ s_oss << indent1;
337
+ s_oss << "-species_map" << "\n";
338
+ std::map<int, double>::const_iterator it = this->species_map.begin();
339
+ for ( ; it != species_map.end(); it++)
340
+ {
341
+ s_oss << indent2;
342
+ s_oss << it->first << " " << it->second << "\n";
343
+ }
344
+ }
345
+
346
+ // log_gamma_map
347
+ if (log_gamma_map.size() > 0)
348
+ {
349
+ s_oss << indent1;
350
+ s_oss << "-log_gamma_map" << "\n";
351
+ std::map<int, double>::const_iterator it = this->log_gamma_map.begin();
352
+ for ( ; it != log_gamma_map.end(); it++)
353
+ {
354
+ s_oss << indent2;
355
+ s_oss << it->first << " " << it->second << "\n";
356
+ }
357
+ }
358
+
359
+ // log_molalities_map
360
+ if (log_molalities_map.size() > 0)
361
+ {
362
+ s_oss << indent1;
363
+ s_oss << "-log_molalities_map" << "\n";
364
+ std::map<int, double>::const_iterator it = this->log_molalities_map.begin();
365
+ for (; it != log_molalities_map.end(); it++)
366
+ {
367
+ s_oss << indent2;
368
+ s_oss << it->first << " " << it->second << "\n";
369
+ }
370
+ }
371
+ return;
372
+ }
373
+
374
+ #ifdef USE_REVISED_READ_RAW
375
+ void
376
+ cxxSolution::read_raw(CParser & parser, bool check)
377
+ {
378
+
379
+ // Used if it is modify
380
+ cxxNameDouble original_totals = this->totals;
381
+ cxxNameDouble original_activities(this->master_activity);
382
+
383
+ this->master_activity.clear();
384
+
385
+ std::istream::pos_type ptr;
386
+ std::istream::pos_type next_char;
387
+ std::string token;
388
+ int opt_save;
389
+
390
+ // Read solution number and description
391
+ this->read_number_description(parser.line());
392
+ this->Set_new_def(false);
393
+
394
+ opt_save = CParser::OPT_ERROR;
395
+ bool tc_defined(false);
396
+ bool ph_defined(false);
397
+ bool pe_defined(false);
398
+ bool mu_defined(false);
399
+ bool ah2o_defined(false);
400
+ bool total_h_defined(false);
401
+ bool total_o_defined(false);
402
+ bool cb_defined(false);
403
+ bool mass_water_defined(false);
404
+ bool total_alkalinity_defined(false);
405
+
406
+ for (;;)
407
+ {
408
+ int opt = parser.get_option(vopts, next_char);
409
+ if (opt == CParser::OPT_DEFAULT)
410
+ {
411
+ opt = opt_save;
412
+ }
413
+
414
+ switch (opt)
415
+ {
416
+ case CParser::OPT_EOF:
417
+ break;
418
+ case CParser::OPT_KEYWORD:
419
+ break;
420
+ case CParser::OPT_DEFAULT:
421
+ case CParser::OPT_ERROR:
422
+ opt = CParser::OPT_EOF;
423
+ parser.error_msg("Unknown input in SOLUTION_RAW keyword.",
424
+ PHRQ_io::OT_CONTINUE);
425
+ parser.error_msg(parser.line().c_str(), PHRQ_io::OT_CONTINUE);
426
+ continue;
427
+
428
+ case 0: // totals
429
+ {
430
+ cxxNameDouble temp_totals;
431
+ if (temp_totals.read_raw(parser, next_char) != CParser::PARSER_OK)
432
+ {
433
+ parser.incr_input_error();
434
+ parser.
435
+ error_msg("Expected element name and moles for totals.",
436
+ PHRQ_io::OT_CONTINUE);
437
+ }
438
+ else
439
+ {
440
+ this->totals.merge_redox(temp_totals);
441
+ }
442
+ }
443
+ opt_save = 0;
444
+ break;
445
+
446
+ case 1: // activities
447
+ if (this->master_activity.read_raw(parser, next_char) !=
448
+ CParser::PARSER_OK)
449
+ {
450
+ parser.incr_input_error();
451
+ parser.
452
+ error_msg
453
+ ("Expected species name and log activity for activities.",
454
+ PHRQ_io::OT_CONTINUE);
455
+ }
456
+ opt_save = 1;
457
+ break;
458
+
459
+ case 2: // gammas
460
+ if (this->species_gamma.read_raw(parser, next_char) !=
461
+ CParser::PARSER_OK)
462
+ {
463
+ parser.incr_input_error();
464
+ parser.
465
+ error_msg
466
+ ("Expected species name and activity coefficient for gammas.",
467
+ PHRQ_io::OT_CONTINUE);
468
+ }
469
+ opt_save = 2;
470
+ break;
471
+
472
+ case 3: // isotope
473
+ {
474
+ std::string name;
475
+ if (!(parser.get_iss() >> name))
476
+ {
477
+ parser.incr_input_error();
478
+ parser.error_msg("Expected character value for isotope name.",
479
+ PHRQ_io::OT_CONTINUE);
480
+ }
481
+ else
482
+ {
483
+ cxxSolutionIsotope iso(this->Get_io());
484
+ iso.Set_isotope_name(name.c_str());
485
+ iso.read_raw(parser, check);
486
+ this->isotopes[name] = iso;
487
+ }
488
+ }
489
+ opt_save = CParser::OPT_DEFAULT;
490
+ break;
491
+
492
+ case 4: // temp
493
+ case 5: // tc_avoid_conflict_with_technetium
494
+ case 6: // temperature
495
+ if (!(parser.get_iss() >> this->tc))
496
+ {
497
+ this->tc = 25.0;
498
+ parser.incr_input_error();
499
+ parser.error_msg("Expected numeric value for temperature.",
500
+ PHRQ_io::OT_CONTINUE);
501
+ }
502
+ tc_defined = true;
503
+ opt_save = CParser::OPT_DEFAULT;
504
+ break;
505
+
506
+ case 7: // ph
507
+ if (!(parser.get_iss() >> this->ph))
508
+ {
509
+ this->ph = 7.0;
510
+ parser.incr_input_error();
511
+ parser.error_msg("Expected numeric value for pH.",
512
+ PHRQ_io::OT_CONTINUE);
513
+ }
514
+ ph_defined = true;
515
+ opt_save = CParser::OPT_DEFAULT;
516
+ break;
517
+
518
+ case 8: // pe
519
+ if (!(parser.get_iss() >> this->pe))
520
+ {
521
+ this->pe = 4.0;
522
+ parser.incr_input_error();
523
+ parser.error_msg("Expected numeric value for pe.",
524
+ PHRQ_io::OT_CONTINUE);
525
+ }
526
+ pe_defined = true;
527
+ opt_save = CParser::OPT_DEFAULT;
528
+ break;
529
+
530
+ case 9: // mu
531
+ case 10: // ionic_strength
532
+ if (!(parser.get_iss() >> this->mu))
533
+ {
534
+ this->mu = 1e-7;
535
+ parser.incr_input_error();
536
+ parser.error_msg("Expected numeric value for ionic strength.",
537
+ PHRQ_io::OT_CONTINUE);
538
+ }
539
+ mu_defined = true;
540
+ opt_save = CParser::OPT_DEFAULT;
541
+ break;
542
+
543
+ case 11: // ah2o
544
+ case 12: // activity_water
545
+ if (!(parser.get_iss() >> this->ah2o))
546
+ {
547
+ this->ah2o = 1.0;
548
+ parser.incr_input_error();
549
+ parser.
550
+ error_msg("Expected numeric value for activity of water.",
551
+ PHRQ_io::OT_CONTINUE);
552
+ }
553
+ ah2o_defined = true;
554
+ opt_save = CParser::OPT_DEFAULT;
555
+ break;
556
+
557
+ case 13: // total_h
558
+ if (!(parser.get_iss() >> this->total_h))
559
+ {
560
+ this->total_h = 111.1;
561
+ parser.incr_input_error();
562
+ parser.error_msg("Expected numeric value for total hydrogen.",
563
+ PHRQ_io::OT_CONTINUE);
564
+ }
565
+ total_h_defined = true;
566
+ opt_save = CParser::OPT_DEFAULT;
567
+ break;
568
+
569
+ case 14: // total_o
570
+ if (!(parser.get_iss() >> this->total_o))
571
+ {
572
+ this->total_o = 55.55;
573
+ parser.incr_input_error();
574
+ parser.error_msg("Expected numeric value for total oxygen.",
575
+ PHRQ_io::OT_CONTINUE);
576
+ }
577
+ total_o_defined = true;
578
+ opt_save = CParser::OPT_DEFAULT;
579
+ break;
580
+
581
+ case 15: // mass_water
582
+ case 16: // mass_h2o
583
+ if (!(parser.get_iss() >> this->mass_water))
584
+ {
585
+ this->mass_water = 1.0;
586
+ parser.incr_input_error();
587
+ parser.error_msg("Expected numeric value for mass of water.",
588
+ PHRQ_io::OT_CONTINUE);
589
+ }
590
+ mass_water_defined = true;
591
+ opt_save = CParser::OPT_DEFAULT;
592
+ break;
593
+
594
+ case 17: // total_alkalinity
595
+ case 18: // total_alk
596
+ if (!(parser.get_iss() >> this->total_alkalinity))
597
+ {
598
+ this->total_alkalinity = 0;
599
+ parser.incr_input_error();
600
+ parser.
601
+ error_msg("Expected numeric value for total_alkalinity.",
602
+ PHRQ_io::OT_CONTINUE);
603
+ }
604
+ total_alkalinity_defined = true;
605
+ opt_save = CParser::OPT_DEFAULT;
606
+ break;
607
+
608
+ case 19: // cb
609
+ case 20: // charge_balance
610
+ if (!(parser.get_iss() >> this->cb))
611
+ {
612
+ this->cb = 0;
613
+ parser.incr_input_error();
614
+ parser.error_msg("Expected numeric value for charge balance.",
615
+ PHRQ_io::OT_CONTINUE);
616
+ }
617
+ cb_defined = true;
618
+ opt_save = CParser::OPT_DEFAULT;
619
+ break;
620
+ case 21: // density
621
+ if (!(parser.get_iss() >> this->density))
622
+ {
623
+ this->density = 1.0;
624
+ parser.incr_input_error();
625
+ parser.error_msg("Expected numeric value for density.",
626
+ PHRQ_io::OT_CONTINUE);
627
+ }
628
+ opt_save = CParser::OPT_DEFAULT;
629
+ break;
630
+ }
631
+
632
+ if (opt == CParser::OPT_EOF || opt == CParser::OPT_KEYWORD)
633
+ break;
634
+ }
635
+ if (check)
636
+ {
637
+ // all members must be defined
638
+ if (tc_defined == false)
639
+ {
640
+ parser.incr_input_error();
641
+ parser.error_msg("Temp not defined for SOLUTION_RAW input.",
642
+ PHRQ_io::OT_CONTINUE);
643
+ }
644
+ if (ph_defined == false)
645
+ {
646
+ parser.incr_input_error();
647
+ parser.error_msg("pH not defined for SOLUTION_RAW input.",
648
+ PHRQ_io::OT_CONTINUE);
649
+ }
650
+ if (pe_defined == false)
651
+ {
652
+ parser.incr_input_error();
653
+ parser.error_msg("pe not defined for SOLUTION_RAW input.",
654
+ PHRQ_io::OT_CONTINUE);
655
+ }
656
+ if (mu_defined == false)
657
+ {
658
+ parser.incr_input_error();
659
+ parser.error_msg("Ionic strength not defined for SOLUTION_RAW input.",
660
+ PHRQ_io::OT_CONTINUE);
661
+ }
662
+ if (ah2o_defined == false)
663
+ {
664
+ parser.incr_input_error();
665
+ parser.
666
+ error_msg("Activity of water not defined for SOLUTION_RAW input.",
667
+ PHRQ_io::OT_CONTINUE);
668
+ }
669
+ if (total_h_defined == false)
670
+ {
671
+ parser.incr_input_error();
672
+ parser.error_msg("Total hydrogen not defined for SOLUTION_RAW input.",
673
+ PHRQ_io::OT_CONTINUE);
674
+ }
675
+ if (total_o_defined == false)
676
+ {
677
+ parser.incr_input_error();
678
+ parser.error_msg("Total oxygen not defined for SOLUTION_RAW input.",
679
+ PHRQ_io::OT_CONTINUE);
680
+ }
681
+ if (cb_defined == false)
682
+ {
683
+ parser.incr_input_error();
684
+ parser.error_msg("Charge balance not defined for SOLUTION_RAW input.",
685
+ PHRQ_io::OT_CONTINUE);
686
+ }
687
+ if (mass_water_defined == false)
688
+ {
689
+ parser.incr_input_error();
690
+ parser.error_msg("Temp not defined for SOLUTION_RAW input.",
691
+ PHRQ_io::OT_CONTINUE);
692
+ }
693
+ if (total_alkalinity_defined == false)
694
+ {
695
+ parser.incr_input_error();
696
+ parser.
697
+ error_msg("Total alkalinity not defined for SOLUTION_RAW input.",
698
+ PHRQ_io::OT_CONTINUE);
699
+ }
700
+ }
701
+
702
+ // Update activities
703
+
704
+ if (original_activities.size() > 0)
705
+ {
706
+ cxxNameDouble new_activities = this->master_activity;
707
+ this->master_activity = original_activities;
708
+ this->Update_activities(original_totals);
709
+ cxxNameDouble::iterator it = new_activities.begin();
710
+ for ( ; it != new_activities.end(); it++)
711
+ {
712
+ this->master_activity[it->first] = it->second;
713
+ }
714
+ }
715
+ return;
716
+ }
717
+ #endif
718
+ void
719
+ cxxSolution::read_raw(CParser & parser, bool check)
720
+ {
721
+
722
+ // Used if it is modify
723
+ cxxNameDouble simple_original_totals = this->totals.Simplify_redox();
724
+ cxxNameDouble original_activities(this->master_activity);
725
+
726
+ this->master_activity.clear();
727
+
728
+ std::istream::pos_type ptr;
729
+ std::istream::pos_type next_char;
730
+ std::string token;
731
+ int opt_save;
732
+
733
+ // Read solution number and description
734
+ this->read_number_description(parser.line());
735
+
736
+ opt_save = CParser::OPT_ERROR;
737
+ bool tc_defined(false);
738
+ bool ph_defined(false);
739
+ bool pe_defined(false);
740
+ bool mu_defined(false);
741
+ bool ah2o_defined(false);
742
+ bool total_h_defined(false);
743
+ bool total_o_defined(false);
744
+ bool cb_defined(false);
745
+ bool mass_water_defined(false);
746
+ bool total_alkalinity_defined(false);
747
+
748
+ for (;;)
749
+ {
750
+ int opt = parser.get_option(vopts, next_char);
751
+ if (opt == CParser::OPT_DEFAULT)
752
+ {
753
+ opt = opt_save;
754
+ }
755
+
756
+ switch (opt)
757
+ {
758
+ case CParser::OPT_EOF:
759
+ break;
760
+ case CParser::OPT_KEYWORD:
761
+ break;
762
+ case CParser::OPT_DEFAULT:
763
+ case CParser::OPT_ERROR:
764
+ opt = CParser::OPT_EOF;
765
+ parser.error_msg("Unknown input in SOLUTION_RAW keyword.",
766
+ PHRQ_io::OT_CONTINUE);
767
+ parser.error_msg(parser.line().c_str(), PHRQ_io::OT_CONTINUE);
768
+ continue;
769
+
770
+ case 0: // totals
771
+ {
772
+ cxxNameDouble temp_totals;
773
+ if (temp_totals.read_raw(parser, next_char) != CParser::PARSER_OK)
774
+ {
775
+ parser.incr_input_error();
776
+ parser.
777
+ error_msg("Expected element name and moles for totals.",
778
+ PHRQ_io::OT_CONTINUE);
779
+ }
780
+ else
781
+ {
782
+ this->totals.merge_redox(temp_totals);
783
+ }
784
+ }
785
+ opt_save = 0;
786
+ break;
787
+
788
+ case 1: // activities
789
+ if (this->master_activity.read_raw(parser, next_char) !=
790
+ CParser::PARSER_OK)
791
+ {
792
+ parser.incr_input_error();
793
+ parser.
794
+ error_msg
795
+ ("Expected species name and log activity for activities.",
796
+ PHRQ_io::OT_CONTINUE);
797
+ }
798
+ opt_save = 1;
799
+ break;
800
+
801
+ case 2: // gammas
802
+ if (this->species_gamma.read_raw(parser, next_char) !=
803
+ CParser::PARSER_OK)
804
+ {
805
+ parser.incr_input_error();
806
+ parser.
807
+ error_msg
808
+ ("Expected species name and activity coefficient for gammas.",
809
+ PHRQ_io::OT_CONTINUE);
810
+ }
811
+ opt_save = 2;
812
+ break;
813
+
814
+ case 3: // isotope
815
+ {
816
+ std::string name;
817
+ if (!(parser.get_iss() >> name))
818
+ {
819
+ parser.incr_input_error();
820
+ parser.error_msg("Expected character value for isotope name.",
821
+ PHRQ_io::OT_CONTINUE);
822
+ }
823
+ else
824
+ {
825
+ cxxSolutionIsotope iso(this->Get_io());
826
+ iso.Set_isotope_name(name.c_str());
827
+ iso.read_raw(parser, check);
828
+ this->isotopes[name] = iso;
829
+ }
830
+ }
831
+ opt_save = CParser::OPT_DEFAULT;
832
+ break;
833
+
834
+ case 4: // temp
835
+ case 5: // tc_avoid_conflict_with_technetium
836
+ case 6: // temperature
837
+ if (!(parser.get_iss() >> this->tc))
838
+ {
839
+ this->tc = 25.0;
840
+ parser.incr_input_error();
841
+ parser.error_msg("Expected numeric value for temperature.",
842
+ PHRQ_io::OT_CONTINUE);
843
+ }
844
+ tc_defined = true;
845
+ opt_save = CParser::OPT_DEFAULT;
846
+ break;
847
+
848
+ case 7: // ph
849
+ if (!(parser.get_iss() >> this->ph))
850
+ {
851
+ this->ph = 7.0;
852
+ parser.incr_input_error();
853
+ parser.error_msg("Expected numeric value for pH.",
854
+ PHRQ_io::OT_CONTINUE);
855
+ }
856
+ ph_defined = true;
857
+ opt_save = CParser::OPT_DEFAULT;
858
+ break;
859
+
860
+ case 8: // pe
861
+ if (!(parser.get_iss() >> this->pe))
862
+ {
863
+ this->pe = 4.0;
864
+ parser.incr_input_error();
865
+ parser.error_msg("Expected numeric value for pe.",
866
+ PHRQ_io::OT_CONTINUE);
867
+ }
868
+ pe_defined = true;
869
+ opt_save = CParser::OPT_DEFAULT;
870
+ break;
871
+
872
+ case 9: // mu
873
+ case 10: // ionic_strength
874
+ if (!(parser.get_iss() >> this->mu))
875
+ {
876
+ this->mu = 1e-7;
877
+ parser.incr_input_error();
878
+ parser.error_msg("Expected numeric value for ionic strength.",
879
+ PHRQ_io::OT_CONTINUE);
880
+ }
881
+ mu_defined = true;
882
+ opt_save = CParser::OPT_DEFAULT;
883
+ break;
884
+
885
+ case 11: // ah2o
886
+ case 12: // activity_water
887
+ if (!(parser.get_iss() >> this->ah2o))
888
+ {
889
+ this->ah2o = 1.0;
890
+ parser.incr_input_error();
891
+ parser.
892
+ error_msg("Expected numeric value for activity of water.",
893
+ PHRQ_io::OT_CONTINUE);
894
+ }
895
+ ah2o_defined = true;
896
+ opt_save = CParser::OPT_DEFAULT;
897
+ break;
898
+
899
+ case 13: // total_h
900
+ if (!(parser.get_iss() >> this->total_h))
901
+ {
902
+ this->total_h = 111.1;
903
+ parser.incr_input_error();
904
+ parser.error_msg("Expected numeric value for total hydrogen.",
905
+ PHRQ_io::OT_CONTINUE);
906
+ }
907
+ total_h_defined = true;
908
+ opt_save = CParser::OPT_DEFAULT;
909
+ break;
910
+
911
+ case 14: // total_o
912
+ if (!(parser.get_iss() >> this->total_o))
913
+ {
914
+ this->total_o = 55.55;
915
+ parser.incr_input_error();
916
+ parser.error_msg("Expected numeric value for total oxygen.",
917
+ PHRQ_io::OT_CONTINUE);
918
+ }
919
+ total_o_defined = true;
920
+ opt_save = CParser::OPT_DEFAULT;
921
+ break;
922
+
923
+ case 15: // mass_water
924
+ case 16: // mass_h2o
925
+ if (!(parser.get_iss() >> this->mass_water))
926
+ {
927
+ this->mass_water = 1.0;
928
+ parser.incr_input_error();
929
+ parser.error_msg("Expected numeric value for mass of water.",
930
+ PHRQ_io::OT_CONTINUE);
931
+ }
932
+ mass_water_defined = true;
933
+ opt_save = CParser::OPT_DEFAULT;
934
+ break;
935
+
936
+ case 17: // total_alkalinity
937
+ case 18: // total_alk
938
+ if (!(parser.get_iss() >> this->total_alkalinity))
939
+ {
940
+ this->total_alkalinity = 0;
941
+ parser.incr_input_error();
942
+ parser.
943
+ error_msg("Expected numeric value for total_alkalinity.",
944
+ PHRQ_io::OT_CONTINUE);
945
+ }
946
+ total_alkalinity_defined = true;
947
+ opt_save = CParser::OPT_DEFAULT;
948
+ break;
949
+
950
+ case 19: // cb
951
+ case 20: // charge_balance
952
+ if (!(parser.get_iss() >> this->cb))
953
+ {
954
+ this->cb = 0;
955
+ parser.incr_input_error();
956
+ parser.error_msg("Expected numeric value for charge balance.",
957
+ PHRQ_io::OT_CONTINUE);
958
+ }
959
+ cb_defined = true;
960
+ opt_save = CParser::OPT_DEFAULT;
961
+ break;
962
+ case 21: // density
963
+ if (!(parser.get_iss() >> this->density))
964
+ {
965
+ this->density = 1.0;
966
+ parser.incr_input_error();
967
+ parser.error_msg("Expected numeric value for density.",
968
+ PHRQ_io::OT_CONTINUE);
969
+ }
970
+ opt_save = CParser::OPT_DEFAULT;
971
+ break;
972
+ case 22: // pressure
973
+ if (!(parser.get_iss() >> this->patm))
974
+ {
975
+ this->patm = 1.0;
976
+ parser.incr_input_error();
977
+ parser.error_msg("Expected numeric value for pressure.",
978
+ PHRQ_io::OT_CONTINUE);
979
+ }
980
+ opt_save = CParser::OPT_DEFAULT;
981
+ break;
982
+
983
+ case 23: // soln_vol
984
+ if (!(parser.get_iss() >> this->soln_vol))
985
+ {
986
+ this->soln_vol = 1.0;
987
+ parser.incr_input_error();
988
+ parser.error_msg("Expected numeric value for solution volume.",
989
+ PHRQ_io::OT_CONTINUE);
990
+ }
991
+ opt_save = CParser::OPT_DEFAULT;
992
+ break;
993
+
994
+ case 24: // species_map
995
+ {
996
+ int s_num;
997
+ if (parser.peek_token() != CParser::TT_EMPTY)
998
+ {
999
+ if (!(parser.get_iss() >> s_num))
1000
+ {
1001
+ parser.incr_input_error();
1002
+ parser.error_msg("Expected integer for species number.",
1003
+ PHRQ_io::OT_CONTINUE);
1004
+ }
1005
+ else
1006
+ {
1007
+ double d;
1008
+ if (!(parser.get_iss() >> d))
1009
+ {
1010
+ parser.incr_input_error();
1011
+ parser.error_msg("Expected double for species concentration.",
1012
+ PHRQ_io::OT_CONTINUE);
1013
+ }
1014
+ this->species_map[s_num] = d;
1015
+ }
1016
+ }
1017
+ opt_save = 24;
1018
+ }
1019
+ break;
1020
+ case 25: // log_gamma_map
1021
+ {
1022
+ int s_num;
1023
+ if (parser.peek_token() != CParser::TT_EMPTY)
1024
+ {
1025
+ if (!(parser.get_iss() >> s_num))
1026
+ {
1027
+ parser.incr_input_error();
1028
+ parser.error_msg("Expected integer for species number.",
1029
+ PHRQ_io::OT_CONTINUE);
1030
+ }
1031
+ else
1032
+ {
1033
+ double d;
1034
+ if (!(parser.get_iss() >> d))
1035
+ {
1036
+ parser.incr_input_error();
1037
+ parser.error_msg("Expected double for species concentration.",
1038
+ PHRQ_io::OT_CONTINUE);
1039
+ }
1040
+ this->log_gamma_map[s_num] = d;
1041
+ }
1042
+ }
1043
+ opt_save = 25;
1044
+ }
1045
+ break;
1046
+
1047
+ case 26: // potential
1048
+ if (!(parser.get_iss() >> this->potV))
1049
+ {
1050
+ this->potV = 0.0;
1051
+ parser.incr_input_error();
1052
+ parser.error_msg("Expected numeric value for potential (V).",
1053
+ PHRQ_io::OT_CONTINUE);
1054
+ }
1055
+ opt_save = CParser::OPT_DEFAULT;
1056
+ break;
1057
+ case 27: // log_molalities_map
1058
+ {
1059
+ int s_num;
1060
+ if (parser.peek_token() != CParser::TT_EMPTY)
1061
+ {
1062
+ if (!(parser.get_iss() >> s_num))
1063
+ {
1064
+ parser.incr_input_error();
1065
+ parser.error_msg("Expected integer for species number.",
1066
+ PHRQ_io::OT_CONTINUE);
1067
+ }
1068
+ else
1069
+ {
1070
+ double d;
1071
+ if (!(parser.get_iss() >> d))
1072
+ {
1073
+ parser.incr_input_error();
1074
+ parser.error_msg("Expected double for species molality.",
1075
+ PHRQ_io::OT_CONTINUE);
1076
+ }
1077
+ this->log_molalities_map[s_num] = d;
1078
+ }
1079
+ }
1080
+ opt_save = 27;
1081
+ }
1082
+ break;
1083
+ case 28: // viscosity
1084
+ if (!(parser.get_iss() >> this->viscosity))
1085
+ {
1086
+ this->viscosity = 1.0;
1087
+ parser.incr_input_error();
1088
+ parser.error_msg("Expected numeric value for viscosity.",
1089
+ PHRQ_io::OT_CONTINUE);
1090
+ }
1091
+ opt_save = CParser::OPT_DEFAULT;
1092
+ break;
1093
+ case 29: // viscos_0
1094
+ if (!(parser.get_iss() >> this->viscos_0))
1095
+ {
1096
+ this->viscos_0 = 1.0;
1097
+ parser.incr_input_error();
1098
+ parser.error_msg("Expected numeric value for viscos_0.",
1099
+ PHRQ_io::OT_CONTINUE);
1100
+ }
1101
+ opt_save = CParser::OPT_DEFAULT;
1102
+ break;
1103
+ }
1104
+ if (opt == CParser::OPT_EOF || opt == CParser::OPT_KEYWORD)
1105
+ break;
1106
+ }
1107
+ if (check)
1108
+ {
1109
+ // all members must be defined
1110
+ if (tc_defined == false)
1111
+ {
1112
+ parser.incr_input_error();
1113
+ parser.error_msg("Temp not defined for SOLUTION_RAW input.",
1114
+ PHRQ_io::OT_CONTINUE);
1115
+ }
1116
+ if (ph_defined == false)
1117
+ {
1118
+ parser.incr_input_error();
1119
+ parser.error_msg("pH not defined for SOLUTION_RAW input.",
1120
+ PHRQ_io::OT_CONTINUE);
1121
+ }
1122
+ if (pe_defined == false)
1123
+ {
1124
+ parser.incr_input_error();
1125
+ parser.error_msg("pe not defined for SOLUTION_RAW input.",
1126
+ PHRQ_io::OT_CONTINUE);
1127
+ }
1128
+ if (mu_defined == false)
1129
+ {
1130
+ parser.incr_input_error();
1131
+ parser.error_msg("Ionic strength not defined for SOLUTION_RAW input.",
1132
+ PHRQ_io::OT_CONTINUE);
1133
+ }
1134
+ if (ah2o_defined == false)
1135
+ {
1136
+ parser.incr_input_error();
1137
+ parser.
1138
+ error_msg("Activity of water not defined for SOLUTION_RAW input.",
1139
+ PHRQ_io::OT_CONTINUE);
1140
+ }
1141
+ if (total_h_defined == false)
1142
+ {
1143
+ parser.incr_input_error();
1144
+ parser.error_msg("Total hydrogen not defined for SOLUTION_RAW input.",
1145
+ PHRQ_io::OT_CONTINUE);
1146
+ }
1147
+ if (total_o_defined == false)
1148
+ {
1149
+ parser.incr_input_error();
1150
+ parser.error_msg("Total oxygen not defined for SOLUTION_RAW input.",
1151
+ PHRQ_io::OT_CONTINUE);
1152
+ }
1153
+ if (cb_defined == false)
1154
+ {
1155
+ parser.incr_input_error();
1156
+ parser.error_msg("Charge balance not defined for SOLUTION_RAW input.",
1157
+ PHRQ_io::OT_CONTINUE);
1158
+ }
1159
+ if (mass_water_defined == false)
1160
+ {
1161
+ parser.incr_input_error();
1162
+ parser.error_msg("Temp not defined for SOLUTION_RAW input.",
1163
+ PHRQ_io::OT_CONTINUE);
1164
+ }
1165
+ if (total_alkalinity_defined == false)
1166
+ {
1167
+ parser.incr_input_error();
1168
+ parser.
1169
+ error_msg("Total alkalinity not defined for SOLUTION_RAW input.",
1170
+ PHRQ_io::OT_CONTINUE);
1171
+ }
1172
+ }
1173
+
1174
+ // Update activities
1175
+ if (original_activities.size() > 0)
1176
+ {
1177
+
1178
+ cxxNameDouble simple_this_totals = this->totals.Simplify_redox();
1179
+ cxxNameDouble::iterator it = simple_original_totals.begin();
1180
+ for ( ; it != simple_original_totals.end(); it++)
1181
+ {
1182
+ cxxNameDouble::iterator jit = simple_this_totals.find(it->first);
1183
+ if (jit != simple_this_totals.end())
1184
+ {
1185
+ if (it->second > 0 && jit->second > 0.0)
1186
+ {
1187
+ LDBLE f = jit->second / it->second;
1188
+ if (f != 1)
1189
+ {
1190
+ original_activities.Multiply_activities_redox(it->first, f);
1191
+ }
1192
+ }
1193
+ }
1194
+ }
1195
+ original_activities.merge_redox(this->master_activity);
1196
+ this->master_activity = original_activities;
1197
+ }
1198
+
1199
+ return;
1200
+ }
1201
+
1202
+ void
1203
+ cxxSolution::Update(LDBLE h_tot, LDBLE o_tot, LDBLE charge, const cxxNameDouble &const_nd)
1204
+ {
1205
+ // H, O, charge, totals, and activities of solution are updated
1206
+ this->total_h = h_tot;
1207
+ this->total_o = o_tot;
1208
+ this->cb = charge;
1209
+ this->mass_water = o_tot / 55.5;
1210
+
1211
+ // Don`t bother to update activities?
1212
+ this->Update(const_nd);
1213
+ //this->totals = const_nd;
1214
+ cxxNameDouble::iterator it;
1215
+ for (it = this->totals.begin(); it != this->totals.end(); it++)
1216
+ {
1217
+ if (it->second < 1e-25)
1218
+ {
1219
+ it->second = 0.0;
1220
+ }
1221
+ }
1222
+ }
1223
+ void
1224
+ cxxSolution::Update_activities(const cxxNameDouble &original_tot)
1225
+ {
1226
+ // Totals and activities of solution are updated
1227
+ // nd does not have H, O, charge
1228
+ cxxNameDouble simple_original = original_tot.Simplify_redox();
1229
+ // totals after read
1230
+ cxxNameDouble simple_new = this->totals.Simplify_redox();
1231
+
1232
+ // make factors
1233
+ cxxNameDouble factors;
1234
+ {
1235
+ cxxNameDouble::iterator it = simple_new.begin();
1236
+ cxxNameDouble::iterator jit = simple_original.begin();
1237
+ while (it != simple_new.end() && jit != simple_original.end())
1238
+ {
1239
+ int j = strcmp(it->first.c_str(), jit->first.c_str());
1240
+ if (j < 0)
1241
+ {
1242
+ it++;
1243
+ }
1244
+ else if (j == 0)
1245
+ {
1246
+ if (jit->second != it->second)
1247
+ {
1248
+ if (it->second > 0 && jit->second > 0)
1249
+ {
1250
+ factors[it->first] = log10(jit->second / it->second);
1251
+ }
1252
+ }
1253
+ it++;
1254
+ jit++;
1255
+ }
1256
+ else
1257
+ {
1258
+ jit++;
1259
+ }
1260
+ }
1261
+
1262
+
1263
+ // simple_new now has factors for master activities
1264
+ // Now add factors to activities
1265
+ {
1266
+ cxxNameDouble::iterator activity_it = this->master_activity.begin();
1267
+ cxxNameDouble::iterator factors_it = factors.begin();
1268
+ std::string activity_ename;
1269
+ std::basic_string < char >::size_type indexCh;
1270
+ while (activity_it != master_activity.end() && factors_it != factors.end())
1271
+ {
1272
+ activity_ename = activity_it->first;
1273
+ if (activity_ename.size() > 3)
1274
+ {
1275
+ indexCh = activity_ename.find("(");
1276
+ if (indexCh != std::string::npos)
1277
+ {
1278
+ activity_ename = activity_ename.substr(0, indexCh);
1279
+ }
1280
+ }
1281
+ int j = strcmp(factors_it->first.c_str(), activity_ename.c_str());
1282
+ if (j < 0)
1283
+ {
1284
+ factors_it++;
1285
+ }
1286
+ else if (j == 0)
1287
+ {
1288
+ activity_it->second += factors_it->second;
1289
+ activity_it++;
1290
+ }
1291
+ else
1292
+ {
1293
+ activity_it++;
1294
+ }
1295
+ }
1296
+ }
1297
+ }
1298
+ }
1299
+ void
1300
+ cxxSolution::Update(const cxxNameDouble &const_nd)
1301
+ {
1302
+ // const_nd is a list of new totals, assumed to be inclusive of all elements
1303
+ // Totals and activities of solution are updated
1304
+ // nd does not have H, O, charge
1305
+ cxxNameDouble simple_original = this->totals.Simplify_redox();
1306
+ cxxNameDouble simple_new = const_nd.Simplify_redox();
1307
+
1308
+ cxxNameDouble factors;
1309
+ {
1310
+ // make factors
1311
+ cxxNameDouble::iterator it = simple_new.begin();
1312
+ cxxNameDouble::iterator jit = simple_original.begin();
1313
+ while (it != simple_new.end() && jit != simple_original.end())
1314
+ {
1315
+ int j = strcmp(it->first.c_str(), jit->first.c_str());
1316
+ if (j < 0)
1317
+ {
1318
+ it++;
1319
+ }
1320
+ else if (j == 0)
1321
+ {
1322
+ if (jit->second != it->second)
1323
+ {
1324
+ if (it->second > 0 && jit->second > 0)
1325
+ {
1326
+ factors[it->first] = log10(it->second / jit->second);
1327
+ }
1328
+ }
1329
+ it++;
1330
+ jit++;
1331
+ }
1332
+ else
1333
+ {
1334
+ jit++;
1335
+ }
1336
+ }
1337
+ // simple_new now has factors for master activities
1338
+ // Now add log factors to log activities
1339
+ {
1340
+ cxxNameDouble::iterator activity_it = this->master_activity.begin();
1341
+ cxxNameDouble::iterator factors_it = factors.begin();
1342
+ std::string activity_ename;
1343
+ std::basic_string < char >::size_type indexCh;
1344
+ while (activity_it != master_activity.end() && factors_it != factors.end())
1345
+ {
1346
+ activity_ename = activity_it->first;
1347
+ if (factors_it->first[0] < activity_ename[0])
1348
+ {
1349
+ factors_it++;
1350
+ continue;
1351
+ }
1352
+ else if (factors_it->first[0] > activity_ename[0])
1353
+ {
1354
+ activity_it++;
1355
+ continue;
1356
+ }
1357
+ if (activity_ename.size() > 3)
1358
+ {
1359
+ indexCh = activity_ename.find("(");
1360
+ if (indexCh != std::string::npos)
1361
+ {
1362
+ activity_ename = activity_ename.substr(0, indexCh);
1363
+ }
1364
+ }
1365
+ int j = strcmp(factors_it->first.c_str(), activity_ename.c_str());
1366
+ if (j < 0)
1367
+ {
1368
+ factors_it++;
1369
+ }
1370
+ else if (j == 0)
1371
+ {
1372
+ activity_it->second += factors_it->second;
1373
+ activity_it++;
1374
+ }
1375
+ else
1376
+ {
1377
+ activity_it++;
1378
+ }
1379
+ }
1380
+ }
1381
+ }
1382
+
1383
+ // update totals
1384
+ this->totals = simple_new;
1385
+ }
1386
+ void
1387
+ cxxSolution::zero()
1388
+ {
1389
+ this->tc = 0.0;
1390
+ this->ph = 0.0;
1391
+ this->pe = 0.0;
1392
+ this->mu = 0.0;
1393
+ this->ah2o = 0.0;
1394
+ this->total_h = 0.0;
1395
+ this->total_o = 0.0;
1396
+ this->cb = 0.0;
1397
+ this->density = 1.0;
1398
+ this->viscosity = 1.0;
1399
+ this->viscos_0 = 1.0;
1400
+ this->mass_water = 0.0;
1401
+ this->soln_vol = 0.0;
1402
+ this->total_alkalinity = 0.0;
1403
+ this->totals.type = cxxNameDouble::ND_ELT_MOLES;
1404
+ this->master_activity.type = cxxNameDouble::ND_SPECIES_LA;
1405
+ this->species_gamma.type = cxxNameDouble::ND_SPECIES_GAMMA;
1406
+ this->patm = 1.0;
1407
+ this->potV = 0.0;
1408
+ this->initial_data = NULL;
1409
+ }
1410
+
1411
+ void
1412
+ cxxSolution::add(const cxxSolution & addee, LDBLE extensive)
1413
+ //
1414
+ // Add existing solution to "this" solution
1415
+ //
1416
+ {
1417
+ if (extensive == 0.0)
1418
+ return;
1419
+ LDBLE ext1 = this->mass_water;
1420
+ LDBLE ext2 = addee.mass_water * extensive;
1421
+ LDBLE f1 = ext1 / (ext1 + ext2);
1422
+ LDBLE f2 = ext2 / (ext1 + ext2);
1423
+ this->tc = f1 * this->tc + f2 * addee.tc;
1424
+ this->ph = f1 * this->ph + f2 * addee.ph;
1425
+ this->pe = f1 * this->pe + f2 * addee.pe;
1426
+ this->mu = f1 * this->mu + f2 * addee.mu;
1427
+ this->ah2o = f1 * this->ah2o + f2 * addee.ah2o;
1428
+ this->total_h += addee.total_h * extensive;
1429
+ this->total_o += addee.total_o * extensive;
1430
+ this->cb += addee.cb * extensive;
1431
+ this->density = f1 * this->density + f2 * addee.density;
1432
+ this->viscosity = f1 * this->viscosity + f2 * addee.viscosity;
1433
+ this->viscos_0 = f1 * this->viscos_0 + f2 * addee.viscos_0;
1434
+ this->patm = f1 * this->patm + f2 * addee.patm;
1435
+ // this->potV = f1 * this->potV + f2 * addee.potV; // appt
1436
+ this->mass_water += addee.mass_water * extensive;
1437
+ this->soln_vol += addee.soln_vol * extensive;
1438
+ this->total_alkalinity += addee.total_alkalinity * extensive;
1439
+ this->totals.add_extensive(addee.totals, extensive);
1440
+ this->master_activity.add_log_activities(addee.master_activity, f1, f2);
1441
+ this->species_gamma.add_intensive(addee.species_gamma, f1, f2);
1442
+ this->Add_isotopes(addee.isotopes, f2, extensive);
1443
+ {
1444
+ // Add species
1445
+ std::map<int, double>::const_iterator it = addee.species_map.begin();
1446
+ for ( ; it != addee.species_map.end(); it++)
1447
+ {
1448
+ if (this->species_map.find(it->first) != this->species_map.end())
1449
+ {
1450
+ this->species_map[it->first] = this->species_map[it->first] * f1 + it->second * f2;
1451
+ }
1452
+ else
1453
+ {
1454
+ this->species_map[it->first] = it->second;
1455
+ }
1456
+ }
1457
+ // Add gammas
1458
+ std::map<int, double>::const_iterator git = addee.log_gamma_map.begin();
1459
+ for ( ; git != addee.log_gamma_map.end(); git++)
1460
+ {
1461
+ if (this->log_gamma_map.find(git->first) != this->log_gamma_map.end())
1462
+ {
1463
+ this->log_gamma_map[git->first] = this->log_gamma_map[git->first] * f1 + git->second * f2;
1464
+ }
1465
+ else
1466
+ {
1467
+ this->log_gamma_map[git->first] = git->second;
1468
+ }
1469
+ }
1470
+ // Add molalities
1471
+ std::map<int, double>::const_iterator mit = addee.log_molalities_map.begin();
1472
+ for (; mit != addee.log_molalities_map.end(); mit++)
1473
+ {
1474
+ if (this->log_molalities_map.find(mit->first) != this->log_molalities_map.end())
1475
+ {
1476
+ this->log_molalities_map[mit->first] = this->log_molalities_map[mit->first] * f1 + mit->second * f2;
1477
+ }
1478
+ else
1479
+ {
1480
+ this->log_molalities_map[mit->first] = mit->second;
1481
+ }
1482
+ }
1483
+ }
1484
+ }
1485
+
1486
+ void
1487
+ cxxSolution::multiply(LDBLE extensive)
1488
+ //
1489
+ // Multiply existing solution by extensive
1490
+ //
1491
+ {
1492
+ if (extensive == 0.0 || extensive == 1.0)
1493
+ return;
1494
+ this->total_h *= extensive;
1495
+ this->total_o *= extensive;
1496
+ this->cb *= extensive;
1497
+ this->mass_water *= extensive;
1498
+ this->soln_vol *= extensive;
1499
+ this->total_alkalinity *= extensive;
1500
+ this->totals.multiply(extensive);
1501
+ this->Multiply_isotopes(extensive);
1502
+ }
1503
+
1504
+ LDBLE
1505
+ cxxSolution::Get_total(const char *string) const
1506
+ {
1507
+ cxxNameDouble::const_iterator it = this->totals.find(string);
1508
+ if (it == this->totals.end())
1509
+ {
1510
+ return (0.0);
1511
+ }
1512
+ else
1513
+ {
1514
+ return (it->second);
1515
+ }
1516
+ }
1517
+
1518
+ void
1519
+ cxxSolution::Set_total(char *string, LDBLE d)
1520
+ {
1521
+ this->totals[string] = d;
1522
+ }
1523
+
1524
+ LDBLE
1525
+ cxxSolution::Get_master_activity(char *string) const
1526
+ {
1527
+ cxxNameDouble::const_iterator it = this->master_activity.find(string);
1528
+ if (it == this->master_activity.end())
1529
+ {
1530
+ return (0.0);
1531
+ }
1532
+ else
1533
+ {
1534
+ return (it->second);
1535
+ }
1536
+ }
1537
+
1538
+ void
1539
+ cxxSolution::Set_master_activity(char *string, LDBLE d)
1540
+ {
1541
+ this->master_activity[string] = d;
1542
+ }
1543
+ void
1544
+ cxxSolution::Add_isotopes(const std::map < std::string, cxxSolutionIsotope > & old, LDBLE intensive, LDBLE extensive)
1545
+ {
1546
+ for (std::map < std::string, cxxSolutionIsotope >::const_iterator itold = old.begin(); itold != old.end(); ++itold)
1547
+ {
1548
+ std::map < std::string, cxxSolutionIsotope >::iterator it_this;
1549
+ it_this = this->isotopes.find(itold->first);
1550
+ if (it_this != this->isotopes.end())
1551
+ {
1552
+ LDBLE t = it_this->second.Get_total();
1553
+ t += itold->second.Get_total() * extensive;
1554
+ it_this->second.Set_total(t);
1555
+
1556
+ t = it_this->second.Get_ratio();
1557
+ t += itold->second.Get_ratio() * intensive;
1558
+ it_this->second.Set_ratio(t);
1559
+
1560
+ t = it_this->second.Get_ratio_uncertainty();
1561
+ t += itold->second.Get_ratio_uncertainty() * intensive;
1562
+ it_this->second.Set_ratio_uncertainty(t);
1563
+ it_this->second.Set_ratio_uncertainty_defined(it_this->second.Get_ratio_uncertainty_defined()
1564
+ || itold->second.Get_ratio_uncertainty_defined());
1565
+ }
1566
+ else
1567
+ {
1568
+ cxxSolutionIsotope iso(itold->second);
1569
+ iso.Set_total(itold->second.Get_total() * extensive);
1570
+ this->Get_isotopes()[iso.Get_isotope_name()] = iso;
1571
+ }
1572
+ }
1573
+ }
1574
+ void
1575
+ cxxSolution::Multiply_isotopes(LDBLE extensive)
1576
+ {
1577
+ std::map < std::string, cxxSolutionIsotope>::iterator it;
1578
+ for (it = this->isotopes.begin(); it != this->isotopes.end(); it++)
1579
+ {
1580
+ LDBLE total = it->second.Get_total();
1581
+ total *= extensive;
1582
+ it->second.Set_total(total);
1583
+ }
1584
+ }
1585
+
1586
+ /* ---------------------------------------------------------------------- */
1587
+ void
1588
+ cxxSolution::Serialize(Dictionary & dictionary, std::vector < int >&ints,
1589
+ std::vector < double >&doubles)
1590
+ /* ---------------------------------------------------------------------- */
1591
+ {
1592
+ /*
1593
+ * Make list of list of ints and doubles from solution structure
1594
+ * This list is not the complete structure, but only enough
1595
+ * for batch-reaction, advection, and transport calculations
1596
+ */
1597
+ ints.push_back(this->n_user);
1598
+ ints.push_back(this->new_def ? 1 : 0);
1599
+ doubles.push_back(this->patm);
1600
+ doubles.push_back(this->potV);
1601
+ doubles.push_back(this->tc);
1602
+ doubles.push_back(this->ph);
1603
+ doubles.push_back(this->pe);
1604
+ doubles.push_back(this->mu);
1605
+ doubles.push_back(this->ah2o);
1606
+ doubles.push_back(this->total_h);
1607
+ doubles.push_back(this->total_o);
1608
+ doubles.push_back(this->cb);
1609
+ doubles.push_back(this->mass_water);
1610
+ doubles.push_back(this->density);
1611
+ doubles.push_back(this->viscosity);
1612
+ doubles.push_back(this->soln_vol);
1613
+ doubles.push_back(this->total_alkalinity);
1614
+ /*
1615
+ * struct conc *totals;
1616
+ */
1617
+ this->totals.Serialize(dictionary, ints, doubles);
1618
+ /*
1619
+ * struct master_activity *master_activity;
1620
+ */
1621
+ this->master_activity.Serialize(dictionary, ints, doubles);
1622
+ /*
1623
+ * struct master_activity *species_gamma
1624
+ */
1625
+ this->species_gamma.Serialize(dictionary, ints, doubles);
1626
+ /*
1627
+ * isotopes
1628
+ */
1629
+ ints.push_back((int) isotopes.size());
1630
+ {
1631
+ std::map < std::string, cxxSolutionIsotope >::iterator it;
1632
+ for (it = isotopes.begin(); it != isotopes.end(); it++)
1633
+ {
1634
+ ints.push_back(dictionary.Find(it->first));
1635
+ it->second.Serialize(dictionary, ints, doubles);
1636
+ }
1637
+ }
1638
+ /*
1639
+ * species_map
1640
+ */
1641
+ ints.push_back((int) species_map.size());
1642
+ {
1643
+ std::map < int, double >::iterator it;
1644
+ for (it = species_map.begin(); it != species_map.end(); it++)
1645
+ {
1646
+ ints.push_back(it->first);
1647
+ doubles.push_back(it->second);
1648
+ }
1649
+ }
1650
+ /*
1651
+ * log_gamma_map
1652
+ */
1653
+ ints.push_back((int) log_gamma_map.size());
1654
+ {
1655
+ std::map < int, double >::iterator it;
1656
+ for (it = log_gamma_map.begin(); it != log_gamma_map.end(); it++)
1657
+ {
1658
+ ints.push_back(it->first);
1659
+ doubles.push_back(it->second);
1660
+ }
1661
+ }
1662
+ /*
1663
+ * log_molalities_map
1664
+ */
1665
+ ints.push_back((int)log_molalities_map.size());
1666
+ {
1667
+ std::map < int, double >::iterator it;
1668
+ for (it = log_molalities_map.begin(); it != log_molalities_map.end(); it++)
1669
+ {
1670
+ ints.push_back(it->first);
1671
+ doubles.push_back(it->second);
1672
+ }
1673
+ }
1674
+ }
1675
+
1676
+ /* ---------------------------------------------------------------------- */
1677
+ void
1678
+ cxxSolution::Deserialize(Dictionary & dictionary, std::vector < int >&ints, std::vector < double >&doubles, int &ii, int &dd)
1679
+ /* ---------------------------------------------------------------------- */
1680
+ {
1681
+ this->n_user = ints[ii++];
1682
+ this->n_user_end = this->n_user;
1683
+ this->description = " ";
1684
+
1685
+ this->new_def = (ints[ii++] != 0);
1686
+ this->patm = doubles[dd++];
1687
+ this->potV = doubles[dd++];
1688
+ this->tc = doubles[dd++];
1689
+ this->ph = doubles[dd++];
1690
+ this->pe = doubles[dd++];
1691
+ this->mu = doubles[dd++];
1692
+ this->ah2o = doubles[dd++];
1693
+ this->total_h = doubles[dd++];
1694
+ this->total_o = doubles[dd++];
1695
+ this->cb = doubles[dd++];
1696
+ this->mass_water = doubles[dd++];
1697
+ this->density = doubles[dd++];
1698
+ this->viscosity = doubles[dd++];
1699
+ this->soln_vol = doubles[dd++];
1700
+ this->total_alkalinity = doubles[dd++];
1701
+ /*
1702
+ * struct conc *totals;
1703
+ */
1704
+ this->totals.Deserialize(dictionary, ints, doubles, ii, dd);
1705
+ /*
1706
+ * struct master_activity *master_activity;
1707
+ */
1708
+ this->master_activity.Deserialize(dictionary, ints, doubles, ii, dd);
1709
+ /*
1710
+ * struct master_activity *species_gamma;
1711
+ */
1712
+ this->species_gamma.Deserialize(dictionary, ints, doubles, ii, dd);
1713
+ /*
1714
+ * isotopes
1715
+ */
1716
+ {
1717
+ isotopes.clear();
1718
+ int n = ints[ii++];
1719
+ for (int i = 0; i < n; i++)
1720
+ {
1721
+ std::string str = dictionary.GetWords()[ints[ii++]];
1722
+ cxxSolutionIsotope iso;
1723
+ iso.Deserialize(dictionary, ints, doubles, ii, dd);
1724
+ isotopes[str] = iso;
1725
+ }
1726
+ }
1727
+ /*
1728
+ * species_map
1729
+ */
1730
+ {
1731
+ species_map.clear();
1732
+ int n = ints[ii++];
1733
+ for (int i = 0; i < n; i++)
1734
+ {
1735
+ species_map[ints[ii++]] = doubles[dd++];
1736
+ }
1737
+ }
1738
+ /*
1739
+ * log_gamma_map
1740
+ */
1741
+ {
1742
+ log_gamma_map.clear();
1743
+ int n = ints[ii++];
1744
+ for (int i = 0; i < n; i++)
1745
+ {
1746
+ log_gamma_map[ints[ii++]] = doubles[dd++];
1747
+ }
1748
+ }
1749
+ /*
1750
+ * log_molalities_map
1751
+ */
1752
+ {
1753
+ log_molalities_map.clear();
1754
+ int n = ints[ii++];
1755
+ for (int i = 0; i < n; i++)
1756
+ {
1757
+ log_molalities_map[ints[ii++]] = doubles[dd++];
1758
+ }
1759
+ }
1760
+ }
1761
+
1762
+
1763
+ const std::vector< std::string >::value_type temp_vopts[] = {
1764
+ std::vector< std::string >::value_type("totals"), // 0
1765
+ std::vector< std::string >::value_type("activities"), // 1
1766
+ std::vector< std::string >::value_type("gammas"), // 2
1767
+ std::vector< std::string >::value_type("isotopes"), // 3
1768
+ std::vector< std::string >::value_type("temp"), // 4
1769
+ std::vector< std::string >::value_type("tc_avoid_conflict_with_technetium"), // 5
1770
+ std::vector< std::string >::value_type("temperature"), // 6
1771
+ std::vector< std::string >::value_type("ph"), // 7
1772
+ std::vector< std::string >::value_type("pe"), // 8
1773
+ std::vector< std::string >::value_type("mu"), // 9
1774
+ std::vector< std::string >::value_type("ionic_strength"), // 10
1775
+ std::vector< std::string >::value_type("ah2o"), // 11
1776
+ std::vector< std::string >::value_type("activity_water"), // 12
1777
+ std::vector< std::string >::value_type("total_h"), // 13
1778
+ std::vector< std::string >::value_type("total_o"), // 14
1779
+ std::vector< std::string >::value_type("mass_water"), // 15
1780
+ std::vector< std::string >::value_type("mass_h2o"), // 16
1781
+ std::vector< std::string >::value_type("total_alkalinity"), // 17
1782
+ std::vector< std::string >::value_type("total_alk"), // 18
1783
+ std::vector< std::string >::value_type("cb"), // 19
1784
+ std::vector< std::string >::value_type("charge_balance"), // 20
1785
+ std::vector< std::string >::value_type("density"), // 21
1786
+ std::vector< std::string >::value_type("pressure"), // 22
1787
+ std::vector< std::string >::value_type("soln_vol"), // 23
1788
+ std::vector< std::string >::value_type("species_map"), // 24
1789
+ std::vector< std::string >::value_type("log_gamma_map"), // 25
1790
+ std::vector< std::string >::value_type("potential"), // 26
1791
+ std::vector< std::string >::value_type("log_molalities_map"), // 27
1792
+ std::vector< std::string >::value_type("viscosity"), // 28
1793
+ std::vector< std::string >::value_type("viscos_0") // 29
1794
+ };
1795
+ const std::vector< std::string > cxxSolution::vopts(temp_vopts, temp_vopts + sizeof temp_vopts / sizeof temp_vopts[0]);