musica 0.7.2__tar.gz → 0.7.3__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 (163) hide show
  1. {musica-0.7.2 → musica-0.7.3}/.github/workflows/release.yml +4 -5
  2. {musica-0.7.2 → musica-0.7.3}/CITATION.cff +1 -1
  3. {musica-0.7.2 → musica-0.7.3}/CMakeLists.txt +1 -1
  4. {musica-0.7.2 → musica-0.7.3}/PKG-INFO +1 -1
  5. {musica-0.7.2 → musica-0.7.3}/cmake/dependencies.cmake +2 -2
  6. {musica-0.7.2 → musica-0.7.3}/configs/chapman/species.json +1 -1
  7. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile +0 -1
  8. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.fortran-gcc +1 -1
  9. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.fortran-gcc.integration +0 -1
  10. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.memcheck +0 -1
  11. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.mpi +0 -1
  12. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.mpi_openmp +0 -1
  13. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.openmp +0 -1
  14. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.python +0 -1
  15. {musica-0.7.2 → musica-0.7.3}/fortran/test/fetch_content_integration/CMakeLists.txt +1 -1
  16. {musica-0.7.2 → musica-0.7.3}/fortran/test/fetch_content_integration/test_micm_api.F90 +8 -13
  17. {musica-0.7.2 → musica-0.7.3}/fortran/test/fetch_content_integration/test_tuvx_api.F90 +161 -12
  18. {musica-0.7.2 → musica-0.7.3}/fortran/tuvx/CMakeLists.txt +2 -0
  19. {musica-0.7.2 → musica-0.7.3}/fortran/tuvx/grid.F90 +1 -1
  20. {musica-0.7.2 → musica-0.7.3}/fortran/tuvx/profile.F90 +1 -1
  21. musica-0.7.3/fortran/tuvx/radiator.F90 +361 -0
  22. musica-0.7.3/fortran/tuvx/radiator_map.F90 +180 -0
  23. {musica-0.7.2 → musica-0.7.3}/fortran/tuvx/tuvx.F90 +43 -8
  24. {musica-0.7.2 → musica-0.7.3}/include/musica/micm.hpp +2 -0
  25. {musica-0.7.2 → musica-0.7.3}/include/musica/tuvx/grid.hpp +5 -3
  26. {musica-0.7.2 → musica-0.7.3}/include/musica/tuvx/grid_map.hpp +3 -3
  27. {musica-0.7.2 → musica-0.7.3}/include/musica/tuvx/profile.hpp +3 -2
  28. {musica-0.7.2 → musica-0.7.3}/include/musica/tuvx/profile_map.hpp +3 -2
  29. musica-0.7.3/include/musica/tuvx/radiator.hpp +263 -0
  30. musica-0.7.3/include/musica/tuvx/radiator_map.hpp +93 -0
  31. {musica-0.7.2 → musica-0.7.3}/include/musica/tuvx/tuvx.hpp +9 -0
  32. {musica-0.7.2 → musica-0.7.3}/python/test/test_chapman.py +6 -7
  33. {musica-0.7.2 → musica-0.7.3}/python/wrapper.cpp +6 -0
  34. {musica-0.7.2 → musica-0.7.3}/src/micm/micm.cpp +2 -1
  35. {musica-0.7.2 → musica-0.7.3}/src/packaging/CMakeLists.txt +2 -0
  36. {musica-0.7.2 → musica-0.7.3}/src/test/unit/micm/micm_c_api.cpp +13 -26
  37. {musica-0.7.2 → musica-0.7.3}/src/test/unit/tuvx/tuvx_c_api.cpp +337 -0
  38. {musica-0.7.2 → musica-0.7.3}/src/tuvx/CMakeLists.txt +4 -0
  39. musica-0.7.3/src/tuvx/interface.F90 +147 -0
  40. musica-0.7.3/src/tuvx/interface_grid.F90 +236 -0
  41. {musica-0.7.2 → musica-0.7.3}/src/tuvx/interface_grid_map.F90 +75 -75
  42. {musica-0.7.2 → musica-0.7.3}/src/tuvx/interface_profile_map.F90 +4 -4
  43. musica-0.7.3/src/tuvx/interface_radiator.F90 +324 -0
  44. musica-0.7.3/src/tuvx/interface_radiator_map.F90 +177 -0
  45. musica-0.7.3/src/tuvx/radiator.cpp +268 -0
  46. musica-0.7.3/src/tuvx/radiator_map.cpp +180 -0
  47. {musica-0.7.2 → musica-0.7.3}/src/tuvx/tuvx.cpp +19 -0
  48. musica-0.7.2/src/tuvx/interface.F90 +0 -118
  49. musica-0.7.2/src/tuvx/interface_grid.F90 +0 -237
  50. {musica-0.7.2 → musica-0.7.3}/.clang-format +0 -0
  51. {musica-0.7.2 → musica-0.7.3}/.clang-tidy +0 -0
  52. {musica-0.7.2 → musica-0.7.3}/.dockerignore +0 -0
  53. {musica-0.7.2 → musica-0.7.3}/.github/workflows/clang_format.yml +0 -0
  54. {musica-0.7.2 → musica-0.7.3}/.github/workflows/clang_tidy.yml +0 -0
  55. {musica-0.7.2 → musica-0.7.3}/.github/workflows/docker.yml +0 -0
  56. {musica-0.7.2 → musica-0.7.3}/.github/workflows/fetch_content_integration.yml +0 -0
  57. {musica-0.7.2 → musica-0.7.3}/.github/workflows/gh_pages.yml +0 -0
  58. {musica-0.7.2 → musica-0.7.3}/.github/workflows/mac.yml +0 -0
  59. {musica-0.7.2 → musica-0.7.3}/.github/workflows/pep8.yml +0 -0
  60. {musica-0.7.2 → musica-0.7.3}/.github/workflows/pip.yml +0 -0
  61. {musica-0.7.2 → musica-0.7.3}/.github/workflows/ubuntu.yml +0 -0
  62. {musica-0.7.2 → musica-0.7.3}/.github/workflows/windows.yml +0 -0
  63. {musica-0.7.2 → musica-0.7.3}/.gitignore +0 -0
  64. {musica-0.7.2 → musica-0.7.3}/.gitmodules +0 -0
  65. {musica-0.7.2 → musica-0.7.3}/LICENSE +0 -0
  66. {musica-0.7.2 → musica-0.7.3}/README.md +0 -0
  67. {musica-0.7.2 → musica-0.7.3}/cmake/FindSphinx.cmake +0 -0
  68. {musica-0.7.2 → musica-0.7.3}/cmake/SetDefaults.cmake +0 -0
  69. {musica-0.7.2 → musica-0.7.3}/cmake/cmake_uninstall.cmake.in +0 -0
  70. {musica-0.7.2 → musica-0.7.3}/cmake/musica.settings.in +0 -0
  71. {musica-0.7.2 → musica-0.7.3}/cmake/musicaConfig.cmake.in +0 -0
  72. {musica-0.7.2 → musica-0.7.3}/cmake/summary.cmake +0 -0
  73. {musica-0.7.2 → musica-0.7.3}/cmake/test_util.cmake +0 -0
  74. {musica-0.7.2 → musica-0.7.3}/configs/TS1/config.json +0 -0
  75. {musica-0.7.2 → musica-0.7.3}/configs/TS1/initial_conditions.csv +0 -0
  76. {musica-0.7.2 → musica-0.7.3}/configs/TS1/reactions.json +0 -0
  77. {musica-0.7.2 → musica-0.7.3}/configs/TS1/species.json +0 -0
  78. {musica-0.7.2 → musica-0.7.3}/configs/analytical/config.json +0 -0
  79. {musica-0.7.2 → musica-0.7.3}/configs/analytical/reactions.json +0 -0
  80. {musica-0.7.2 → musica-0.7.3}/configs/analytical/species.json +0 -0
  81. {musica-0.7.2 → musica-0.7.3}/configs/carbon_bond_5/config.json +0 -0
  82. {musica-0.7.2 → musica-0.7.3}/configs/carbon_bond_5/initial_conditions.csv +0 -0
  83. {musica-0.7.2 → musica-0.7.3}/configs/carbon_bond_5/reactions.json +0 -0
  84. {musica-0.7.2 → musica-0.7.3}/configs/carbon_bond_5/species.json +0 -0
  85. {musica-0.7.2 → musica-0.7.3}/configs/chapman/config.json +0 -0
  86. {musica-0.7.2 → musica-0.7.3}/configs/chapman/initial_conditions.csv +0 -0
  87. {musica-0.7.2 → musica-0.7.3}/configs/chapman/reactions.json +0 -0
  88. {musica-0.7.2 → musica-0.7.3}/configs/robertson/config.json +0 -0
  89. {musica-0.7.2 → musica-0.7.3}/configs/robertson/initial_conditions.csv +0 -0
  90. {musica-0.7.2 → musica-0.7.3}/configs/robertson/reactions.json +0 -0
  91. {musica-0.7.2 → musica-0.7.3}/configs/robertson/species.json +0 -0
  92. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.docs +0 -0
  93. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.fortran-intel +0 -0
  94. {musica-0.7.2 → musica-0.7.3}/docker/Dockerfile.fortran-nvhpc +0 -0
  95. {musica-0.7.2 → musica-0.7.3}/docs/CMakeLists.txt +0 -0
  96. {musica-0.7.2 → musica-0.7.3}/docs/Makefile +0 -0
  97. {musica-0.7.2 → musica-0.7.3}/docs/Software Development Plan.pdf +0 -0
  98. {musica-0.7.2 → musica-0.7.3}/docs/make.bat +0 -0
  99. {musica-0.7.2 → musica-0.7.3}/docs/requirements.txt +0 -0
  100. {musica-0.7.2 → musica-0.7.3}/docs/source/_static/custom.css +0 -0
  101. {musica-0.7.2 → musica-0.7.3}/docs/source/_static/favicon/favicon.ico +0 -0
  102. {musica-0.7.2 → musica-0.7.3}/docs/source/_static/index_api.svg +0 -0
  103. {musica-0.7.2 → musica-0.7.3}/docs/source/_static/index_contribute.svg +0 -0
  104. {musica-0.7.2 → musica-0.7.3}/docs/source/_static/index_getting_started.svg +0 -0
  105. {musica-0.7.2 → musica-0.7.3}/docs/source/_static/index_user_guide.svg +0 -0
  106. {musica-0.7.2 → musica-0.7.3}/docs/source/api/index.rst +0 -0
  107. {musica-0.7.2 → musica-0.7.3}/docs/source/conf.py +0 -0
  108. {musica-0.7.2 → musica-0.7.3}/docs/source/contributing/index.rst +0 -0
  109. {musica-0.7.2 → musica-0.7.3}/docs/source/getting_started/getting_started.rst +0 -0
  110. {musica-0.7.2 → musica-0.7.3}/docs/source/getting_started/installation.rst +0 -0
  111. {musica-0.7.2 → musica-0.7.3}/docs/source/getting_started/overview.rst +0 -0
  112. {musica-0.7.2 → musica-0.7.3}/docs/source/index.rst +0 -0
  113. {musica-0.7.2 → musica-0.7.3}/docs/source/references.bib +0 -0
  114. {musica-0.7.2 → musica-0.7.3}/docs/source/tutorial/chapter0.rst +0 -0
  115. {musica-0.7.2 → musica-0.7.3}/docs/source/tutorial/chapter1.rst +0 -0
  116. {musica-0.7.2 → musica-0.7.3}/docs/source/tutorial/chapter2.rst +0 -0
  117. {musica-0.7.2 → musica-0.7.3}/docs/source/tutorial/tutorial.rst +0 -0
  118. {musica-0.7.2 → musica-0.7.3}/docs/source/user_guide/fortran_c.rst +0 -0
  119. {musica-0.7.2 → musica-0.7.3}/docs/source/user_guide/model_interface.rst +0 -0
  120. {musica-0.7.2 → musica-0.7.3}/docs/source/user_guide/user_guide.rst +0 -0
  121. {musica-0.7.2 → musica-0.7.3}/fortran/CMakeLists.txt +0 -0
  122. {musica-0.7.2 → musica-0.7.3}/fortran/micm.F90 +0 -0
  123. {musica-0.7.2 → musica-0.7.3}/fortran/packaging/CMakeLists.txt +0 -0
  124. {musica-0.7.2 → musica-0.7.3}/fortran/test/CMakeLists.txt +0 -0
  125. {musica-0.7.2 → musica-0.7.3}/fortran/test/fetch_content_integration/test_get_micm_version.F90 +0 -0
  126. {musica-0.7.2 → musica-0.7.3}/fortran/test/fetch_content_integration/test_micm_box_model.F90 +0 -0
  127. {musica-0.7.2 → musica-0.7.3}/fortran/test/tutorial/CMakeLists.txt +0 -0
  128. {musica-0.7.2 → musica-0.7.3}/fortran/test/tutorial/demo.f90 +0 -0
  129. {musica-0.7.2 → musica-0.7.3}/fortran/test/unit/CMakeLists.txt +0 -0
  130. {musica-0.7.2 → musica-0.7.3}/fortran/test/unit/tuvx.F90 +0 -0
  131. {musica-0.7.2 → musica-0.7.3}/fortran/test/unit/tuvx_mpi.F90 +0 -0
  132. {musica-0.7.2 → musica-0.7.3}/fortran/test/unit/tuvx_openmp.F90 +0 -0
  133. {musica-0.7.2 → musica-0.7.3}/fortran/test/unit/util.F90 +0 -0
  134. {musica-0.7.2 → musica-0.7.3}/fortran/tuvx/grid_map.F90 +0 -0
  135. {musica-0.7.2 → musica-0.7.3}/fortran/tuvx/profile_map.F90 +0 -0
  136. {musica-0.7.2 → musica-0.7.3}/fortran/util.F90 +0 -0
  137. {musica-0.7.2 → musica-0.7.3}/include/musica/component_versions.hpp +0 -0
  138. {musica-0.7.2 → musica-0.7.3}/include/musica/util.hpp +0 -0
  139. {musica-0.7.2 → musica-0.7.3}/include/musica/version.hpp +0 -0
  140. {musica-0.7.2 → musica-0.7.3}/pyproject.toml +0 -0
  141. {musica-0.7.2 → musica-0.7.3}/python/CMakeLists.txt +0 -0
  142. {musica-0.7.2 → musica-0.7.3}/python/test/CMakeLists.txt +0 -0
  143. {musica-0.7.2 → musica-0.7.3}/python/test/test_analytical.py +0 -0
  144. {musica-0.7.2 → musica-0.7.3}/python/test/tuvx.py +0 -0
  145. {musica-0.7.2 → musica-0.7.3}/src/CMakeLists.txt +0 -0
  146. {musica-0.7.2 → musica-0.7.3}/src/component_versions.cpp +0 -0
  147. {musica-0.7.2 → musica-0.7.3}/src/micm/CMakeLists.txt +0 -0
  148. {musica-0.7.2 → musica-0.7.3}/src/packaging/modulefile.lua.in +0 -0
  149. {musica-0.7.2 → musica-0.7.3}/src/test/CMakeLists.txt +0 -0
  150. {musica-0.7.2 → musica-0.7.3}/src/test/unit/CMakeLists.txt +0 -0
  151. {musica-0.7.2 → musica-0.7.3}/src/test/unit/component_versions.cpp +0 -0
  152. {musica-0.7.2 → musica-0.7.3}/src/test/unit/micm/CMakeLists.txt +0 -0
  153. {musica-0.7.2 → musica-0.7.3}/src/test/unit/micm/micm.cpp +0 -0
  154. {musica-0.7.2 → musica-0.7.3}/src/test/unit/tuvx/CMakeLists.txt +0 -0
  155. {musica-0.7.2 → musica-0.7.3}/src/tuvx/grid.cpp +0 -0
  156. {musica-0.7.2 → musica-0.7.3}/src/tuvx/grid_map.cpp +0 -0
  157. {musica-0.7.2 → musica-0.7.3}/src/tuvx/interface_profile.F90 +0 -0
  158. {musica-0.7.2 → musica-0.7.3}/src/tuvx/profile.cpp +0 -0
  159. {musica-0.7.2 → musica-0.7.3}/src/tuvx/profile_map.cpp +0 -0
  160. {musica-0.7.2 → musica-0.7.3}/src/tuvx/tuvx_util.F90 +0 -0
  161. {musica-0.7.2 → musica-0.7.3}/src/util.cpp +0 -0
  162. {musica-0.7.2 → musica-0.7.3}/src/version.cpp.in +0 -0
  163. {musica-0.7.2 → musica-0.7.3}/valgrind.supp +0 -0
@@ -2,10 +2,9 @@ name: Publish Python Package
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
5
- push:
6
- # release:
7
- # types:
8
- # - published
5
+ release:
6
+ types:
7
+ - published
9
8
 
10
9
  jobs:
11
10
  build_sdist:
@@ -67,7 +66,7 @@ jobs:
67
66
  runs-on: ubuntu-latest
68
67
  environment:
69
68
  name: pypi
70
- url: https://pypi.org/p/<your-pypi-project-name>
69
+ url: https://pypi.org/p/musica
71
70
  permissions:
72
71
  id-token: write
73
72
 
@@ -64,4 +64,4 @@ number: 10
64
64
  page: "E1743 - E1760"
65
65
  doi: "10.1175/BAMS-D-19-0331.1"
66
66
  url: "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
67
- version: 0.7.0
67
+ version: 0.7.3
@@ -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.7.2)
4
+ project(musica-distribution VERSION 0.7.3)
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: musica
3
- Version: 0.7.2
3
+ Version: 0.7.3
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>
@@ -51,7 +51,7 @@ endif()
51
51
  if (MUSICA_ENABLE_MICM AND MUSICA_BUILD_C_CXX_INTERFACE)
52
52
 
53
53
  set_git_default(MICM_GIT_REPOSITORY https://github.com/NCAR/micm.git)
54
- set_git_default(MICM_GIT_TAG v3.5.0)
54
+ set_git_default(MICM_GIT_TAG 6b1c58a9be14095e3f3c6df403c91c4e800f23de)
55
55
 
56
56
  FetchContent_Declare(micm
57
57
  GIT_REPOSITORY ${MICM_GIT_REPOSITORY}
@@ -75,7 +75,7 @@ if (MUSICA_ENABLE_TUVX AND MUSICA_BUILD_C_CXX_INTERFACE)
75
75
  set(TUVX_INSTALL_INCLUDE_DIR ${MUSICA_INSTALL_INCLUDE_DIR} CACHE STRING "" FORCE)
76
76
 
77
77
  set_git_default(TUVX_GIT_REPOSITORY https://github.com/NCAR/tuv-x.git)
78
- set_git_default(TUVX_GIT_TAG 80f896a0fb591987c2a79209377bd6f599b4fb6f)
78
+ set_git_default(TUVX_GIT_TAG 674ee1e72853bb44d23c36602fa73c955b2f021d)
79
79
 
80
80
  FetchContent_Declare(tuvx
81
81
  GIT_REPOSITORY ${TUVX_GIT_REPOSITORY}
@@ -3,7 +3,7 @@
3
3
  {
4
4
  "name": "M",
5
5
  "type": "CHEM_SPEC",
6
- "tracer type": "CONSTANT"
6
+ "tracer type": "THIRD_BODY"
7
7
  },
8
8
  {
9
9
  "name": "O2",
@@ -9,7 +9,6 @@ RUN dnf -y update \
9
9
  gfortran \
10
10
  gdb \
11
11
  git \
12
- lapack-devel \
13
12
  lcov \
14
13
  make \
15
14
  netcdf-fortran-devel \
@@ -13,7 +13,6 @@ RUN dnf -y update \
13
13
  git \
14
14
  hdf5-devel \
15
15
  json-devel \
16
- lapack-devel \
17
16
  lcov \
18
17
  libcurl-devel \
19
18
  m4 \
@@ -38,6 +37,7 @@ RUN cd musica \
38
37
  && cmake -S . \
39
38
  -B build \
40
39
  -D CMAKE_BUILD_TYPE=${BUILD_TYPE} \
40
+ -D MUSICA_GIT_TAG=${MUSICA_GIT_TAG} \
41
41
  -D MUSICA_BUILD_FORTRAN_INTERFACE=ON \
42
42
  -D MUSICA_ENABLE_MEMCHECK=ON \
43
43
  && cd build \
@@ -14,7 +14,6 @@ RUN dnf -y update \
14
14
  git \
15
15
  hdf5-devel \
16
16
  json-devel \
17
- lapack-devel \
18
17
  lcov \
19
18
  libcurl-devel \
20
19
  m4 \
@@ -9,7 +9,6 @@ RUN dnf -y update \
9
9
  gfortran \
10
10
  gdb \
11
11
  git \
12
- lapack-devel \
13
12
  lcov \
14
13
  make \
15
14
  netcdf-fortran-devel \
@@ -16,7 +16,6 @@ RUN sudo dnf -y install \
16
16
  gcc-c++ \
17
17
  gfortran \
18
18
  git \
19
- lapack-devel \
20
19
  lcov \
21
20
  make \
22
21
  netcdf-fortran-devel \
@@ -16,7 +16,6 @@ RUN sudo dnf -y install \
16
16
  gcc-c++ \
17
17
  gfortran \
18
18
  git \
19
- lapack-devel \
20
19
  lcov \
21
20
  make \
22
21
  netcdf-fortran-devel \
@@ -16,7 +16,6 @@ RUN sudo dnf -y install \
16
16
  gcc-c++ \
17
17
  gfortran \
18
18
  git \
19
- lapack-devel \
20
19
  lcov \
21
20
  make \
22
21
  netcdf-fortran-devel \
@@ -9,7 +9,6 @@ RUN dnf -y update \
9
9
  gcc-fortran \
10
10
  gdb \
11
11
  git \
12
- lapack-devel \
13
12
  make \
14
13
  netcdf-fortran-devel \
15
14
  pip \
@@ -116,4 +116,4 @@ if (MUSICA_ENABLE_TUVX)
116
116
  copy_tuvx_data_dir ALL ${CMAKE_COMMAND} -E copy_directory
117
117
  ${CMAKE_CURRENT_SOURCE_DIR}/../../../build/_deps/tuvx-src/data ${CMAKE_BINARY_DIR}/data
118
118
  )
119
- endif()
119
+ endif()
@@ -30,7 +30,7 @@ contains
30
30
  real(c_double) :: pressure
31
31
  real(c_double) :: air_density
32
32
  integer(c_int) :: num_concentrations, num_user_defined_reaction_rates
33
- real(c_double), dimension(5) :: concentrations
33
+ real(c_double), dimension(4) :: concentrations
34
34
  real(c_double), dimension(3) :: user_defined_reaction_rates
35
35
  character(len=256) :: config_path
36
36
  integer(c_int) :: solver_type
@@ -52,8 +52,8 @@ contains
52
52
  temperature = 272.5
53
53
  pressure = 101253.4
54
54
  air_density = pressure / ( GAS_CONSTANT * temperature )
55
- num_concentrations = 5
56
- concentrations = (/ 0.75, 0.4, 0.8, 0.01, 0.02 /)
55
+ num_concentrations = 4
56
+ concentrations = (/ 0.4, 0.8, 0.01, 0.02 /)
57
57
  num_user_defined_reaction_rates = 3
58
58
  user_defined_reaction_rates = (/ 0.1, 0.2, 0.3 /)
59
59
 
@@ -109,21 +109,16 @@ contains
109
109
  ASSERT( logical( bool_value ) )
110
110
 
111
111
  string_value = micm%get_species_property_string( "O3", "missing property", error )
112
- ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, \
113
- MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
112
+ ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
114
113
  double_value = micm%get_species_property_double( "O3", "missing property", error )
115
- ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, \
116
- MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
114
+ ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
117
115
  int_value = micm%get_species_property_int( "O3", "missing property", error )
118
- ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, \
119
- MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
116
+ ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
120
117
  bool_value = micm%get_species_property_bool( "O3", "missing property", error )
121
- ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, \
122
- MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
118
+ ASSERT( error%is_error( MICM_ERROR_CATEGORY_SPECIES, MICM_SPECIES_ERROR_CODE_PROPERTY_NOT_FOUND ) )
123
119
  deallocate( micm )
124
120
  micm => micm_t( "configs/invalid", solver_type, num_grid_cells, error )
125
- ASSERT( error%is_error( MICM_ERROR_CATEGORY_CONFIGURATION, \
126
- MICM_CONFIGURATION_ERROR_CODE_INVALID_FILE_PATH ) )
121
+ ASSERT( error%is_error( MICM_ERROR_CATEGORY_CONFIGURATION, MICM_CONFIGURATION_ERROR_CODE_INVALID_FILE_PATH ) )
127
122
  ASSERT( .not. associated( micm ) )
128
123
 
129
124
  write(*,*) "[test micm fort api] Finished."
@@ -3,7 +3,8 @@
3
3
  !
4
4
  program combined_tuvx_tests
5
5
  use iso_c_binding
6
- use musica_tuvx, only: tuvx_t, grid_map_t, grid_t, profile_map_t, profile_t
6
+ use musica_tuvx, only: tuvx_t, grid_map_t, grid_t, profile_map_t, profile_t, &
7
+ radiator_map_t, radiator_t
7
8
  use musica_util, only: assert, error_t
8
9
 
9
10
  implicit none
@@ -55,22 +56,36 @@ contains
55
56
 
56
57
  subroutine test_tuvx_solve()
57
58
 
58
- type(tuvx_t), pointer :: tuvx
59
- type(error_t) :: error
60
- type(grid_map_t), pointer :: grids
61
- character(len=256) :: config_path
62
- type(grid_t), pointer :: grid
63
- type(profile_map_t), pointer :: profiles
64
- type(profile_t), pointer :: profile, profile_copy
65
- real*8, dimension(5), target :: edges, edge_values, temp_edge
66
- real*8, dimension(4), target :: midpoints, midpoint_values, layer_densities, temp_midpoint
67
- real*8 :: temp_real
59
+ type(tuvx_t), pointer :: tuvx
60
+ type(error_t) :: error
61
+ character(len=256) :: config_path
62
+ type(grid_map_t), pointer :: grids
63
+ type(grid_t), pointer :: grid, height_grid, wavelength_grid
64
+ type(profile_map_t), pointer :: profiles
65
+ type(profile_t), pointer :: profile, profile_copy
66
+ type(radiator_map_t), pointer :: radiators
67
+ type(radiator_t), pointer :: radiator, radiator_copy
68
+ real*8, dimension(5), target :: edges, edge_values, temp_edge
69
+ real*8, dimension(4), target :: midpoints, midpoint_values, layer_densities, temp_midpoint
70
+ real*8 :: temp_real
71
+ integer :: num_vertical_layers, num_wavelength_bins
72
+ real*8, dimension(3,2), target :: optical_depths, temp_od
73
+ real*8, dimension(3,2), target :: single_scattering_albedos, temp_ssa
74
+ real*8, dimension(3,2,1), target :: asymmetry_factors, temp_asym
68
75
 
69
76
  edges = (/ 1.0, 2.0, 3.0, 4.0, 5.0 /)
70
77
  midpoints = (/ 15.0, 25.0, 35.0, 45.0 /)
71
78
  edge_values = (/ 10.0, 20.0, 30.0, 40.0, 50.0 /)
72
79
  midpoint_values = (/ 15.0, 25.0, 35.0, 45.0 /)
73
80
  layer_densities = (/ 2.0, 4.0, 1.0, 7.0 /)
81
+ num_vertical_layers = 3
82
+ num_wavelength_bins = 2
83
+ optical_depths(:,1) = (/ 30.0, 20.0, 10.0 /)
84
+ optical_depths(:,2) = (/ 70.0, 80.0, 90.0 /)
85
+ single_scattering_albedos(:,1) = (/ 300.0, 200.0, 100.0 /)
86
+ single_scattering_albedos(:,2) = (/ 700.0, 800.0, 900.0 /)
87
+ asymmetry_factors(:,1,1) = (/ 3.0, 2.0, 1.0 /)
88
+ asymmetry_factors(:,2,1) = (/ 7.0, 8.0, 9.0 /)
74
89
 
75
90
  config_path = "examples/ts1_tsmlt.json"
76
91
 
@@ -312,12 +327,146 @@ contains
312
327
  ASSERT_EQ( temp_edge(3), 36.0 )
313
328
  ASSERT_EQ( temp_edge(4), 38.0 )
314
329
  ASSERT_EQ( temp_edge(5), 40.0 )
315
-
330
+
331
+ radiators => tuvx%get_radiators( error )
332
+ ASSERT( error%is_success() )
333
+
334
+ radiator => radiators%get( "foo_radiator", error )
335
+ ASSERT( .not. error%is_success() )
336
+ deallocate( radiator )
337
+ deallocate( radiators )
338
+
339
+ radiators =>radiator_map_t( error )
340
+ ASSERT( error%is_success() )
341
+
342
+ height_grid => grid_t( "height", "km", num_vertical_layers, error )
343
+ wavelength_grid => grid_t( "wavelength", "nm", num_wavelength_bins, error )
344
+ radiator => radiator_t( "foo_radiator", height_grid, wavelength_grid, error )
345
+ ASSERT( error%is_success() )
346
+
347
+ call radiator%set_optical_depths( optical_depths, error )
348
+ ASSERT( error%is_success() )
349
+
350
+ call radiator%get_optical_depths( temp_od, error )
351
+ ASSERT( error%is_success() )
352
+ ASSERT_EQ( temp_od(1,1), 30.0 )
353
+ ASSERT_EQ( temp_od(2,1), 20.0 )
354
+ ASSERT_EQ( temp_od(3,1), 10.0 )
355
+ ASSERT_EQ( temp_od(1,2), 70.0 )
356
+ ASSERT_EQ( temp_od(2,2), 80.0 )
357
+ ASSERT_EQ( temp_od(3,2), 90.0 )
358
+
359
+ call radiator%set_single_scattering_albedos( single_scattering_albedos, error )
360
+ ASSERT( error%is_success() )
361
+
362
+ call radiator%get_single_scattering_albedos( temp_ssa, error )
363
+ ASSERT( error%is_success() )
364
+ ASSERT_EQ( temp_ssa(1,1), 300.0 )
365
+ ASSERT_EQ( temp_ssa(2,1), 200.0 )
366
+ ASSERT_EQ( temp_ssa(3,1), 100.0 )
367
+ ASSERT_EQ( temp_ssa(1,2), 700.0 )
368
+ ASSERT_EQ( temp_ssa(2,2), 800.0 )
369
+ ASSERT_EQ( temp_ssa(3,2), 900.0 )
370
+
371
+ call radiator%set_asymmetry_factors( asymmetry_factors, error )
372
+ ASSERT( error%is_success() )
373
+
374
+ call radiator%get_asymmetry_factors( temp_asym, error )
375
+ ASSERT( error%is_success() )
376
+ ASSERT_EQ( temp_asym(1,1,1), 3.0 )
377
+ ASSERT_EQ( temp_asym(2,1,1), 2.0 )
378
+ ASSERT_EQ( temp_asym(3,1,1), 1.0 )
379
+ ASSERT_EQ( temp_asym(1,2,1), 7.0 )
380
+ ASSERT_EQ( temp_asym(2,2,1), 8.0 )
381
+ ASSERT_EQ( temp_asym(3,2,1), 9.0 )
382
+ !
383
+ call radiators%add( radiator, error )
384
+ radiator_copy => radiators%get( "foo_radiator", error )
385
+
386
+ optical_depths(:,:) = 0.0
387
+ single_scattering_albedos(:,:) = 0.0
388
+ asymmetry_factors(:,:,:) = 0.0
389
+
390
+ call radiator_copy%get_optical_depths( optical_depths, error )
391
+ ASSERT( error%is_success() )
392
+ ASSERT_EQ( optical_depths(1,1), 30.0 )
393
+ ASSERT_EQ( optical_depths(2,1), 20.0 )
394
+ ASSERT_EQ( optical_depths(3,1), 10.0 )
395
+ ASSERT_EQ( optical_depths(1,2), 70.0 )
396
+ ASSERT_EQ( optical_depths(2,2), 80.0 )
397
+ ASSERT_EQ( optical_depths(3,2), 90.0 )
398
+
399
+ call radiator_copy%get_single_scattering_albedos( single_scattering_albedos, error )
400
+ ASSERT( error%is_success() )
401
+ ASSERT_EQ( single_scattering_albedos(1,1), 300.0 )
402
+ ASSERT_EQ( single_scattering_albedos(2,1), 200.0 )
403
+ ASSERT_EQ( single_scattering_albedos(3,1), 100.0 )
404
+ ASSERT_EQ( single_scattering_albedos(1,2), 700.0 )
405
+ ASSERT_EQ( single_scattering_albedos(2,2), 800.0 )
406
+ ASSERT_EQ( single_scattering_albedos(3,2), 900.0 )
407
+
408
+ call radiator_copy%get_asymmetry_factors( asymmetry_factors, error )
409
+ ASSERT( error%is_success() )
410
+ ASSERT_EQ( asymmetry_factors(1,1,1), 3.0 )
411
+ ASSERT_EQ( asymmetry_factors(2,1,1), 2.0 )
412
+ ASSERT_EQ( asymmetry_factors(3,1,1), 1.0 )
413
+ ASSERT_EQ( asymmetry_factors(1,2,1), 7.0 )
414
+ ASSERT_EQ( asymmetry_factors(2,2,1), 8.0 )
415
+ ASSERT_EQ( asymmetry_factors(3,2,1), 9.0 )
416
+
417
+ optical_depths(:,1) = (/ 90.0, 80.0, 70.0 /)
418
+ optical_depths(:,2) = (/ 75.0, 85.0, 95.0 /)
419
+ single_scattering_albedos(:,1) = (/ 900.0, 800.0, 700.0 /)
420
+ single_scattering_albedos(:,2) = (/ 750.0, 850.0, 950.0 /)
421
+ asymmetry_factors(:,1,1) = (/ 9.0, 8.0, 7.0 /)
422
+ asymmetry_factors(:,2,1) = (/ 5.0, 4.0, 3.0 /)
423
+
424
+ call radiator_copy%set_optical_depths( optical_depths, error )
425
+ call radiator_copy%set_single_scattering_albedos( single_scattering_albedos, error )
426
+ call radiator_copy%set_asymmetry_factors( asymmetry_factors, error )
427
+ ASSERT( error%is_success() )
428
+
429
+ optical_depths(:,:) = 0.0
430
+ single_scattering_albedos(:,:) = 0.0
431
+ asymmetry_factors(:,:,:) = 0.0
432
+
433
+ call radiator%get_optical_depths( optical_depths, error )
434
+ ASSERT( error%is_success() )
435
+ ASSERT_EQ( optical_depths(1,1), 90.0 )
436
+ ASSERT_EQ( optical_depths(2,1), 80.0 )
437
+ ASSERT_EQ( optical_depths(3,1), 70.0 )
438
+ ASSERT_EQ( optical_depths(1,2), 75.0 )
439
+ ASSERT_EQ( optical_depths(2,2), 85.0 )
440
+ ASSERT_EQ( optical_depths(3,2), 95.0 )
441
+
442
+ call radiator%get_single_scattering_albedos( single_scattering_albedos, error )
443
+ ASSERT( error%is_success() )
444
+ ASSERT_EQ( single_scattering_albedos(1,1), 900.0 )
445
+ ASSERT_EQ( single_scattering_albedos(2,1), 800.0 )
446
+ ASSERT_EQ( single_scattering_albedos(3,1), 700.0 )
447
+ ASSERT_EQ( single_scattering_albedos(1,2), 750.0 )
448
+ ASSERT_EQ( single_scattering_albedos(2,2), 850.0 )
449
+ ASSERT_EQ( single_scattering_albedos(3,2), 950.0 )
450
+
451
+ call radiator%get_asymmetry_factors( asymmetry_factors, error )
452
+ ASSERT( error%is_success() )
453
+ ASSERT_EQ( asymmetry_factors(1,1,1), 9.0 )
454
+ ASSERT_EQ( asymmetry_factors(2,1,1), 8.0 )
455
+ ASSERT_EQ( asymmetry_factors(3,1,1), 7.0 )
456
+ ASSERT_EQ( asymmetry_factors(1,2,1), 5.0 )
457
+ ASSERT_EQ( asymmetry_factors(2,2,1), 4.0 )
458
+ ASSERT_EQ( asymmetry_factors(3,2,1), 3.0 )
459
+
316
460
  deallocate( grid )
317
461
  deallocate( grids )
318
462
  deallocate( profile )
319
463
  deallocate( profile_copy )
320
464
  deallocate( profiles )
465
+ deallocate( radiator_copy )
466
+ deallocate( radiator )
467
+ deallocate( radiators )
468
+ deallocate( height_grid )
469
+ deallocate( wavelength_grid )
321
470
  deallocate( tuvx )
322
471
 
323
472
  end subroutine test_tuvx_solve
@@ -4,5 +4,7 @@ target_sources(musica-fortran
4
4
  grid_map.F90
5
5
  profile.F90
6
6
  profile_map.F90
7
+ radiator.F90
8
+ radiator_map.F90
7
9
  tuvx.F90
8
10
  )
@@ -82,7 +82,7 @@ module musica_tuvx_grid
82
82
  procedure :: set_edges
83
83
  ! Get grid edges
84
84
  procedure :: get_edges
85
- ! Set the grid edges and midpoints
85
+ ! Set the grid midpoints
86
86
  procedure :: set_midpoints
87
87
  ! Get the grid midpoints
88
88
  procedure :: get_midpoints
@@ -16,7 +16,7 @@ module musica_tuvx_profile
16
16
  interface
17
17
  function create_profile_c(profile_name, profile_units, grid, error) &
18
18
  bind(C, name="CreateProfile")
19
- use iso_c_binding, only: c_ptr, c_char, c_size_t
19
+ use iso_c_binding, only: c_ptr, c_char
20
20
  use musica_util, only: error_t_c
21
21
  character(len=1, kind=c_char), intent(in) :: profile_name(*)
22
22
  character(len=1, kind=c_char), intent(in) :: profile_units(*)