musica 0.8.1__tar.gz → 0.9.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.
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/pip.yml +1 -1
- {musica-0.8.1 → musica-0.9.0}/CITATION.cff +1 -1
- {musica-0.8.1 → musica-0.9.0}/CMakeLists.txt +2 -2
- {musica-0.8.1 → musica-0.9.0}/PKG-INFO +1 -1
- {musica-0.8.1 → musica-0.9.0}/cmake/dependencies.cmake +5 -2
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.fortran-intel +1 -1
- {musica-0.8.1 → musica-0.9.0}/fortran/micm.F90 +129 -37
- {musica-0.8.1 → musica-0.9.0}/fortran/test/fetch_content_integration/CMakeLists.txt +2 -0
- musica-0.9.0/fortran/test/fetch_content_integration/test_micm_api.F90 +524 -0
- musica-0.9.0/fortran/test/fetch_content_integration/test_micm_box_model.F90 +126 -0
- musica-0.9.0/fortran/test/fetch_content_integration/test_tuvx_api.F90 +511 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/unit/tuvx.F90 +99 -9
- {musica-0.8.1 → musica-0.9.0}/fortran/test/unit/util.F90 +14 -8
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/grid.F90 +13 -13
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/profile.F90 +19 -19
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/radiator.F90 +18 -18
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/tuvx.F90 +72 -6
- {musica-0.8.1 → musica-0.9.0}/fortran/util.F90 +27 -8
- {musica-0.8.1 → musica-0.9.0}/include/musica/micm.hpp +4 -3
- {musica-0.8.1 → musica-0.9.0}/include/musica/tuvx/tuvx.hpp +59 -1
- {musica-0.8.1 → musica-0.9.0}/include/musica/util.hpp +6 -1
- {musica-0.8.1 → musica-0.9.0}/python/test/test_analytical.py +158 -26
- {musica-0.8.1 → musica-0.9.0}/python/test/test_chapman.py +1 -1
- {musica-0.8.1 → musica-0.9.0}/python/wrapper.cpp +20 -2
- {musica-0.8.1 → musica-0.9.0}/src/micm/micm.cpp +25 -33
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/fixed/config.json +15 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/from_host/config.json +15 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/micm/micm_c_api.cpp +170 -33
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/tuvx/tuvx_run_from_config.cpp +59 -6
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/CMakeLists.txt +1 -1
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/grid.cpp +1 -1
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/interface.F90 +80 -1
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/interface_grid.F90 +6 -7
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/interface_grid_map.F90 +0 -1
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/interface_profile.F90 +0 -1
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/interface_profile_map.F90 +0 -1
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/interface_radiator_map.F90 +0 -1
- musica-0.8.1/src/tuvx/tuvx_util.F90 → musica-0.9.0/src/tuvx/interface_util.F90 +47 -3
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/tuvx.cpp +37 -0
- {musica-0.8.1 → musica-0.9.0}/src/util.cpp +5 -0
- musica-0.8.1/fortran/test/fetch_content_integration/test_micm_api.F90 +0 -356
- musica-0.8.1/fortran/test/fetch_content_integration/test_micm_box_model.F90 +0 -68
- musica-0.8.1/fortran/test/fetch_content_integration/test_tuvx_api.F90 +0 -509
- {musica-0.8.1 → musica-0.9.0}/.clang-format +0 -0
- {musica-0.8.1 → musica-0.9.0}/.clang-tidy +0 -0
- {musica-0.8.1 → musica-0.9.0}/.dockerignore +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/clang_format.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/clang_tidy.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/docker.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/fetch_content_integration.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/gh_pages.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/mac.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/pep8.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/release.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/ubuntu.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.github/workflows/windows.yml +0 -0
- {musica-0.8.1 → musica-0.9.0}/.gitignore +0 -0
- {musica-0.8.1 → musica-0.9.0}/LICENSE +0 -0
- {musica-0.8.1 → musica-0.9.0}/README.md +0 -0
- {musica-0.8.1 → musica-0.9.0}/cmake/FindSphinx.cmake +0 -0
- {musica-0.8.1 → musica-0.9.0}/cmake/SetDefaults.cmake +0 -0
- {musica-0.8.1 → musica-0.9.0}/cmake/cmake_uninstall.cmake.in +0 -0
- {musica-0.8.1 → musica-0.9.0}/cmake/musica.settings.in +0 -0
- {musica-0.8.1 → musica-0.9.0}/cmake/musicaConfig.cmake.in +0 -0
- {musica-0.8.1 → musica-0.9.0}/cmake/summary.cmake +0 -0
- {musica-0.8.1 → musica-0.9.0}/cmake/test_util.cmake +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/TS1/config.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/TS1/initial_conditions.csv +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/TS1/reactions.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/TS1/species.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/analytical/config.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/analytical/reactions.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/analytical/species.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/carbon_bond_5/config.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/carbon_bond_5/initial_conditions.csv +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/carbon_bond_5/reactions.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/carbon_bond_5/species.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/chapman/config.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/chapman/initial_conditions.csv +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/chapman/reactions.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/chapman/species.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/robertson/config.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/robertson/initial_conditions.csv +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/robertson/reactions.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/configs/robertson/species.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.docs +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.fortran-gcc +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.fortran-gcc.integration +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.fortran-nvhpc +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.memcheck +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.mpi +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.mpi_openmp +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.openmp +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.pip +0 -0
- {musica-0.8.1 → musica-0.9.0}/docker/Dockerfile.python +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/Makefile +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/Software Development Plan.pdf +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/make.bat +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/requirements.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/_static/custom.css +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/_static/favicon/favicon.ico +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/_static/index_api.svg +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/_static/index_contribute.svg +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/_static/index_getting_started.svg +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/_static/index_user_guide.svg +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/api/index.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/conf.py +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/contributing/index.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/getting_started/getting_started.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/getting_started/installation.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/getting_started/overview.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/index.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/references.bib +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/tutorial/chapter0.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/tutorial/chapter1.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/tutorial/chapter2.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/tutorial/tutorial.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/user_guide/fortran_c.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/user_guide/model_interface.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/docs/source/user_guide/user_guide.rst +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/packaging/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/fetch_content_integration/test_get_micm_version.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/tutorial/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/tutorial/demo.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/unit/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/unit/tuvx_mpi.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/test/unit/tuvx_openmp.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/grid_map.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/profile_map.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/fortran/tuvx/radiator_map.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/component_versions.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/tuvx/grid.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/tuvx/grid_map.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/tuvx/profile.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/tuvx/profile_map.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/tuvx/radiator.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/tuvx/radiator_map.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/include/musica/version.hpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/pyproject.toml +0 -0
- {musica-0.8.1 → musica-0.9.0}/python/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/python/test/tuvx.py +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/component_versions.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/micm/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/packaging/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/packaging/modulefile.lua.in +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/fixed/O2_cross_section.nc +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/fixed/O2_parameters.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/fixed/bar_cross_section.nc +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/fixed/foo_cross_section.nc +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/fixed/stand_alone_tuvx_config.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/from_host/O2_cross_section.nc +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/from_host/O2_parameters.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/from_host/bar_cross_section.nc +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/tuvx/from_host/foo_cross_section.nc +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/data/util_index_mapping_from_file.json +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/component_versions.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/micm/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/micm/micm.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/tuvx/CMakeLists.txt +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/tuvx/tuvx_c_api.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/test/unit/util.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/grid_map.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/interface_radiator.F90 +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/profile.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/profile_map.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/radiator.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/tuvx/radiator_map.cpp +0 -0
- {musica-0.8.1 → musica-0.9.0}/src/version.cpp.in +0 -0
- {musica-0.8.1 → musica-0.9.0}/valgrind.supp +0 -0
|
@@ -13,7 +13,7 @@ jobs:
|
|
|
13
13
|
fail-fast: false
|
|
14
14
|
matrix:
|
|
15
15
|
platform: [windows-latest, macos-13, ubuntu-latest]
|
|
16
|
-
python-version: ["3.
|
|
16
|
+
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
|
|
17
17
|
# python versions: https://devguide.python.org/versions/
|
|
18
18
|
|
|
19
19
|
runs-on: ${{ matrix.platform }}
|
|
@@ -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.
|
|
4
|
+
project(musica-distribution VERSION 0.9.0)
|
|
5
5
|
|
|
6
6
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake)
|
|
7
7
|
set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_MODULE_PATH}/SetDefaults.cmake)
|
|
@@ -30,7 +30,7 @@ option(MUSICA_BUILD_DOCS "Build the documentation" OFF)
|
|
|
30
30
|
option(MUSICA_ENABLE_MICM "Enable MICM" ON)
|
|
31
31
|
option(MUSICA_ENABLE_TUVX "Enable TUV-x" ON)
|
|
32
32
|
|
|
33
|
-
set(MUSICA_SET_MICM_VECTOR_MATRIX_SIZE "
|
|
33
|
+
set(MUSICA_SET_MICM_VECTOR_MATRIX_SIZE "4" CACHE STRING "Set MICM vector-ordered matrix dimension")
|
|
34
34
|
|
|
35
35
|
cmake_dependent_option(
|
|
36
36
|
MUSICA_ENABLE_PYTHON_LIBRARY "Adds pybind11, a lightweight header-only library that exposes C++ types in Python and vice versa" OFF "MUSICA_BUILD_C_CXX_INTERFACE" OFF)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: musica
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: MUSICA is a Python library for performing computational simulations in atmospheric chemistry.
|
|
5
5
|
Home-page: https://wiki.ucar.edu/display/MUSICA/MUSICA+Home
|
|
6
6
|
Author-Email: Matthew Dawsom <mattdawson@ucar.edu>, Jiwon Gim <jiwongim@ucar.edu>, David Fillmore <fillmore@ucar.edu>, Kyle Shores <kshores@ucar.edu>
|
|
@@ -62,7 +62,7 @@ endif()
|
|
|
62
62
|
if (MUSICA_ENABLE_MICM AND MUSICA_BUILD_C_CXX_INTERFACE)
|
|
63
63
|
|
|
64
64
|
set_git_default(MICM_GIT_REPOSITORY https://github.com/NCAR/micm.git)
|
|
65
|
-
set_git_default(MICM_GIT_TAG
|
|
65
|
+
set_git_default(MICM_GIT_TAG v.3.7.0)
|
|
66
66
|
|
|
67
67
|
FetchContent_Declare(micm
|
|
68
68
|
GIT_REPOSITORY ${MICM_GIT_REPOSITORY}
|
|
@@ -86,7 +86,7 @@ if (MUSICA_ENABLE_TUVX AND MUSICA_BUILD_C_CXX_INTERFACE)
|
|
|
86
86
|
set(TUVX_INSTALL_INCLUDE_DIR ${MUSICA_INSTALL_INCLUDE_DIR} CACHE STRING "" FORCE)
|
|
87
87
|
|
|
88
88
|
set_git_default(TUVX_GIT_REPOSITORY https://github.com/NCAR/tuv-x.git)
|
|
89
|
-
set_git_default(TUVX_GIT_TAG v0.10.
|
|
89
|
+
set_git_default(TUVX_GIT_TAG v0.10.1)
|
|
90
90
|
|
|
91
91
|
FetchContent_Declare(tuvx
|
|
92
92
|
GIT_REPOSITORY ${TUVX_GIT_REPOSITORY}
|
|
@@ -94,6 +94,9 @@ if (MUSICA_ENABLE_TUVX AND MUSICA_BUILD_C_CXX_INTERFACE)
|
|
|
94
94
|
GIT_PROGRESS NOT ${FETCHCONTENT_QUIET}
|
|
95
95
|
)
|
|
96
96
|
|
|
97
|
+
set(TUVX_ENABLE_TESTS OFF)
|
|
98
|
+
set(TUVX_ENABLE_REGRESSION_TESTS OFF)
|
|
99
|
+
|
|
97
100
|
FetchContent_MakeAvailable(tuvx)
|
|
98
101
|
endif()
|
|
99
102
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# versions and sizes from here: https://hub.docker.com/r/intel/oneapi-hpckit/tags
|
|
2
|
-
FROM intel/oneapi-hpckit:
|
|
2
|
+
FROM intel/oneapi-hpckit:2024.0.1-devel-ubuntu22.04
|
|
3
3
|
|
|
4
4
|
# Based off of this: https://dgpu-docs.intel.com/driver/installation.html#repository-public-key-used-for-package-and-repository-signing
|
|
5
5
|
# however those docs (at the time of this writing are incorrect) and this is the correct url
|
|
@@ -10,7 +10,7 @@ module musica_micm
|
|
|
10
10
|
implicit none
|
|
11
11
|
|
|
12
12
|
public :: micm_t, solver_stats_t, get_micm_version
|
|
13
|
-
public :: Rosenbrock, RosenbrockStandardOrder, BackwardEuler, BackwardEulerStandardOrder
|
|
13
|
+
public :: UndefinedSolver, Rosenbrock, RosenbrockStandardOrder, BackwardEuler, BackwardEulerStandardOrder
|
|
14
14
|
private
|
|
15
15
|
|
|
16
16
|
!> Wrapper for c solver stats
|
|
@@ -28,6 +28,7 @@ module musica_micm
|
|
|
28
28
|
! We could use Fortran 2023 enum type feature if Fortran 2023 is supported
|
|
29
29
|
! https://fortran-lang.discourse.group/t/enumerator-type-in-bind-c-derived-type-best-practice/5947/2
|
|
30
30
|
enum, bind(c)
|
|
31
|
+
enumerator :: UndefinedSolver = 0
|
|
31
32
|
enumerator :: Rosenbrock = 1
|
|
32
33
|
enumerator :: RosenbrockStandardOrder = 2
|
|
33
34
|
enumerator :: BackwardEuler = 3
|
|
@@ -135,10 +136,14 @@ module musica_micm
|
|
|
135
136
|
type :: micm_t
|
|
136
137
|
type(mappings_t), pointer :: species_ordering => null()
|
|
137
138
|
type(mappings_t), pointer :: user_defined_reaction_rates => null()
|
|
138
|
-
type(c_ptr), private
|
|
139
|
+
type(c_ptr), private :: ptr = c_null_ptr
|
|
140
|
+
integer, private :: number_of_grid_cells = 0
|
|
141
|
+
integer, private :: solver_type = UndefinedSolver
|
|
139
142
|
contains
|
|
140
143
|
! Solve the chemical system
|
|
141
|
-
procedure ::
|
|
144
|
+
procedure, private :: solve_arrays
|
|
145
|
+
procedure, private :: solve_c_ptrs
|
|
146
|
+
generic :: solve => solve_arrays, solve_c_ptrs
|
|
142
147
|
! Get species properties
|
|
143
148
|
procedure :: get_species_property_string
|
|
144
149
|
procedure :: get_species_property_double
|
|
@@ -191,9 +196,11 @@ contains
|
|
|
191
196
|
use musica_util, only: error_t_c, error_t, copy_mappings
|
|
192
197
|
type(micm_t), pointer :: this
|
|
193
198
|
character(len=*), intent(in) :: config_path
|
|
194
|
-
integer
|
|
195
|
-
integer
|
|
199
|
+
integer, intent(in) :: solver_type
|
|
200
|
+
integer, intent(in) :: num_grid_cells
|
|
196
201
|
type(error_t), intent(inout) :: error
|
|
202
|
+
|
|
203
|
+
! local variables
|
|
197
204
|
character(len=1, kind=c_char) :: c_config_path(len_trim(config_path)+1)
|
|
198
205
|
integer :: n, i
|
|
199
206
|
type(error_t_c) :: error_c
|
|
@@ -206,7 +213,10 @@ contains
|
|
|
206
213
|
end do
|
|
207
214
|
c_config_path(n+1) = c_null_char
|
|
208
215
|
|
|
209
|
-
this%
|
|
216
|
+
this%number_of_grid_cells = num_grid_cells
|
|
217
|
+
this%solver_type = solver_type
|
|
218
|
+
this%ptr = create_micm_c( c_config_path, int(solver_type, kind=c_int), &
|
|
219
|
+
int(num_grid_cells, kind=c_int), error_c )
|
|
210
220
|
error = error_t(error_c)
|
|
211
221
|
if (.not. error%is_success()) then
|
|
212
222
|
deallocate(this)
|
|
@@ -233,41 +243,121 @@ contains
|
|
|
233
243
|
|
|
234
244
|
end function constructor
|
|
235
245
|
|
|
236
|
-
|
|
237
|
-
|
|
246
|
+
!> Solves the chemical system
|
|
247
|
+
!!
|
|
248
|
+
!! This function accepts fortran arrays and checks their sizes
|
|
249
|
+
!! against the number of grid cells and the species/rate parameter ordering.
|
|
250
|
+
subroutine solve_arrays(this, time_step, temperature, pressure, air_density, &
|
|
251
|
+
concentrations, user_defined_reaction_rates, solver_state, solver_stats, error)
|
|
238
252
|
use iso_c_binding, only: c_loc
|
|
253
|
+
use iso_fortran_env, only: real64
|
|
254
|
+
use musica_util, only: string_t, string_t_c, error_t_c, error_t
|
|
255
|
+
class(micm_t), intent(in) :: this
|
|
256
|
+
real(real64), intent(in) :: time_step
|
|
257
|
+
real(real64), target, contiguous, intent(in) :: temperature(:)
|
|
258
|
+
real(real64), target, contiguous, intent(in) :: pressure(:)
|
|
259
|
+
real(real64), target, contiguous, intent(in) :: air_density(:)
|
|
260
|
+
real(real64), target, contiguous, intent(inout) :: concentrations(:,:)
|
|
261
|
+
real(real64), target, contiguous, intent(in) :: user_defined_reaction_rates(:,:)
|
|
262
|
+
type(string_t), intent(out) :: solver_state
|
|
263
|
+
type(solver_stats_t), intent(out) :: solver_stats
|
|
264
|
+
type(error_t), intent(out) :: error
|
|
265
|
+
|
|
266
|
+
type(string_t_c) :: solver_state_c
|
|
267
|
+
type(solver_stats_t_c) :: solver_stats_c
|
|
268
|
+
type(error_t_c) :: error_c
|
|
269
|
+
|
|
270
|
+
if (size(temperature) .ne. this%number_of_grid_cells) then
|
|
271
|
+
error = error_t(1, "MICM_SOLVE", "Temperature array size does not match number of grid cells")
|
|
272
|
+
return
|
|
273
|
+
end if
|
|
274
|
+
if (size(pressure) .ne. this%number_of_grid_cells) then
|
|
275
|
+
error = error_t(1, "MICM_SOLVE", "Pressure array size does not match number of grid cells")
|
|
276
|
+
return
|
|
277
|
+
end if
|
|
278
|
+
if (size(air_density) .ne. this%number_of_grid_cells) then
|
|
279
|
+
error = error_t(1, "MICM_SOLVE", "Air density array size does not match number of grid cells")
|
|
280
|
+
return
|
|
281
|
+
end if
|
|
282
|
+
if (this%solver_type .eq. Rosenbrock .or. this%solver_type .eq. BackwardEuler) then
|
|
283
|
+
if (size(concentrations, 1) .ne. this%number_of_grid_cells) then
|
|
284
|
+
error = error_t(1, "MICM_SOLVE", "Concentrations array dimension 1 does not match number of grid cells")
|
|
285
|
+
return
|
|
286
|
+
end if
|
|
287
|
+
if (size(concentrations, 2) .ne. this%species_ordering%size()) then
|
|
288
|
+
error = error_t(1, "MICM_SOLVE", "Concentrations array dimension 2 does not match species ordering")
|
|
289
|
+
return
|
|
290
|
+
end if
|
|
291
|
+
if (size(user_defined_reaction_rates, 1) .ne. this%number_of_grid_cells) then
|
|
292
|
+
error = error_t(1, "MICM_SOLVE", "User defined reaction rates array dimension 1 does not match number of grid cells")
|
|
293
|
+
return
|
|
294
|
+
end if
|
|
295
|
+
if (size(user_defined_reaction_rates, 2) .ne. this%user_defined_reaction_rates%size()) then
|
|
296
|
+
error = error_t(1, "MICM_SOLVE", "User defined reaction rates array dimension 2 does not match user defined reaction rates ordering")
|
|
297
|
+
return
|
|
298
|
+
end if
|
|
299
|
+
else
|
|
300
|
+
if (size(concentrations, 1) .ne. this%species_ordering%size()) then
|
|
301
|
+
error = error_t(1, "MICM_SOLVE", "Concentrations array dimension 1 does not match species ordering")
|
|
302
|
+
return
|
|
303
|
+
end if
|
|
304
|
+
if (size(concentrations, 2) .ne. this%number_of_grid_cells) then
|
|
305
|
+
error = error_t(1, "MICM_SOLVE", "Concentrations array dimension 2 does not match number of grid cells")
|
|
306
|
+
return
|
|
307
|
+
end if
|
|
308
|
+
if (size(user_defined_reaction_rates, 1) .ne. this%user_defined_reaction_rates%size()) then
|
|
309
|
+
error = error_t(1, "MICM_SOLVE", "User defined reaction rates array dimension 1 does not match user defined reaction rates ordering")
|
|
310
|
+
return
|
|
311
|
+
end if
|
|
312
|
+
if (size(user_defined_reaction_rates, 2) .ne. this%number_of_grid_cells) then
|
|
313
|
+
error = error_t(1, "MICM_SOLVE", "User defined reaction rates array dimension 2 does not match number of grid cells")
|
|
314
|
+
return
|
|
315
|
+
end if
|
|
316
|
+
end if
|
|
317
|
+
|
|
318
|
+
call micm_solve_c(this%ptr, real(time_step, kind=c_double), c_loc(temperature), &
|
|
319
|
+
c_loc(pressure), c_loc(air_density), c_loc(concentrations), &
|
|
320
|
+
c_loc(user_defined_reaction_rates), &
|
|
321
|
+
solver_state_c, solver_stats_c, error_c)
|
|
322
|
+
|
|
323
|
+
solver_state = string_t(solver_state_c)
|
|
324
|
+
solver_stats = solver_stats_t(solver_stats_c)
|
|
325
|
+
error = error_t(error_c)
|
|
326
|
+
|
|
327
|
+
end subroutine solve_arrays
|
|
328
|
+
|
|
329
|
+
!> Solves the chemical system
|
|
330
|
+
!!
|
|
331
|
+
!! This function accepts c pointers and does not check their sizes.
|
|
332
|
+
!! The user is responsible for ensuring the sizes are correct.
|
|
333
|
+
subroutine solve_c_ptrs(this, time_step, temperature, pressure, air_density, &
|
|
334
|
+
concentrations, user_defined_reaction_rates, solver_state, solver_stats, error)
|
|
335
|
+
use iso_fortran_env, only: real64
|
|
239
336
|
use musica_util, only: string_t, string_t_c, error_t_c, error_t
|
|
240
|
-
class(micm_t)
|
|
241
|
-
real(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
type(string_t),
|
|
248
|
-
type(solver_stats_t),
|
|
249
|
-
type(error_t),
|
|
337
|
+
class(micm_t), intent(in) :: this
|
|
338
|
+
real(real64), intent(in) :: time_step
|
|
339
|
+
type(c_ptr), intent(in) :: temperature
|
|
340
|
+
type(c_ptr), intent(in) :: pressure
|
|
341
|
+
type(c_ptr), intent(in) :: air_density
|
|
342
|
+
type(c_ptr), intent(in) :: concentrations
|
|
343
|
+
type(c_ptr), intent(in) :: user_defined_reaction_rates
|
|
344
|
+
type(string_t), intent(out) :: solver_state
|
|
345
|
+
type(solver_stats_t), intent(out) :: solver_stats
|
|
346
|
+
type(error_t), intent(out) :: error
|
|
250
347
|
|
|
251
348
|
type(string_t_c) :: solver_state_c
|
|
252
349
|
type(solver_stats_t_c) :: solver_stats_c
|
|
253
350
|
type(error_t_c) :: error_c
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
pressure_c = c_loc(pressure)
|
|
259
|
-
air_density_c = c_loc(air_density)
|
|
260
|
-
concentrations_c = c_loc(concentrations)
|
|
261
|
-
user_defined_reaction_rates_c = c_loc(user_defined_reaction_rates)
|
|
262
|
-
call micm_solve_c(this%ptr, time_step, temperature_c, pressure_c, air_density_c, &
|
|
263
|
-
concentrations_c, user_defined_reaction_rates_c, solver_state_c, &
|
|
264
|
-
solver_stats_c, error_c)
|
|
351
|
+
|
|
352
|
+
call micm_solve_c(this%ptr, real(time_step, kind=c_double), temperature, pressure, &
|
|
353
|
+
air_density, concentrations, user_defined_reaction_rates, &
|
|
354
|
+
solver_state_c, solver_stats_c, error_c)
|
|
265
355
|
|
|
266
356
|
solver_state = string_t(solver_state_c)
|
|
267
357
|
solver_stats = solver_stats_t(solver_stats_c)
|
|
268
358
|
error = error_t(error_c)
|
|
269
359
|
|
|
270
|
-
end subroutine
|
|
360
|
+
end subroutine solve_c_ptrs
|
|
271
361
|
|
|
272
362
|
!> Constructor for solver_stats_t object that takes ownership of solver_stats_t_c
|
|
273
363
|
function solver_stats_t_constructor( c_solver_stats ) result( new_solver_stats )
|
|
@@ -359,8 +449,9 @@ contains
|
|
|
359
449
|
|
|
360
450
|
!> Get the final time the solver iterated to
|
|
361
451
|
function solver_stats_t_final_time( this ) result( final_time )
|
|
452
|
+
use iso_fortran_env, only: real64
|
|
362
453
|
class(solver_stats_t), intent(in) :: this
|
|
363
|
-
real
|
|
454
|
+
real(real64) :: final_time
|
|
364
455
|
|
|
365
456
|
final_time = this%final_time_
|
|
366
457
|
|
|
@@ -382,15 +473,16 @@ contains
|
|
|
382
473
|
end function get_species_property_string
|
|
383
474
|
|
|
384
475
|
function get_species_property_double(this, species_name, property_name, error) result(value)
|
|
476
|
+
use iso_fortran_env, only: real64
|
|
385
477
|
use musica_util, only: error_t_c, error_t, to_c_string
|
|
386
478
|
class(micm_t) :: this
|
|
387
479
|
character(len=*), intent(in) :: species_name, property_name
|
|
388
480
|
type(error_t), intent(inout) :: error
|
|
389
|
-
real(
|
|
481
|
+
real(real64) :: value
|
|
390
482
|
|
|
391
483
|
type(error_t_c) :: error_c
|
|
392
|
-
value = get_species_property_double_c(this%ptr, &
|
|
393
|
-
|
|
484
|
+
value = real( get_species_property_double_c( this%ptr, to_c_string(species_name), &
|
|
485
|
+
to_c_string(property_name), error_c ), kind=real64 )
|
|
394
486
|
error = error_t(error_c)
|
|
395
487
|
end function get_species_property_double
|
|
396
488
|
|
|
@@ -399,11 +491,11 @@ contains
|
|
|
399
491
|
class(micm_t) :: this
|
|
400
492
|
character(len=*), intent(in) :: species_name, property_name
|
|
401
493
|
type(error_t), intent(inout) :: error
|
|
402
|
-
integer
|
|
494
|
+
integer :: value
|
|
403
495
|
|
|
404
496
|
type(error_t_c) :: error_c
|
|
405
|
-
value = get_species_property_int_c(this%ptr, &
|
|
406
|
-
|
|
497
|
+
value = int( get_species_property_int_c(this%ptr, &
|
|
498
|
+
to_c_string(species_name), to_c_string(property_name), error_c) )
|
|
407
499
|
error = error_t(error_c)
|
|
408
500
|
end function get_species_property_int
|
|
409
501
|
|
|
@@ -48,6 +48,8 @@ if (MUSICA_ENABLE_MICM)
|
|
|
48
48
|
LINKER_LANGUAGE Fortran
|
|
49
49
|
)
|
|
50
50
|
|
|
51
|
+
target_compile_definitions(test_micm_fortran_api PUBLIC MICM_VECTOR_MATRIX_SIZE=${MUSICA_SET_MICM_VECTOR_MATRIX_SIZE})
|
|
52
|
+
|
|
51
53
|
add_test(
|
|
52
54
|
NAME test_micm_fortran_api
|
|
53
55
|
COMMAND $<TARGET_FILE:test_micm_fortran_api>
|