musica 0.11.1.2__tar.gz → 0.11.1.4__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 (240) hide show
  1. {musica-0.11.1.2 → musica-0.11.1.4}/.dockerignore +1 -0
  2. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/windows.yml +8 -19
  3. {musica-0.11.1.2 → musica-0.11.1.4}/CMakeLists.txt +8 -1
  4. {musica-0.11.1.2 → musica-0.11.1.4}/PKG-INFO +124 -3
  5. {musica-0.11.1.2 → musica-0.11.1.4}/README.md +123 -2
  6. musica-0.11.1.4/cmake/setup_musica_target.cmake +63 -0
  7. {musica-0.11.1.2 → musica-0.11.1.4}/configs/v1/chapman/config.json +1 -1
  8. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.python +3 -0
  9. musica-0.11.1.4/docker/Dockerfile.wheel +22 -0
  10. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_micm_api.F90 +8 -8
  11. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_micm_box_model.F90 +2 -2
  12. musica-0.11.1.4/musica/CMakeLists.txt +42 -0
  13. musica-0.11.1.4/musica/__init__.py +51 -0
  14. musica-0.11.1.4/musica/binding_common.cpp +16 -0
  15. musica-0.11.1.4/musica/binding_common.hpp +7 -0
  16. musica-0.11.1.4/musica/cpu_binding.cpp +10 -0
  17. musica-0.11.1.4/musica/cuda.cpp +12 -0
  18. musica-0.11.1.4/musica/cuda.py +10 -0
  19. musica-0.11.1.4/musica/gpu_binding.cpp +10 -0
  20. {musica-0.11.1.2 → musica-0.11.1.4}/musica/mechanism_configuration.py +1 -1
  21. {musica-0.11.1.2 → musica-0.11.1.4}/musica/musica.cpp +1 -1
  22. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/test_analytical.py +13 -11
  23. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/test_chapman.py +18 -2
  24. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/test_parser.py +2 -2
  25. {musica-0.11.1.2 → musica-0.11.1.4}/musica/tools/prepare_build_environment_linux.sh +8 -6
  26. musica-0.11.1.4/musica/tools/repair_wheel_gpu.sh +40 -0
  27. {musica-0.11.1.2 → musica-0.11.1.4}/musica/types.py +4 -3
  28. {musica-0.11.1.2 → musica-0.11.1.4}/pyproject.toml +4 -4
  29. musica-0.11.1.4/src/CMakeLists.txt +112 -0
  30. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/cuda_availability.cpp +2 -0
  31. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/micm/micm_c_api.cpp +8 -8
  32. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/micm/micm_wrapper.cpp +1 -1
  33. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/micm/parser.cpp +6 -6
  34. musica-0.11.1.2/musica/CMakeLists.txt +0 -47
  35. musica-0.11.1.2/musica/__init__.py +0 -3
  36. musica-0.11.1.2/musica/binding.cpp +0 -19
  37. musica-0.11.1.2/musica/tools/repair_wheel_gpu.sh +0 -30
  38. musica-0.11.1.2/src/CMakeLists.txt +0 -137
  39. musica-0.11.1.2/src/micm/CMakeLists.txt +0 -11
  40. musica-0.11.1.2/src/tuvx/CMakeLists.txt +0 -18
  41. {musica-0.11.1.2 → musica-0.11.1.4}/.clang-format +0 -0
  42. {musica-0.11.1.2 → musica-0.11.1.4}/.clang-tidy +0 -0
  43. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/clang_format.yml +0 -0
  44. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/clang_tidy.yml +0 -0
  45. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/close_stale_issues.yml +0 -0
  46. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/docker.yml +0 -0
  47. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/fetch_content_integration.yml +0 -0
  48. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/format-python.yml +0 -0
  49. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/gh_pages.yml +0 -0
  50. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/mac.yml +0 -0
  51. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/python-tests.yml +0 -0
  52. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/python-wheels.yml +0 -0
  53. {musica-0.11.1.2 → musica-0.11.1.4}/.github/workflows/ubuntu.yml +0 -0
  54. {musica-0.11.1.2 → musica-0.11.1.4}/.gitignore +0 -0
  55. {musica-0.11.1.2 → musica-0.11.1.4}/CITATION.cff +0 -0
  56. {musica-0.11.1.2 → musica-0.11.1.4}/LICENSE +0 -0
  57. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/CodeCoverage.cmake +0 -0
  58. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/FindSphinx.cmake +0 -0
  59. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/SetDefaults.cmake +0 -0
  60. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/cmake_uninstall.cmake.in +0 -0
  61. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/dependencies.cmake +0 -0
  62. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/musica-fortran.pc.in +0 -0
  63. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/musica.pc.in +0 -0
  64. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/musica.settings.in +0 -0
  65. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/musicaConfig.cmake.in +0 -0
  66. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/silence_warnings.cmake +0 -0
  67. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/summary.cmake +0 -0
  68. {musica-0.11.1.2 → musica-0.11.1.4}/cmake/test_util.cmake +0 -0
  69. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/TS1/config.json +0 -0
  70. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/TS1/initial_conditions.csv +0 -0
  71. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/TS1/reactions.json +0 -0
  72. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/TS1/species.json +0 -0
  73. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/analytical/config.json +0 -0
  74. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/analytical/reactions.json +0 -0
  75. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/analytical/species.json +0 -0
  76. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/config.json +0 -0
  77. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/initial_conditions.csv +0 -0
  78. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/reactions.json +0 -0
  79. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/species.json +0 -0
  80. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/chapman/config.json +0 -0
  81. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/chapman/initial_conditions.csv +0 -0
  82. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/chapman/reactions.json +0 -0
  83. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/chapman/species.json +0 -0
  84. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/robertson/config.json +0 -0
  85. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/robertson/initial_conditions.csv +0 -0
  86. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/robertson/reactions.json +0 -0
  87. {musica-0.11.1.2/configs → musica-0.11.1.4/configs/v0}/robertson/species.json +0 -0
  88. {musica-0.11.1.2 → musica-0.11.1.4}/configs/v1/chapman/config.yaml +0 -0
  89. {musica-0.11.1.2/configs/v1 → musica-0.11.1.4/configs/v1/full_configuration}/full_configuration.json +0 -0
  90. {musica-0.11.1.2/configs/v1 → musica-0.11.1.4/configs/v1/full_configuration}/full_configuration.yaml +0 -0
  91. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile +0 -0
  92. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.coverage +0 -0
  93. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.docs +0 -0
  94. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.fortran-gcc +0 -0
  95. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.fortran-gcc.integration +0 -0
  96. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.fortran-intel +0 -0
  97. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.fortran-intel.pkgconfig +0 -0
  98. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.fortran-nvhpc +0 -0
  99. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.fortran-nvhpc.pkgconfig +0 -0
  100. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.memcheck +0 -0
  101. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.mpi +0 -0
  102. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.mpi_openmp +0 -0
  103. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.nvhpc +0 -0
  104. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.openmp +0 -0
  105. {musica-0.11.1.2 → musica-0.11.1.4}/docker/Dockerfile.python-tests +0 -0
  106. {musica-0.11.1.2 → musica-0.11.1.4}/docs/CMakeLists.txt +0 -0
  107. {musica-0.11.1.2 → musica-0.11.1.4}/docs/Doxyfile.in +0 -0
  108. {musica-0.11.1.2 → musica-0.11.1.4}/docs/Makefile +0 -0
  109. {musica-0.11.1.2 → musica-0.11.1.4}/docs/Software Development Plan.pdf +0 -0
  110. {musica-0.11.1.2 → musica-0.11.1.4}/docs/make.bat +0 -0
  111. {musica-0.11.1.2 → musica-0.11.1.4}/docs/requirements.txt +0 -0
  112. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/_static/custom.css +0 -0
  113. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/_static/favicon/favicon.ico +0 -0
  114. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/_static/index_api.svg +0 -0
  115. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/_static/index_contribute.svg +0 -0
  116. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/_static/index_getting_started.svg +0 -0
  117. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/_static/index_user_guide.svg +0 -0
  118. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/_static/switcher.json +0 -0
  119. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/api/C++.rst +0 -0
  120. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/api/index.rst +0 -0
  121. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/api/python.rst +0 -0
  122. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/conf.py +0 -0
  123. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/contributing/index.rst +0 -0
  124. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/getting_started/getting_started.rst +0 -0
  125. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/getting_started/installation.rst +0 -0
  126. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/getting_started/overview.rst +0 -0
  127. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/index.rst +0 -0
  128. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/references.bib +0 -0
  129. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/tutorial/chapter0.rst +0 -0
  130. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/tutorial/chapter1.rst +0 -0
  131. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/tutorial/chapter2.rst +0 -0
  132. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/tutorial/tutorial.rst +0 -0
  133. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/user_guide/configurations.rst +0 -0
  134. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/user_guide/fortran_c.rst +0 -0
  135. {musica-0.11.1.2 → musica-0.11.1.4}/docs/source/user_guide/index.rst +0 -0
  136. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/CMakeLists.txt +0 -0
  137. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/micm/CMakeLists.txt +0 -0
  138. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/micm/micm.F90 +0 -0
  139. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/micm/state.F90 +0 -0
  140. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/packaging/CMakeLists.txt +0 -0
  141. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/CMakeLists.txt +0 -0
  142. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/fetch_content_integration/CMakeLists.txt +0 -0
  143. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_get_micm_version.F90 +0 -0
  144. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_tuvx_api.F90 +0 -0
  145. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/test_simple.F90 +0 -0
  146. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/tutorial/CMakeLists.txt +0 -0
  147. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/tutorial/demo.F90 +0 -0
  148. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/unit/CMakeLists.txt +0 -0
  149. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/unit/tuvx.F90 +0 -0
  150. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/unit/tuvx_openmp.F90 +0 -0
  151. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/test/unit/util.F90 +0 -0
  152. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/CMakeLists.txt +0 -0
  153. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/grid.F90 +0 -0
  154. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/grid_map.F90 +0 -0
  155. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/profile.F90 +0 -0
  156. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/profile_map.F90 +0 -0
  157. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/radiator.F90 +0 -0
  158. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/radiator_map.F90 +0 -0
  159. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/tuvx/tuvx.F90 +0 -0
  160. {musica-0.11.1.2 → musica-0.11.1.4}/fortran/util.F90 +0 -0
  161. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/component_versions.hpp +0 -0
  162. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/error.hpp +0 -0
  163. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/micm/chemistry.hpp +0 -0
  164. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/micm/cuda_availability.hpp +0 -0
  165. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/micm/micm.hpp +0 -0
  166. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/micm/micm_c_interface.hpp +0 -0
  167. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/micm/parse.hpp +0 -0
  168. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/micm/state.hpp +0 -0
  169. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/micm/state_c_interface.hpp +0 -0
  170. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/tuvx/grid.hpp +0 -0
  171. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/tuvx/grid_map.hpp +0 -0
  172. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/tuvx/profile.hpp +0 -0
  173. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/tuvx/profile_map.hpp +0 -0
  174. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/tuvx/radiator.hpp +0 -0
  175. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/tuvx/radiator_map.hpp +0 -0
  176. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/tuvx/tuvx.hpp +0 -0
  177. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/util.hpp +0 -0
  178. {musica-0.11.1.2 → musica-0.11.1.4}/include/musica/version.hpp +0 -0
  179. {musica-0.11.1.2 → musica-0.11.1.4}/musica/mechanism_configuration.cpp +0 -0
  180. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/examples/v0/config.json +0 -0
  181. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/examples/v0/config.yaml +0 -0
  182. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/examples/v0/reactions.json +0 -0
  183. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/examples/v0/reactions.yaml +0 -0
  184. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/examples/v0/species.json +0 -0
  185. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/examples/v0/species.yaml +0 -0
  186. {musica-0.11.1.2/musica/test/examples/v1 → musica-0.11.1.4/musica/test/examples/v1/full_configuration}/full_configuration.json +0 -0
  187. {musica-0.11.1.2/musica/test/examples/v1 → musica-0.11.1.4/musica/test/examples/v1/full_configuration}/full_configuration.yaml +0 -0
  188. {musica-0.11.1.2 → musica-0.11.1.4}/musica/test/tuvx.py +0 -0
  189. {musica-0.11.1.2 → musica-0.11.1.4}/musica/tools/prepare_build_environment_windows.sh +0 -0
  190. {musica-0.11.1.2 → musica-0.11.1.4}/spack/packages/musica/package.py +0 -0
  191. {musica-0.11.1.2 → musica-0.11.1.4}/spack/repo.yaml +0 -0
  192. {musica-0.11.1.2 → musica-0.11.1.4}/src/component_versions.cpp +0 -0
  193. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/micm.cpp +0 -0
  194. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/micm_c_interface.cpp +0 -0
  195. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/parse.cpp +0 -0
  196. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/state.cpp +0 -0
  197. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/state_c_interface.cpp +0 -0
  198. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/v0_parse.cpp +0 -0
  199. {musica-0.11.1.2 → musica-0.11.1.4}/src/micm/v1_parse.cpp +0 -0
  200. {musica-0.11.1.2 → musica-0.11.1.4}/src/packaging/CMakeLists.txt +0 -0
  201. {musica-0.11.1.2 → musica-0.11.1.4}/src/packaging/modulefile.lua.in +0 -0
  202. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/CMakeLists.txt +0 -0
  203. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/fixed/O2_cross_section.nc +0 -0
  204. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/fixed/O2_parameters.txt +0 -0
  205. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/fixed/bar_cross_section.nc +0 -0
  206. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/fixed/config.json +0 -0
  207. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/fixed/foo_cross_section.nc +0 -0
  208. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/fixed/stand_alone_tuvx_config.json +0 -0
  209. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/from_host/O2_cross_section.nc +0 -0
  210. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/from_host/O2_parameters.txt +0 -0
  211. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/from_host/bar_cross_section.nc +0 -0
  212. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/from_host/config.json +0 -0
  213. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/tuvx/from_host/foo_cross_section.nc +0 -0
  214. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/data/util_index_mapping_from_file.json +0 -0
  215. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/test_simple.c +0 -0
  216. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/CMakeLists.txt +0 -0
  217. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/component_versions.cpp +0 -0
  218. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/micm/CMakeLists.txt +0 -0
  219. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/tuvx/CMakeLists.txt +0 -0
  220. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/tuvx/tuvx_c_api.cpp +0 -0
  221. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/tuvx/tuvx_run_from_config.cpp +0 -0
  222. {musica-0.11.1.2 → musica-0.11.1.4}/src/test/unit/util.cpp +0 -0
  223. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/grid.cpp +0 -0
  224. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/grid_map.cpp +0 -0
  225. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface.F90 +0 -0
  226. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface_grid.F90 +0 -0
  227. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface_grid_map.F90 +0 -0
  228. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface_profile.F90 +0 -0
  229. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface_profile_map.F90 +0 -0
  230. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface_radiator.F90 +0 -0
  231. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface_radiator_map.F90 +0 -0
  232. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/interface_util.F90 +0 -0
  233. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/profile.cpp +0 -0
  234. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/profile_map.cpp +0 -0
  235. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/radiator.cpp +0 -0
  236. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/radiator_map.cpp +0 -0
  237. {musica-0.11.1.2 → musica-0.11.1.4}/src/tuvx/tuvx.cpp +0 -0
  238. {musica-0.11.1.2 → musica-0.11.1.4}/src/util.cpp +0 -0
  239. {musica-0.11.1.2 → musica-0.11.1.4}/src/version.cpp.in +0 -0
  240. {musica-0.11.1.2 → musica-0.11.1.4}/valgrind.supp +0 -0
@@ -17,3 +17,4 @@
17
17
  !pyproject.toml
18
18
  !LICENSE
19
19
  !README.md
20
+ !wheelhouse
@@ -13,7 +13,7 @@ concurrency:
13
13
 
14
14
  jobs:
15
15
  mingw:
16
- runs-on: windows-2019
16
+ runs-on: windows-latest
17
17
  strategy:
18
18
  matrix:
19
19
  architecture: [x64]
@@ -25,9 +25,6 @@ jobs:
25
25
  with:
26
26
  platform: ${{ matrix.architecture }}
27
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
31
28
 
32
29
  - name: Run Cmake
33
30
  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 +37,8 @@ jobs:
40
37
  cd build
41
38
  ctest -C Debug --rerun-failed --output-on-failure . --verbose
42
39
 
43
- msvc2022:
44
- runs-on: windows-2022
40
+ msvc:
41
+ runs-on: windows-latest
45
42
  continue-on-error: true
46
43
  strategy:
47
44
  matrix:
@@ -58,10 +55,8 @@ jobs:
58
55
  python-version: '3.x'
59
56
  architecture: x86
60
57
 
61
- - run: pip install numpy
62
-
63
58
  - 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
59
+ 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
60
 
66
61
  - name: Build
67
62
  run: cmake --build build --config ${{ matrix.build_type }} --parallel
@@ -70,11 +65,11 @@ jobs:
70
65
  run: cd build ; ctest -C ${{ matrix.build_type }} --output-on-failure --verbose
71
66
 
72
67
  clang:
73
- runs-on: windows-2019
68
+ runs-on: windows-latest
74
69
  continue-on-error: true
75
70
  strategy:
76
71
  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]
72
+ version: [18.1.0, 19.1.0, 20.1.0]
78
73
 
79
74
  steps:
80
75
  - uses: actions/checkout@v4
@@ -82,9 +77,6 @@ jobs:
82
77
  - name: Install Clang
83
78
  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
79
 
85
- - uses: actions/setup-python@v5
86
- - run: pip install numpy
87
-
88
80
  - name: Run CMake
89
81
  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
82
 
@@ -95,7 +87,7 @@ jobs:
95
87
  run: cd build ; ctest -C Debug --output-on-failure --verbose
96
88
 
97
89
  clang-cl-11:
98
- runs-on: windows-2019
90
+ runs-on: windows-latest
99
91
  continue-on-error: true
100
92
  strategy:
101
93
  matrix:
@@ -111,11 +103,8 @@ jobs:
111
103
  python-version: '3.x'
112
104
  architecture: x86
113
105
 
114
- - uses: actions/setup-python@v5
115
- - run: pip install numpy
116
-
117
106
  - 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
107
+ 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
108
 
120
109
  - name: Build
121
110
  run: cmake --build build --config Debug --parallel
@@ -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.2)
4
+ project(musica-distribution VERSION 0.11.1.4)
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: musica
3
- Version: 0.11.1.2
3
+ Version: 0.11.1.4
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>
@@ -240,7 +240,110 @@ At present the project encompasses these components
240
240
  - [MICM](https://github.com/NCAR/micm)
241
241
  - Model Independent Chemical Module
242
242
 
243
- ## Available grids
243
+ # Installation
244
+ MUSICA is installable via pip for Python or CMake for C++.
245
+
246
+ ## Pip
247
+ ```
248
+ pip install musica
249
+ ```
250
+ ## CMake
251
+ ```
252
+ $ git clone https://github.com/NCAR/musica.git
253
+ $ cd musica
254
+ $ mkdir build
255
+ $ cd build
256
+ $ ccmake ..
257
+ $ make
258
+ $ make install
259
+ ```
260
+
261
+ # Using the MUSICA Python API
262
+ 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.
263
+ ```
264
+ # --- Import Musica ---
265
+ import musica
266
+ import musica.mechanism_configuration as mc
267
+
268
+ # --- 1. Define the chemical system of interest ---
269
+ A = mc.Species(name="A")
270
+ B = mc.Species(name="B")
271
+ C = mc.Species(name="C")
272
+ species = [A, B, C]
273
+ gas = mc.Phase(name="gas", species=species)
274
+
275
+ # --- 2. Define a mechanism of interest ---
276
+ # Through Musica, several different mechanisms can be explored to define reaction rates. Here, we use the Arrhenius equation as a simple example.
277
+
278
+ r1 = mc.Arrhenius(name="A->B", A=4.0e-3, C=50, reactants=[A], products=[B], gas_phase=gas)
279
+ 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)
280
+
281
+ mechanism = mc.Mechanism(name="musica_example", species=species, phases=[gas], reactions=[r1, r2])
282
+
283
+ # --- 3. Create MICM solver ---
284
+ # A solver must be initialized with either a configuration file or a mechanism:
285
+
286
+ solver = musica.MICM(mechanism=mechanism, solver_type=musica.SolverType.rosenbrock_standard_order)
287
+
288
+ # --- 4. Define environmental conditions ---
289
+ temperature=300.0
290
+ pressure=101000.0
291
+
292
+ # --- 5. Create and initialize State ---
293
+ # In the model, conditions represent the starting environment for the reactions and are assigned by modifying the state.
294
+
295
+ state = solver.create_state()
296
+ state.set_concentrations({"A": 1.0, "B": 3.0, "C": 5.0})
297
+ state.set_conditions(temperature, pressure)
298
+ initial_pressure = state.get_conditions()['air_density'][0] # store for visualization and output
299
+
300
+ # --- 6. Time parameters ---
301
+ time_step = 4 # stepping
302
+ sim_length = 20 # total simulation time
303
+
304
+ # --- (Optional) 7. Save initial state (t=0) for output visualization ---
305
+ 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]}
306
+ initial_row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
307
+
308
+ # --- 8. Solve through time loop only ---
309
+ # The following loop simply solves the model per each time step:
310
+
311
+ curr_time = time_step
312
+ while curr_time <= sim_length:
313
+ solver.solve(state, time_step)
314
+ concentrations = state.get_concentrations()
315
+ curr_time += time_step
316
+
317
+ # --- 9. Solve and create DataFrame ---
318
+ # It is likely more useful to solve at each time step and store the associated data:
319
+ import pandas as pd
320
+
321
+ output_data = [] # prepare to store output per time step
322
+ output_data.append(initial_row) # save t=0 data
323
+
324
+ curr_time = time_step
325
+ while curr_time <= sim_length:
326
+ solver.solve(state, time_step)
327
+ row = {
328
+ "time.s": curr_time,
329
+ "ENV.temperature.K": state.get_conditions()['temperature'][0],
330
+ "ENV.pressure.Pa": state.get_conditions()['pressure'][0],
331
+ "ENV.air number density.mol m-3": state.get_conditions()['air_density'][0]
332
+ }
333
+ row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
334
+ output_data.append(row)
335
+ curr_time += time_step
336
+
337
+ df = pd.DataFrame(output_data)
338
+ print(df)
339
+
340
+ # --- 10. Visualize Specific Results ---
341
+ import matplotlib.pyplot as plt
342
+
343
+ 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)')
344
+ plt.show()
345
+ ```
346
+ # Available grids
244
347
 
245
348
  Pre-made grids for use in MUSICA are available [here](https://wiki.ucar.edu/display/MUSICA/Available+Grids).
246
349
 
@@ -282,7 +385,25 @@ Specifying a specific version of `tuv-x` by has, but using the official reposito
282
385
  ### Python build
283
386
  Musica has python bindings. If you want to install the python package, you may `pip install musica`.
284
387
 
285
- To build the package locally,
388
+ #### PyPi
389
+ If you only want to use the CPU components,
390
+
391
+ ```
392
+ pip install musica
393
+ ```
394
+
395
+ Note that GPU support has only been tested on linux. If you have an NVIDIA GPU and would like to take
396
+ 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.
397
+
398
+ ```
399
+ pip install --upgrade setuptools pip wheel
400
+ pip install nvidia-pyindex
401
+ pip install musica[gpu]
402
+ ```
403
+
404
+ #### Local build
405
+
406
+ Musica has python bindings. To build the package locally,
286
407
 
287
408
  ```
288
409
  pip install -e .
@@ -23,7 +23,110 @@ At present the project encompasses these components
23
23
  - [MICM](https://github.com/NCAR/micm)
24
24
  - Model Independent Chemical Module
25
25
 
26
- ## Available grids
26
+ # Installation
27
+ MUSICA is installable via pip for Python or CMake for C++.
28
+
29
+ ## Pip
30
+ ```
31
+ pip install musica
32
+ ```
33
+ ## CMake
34
+ ```
35
+ $ git clone https://github.com/NCAR/musica.git
36
+ $ cd musica
37
+ $ mkdir build
38
+ $ cd build
39
+ $ ccmake ..
40
+ $ make
41
+ $ make install
42
+ ```
43
+
44
+ # Using the MUSICA Python API
45
+ 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.
46
+ ```
47
+ # --- Import Musica ---
48
+ import musica
49
+ import musica.mechanism_configuration as mc
50
+
51
+ # --- 1. Define the chemical system of interest ---
52
+ A = mc.Species(name="A")
53
+ B = mc.Species(name="B")
54
+ C = mc.Species(name="C")
55
+ species = [A, B, C]
56
+ gas = mc.Phase(name="gas", species=species)
57
+
58
+ # --- 2. Define a mechanism of interest ---
59
+ # Through Musica, several different mechanisms can be explored to define reaction rates. Here, we use the Arrhenius equation as a simple example.
60
+
61
+ r1 = mc.Arrhenius(name="A->B", A=4.0e-3, C=50, reactants=[A], products=[B], gas_phase=gas)
62
+ 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)
63
+
64
+ mechanism = mc.Mechanism(name="musica_example", species=species, phases=[gas], reactions=[r1, r2])
65
+
66
+ # --- 3. Create MICM solver ---
67
+ # A solver must be initialized with either a configuration file or a mechanism:
68
+
69
+ solver = musica.MICM(mechanism=mechanism, solver_type=musica.SolverType.rosenbrock_standard_order)
70
+
71
+ # --- 4. Define environmental conditions ---
72
+ temperature=300.0
73
+ pressure=101000.0
74
+
75
+ # --- 5. Create and initialize State ---
76
+ # In the model, conditions represent the starting environment for the reactions and are assigned by modifying the state.
77
+
78
+ state = solver.create_state()
79
+ state.set_concentrations({"A": 1.0, "B": 3.0, "C": 5.0})
80
+ state.set_conditions(temperature, pressure)
81
+ initial_pressure = state.get_conditions()['air_density'][0] # store for visualization and output
82
+
83
+ # --- 6. Time parameters ---
84
+ time_step = 4 # stepping
85
+ sim_length = 20 # total simulation time
86
+
87
+ # --- (Optional) 7. Save initial state (t=0) for output visualization ---
88
+ 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]}
89
+ initial_row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
90
+
91
+ # --- 8. Solve through time loop only ---
92
+ # The following loop simply solves the model per each time step:
93
+
94
+ curr_time = time_step
95
+ while curr_time <= sim_length:
96
+ solver.solve(state, time_step)
97
+ concentrations = state.get_concentrations()
98
+ curr_time += time_step
99
+
100
+ # --- 9. Solve and create DataFrame ---
101
+ # It is likely more useful to solve at each time step and store the associated data:
102
+ import pandas as pd
103
+
104
+ output_data = [] # prepare to store output per time step
105
+ output_data.append(initial_row) # save t=0 data
106
+
107
+ curr_time = time_step
108
+ while curr_time <= sim_length:
109
+ solver.solve(state, time_step)
110
+ row = {
111
+ "time.s": curr_time,
112
+ "ENV.temperature.K": state.get_conditions()['temperature'][0],
113
+ "ENV.pressure.Pa": state.get_conditions()['pressure'][0],
114
+ "ENV.air number density.mol m-3": state.get_conditions()['air_density'][0]
115
+ }
116
+ row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
117
+ output_data.append(row)
118
+ curr_time += time_step
119
+
120
+ df = pd.DataFrame(output_data)
121
+ print(df)
122
+
123
+ # --- 10. Visualize Specific Results ---
124
+ import matplotlib.pyplot as plt
125
+
126
+ 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)')
127
+ plt.show()
128
+ ```
129
+ # Available grids
27
130
 
28
131
  Pre-made grids for use in MUSICA are available [here](https://wiki.ucar.edu/display/MUSICA/Available+Grids).
29
132
 
@@ -65,7 +168,25 @@ Specifying a specific version of `tuv-x` by has, but using the official reposito
65
168
  ### Python build
66
169
  Musica has python bindings. If you want to install the python package, you may `pip install musica`.
67
170
 
68
- To build the package locally,
171
+ #### PyPi
172
+ If you only want to use the CPU components,
173
+
174
+ ```
175
+ pip install musica
176
+ ```
177
+
178
+ Note that GPU support has only been tested on linux. If you have an NVIDIA GPU and would like to take
179
+ 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.
180
+
181
+ ```
182
+ pip install --upgrade setuptools pip wheel
183
+ pip install nvidia-pyindex
184
+ pip install musica[gpu]
185
+ ```
186
+
187
+ #### Local build
188
+
189
+ Musica has python bindings. To build the package locally,
69
190
 
70
191
  ```
71
192
  pip install -e .
@@ -0,0 +1,63 @@
1
+ function(musica_setup_target target)
2
+ cmake_parse_arguments(ARG "" "MODE" "" ${ARGN})
3
+
4
+ if (MUSICA_ENABLE_PYTHON_LIBRARY OR MUSICA_ENABLE_PIC)
5
+ set_target_properties(${target_name} PROPERTIES POSITION_INDEPENDENT_CODE ON)
6
+ endif()
7
+
8
+ target_include_directories(${target}
9
+ PUBLIC
10
+ $<BUILD_INTERFACE:${MUSICA_PROJECT_SRC_DIR}/include>
11
+ $<INSTALL_INTERFACE:${MUSICA_INSTALL_INCLUDE_DIR}>
12
+ )
13
+
14
+ target_compile_features(${target} PUBLIC cxx_std_20)
15
+
16
+ target_link_libraries(${target}
17
+ PUBLIC
18
+ musica::mechanism_configuration
19
+ )
20
+
21
+ if (MUSICA_ENABLE_MPI)
22
+ list(APPEND musica_compile_definitions MUSICA_USE_MPI)
23
+ endif()
24
+
25
+ if (MUSICA_ENABLE_OPENMP)
26
+ list(APPEND musica_compile_definitions MUSICA_USE_OPENMP)
27
+ endif()
28
+
29
+ if (MUSICA_ENABLE_MICM)
30
+ list(APPEND musica_compile_definitions MUSICA_USE_MICM)
31
+ target_link_libraries(${target}
32
+ PUBLIC
33
+ musica::micm
34
+ )
35
+
36
+ if(ARG_MODE STREQUAL "GPU")
37
+ set_target_properties(micm_cuda PROPERTIES POSITION_INDEPENDENT_CODE ON)
38
+ list(APPEND musica_compile_definitions MUSICA_ENABLE_CUDA)
39
+ target_link_libraries(${target} PUBLIC musica::micm_cuda)
40
+ endif()
41
+ endif()
42
+
43
+ if (MUSICA_ENABLE_TUVX)
44
+ target_sources(${target}
45
+ PRIVATE
46
+ $<TARGET_OBJECTS:tuvx_object>
47
+ )
48
+ target_link_libraries(${target}
49
+ PUBLIC
50
+ tuvx_object
51
+ )
52
+ target_include_directories(${target}
53
+ PUBLIC
54
+ $<BUILD_INTERFACE:${MUSICA_MOD_DIR}>
55
+ $<INSTALL_INTERFACE:${MUSICA_INSTALL_INCLUDE_DIR}>
56
+ )
57
+ endif()
58
+
59
+ target_compile_definitions(${target} PUBLIC ${musica_compile_definitions})
60
+
61
+ silence_warnings(${target})
62
+ endfunction()
63
+
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "name": "Full Configuration",
3
+ "name": "Chapman",
4
4
  "species": [
5
5
  {
6
6
  "name": "M",
@@ -1,5 +1,8 @@
1
1
  FROM fedora:latest
2
2
 
3
+ ARG MUSICA_GIT_TAG=main
4
+ ARG BUILD_TYPE=Release
5
+
3
6
  RUN dnf -y update \
4
7
  && dnf -y install \
5
8
  cmake \
@@ -0,0 +1,22 @@
1
+ # To use this file, you will need to have built the wheel first.
2
+ # You can do this by running cibuildwheel with the appropriate environment variables set,
3
+ # which can be done after installing cibuildwheel.
4
+ # CIBW_ARCHS=x86_64 CIBW_PLATFORM=linux CIBW_ENVIRONMENT="CUDA_PATH=/usr/local/cuda PATH=/usr/local/cuda/bin:\$PATH LD_LIBRARY_PATH=/usr/local/cuda/lib64:\$LD_LIBRARY_PATH" cibuildwheel --output-dir wheelhouse > log.txt 2>&1
5
+
6
+ # This wheel specifically checks if the python 3.12 x86_64 python wheel can be installed
7
+ # and imported correctly.
8
+
9
+ FROM --platform=linux/amd64 python:3.12-slim
10
+
11
+ COPY wheelhouse/ wheelhouse/
12
+
13
+ RUN apt update && \
14
+ apt install -y \
15
+ binutils
16
+
17
+ RUN pip install --upgrade pip
18
+
19
+ # note that you will need to update the version number here to match the one you built
20
+ RUN pip install "musica[gpu] @ file:/wheelhouse/musica-0.11.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
21
+
22
+ CMD ["python", "-c", "import musica; print(musica.__version__)"]
@@ -71,7 +71,7 @@ contains
71
71
  integer :: O2_index, O_index, O1D_index, O3_index
72
72
  integer :: jO2_index, jO3a_index, jO3b_index
73
73
 
74
- config_path = "configs/chapman"
74
+ config_path = "configs/v0/chapman"
75
75
  solver_type = RosenbrockStandardOrder
76
76
  num_grid_cells = 1
77
77
  time_step = 200
@@ -170,7 +170,7 @@ contains
170
170
  ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
171
171
  deallocate(micm)
172
172
  deallocate(state)
173
- micm => micm_t( "configs/invalid", solver_type, error )
173
+ micm => micm_t( "configs/v0/invalid", solver_type, error )
174
174
  ASSERT( error%is_error( MUSICA_ERROR_CATEGORY_PARSING, MUSICA_PARSE_INVALID_CONFIG_FILE ) )
175
175
  ASSERT( .not. associated( micm ) )
176
176
 
@@ -357,7 +357,7 @@ contains
357
357
  real(real64), parameter :: test_accuracy = 5.0e-3
358
358
  integer :: max_grid_cells
359
359
 
360
- micm => micm_t( "configs/analytical", Rosenbrock, error )
360
+ micm => micm_t( "configs/v0/analytical", Rosenbrock, error )
361
361
  ASSERT( error%is_success() )
362
362
  max_grid_cells = micm%get_maximum_number_of_grid_cells( )
363
363
  ASSERT_GT( max_grid_cells, 0 )
@@ -378,7 +378,7 @@ contains
378
378
  real(real64), parameter :: test_accuracy = 5.0e-3
379
379
  integer :: max_grid_cells
380
380
 
381
- micm => micm_t( "configs/analytical", RosenbrockStandardOrder, error )
381
+ micm => micm_t( "configs/v0/analytical", RosenbrockStandardOrder, error )
382
382
  ASSERT( error%is_success() )
383
383
  max_grid_cells = micm%get_maximum_number_of_grid_cells( )
384
384
  ASSERT_GT( max_grid_cells, 1e8 )
@@ -399,7 +399,7 @@ contains
399
399
  real(real64), parameter :: test_accuracy = 0.1
400
400
  integer :: max_grid_cells
401
401
 
402
- micm => micm_t( "configs/analytical", BackwardEuler, error )
402
+ micm => micm_t( "configs/v0/analytical", BackwardEuler, error )
403
403
  ASSERT( error%is_success() )
404
404
  max_grid_cells = micm%get_maximum_number_of_grid_cells( )
405
405
  ASSERT_GT( max_grid_cells, 0 )
@@ -420,7 +420,7 @@ contains
420
420
  real(real64), parameter :: test_accuracy = 0.1
421
421
  integer :: max_grid_cells
422
422
 
423
- micm => micm_t( "configs/analytical", BackwardEulerStandardOrder, error )
423
+ micm => micm_t( "configs/v0/analytical", BackwardEulerStandardOrder, error )
424
424
  ASSERT( error%is_success() )
425
425
  max_grid_cells = micm%get_maximum_number_of_grid_cells( )
426
426
  ASSERT_GT( max_grid_cells, 1e8 )
@@ -451,7 +451,7 @@ contains
451
451
  return
452
452
  end if
453
453
 
454
- micm => micm_t( "configs/analytical", CudaRosenbrock, error )
454
+ micm => micm_t( "configs/v0/analytical", CudaRosenbrock, error )
455
455
  ASSERT( error%is_success() )
456
456
  max_grid_cells = micm%get_maximum_number_of_grid_cells( )
457
457
  ASSERT_GT( max_grid_cells, 0 )
@@ -581,7 +581,7 @@ contains
581
581
  ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
582
582
  deallocate( micm )
583
583
  deallocate( state )
584
- micm => micm_t( "configs/invalid", solver_type, error )
584
+ micm => micm_t( "configs/v0/invalid", solver_type, error )
585
585
  ASSERT( error%is_error( MUSICA_ERROR_CATEGORY_PARSING, MUSICA_PARSE_INVALID_CONFIG_FILE ) )
586
586
  ASSERT( .not. associated( micm ) )
587
587
 
@@ -31,7 +31,7 @@ contains
31
31
  type(state_t), pointer :: state
32
32
  integer :: i
33
33
 
34
- config_path = "configs/analytical"
34
+ config_path = "configs/v0/analytical"
35
35
  solver_type = RosenbrockStandardOrder
36
36
  num_grid_cells = 1
37
37
 
@@ -84,7 +84,7 @@ contains
84
84
  type(state_t), pointer :: state
85
85
  integer :: i
86
86
 
87
- config_path = "configs/analytical"
87
+ config_path = "configs/v0/analytical"
88
88
  solver_type = RosenbrockStandardOrder
89
89
  num_grid_cells = 1
90
90
 
@@ -0,0 +1,42 @@
1
+ ################################################################################
2
+ # Python Extension Modules
3
+
4
+ #include(setup_muisca_target)
5
+
6
+ # Define the list of Python extension module targets
7
+ set(PY_MODULES _musica)
8
+
9
+ set(
10
+ MUSICA_PYTHON_SOURCES
11
+ binding_common.cpp
12
+ cuda.cpp
13
+ mechanism_configuration.cpp
14
+ musica.cpp
15
+
16
+ ${MUSICA_SOURCES}
17
+ )
18
+
19
+ pybind11_add_module(_musica cpu_binding.cpp ${MUSICA_PYTHON_SOURCES})
20
+ musica_setup_target(_musica MODE CPU)
21
+
22
+ if (NOT ${MUSICA_GPU_TYPE} STREQUAL "None")
23
+ pybind11_add_module(_musica_gpu gpu_binding.cpp ${MUSICA_PYTHON_SOURCES})
24
+ musica_setup_target(_musica_gpu MODE GPU)
25
+ list(APPEND PY_MODULES _musica_gpu)
26
+ endif()
27
+
28
+ foreach(lib ${PY_MODULES})
29
+ if (APPLE)
30
+ set_target_properties(${lib} PROPERTIES
31
+ INSTALL_RPATH "@loader_path"
32
+ BUILD_WITH_INSTALL_RPATH TRUE
33
+ )
34
+ elseif(UNIX)
35
+ set_target_properties(${lib} PROPERTIES
36
+ INSTALL_RPATH "$ORIGIN"
37
+ BUILD_WITH_INSTALL_RPATH TRUE
38
+ )
39
+ endif()
40
+
41
+ install(TARGETS ${lib} LIBRARY DESTINATION musica)
42
+ endforeach()