burnman-cpp 0.3.0__tar.gz → 0.6.0__tar.gz

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 (438) hide show
  1. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/.github/workflows/benchmarks.yml +1 -1
  2. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/.github/workflows/tests.yml +1 -1
  3. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/.github/workflows/wheels.yml +3 -6
  4. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/CMakeLists.txt +1 -0
  5. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/PKG-INFO +2 -2
  6. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/README.md +1 -1
  7. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/README.md +10 -1
  8. burnman_cpp-0.6.0/benchmarks/stixrude_2024.py +153 -0
  9. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure13/README.md +139 -0
  10. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure13/benchmark.py +311 -0
  11. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure13/overlay.py +211 -0
  12. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure13/reference/axis_registration.json +55 -0
  13. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure13/reference/figure13.svg +9956 -0
  14. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure13/reference/prem_depth_pressure.txt +60 -0
  15. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure14/README.md +177 -0
  16. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure14/benchmark.py +352 -0
  17. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure14/geotherm.py +239 -0
  18. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure14/overlay.py +282 -0
  19. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure14/reference/axis_registration.json +41 -0
  20. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure14/reference/expansivity.jpg +0 -0
  21. burnman_cpp-0.6.0/benchmarks/stixrude_2024_figure14/reference/figure14.svg +12470 -0
  22. burnman_cpp-0.6.0/examples/example_modular_mgd.py +230 -0
  23. burnman_cpp-0.6.0/examples/example_modular_mgd_with_anharmonicity.py +82 -0
  24. burnman_cpp-0.6.0/examples/example_pyrolite_modebox.py +134 -0
  25. burnman_cpp-0.6.0/examples/example_spock_gold.py +149 -0
  26. burnman_cpp-0.6.0/include/burnman/eos/components/anharmonic_prefactor_models.hpp +48 -0
  27. burnman_cpp-0.6.0/include/burnman/eos/components/anharmonic_thermal_models.hpp +47 -0
  28. burnman_cpp-0.6.0/include/burnman/eos/components/debye_temperature_models.hpp +60 -0
  29. burnman_cpp-0.6.0/include/burnman/eos/modular_mie_grueneisen_debye.hpp +93 -0
  30. burnman_cpp-0.6.0/include/burnman/eos/spock.hpp +93 -0
  31. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/minerals/datasets.hpp +1 -1
  32. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/calculation.hpp +24 -0
  33. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/verification.hpp +2 -0
  34. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/types/mineral_params.hpp +24 -0
  35. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/types/simple_types.hpp +4 -1
  36. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/pyproject.toml +3 -1
  37. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/bindings.hpp +1 -0
  38. burnman_cpp-0.6.0/python/bindings/eos.cpp +165 -0
  39. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/materials.cpp +0 -28
  40. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/module.cpp +1 -0
  41. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/params.cpp +22 -0
  42. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/phase_diagram.cpp +25 -0
  43. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/__init__.py +23 -0
  44. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/adapters.py +37 -0
  45. burnman_cpp-0.6.0/python/burnman_cpp/anharmonic_prefactor_models.py +22 -0
  46. burnman_cpp-0.6.0/python/burnman_cpp/anharmonic_thermal_models.py +22 -0
  47. burnman_cpp-0.6.0/python/burnman_cpp/debye_temperature_models.py +23 -0
  48. burnman_cpp-0.6.0/python/burnman_cpp/minerals/__init__.py +121 -0
  49. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/__init__.py +11 -0
  50. burnman_cpp-0.6.0/python/burnman_cpp/tools/equilibrium_path.py +296 -0
  51. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/phase_diagram_workflow.py +2 -52
  52. burnman_cpp-0.6.0/python/tests/test_equilibrium_path.py +219 -0
  53. burnman_cpp-0.6.0/python/tests/test_modular_mgd.py +310 -0
  54. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_native_failure_reference.py +1 -1
  55. burnman_cpp-0.6.0/python/tests/test_phase_diagram_incidence.py +94 -0
  56. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_line_resolution.py +19 -6
  57. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_workflow.py +7 -3
  58. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_reference_tools.py +2 -1
  59. burnman_cpp-0.6.0/python/tests/test_spock.py +117 -0
  60. burnman_cpp-0.6.0/src/eos/components/modular_mgd_models.cpp +224 -0
  61. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/components/property_modifiers.cpp +3 -2
  62. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/make_eos.cpp +8 -0
  63. burnman_cpp-0.6.0/src/eos/modular_mie_grueneisen_debye.cpp +402 -0
  64. burnman_cpp-0.6.0/src/eos/spock.cpp +286 -0
  65. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/minerals/datasets.cpp +1 -1
  66. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/calculation.cpp +73 -13
  67. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/verification.cpp +12 -0
  68. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/core/test_assemblage.cpp +1 -1
  69. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/core/test_mineral.cpp +22 -1
  70. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/core/test_solution.cpp +1 -1
  71. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/core/test_solution_model.cpp +1 -1
  72. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_birch_murnaghan.cpp +1 -1
  73. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_bukowinski_electronic.cpp +1 -1
  74. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_debye.cpp +1 -1
  75. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_einstein.cpp +1 -1
  76. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_hp.cpp +1 -1
  77. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_mie_grueneisen_debye.cpp +1 -1
  78. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_modified_tait.cpp +1 -1
  79. burnman_cpp-0.6.0/tests/eos/test_modular_mie_grueneisen_debye.cpp +333 -0
  80. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_property_modifiers.cpp +30 -50
  81. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_slb.cpp +1 -1
  82. burnman_cpp-0.6.0/tests/eos/test_spock.cpp +269 -0
  83. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_vinet.cpp +1 -1
  84. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_volume_accuracy.cpp +10 -2
  85. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/include/eos_names.hpp +6 -0
  86. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/include/ps1994_reference.hpp +1 -1
  87. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/reference/burnman.json +1 -1
  88. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/averaging/test_averaging_schemes.cpp +1 -1
  89. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tools/check_reference_data.py +3 -0
  90. burnman_cpp-0.3.0/python/burnman_cpp/minerals/__init__.py +0 -59
  91. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/.clang-format +0 -0
  92. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/.github/workflows/format.yml +0 -0
  93. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/.gitignore +0 -0
  94. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/LICENSE +0 -0
  95. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/Makefile +0 -0
  96. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/core/benchmark_assemblage.cpp +0 -0
  97. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/core/benchmark_mineral.cpp +0 -0
  98. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/cpp_python_speedup.py +0 -0
  99. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/eos/benchmark_property_modifiers.cpp +0 -0
  100. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/parse_benchmarks.py +0 -0
  101. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/python_benchmarks.py +0 -0
  102. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/benchmarks/requirements.txt +0 -0
  103. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_basalt_phase_diagram.py +0 -0
  104. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_composition.py +0 -0
  105. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_equilibrate.py +0 -0
  106. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_forsterite_thermodynamic_sections.py +0 -0
  107. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_green2025_at1.py +0 -0
  108. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_green2025_klb1.py +0 -0
  109. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_green2025_mix1g.py +0 -0
  110. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_green2025_re46.py +0 -0
  111. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_green2025_ton101s.py +0 -0
  112. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_green2025_ton101u.py +0 -0
  113. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_harzburgite_basalt_px.py +0 -0
  114. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_iron_hematite_tx.py +0 -0
  115. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_metasediment_contours.py +0 -0
  116. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_metasediment_phase_diagram.py +0 -0
  117. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_olivine_px.py +0 -0
  118. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_olivine_tx.py +0 -0
  119. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_olivine_vx.py +0 -0
  120. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_patch_phase_diagram.py +0 -0
  121. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_phase_diagram_grid.py +0 -0
  122. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_plot_pyrolite_sp_relaxed_properties.py +0 -0
  123. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_pyrolite_phase_diagram.py +0 -0
  124. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_pyrolite_phase_diagram_zoom.py +0 -0
  125. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_pyrolite_sp_phase_diagram.py +0 -0
  126. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_refine_phase_diagram.py +0 -0
  127. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_single_point_equilibrium.py +0 -0
  128. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/example_solution_equilibrium.py +0 -0
  129. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/green2025.py +0 -0
  130. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/examples/green2025_reference.md +0 -0
  131. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/assemblage.hpp +0 -0
  132. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/combined_mineral.hpp +0 -0
  133. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/composite_material.hpp +0 -0
  134. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/composition.hpp +0 -0
  135. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/equation_of_state.hpp +0 -0
  136. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/material.hpp +0 -0
  137. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/mineral.hpp +0 -0
  138. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/relaxed_solution.hpp +0 -0
  139. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/solution.hpp +0 -0
  140. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/solution_model.hpp +0 -0
  141. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/solution_models/asymmetric_regular_solution.hpp +0 -0
  142. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/solution_models/ideal_solution.hpp +0 -0
  143. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/solution_models/solution_model_base.hpp +0 -0
  144. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/core/solution_models/symmetric_regular_solution.hpp +0 -0
  145. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/birch_murnaghan.hpp +0 -0
  146. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/components/bukowinski_electronic.hpp +0 -0
  147. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/components/debye.hpp +0 -0
  148. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/components/einstein.hpp +0 -0
  149. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/components/excess_params.hpp +0 -0
  150. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/components/gsl_params.hpp +0 -0
  151. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/components/property_modifiers.hpp +0 -0
  152. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/hp.hpp +0 -0
  153. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/hp_liquid.hpp +0 -0
  154. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/make_eos.hpp +0 -0
  155. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/mie_grueneisen_debye.hpp +0 -0
  156. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/modified_tait.hpp +0 -0
  157. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/slb.hpp +0 -0
  158. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/eos/vinet.hpp +0 -0
  159. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/minerals/model_sets.hpp +0 -0
  160. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/minerals/phase_aliases.hpp +0 -0
  161. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/minerals/water.hpp +0 -0
  162. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/optim/roots/bracket.hpp +0 -0
  163. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/optim/roots/brent.hpp +0 -0
  164. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/optim/roots/damped_newton_solver.hpp +0 -0
  165. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/optim/roots/damped_newton_state.hpp +0 -0
  166. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/optim/roots/damped_newton_types.hpp +0 -0
  167. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/averaging_base.hpp +0 -0
  168. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/averaging_schemes.hpp +0 -0
  169. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/averaging_utils.hpp +0 -0
  170. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/hs.hpp +0 -0
  171. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/hs_lower.hpp +0 -0
  172. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/hs_upper.hpp +0 -0
  173. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/reuss.hpp +0 -0
  174. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/voigt.hpp +0 -0
  175. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/averaging/vrh.hpp +0 -0
  176. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equality_constraint_base.hpp +0 -0
  177. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equality_constraint_helpers.hpp +0 -0
  178. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equality_constraint_variants.hpp +0 -0
  179. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equality_constraints.hpp +0 -0
  180. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equilibrate.hpp +0 -0
  181. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equilibrate_impl.hpp +0 -0
  182. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equilibrate_lambda_bounds.hpp +0 -0
  183. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equilibrate_objective.hpp +0 -0
  184. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equilibrate_types.hpp +0 -0
  185. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/equilibration/equilibrate_utils.hpp +0 -0
  186. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/boundary_repair.hpp +0 -0
  187. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/common.hpp +0 -0
  188. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/consistency.hpp +0 -0
  189. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/continuation.hpp +0 -0
  190. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/contours.hpp +0 -0
  191. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/critical.hpp +0 -0
  192. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/domain.hpp +0 -0
  193. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/polygons.hpp +0 -0
  194. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/properties.hpp +0 -0
  195. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/refinement.hpp +0 -0
  196. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/stability.hpp +0 -0
  197. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/tracing.hpp +0 -0
  198. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram/types.hpp +0 -0
  199. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/phase_diagram.hpp +0 -0
  200. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/tools/polytope.hpp +0 -0
  201. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/chemistry_utils.hpp +0 -0
  202. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/constants.hpp +0 -0
  203. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/exceptions.hpp +0 -0
  204. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/index_utils.hpp +0 -0
  205. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/math_utils.hpp +0 -0
  206. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/matrix_utils.hpp +0 -0
  207. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/polygon_utils.hpp +0 -0
  208. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/string_utils.hpp +0 -0
  209. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/types/ndarray.hpp +0 -0
  210. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/types/types.hpp +0 -0
  211. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/utils.hpp +0 -0
  212. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/validate_optionals.hpp +0 -0
  213. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/vector_utils.hpp +0 -0
  214. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/include/burnman/utils/warnings.hpp +0 -0
  215. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/combined.cpp +0 -0
  216. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/composition.cpp +0 -0
  217. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/equilibration.cpp +0 -0
  218. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/minerals.cpp +0 -0
  219. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/model_sets.cpp +0 -0
  220. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/modifiers.cpp +0 -0
  221. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/polytope.cpp +0 -0
  222. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/solutions.cpp +0 -0
  223. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/bindings/utils.cpp +0 -0
  224. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/constants.py +0 -0
  225. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/aspect.py +0 -0
  226. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/contours.py +0 -0
  227. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/phase_diagram.py +0 -0
  228. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/phase_diagram_helpers.py +0 -0
  229. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/polytope.py +0 -0
  230. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/potential_grid.py +0 -0
  231. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/burnman_cpp/tools/properties.py +0 -0
  232. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/conftest.py +0 -0
  233. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/basalt_field_verification.json +0 -0
  234. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/basalt_local_amphibole.json +0 -0
  235. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/basalt_local_plagioclase.json +0 -0
  236. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/basalt_nearby_bivariant_junctions.json +0 -0
  237. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/forsterite_latent_interval.json +0 -0
  238. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/green_provisional_loops.json +0 -0
  239. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/harzburgite_garnet_composition_boundary.json +0 -0
  240. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/harzburgite_thin_composition_field.json +0 -0
  241. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_contour_field.json +0 -0
  242. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_contour_ordering_field.json +0 -0
  243. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_curve_edit.json +0 -0
  244. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_curved_mica_field.json +0 -0
  245. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_curved_node_connections.json +0 -0
  246. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_endpoints.json +0 -0
  247. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_missing_melt_connection.json +0 -0
  248. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_ordering_segment.json +0 -0
  249. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_parallel_fields.json +0 -0
  250. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_thin_finite_field.json +0 -0
  251. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_univariant_loop.json +0 -0
  252. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/metasediment_univariant_segments.json +0 -0
  253. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/phase_diagram_model_limit_fan.json +0 -0
  254. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_cold_endpoints.json +0 -0
  255. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_critical_endpoints.json +0 -0
  256. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_crossed_loops.json +0 -0
  257. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_duplicate_curve.json +0 -0
  258. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_duplicate_invariant.json +0 -0
  259. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_duplicate_junctions.json +0 -0
  260. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_endpoints.json +0 -0
  261. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_exchanged_junction_zeros.json +0 -0
  262. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_frame_order.json +0 -0
  263. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_limiting_neighbours.json +0 -0
  264. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_local_opx.json +0 -0
  265. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_missing_solution_branch.json +0 -0
  266. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_model_limit.json +0 -0
  267. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_narrow_curves.json +0 -0
  268. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_narrow_solution_replacement.json +0 -0
  269. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_nearby_junctions.json +0 -0
  270. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_nearby_univariant_junctions.json +0 -0
  271. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_neighbouring_branches.json +0 -0
  272. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_partial_duplicate.json +0 -0
  273. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_perimeter_neighbours.json +0 -0
  274. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_coincident_phase_outs.json +0 -0
  275. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_cold_coexistence.json +0 -0
  276. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_cold_model_limits.json +0 -0
  277. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_cold_reaction_duplicates.json +0 -0
  278. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_detached_junctions.json +0 -0
  279. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_equivalent_reaction_curves.json +0 -0
  280. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_garnet_stability.json +0 -0
  281. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_model_limit_duplicates.json +0 -0
  282. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_pt_repair_regressions.json +0 -0
  283. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_reaction_extents.json +0 -0
  284. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_refinement_segment.json +0 -0
  285. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_retired_junction_geometry.json +0 -0
  286. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_short_branch_labels.json +0 -0
  287. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_solution_replacement.json +0 -0
  288. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_solvus_seeds.json +0 -0
  289. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_ak_branch_switch.json +0 -0
  290. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_cf_copy_junctions.json +0 -0
  291. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_enthalpy_branch.json +0 -0
  292. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_failed_bracket.json +0 -0
  293. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_false_cpx_junction.json +0 -0
  294. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_false_junction.json +0 -0
  295. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_junction.json +0 -0
  296. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_missing_ak_boundary.json +0 -0
  297. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_reaction_classification.json +0 -0
  298. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_soft_grid_point.json +0 -0
  299. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_trace_site_junctions.json +0 -0
  300. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_trace_site_response.json +0 -0
  301. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_unconnected_junctions.json +0 -0
  302. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_sp_wrong_branch_junction.json +0 -0
  303. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_stable_vertex_loop.json +0 -0
  304. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/data/pyrolite_zoom_reaction_limits.json +0 -0
  305. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_adapters.py +0 -0
  306. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_aspect_table.py +0 -0
  307. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_bindings.py +0 -0
  308. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_complete_datasets.py +0 -0
  309. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_composition.py +0 -0
  310. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_composition_phase_diagram.py +0 -0
  311. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_composition_reference.py +0 -0
  312. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_constants.py +0 -0
  313. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_contour_tools.py +0 -0
  314. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_enthalpy_ps_infill.py +0 -0
  315. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_equilibration.py +0 -0
  316. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_forsterite_sections.py +0 -0
  317. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_gaussian_moment_corrected.py +0 -0
  318. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_green2025.py +0 -0
  319. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_melt.py +0 -0
  320. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_mineral_catalogue_reference.py +0 -0
  321. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_model_sets.py +0 -0
  322. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_modifiers.py +0 -0
  323. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_native_minerals.py +0 -0
  324. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram.py +0 -0
  325. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_branch_identity.py +0 -0
  326. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_consistency.py +0 -0
  327. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_contours.py +0 -0
  328. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_critical_endpoints.py +0 -0
  329. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_partial_duplicates.py +0 -0
  330. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_patching.py +0 -0
  331. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_perimeter_labels.py +0 -0
  332. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_phase_diagram_plot.py +0 -0
  333. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_polygon_utils.py +0 -0
  334. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_polytope.py +0 -0
  335. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_potential_grid.py +0 -0
  336. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_property_grid.py +0 -0
  337. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_slb2024.py +0 -0
  338. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_slb_reference.py +0 -0
  339. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_stable_equilibrium.py +0 -0
  340. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_thermodynamic_phase_diagram.py +0 -0
  341. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/python/tests/test_wheel_metadata.py +0 -0
  342. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/assemblage.cpp +0 -0
  343. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/combined_mineral.cpp +0 -0
  344. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/composite_material.cpp +0 -0
  345. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/composition.cpp +0 -0
  346. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/equation_of_state.cpp +0 -0
  347. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/material.cpp +0 -0
  348. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/mineral.cpp +0 -0
  349. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/relaxed_solution.cpp +0 -0
  350. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/solution.cpp +0 -0
  351. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/solution_models/asymmetric_regular_solution.cpp +0 -0
  352. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/solution_models/ideal_solution.cpp +0 -0
  353. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/solution_models/solution_model_base.cpp +0 -0
  354. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/core/solution_models/symmetric_regular_solution.cpp +0 -0
  355. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/birch_murnaghan.cpp +0 -0
  356. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/components/bukowinski_electronic.cpp +0 -0
  357. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/components/debye.cpp +0 -0
  358. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/components/einstein.cpp +0 -0
  359. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/hp.cpp +0 -0
  360. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/hp_liquid.cpp +0 -0
  361. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/mie_grueneisen_debye.cpp +0 -0
  362. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/modified_tait.cpp +0 -0
  363. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/slb.cpp +0 -0
  364. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/eos/vinet.cpp +0 -0
  365. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/minerals/model_sets.cpp +0 -0
  366. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/minerals/phase_aliases.cpp +0 -0
  367. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/minerals/water.cpp +0 -0
  368. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/optim/roots/damped_newton_solver.cpp +0 -0
  369. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/averaging_base.cpp +0 -0
  370. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/averaging_utils.cpp +0 -0
  371. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/hs.cpp +0 -0
  372. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/hs_lower.cpp +0 -0
  373. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/hs_upper.cpp +0 -0
  374. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/reuss.cpp +0 -0
  375. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/voigt.cpp +0 -0
  376. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/averaging/vrh.cpp +0 -0
  377. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/equilibration/equality_constraint_variants.cpp +0 -0
  378. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/equilibration/equilibrate_impl.cpp +0 -0
  379. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/equilibration/equilibrate_lambda_bounds.cpp +0 -0
  380. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/equilibration/equilibrate_objective.cpp +0 -0
  381. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/equilibration/equilibrate_utils.cpp +0 -0
  382. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/boundary_repair.cpp +0 -0
  383. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/common.cpp +0 -0
  384. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/consistency.cpp +0 -0
  385. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/continuation.cpp +0 -0
  386. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/contours.cpp +0 -0
  387. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/critical.cpp +0 -0
  388. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/domain.cpp +0 -0
  389. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/polygons.cpp +0 -0
  390. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/potential.cpp +0 -0
  391. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/properties.cpp +0 -0
  392. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/refinement.cpp +0 -0
  393. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/stability.cpp +0 -0
  394. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/phase_diagram/tracing.cpp +0 -0
  395. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/polytope.cpp +0 -0
  396. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/tools/solution_simplification.cpp +0 -0
  397. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/utils/chemistry_utils.cpp +0 -0
  398. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/src/utils/polygon_utils.cpp +0 -0
  399. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/core/test_composition.cpp +0 -0
  400. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/core/test_material.cpp +0 -0
  401. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/eos/test_excess_params.cpp +0 -0
  402. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/include/equilibration_fixtures.hpp +0 -0
  403. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/include/solution_fixtures.hpp +0 -0
  404. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/include/thermocalc_reference.hpp +0 -0
  405. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/include/tolerances.hpp +0 -0
  406. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/minerals/test_native_datasets.cpp +0 -0
  407. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/minerals/test_thermocalc_reference.cpp +0 -0
  408. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/minerals/test_water.cpp +0 -0
  409. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/optim/roots/test_damped_newton.cpp +0 -0
  410. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/optim/roots/test_roots.cpp +0 -0
  411. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/reference/ps1994.json +0 -0
  412. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/reference/thermocalc_metapelite.json +0 -0
  413. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/test_main.cpp +0 -0
  414. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/equilibration/test_equality_constraints.cpp +0 -0
  415. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/equilibration/test_equilibrate.cpp +0 -0
  416. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/equilibration/test_equilibrate_lambda_bounds.cpp +0 -0
  417. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/equilibration/test_equilibrate_objective.cpp +0 -0
  418. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/equilibration/test_equilibrate_utils.cpp +0 -0
  419. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/test_phase_diagram.cpp +0 -0
  420. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/test_phase_diagram_consistency.cpp +0 -0
  421. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/tools/test_polytope.cpp +0 -0
  422. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_chemistry_utils.cpp +0 -0
  423. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_constants.cpp +0 -0
  424. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_exceptions.cpp +0 -0
  425. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_index_utils.cpp +0 -0
  426. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_math_utils.cpp +0 -0
  427. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_matrix_utils.cpp +0 -0
  428. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_polygon_utils.cpp +0 -0
  429. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_string_utils.cpp +0 -0
  430. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_types.cpp +0 -0
  431. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_validate_optionals.cpp +0 -0
  432. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_vector_utils.cpp +0 -0
  433. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tests/utils/test_warnings.cpp +0 -0
  434. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tools/build_wheel_dependencies.py +0 -0
  435. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tools/burnman_reference.py +0 -0
  436. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tools/export_example_minerals.py +0 -0
  437. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tools/extract_thermocalc_reference.py +0 -0
  438. {burnman_cpp-0.3.0 → burnman_cpp-0.6.0}/tools/generate_ps1994_reference.py +0 -0
@@ -96,7 +96,7 @@ jobs:
96
96
  uses: actions/checkout@v7
97
97
  with:
98
98
  repository: geodynamics/burnman
99
- ref: 39b582cd23954fabd3bdbbee6526a522b1d97bc9
99
+ ref: e2cfac31052273b3fa9d5ce905978e97723005e9
100
100
  path: build/python-burnman-reference
101
101
  persist-credentials: false
102
102
 
@@ -110,7 +110,7 @@ jobs:
110
110
  uses: actions/checkout@v7
111
111
  with:
112
112
  repository: geodynamics/burnman
113
- ref: 39b582cd23954fabd3bdbbee6526a522b1d97bc9
113
+ ref: e2cfac31052273b3fa9d5ce905978e97723005e9
114
114
  path: build/python-burnman-reference
115
115
  persist-credentials: false
116
116
 
@@ -1,7 +1,8 @@
1
1
  name: Wheels
2
2
 
3
3
  on:
4
- pull_request:
4
+ push:
5
+ branches: [main]
5
6
  paths:
6
7
  - CMakeLists.txt
7
8
  - pyproject.toml
@@ -10,9 +11,6 @@ on:
10
11
  - python/**
11
12
  - tools/build_wheel_dependencies.py
12
13
  - .github/workflows/wheels.yml
13
- push:
14
- tags: ["v*"]
15
- workflow_dispatch:
16
14
 
17
15
  permissions:
18
16
  contents: read
@@ -27,6 +25,7 @@ jobs:
27
25
  steps:
28
26
  - uses: actions/checkout@v7
29
27
  with:
28
+ ref: ${{ github.sha }}
30
29
  persist-credentials: false
31
30
  - uses: actions/setup-python@v7
32
31
  with:
@@ -48,8 +47,6 @@ jobs:
48
47
  os: [ubuntu-24.04, ubuntu-24.04-arm, macos-15, macos-15-intel]
49
48
  runs-on: ${{ matrix.os }}
50
49
  env:
51
- # Pull requests test each architecture; releases/manual runs build every ABI.
52
- CIBW_BUILD: ${{ github.event_name == 'pull_request' && 'cp312-*' || 'cp3{10,11,12,13,14,15}-*' }}
53
50
  CIBW_ARCHS: native
54
51
  steps:
55
52
  - uses: actions/download-artifact@v7
@@ -71,6 +71,7 @@ if(BURNMAN_BUILD_PYTHON)
71
71
  pybind11_add_module(_core
72
72
  python/bindings/module.cpp
73
73
  python/bindings/params.cpp
74
+ python/bindings/eos.cpp
74
75
  python/bindings/materials.cpp
75
76
  python/bindings/composition.cpp
76
77
  python/bindings/combined.cpp
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: burnman_cpp
3
- Version: 0.3.0
3
+ Version: 0.6.0
4
4
  Summary: Python bindings for the BurnMan C++ mineral physics library
5
5
  Author-Email: The BurnMan Team <bob.myhill@bristol.ac.uk>
6
6
  License-Expression: GPL-3.0-or-later
@@ -187,7 +187,7 @@ comparisons used by GitHub CI:
187
187
 
188
188
  ```sh
189
189
  git clone https://github.com/geodynamics/burnman.git build/python-burnman-reference
190
- git -C build/python-burnman-reference checkout 39b582cd23954fabd3bdbbee6526a522b1d97bc9
190
+ git -C build/python-burnman-reference checkout e2cfac31052273b3fa9d5ce905978e97723005e9
191
191
  python -m pip install -e 'build/python-burnman-reference[dev]'
192
192
  export PYTHONPATH="$PWD/build/python-burnman-reference"
193
193
  export PYTHONDONTWRITEBYTECODE=1
@@ -161,7 +161,7 @@ comparisons used by GitHub CI:
161
161
 
162
162
  ```sh
163
163
  git clone https://github.com/geodynamics/burnman.git build/python-burnman-reference
164
- git -C build/python-burnman-reference checkout 39b582cd23954fabd3bdbbee6526a522b1d97bc9
164
+ git -C build/python-burnman-reference checkout e2cfac31052273b3fa9d5ce905978e97723005e9
165
165
  python -m pip install -e 'build/python-burnman-reference[dev]'
166
166
  export PYTHONPATH="$PWD/build/python-burnman-reference"
167
167
  export PYTHONDONTWRITEBYTECODE=1
@@ -1,6 +1,15 @@
1
1
  Performance benchmarks
2
2
  ======================
3
3
 
4
+ Scientific reference comparisons are kept alongside the timing benchmarks:
5
+
6
+ - [Stixrude & Lithgow-Bertelloni (2024), Figure 13](stixrude_2024_figure13/README.md):
7
+ pyrolite phase modes, native iron and ferropericlase spin along a 1600 K
8
+ surface isentrope, with overlays on the published panels and saved equilibria.
9
+ - [Stixrude & Lithgow-Bertelloni (2024), Figure 14](stixrude_2024_figure14/README.md):
10
+ three lower-mantle shear-velocity profiles, relaxed pyrolite expansivity and
11
+ phase boundaries, with a 1400 K isentrope plus a basal erfc thermal layer.
12
+
4
13
  `core/` and `eos/` contain the Catch2 performance benchmarks. They build into
5
14
  their own executable and reuse the fixtures in `tests/include/`. Unit tests
6
15
  build separately. The Python scripts time pure Python BurnMan, process native
@@ -67,5 +76,5 @@ Both commands use `build/benchmarks/` by default. The Python timer accepts
67
76
  The GitHub `Benchmarks` workflow runs on pushes, pull requests and manual
68
77
  dispatch. It builds and executes the native benchmarks with warnings treated
69
78
  as errors, processes their XML, and runs the Python timings against BurnMan
70
- commit `39b582cd23954fabd3bdbbee6526a522b1d97bc9`. The XML, CTest log and CSV files
79
+ commit `e2cfac31052273b3fa9d5ce905978e97723005e9`. The XML, CTest log and CSV files
71
80
  are available as workflow artifacts.
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env python3
2
+ # ------------------------------------------------------
3
+ #
4
+ # SPDX-License-Identifier: GPL-3.0-or-later
5
+ #
6
+ # SPDX-FileCopyrightText: Copyright (C) 2026 by the BurnMan Team.
7
+ #
8
+ # This file is part of BurnMan.
9
+ #
10
+ # Detailed license information governing the source code
11
+ # and contributions can be found in the LICENSE document.
12
+ #
13
+ # ------------------------------------------------------
14
+ """Shared SLB2024 Table 1 compositions and candidate catalogue for benchmarks."""
15
+
16
+ import gzip
17
+ import json
18
+
19
+ import burnman_cpp as bm
20
+ from burnman_cpp.minerals import SLB24
21
+
22
+ TABLE1 = {
23
+ "pyrolite": dict(
24
+ SiO2=45.0,
25
+ MgO=38.88,
26
+ FeO=8.05,
27
+ Fe2O3=0.18,
28
+ CaO=3.18,
29
+ Al2O3=4.0,
30
+ Na2O=0.13,
31
+ Cr2O3=0.57,
32
+ ),
33
+ "harzburgite": dict(
34
+ SiO2=43.43,
35
+ MgO=45.93,
36
+ FeO=8.34,
37
+ Fe2O3=0.09,
38
+ CaO=0.90,
39
+ Al2O3=1.0,
40
+ Na2O=0.01,
41
+ Cr2O3=0.30,
42
+ ),
43
+ "basalt": dict(
44
+ SiO2=50.42,
45
+ MgO=9.77,
46
+ FeO=7.10,
47
+ Fe2O3=1.07,
48
+ CaO=12.54,
49
+ Al2O3=16.80,
50
+ Na2O=2.23,
51
+ Cr2O3=0.07,
52
+ ),
53
+ }
54
+ FERRIC_FRACTIONS = dict(pyrolite=0.02, harzburgite=0.01, basalt=0.12)
55
+
56
+
57
+ def bulk_composition(lithology):
58
+ """100 g Table 1 bulk; preserve cation ratios and impose stated Fe3+/Fe.
59
+
60
+ Table 1 oxide masses are rounded. Redistribute FeO/Fe2O3 to match the
61
+ independently stated initial ferric fraction, then normalize to 100 g.
62
+ Subsequent equilibrium calculations retain the closed elemental inventory.
63
+ """
64
+ masses = {k: v * 0.001 for k, v in TABLE1[lithology].items()}
65
+ iron = bm.Composition({k: masses.pop(k) for k in ("FeO", "Fe2O3")}, "mass")
66
+ total_fe, ferric = iron.atomic_composition["Fe"], FERRIC_FRACTIONS[lithology]
67
+ bulk = bm.Composition(masses, "mass")
68
+ bulk.add_components(
69
+ dict(FeO=(1 - ferric) * total_fe, Fe2O3=0.5 * ferric * total_fe), "molar"
70
+ )
71
+ bulk.renormalize("mass", "total", 0.1)
72
+ return bulk
73
+
74
+
75
+ def candidate_phases():
76
+ """All ordinary SLB2024 solid solutions and competing pure phases."""
77
+ factories = [
78
+ ("ol", SLB24.olivine),
79
+ ("wa", SLB24.wadsleyite),
80
+ ("ri", SLB24.ringwoodite),
81
+ ("opx", SLB24.orthopyroxene),
82
+ ("cpx", SLB24.clinopyroxene),
83
+ ("hpcpx", SLB24.c2c_pyroxene),
84
+ ("gt", SLB24.garnet),
85
+ ("sp", SLB24.mg_fe_aluminous_spinel),
86
+ ("plg", SLB24.plagioclase),
87
+ ("ak", SLB24.ilmenite),
88
+ ("fp", SLB24.ferropericlase),
89
+ ("bg", SLB24.bridgmanite),
90
+ ("ppv", SLB24.post_perovskite),
91
+ ("cf", SLB24.calcium_ferrite_structured_phase),
92
+ ("nal", SLB24.new_aluminous_phase),
93
+ ("capv", SLB24.capv),
94
+ ("neph", SLB24.neph),
95
+ ("ky", SLB24.ky),
96
+ ("q", SLB24.qtz),
97
+ ("coe", SLB24.coes),
98
+ ("st", SLB24.st),
99
+ ("seif", SLB24.apbo),
100
+ ("wo", SLB24.wo),
101
+ ("pwo", SLB24.pwo),
102
+ ("Fe-bcc", SLB24.fea),
103
+ ("Fe-fcc", SLB24.feg),
104
+ ("Fe-hcp", SLB24.fee),
105
+ ]
106
+ phases = []
107
+ for name, factory in factories:
108
+ phase = factory()
109
+ phase.set_name(name)
110
+ phases.append(phase)
111
+ return phases
112
+
113
+
114
+ def save_equilibrium_path(path, bulk, filename):
115
+ """Retain equilibrium populations, active bases and diagnostic measures."""
116
+ records = []
117
+ for state in path.states:
118
+ record = {
119
+ k: getattr(state, k)
120
+ for k in (
121
+ "pressure",
122
+ "temperature",
123
+ "entropy",
124
+ "volume",
125
+ "success",
126
+ "outside_model_domain",
127
+ "message",
128
+ "gibbs",
129
+ "mass_balance_error",
130
+ "minimum_affinity",
131
+ "equilibrium_error",
132
+ )
133
+ }
134
+ record["phases"] = [
135
+ dict(
136
+ id=p.id,
137
+ candidate_index=p.candidate_index,
138
+ name=p.name,
139
+ amount=p.amount,
140
+ composition=p.composition.tolist(),
141
+ composition_basis=(
142
+ None
143
+ if p.composition_basis is None
144
+ else p.composition_basis.tolist()
145
+ ),
146
+ )
147
+ for p in state.phases
148
+ ]
149
+ records.append(record)
150
+ with gzip.open(filename, "wt", encoding="utf-8") as stream:
151
+ json.dump(
152
+ dict(bulk=bulk.atomic_composition, states=records), stream, allow_nan=False
153
+ )
@@ -0,0 +1,139 @@
1
+ # Stixrude & Lithgow-Bertelloni (2024), Figure 13
2
+
3
+ Recalculate pyrolite phase modes, native iron and the ferropericlase low-spin
4
+ fraction along a closed-system isentrope with a surface temperature of 1600 K.
5
+ Overlay both calculated panels on the published reference figure.
6
+
7
+ Paper: *Thermodynamics of mantle minerals — III: the role of iron*,
8
+ [doi:10.1093/gji/ggae126](https://doi.org/10.1093/gji/ggae126), Figure 13,
9
+ printed page 1712 (PDF page 14).
10
+
11
+ [Calculated panels](results/figure13.png) ·
12
+ [Benchmark overlay, PNG](results/figure13_benchmark_overlay.png) ·
13
+ [Benchmark overlay, SVG](results/figure13_benchmark_overlay.svg)
14
+
15
+ ![Calculated curves in blue over the published panels](results/figure13_benchmark_overlay.png)
16
+
17
+ ## Run the benchmark
18
+
19
+ From the repository root, install the working checkout and plotting dependencies:
20
+
21
+ ```sh
22
+ python -m pip install '.[examples]'
23
+ ```
24
+
25
+ The PNG overlay uses `rsvg-convert` from librsvg (`brew install librsvg` on
26
+ macOS, or package `librsvg2-bin` on Debian/Ubuntu). The original PDF is not
27
+ needed: the reference artwork and its axis calibration are included here.
28
+
29
+ ```sh
30
+ python benchmarks/stixrude_2024_figure13/benchmark.py --points 801 --verbose
31
+ ```
32
+
33
+ Fresh outputs go to `build/benchmarks/stixrude_2024_figure13/`. Use
34
+ `--output-dir PATH` to choose a different directory. The checked-in `results/`
35
+ snapshot stays unchanged unless explicitly selected as the output directory.
36
+
37
+ Regenerate the overlay from saved grid data, without any equilibrium solves:
38
+
39
+ ```sh
40
+ python benchmarks/stixrude_2024_figure13/overlay.py \
41
+ --grid benchmarks/stixrude_2024_figure13/results/mode_box.npz
42
+ ```
43
+
44
+ ## Composition and physical definitions
45
+
46
+ The starting composition follows Table 1 (relative oxide masses in grams):
47
+
48
+ | Oxide | Table 1 amount |
49
+ | --- | ---: |
50
+ | SiO₂ | 45.00 |
51
+ | MgO | 38.88 |
52
+ | FeO | 8.05 |
53
+ | Fe₂O₃ | 0.18 |
54
+ | CaO | 3.18 |
55
+ | Al₂O₃ | 4.00 |
56
+ | Na₂O | 0.13 |
57
+ | Cr₂O₃ | 0.57 |
58
+
59
+ These rounded entries sum to 99.99 g and imply Fe³⁺/ΣFe = 0.0197231.
60
+ Preserve every cation ratio, redistribute FeO/Fe₂O₃ to exactly 0.02 as specified
61
+ in the Figure 13 caption, and normalise to 100 g. Oxygen is closed thereafter;
62
+ metal can form through internal redox reactions. The actual normalised oxide
63
+ amounts and elemental inventory are recorded in `report.json`.
64
+
65
+ - Calculate the surface equilibrium at 0 Pa and 1600 K, then hold its total
66
+ entropy fixed while sampling pressure from 0 to 135.751 GPa.
67
+ - Use the ordinary SLB2024 solution catalogue, with all three native-iron
68
+ polymorphs and the explicit high/low-spin endmembers. Spin populations
69
+ equilibrate with the mineral compositions; no prescribed spin curve is used.
70
+ - Convert pressure to depth with the included no-ocean PREM table. This is a
71
+ plotting conversion; temperature is solved from the entropy constraint.
72
+ - Atomic modes weight each mineral's solved formula-unit amount by its number
73
+ of atoms, including oxygen. Sum coexisting copies of each candidate model.
74
+ - Sum native iron over its bcc/fcc/hcp polymorphs. Following the published
75
+ layout, its enlarged band is measured downward from 1: the dashed boundary
76
+ is `1 - 100 * native_iron_atomic_fraction`.
77
+ - The lower curve follows equation (24):
78
+ `f = n(wustite_LS) / [n(wustite_HS) + n(wustite_LS)]`.
79
+ Weight species amounts across any coexisting fp copies before taking this
80
+ ratio. Ferric iron in the magnetite endmember is outside this ferrous spin
81
+ ratio. Where no ferrous fp exists, save NaN and leave the curve blank.
82
+
83
+ The calculation reproduces phase modes, native iron and fp spin. Ferric-ratio
84
+ curves, spin/ferric shading, oxygen fugacity and external comparison data remain
85
+ visible in the original artwork; they are not recalculated here.
86
+
87
+ ## Saved results and validation
88
+
89
+ The 21 October 2026 snapshot solved all 801 points without diagnostics. The
90
+ calculation and its own plots took 11.84 s on the development machine; overlay
91
+ rendering is separate. Maximum relative entropy, elemental mass-balance and
92
+ total-atom errors were approximately 1.1×10⁻¹⁵, 4.5×10⁻¹⁶ and 4.4×10⁻¹⁶.
93
+
94
+ Native iron peaks at atomic fraction 0.0025112 (0.25112%) near 706.8 km,
95
+ 25.453 GPa and 1913.1 K. The fp low-spin fraction reaches 0.70385 at 2891 km.
96
+ It is defined at 664 of the 801 points. Temperature rises from 1600 K to
97
+ 2682.14 K along the isentrope.
98
+
99
+ The modes/native-iron and spin curves show close visual agreement with much of
100
+ the reference. Visible differences remain in the lower-mantle fp proportion
101
+ and the bg–ppv coexistence interval. This benchmark retains those differences;
102
+ it does not force agreement or declare an exact numerical HeFESTo match.
103
+ The authors' unrounded calculation inputs have not been independently checked.
104
+
105
+ | File | Contents |
106
+ | --- | --- |
107
+ | `results/mode_box.npz` | Solved P/T/S/V, target pressures, PREM depths, phase names, atomic modes, molar/atomic amounts, cumulative mode boundaries, native iron, fp spin and success mask. |
108
+ | `results/equilibria.json.gz` | Full solved phase amounts, original endmember proportions, active bases and equilibrium validation errors at every point. |
109
+ | `results/report.json` | Bulk composition, run settings, numerical validation and summary quantities. |
110
+ | `results/figure13.{png,svg}` | Recalculated mode and fp-spin panels. |
111
+ | `results/figure13_benchmark_overlay.{png,svg}` | Calculated blue curves over the original published panels. |
112
+ | `results/overlay_registration.json` | Input hashes and the axis transformations used for the overlay. |
113
+ | `results/run.log` | Progress and the saved run's report. |
114
+ | `results/validation.log` | The 84 passing focused path, equilibrium, workflow and benchmark tests. |
115
+
116
+ Read the numerical arrays with `np.load(path, allow_pickle=False)`. Fractions
117
+ are dimensionless; P is in Pa, T in K, total S in J/K and total V in m³ for the
118
+ 100 g bulk. Original endmember coefficients can be signed for ordering models.
119
+
120
+ ## Reference registration and provenance
121
+
122
+ `reference/figure13.svg` retains the original vector artwork from the supplied
123
+ paper PDF, cropped to the figure. `axis_registration.json` records the source
124
+ PDF hash, page, frame coordinates and tick positions. The two published panels
125
+ have slightly different widths and are calibrated independently in depth and
126
+ fraction. The largest tick residuals are 0.354 km (upper) and 0.261 km (lower).
127
+ Calculated curves are not fitted or shifted to match the published curves.
128
+ The source figure's original data and colours are preserved.
129
+
130
+ `reference/prem_depth_pressure.txt` contains the mantle depth/pressure columns
131
+ of BurnMan's no-ocean PREM table, based on Dziewonski & Anderson (1981),
132
+ [doi:10.1016/0031-9201(81)90046-7](https://doi.org/10.1016/0031-9201(81)90046-7).
133
+
134
+ Small regression tests check the Table 1 cation ratios, initial ferric fraction,
135
+ spin weighting across fp copies and undefined spin ratios:
136
+
137
+ ```sh
138
+ python -m pytest python/tests/test_figure13_benchmark.py -q
139
+ ```