musica 0.11.1.3__tar.gz → 0.12.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.

Potentially problematic release.


This version of musica might be problematic. Click here for more details.

Files changed (272) hide show
  1. {musica-0.11.1.3 → musica-0.12.0}/.dockerignore +1 -0
  2. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/windows.yml +11 -20
  3. {musica-0.11.1.3 → musica-0.12.0}/.gitignore +2 -0
  4. musica-0.12.0/.zenodo.json +80 -0
  5. musica-0.12.0/AUTHORS.md +59 -0
  6. {musica-0.11.1.3 → musica-0.12.0}/CITATION.cff +1 -1
  7. {musica-0.11.1.3 → musica-0.12.0}/CMakeLists.txt +8 -1
  8. musica-0.12.0/CONTRIBUTING.md +98 -0
  9. {musica-0.11.1.3 → musica-0.12.0}/PKG-INFO +179 -43
  10. musica-0.12.0/README.md +253 -0
  11. {musica-0.11.1.3 → musica-0.12.0}/cmake/dependencies.cmake +7 -2
  12. musica-0.12.0/cmake/setup_musica_target.cmake +63 -0
  13. {musica-0.11.1.3 → musica-0.12.0}/configs/v1/chapman/config.json +1 -1
  14. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.python +3 -0
  15. musica-0.12.0/docker/Dockerfile.wheel +22 -0
  16. musica-0.12.0/docs/source/_static/ecosystem.png +0 -0
  17. {musica-0.11.1.3 → musica-0.12.0}/fortran/packaging/CMakeLists.txt +1 -1
  18. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/fetch_content_integration/test_micm_api.F90 +8 -8
  19. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/fetch_content_integration/test_micm_box_model.F90 +2 -2
  20. musica-0.12.0/musica/CMakeLists.txt +42 -0
  21. musica-0.12.0/musica/__init__.py +51 -0
  22. musica-0.12.0/musica/binding_common.cpp +16 -0
  23. musica-0.12.0/musica/binding_common.hpp +7 -0
  24. musica-0.12.0/musica/constants.py +3 -0
  25. musica-0.12.0/musica/cpu_binding.cpp +10 -0
  26. musica-0.12.0/musica/cuda.cpp +12 -0
  27. musica-0.12.0/musica/cuda.py +10 -0
  28. musica-0.12.0/musica/gpu_binding.cpp +10 -0
  29. musica-0.12.0/musica/mechanism_configuration/__init__.py +1 -0
  30. musica-0.12.0/musica/mechanism_configuration/aqueous_equilibrium.py +101 -0
  31. musica-0.12.0/musica/mechanism_configuration/arrhenius.py +121 -0
  32. musica-0.12.0/musica/mechanism_configuration/branched.py +116 -0
  33. musica-0.12.0/musica/mechanism_configuration/condensed_phase_arrhenius.py +116 -0
  34. musica-0.12.0/musica/mechanism_configuration/condensed_phase_photolysis.py +91 -0
  35. musica-0.12.0/musica/mechanism_configuration/emission.py +67 -0
  36. musica-0.12.0/musica/mechanism_configuration/first_order_loss.py +67 -0
  37. musica-0.12.0/musica/mechanism_configuration/henrys_law.py +85 -0
  38. musica-0.12.0/musica/mechanism_configuration/mechanism_configuration.py +161 -0
  39. musica-0.12.0/musica/mechanism_configuration/phase.py +43 -0
  40. musica-0.12.0/musica/mechanism_configuration/photolysis.py +83 -0
  41. musica-0.12.0/musica/mechanism_configuration/reactions.py +61 -0
  42. musica-0.12.0/musica/mechanism_configuration/simpol_phase_transfer.py +88 -0
  43. musica-0.12.0/musica/mechanism_configuration/species.py +72 -0
  44. musica-0.12.0/musica/mechanism_configuration/surface.py +89 -0
  45. musica-0.12.0/musica/mechanism_configuration/troe.py +137 -0
  46. musica-0.12.0/musica/mechanism_configuration/tunneling.py +103 -0
  47. musica-0.12.0/musica/mechanism_configuration/user_defined.py +83 -0
  48. musica-0.12.0/musica/mechanism_configuration/utils.py +10 -0
  49. musica-0.12.0/musica/mechanism_configuration/wet_deposition.py +49 -0
  50. {musica-0.11.1.3 → musica-0.12.0}/musica/mechanism_configuration.cpp +0 -1
  51. {musica-0.11.1.3 → musica-0.12.0}/musica/musica.cpp +1 -1
  52. {musica-0.11.1.3/musica/test/examples/v1 → musica-0.12.0/musica/test/examples/v1/full_configuration}/full_configuration.json +30 -15
  53. {musica-0.11.1.3/musica/test/examples/v1 → musica-0.12.0/musica/test/examples/v1/full_configuration}/full_configuration.yaml +16 -1
  54. {musica-0.11.1.3 → musica-0.12.0}/musica/test/test_analytical.py +14 -12
  55. {musica-0.11.1.3 → musica-0.12.0}/musica/test/test_chapman.py +18 -2
  56. musica-0.12.0/musica/test/test_parser.py +57 -0
  57. musica-0.12.0/musica/test/test_serializer.py +69 -0
  58. musica-0.11.1.3/musica/test/test_parser.py → musica-0.12.0/musica/test/test_util_full_mechanism.py +342 -367
  59. {musica-0.11.1.3 → musica-0.12.0}/musica/tools/prepare_build_environment_linux.sh +8 -6
  60. musica-0.12.0/musica/tools/repair_wheel_gpu.sh +40 -0
  61. {musica-0.11.1.3 → musica-0.12.0}/musica/types.py +4 -6
  62. {musica-0.11.1.3 → musica-0.12.0}/pyproject.toml +5 -4
  63. musica-0.12.0/src/CMakeLists.txt +112 -0
  64. {musica-0.11.1.3 → musica-0.12.0}/src/micm/cuda_availability.cpp +2 -0
  65. {musica-0.11.1.3 → musica-0.12.0}/src/packaging/CMakeLists.txt +1 -1
  66. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/micm/micm_c_api.cpp +8 -8
  67. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/micm/micm_wrapper.cpp +1 -1
  68. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/micm/parser.cpp +6 -6
  69. musica-0.12.0/tutorial/1. multiple_grid_cells.ipynb +515 -0
  70. musica-0.12.0/tutorial/2. hypercube.ipynb +529 -0
  71. musica-0.12.0/tutorial/3. user_defined_reactions.ipynb +515 -0
  72. musica-0.11.1.3/README.md +0 -118
  73. musica-0.11.1.3/musica/CMakeLists.txt +0 -47
  74. musica-0.11.1.3/musica/__init__.py +0 -3
  75. musica-0.11.1.3/musica/binding.cpp +0 -19
  76. musica-0.11.1.3/musica/mechanism_configuration.py +0 -1291
  77. musica-0.11.1.3/musica/tools/repair_wheel_gpu.sh +0 -31
  78. musica-0.11.1.3/src/CMakeLists.txt +0 -137
  79. musica-0.11.1.3/src/micm/CMakeLists.txt +0 -11
  80. musica-0.11.1.3/src/tuvx/CMakeLists.txt +0 -18
  81. {musica-0.11.1.3 → musica-0.12.0}/.clang-format +0 -0
  82. {musica-0.11.1.3 → musica-0.12.0}/.clang-tidy +0 -0
  83. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/clang_format.yml +0 -0
  84. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/clang_tidy.yml +0 -0
  85. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/close_stale_issues.yml +0 -0
  86. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/docker.yml +0 -0
  87. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/fetch_content_integration.yml +0 -0
  88. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/format-python.yml +0 -0
  89. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/gh_pages.yml +0 -0
  90. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/mac.yml +0 -0
  91. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/python-tests.yml +0 -0
  92. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/python-wheels.yml +0 -0
  93. {musica-0.11.1.3 → musica-0.12.0}/.github/workflows/ubuntu.yml +0 -0
  94. {musica-0.11.1.3 → musica-0.12.0}/LICENSE +0 -0
  95. {musica-0.11.1.3 → musica-0.12.0}/cmake/CodeCoverage.cmake +0 -0
  96. {musica-0.11.1.3 → musica-0.12.0}/cmake/FindSphinx.cmake +0 -0
  97. {musica-0.11.1.3 → musica-0.12.0}/cmake/SetDefaults.cmake +0 -0
  98. {musica-0.11.1.3 → musica-0.12.0}/cmake/cmake_uninstall.cmake.in +0 -0
  99. {musica-0.11.1.3 → musica-0.12.0}/cmake/musica-fortran.pc.in +0 -0
  100. {musica-0.11.1.3 → musica-0.12.0}/cmake/musica.pc.in +0 -0
  101. {musica-0.11.1.3 → musica-0.12.0}/cmake/musica.settings.in +0 -0
  102. {musica-0.11.1.3 → musica-0.12.0}/cmake/musicaConfig.cmake.in +0 -0
  103. {musica-0.11.1.3 → musica-0.12.0}/cmake/silence_warnings.cmake +0 -0
  104. {musica-0.11.1.3 → musica-0.12.0}/cmake/summary.cmake +0 -0
  105. {musica-0.11.1.3 → musica-0.12.0}/cmake/test_util.cmake +0 -0
  106. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/TS1/config.json +0 -0
  107. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/TS1/initial_conditions.csv +0 -0
  108. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/TS1/reactions.json +0 -0
  109. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/TS1/species.json +0 -0
  110. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/analytical/config.json +0 -0
  111. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/analytical/reactions.json +0 -0
  112. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/analytical/species.json +0 -0
  113. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/carbon_bond_5/config.json +0 -0
  114. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/carbon_bond_5/initial_conditions.csv +0 -0
  115. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/carbon_bond_5/reactions.json +0 -0
  116. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/carbon_bond_5/species.json +0 -0
  117. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/chapman/config.json +0 -0
  118. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/chapman/initial_conditions.csv +0 -0
  119. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/chapman/reactions.json +0 -0
  120. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/chapman/species.json +0 -0
  121. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/robertson/config.json +0 -0
  122. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/robertson/initial_conditions.csv +0 -0
  123. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/robertson/reactions.json +0 -0
  124. {musica-0.11.1.3/configs → musica-0.12.0/configs/v0}/robertson/species.json +0 -0
  125. {musica-0.11.1.3 → musica-0.12.0}/configs/v1/chapman/config.yaml +0 -0
  126. {musica-0.11.1.3/configs/v1 → musica-0.12.0/configs/v1/full_configuration}/full_configuration.json +0 -0
  127. {musica-0.11.1.3/configs/v1 → musica-0.12.0/configs/v1/full_configuration}/full_configuration.yaml +0 -0
  128. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile +0 -0
  129. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.coverage +0 -0
  130. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.docs +0 -0
  131. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.fortran-gcc +0 -0
  132. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.fortran-gcc.integration +0 -0
  133. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.fortran-intel +0 -0
  134. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.fortran-intel.pkgconfig +0 -0
  135. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.fortran-nvhpc +0 -0
  136. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.fortran-nvhpc.pkgconfig +0 -0
  137. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.memcheck +0 -0
  138. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.mpi +0 -0
  139. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.mpi_openmp +0 -0
  140. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.nvhpc +0 -0
  141. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.openmp +0 -0
  142. {musica-0.11.1.3 → musica-0.12.0}/docker/Dockerfile.python-tests +0 -0
  143. {musica-0.11.1.3 → musica-0.12.0}/docs/CMakeLists.txt +0 -0
  144. {musica-0.11.1.3 → musica-0.12.0}/docs/Doxyfile.in +0 -0
  145. {musica-0.11.1.3 → musica-0.12.0}/docs/Makefile +0 -0
  146. {musica-0.11.1.3 → musica-0.12.0}/docs/Software Development Plan.pdf +0 -0
  147. {musica-0.11.1.3 → musica-0.12.0}/docs/make.bat +0 -0
  148. {musica-0.11.1.3 → musica-0.12.0}/docs/requirements.txt +0 -0
  149. {musica-0.11.1.3 → musica-0.12.0}/docs/source/_static/custom.css +0 -0
  150. {musica-0.11.1.3 → musica-0.12.0}/docs/source/_static/favicon/favicon.ico +0 -0
  151. {musica-0.11.1.3 → musica-0.12.0}/docs/source/_static/index_api.svg +0 -0
  152. {musica-0.11.1.3 → musica-0.12.0}/docs/source/_static/index_contribute.svg +0 -0
  153. {musica-0.11.1.3 → musica-0.12.0}/docs/source/_static/index_getting_started.svg +0 -0
  154. {musica-0.11.1.3 → musica-0.12.0}/docs/source/_static/index_user_guide.svg +0 -0
  155. {musica-0.11.1.3 → musica-0.12.0}/docs/source/_static/switcher.json +0 -0
  156. {musica-0.11.1.3 → musica-0.12.0}/docs/source/api/C++.rst +0 -0
  157. {musica-0.11.1.3 → musica-0.12.0}/docs/source/api/index.rst +0 -0
  158. {musica-0.11.1.3 → musica-0.12.0}/docs/source/api/python.rst +0 -0
  159. {musica-0.11.1.3 → musica-0.12.0}/docs/source/conf.py +0 -0
  160. {musica-0.11.1.3 → musica-0.12.0}/docs/source/contributing/index.rst +0 -0
  161. {musica-0.11.1.3 → musica-0.12.0}/docs/source/getting_started/getting_started.rst +0 -0
  162. {musica-0.11.1.3 → musica-0.12.0}/docs/source/getting_started/installation.rst +0 -0
  163. {musica-0.11.1.3 → musica-0.12.0}/docs/source/getting_started/overview.rst +0 -0
  164. {musica-0.11.1.3 → musica-0.12.0}/docs/source/index.rst +0 -0
  165. {musica-0.11.1.3 → musica-0.12.0}/docs/source/references.bib +0 -0
  166. {musica-0.11.1.3 → musica-0.12.0}/docs/source/tutorial/chapter0.rst +0 -0
  167. {musica-0.11.1.3 → musica-0.12.0}/docs/source/tutorial/chapter1.rst +0 -0
  168. {musica-0.11.1.3 → musica-0.12.0}/docs/source/tutorial/chapter2.rst +0 -0
  169. {musica-0.11.1.3 → musica-0.12.0}/docs/source/tutorial/tutorial.rst +0 -0
  170. {musica-0.11.1.3 → musica-0.12.0}/docs/source/user_guide/configurations.rst +0 -0
  171. {musica-0.11.1.3 → musica-0.12.0}/docs/source/user_guide/fortran_c.rst +0 -0
  172. {musica-0.11.1.3 → musica-0.12.0}/docs/source/user_guide/index.rst +0 -0
  173. {musica-0.11.1.3 → musica-0.12.0}/fortran/CMakeLists.txt +0 -0
  174. {musica-0.11.1.3 → musica-0.12.0}/fortran/micm/CMakeLists.txt +0 -0
  175. {musica-0.11.1.3 → musica-0.12.0}/fortran/micm/micm.F90 +0 -0
  176. {musica-0.11.1.3 → musica-0.12.0}/fortran/micm/state.F90 +0 -0
  177. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/CMakeLists.txt +0 -0
  178. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/fetch_content_integration/CMakeLists.txt +0 -0
  179. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/fetch_content_integration/test_get_micm_version.F90 +0 -0
  180. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/fetch_content_integration/test_tuvx_api.F90 +0 -0
  181. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/test_simple.F90 +0 -0
  182. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/tutorial/CMakeLists.txt +0 -0
  183. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/tutorial/demo.F90 +0 -0
  184. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/unit/CMakeLists.txt +0 -0
  185. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/unit/tuvx.F90 +0 -0
  186. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/unit/tuvx_openmp.F90 +0 -0
  187. {musica-0.11.1.3 → musica-0.12.0}/fortran/test/unit/util.F90 +0 -0
  188. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/CMakeLists.txt +0 -0
  189. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/grid.F90 +0 -0
  190. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/grid_map.F90 +0 -0
  191. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/profile.F90 +0 -0
  192. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/profile_map.F90 +0 -0
  193. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/radiator.F90 +0 -0
  194. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/radiator_map.F90 +0 -0
  195. {musica-0.11.1.3 → musica-0.12.0}/fortran/tuvx/tuvx.F90 +0 -0
  196. {musica-0.11.1.3 → musica-0.12.0}/fortran/util.F90 +0 -0
  197. {musica-0.11.1.3 → musica-0.12.0}/include/musica/component_versions.hpp +0 -0
  198. {musica-0.11.1.3 → musica-0.12.0}/include/musica/error.hpp +0 -0
  199. {musica-0.11.1.3 → musica-0.12.0}/include/musica/micm/chemistry.hpp +0 -0
  200. {musica-0.11.1.3 → musica-0.12.0}/include/musica/micm/cuda_availability.hpp +0 -0
  201. {musica-0.11.1.3 → musica-0.12.0}/include/musica/micm/micm.hpp +0 -0
  202. {musica-0.11.1.3 → musica-0.12.0}/include/musica/micm/micm_c_interface.hpp +0 -0
  203. {musica-0.11.1.3 → musica-0.12.0}/include/musica/micm/parse.hpp +0 -0
  204. {musica-0.11.1.3 → musica-0.12.0}/include/musica/micm/state.hpp +0 -0
  205. {musica-0.11.1.3 → musica-0.12.0}/include/musica/micm/state_c_interface.hpp +0 -0
  206. {musica-0.11.1.3 → musica-0.12.0}/include/musica/tuvx/grid.hpp +0 -0
  207. {musica-0.11.1.3 → musica-0.12.0}/include/musica/tuvx/grid_map.hpp +0 -0
  208. {musica-0.11.1.3 → musica-0.12.0}/include/musica/tuvx/profile.hpp +0 -0
  209. {musica-0.11.1.3 → musica-0.12.0}/include/musica/tuvx/profile_map.hpp +0 -0
  210. {musica-0.11.1.3 → musica-0.12.0}/include/musica/tuvx/radiator.hpp +0 -0
  211. {musica-0.11.1.3 → musica-0.12.0}/include/musica/tuvx/radiator_map.hpp +0 -0
  212. {musica-0.11.1.3 → musica-0.12.0}/include/musica/tuvx/tuvx.hpp +0 -0
  213. {musica-0.11.1.3 → musica-0.12.0}/include/musica/util.hpp +0 -0
  214. {musica-0.11.1.3 → musica-0.12.0}/include/musica/version.hpp +0 -0
  215. {musica-0.11.1.3 → musica-0.12.0}/musica/test/examples/v0/config.json +0 -0
  216. {musica-0.11.1.3 → musica-0.12.0}/musica/test/examples/v0/config.yaml +0 -0
  217. {musica-0.11.1.3 → musica-0.12.0}/musica/test/examples/v0/reactions.json +0 -0
  218. {musica-0.11.1.3 → musica-0.12.0}/musica/test/examples/v0/reactions.yaml +0 -0
  219. {musica-0.11.1.3 → musica-0.12.0}/musica/test/examples/v0/species.json +0 -0
  220. {musica-0.11.1.3 → musica-0.12.0}/musica/test/examples/v0/species.yaml +0 -0
  221. {musica-0.11.1.3 → musica-0.12.0}/musica/test/tuvx.py +0 -0
  222. {musica-0.11.1.3 → musica-0.12.0}/musica/tools/prepare_build_environment_windows.sh +0 -0
  223. {musica-0.11.1.3 → musica-0.12.0}/spack/packages/musica/package.py +0 -0
  224. {musica-0.11.1.3 → musica-0.12.0}/spack/repo.yaml +0 -0
  225. {musica-0.11.1.3 → musica-0.12.0}/src/component_versions.cpp +0 -0
  226. {musica-0.11.1.3 → musica-0.12.0}/src/micm/micm.cpp +0 -0
  227. {musica-0.11.1.3 → musica-0.12.0}/src/micm/micm_c_interface.cpp +0 -0
  228. {musica-0.11.1.3 → musica-0.12.0}/src/micm/parse.cpp +0 -0
  229. {musica-0.11.1.3 → musica-0.12.0}/src/micm/state.cpp +0 -0
  230. {musica-0.11.1.3 → musica-0.12.0}/src/micm/state_c_interface.cpp +0 -0
  231. {musica-0.11.1.3 → musica-0.12.0}/src/micm/v0_parse.cpp +0 -0
  232. {musica-0.11.1.3 → musica-0.12.0}/src/micm/v1_parse.cpp +0 -0
  233. {musica-0.11.1.3 → musica-0.12.0}/src/packaging/modulefile.lua.in +0 -0
  234. {musica-0.11.1.3 → musica-0.12.0}/src/test/CMakeLists.txt +0 -0
  235. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/fixed/O2_cross_section.nc +0 -0
  236. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/fixed/O2_parameters.txt +0 -0
  237. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/fixed/bar_cross_section.nc +0 -0
  238. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/fixed/config.json +0 -0
  239. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/fixed/foo_cross_section.nc +0 -0
  240. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/fixed/stand_alone_tuvx_config.json +0 -0
  241. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/from_host/O2_cross_section.nc +0 -0
  242. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/from_host/O2_parameters.txt +0 -0
  243. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/from_host/bar_cross_section.nc +0 -0
  244. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/from_host/config.json +0 -0
  245. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/tuvx/from_host/foo_cross_section.nc +0 -0
  246. {musica-0.11.1.3 → musica-0.12.0}/src/test/data/util_index_mapping_from_file.json +0 -0
  247. {musica-0.11.1.3 → musica-0.12.0}/src/test/test_simple.c +0 -0
  248. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/CMakeLists.txt +0 -0
  249. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/component_versions.cpp +0 -0
  250. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/micm/CMakeLists.txt +0 -0
  251. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/tuvx/CMakeLists.txt +0 -0
  252. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/tuvx/tuvx_c_api.cpp +0 -0
  253. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/tuvx/tuvx_run_from_config.cpp +0 -0
  254. {musica-0.11.1.3 → musica-0.12.0}/src/test/unit/util.cpp +0 -0
  255. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/grid.cpp +0 -0
  256. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/grid_map.cpp +0 -0
  257. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface.F90 +0 -0
  258. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface_grid.F90 +0 -0
  259. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface_grid_map.F90 +0 -0
  260. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface_profile.F90 +0 -0
  261. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface_profile_map.F90 +0 -0
  262. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface_radiator.F90 +0 -0
  263. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface_radiator_map.F90 +0 -0
  264. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/interface_util.F90 +0 -0
  265. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/profile.cpp +0 -0
  266. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/profile_map.cpp +0 -0
  267. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/radiator.cpp +0 -0
  268. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/radiator_map.cpp +0 -0
  269. {musica-0.11.1.3 → musica-0.12.0}/src/tuvx/tuvx.cpp +0 -0
  270. {musica-0.11.1.3 → musica-0.12.0}/src/util.cpp +0 -0
  271. {musica-0.11.1.3 → musica-0.12.0}/src/version.cpp.in +0 -0
  272. {musica-0.11.1.3 → musica-0.12.0}/valgrind.supp +0 -0
@@ -17,3 +17,4 @@
17
17
  !pyproject.toml
18
18
  !LICENSE
19
19
  !README.md
20
+ !wheelhouse
@@ -13,7 +13,8 @@ concurrency:
13
13
 
14
14
  jobs:
15
15
  mingw:
16
- runs-on: windows-2019
16
+ runs-on: windows-latest
17
+ continue-on-error: true
17
18
  strategy:
18
19
  matrix:
19
20
  architecture: [x64]
@@ -24,10 +25,7 @@ jobs:
24
25
  uses: egor-tensin/setup-mingw@v2
25
26
  with:
26
27
  platform: ${{ matrix.architecture }}
27
- version: 12.2.0 # https://github.com/egor-tensin/setup-mingw/issues/14
28
-
29
- - uses: actions/setup-python@v5
30
- - run: pip install numpy
28
+ static: 0
31
29
 
32
30
  - name: Run Cmake
33
31
  run: cmake -S . -B build -G "MinGW Makefiles" -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
@@ -40,8 +38,8 @@ jobs:
40
38
  cd build
41
39
  ctest -C Debug --rerun-failed --output-on-failure . --verbose
42
40
 
43
- msvc2022:
44
- runs-on: windows-2022
41
+ msvc:
42
+ runs-on: windows-latest
45
43
  continue-on-error: true
46
44
  strategy:
47
45
  matrix:
@@ -58,10 +56,8 @@ jobs:
58
56
  python-version: '3.x'
59
57
  architecture: x86
60
58
 
61
- - run: pip install numpy
62
-
63
59
  - name: Run CMake
64
- run: cmake -S . -B build -G "Visual Studio 17 2022" -A ${{ matrix.architecture }} -D MUSICA_GIT_TAG=${{ github.sha }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
60
+ run: cmake -S . -B build -A ${{ matrix.architecture }} -D MUSICA_GIT_TAG=${{ github.sha }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
65
61
 
66
62
  - name: Build
67
63
  run: cmake --build build --config ${{ matrix.build_type }} --parallel
@@ -70,11 +66,11 @@ jobs:
70
66
  run: cd build ; ctest -C ${{ matrix.build_type }} --output-on-failure --verbose
71
67
 
72
68
  clang:
73
- runs-on: windows-2019
69
+ runs-on: windows-latest
74
70
  continue-on-error: true
75
71
  strategy:
76
72
  matrix:
77
- version: [12.0.0, 13.0.0, 14.0.0, 15.0.0, 16.0.0, 17.0.1, 18.1.0, 19.1.0, 20.1.0]
73
+ version: [19.1.0, 20.1.0]
78
74
 
79
75
  steps:
80
76
  - uses: actions/checkout@v4
@@ -82,9 +78,6 @@ jobs:
82
78
  - name: Install Clang
83
79
  run: curl -fsSL -o LLVM${{ matrix.version }}.exe https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.version }}/LLVM-${{ matrix.version }}-win64.exe ; 7z x LLVM${{ matrix.version }}.exe -y -o"C:/Program Files/LLVM"
84
80
 
85
- - uses: actions/setup-python@v5
86
- - run: pip install numpy
87
-
88
81
  - name: Run CMake
89
82
  run: cmake -S . -B build -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang++.exe" -DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang.exe" -G"MinGW Makefiles" -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
90
83
 
@@ -95,7 +88,7 @@ jobs:
95
88
  run: cd build ; ctest -C Debug --output-on-failure --verbose
96
89
 
97
90
  clang-cl-11:
98
- runs-on: windows-2019
91
+ runs-on: windows-latest
99
92
  continue-on-error: true
100
93
  strategy:
101
94
  matrix:
@@ -111,11 +104,8 @@ jobs:
111
104
  python-version: '3.x'
112
105
  architecture: x86
113
106
 
114
- - uses: actions/setup-python@v5
115
- - run: pip install numpy
116
-
117
107
  - name: Run CMake
118
- run: cmake -S . -B build -G "Visual Studio 16 2019" -A ${{ matrix.architecture }} -T ClangCL -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
108
+ run: cmake -S . -B build -A ${{ matrix.architecture }} -T ClangCL -D MUSICA_GIT_TAG=${{ github.sha }} -D MUSICA_ENABLE_TUVX=OFF -D MUSICA_ENABLE_PYTHON_LIBRARY=ON -D CMAKE_POLICY_VERSION_MINIMUM=3.5
119
109
 
120
110
  - name: Build
121
111
  run: cmake --build build --config Debug --parallel
@@ -125,6 +115,7 @@ jobs:
125
115
 
126
116
  fortran:
127
117
  runs-on: windows-latest
118
+ continue-on-error: true
128
119
  strategy:
129
120
  fail-fast: false
130
121
  matrix:
@@ -11,6 +11,8 @@ musica.cpython-*
11
11
  musica.egg-info
12
12
  **/*.mod
13
13
 
14
+ .venv
15
+ .pytest_cache
14
16
  **/*__pycache__*
15
17
  **/*.pyc
16
18
  wheelhouse
@@ -0,0 +1,80 @@
1
+ {
2
+ "title": "MUSICA: Multi-Scale Infrastructure for Chemistry and Aerosols",
3
+ "description": "MUSICA is a multi-language library for performing computational simulations in atmospheric chemistry.",
4
+ "license": {
5
+ "id": "Apache-2.0"
6
+ },
7
+ "creators": [
8
+ {
9
+ "name": "Dawson, Matthew",
10
+ "affiliation": "National Center for Atmospheric Research (NCAR)",
11
+ "orcid": ""
12
+ },
13
+ {
14
+ "name": "Gim, Jiwon",
15
+ "affiliation": "National Center for Atmospheric Research (NCAR)",
16
+ "orcid": ""
17
+ },
18
+ {
19
+ "name": "Fillmore, David",
20
+ "affiliation": "National Center for Atmospheric Research (NCAR)",
21
+ "orcid": ""
22
+ },
23
+ {
24
+ "name": "Shores, Kyle",
25
+ "affiliation": "National Center for Atmospheric Research (NCAR)",
26
+ "orcid": "0000-0002-4272-5187"
27
+ },
28
+ {
29
+ "name": "Thind, Montek",
30
+ "affiliation": "National Center for Atmospheric Research (NCAR)",
31
+ "orcid": ""
32
+ },
33
+ {
34
+ "name": "Jian Sun",
35
+ "affiliation": "National Center for Atmospheric Research (NCAR)",
36
+ "orcid": ""
37
+ }
38
+ ],
39
+ "contributors": [
40
+ {
41
+ "name": "ACOM MUSICA Development Team",
42
+ "type": "ResearchGroup"
43
+ },
44
+ {
45
+ "name": "Angela Pak",
46
+ "type": "ProjectMember"
47
+ },
48
+ {
49
+ "name": "Aidan Winney",
50
+ "type": "ProjectMember"
51
+ },
52
+ {
53
+ "name": "Dee Grant",
54
+ "type": "Other"
55
+ },
56
+ {
57
+ "name": "Ward Fisher",
58
+ "type": "Other"
59
+ },
60
+ {
61
+ "name": "Qina Tan",
62
+ "type": "ProjectMember"
63
+ }
64
+ ],
65
+ "keywords": [
66
+ "atmospheric chemistry",
67
+ "chemical mechanisms",
68
+ "air quality modeling",
69
+ "photolysis",
70
+ "MICM",
71
+ "TUV-x"
72
+ ],
73
+ "related_identifiers": [
74
+ {
75
+ "identifier": "10.1175/BAMS-D-19-0331.1",
76
+ "relation": "cites",
77
+ "description": "The foundational MUSICA paper describing the scientific vision"
78
+ }
79
+ ]
80
+ }
@@ -0,0 +1,59 @@
1
+ # MUSICA Authors and Contributors
2
+
3
+ This file acknowledges all individuals who have contributed to the MUSICA project.
4
+
5
+ ## Core Development Team
6
+
7
+ The following individuals are the primary developers and maintainers of the MUSICA software:
8
+
9
+ - **Matthew Dawson** (mattdawson@ucar.edu) - Core Developer
10
+ - **Jiwon Gim** (jiwongim@ucar.edu) - Core Developer
11
+ - **David Fillmore** (fillmore@ucar.edu) - Core Developer
12
+ - **Kyle Shores** (kshores@ucar.edu) - Core Developer
13
+ - **Montek Thind** (mthind@ucar.edu) - Core Developer
14
+ - **Jian Sun** - Core Developer
15
+
16
+ ## Scientific Leadership and Vision
17
+
18
+ The scientific leadership and vision for MUSICA are provided by the authors of the [foundational paper](https://doi.org/10.1175/BAMS-D-19-0331.1).
19
+ This software implements that vision. For a full list of scientific authors,
20
+ please refer to our [CITATION.cff](CITATION.cff) file. To cite the software, use the Zenodo DOI from our latest release.
21
+
22
+ ## Additional Contributors
23
+
24
+ <!-- Contributors will be added here as they join the project -->
25
+ <!-- Format: -->
26
+ <!-- - **Name** (affiliation) - Brief description of contribution -->
27
+
28
+ - **Aidan Winney** - Documentation and Tutorials
29
+ - **Angela Pak** - Documentation and Tutorials
30
+ - **Dee Grant** - Improving the Python API
31
+ - **Qina Tan** - Implementing the CUDA-based Rosenbrock solver
32
+
33
+ ## Recognition Policy
34
+
35
+ We recognize contributors at different levels based on their involvement:
36
+
37
+ - **Core Development Team**: Listed in `pyproject.toml`, `.zenodo.json` (creators), and this file
38
+ - **Additional Contributors**: Listed in `.zenodo.json` (contributors) and this file
39
+ - **All Contributors**: Automatically tracked by GitHub's contributor statistics
40
+
41
+ See our [Contributing Guide](CONTRIBUTING.md) for more details on how contributions are recognized.
42
+
43
+ ## How to Contribute
44
+
45
+ We welcome contributions from the community! Please see our [Contributing Guide](CONTRIBUTING.md) for information on how to get involved.
46
+
47
+ ## Acknowledgments
48
+
49
+ We thank the broader atmospheric chemistry modeling community for their feedback, testing, and contributions to making MUSICA a robust and useful tool for scientific research.
50
+
51
+ ---
52
+
53
+ ## Citation Information
54
+
55
+ For citation purposes, please refer to our [CITATION.cff](CITATION.cff) file for the appropriate citations based on your use case. The main citations are:
56
+
57
+ 1. **For the MUSICA vision and scientific framework**: [Pfister et al., 2020](https://doi.org/10.1175/BAMS-D-19-0331.1)
58
+ 2. **For the MUSICA software evaluation**: [Schwantes et al., 2022](https://doi.org/10.1029/2021MS002889)
59
+ 3. **For the software itself**: Use the Zenodo DOI from our latest release
@@ -64,4 +64,4 @@ number: 10
64
64
  page: "E1743 - E1760"
65
65
  doi: "10.1175/BAMS-D-19-0331.1"
66
66
  url: "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
67
- version: 0.10.0
67
+ version: 0.12.0
@@ -1,7 +1,7 @@
1
1
  cmake_minimum_required(VERSION 3.21)
2
2
 
3
3
  # must be on the same line so that pyproject.toml can correctly identify the version
4
- project(musica-distribution VERSION 0.11.1.3)
4
+ project(musica-distribution VERSION 0.12.0)
5
5
 
6
6
  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake)
7
7
  set(CMAKE_USER_MAKE_RULES_OVERRIDE ${PROJECT_SOURCE_DIR}/cmake/SetDefaults.cmake)
@@ -89,6 +89,13 @@ if(MUSICA_BUILD_C_CXX_INTERFACE)
89
89
  endif()
90
90
  endif()
91
91
 
92
+ # since sources are collected so that python libraries can target them directly,
93
+ # we need to know if we are targeting Fortran before we collect the sources
94
+ # otherwise cmake freaks out, and I don't know why, but this fixes it
95
+ if(MUSICA_ENABLE_TUVX)
96
+ enable_language(Fortran)
97
+ endif()
98
+
92
99
  # Add flags when using the ClangCL toolset
93
100
  if(CMAKE_GENERATOR_TOOLSET STREQUAL "ClangCL")
94
101
  list(APPEND musica_compile_definitions MUSICA_USING_CLANGCL)
@@ -0,0 +1,98 @@
1
+ # Contributing to MUSICA
2
+
3
+ We welcome contributions from the community! This guide outlines how you can contribute to the MUSICA project.
4
+
5
+ ## Getting Started
6
+
7
+ ### Development Setup
8
+
9
+ 1. **Clone the repository:**
10
+ ```bash
11
+ git clone https://github.com/NCAR/musica.git
12
+ cd musica
13
+ ```
14
+
15
+ 2. **Build the project:**
16
+ ```bash
17
+ mkdir build && cd build
18
+ ccmake ..
19
+ make
20
+ ```
21
+
22
+ 3. **Python development setup:**
23
+ ```bash
24
+ pip install -e .
25
+ ```
26
+
27
+ For detailed developer options and dependency management, see our [Software Development Plan](docs/Software%20Development%20Plan.pdf).
28
+
29
+ ## Types of Contributions
30
+
31
+ We appreciate all types of contributions:
32
+
33
+ ### Code Contributions
34
+ - Bug fixes
35
+ - New features
36
+ - Performance improvements
37
+ - Test coverage improvements
38
+
39
+ ### Documentation
40
+ - README improvements
41
+ - Code documentation
42
+ - Tutorial and example updates
43
+ - Wiki contributions
44
+
45
+ ### Testing and Validation
46
+ - Bug reports with reproducible examples
47
+ - Testing on different platforms
48
+ - Validation against known results
49
+
50
+ ### Scientific Contributions
51
+ - New chemical mechanisms
52
+ - Algorithm improvements
53
+ - Performance optimizations
54
+
55
+ ## Contribution Process
56
+
57
+ 1. **Fork the repository** and create a feature branch
58
+ 2. **Make your changes** following our coding standards
59
+ 3. **Add tests** for new functionality
60
+ 4. **Update documentation** as needed
61
+ 5. **Submit a pull request** with a clear description
62
+
63
+ ## Recognition Policy
64
+
65
+ We believe in recognizing all contributors appropriately:
66
+
67
+ ### Core Development Team
68
+ Contributors who make substantial, ongoing contributions to the codebase, architecture, or project direction will be listed as authors in:
69
+ - `pyproject.toml` (for Python package metadata)
70
+ - `.zenodo.json` (as "creators" for software citations)
71
+ - `AUTHORS.md` (as core developers)
72
+
73
+ ### Additional Contributors
74
+ Contributors who make valuable but smaller contributions will be acknowledged in:
75
+ - `.zenodo.json` (as "contributors" with appropriate type)
76
+ - `AUTHORS.md` (in the Additional Contributors section)
77
+ - GitHub's contributor list (automatic)
78
+
79
+ ## Development Guidelines
80
+
81
+ ### Code Standards
82
+ - Follow existing code style and conventions
83
+ - Include appropriate tests for new functionality
84
+ - Document new features and APIs
85
+
86
+ ### Dependency Management
87
+ We use CMake for C++ dependencies and pip for Python dependencies. See our [README](README.md#developer-options) for information about specifying dependency versions during development.
88
+
89
+ ### GPU Support
90
+ If contributing GPU-related code, please test on appropriate hardware and follow our GPU build guidelines.
91
+
92
+ ## Questions?
93
+
94
+ - Check our [documentation](https://ncar.github.io/musica/index.html)
95
+ - Read our [Software Development Plan](docs/Software%20Development%20Plan.pdf)
96
+ - Contact the maintainers at musica-support@ucar.edu
97
+
98
+ Thank you for your interest in contributing to MUSICA!
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: musica
3
- Version: 0.11.1.3
3
+ Version: 0.12.0
4
4
  Summary: MUSICA is a Python library for performing computational simulations in atmospheric chemistry.
5
5
  Author-Email: Matthew Dawsom <mattdawson@ucar.edu>, Jiwon Gim <jiwongim@ucar.edu>, David Fillmore <fillmore@ucar.edu>, Kyle Shores <kshores@ucar.edu>, Montek Thind <mthind@ucar.edu>
6
6
  Maintainer-Email: ACOM MUSICA Developers <musica-support@ucar.edu>
@@ -207,6 +207,7 @@ License: Apache License
207
207
  limitations under the License.
208
208
 
209
209
  Project-URL: homepage, https://wiki.ucar.edu/display/MUSICA/MUSICA+Home
210
+ Requires-Dist: pyyaml>=6.0.2
210
211
  Provides-Extra: test
211
212
  Requires-Dist: numpy; extra == "test"
212
213
  Requires-Dist: pytest; extra == "test"
@@ -233,24 +234,132 @@ Multi-Scale Infrastructure for Chemistry and Aerosols
233
234
  MUSICA is a collection of modeling software, tools, and grids, that
234
235
  allow for robust modeling of chemistry in Earth's atmosphere.
235
236
 
236
- At present the project encompasses these components
237
+ At present the project encompasses these core components
237
238
  - [TUV-x](https://github.com/NCAR/tuv-x)
238
239
  - A photolysis rate calculator
239
240
 
240
241
  - [MICM](https://github.com/NCAR/micm)
241
242
  - Model Independent Chemical Module
242
243
 
243
- ## Available grids
244
+ - [Mechanism Configuration](https://github.com/NCAR/MechanismConfiguration)
245
+ - The standardized format to describe atmospheric chemistry
244
246
 
245
- Pre-made grids for use in MUSICA are available [here](https://wiki.ucar.edu/display/MUSICA/Available+Grids).
247
+ These components are used to drive the MUSICA software ecosystem. This is a snapshot of how MUSICA can be used with different
248
+ models.
249
+
250
+ ![MUSICA Ecosystem](docs/source/_static/ecosystem.png)
251
+
252
+ # Installation
253
+ MUSICA is installable via pip for Python or CMake for C++.
254
+
255
+ ## Pip
256
+ ```
257
+ pip install musica
258
+ ```
259
+
260
+ ## CMake
261
+ ```
262
+ $ git clone https://github.com/NCAR/musica.git
263
+ $ cd musica
264
+ $ mkdir build
265
+ $ cd build
266
+ $ ccmake ..
267
+ $ make
268
+ $ make install
269
+ ```
270
+
271
+ # Using the MUSICA Python API
272
+ MUSICA makes its chemical mechanism analysis and visualization available through a Python API. The following example works through solving a simple chemistry system. Please refer to the [official documentation](https://ncar.github.io/musica/index.html) for further tutorials and examples.
273
+ ```
274
+ # --- Import Musica ---
275
+ import musica
276
+ import musica.mechanism_configuration as mc
277
+
278
+ # --- 1. Define the chemical system of interest ---
279
+ A = mc.Species(name="A")
280
+ B = mc.Species(name="B")
281
+ C = mc.Species(name="C")
282
+ species = [A, B, C]
283
+ gas = mc.Phase(name="gas", species=species)
284
+
285
+ # --- 2. Define a mechanism of interest ---
286
+ # Through Musica, several different mechanisms can be explored to define reaction rates. Here, we use the Arrhenius equation as a simple example.
287
+
288
+ r1 = mc.Arrhenius(name="A->B", A=4.0e-3, C=50, reactants=[A], products=[B], gas_phase=gas)
289
+ r2 = mc.Arrhenius(name="B->C", A=1.2e-4, B=2.5, C=75, D=50, E=0.5, reactants=[B], products=[C], gas_phase=gas)
290
+
291
+ mechanism = mc.Mechanism(name="musica_example", species=species, phases=[gas], reactions=[r1, r2])
292
+
293
+ # --- 3. Create MICM solver ---
294
+ # A solver must be initialized with either a configuration file or a mechanism:
295
+
296
+ solver = musica.MICM(mechanism=mechanism, solver_type=musica.SolverType.rosenbrock_standard_order)
297
+
298
+ # --- 4. Define environmental conditions ---
299
+ temperature=300.0
300
+ pressure=101000.0
301
+
302
+ # --- 5. Create and initialize State ---
303
+ # In the model, conditions represent the starting environment for the reactions and are assigned by modifying the state.
304
+
305
+ state = solver.create_state()
306
+ state.set_concentrations({"A": 1.0, "B": 3.0, "C": 5.0})
307
+ state.set_conditions(temperature, pressure)
308
+ initial_pressure = state.get_conditions()['air_density'][0] # store for visualization and output
309
+
310
+ # --- 6. Time parameters ---
311
+ time_step = 4 # stepping
312
+ sim_length = 20 # total simulation time
313
+
314
+ # --- (Optional) 7. Save initial state (t=0) for output visualization ---
315
+ initial_row = {"time.s": 0.0, "ENV.temperature.K": temperature, "ENV.pressure.Pa": pressure, "ENV.air number density.mol m-3": state.get_conditions()['air_density'][0]}
316
+ initial_row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
317
+
318
+ # --- 8. Solve through time loop only ---
319
+ # The following loop simply solves the model per each time step:
320
+
321
+ curr_time = time_step
322
+ while curr_time <= sim_length:
323
+ solver.solve(state, time_step)
324
+ concentrations = state.get_concentrations()
325
+ curr_time += time_step
246
326
 
247
- # Contributors guide
248
- Checkout our [software development plan](docs/Software%20Development%20Plan.pdf)
249
- to see how you can contribute new science to MUSICA software.
327
+ # --- 9. Solve and create DataFrame ---
328
+ # It is likely more useful to solve at each time step and store the associated data:
329
+ import pandas as pd
330
+
331
+ output_data = [] # prepare to store output per time step
332
+ output_data.append(initial_row) # save t=0 data
333
+
334
+ curr_time = time_step
335
+ while curr_time <= sim_length:
336
+ solver.solve(state, time_step)
337
+ row = {
338
+ "time.s": curr_time,
339
+ "ENV.temperature.K": state.get_conditions()['temperature'][0],
340
+ "ENV.pressure.Pa": state.get_conditions()['pressure'][0],
341
+ "ENV.air number density.mol m-3": state.get_conditions()['air_density'][0]
342
+ }
343
+ row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
344
+ output_data.append(row)
345
+ curr_time += time_step
346
+
347
+ df = pd.DataFrame(output_data)
348
+ print(df)
349
+
350
+ # --- 10. Visualize Specific Results ---
351
+ import matplotlib.pyplot as plt
352
+
353
+ df.plot(x='time.s', y=['CONC.A.mol m-3', 'CONC.B.mol m-3', 'CONC.C.mol m-3'], title='Concentration over time', ylabel='Concentration (mol m-3)', xlabel='Time (s)')
354
+ plt.show()
355
+ ```
356
+
357
+ # Available grids
358
+ Pre-made grids for use in MUSICA are available [here](https://wiki.ucar.edu/display/MUSICA/Available+Grids).
250
359
 
251
360
  ## Developer Options
252
361
 
253
- ### Specifying dependency versions via paramaterization at configure time
362
+ ### Specifying dependency versions via parameterization at configure time
254
363
 
255
364
  Introduced in [Pull Request #124](https://github.com/NCAR/musica/pull/124), it is possible for developers to specify which versions of various dependencies should be used. These options are currently limited to those dependencies managed via `FetchContent`. This change allows for more easily testing `musica` against changes committed in different repositories and branches. The environmental variables introduced are outlined in the following table.
256
365
 
@@ -262,6 +371,7 @@ Introduced in [Pull Request #124](https://github.com/NCAR/musica/pull/124), it i
262
371
  | [MICM](https://github.com/NCAR/mcim.git) | MICM_GIT_REPOSITORY | MICM_GIT_TAG |
263
372
  | [TUV-X](https://github.com/NCAR/tuv-x.git) | TUVX_GIT_REPOSITORY | TUVX_GIT_TAG |
264
373
  | [PyBind11](https://github.com/pybind/pybind11) | PYBIND11_GIT_REPOSITORY | PYBIND11_GIT_TAG |
374
+ | [Mechanism Configuration](https://github.com/NCAR/MechanismConfiguration.git) | MECH_CONFIG_GIT_REPOSITORY | MECH_CONFIG_GIT_TAG |
265
375
 
266
376
  #### Example Usage
267
377
 
@@ -282,54 +392,80 @@ Specifying a specific version of `tuv-x` by has, but using the official reposito
282
392
  ### Python build
283
393
  Musica has python bindings. If you want to install the python package, you may `pip install musica`.
284
394
 
285
- To build the package locally,
395
+ #### PyPi
396
+ If you only want to use the CPU components,
286
397
 
287
398
  ```
288
- pip install -e .
399
+ pip install musica
289
400
  ```
290
401
 
291
- If you have an NVIDIA GPU and cuda installed, you can enable a build of musica with GPU support by setting the environment
292
- variable `BUILD_GPU`.
402
+ Note that GPU support has only been tested on linux. If you have an NVIDIA GPU and would like to take
403
+ advantage of our GPU solver, you must first [add the NVIDIA pypi index](https://docs.nvidia.com/cuda/cuda-quick-start-guide/#pip-wheels-linux) and then install musica with our gpu option.
293
404
 
294
405
  ```
295
- BUILD_GPU=1 pip install -e .
406
+ pip install --upgrade setuptools pip wheel
407
+ pip install nvidia-pyindex
408
+ pip install musica[gpu]
296
409
  ```
297
410
 
298
- ## Citing MUSICA
411
+ #### Local build
299
412
 
300
- MUSICA can be cited in at least two ways. The first is to cite [the paper](https://doi.org/10.1175/BAMS-D-19-0331.1) that defines the vision
301
- of the MUSICA software. The bibtex entry below can be used to generate a citaiton for this.
413
+ Musica has python bindings. To build the package locally,
302
414
 
303
415
  ```
304
- @Article { acom.software.musica-vision,
305
- author = "Gabriele G. Pfister and Sebastian D. Eastham and Avelino F. Arellano and Bernard Aumont and Kelley C. Barsanti and Mary C. Barth and Andrew Conley and Nicholas A. Davis and Louisa K. Emmons and Jerome D. Fast and Arlene M. Fiore and Benjamin Gaubert and Steve Goldhaber and Claire Granier and Georg A. Grell and Marc Guevara and Daven K. Henze and Alma Hodzic and Xiaohong Liu and Daniel R. Marsh and John J. Orlando and John M. C. Plane and Lorenzo M. Polvani and Karen H. Rosenlof and Allison L. Steiner and Daniel J. Jacob and Guy P. Brasseur",
306
- title = "The Multi-Scale Infrastructure for Chemistry and Aerosols (MUSICA)",
307
- journal = "Bulletin of the American Meteorological Society",
308
- year = "2020",
309
- publisher = "American Meteorological Society",
310
- address = "Boston MA, USA",
311
- volume = "101",
312
- number = "10",
313
- doi = "10.1175/BAMS-D-19-0331.1",
314
- pages= "E1743 - E1760",
315
- url = "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
316
- }
416
+ pip install -e .
317
417
  ```
318
418
 
319
- At present MUSICA is on version zero. MUSICAv0 can be cited using the bibtex entry below.
320
- MUSICAv0 description and evaluation:
419
+ If you have an NVIDIA GPU and cuda installed, you can enable a build of musica with GPU support by setting the environment
420
+ variable `BUILD_GPU`.
321
421
 
322
422
  ```
323
- @Article{acom.software.musica,
324
- author = {Schwantes, Rebecca H. and Lacey, Forrest G. and Tilmes, Simone and Emmons, Louisa K. and Lauritzen, Peter H. and Walters, Stacy and Callaghan, Patrick and Zarzycki, Colin M. and Barth, Mary C. and Jo, Duseong S. and Bacmeister, Julio T. and Neale, Richard B. and Vitt, Francis and Kluzek, Erik and Roozitalab, Behrooz and Hall, Samuel R. and Ullmann, Kirk and Warneke, Carsten and Peischl, Jeff and Pollack, Ilana B. and Flocke, Frank and Wolfe, Glenn M. and Hanisco, Thomas F. and Keutsch, Frank N. and Kaiser, Jennifer and Bui, Thao Paul V. and Jimenez, Jose L. and Campuzano-Jost, Pedro and Apel, Eric C. and Hornbrook, Rebecca S. and Hills, Alan J. and Yuan, Bin and Wisthaler, Armin},
325
- title = {Evaluating the Impact of Chemical Complexity and Horizontal Resolution on Tropospheric Ozone Over the Conterminous US With a Global Variable Resolution Chemistry Model},
326
- journal = {Journal of Advances in Modeling Earth Systems},
327
- volume = {14},
328
- number = {6},
329
- pages = {e2021MS002889},
330
- doi = {https://doi.org/10.1029/2021MS002889},
331
- url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2021MS002889},
332
- eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2021MS002889},
333
- year = {2022}
334
- }
423
+ BUILD_GPU=1 pip install -e .
335
424
  ```
425
+
426
+ # Contributing
427
+
428
+ We welcome contributions from the community! Please see our [Contributing Guide](CONTRIBUTING.md) for information on how to get involved.
429
+
430
+ For a complete list of contributors and authors, see [AUTHORS.md](AUTHORS.md).
431
+
432
+ # Citations
433
+
434
+ MUSICA can be cited in at least two ways:
435
+
436
+ 1. **Cite the foundational paper** that defines the vision of the MUSICA software:
437
+ - [Pfister et al., 2020, Bulletin of the American Meteorological Society](https://doi.org/10.1175/BAMS-D-19-0331.1)
438
+ - Use the following BibTeX entry:
439
+ ```
440
+ @Article { acom.software.musica-vision,
441
+ author = "Gabriele G. Pfister and Sebastian D. Eastham and Avelino F. Arellano and Bernard Aumont and Kelley C. Barsanti and Mary C. Barth and Andrew Conley and Nicholas A. Davis and Louisa K. Emmons and Jerome D. Fast and Arlene M. Fiore and Benjamin Gaubert and Steve Goldhaber and Claire Granier and Georg A. Grell and Marc Guevara and Daven K. Henze and Alma Hodzic and Xiaohong Liu and Daniel R. Marsh and John J. Orlando and John M. C. Plane and Lorenzo M. Polvani and Karen H. Rosenlof and Allison L. Steiner and Daniel J. Jacob and Guy P. Brasseur",
442
+ title = "The Multi-Scale Infrastructure for Chemistry and Aerosols (MUSICA)",
443
+ journal = "Bulletin of the American Meteorological Society",
444
+ year = "2020",
445
+ publisher = "American Meteorological Society",
446
+ address = "Boston MA, USA",
447
+ volume = "101",
448
+ number = "10",
449
+ doi = "10.1175/BAMS-D-19-0331.1",
450
+ pages= "E1743 - E1760",
451
+ url = "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
452
+ }
453
+ ```
454
+
455
+ 2. **Cite the MUSICA software and its evaluation** (MUSICAv0):
456
+ - [Schwantes et al., 2022, Journal of Advances in Modeling Earth Systems](https://doi.org/10.1029/2021MS002889)
457
+ - Use the following BibTeX entry:
458
+ ```
459
+ @Article{acom.software.musica,
460
+ author = {Schwantes, Rebecca H. and Lacey, Forrest G. and Tilmes, Simone and Emmons, Louisa K. and Lauritzen, Peter H. and Walters, Stacy and Callaghan, Patrick and Zarzycki, Colin M. and Barth, Mary C. and Jo, Duseong S. and Bacmeister, Julio T. and Neale, Richard B. and Vitt, Francis and Kluzek, Erik and Roozitalab, Behrooz and Hall, Samuel R. and Ullmann, Kirk and Warneke, Carsten and Peischl, Jeff and Pollack, Ilana B. and Flocke, Frank and Wolfe, Glenn M. and Hanisco, Thomas F. and Keutsch, Frank N. and Kaiser, Jennifer and Bui, Thao Paul V. and Jimenez, Jose L. and Campuzano-Jost, Pedro and Apel, Eric C. and Hornbrook, Rebecca S. and Hills, Alan J. and Yuan, Bin and Wisthaler, Armin},
461
+ title = {Evaluating the Impact of Chemical Complexity and Horizontal Resolution on Tropospheric Ozone Over the Conterminous US With a Global Variable Resolution Chemistry Model},
462
+ journal = {Journal of Advances in Modeling Earth Systems},
463
+ volume = {14},
464
+ number = {6},
465
+ pages = {e2021MS002889},
466
+ doi = {https://doi.org/10.1029/2021MS002889},
467
+ url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2021MS002889},
468
+ eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2021MS002889},
469
+ year = {2022}
470
+ }
471
+ ```