pyEQL 1.4.0rc9__cp310-cp310-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. pyEQL/__init__.py +50 -0
  2. pyEQL/_phreeqc.cpython-310-darwin.so +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/CMakeFiles/CTestScript.cmake +167 -0
  46. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/CSelectedOutput.cpp.o +0 -0
  47. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/IPhreeqc.cpp.o +0 -0
  48. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/IPhreeqcLib.cpp.o +0 -0
  49. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/IPhreeqc_interface_F.cpp.o +0 -0
  50. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/Var.c.o +0 -0
  51. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Dictionary.cpp.o +0 -0
  52. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ExchComp.cxx.o +0 -0
  53. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Exchange.cxx.o +0 -0
  54. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/GasComp.cxx.o +0 -0
  55. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/GasPhase.cxx.o +0 -0
  56. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ISolution.cxx.o +0 -0
  57. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ISolutionComp.cxx.o +0 -0
  58. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/KineticsComp.cxx.o +0 -0
  59. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/NameDouble.cxx.o +0 -0
  60. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/NumKeyword.cxx.o +0 -0
  61. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PBasic.cpp.o +0 -0
  62. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PHRQ_io_output.cpp.o +0 -0
  63. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PPassemblage.cxx.o +0 -0
  64. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PPassemblageComp.cxx.o +0 -0
  65. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Phreeqc.cpp.o +0 -0
  66. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/PhreeqcKeywords/Keywords.cpp.o +0 -0
  67. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Pressure.cxx.o +0 -0
  68. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Reaction.cxx.o +0 -0
  69. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/ReadClass.cxx.o +0 -0
  70. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SS.cxx.o +0 -0
  71. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SSassemblage.cxx.o +0 -0
  72. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SScomp.cxx.o +0 -0
  73. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SelectedOutput.cpp.o +0 -0
  74. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Serializer.cxx.o +0 -0
  75. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Solution.cxx.o +0 -0
  76. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SolutionIsotope.cxx.o +0 -0
  77. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/StorageBin.cxx.o +0 -0
  78. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/StorageBinList.cpp.o +0 -0
  79. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Surface.cxx.o +0 -0
  80. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SurfaceCharge.cxx.o +0 -0
  81. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/SurfaceComp.cxx.o +0 -0
  82. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/System.cxx.o +0 -0
  83. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Temperature.cxx.o +0 -0
  84. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/Use.cpp.o +0 -0
  85. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/UserPunch.cpp.o +0 -0
  86. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/advection.cpp.o +0 -0
  87. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/basicsubs.cpp.o +0 -0
  88. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cl1.cpp.o +0 -0
  89. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/PHRQ_base.cxx.o +0 -0
  90. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/PHRQ_io.cpp.o +0 -0
  91. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/Parser.cxx.o +0 -0
  92. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/common/Utils.cxx.o +0 -0
  93. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cvdense.cpp.o +0 -0
  94. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cvode.cpp.o +0 -0
  95. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cxxKinetics.cxx.o +0 -0
  96. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/cxxMix.cxx.o +0 -0
  97. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/dense.cpp.o +0 -0
  98. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/dumper.cpp.o +0 -0
  99. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/gases.cpp.o +0 -0
  100. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/input.cpp.o +0 -0
  101. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/integrate.cpp.o +0 -0
  102. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/inverse.cpp.o +0 -0
  103. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/isotopes.cpp.o +0 -0
  104. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/kinetics.cpp.o +0 -0
  105. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/mainsubs.cpp.o +0 -0
  106. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/model.cpp.o +0 -0
  107. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/nvector.cpp.o +0 -0
  108. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/nvector_serial.cpp.o +0 -0
  109. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/parse.cpp.o +0 -0
  110. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/phqalloc.cpp.o +0 -0
  111. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/pitzer.cpp.o +0 -0
  112. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/pitzer_structures.cpp.o +0 -0
  113. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/prep.cpp.o +0 -0
  114. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/print.cpp.o +0 -0
  115. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/read.cpp.o +0 -0
  116. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/readtr.cpp.o +0 -0
  117. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/runner.cpp.o +0 -0
  118. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/sit.cpp.o +0 -0
  119. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/smalldense.cpp.o +0 -0
  120. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/spread.cpp.o +0 -0
  121. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/step.cpp.o +0 -0
  122. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/structures.cpp.o +0 -0
  123. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/sundialsmath.cpp.o +0 -0
  124. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/tally.cpp.o +0 -0
  125. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/tidy.cpp.o +0 -0
  126. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/transport.cpp.o +0 -0
  127. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CMakeFiles/IPhreeqc.dir/src/phreeqcpp/utilities.cpp.o +0 -0
  128. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/CTestTestfile.cmake +6 -0
  129. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/DartConfiguration.tcl +109 -0
  130. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/cmake_install.cmake +45 -0
  131. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/build/libIPhreeqc.a +0 -0
  132. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/ar-lib +270 -0
  133. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/compile +347 -0
  134. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/config.guess +1441 -0
  135. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/config.sub +1813 -0
  136. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/depcomp +791 -0
  137. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/install-sh +508 -0
  138. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/ltmain.sh +11156 -0
  139. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/missing +215 -0
  140. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/config/test-driver +148 -0
  141. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/configure +23867 -0
  142. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/configure.ac +136 -0
  143. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Amm.dat +1968 -0
  144. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/CMakeLists.txt +32 -0
  145. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/ColdChem.dat +267 -0
  146. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Concrete_PHR.dat +158 -0
  147. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Concrete_PZ.dat +195 -0
  148. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Kinec.v2.dat +12039 -0
  149. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Kinec_v3.dat +12159 -0
  150. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Makefile.am +28 -0
  151. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Makefile.in +530 -0
  152. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/PHREEQC_ThermoddemV1.10_15Dec2020.dat +12965 -0
  153. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/Tipping_Hurley.dat +4137 -0
  154. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/core10.dat +6824 -0
  155. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/frezchem.dat +634 -0
  156. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/iso.dat +7235 -0
  157. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/llnl.dat +19310 -0
  158. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/minteq.dat +5654 -0
  159. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/minteq.v4.dat +13212 -0
  160. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/phreeqc.dat +1972 -0
  161. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/phreeqc_rates.dat +3158 -0
  162. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/pitzer.dat +1044 -0
  163. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/sit.dat +14348 -0
  164. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/database/wateq4f.dat +4036 -0
  165. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/CMakeLists.txt +35 -0
  166. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/IPhreeqc.pdf +0 -0
  167. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Makefile.am +24 -0
  168. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Makefile.in +545 -0
  169. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/NOTICE +51 -0
  170. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Phreeqc_2_1999_manual.pdf +0 -0
  171. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/Phreeqc_3_2013_manual.pdf +0 -0
  172. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/README +428 -0
  173. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/RELEASE +7294 -0
  174. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8h.html +5096 -0
  175. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8h_source.html +389 -0
  176. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8hpp.html +83 -0
  177. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/IPhreeqc_8hpp_source.html +478 -0
  178. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/Var_8h.html +318 -0
  179. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/Var_8h_source.html +200 -0
  180. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/bc_s.png +0 -0
  181. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/bdwn.png +0 -0
  182. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqc.html +2274 -0
  183. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqc.png +0 -0
  184. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqcStop.html +69 -0
  185. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/classIPhreeqcStop.png +0 -0
  186. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/closed.png +0 -0
  187. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +68 -0
  188. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/doxygen.css +1440 -0
  189. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/doxygen.png +0 -0
  190. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/dynsections.js +97 -0
  191. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2blank.png +0 -0
  192. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2doc.png +0 -0
  193. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2folderclosed.png +0 -0
  194. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2folderopen.png +0 -0
  195. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2lastnode.png +0 -0
  196. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2link.png +0 -0
  197. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2mlastnode.png +0 -0
  198. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2mnode.png +0 -0
  199. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2node.png +0 -0
  200. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2plastnode.png +0 -0
  201. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2pnode.png +0 -0
  202. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2splitbar.png +0 -0
  203. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/ftv2vertline.png +0 -0
  204. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/index.html +58 -0
  205. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/jquery.js +31 -0
  206. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_f.png +0 -0
  207. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_g.png +0 -0
  208. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/nav_h.png +0 -0
  209. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/open.png +0 -0
  210. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/structVAR.html +143 -0
  211. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/sync_off.png +0 -0
  212. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/sync_on.png +0 -0
  213. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_a.png +0 -0
  214. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_b.png +0 -0
  215. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_h.png +0 -0
  216. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tab_s.png +0 -0
  217. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/html/tabs.css +60 -0
  218. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/doc/phreeqc3.chm +0 -0
  219. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/CMakeLists.txt +11 -0
  220. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/Makefile.am +88 -0
  221. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/Makefile.in +696 -0
  222. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/CMakeLists.txt +1 -0
  223. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/CMakeLists.txt +35 -0
  224. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/CMakeLists.txt.in +21 -0
  225. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/README.txt +44 -0
  226. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/advect.c +101 -0
  227. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/ic +17 -0
  228. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/c/advect/phreeqc.dat +1579 -0
  229. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/CMakeLists.txt +10 -0
  230. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/README.txt +3 -0
  231. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/CMakeLists.txt +9 -0
  232. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/phreeqc.dat +1582 -0
  233. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/runphreeqc.xls +0 -0
  234. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/excel/withcallback.xls +0 -0
  235. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/CMakeLists.txt +11 -0
  236. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/Gypsum.py +52 -0
  237. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/parallel_advect.py +465 -0
  238. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/phreeqc.dat +1582 -0
  239. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/pitzer.dat +790 -0
  240. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/com/python/wateq4f.dat +3846 -0
  241. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/CMakeLists.txt +1 -0
  242. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/CMakeLists.txt +35 -0
  243. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/CMakeLists.txt.in +20 -0
  244. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/README.txt +45 -0
  245. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/advect.cpp +110 -0
  246. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/ic +17 -0
  247. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/cpp/advect/phreeqc.dat +1579 -0
  248. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/CMakeLists.txt +1 -0
  249. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/CMakeLists.txt +44 -0
  250. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/CMakeLists.txt.in +24 -0
  251. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/README.txt +45 -0
  252. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/advect.F90 +102 -0
  253. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/ic +17 -0
  254. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/fortran/advect/phreeqc.dat +1579 -0
  255. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/CMakeLists.txt +26 -0
  256. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/CMakeLists.txt.in +20 -0
  257. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/README.txt +37 -0
  258. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/ex2 +26 -0
  259. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/main.cpp +20 -0
  260. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/phreeqc.dat +1837 -0
  261. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/examples/using-cmake/post-install.cmake.in +7 -0
  262. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/CMakeLists.txt +185 -0
  263. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/FileTest.cpp +171 -0
  264. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/FileTest.h +34 -0
  265. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/Makefile.am +18 -0
  266. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/Makefile.in +466 -0
  267. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestCVar.cpp +9 -0
  268. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestIPhreeqc.cpp +4901 -0
  269. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestIPhreeqcLib.cpp +4644 -0
  270. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestSelectedOutput.cpp +669 -0
  271. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/TestVar.cpp +10 -0
  272. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/conv_fail.in +11 -0
  273. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/dump +42 -0
  274. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/iso.dat +7231 -0
  275. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/kinn20140218 +349 -0
  276. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/missing_e.dat +1556 -0
  277. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/multi_punch +105 -0
  278. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/multi_punch_no_set +102 -0
  279. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/phreeqc.dat.90a6449 +1935 -0
  280. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/gtest/phreeqc.dat.old +1556 -0
  281. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/libtool.m4 +8388 -0
  282. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltoptions.m4 +437 -0
  283. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltsugar.m4 +124 -0
  284. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/ltversion.m4 +23 -0
  285. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/m4/lt~obsolete.m4 +99 -0
  286. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/resource.h +14 -0
  287. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CSelectedOutput.cpp +401 -0
  288. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CSelectedOutput.hxx +77 -0
  289. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/CVar.hxx +162 -0
  290. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Debug.h +12 -0
  291. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/ErrorReporter.hxx +70 -0
  292. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.cpp +1889 -0
  293. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.f.inc +91 -0
  294. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.f90.inc +603 -0
  295. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.h +2182 -0
  296. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc.hpp +1027 -0
  297. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcCallbacks.h +19 -0
  298. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcF.f +653 -0
  299. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqcLib.cpp +1098 -0
  300. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface.F90 +1283 -0
  301. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface_F.cpp +535 -0
  302. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/IPhreeqc_interface_F.h +162 -0
  303. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Makefile.am +210 -0
  304. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Makefile.in +1294 -0
  305. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/README.Fortran +17 -0
  306. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Var.c +84 -0
  307. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Var.h +152 -0
  308. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/Version.h +36 -0
  309. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fimpl.h +282 -0
  310. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap.cpp +646 -0
  311. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap.h +163 -0
  312. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap1.cpp +24 -0
  313. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap2.cpp +24 -0
  314. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap3.cpp +24 -0
  315. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap4.cpp +24 -0
  316. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap5.cpp +24 -0
  317. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap6.cpp +25 -0
  318. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap7.cpp +25 -0
  319. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/fwrap8.cpp +24 -0
  320. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartHandler.cpp +225 -0
  321. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartHandler.h +59 -0
  322. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartObject.cpp +1382 -0
  323. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ChartObject.h +444 -0
  324. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/CurveObject.cpp +42 -0
  325. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/CurveObject.h +79 -0
  326. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Dictionary.cpp +41 -0
  327. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Dictionary.h +28 -0
  328. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ExchComp.cxx +398 -0
  329. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ExchComp.h +117 -0
  330. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Exchange.cxx +466 -0
  331. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Exchange.h +74 -0
  332. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Form1.h +1184 -0
  333. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Form1.resX +36 -0
  334. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasComp.cxx +265 -0
  335. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasComp.h +59 -0
  336. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasPhase.cxx +659 -0
  337. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/GasPhase.h +103 -0
  338. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolution.cxx +40 -0
  339. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolution.h +53 -0
  340. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolutionComp.cxx +202 -0
  341. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ISolutionComp.h +138 -0
  342. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/KineticsComp.cxx +318 -0
  343. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/KineticsComp.h +81 -0
  344. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NA.h +1 -0
  345. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NameDouble.cxx +537 -0
  346. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NameDouble.h +66 -0
  347. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NumKeyword.cxx +190 -0
  348. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/NumKeyword.h +67 -0
  349. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PBasic.cpp +8350 -0
  350. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PBasic.h +572 -0
  351. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PHRQ_io_output.cpp +411 -0
  352. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblage.cxx +375 -0
  353. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblage.h +70 -0
  354. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblageComp.cxx +441 -0
  355. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PPassemblageComp.h +83 -0
  356. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Phreeqc.cpp +2087 -0
  357. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Phreeqc.h +2164 -0
  358. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PhreeqcKeywords/Keywords.cpp +242 -0
  359. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/PhreeqcKeywords/Keywords.h +104 -0
  360. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Pressure.cxx +417 -0
  361. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Pressure.h +43 -0
  362. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Reaction.cxx +284 -0
  363. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Reaction.h +57 -0
  364. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ReadClass.cxx +1150 -0
  365. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SS.cxx +609 -0
  366. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SS.h +128 -0
  367. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SSassemblage.cxx +317 -0
  368. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SSassemblage.h +59 -0
  369. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SScomp.cxx +297 -0
  370. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SScomp.h +66 -0
  371. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SelectedOutput.cpp +115 -0
  372. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SelectedOutput.h +209 -0
  373. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Serializer.cxx +213 -0
  374. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Serializer.h +42 -0
  375. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Solution.cxx +1795 -0
  376. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Solution.h +154 -0
  377. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SolutionIsotope.cxx +333 -0
  378. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SolutionIsotope.h +85 -0
  379. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBin.cxx +1507 -0
  380. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBin.h +141 -0
  381. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBinList.cpp +358 -0
  382. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/StorageBinList.h +81 -0
  383. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Surface.cxx +837 -0
  384. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Surface.h +108 -0
  385. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceCharge.cxx +617 -0
  386. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceCharge.h +137 -0
  387. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceComp.cxx +509 -0
  388. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/SurfaceComp.h +70 -0
  389. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/System.cxx +103 -0
  390. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/System.h +89 -0
  391. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Temperature.cxx +423 -0
  392. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Temperature.h +42 -0
  393. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Use.cpp +78 -0
  394. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/Use.h +159 -0
  395. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/UserPunch.cpp +32 -0
  396. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/UserPunch.h +39 -0
  397. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/ZedGraph.dll +0 -0
  398. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/advection.cpp +140 -0
  399. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/basicsubs.cpp +4333 -0
  400. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cl1.cpp +881 -0
  401. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_base.cxx +117 -0
  402. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_base.h +48 -0
  403. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_exports.h +20 -0
  404. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_io.cpp +914 -0
  405. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/PHRQ_io.h +207 -0
  406. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Parser.cxx +1331 -0
  407. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Parser.h +310 -0
  408. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Utils.cxx +263 -0
  409. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/Utils.h +29 -0
  410. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/common/phrqtype.h +18 -0
  411. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvdense.cpp +566 -0
  412. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvdense.h +267 -0
  413. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvode.cpp +3939 -0
  414. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cvode.h +940 -0
  415. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxKinetics.cxx +617 -0
  416. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxKinetics.h +78 -0
  417. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxMix.cxx +154 -0
  418. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/cxxMix.h +58 -0
  419. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dense.cpp +175 -0
  420. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dense.h +341 -0
  421. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dumper.cpp +277 -0
  422. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/dumper.h +60 -0
  423. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/gases.cpp +748 -0
  424. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/global_structures.h +1672 -0
  425. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/input.cpp +133 -0
  426. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/integrate.cpp +1219 -0
  427. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/inverse.cpp +5135 -0
  428. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/isotopes.cpp +1813 -0
  429. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/kinetics.cpp +3180 -0
  430. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/mainsubs.cpp +2320 -0
  431. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/model.cpp +5843 -0
  432. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector.cpp +272 -0
  433. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector.h +485 -0
  434. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector_serial.cpp +1032 -0
  435. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/nvector_serial.h +369 -0
  436. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/parse.cpp +1044 -0
  437. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/phqalloc.cpp +316 -0
  438. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/phqalloc.h +47 -0
  439. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/pitzer.cpp +2709 -0
  440. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/pitzer_structures.cpp +225 -0
  441. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/prep.cpp +6267 -0
  442. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/print.cpp +3673 -0
  443. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/read.cpp +10245 -0
  444. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/readtr.cpp +1495 -0
  445. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/runner.cpp +158 -0
  446. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/runner.h +33 -0
  447. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sit.cpp +1684 -0
  448. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/smalldense.cpp +324 -0
  449. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/smalldense.h +261 -0
  450. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/spread.cpp +1309 -0
  451. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/step.cpp +1566 -0
  452. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/structures.cpp +3381 -0
  453. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialsmath.cpp +133 -0
  454. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialsmath.h +162 -0
  455. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/sundialstypes.h +183 -0
  456. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/tally.cpp +1288 -0
  457. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/tidy.cpp +5600 -0
  458. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/transport.cpp +6403 -0
  459. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/phreeqcpp/utilities.cpp +1339 -0
  460. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/src/thread.h +64 -0
  461. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/CMakeLists.txt +133 -0
  462. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/Makefile.am +45 -0
  463. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/Makefile.in +1128 -0
  464. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/ex2.in +26 -0
  465. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main.f90 +31 -0
  466. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main77.f +6 -0
  467. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/main_fortran.cxx +8 -0
  468. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/phreeqc.dat.in +1556 -0
  469. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_c.c +148 -0
  470. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_cxx.cxx +152 -0
  471. pyEQL/phreeqc/ext/iphreeqc-3.8.6-17100/tests/test_f90.F90 +328 -0
  472. pyEQL/phreeqc/iphreeqc_wrapper.cpp +75 -0
  473. pyEQL/phreeqc/solution.py +74 -0
  474. pyEQL/phreeqc/var.py +50 -0
  475. pyEQL/presets/Ringers lactate.yaml +20 -0
  476. pyEQL/presets/__init__.py +17 -0
  477. pyEQL/presets/normal saline.yaml +17 -0
  478. pyEQL/presets/rainwater.yaml +17 -0
  479. pyEQL/presets/seawater.yaml +29 -0
  480. pyEQL/presets/urine.yaml +26 -0
  481. pyEQL/presets/wastewater.yaml +21 -0
  482. pyEQL/py.typed +0 -0
  483. pyEQL/salt_ion_match.py +112 -0
  484. pyEQL/solute.py +163 -0
  485. pyEQL/solution.py +2714 -0
  486. pyEQL/utils.py +237 -0
  487. pyeql-1.4.0rc9.dist-info/METADATA +130 -0
  488. pyeql-1.4.0rc9.dist-info/RECORD +491 -0
  489. pyeql-1.4.0rc9.dist-info/WHEEL +6 -0
  490. pyeql-1.4.0rc9.dist-info/licenses/AUTHORS.md +21 -0
  491. pyeql-1.4.0rc9.dist-info/licenses/LICENSE.txt +20 -0
@@ -0,0 +1,1495 @@
1
+ #include <iostream> /* std::cout std::cerr */
2
+ #include <sstream>
3
+ #include <fstream>
4
+ #include "Phreeqc.h"
5
+ #include "StorageBin.h"
6
+ #include "SS.h"
7
+ #ifndef boolean
8
+ typedef unsigned char boolean;
9
+ #endif
10
+ #include "phqalloc.h"
11
+ #include "Utils.h"
12
+
13
+
14
+ #define OPTION_EOF -1
15
+ #define OPTION_KEYWORD -2
16
+ #define OPTION_ERROR -3
17
+ #define OPTION_DEFAULT -4
18
+ #define OPTION_DEFAULT2 -5
19
+
20
+ #if defined(PHREEQCI_GUI)
21
+ #ifdef _DEBUG
22
+ #define new DEBUG_NEW
23
+ #undef THIS_FILE
24
+ static char THIS_FILE[] = __FILE__;
25
+ #endif
26
+ #endif
27
+
28
+ /* ---------------------------------------------------------------------- */
29
+ int Phreeqc::
30
+ read_transport(void)
31
+ /* ---------------------------------------------------------------------- */
32
+ {
33
+ /*
34
+ * Reads advection and column information
35
+ *
36
+ * Arguments:
37
+ * none
38
+ *
39
+ * Returns:
40
+ * KEYWORD if keyword encountered, input_error may be incremented if
41
+ * a keyword is encountered in an unexpected position
42
+ * EOF if eof encountered while reading mass balance concentrations
43
+ * ERROR if error occurred reading data
44
+ *
45
+ */
46
+ int i, j, l;
47
+ int count_length, count_disp, count_punch, count_print, count_por, count_same_model;
48
+ int count_length_alloc, count_disp_alloc, count_por_alloc;
49
+ char token[MAX_LENGTH];
50
+ LDBLE *length, *disp, *pors;
51
+ int *punch_temp, *print_temp, *same_model_temp;
52
+ int return_value, opt, opt_save;
53
+ const char* next_char;
54
+ //char file_name[MAX_LENGTH];
55
+ std::string file_name("phreeqc.dmp");
56
+
57
+ const char *opt_list[] = {
58
+ "cells", /* 0 */
59
+ "shifts", /* 1 */
60
+ "print", /* 2 */
61
+ "selected_output", /* 3 */
62
+ "bcond", /* 4 */
63
+ "timest", /* 5 */
64
+ "diffc", /* 6 */
65
+ "tempr", /* 7 */
66
+ "length", /* 8 */
67
+ "disp", /* 9 */
68
+ "punch", /* 10 */
69
+ "stagnant", /* 11 */
70
+ "bc", /* 12 */
71
+ "boundary_conditions", /* 13 */
72
+ "time_step", /* 14 */
73
+ "temp_retardation_factor", /* 15 */
74
+ "diffusion_coefficient", /* 16 */
75
+ "dispersivity", /* 17 */
76
+ "direction", /* 18 */
77
+ "temperature_retardation_factor", /* 19 */
78
+ "print_cells", /* 20 */
79
+ "selected_cells", /* 21 */
80
+ "flow_direction", /* 22 */
81
+ "flow", /* 23 */
82
+ "lengths", /* 24 */
83
+ "dispersivities", /* 25 */
84
+ "dump", /* 26 */
85
+ "output", /* 27 */
86
+ "output_frequency", /* 28 */
87
+ "selected_output_frequency", /* 29 */
88
+ "punch_cells", /* 30 */
89
+ "dump_frequency", /* 31 */
90
+ "dump_restart", /* 32 */
91
+ "punch_frequency", /* 33 */
92
+ "print_frequency", /* 34 */
93
+ "correct_disp", /* 35 */
94
+ "initial_time", /* 36 */
95
+ "warning", /* 37 */
96
+ "warnings", /* 38 */
97
+ "thermal_diffusion", /* 39 */
98
+ "multi_d", /* 40 */
99
+ "interlayer_d", /* 41 */
100
+ "porosities", /* 42 */
101
+ "porosity", /* 43 */
102
+ "fix_current", /* 44 */
103
+ "current", /* 45 */
104
+ "implicit", /* 46 */
105
+ "same_model" /* 47 */
106
+ };
107
+ int count_opt_list = 48;
108
+
109
+ /*
110
+ * Initialize
111
+ */
112
+ simul_tr++;
113
+ if (simul_tr == 1)
114
+ {
115
+ correct_disp = FALSE;
116
+ old_cells = 0;
117
+ max_cells = 0;
118
+ all_cells = 0;
119
+ }
120
+ else
121
+ old_cells = count_cells;
122
+ count_length = count_disp = count_punch = count_print = count_por = count_same_model = 0;
123
+
124
+ length = (LDBLE *)PHRQ_malloc(sizeof(LDBLE));
125
+ if (length == NULL)
126
+ malloc_error();
127
+
128
+ disp = (LDBLE *)PHRQ_malloc(sizeof(LDBLE));
129
+ if (disp == NULL)
130
+ malloc_error();
131
+
132
+ pors = (LDBLE *)PHRQ_malloc(sizeof(LDBLE));
133
+ if (pors == NULL)
134
+ malloc_error();
135
+
136
+ punch_temp = (int *)PHRQ_malloc(sizeof(int));
137
+ if (punch_temp == NULL)
138
+ malloc_error();
139
+
140
+ print_temp = (int *)PHRQ_malloc(sizeof(int));
141
+ if (print_temp == NULL)
142
+ malloc_error();
143
+
144
+ same_model_temp = (int *)PHRQ_malloc(sizeof(int));
145
+ if (same_model_temp == NULL)
146
+ malloc_error();
147
+
148
+ count_length_alloc = count_disp_alloc = count_por_alloc = 1;
149
+ transport_start = 1;
150
+ /*
151
+ * Set use data to last read
152
+ */
153
+ use.Set_trans_in(true);
154
+ /*
155
+ * Read lines
156
+ */
157
+ opt_save = OPTION_DEFAULT;
158
+ return_value = UNKNOWN;
159
+ for (;;)
160
+ {
161
+ opt = get_option(opt_list, count_opt_list, &next_char);
162
+ if (opt == OPTION_DEFAULT)
163
+ opt = opt_save;
164
+ switch (opt)
165
+ {
166
+ case OPTION_EOF: /* end of file */
167
+ return_value = EOF;
168
+ break;
169
+ case OPTION_KEYWORD: /* keyword */
170
+ return_value = KEYWORD;
171
+ break;
172
+ case OPTION_ERROR:
173
+ case OPTION_DEFAULT:
174
+ input_error++;
175
+ error_msg("Unknown input in TRANSPORT keyword.", CONTINUE);
176
+ error_msg(line_save, CONTINUE);
177
+ break;
178
+ case 0: /* cells */
179
+ (void)sscanf(next_char, "%d", &count_cells);
180
+ opt_save = OPTION_DEFAULT;
181
+ break;
182
+ case 1: /* shifts */
183
+ if (copy_token(token, &next_char, &l) == DIGIT)
184
+ (void)sscanf(token, "%d", &count_shifts);
185
+ else
186
+ {
187
+ warning_msg
188
+ ("Expected the number of shifts. One shift is assumed.");
189
+ count_shifts = 1;
190
+ }
191
+ j = copy_token(token, &next_char, &l);
192
+ if (j != EMPTY)
193
+ {
194
+ if (j == DIGIT)
195
+ (void)sscanf(token, "%d", &ishift);
196
+ else
197
+ {
198
+ input_error++;
199
+ error_msg
200
+ ("Expected shift direction, -1, 0, 1. Use -direction instead.",
201
+ CONTINUE);
202
+ ishift = 1;
203
+ }
204
+ }
205
+ opt_save = OPTION_DEFAULT;
206
+ break;
207
+ case 2: /* print */
208
+ case 20: /* print_cells */
209
+ print_temp =
210
+ read_list_ints_range(&next_char, &count_print, FALSE,
211
+ print_temp);
212
+ opt_save = 2;
213
+ break;
214
+ case 3: /* selected_output */
215
+ case 29: /* selected_output_frequency */
216
+ case 33: /* punch_frequency */
217
+ (void)sscanf(next_char, "%d", &punch_modulus);
218
+ opt_save = OPTION_DEFAULT;
219
+ if (punch_modulus <= 0)
220
+ {
221
+ error_string = sformatf(
222
+ "Punch frequency must be greater than 0. Frequency set to 1000.");
223
+ warning_msg(error_string);
224
+ punch_modulus = 1000;
225
+ }
226
+
227
+ break;
228
+ case 4: /* bcond */
229
+ case 12: /* bc */
230
+ case 13: /* boundary_conditions */
231
+ /* first cell boundary condition */
232
+ i = copy_token(token, &next_char, &l);
233
+ str_tolower(token);
234
+ if (i == DIGIT)
235
+ {
236
+ (void)sscanf(token, "%d", &bcon_first);
237
+ if (bcon_first < 1 || bcon_first > 3)
238
+ {
239
+ input_error++;
240
+ error_msg
241
+ ("Expected boundary condition to be 'constant' (1), 'closed' (2) , or 'flux' (3).",
242
+ CONTINUE);
243
+ }
244
+ }
245
+ else if (i == EMPTY)
246
+ bcon_first = 3;
247
+ else if (strstr(token, "co") == token)
248
+ bcon_first = 1;
249
+ else if (strstr(token, "cl") == token)
250
+ bcon_first = 2;
251
+ else if (strstr(token, "f") == token)
252
+ bcon_first = 3;
253
+ else
254
+ {
255
+ input_error++;
256
+ error_msg
257
+ ("Expected boundary condition to be 'constant', 'closed', or 'flux'.",
258
+ CONTINUE);
259
+ }
260
+
261
+ /* last cell boundary condition */
262
+ i = copy_token(token, &next_char, &l);
263
+ str_tolower(token);
264
+ if (i == DIGIT)
265
+ {
266
+ (void)sscanf(token, "%d", &bcon_last);
267
+ if (bcon_last < 1 || bcon_last > 3)
268
+ {
269
+ input_error++;
270
+ error_msg
271
+ ("Expected boundary condition to be 'constant' (1), 'closed' (2) , or 'flux' (3).",
272
+ CONTINUE);
273
+ }
274
+ }
275
+ else if (i == EMPTY)
276
+ bcon_last = 3;
277
+ else if (strstr(token, "co") == token)
278
+ bcon_last = 1;
279
+ else if (strstr(token, "cl") == token)
280
+ bcon_last = 2;
281
+ else if (strstr(token, "f") == token)
282
+ bcon_last = 3;
283
+ else
284
+ {
285
+ input_error++;
286
+ error_msg
287
+ ("Expected boundary condition to be 'constant', 'closed', or 'flux'.",
288
+ CONTINUE);
289
+ }
290
+ opt_save = OPTION_DEFAULT;
291
+ break;
292
+ case 5: /* timest */
293
+ case 14: /* time_step */
294
+ if (copy_token(token, &next_char, &l) == DIGIT)
295
+ (void)sscanf(token, SCANFORMAT, &timest);
296
+ {
297
+ std::string stdtoken;
298
+ j = copy_token(stdtoken, &next_char);
299
+ if (j == UPPER || j == LOWER)
300
+ {
301
+ timest = Utilities::convert_time(timest, stdtoken, "s");
302
+ j = copy_token(stdtoken, &next_char);
303
+ }
304
+ if (j == DIGIT)
305
+ {
306
+ (void)sscanf(stdtoken.c_str(), SCANFORMAT, &mcd_substeps);
307
+ }
308
+ }
309
+ //if (copy_token(token, &next_char, &l) == DIGIT)
310
+ // sscanf(token, SCANFORMAT, &mcd_substeps);
311
+ if (mcd_substeps < 1)
312
+ {
313
+ mcd_substeps = 1.0;
314
+ warning_msg("Substep factor in MCD must be >= 1.0\n"
315
+ "mcd_substeps = 1.0 assumed.");
316
+ }
317
+ opt_save = OPTION_DEFAULT;
318
+ break;
319
+ case 6: /* diffc */
320
+ case 16: /* diffusion_coefficient */
321
+ (void)sscanf(next_char, SCANFORMAT, &diffc);
322
+ opt_save = OPTION_DEFAULT;
323
+ break;
324
+ case 7: /* tempr */
325
+ case 15: /* temp_retardation_factor */
326
+ case 19: /* temperature_retardation_factor */
327
+ case 39: /* thermal_diffusion */
328
+ if (copy_token(token, &next_char, &l) == DIGIT)
329
+ (void)sscanf(token, SCANFORMAT, &tempr);
330
+ if (tempr < 1)
331
+ {
332
+ tempr = 1;
333
+ warning_msg
334
+ ("Temperature retardation factor < 1 is not possible.\n"
335
+ "Temperature retardation factor = 1 assumed.");
336
+ }
337
+ j = copy_token(token, &next_char, &l);
338
+ if (j == DIGIT)
339
+ (void)sscanf(token, SCANFORMAT, &heat_diffc);
340
+ opt_save = OPTION_DEFAULT;
341
+ break;
342
+ case 8: /* length */
343
+ case 24: /* lengths */
344
+ if (read_line_LDBLEs
345
+ (next_char, &length, &count_length,
346
+ &count_length_alloc) == ERROR)
347
+ {
348
+ input_error++;
349
+ error_msg("Reading lengths in TRANSPORT keyword.\n",
350
+ CONTINUE);
351
+ }
352
+ opt_save = 8;
353
+ break;
354
+ case 9: /* disp */
355
+ case 17: /* dispersivity */
356
+ case 25: /* dispersivities */
357
+ if (read_line_LDBLEs
358
+ (next_char, &disp, &count_disp, &count_disp_alloc) == ERROR)
359
+ {
360
+ input_error++;
361
+ error_msg("Reading dispersivities in TRANSPORT keyword.\n",
362
+ CONTINUE);
363
+ }
364
+ opt_save = 9;
365
+ break;
366
+ case 10: /* punch */
367
+ case 21: /* selected_cells */
368
+ case 30: /* punch_cells */
369
+ punch_temp =
370
+ read_list_ints_range(&next_char, &count_punch, FALSE,
371
+ punch_temp);
372
+ opt_save = 10;
373
+ break;
374
+ case 11: /* stagnant */
375
+ if (copy_token(token, &next_char, &l) != EMPTY)
376
+ {
377
+ /* exchange factor */
378
+ if (sscanf(token, "%d", &(stag_data.count_stag)) != 1)
379
+ {
380
+ input_error++;
381
+ error_string = sformatf(
382
+ "Expecting number of stagnant layers.");
383
+ error_msg(error_string, CONTINUE);
384
+ break;
385
+ }
386
+
387
+ /* exchange factor */
388
+ j = copy_token(token, &next_char, &l);
389
+ if (j != EMPTY)
390
+ {
391
+ if (sscanf(token, SCANFORMAT, &(stag_data.exch_f)) != 1)
392
+ {
393
+ input_error++;
394
+ error_string = sformatf(
395
+ "Expecting exchange factor for stagnant layers.");
396
+ error_msg(error_string, CONTINUE);
397
+ break;
398
+ }
399
+ copy_token(token, &next_char, &l);
400
+ if (sscanf(token, SCANFORMAT, &(stag_data.th_m)) != 1)
401
+ {
402
+ input_error++;
403
+ error_string = sformatf(
404
+ "Expecting porosity in the mobile zone.");
405
+ error_msg(error_string, CONTINUE);
406
+ break;
407
+ }
408
+ copy_token(token, &next_char, &l);
409
+ if (sscanf(token, SCANFORMAT, &(stag_data.th_im)) != 1)
410
+ {
411
+ input_error++;
412
+ error_string = sformatf(
413
+ "Expecting porosity in the immobile zone.");
414
+ error_msg(error_string, CONTINUE);
415
+ break;
416
+ }
417
+ }
418
+ }
419
+ opt_save = OPTION_DEFAULT;
420
+ break;
421
+ case 18: /* direction */
422
+ case 22: /* flow_direction */
423
+ case 23: /* flow */
424
+ copy_token(token, &next_char, &l);
425
+ str_tolower(token);
426
+ if (strstr(token, "f") == token)
427
+ ishift = 1;
428
+ else if (strstr(token, "b") == token)
429
+ ishift = -1;
430
+ else if (strstr(token, "d") == token)
431
+ ishift = 0;
432
+ else if (strstr(token, "n") == token)
433
+ ishift = 0;
434
+ else
435
+ {
436
+ input_error++;
437
+ error_msg
438
+ ("Expected flow direction to be 'forward', 'back', or 'no_flow'.",
439
+ CONTINUE);
440
+ }
441
+ opt_save = OPTION_DEFAULT;
442
+ break;
443
+ case 26: /* dump */
444
+ {
445
+ dump_in = TRUE;
446
+ std::string temp_name(next_char);
447
+ string_trim(temp_name);
448
+ if (temp_name.size() > 0)
449
+ {
450
+ file_name = temp_name;
451
+ }
452
+ opt_save = OPTION_DEFAULT;
453
+ break;
454
+ }
455
+ case 27: /* output */
456
+ case 28: /* output_frequency */
457
+ case 34: /* print_frequency */
458
+ (void)sscanf(next_char, "%d", &print_modulus);
459
+ opt_save = OPTION_DEFAULT;
460
+ if (print_modulus <= 0)
461
+ {
462
+ error_string = sformatf(
463
+ "Print frequency must be greater than 0. Frequency set to 1000.");
464
+ warning_msg(error_string);
465
+ print_modulus = 1000;
466
+ }
467
+ break;
468
+ case 31: /* dump_frequency */
469
+ dump_in = TRUE;
470
+ if (copy_token(token, &next_char, &l) == DIGIT)
471
+ (void)sscanf(token, "%d", &dump_modulus);
472
+ else
473
+ {
474
+ warning_msg("Expected integer value for dump_frequency.");
475
+ dump_modulus = 0;
476
+ }
477
+ opt_save = OPTION_DEFAULT;
478
+ break;
479
+ case 32: /* dump_restart */
480
+ dump_in = TRUE;
481
+ if (copy_token(token, &next_char, &l) == DIGIT)
482
+ (void)sscanf(token, "%d", &transport_start);
483
+ else
484
+ {
485
+ warning_msg
486
+ ("Expected shift number to start calculations, 1 will be used.");
487
+ transport_start = 1;
488
+ }
489
+ opt_save = OPTION_DEFAULT;
490
+ break;
491
+ case 35: /* correct_dispersion */
492
+ correct_disp = get_true_false(next_char, TRUE);
493
+ opt_save = OPTION_DEFAULT;
494
+ break;
495
+ case 36: /* initial_time */
496
+ if (copy_token(token, &next_char, &l) == DIGIT)
497
+ (void)sscanf(token, SCANFORMAT, &initial_total_time);
498
+ {
499
+ std::string stdtoken;
500
+ j = copy_token(stdtoken, &next_char);
501
+ if (j == UPPER || j == LOWER)
502
+ {
503
+ initial_total_time = Utilities::convert_time(initial_total_time, stdtoken, "s");
504
+ }
505
+ }
506
+ opt_save = OPTION_DEFAULT;
507
+ break;
508
+ case 37: /* warning */
509
+ case 38: /* warnings */
510
+ transport_warnings = get_true_false(next_char, TRUE);
511
+ break;
512
+ case 40: /* multicomponent diffusion */
513
+ copy_token(token, &next_char, &l);
514
+ str_tolower(token);
515
+ if (strstr(token, "f") == token)
516
+ multi_Dflag = 0;
517
+ else if (strstr(token, "t") == token)
518
+ multi_Dflag = 1;
519
+ else
520
+ {
521
+ input_error++;
522
+ error_msg
523
+ ("Expected multicomponent diffusion flag: 'true' or 'false'.",
524
+ CONTINUE);
525
+ }
526
+ default_Dw = 1e-9;
527
+ multi_Dpor = 0.3;
528
+ multi_Dpor_lim = 0.0;
529
+ multi_Dn = 1.0;
530
+ correct_Dw = 0;
531
+ if (copy_token(token, &next_char, &l) == EMPTY)
532
+ break;
533
+ else
534
+ {
535
+ /* default species diffusion coeff */
536
+ if (sscanf(token, SCANFORMAT, &default_Dw) != 1)
537
+ {
538
+ input_error++;
539
+ error_string = sformatf(
540
+ "Expected default species diffusion coefficient in water at 25oC, m2/s.");
541
+ error_msg(error_string, CONTINUE);
542
+ break;
543
+ }
544
+ }
545
+ if (copy_token(token, &next_char, &l) == EMPTY)
546
+ break;
547
+ else
548
+ {
549
+ /* porosity */
550
+ if (sscanf(token, SCANFORMAT, &multi_Dpor) != 1)
551
+ {
552
+ input_error++;
553
+ error_string = sformatf(
554
+ "Expected porosity to calculate diffusion coefficient.");
555
+ error_msg(error_string, CONTINUE);
556
+ break;
557
+ }
558
+ }
559
+ if (copy_token(token, &next_char, &l) == EMPTY)
560
+ break;
561
+ else
562
+ {
563
+ /* porosity */
564
+ if (sscanf(token, SCANFORMAT, &multi_Dpor_lim) != 1)
565
+ {
566
+ input_error++;
567
+ error_string = sformatf(
568
+ "Expected porosity limit for diffusive transport.");
569
+ error_msg(error_string, CONTINUE);
570
+ break;
571
+ }
572
+ }
573
+ if (copy_token(token, &next_char, &l) == EMPTY)
574
+ break;
575
+ else
576
+ {
577
+ if (sscanf(token, SCANFORMAT, &multi_Dn) != 1)
578
+ {
579
+ input_error++;
580
+ error_string = sformatf(
581
+ "Expected exponent for porosity reduction of diffusion coefficient (Dp = Dw * (por)^n).");
582
+ error_msg(error_string, CONTINUE);
583
+ break;
584
+ }
585
+ }
586
+ if (copy_token(token, &next_char, &l) == EMPTY)
587
+ break;
588
+ else
589
+ {
590
+ str_tolower(token);
591
+ if (strstr(token, "f") == token)
592
+ correct_Dw = 0;
593
+ else if (strstr(token, "t") == token)
594
+ correct_Dw = 1;
595
+ else
596
+ {
597
+ input_error++;
598
+ error_msg
599
+ ("Expected 'true' or 'false' for correcting Dw's as in Specific Conductance.",
600
+ CONTINUE);
601
+ }
602
+ }
603
+ opt_save = OPTION_DEFAULT;
604
+ break;
605
+ case 41: /* interlayer diffusion */
606
+ copy_token(token, &next_char, &l);
607
+ str_tolower(token);
608
+ if (strstr(token, "f") == token)
609
+ interlayer_Dflag = 0;
610
+ else if (strstr(token, "t") == token)
611
+ interlayer_Dflag = 1;
612
+ else
613
+ {
614
+ input_error++;
615
+ error_msg
616
+ ("Expected interlayer diffusion flag: 'true' or 'false'.",
617
+ CONTINUE);
618
+ }
619
+ interlayer_Dpor = 0.1;
620
+ interlayer_Dpor_lim = 0.0;
621
+ interlayer_tortf = 100.0;
622
+ if (copy_token(token, &next_char, &l) == EMPTY)
623
+ break;
624
+ else
625
+ {
626
+ /* porosity */
627
+ if (sscanf(token, SCANFORMAT, &interlayer_Dpor) != 1)
628
+ {
629
+ input_error++;
630
+ error_string = sformatf("Expected interlayer porosity.");
631
+ error_msg(error_string, CONTINUE);
632
+ break;
633
+ }
634
+ }
635
+ if (copy_token(token, &next_char, &l) == EMPTY)
636
+ break;
637
+ else
638
+ {
639
+ /* porosity limit */
640
+ if (sscanf(token, SCANFORMAT, &interlayer_Dpor_lim) != 1)
641
+ {
642
+ input_error++;
643
+ error_string = sformatf(
644
+ "Expected interlayer porosity limit for diffusive transport.");
645
+ error_msg(error_string, CONTINUE);
646
+ break;
647
+ }
648
+ }
649
+ if (copy_token(token, &next_char, &l) == EMPTY)
650
+ break;
651
+ else
652
+ {
653
+ if (sscanf(token, SCANFORMAT, &interlayer_tortf) != 1)
654
+ {
655
+ input_error++;
656
+ error_string = sformatf(
657
+ "Expected interlayer tortuosity factor (Dp = Dw /t_f).");
658
+ error_msg(error_string, CONTINUE);
659
+ break;
660
+ }
661
+ }
662
+ opt_save = OPTION_DEFAULT;
663
+ break;
664
+ case 42: /* porosities */
665
+ case 43: /* porosity */
666
+ if (read_line_LDBLEs
667
+ (next_char, &pors, &count_por,
668
+ &count_por_alloc) == ERROR)
669
+ {
670
+ input_error++;
671
+ error_msg("Reading porosities in TRANSPORT keyword.\n",
672
+ CONTINUE);
673
+ }
674
+ opt_save = 42;
675
+ break;
676
+ case 44: /* fix_current */
677
+ case 45: /* current */
678
+ if (copy_token(token, &next_char, &l) == DIGIT)
679
+ {
680
+ (void)sscanf(token, SCANFORMAT, &fix_current);
681
+ // fix_current = fabs(fix_current);
682
+ }
683
+ else
684
+ {
685
+ warning_msg("Expected the fixed value for the current (Ampere).");
686
+ fix_current = 0.0;
687
+ }
688
+ opt_save = OPTION_DEFAULT;
689
+ break;
690
+ case 46: /* implicit diffusion */
691
+ copy_token(token, &next_char, &l);
692
+ str_tolower(token);
693
+ if (strstr(token, "f") == token)
694
+ implicit = FALSE;
695
+ else if (strstr(token, "t") == token)
696
+ implicit = TRUE;
697
+ else
698
+ {
699
+ input_error++;
700
+ error_msg
701
+ ("Expected flag for implicit diffusion calc`s: 'true' or 'false'.",
702
+ CONTINUE);
703
+ }
704
+ if (copy_token(token, &next_char, &l) == DIGIT)
705
+ {
706
+ (void)sscanf(token, SCANFORMAT, &max_mixf);
707
+ }
708
+ else
709
+ {
710
+ //warning_msg("Expected the maximal value for the mixfactor (= D * Dt / Dx^2) in implicit calc`s of diffusion.");
711
+ max_mixf = 1.0;
712
+ }
713
+ min_dif_LM = -30.0;
714
+ if (copy_token(token, &next_char, &l) != EMPTY)
715
+ {
716
+ /* minimal moles for diffusion */
717
+ if (sscanf(token, SCANFORMAT, &min_dif_LM) != 1)
718
+ {
719
+ input_error++;
720
+ error_string = sformatf(
721
+ "Expected the minimal log10(molality) for including a species in multicomponent diffusion,\n taking -30.0");
722
+ warning_msg(error_string);
723
+ break;
724
+ }
725
+ }
726
+ opt_save = OPTION_DEFAULT;
727
+ break;
728
+ case 47: /* same_model */
729
+ same_model_temp =
730
+ read_list_ints_range(&next_char, &count_same_model, FALSE,
731
+ same_model_temp);
732
+ opt_save = 47;
733
+ break;
734
+ }
735
+ if (return_value == EOF || return_value == KEYWORD)
736
+ break;
737
+ }
738
+ /*
739
+ * Determine number of cells
740
+ */
741
+ max_cells = count_cells;
742
+ if (count_length > max_cells)
743
+ max_cells = count_length;
744
+ if (count_disp > max_cells)
745
+ max_cells = count_disp;
746
+ if (count_por > max_cells * (1 + stag_data.count_stag))
747
+ max_cells = (int)ceil(((double)count_por / (1 + (double)stag_data.count_stag)));
748
+ if (max_cells > count_cells)
749
+ {
750
+ if (max_cells == count_length)
751
+ {
752
+ snprintf(token, sizeof(token),
753
+ "Number of cells is increased to number of 'lengths' %d.",
754
+ count_length);
755
+ warning_msg(token);
756
+ }
757
+ else if (max_cells == count_disp)
758
+ {
759
+ snprintf(token, sizeof(token),
760
+ "Number of cells is increased to number of dispersivities %d.",
761
+ count_disp);
762
+ warning_msg(token);
763
+ }
764
+ else
765
+ {
766
+ snprintf(token, sizeof(token),
767
+ "Number of mobile cells is increased to (ceil)(number of porosities) / (1 + number of stagnant zones) = %d.",
768
+ (int) ceil(((double)count_por / (1 + (double)stag_data.count_stag))));
769
+ warning_msg(token);
770
+ }
771
+ }
772
+ /*
773
+ * Allocate space for cell_data
774
+ */
775
+ int all_cells_now = max_cells * (1 + stag_data.count_stag) + 2;
776
+ cell_data.resize(all_cells_now); // new classes initialized by global_structures.h
777
+ // But first two previously allocated for Change_Surf, so may
778
+ // need to reinitialize
779
+ if (all_cells_now > all_cells)
780
+ {
781
+ for (int i = all_cells; i < all_cells_now; i++)
782
+ {
783
+ cell_data[i].length = 1.0;
784
+ cell_data[i].mid_cell_x = 1.0;
785
+ cell_data[i].disp = 1.0;
786
+ cell_data[i].temp = 25.0;
787
+ cell_data[i].por = 0.3;
788
+ cell_data[i].por_il = 0.01;
789
+ cell_data[i].potV = 0;
790
+ cell_data[i].punch = FALSE;
791
+ cell_data[i].print = FALSE;
792
+ cell_data[i].same_model = FALSE;
793
+ }
794
+ }
795
+ all_cells = all_cells_now;
796
+
797
+ /*
798
+ * Fill in data for lengths
799
+ */
800
+ if (count_length == 0)
801
+ {
802
+ if (old_cells < max_cells)
803
+ {
804
+ error_string = sformatf(
805
+ "No cell-lengths were read; length = 1 m assumed.");
806
+ warning_msg(error_string);
807
+ for (i = 1; i <= max_cells; i++)
808
+ cell_data[i].length = 1.0;
809
+ }
810
+ }
811
+ else
812
+ {
813
+ for (i = 1; i <= count_length; i++)
814
+ {
815
+ cell_data[i].length = length[i - 1];
816
+ }
817
+ if (max_cells > count_length)
818
+ {
819
+ error_string = sformatf(
820
+ "Cell-lengths were read for %d cells. Last value is used till cell %d.",
821
+ count_length, max_cells);
822
+ warning_msg(error_string);
823
+ for (size_t i = count_length; i <= max_cells; i++)
824
+ cell_data[i + 1].length = length[count_length - 1];
825
+ }
826
+ }
827
+ cell_data[0].mid_cell_x = 0;
828
+ cell_data[1].mid_cell_x = cell_data[1].length / 2;
829
+ for (i = 2; i <= max_cells; i++)
830
+ {
831
+ cell_data[i].mid_cell_x = cell_data[i - 1].mid_cell_x +
832
+ (cell_data[i - 1].length + cell_data[i].length) / 2;
833
+ }
834
+ cell_data[max_cells + 1].mid_cell_x =
835
+ cell_data[max_cells].mid_cell_x + cell_data[max_cells].length / 2;
836
+ /*
837
+ * Fill in data for dispersivities
838
+ */
839
+ if (count_disp == 0)
840
+ {
841
+ if (old_cells < max_cells)
842
+ {
843
+ error_string = sformatf(
844
+ "No dispersivities were read; disp = 0 assumed.");
845
+ warning_msg(error_string);
846
+ for (i = 1; i <= max_cells; i++)
847
+ cell_data[i].disp = 0.0;
848
+ }
849
+ }
850
+ else
851
+ {
852
+ for (i = 1; i <= count_disp; i++)
853
+ cell_data[i].disp = disp[i - 1];
854
+ if (max_cells > count_disp)
855
+ {
856
+ error_string = sformatf(
857
+ "Dispersivities were read for %d cells. Last value is used till cell %d.",
858
+ count_disp, max_cells);
859
+ warning_msg(error_string);
860
+ for (i = count_disp; i <= max_cells; i++)
861
+ cell_data[i + 1].disp = disp[count_disp - 1];
862
+ }
863
+ }
864
+ /*
865
+ * Fill in data for porosities
866
+ */
867
+ if (count_por == 0)
868
+ {
869
+ if (old_cells < all_cells && multi_Dflag /*&& simul_tr == 1*/)
870
+ {
871
+ multi_Dpor = (multi_Dpor < 1e-10 ? 1e-10 : multi_Dpor);
872
+ if (multi_Dpor > 1e-10)
873
+ error_string = sformatf(
874
+ "No porosities were read; used the value %8.2e from -multi_D.", multi_Dpor);
875
+ else
876
+ error_string = sformatf(
877
+ "No porosities were read; set to minimal value of 1e-10 for -multi_D.");
878
+ warning_msg(error_string);
879
+ if (simul_tr == 1)
880
+ j = 1;
881
+ else
882
+ j = old_cells + 1;
883
+ for (i = j; i < all_cells; i++)
884
+ cell_data[i].por = multi_Dpor;
885
+ }
886
+ }
887
+ else
888
+ {
889
+ if ((stag_data.exch_f > 0) && (stag_data.count_stag == 1))
890
+ {
891
+ error_string = sformatf(
892
+ "Mobile porosities were read, but mobile/immobile porosity was also defined in -stagnant. Using the values from -stagnant for mobile/immobile exchange and tortuosity factors.");
893
+ warning_msg(error_string);
894
+ for (i = 1; i <= max_cells; i++)
895
+ cell_data[i].por = stag_data.th_m;
896
+ for (i++; i <= 2 * max_cells + 1; i++)
897
+ cell_data[i].por = stag_data.th_im;
898
+ }
899
+ else
900
+ {
901
+ for (i = 1; i <= count_por; i++)
902
+ {
903
+ if (i == max_cells + 1)
904
+ continue;
905
+ cell_data[i].por = pors[i - 1];
906
+ }
907
+ if (all_cells - 2 > count_por)
908
+ {
909
+ int st = stag_data.count_stag ? 1 : 0;
910
+ error_string = sformatf(
911
+ "Porosities were read for %d cells. Last value is used till cell %d.",
912
+ count_por, all_cells - st);
913
+ warning_msg(error_string);
914
+ for (i = count_por; i < all_cells - st; i++)
915
+ {
916
+ //if (i == max_cells)
917
+ // continue;
918
+ //assert((i+1) < all_cells);
919
+ if ((i+1) < all_cells)
920
+ {
921
+ cell_data[i + 1].por = pors[count_por - 1];
922
+ }
923
+ }
924
+ }
925
+ }
926
+ }
927
+ if (interlayer_Dflag && !multi_Dflag)
928
+ {
929
+ input_error++;
930
+ error_string = sformatf(
931
+ "-multi_D must be defined, when -interlayer_D true.");
932
+ error_msg(error_string, CONTINUE);
933
+
934
+ }
935
+ for (i = 0; i < all_cells; i++)
936
+ {
937
+ interlayer_Dpor = (interlayer_Dpor < 1e-10 ? 1e-10 : interlayer_Dpor);
938
+ cell_data[i].por_il = interlayer_Dpor;
939
+ }
940
+ count_cells = max_cells;
941
+ /*
942
+ * Account for stagnant cells
943
+ */
944
+ if (stag_data.count_stag > 0)
945
+ {
946
+ max_cells = count_cells * (1 + stag_data.count_stag) + 2;
947
+ for (i = 1; i <= count_cells; i++)
948
+ {
949
+ for (l = 1; l <= stag_data.count_stag; l++)
950
+ cell_data[i + 1 + l * count_cells].mid_cell_x =
951
+ cell_data[i].mid_cell_x;
952
+ }
953
+ }
954
+ /*
955
+ * Fill in data for punch
956
+ */
957
+ if (count_punch != 0)
958
+ {
959
+ for (i = 0; i < all_cells; i++)
960
+ cell_data[i].punch = FALSE;
961
+ for (i = 0; i < count_punch; i++)
962
+ {
963
+ if (punch_temp[i] > all_cells - 1 || punch_temp[i] < 0)
964
+ {
965
+ error_string = sformatf(
966
+ "Cell number for punch is out of range, %d. Request ignored.",
967
+ punch_temp[i]);
968
+ warning_msg(error_string);
969
+ }
970
+ else
971
+ cell_data[punch_temp[i]].punch = TRUE;
972
+ }
973
+ }
974
+ else if (simul_tr == 1 || old_cells != count_cells)
975
+ for (i = 0; i < all_cells; i++)
976
+ cell_data[i].punch = TRUE;
977
+ /*
978
+ * Fill in data for print
979
+ */
980
+ if (count_print != 0)
981
+ {
982
+ for (i = 0; i < all_cells; i++)
983
+ cell_data[i].print = FALSE;
984
+ for (i = 0; i < count_print; i++)
985
+ {
986
+ if (print_temp[i] > all_cells - 1 || print_temp[i] < 0)
987
+ {
988
+ error_string = sformatf(
989
+ "Cell number for print is out of range, %d. Request ignored.",
990
+ print_temp[i]);
991
+ warning_msg(error_string);
992
+ }
993
+ else
994
+ cell_data[print_temp[i]].print = TRUE;
995
+ }
996
+ }
997
+ else if (simul_tr == 1 || old_cells != count_cells)
998
+ for (i = 0; i < all_cells; i++)
999
+ cell_data[i].print = TRUE;
1000
+ /*
1001
+ * Fill in data for same_model
1002
+ */
1003
+ if (count_same_model != 0)
1004
+ {
1005
+ for (i = 0; i < all_cells; i++)
1006
+ cell_data[i].same_model = FALSE;
1007
+ for (i = 0; i < count_same_model; i++)
1008
+ {
1009
+ if (same_model_temp[i] > all_cells - 1 || same_model_temp[i] < 0)
1010
+ {
1011
+ error_string = sformatf(
1012
+ "Cell number for same_model is out of range, %d. Request ignored.",
1013
+ same_model_temp[i]);
1014
+ warning_msg(error_string);
1015
+ }
1016
+ else
1017
+ cell_data[same_model_temp[i]].same_model = TRUE;
1018
+ }
1019
+ }
1020
+ else if (simul_tr == 1 || old_cells != count_cells)
1021
+ for (i = 0; i < all_cells; i++)
1022
+ cell_data[i].same_model = FALSE;
1023
+ //#define OLD_POROSITY
1024
+ #if defined(OLD_POROSITY)
1025
+ /*
1026
+ * Fill in porosities
1027
+ */
1028
+ if (interlayer_Dflag && !multi_Dflag)
1029
+ {
1030
+ input_error++;
1031
+ error_string = sformatf(
1032
+ "-multi_D must be defined, when -interlayer_D true.");
1033
+ error_msg(error_string, CONTINUE);
1034
+
1035
+ }
1036
+ for (i = 0; i < max_cells; i++)
1037
+ {
1038
+ multi_Dpor = (multi_Dpor < 1e-10 ? 1e-10 : multi_Dpor); //Fix for Jenkins !!!!!!!!!!!!
1039
+ //if (cell_data[i].por < 0)
1040
+ {
1041
+ cell_data[i].por = multi_Dpor; //Fix for Jenkins !!!!!!!!!!!!
1042
+ }
1043
+ interlayer_Dpor = (interlayer_Dpor < 1e-10 ? 1e-10 : interlayer_Dpor);
1044
+ cell_data[i].por_il = interlayer_Dpor;
1045
+ }
1046
+ #endif
1047
+ /*
1048
+ * Calculate dump_modulus
1049
+ */
1050
+ if (dump_in == TRUE)
1051
+ {
1052
+ if (dump_modulus == 0)
1053
+ {
1054
+ warning_msg
1055
+ ("Expected dump_modulus. Value of 'shifts/2' will be used.");
1056
+ dump_modulus = count_shifts / 2;
1057
+ if (dump_modulus == 0)
1058
+ dump_modulus = 1;
1059
+ }
1060
+ if (transport_start > count_shifts)
1061
+ {
1062
+ input_error++;
1063
+ error_string = sformatf(
1064
+ "Starting shift for transport, %d, is greater than number of shifts, %d.",
1065
+ transport_start, count_shifts);
1066
+ error_msg(error_string, CONTINUE);
1067
+ }
1068
+ }
1069
+ /*
1070
+ * Check boundary conditions
1071
+ */
1072
+ if ((ishift != 0) && ((bcon_first == 2) || (bcon_last == 2)))
1073
+ {
1074
+ warning_msg
1075
+ ("Boundary condition = 'closed' not possible with advective transport.\n\t Boundary condition = 'flux' assumed.");
1076
+ if (bcon_first == 2)
1077
+ bcon_first = 3;
1078
+ if (bcon_last == 2)
1079
+ bcon_last = 3;
1080
+ }
1081
+ /*
1082
+ * Retain data from previous run
1083
+ */
1084
+ if (simul_tr > 1)
1085
+ {
1086
+ if ((count_length == 0) && (count_disp == 0) && (count_por == 0))
1087
+ dup_print("Column data retained from former run", TRUE);
1088
+ }
1089
+ /*
1090
+ * Check heat_diffc
1091
+ */
1092
+ if (heat_diffc < 0)
1093
+ heat_diffc = diffc;
1094
+ else if (stag_data.count_stag == 1)
1095
+ {
1096
+ if (stag_data.exch_f > 0)
1097
+ {
1098
+ if (diffc <= 0 && heat_diffc > 0)
1099
+ {
1100
+ input_error++;
1101
+ error_string = sformatf(
1102
+ "Must enter diffusion coefficient (-diffc) when modeling thermal diffusion.");
1103
+ error_msg(error_string, CONTINUE);
1104
+ }
1105
+ else if (heat_diffc > diffc && !implicit)
1106
+ {
1107
+ error_string = sformatf(
1108
+ "Thermal diffusion is calculated assuming exchange factor was for\n\t effective (non-thermal) diffusion coefficient = %e.",
1109
+ (double)diffc);
1110
+ warning_msg(error_string);
1111
+ }
1112
+ }
1113
+ else
1114
+ {
1115
+ if (heat_diffc > diffc && !implicit)
1116
+ {
1117
+ input_error++;
1118
+ error_string = sformatf(
1119
+ "Must enter value for mobile/stagnant exchange factor when modeling thermal diffusion.");
1120
+ error_msg(error_string, CONTINUE);
1121
+ }
1122
+ }
1123
+ }
1124
+ else if (stag_data.count_stag > 1 && heat_diffc > diffc)
1125
+ {
1126
+ input_error++;
1127
+ error_string = sformatf(
1128
+ "Only one stagnant layer permitted (-stag) when modeling thermal diffusion.");
1129
+ error_msg(error_string, CONTINUE);
1130
+ }
1131
+ /*
1132
+ * free storage for length, disp, punch
1133
+ */
1134
+ length = (LDBLE *)free_check_null(length);
1135
+ disp = (LDBLE *)free_check_null(disp);
1136
+ pors = (LDBLE *)free_check_null(pors);
1137
+ punch_temp = (int *)free_check_null(punch_temp);
1138
+ print_temp = (int *)free_check_null(print_temp);
1139
+ same_model_temp = (int *)free_check_null(same_model_temp);
1140
+
1141
+ if (dump_in == TRUE)
1142
+ {
1143
+ dump_file_name_cpp.clear();
1144
+ dump_file_name_cpp.append(file_name);
1145
+ }
1146
+ return (return_value);
1147
+ }
1148
+
1149
+ /* ---------------------------------------------------------------------- */
1150
+ int Phreeqc::
1151
+ read_line_LDBLEs(const char* next_char, LDBLE ** d, int *count_d, int *count_alloc)
1152
+ /* ---------------------------------------------------------------------- */
1153
+ {
1154
+ int i, j, l, n;
1155
+ LDBLE value;
1156
+ char token[MAX_LENGTH];
1157
+
1158
+ for (;;)
1159
+ {
1160
+ j = copy_token(token, &next_char, &l);
1161
+ if (j == EMPTY)
1162
+ break;
1163
+ if (j != DIGIT)
1164
+ return (ERROR);
1165
+ if (replace("*", " ", token) == TRUE)
1166
+ {
1167
+ if (sscanf(token, "%d" SCANFORMAT, &n, &value) != 2)
1168
+ return (ERROR);
1169
+ }
1170
+ else
1171
+ {
1172
+ (void)sscanf(token, SCANFORMAT, &value);
1173
+ n = 1;
1174
+ }
1175
+ for (;;)
1176
+ {
1177
+ if ((*count_d) + n > (*count_alloc))
1178
+ {
1179
+ *count_alloc *= 2;
1180
+ *d = (LDBLE *)PHRQ_realloc(*d, (size_t)(*count_alloc) * sizeof(LDBLE));
1181
+ if (*d == NULL)
1182
+ malloc_error();
1183
+ }
1184
+ else
1185
+ break;
1186
+ }
1187
+ for (i = 0; i < n; i++)
1188
+ (*d)[(*count_d) + i] = value;
1189
+ *count_d += n;
1190
+ }
1191
+ return (OK);
1192
+ }
1193
+
1194
+ /* ---------------------------------------------------------------------- */
1195
+ int Phreeqc::
1196
+ dump_cpp(void)
1197
+ /* ---------------------------------------------------------------------- */
1198
+ {
1199
+ /*
1200
+ * dumps solution compositions to file
1201
+ */
1202
+
1203
+ int l;
1204
+
1205
+ if (dump_in == FALSE || pr.dump == FALSE)
1206
+ return (OK);
1207
+
1208
+ cxxStorageBin phreeqcBin(phrq_io);
1209
+ phreeqc2cxxStorageBin(phreeqcBin);
1210
+
1211
+ std::ofstream fs(dump_file_name_cpp.c_str());
1212
+ if (!fs.is_open())
1213
+ {
1214
+ error_string = sformatf("Can`t open file, %s.", dump_file_name_cpp.c_str());
1215
+ input_error++;
1216
+ error_msg(error_string, CONTINUE);
1217
+ return (OK);
1218
+ }
1219
+
1220
+ fs << "# Dumpfile" << "\n" << "# Transport simulation " << simul_tr << " Shift " << transport_step << "\n" << "#" << "\n";
1221
+ phreeqcBin.dump_raw(fs, 0);
1222
+ fs << "END" << "\n";
1223
+
1224
+ char token[MAX_LENGTH];
1225
+ snprintf(token, sizeof(token), "KNOBS\n");
1226
+ fs << token;
1227
+ snprintf(token, sizeof(token), "\t-iter%15d\n", itmax);
1228
+ fs << token;
1229
+ snprintf(token, sizeof(token), "\t-tol %15.3e\n", (double)ineq_tol);
1230
+ fs << token;
1231
+ snprintf(token, sizeof(token), "\t-step%15.3e\n", (double)step_size);
1232
+ fs << token;
1233
+ snprintf(token, sizeof(token), "\t-pe_s%15.3e\n", (double)pe_step_size);
1234
+ fs << token;
1235
+ snprintf(token, sizeof(token), "\t-diag ");
1236
+ fs << token;
1237
+ if (diagonal_scale == TRUE)
1238
+ {
1239
+ snprintf(token, sizeof(token), "true\n");
1240
+ fs << token;
1241
+ }
1242
+ else
1243
+ {
1244
+ snprintf(token, sizeof(token), "false\n");
1245
+ fs << token;
1246
+ }
1247
+ std::map < int, SelectedOutput >::iterator so_it = SelectedOutput_map.begin();
1248
+ for (; so_it != SelectedOutput_map.end(); so_it++)
1249
+ {
1250
+ current_selected_output = &(so_it->second);
1251
+
1252
+ snprintf(token, sizeof(token), "SELECTED_OUTPUT %d\n", current_selected_output->Get_n_user());
1253
+ fs << token;
1254
+ //snprintf(token, sizeof(token), "\t-file %-15s\n", "sel_o$$$.prn");
1255
+ //fs << token;
1256
+ fs << "\t-file " << "sel_o$$$" << current_selected_output->Get_n_user() << ".prn\n";
1257
+ //if (punch.count_totals != 0)
1258
+ if (current_selected_output->Get_totals().size() > 0)
1259
+ {
1260
+ snprintf(token, sizeof(token), "\t-tot ");
1261
+ fs << token;
1262
+ for (size_t i = 0; i < current_selected_output->Get_totals().size(); i++)
1263
+ {
1264
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_totals()[i].first.c_str());
1265
+ fs << token;
1266
+ }
1267
+ snprintf(token, sizeof(token), "\n");
1268
+ fs << token;
1269
+ }
1270
+ if (current_selected_output->Get_molalities().size() > 0)
1271
+ {
1272
+ snprintf(token, sizeof(token), "\t-mol ");
1273
+ fs << token;
1274
+ for (size_t i = 0; i < current_selected_output->Get_molalities().size(); i++)
1275
+ {
1276
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_molalities()[i].first.c_str());
1277
+ fs << token;
1278
+ }
1279
+ snprintf(token, sizeof(token), "\n");
1280
+ fs << token;
1281
+ }
1282
+ if (current_selected_output->Get_activities().size() > 0)
1283
+ {
1284
+ snprintf(token, sizeof(token), "\t-act ");
1285
+ fs << token;
1286
+ for (size_t i = 0; i < current_selected_output->Get_activities().size(); i++)
1287
+ {
1288
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_activities()[i].first.c_str());
1289
+ fs << token;
1290
+ }
1291
+ snprintf(token, sizeof(token), "\n");
1292
+ fs << token;
1293
+ }
1294
+ if (current_selected_output->Get_pure_phases().size() > 0)
1295
+ {
1296
+ snprintf(token, sizeof(token), "\t-equ ");
1297
+ fs << token;
1298
+ for (size_t i = 0; i < current_selected_output->Get_pure_phases().size(); i++)
1299
+ {
1300
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_pure_phases()[i].first.c_str());
1301
+ fs << token;
1302
+ }
1303
+ snprintf(token, sizeof(token), "\n");
1304
+ fs << token;
1305
+ }
1306
+ if (current_selected_output->Get_si().size() > 0)
1307
+ {
1308
+ snprintf(token, sizeof(token), "\t-si ");
1309
+ fs << token;
1310
+ for (size_t i = 0; i < current_selected_output->Get_si().size(); i++)
1311
+ {
1312
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_si()[i].first.c_str());
1313
+ fs << token;
1314
+ }
1315
+ snprintf(token, sizeof(token), "\n");
1316
+ fs << token;
1317
+ }
1318
+ if (current_selected_output->Get_gases().size() > 0)
1319
+ {
1320
+ snprintf(token, sizeof(token), "\t-gas ");
1321
+ fs << token;
1322
+ for (size_t i = 0; i < current_selected_output->Get_gases().size(); i++)
1323
+ {
1324
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_gases()[i].first.c_str());
1325
+ fs << token;
1326
+ }
1327
+ snprintf(token, sizeof(token), "\n");
1328
+ fs << token;
1329
+ }
1330
+ if (current_selected_output->Get_s_s().size() > 0)
1331
+ {
1332
+ snprintf(token, sizeof(token), "\t-solid_solutions ");
1333
+ fs << token;
1334
+ for (size_t i = 0; i < current_selected_output->Get_s_s().size(); i++)
1335
+ {
1336
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_s_s()[i].first.c_str());
1337
+ fs << token;
1338
+ }
1339
+ snprintf(token, sizeof(token), "\n");
1340
+ fs << token;
1341
+ }
1342
+ if (current_selected_output->Get_kinetics().size() > 0)
1343
+ {
1344
+ snprintf(token, sizeof(token), "\t-kin ");
1345
+ fs << token;
1346
+ for (size_t i = 0; i < current_selected_output->Get_kinetics().size(); i++)
1347
+ {
1348
+ snprintf(token, sizeof(token), " %s", current_selected_output->Get_kinetics()[i].first.c_str());
1349
+ fs << token;
1350
+ }
1351
+ snprintf(token, sizeof(token), "\n");
1352
+ fs << token;
1353
+ }
1354
+ }
1355
+ snprintf(token, sizeof(token), "TRANSPORT\n");
1356
+ fs << token;
1357
+ snprintf(token, sizeof(token), "\t-cells %6d\n", count_cells);
1358
+ fs << token;
1359
+ snprintf(token, sizeof(token), "\t-shifts%6d%6d\n", count_shifts, ishift);
1360
+ fs << token;
1361
+ snprintf(token, sizeof(token), "\t-output_frequency %6d\n", print_modulus);
1362
+ fs << token;
1363
+ snprintf(token, sizeof(token), "\t-selected_output_frequency %6d\n",
1364
+ punch_modulus);
1365
+ fs << token;
1366
+ snprintf(token, sizeof(token), "\t-bcon %6d%6d\n", bcon_first, bcon_last);
1367
+ fs << token;
1368
+ snprintf(token, sizeof(token), "\t-timest %13.5e\n", (double)timest);
1369
+ fs << token;
1370
+ if (!high_precision)
1371
+ {
1372
+ snprintf(token, sizeof(token), "\t-diffc %13.5e\n", (double)diffc);
1373
+ fs << token;
1374
+ }
1375
+ else
1376
+ {
1377
+ snprintf(token, sizeof(token), "\t-diffc %20.12e\n", (double)diffc);
1378
+ fs << token;
1379
+ }
1380
+ snprintf(token, sizeof(token), "\t-tempr %13.5e\n", (double)tempr);
1381
+ fs << token;
1382
+ if (correct_disp == TRUE)
1383
+ {
1384
+ snprintf(token, sizeof(token), "\t-correct_disp %s\n", "True");
1385
+ fs << token;
1386
+ }
1387
+ else
1388
+ {
1389
+ snprintf(token, sizeof(token), "\t-correct_disp %s\n", "False");
1390
+ fs << token;
1391
+ }
1392
+ snprintf(token, sizeof(token), "\t-length\n");
1393
+ fs << token;
1394
+ for (int i = 1; i <= count_cells; i++)
1395
+ {
1396
+ snprintf(token, sizeof(token), "%12.3e", (double)cell_data[i].length);
1397
+ fs << token;
1398
+ if (i > 0 && (i % 8) == 0)
1399
+ {
1400
+ snprintf(token, sizeof(token), "\n");
1401
+ fs << token;
1402
+ }
1403
+ }
1404
+ snprintf(token, sizeof(token), "\n");
1405
+ fs << token;
1406
+ snprintf(token, sizeof(token), "\t-disp\n");
1407
+ fs << token;
1408
+ for (int i = 1; i <= count_cells; i++)
1409
+ {
1410
+ if (!high_precision)
1411
+ {
1412
+ snprintf(token, sizeof(token), "%12.3e", (double)cell_data[i].disp);
1413
+ fs << token;
1414
+ }
1415
+ else
1416
+ {
1417
+ snprintf(token, sizeof(token), "%20.12e", (double)cell_data[i].disp);
1418
+ fs << token;
1419
+ }
1420
+ if (i > 0 && (i % 8) == 0)
1421
+ {
1422
+ snprintf(token, sizeof(token), "\n");
1423
+ fs << token;
1424
+ }
1425
+ }
1426
+ snprintf(token, sizeof(token), "\n");
1427
+ fs << token;
1428
+ snprintf(token, sizeof(token), "\t-punch_cells");
1429
+ fs << token;
1430
+ l = 0;
1431
+ for (int i = 0; i < all_cells; i++)
1432
+ {
1433
+ if (cell_data[i].punch != TRUE)
1434
+ continue;
1435
+ snprintf(token, sizeof(token), " %d", i);
1436
+ fs << token;
1437
+ l++;
1438
+ if ((l % 20) == 0)
1439
+ {
1440
+ snprintf(token, sizeof(token), "\n");
1441
+ fs << token;
1442
+ }
1443
+ }
1444
+ snprintf(token, sizeof(token), "\n");
1445
+ fs << token;
1446
+ snprintf(token, sizeof(token), "\t-print_cells");
1447
+ fs << token;
1448
+ l = 0;
1449
+ for (int i = 0; i < all_cells; i++)
1450
+ {
1451
+ if (cell_data[i].print != TRUE)
1452
+ continue;
1453
+ snprintf(token, sizeof(token), " %d", i);
1454
+ fs << token;
1455
+ l++;
1456
+ if ((l % 20) == 0)
1457
+ {
1458
+ snprintf(token, sizeof(token), "\n");
1459
+ fs << token;
1460
+ }
1461
+ }
1462
+ snprintf(token, sizeof(token), "\n");
1463
+ fs << token;
1464
+ snprintf(token, sizeof(token), "\t-dump $$$.dmp\n");
1465
+ fs << token;
1466
+ snprintf(token, sizeof(token), "\t-dump_frequency %d\n", dump_modulus);
1467
+ fs << token;
1468
+ snprintf(token, sizeof(token), "\t-dump_restart %d\n", transport_step + 1);
1469
+ fs << token;
1470
+
1471
+ #if defined MULTICHART
1472
+ // user graphs
1473
+ chart_handler.dump(fs, 0);
1474
+ #endif
1475
+
1476
+ snprintf(token, sizeof(token), "END\n");
1477
+ fs << token;
1478
+ return (OK);
1479
+ }
1480
+
1481
+ /* ---------------------------------------------------------------------- */
1482
+ int Phreeqc::
1483
+ dump(void)
1484
+ /* ---------------------------------------------------------------------- */
1485
+ {
1486
+ /*
1487
+ * dumps solution compositions to file
1488
+ */
1489
+ if (dump_in == FALSE || pr.dump == FALSE)
1490
+ return (OK);
1491
+
1492
+ dump_cpp();
1493
+ return OK;
1494
+
1495
+ }