musica 0.11.1.3__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.
- {musica-0.11.1.3 → musica-0.11.1.4}/.dockerignore +1 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/windows.yml +8 -19
- {musica-0.11.1.3 → musica-0.11.1.4}/CMakeLists.txt +8 -1
- {musica-0.11.1.3 → musica-0.11.1.4}/PKG-INFO +124 -3
- {musica-0.11.1.3 → musica-0.11.1.4}/README.md +123 -2
- musica-0.11.1.4/cmake/setup_musica_target.cmake +63 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/configs/v1/chapman/config.json +1 -1
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.python +3 -0
- musica-0.11.1.4/docker/Dockerfile.wheel +22 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_micm_api.F90 +8 -8
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_micm_box_model.F90 +2 -2
- musica-0.11.1.4/musica/CMakeLists.txt +42 -0
- musica-0.11.1.4/musica/__init__.py +51 -0
- musica-0.11.1.4/musica/binding_common.cpp +16 -0
- musica-0.11.1.4/musica/binding_common.hpp +7 -0
- musica-0.11.1.4/musica/cpu_binding.cpp +10 -0
- musica-0.11.1.4/musica/cuda.cpp +12 -0
- musica-0.11.1.4/musica/cuda.py +10 -0
- musica-0.11.1.4/musica/gpu_binding.cpp +10 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/mechanism_configuration.py +1 -1
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/musica.cpp +1 -1
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/test_analytical.py +13 -11
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/test_chapman.py +18 -2
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/test_parser.py +2 -2
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/tools/prepare_build_environment_linux.sh +8 -6
- musica-0.11.1.4/musica/tools/repair_wheel_gpu.sh +40 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/types.py +3 -2
- {musica-0.11.1.3 → musica-0.11.1.4}/pyproject.toml +4 -4
- musica-0.11.1.4/src/CMakeLists.txt +112 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/cuda_availability.cpp +2 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/micm/micm_c_api.cpp +8 -8
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/micm/micm_wrapper.cpp +1 -1
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/micm/parser.cpp +6 -6
- musica-0.11.1.3/musica/CMakeLists.txt +0 -47
- musica-0.11.1.3/musica/__init__.py +0 -3
- musica-0.11.1.3/musica/binding.cpp +0 -19
- musica-0.11.1.3/musica/tools/repair_wheel_gpu.sh +0 -31
- musica-0.11.1.3/src/CMakeLists.txt +0 -137
- musica-0.11.1.3/src/micm/CMakeLists.txt +0 -11
- musica-0.11.1.3/src/tuvx/CMakeLists.txt +0 -18
- {musica-0.11.1.3 → musica-0.11.1.4}/.clang-format +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.clang-tidy +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/clang_format.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/clang_tidy.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/close_stale_issues.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/docker.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/fetch_content_integration.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/format-python.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/gh_pages.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/mac.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/python-tests.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/python-wheels.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.github/workflows/ubuntu.yml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/.gitignore +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/CITATION.cff +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/LICENSE +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/CodeCoverage.cmake +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/FindSphinx.cmake +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/SetDefaults.cmake +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/cmake_uninstall.cmake.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/dependencies.cmake +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/musica-fortran.pc.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/musica.pc.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/musica.settings.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/musicaConfig.cmake.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/silence_warnings.cmake +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/summary.cmake +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/cmake/test_util.cmake +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/TS1/config.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/TS1/initial_conditions.csv +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/TS1/reactions.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/TS1/species.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/analytical/config.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/analytical/reactions.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/analytical/species.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/config.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/initial_conditions.csv +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/reactions.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/carbon_bond_5/species.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/chapman/config.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/chapman/initial_conditions.csv +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/chapman/reactions.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/chapman/species.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/robertson/config.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/robertson/initial_conditions.csv +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/robertson/reactions.json +0 -0
- {musica-0.11.1.3/configs → musica-0.11.1.4/configs/v0}/robertson/species.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/configs/v1/chapman/config.yaml +0 -0
- {musica-0.11.1.3/configs/v1 → musica-0.11.1.4/configs/v1/full_configuration}/full_configuration.json +0 -0
- {musica-0.11.1.3/configs/v1 → musica-0.11.1.4/configs/v1/full_configuration}/full_configuration.yaml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.coverage +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.docs +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.fortran-gcc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.fortran-gcc.integration +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.fortran-intel +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.fortran-intel.pkgconfig +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.fortran-nvhpc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.fortran-nvhpc.pkgconfig +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.memcheck +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.mpi +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.mpi_openmp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.nvhpc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.openmp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docker/Dockerfile.python-tests +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/Doxyfile.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/Makefile +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/Software Development Plan.pdf +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/make.bat +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/requirements.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/_static/custom.css +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/_static/favicon/favicon.ico +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/_static/index_api.svg +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/_static/index_contribute.svg +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/_static/index_getting_started.svg +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/_static/index_user_guide.svg +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/_static/switcher.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/api/C++.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/api/index.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/api/python.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/conf.py +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/contributing/index.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/getting_started/getting_started.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/getting_started/installation.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/getting_started/overview.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/index.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/references.bib +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/tutorial/chapter0.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/tutorial/chapter1.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/tutorial/chapter2.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/tutorial/tutorial.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/user_guide/configurations.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/user_guide/fortran_c.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/docs/source/user_guide/index.rst +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/micm/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/micm/micm.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/micm/state.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/packaging/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/fetch_content_integration/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_get_micm_version.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_tuvx_api.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/test_simple.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/tutorial/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/tutorial/demo.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/unit/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/unit/tuvx.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/unit/tuvx_openmp.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/unit/util.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/grid.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/grid_map.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/profile.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/profile_map.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/radiator.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/radiator_map.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/tuvx/tuvx.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/fortran/util.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/component_versions.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/error.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/micm/chemistry.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/micm/cuda_availability.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/micm/micm.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/micm/micm_c_interface.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/micm/parse.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/micm/state.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/micm/state_c_interface.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/tuvx/grid.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/tuvx/grid_map.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/tuvx/profile.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/tuvx/profile_map.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/tuvx/radiator.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/tuvx/radiator_map.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/tuvx/tuvx.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/util.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/include/musica/version.hpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/mechanism_configuration.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/examples/v0/config.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/examples/v0/config.yaml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/examples/v0/reactions.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/examples/v0/reactions.yaml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/examples/v0/species.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/examples/v0/species.yaml +0 -0
- {musica-0.11.1.3/musica/test/examples/v1 → musica-0.11.1.4/musica/test/examples/v1/full_configuration}/full_configuration.json +0 -0
- {musica-0.11.1.3/musica/test/examples/v1 → musica-0.11.1.4/musica/test/examples/v1/full_configuration}/full_configuration.yaml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/test/tuvx.py +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/musica/tools/prepare_build_environment_windows.sh +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/spack/packages/musica/package.py +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/spack/repo.yaml +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/component_versions.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/micm.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/micm_c_interface.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/parse.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/state.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/state_c_interface.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/v0_parse.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/micm/v1_parse.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/packaging/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/packaging/modulefile.lua.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/fixed/O2_cross_section.nc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/fixed/O2_parameters.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/fixed/bar_cross_section.nc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/fixed/config.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/fixed/foo_cross_section.nc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/fixed/stand_alone_tuvx_config.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/from_host/O2_cross_section.nc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/from_host/O2_parameters.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/from_host/bar_cross_section.nc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/from_host/config.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/tuvx/from_host/foo_cross_section.nc +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/data/util_index_mapping_from_file.json +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/test_simple.c +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/component_versions.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/micm/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/tuvx/CMakeLists.txt +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/tuvx/tuvx_c_api.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/tuvx/tuvx_run_from_config.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/test/unit/util.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/grid.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/grid_map.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface_grid.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface_grid_map.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface_profile.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface_profile_map.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface_radiator.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface_radiator_map.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/interface_util.F90 +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/profile.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/profile_map.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/radiator.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/radiator_map.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/tuvx/tuvx.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/util.cpp +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/src/version.cpp.in +0 -0
- {musica-0.11.1.3 → musica-0.11.1.4}/valgrind.supp +0 -0
|
@@ -13,7 +13,7 @@ concurrency:
|
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
15
|
mingw:
|
|
16
|
-
runs-on: windows-
|
|
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
|
-
|
|
44
|
-
runs-on: windows-
|
|
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 -
|
|
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-
|
|
68
|
+
runs-on: windows-latest
|
|
74
69
|
continue-on-error: true
|
|
75
70
|
strategy:
|
|
76
71
|
matrix:
|
|
77
|
-
version: [
|
|
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-
|
|
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 -
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
|
|
@@ -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__)"]
|
{musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_micm_api.F90
RENAMED
|
@@ -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
|
|
{musica-0.11.1.3 → musica-0.11.1.4}/fortran/test/fetch_content_integration/test_micm_box_model.F90
RENAMED
|
@@ -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()
|