musica 0.12.0__cp311-cp311-win_amd64.whl → 0.12.2__cp311-cp311-win_amd64.whl
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/CMakeLists.txt +28 -2
- musica/__init__.py +9 -49
- musica/_musica.cp311-win_amd64.pyd +0 -0
- musica/_version.py +1 -1
- musica/backend.py +41 -0
- musica/binding_common.cpp +23 -6
- musica/carma.cpp +911 -0
- musica/carma.py +1729 -0
- musica/constants.py +1 -1
- musica/cpu_binding.cpp +2 -1
- musica/cuda.py +4 -1
- musica/examples/__init__.py +1 -0
- musica/examples/carma_aluminum.py +124 -0
- musica/examples/carma_sulfate.py +246 -0
- musica/examples/examples.py +165 -0
- musica/examples/sulfate_box_model.py +439 -0
- musica/examples/ts1_latin_hypercube.py +245 -0
- musica/gpu_binding.cpp +2 -1
- musica/main.py +89 -0
- musica/mechanism_configuration/__init__.py +1 -1
- musica/mechanism_configuration/aqueous_equilibrium.py +227 -54
- musica/mechanism_configuration/arrhenius.py +228 -42
- musica/mechanism_configuration/branched.py +249 -66
- musica/mechanism_configuration/condensed_phase_arrhenius.py +243 -50
- musica/mechanism_configuration/condensed_phase_photolysis.py +16 -19
- musica/mechanism_configuration/emission.py +10 -6
- musica/mechanism_configuration/first_order_loss.py +133 -26
- musica/mechanism_configuration/henrys_law.py +7 -48
- musica/mechanism_configuration/mechanism_configuration.py +114 -41
- musica/mechanism_configuration/phase.py +6 -2
- musica/mechanism_configuration/photolysis.py +12 -7
- musica/mechanism_configuration/reactions.py +20 -8
- musica/mechanism_configuration/simpol_phase_transfer.py +180 -51
- musica/mechanism_configuration/species.py +23 -4
- musica/mechanism_configuration/surface.py +14 -9
- musica/mechanism_configuration/ternary_chemical_activation.py +352 -0
- musica/mechanism_configuration/troe.py +259 -44
- musica/mechanism_configuration/tunneling.py +196 -49
- musica/mechanism_configuration/user_defined.py +9 -4
- musica/mechanism_configuration/wet_deposition.py +11 -8
- musica/mechanism_configuration.cpp +184 -95
- musica/musica.cpp +48 -61
- musica/test/examples/v1/full_configuration/full_configuration.json +39 -22
- musica/test/examples/v1/full_configuration/full_configuration.yaml +29 -20
- musica/test/{test_analytical.py → integration/test_analytical.py} +0 -1
- musica/test/integration/test_carma.py +227 -0
- musica/test/integration/test_carma_aluminum.py +12 -0
- musica/test/integration/test_carma_sulfate.py +17 -0
- musica/test/integration/test_sulfate_box_model.py +34 -0
- musica/test/integration/test_tuvx.py +62 -0
- musica/test/unit/test_parser.py +64 -0
- musica/test/{test_serializer.py → unit/test_serializer.py} +2 -2
- musica/test/unit/test_state.py +325 -0
- musica/test/{test_util_full_mechanism.py → unit/test_util_full_mechanism.py} +152 -122
- musica/tools/prepare_build_environment_linux.sh +23 -34
- musica/tools/prepare_build_environment_macos.sh +1 -0
- musica/tuvx.cpp +93 -0
- musica/tuvx.py +199 -0
- musica/types.py +120 -73
- {musica-0.12.0.dist-info → musica-0.12.2.dist-info}/METADATA +41 -39
- musica-0.12.2.dist-info/RECORD +70 -0
- {musica-0.12.0.dist-info → musica-0.12.2.dist-info}/WHEEL +1 -1
- musica-0.12.2.dist-info/entry_points.txt +3 -0
- musica/test/examples/v0/config.json +0 -7
- musica/test/examples/v0/config.yaml +0 -3
- musica/test/examples/v0/reactions.json +0 -193
- musica/test/examples/v0/reactions.yaml +0 -142
- musica/test/examples/v0/species.json +0 -40
- musica/test/examples/v0/species.yaml +0 -19
- musica/test/test_parser.py +0 -57
- musica/test/tuvx.py +0 -10
- musica/tools/prepare_build_environment_windows.sh +0 -22
- musica-0.12.0.dist-info/RECORD +0 -57
- /musica/test/{test_chapman.py → integration/test_chapman.py} +0 -0
- {musica-0.12.0.dist-info → musica-0.12.2.dist-info}/licenses/AUTHORS.md +0 -0
- {musica-0.12.0.dist-info → musica-0.12.2.dist-info}/licenses/LICENSE +0 -0
musica/CMakeLists.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
################################################################################
|
|
2
2
|
# Python Extension Modules
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
include(setup_musica_target)
|
|
5
5
|
|
|
6
6
|
# Define the list of Python extension module targets
|
|
7
7
|
set(PY_MODULES _musica)
|
|
@@ -12,16 +12,42 @@ set(
|
|
|
12
12
|
cuda.cpp
|
|
13
13
|
mechanism_configuration.cpp
|
|
14
14
|
musica.cpp
|
|
15
|
-
|
|
16
15
|
${MUSICA_SOURCES}
|
|
17
16
|
)
|
|
18
17
|
|
|
18
|
+
if (MUSICA_ENABLE_TUVX)
|
|
19
|
+
list(APPEND MUSICA_PYTHON_SOURCES
|
|
20
|
+
tuvx.cpp
|
|
21
|
+
)
|
|
22
|
+
endif()
|
|
23
|
+
|
|
24
|
+
if (MUSICA_ENABLE_CARMA)
|
|
25
|
+
list(APPEND MUSICA_PYTHON_SOURCES
|
|
26
|
+
carma.cpp
|
|
27
|
+
)
|
|
28
|
+
endif()
|
|
29
|
+
|
|
19
30
|
pybind11_add_module(_musica cpu_binding.cpp ${MUSICA_PYTHON_SOURCES})
|
|
20
31
|
musica_setup_target(_musica MODE CPU)
|
|
21
32
|
|
|
33
|
+
# Set separate Fortran module directory for _musica to avoid conflicts
|
|
34
|
+
if (MUSICA_ENABLE_TUVX OR MUSICA_ENABLE_CARMA)
|
|
35
|
+
set_target_properties(_musica PROPERTIES
|
|
36
|
+
Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/musica_python_cpu_modules
|
|
37
|
+
)
|
|
38
|
+
endif()
|
|
39
|
+
|
|
22
40
|
if (NOT ${MUSICA_GPU_TYPE} STREQUAL "None")
|
|
23
41
|
pybind11_add_module(_musica_gpu gpu_binding.cpp ${MUSICA_PYTHON_SOURCES})
|
|
24
42
|
musica_setup_target(_musica_gpu MODE GPU)
|
|
43
|
+
|
|
44
|
+
# Set separate Fortran module directory for _musica_gpu to avoid conflicts
|
|
45
|
+
if (MUSICA_ENABLE_TUVX OR MUSICA_ENABLE_CARMA)
|
|
46
|
+
set_target_properties(_musica_gpu PROPERTIES
|
|
47
|
+
Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/musica_python_gpu_modules
|
|
48
|
+
)
|
|
49
|
+
endif()
|
|
50
|
+
|
|
25
51
|
list(APPEND PY_MODULES _musica_gpu)
|
|
26
52
|
endif()
|
|
27
53
|
|
musica/__init__.py
CHANGED
|
@@ -1,51 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
"""
|
|
2
|
+
MUSICA: A Python library for atmospheric chemistry simulations.
|
|
3
|
+
"""
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
def _safe_find_spec(name):
|
|
5
|
-
try:
|
|
6
|
-
return importlib.util.find_spec(name)
|
|
7
|
-
except ModuleNotFoundError:
|
|
8
|
-
return None
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def _gpu_deps_installed():
|
|
12
|
-
return (
|
|
13
|
-
_safe_find_spec("nvidia.cublas") is not None or
|
|
14
|
-
_safe_find_spec("nvidia_cuda_runtime") is not None or
|
|
15
|
-
_safe_find_spec("nvidia-cublas-cu12") is not None or
|
|
16
|
-
_safe_find_spec("nvidia-cuda-runtime-cu12") is not None
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if _gpu_deps_installed():
|
|
21
|
-
from . import _musica_gpu as _backend
|
|
22
|
-
else:
|
|
23
|
-
from . import _musica as _backend
|
|
24
|
-
|
|
25
|
-
# Helper to re-export names from a module
|
|
26
|
-
def _export_all(module, names, globals_):
|
|
27
|
-
for name in names:
|
|
28
|
-
globals_[name] = getattr(module, name)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
_core_names = [
|
|
32
|
-
"_Conditions", "_SolverType", "_Solver", "_State", "_create_solver",
|
|
33
|
-
"_create_solver_from_mechanism", "_create_state", "_micm_solve", "_vector_size",
|
|
34
|
-
"_species_ordering", "_user_defined_rate_parameters_ordering",
|
|
35
|
-
]
|
|
36
|
-
_mechanism_names = [
|
|
37
|
-
"_ReactionType", "_Species", "_Phase", "_ReactionComponent", "_Arrhenius",
|
|
38
|
-
"_CondensedPhaseArrhenius", "_Troe", "_Branched", "_Tunneling", "_Surface",
|
|
39
|
-
"_Photolysis", "_CondensedPhasePhotolysis", "_Emission", "_FirstOrderLoss",
|
|
40
|
-
"_AqueousEquilibrium", "_WetDeposition", "_HenrysLaw", "_SimpolPhaseTransfer",
|
|
41
|
-
"_UserDefined", "_Reactions", "_ReactionsIterator", "_Mechanism", "_Version", "_Parser"
|
|
42
|
-
]
|
|
43
|
-
|
|
44
|
-
# this allows us to use the same symbols in both the GPU and CPU versionspp
|
|
45
|
-
_export_all(_backend._core, _core_names, globals())
|
|
46
|
-
_export_all(_backend._mechanism_configuration, _mechanism_names, globals())
|
|
47
|
-
|
|
48
|
-
__all__ = _core_names + _mechanism_names
|
|
49
|
-
|
|
50
|
-
from .types import MICM, SolverType, State, Conditions
|
|
51
5
|
from ._version import version as __version__
|
|
6
|
+
from .types import MICM, SolverType, State, Conditions
|
|
7
|
+
from . import mechanism_configuration
|
|
8
|
+
from .tuvx import TUVX
|
|
9
|
+
from .carma import CARMA, CARMAParameters, CARMAGroupConfig, CARMAElementConfig, CARMAState, CARMAGasConfig
|
|
10
|
+
from . import cuda
|
|
11
|
+
from .examples import Examples
|
|
Binary file
|
musica/_version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
version = "0.12.
|
|
1
|
+
version = "0.12.2"
|
musica/backend.py
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Backend selection and symbol loading for MUSICA.
|
|
3
|
+
"""
|
|
4
|
+
import importlib.util
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _safe_find_spec(name):
|
|
8
|
+
try:
|
|
9
|
+
return importlib.util.find_spec(name)
|
|
10
|
+
except ModuleNotFoundError:
|
|
11
|
+
return None
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _gpu_deps_installed():
|
|
15
|
+
return (
|
|
16
|
+
_safe_find_spec("nvidia.cublas") is not None or
|
|
17
|
+
_safe_find_spec("nvidia_cuda_runtime") is not None or
|
|
18
|
+
_safe_find_spec("nvidia-cublas-cu12") is not None or
|
|
19
|
+
_safe_find_spec("nvidia-cuda-runtime-cu12") is not None
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def get_backend():
|
|
24
|
+
"""Get the appropriate backend module."""
|
|
25
|
+
if _gpu_deps_installed():
|
|
26
|
+
import musica._musica_gpu as backend
|
|
27
|
+
else:
|
|
28
|
+
import musica._musica as backend
|
|
29
|
+
return backend
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def tuvx_available():
|
|
33
|
+
"""Check if the TUVX backend is available."""
|
|
34
|
+
_backend = get_backend()
|
|
35
|
+
return hasattr(_backend._tuvx, "_get_tuvx_version")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def carma_available():
|
|
39
|
+
"""Check if the CARMA backend is available."""
|
|
40
|
+
_backend = get_backend()
|
|
41
|
+
return hasattr(_backend._carma, "_get_carma_version")
|
musica/binding_common.cpp
CHANGED
|
@@ -2,15 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
void bind_cuda(py::module_ &);
|
|
4
4
|
void bind_musica(py::module_ &);
|
|
5
|
+
#ifdef MUSICA_USE_TUVX
|
|
6
|
+
void bind_tuvx(py::module_ &);
|
|
7
|
+
#endif
|
|
8
|
+
#ifdef MUSICA_USE_CARMA
|
|
9
|
+
void bind_carma(py::module_ &);
|
|
10
|
+
#endif
|
|
5
11
|
|
|
6
12
|
void bind_mechanism_configuration(py::module_ &);
|
|
7
13
|
|
|
8
|
-
void bind_all(py::module_ &m)
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
void bind_all(py::module_ &m)
|
|
15
|
+
{
|
|
16
|
+
py::module_ core = m.def_submodule("_core", "Wrapper classes for MUSICA C library structs and functions");
|
|
17
|
+
py::module_ mechanism_configuration = m.def_submodule(
|
|
18
|
+
"_mechanism_configuration", "Wrapper classes for Mechanism Configuration library structs and functions");
|
|
19
|
+
py::module_ tuvx = m.def_submodule("_tuvx", "Wrapper classes for TUV-x photolysis calculator");
|
|
20
|
+
py::module_ carma = m.def_submodule("_carma", "Wrapper classes for CARMA photolysis calculator");
|
|
11
21
|
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
bind_cuda(core);
|
|
23
|
+
bind_musica(core);
|
|
24
|
+
#ifdef MUSICA_USE_TUVX
|
|
25
|
+
bind_tuvx(tuvx);
|
|
26
|
+
#endif
|
|
14
27
|
|
|
15
|
-
|
|
28
|
+
#ifdef MUSICA_USE_CARMA
|
|
29
|
+
bind_carma(carma);
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
bind_mechanism_configuration(mechanism_configuration);
|
|
16
33
|
}
|