musica 0.11.1.3__cp39-cp39-macosx_11_0_arm64.whl → 0.12.0__cp39-cp39-macosx_11_0_arm64.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 +35 -40
- musica/__init__.py +51 -3
- musica/_musica.cpython-39-darwin.so +0 -0
- musica/_version.py +1 -1
- musica/binding_common.cpp +16 -0
- musica/binding_common.hpp +7 -0
- musica/constants.py +3 -0
- musica/cpu_binding.cpp +10 -0
- musica/cuda.cpp +12 -0
- musica/cuda.py +10 -0
- musica/gpu_binding.cpp +10 -0
- musica/mechanism_configuration/__init__.py +1 -0
- musica/mechanism_configuration/aqueous_equilibrium.py +101 -0
- musica/mechanism_configuration/arrhenius.py +121 -0
- musica/mechanism_configuration/branched.py +116 -0
- musica/mechanism_configuration/condensed_phase_arrhenius.py +116 -0
- musica/mechanism_configuration/condensed_phase_photolysis.py +91 -0
- musica/mechanism_configuration/emission.py +67 -0
- musica/mechanism_configuration/first_order_loss.py +67 -0
- musica/mechanism_configuration/henrys_law.py +85 -0
- musica/mechanism_configuration/mechanism_configuration.py +161 -0
- musica/mechanism_configuration/phase.py +43 -0
- musica/mechanism_configuration/photolysis.py +83 -0
- musica/mechanism_configuration/reactions.py +61 -0
- musica/mechanism_configuration/simpol_phase_transfer.py +88 -0
- musica/mechanism_configuration/species.py +72 -0
- musica/mechanism_configuration/surface.py +89 -0
- musica/mechanism_configuration/troe.py +137 -0
- musica/mechanism_configuration/tunneling.py +103 -0
- musica/mechanism_configuration/user_defined.py +83 -0
- musica/mechanism_configuration/utils.py +10 -0
- musica/mechanism_configuration/wet_deposition.py +49 -0
- musica/mechanism_configuration.cpp +0 -1
- musica/musica.cpp +1 -1
- musica/test/examples/v1/{full_configuration.json → full_configuration/full_configuration.json} +30 -15
- musica/test/examples/v1/{full_configuration.yaml → full_configuration/full_configuration.yaml} +16 -1
- musica/test/test_analytical.py +14 -12
- musica/test/test_chapman.py +18 -2
- musica/test/test_parser.py +4 -640
- musica/test/test_serializer.py +69 -0
- musica/test/test_util_full_mechanism.py +668 -0
- musica/tools/prepare_build_environment_linux.sh +8 -6
- musica/tools/repair_wheel_gpu.sh +25 -16
- musica/types.py +4 -6
- {musica-0.11.1.3.dist-info → musica-0.12.0.dist-info}/METADATA +179 -43
- musica-0.12.0.dist-info/RECORD +57 -0
- {musica-0.11.1.3.dist-info → musica-0.12.0.dist-info}/WHEEL +1 -1
- musica-0.12.0.dist-info/licenses/AUTHORS.md +59 -0
- musica/binding.cpp +0 -19
- musica/lib/libmusica.a +0 -0
- musica/lib/libyaml-cpp.a +0 -0
- musica/mechanism_configuration.py +0 -1291
- musica-0.11.1.3.dist-info/RECORD +0 -30
- {musica-0.11.1.3.dist-info → musica-0.12.0.dist-info}/licenses/LICENSE +0 -0
musica/tools/repair_wheel_gpu.sh
CHANGED
|
@@ -7,22 +7,31 @@ for whl in "$2"/*.whl; do
|
|
|
7
7
|
tmpdir=$(mktemp -d)
|
|
8
8
|
unzip -q "$whl" -d "$tmpdir"
|
|
9
9
|
tree "$tmpdir"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
|
|
11
|
+
so_files=("$tmpdir"/musica/_musica_gpu*.so)
|
|
12
|
+
|
|
13
|
+
if [[ -f "${so_files[0]}" ]]; then
|
|
14
|
+
so_path="${so_files[0]}"
|
|
15
|
+
ls $so_path
|
|
16
|
+
echo "Before patchelf:"
|
|
17
|
+
readelf -d $so_path
|
|
18
|
+
# Use patchelf to fix the rpath and library dependencies
|
|
19
|
+
patchelf --remove-rpath $so_path
|
|
20
|
+
patchelf --set-rpath "\$ORIGIN:\$ORIGIN/../nvidia/cublas/lib:\$ORIGIN/../nvidia/cuda_runtime/lib" --force-rpath $so_path
|
|
21
|
+
# these may need to be periodically updated
|
|
22
|
+
patchelf --replace-needed libcudart-b5a066d7.so.12.2.140 libcudart.so.12 $so_path
|
|
23
|
+
patchelf --replace-needed libcublas-e779a79d.so.12.2.5.6 libcublas.so.12 $so_path
|
|
24
|
+
patchelf --replace-needed libcublasLt-fbfbc8a1.so.12.2.5.6 libcublasLt.so.12 $so_path
|
|
25
|
+
# Remove bundled CUDA libraries
|
|
26
|
+
rm -f "$tmpdir"/musica.libs/libcudart-*.so*
|
|
27
|
+
rm -f "$tmpdir"/musica.libs/libcublas-*.so*
|
|
28
|
+
rm -f "$tmpdir"/musica.libs/libcublasLt-*.so*
|
|
29
|
+
echo "After patchelf:"
|
|
30
|
+
readelf -d $so_path
|
|
31
|
+
else
|
|
32
|
+
echo "No GPU .so file found, skipping patchelf steps"
|
|
33
|
+
fi
|
|
34
|
+
|
|
26
35
|
# Repack the wheel with correct structure
|
|
27
36
|
(cd "$tmpdir" && zip -qr "${whl%.whl}.patched.whl" .)
|
|
28
37
|
rm -rf "$tmpdir"
|
musica/types.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import Optional, Dict, List, Union, Tuple
|
|
7
7
|
from os import PathLike
|
|
8
8
|
import math
|
|
9
|
-
from musica
|
|
9
|
+
from musica import (
|
|
10
10
|
_Conditions,
|
|
11
11
|
_SolverType,
|
|
12
12
|
_Solver,
|
|
@@ -20,10 +20,7 @@ from musica._musica._core import (
|
|
|
20
20
|
_user_defined_rate_parameters_ordering,
|
|
21
21
|
)
|
|
22
22
|
import musica.mechanism_configuration as mc
|
|
23
|
-
|
|
24
|
-
AVOGADRO = 6.02214076e23 # mol^-1
|
|
25
|
-
BOLTZMANN = 1.380649e-23 # J K^-1
|
|
26
|
-
GAS_CONSTANT = AVOGADRO * BOLTZMANN # J K^-1 mol^-1
|
|
23
|
+
from musica.constants import GAS_CONSTANT
|
|
27
24
|
|
|
28
25
|
FilePath = Union[str, "PathLike[str]"]
|
|
29
26
|
|
|
@@ -172,6 +169,7 @@ class State():
|
|
|
172
169
|
state.user_defined_rate_parameters[i_param * param_stride + i_cell * cell_stride] = value[k]
|
|
173
170
|
k += 1
|
|
174
171
|
|
|
172
|
+
|
|
175
173
|
def set_conditions(self,
|
|
176
174
|
temperatures: Union[Union[float, int], List[Union[float, int]]],
|
|
177
175
|
pressures: Union[Union[float, int], List[Union[float, int]]],
|
|
@@ -358,5 +356,5 @@ class MICM():
|
|
|
358
356
|
if not isinstance(time_step, (int, float)):
|
|
359
357
|
raise TypeError("time_step must be an int or float.")
|
|
360
358
|
states = state.get_internal_states()
|
|
361
|
-
for
|
|
359
|
+
for _state in states:
|
|
362
360
|
_micm_solve(self.__solver, _state, time_step)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: musica
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
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>
|
|
@@ -207,6 +207,7 @@ License: Apache License
|
|
|
207
207
|
limitations under the License.
|
|
208
208
|
|
|
209
209
|
Project-URL: homepage, https://wiki.ucar.edu/display/MUSICA/MUSICA+Home
|
|
210
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
210
211
|
Provides-Extra: test
|
|
211
212
|
Requires-Dist: numpy; extra == "test"
|
|
212
213
|
Requires-Dist: pytest; extra == "test"
|
|
@@ -233,24 +234,132 @@ Multi-Scale Infrastructure for Chemistry and Aerosols
|
|
|
233
234
|
MUSICA is a collection of modeling software, tools, and grids, that
|
|
234
235
|
allow for robust modeling of chemistry in Earth's atmosphere.
|
|
235
236
|
|
|
236
|
-
At present the project encompasses these components
|
|
237
|
+
At present the project encompasses these core components
|
|
237
238
|
- [TUV-x](https://github.com/NCAR/tuv-x)
|
|
238
239
|
- A photolysis rate calculator
|
|
239
240
|
|
|
240
241
|
- [MICM](https://github.com/NCAR/micm)
|
|
241
242
|
- Model Independent Chemical Module
|
|
242
243
|
|
|
243
|
-
|
|
244
|
+
- [Mechanism Configuration](https://github.com/NCAR/MechanismConfiguration)
|
|
245
|
+
- The standardized format to describe atmospheric chemistry
|
|
244
246
|
|
|
245
|
-
|
|
247
|
+
These components are used to drive the MUSICA software ecosystem. This is a snapshot of how MUSICA can be used with different
|
|
248
|
+
models.
|
|
249
|
+
|
|
250
|
+

|
|
251
|
+
|
|
252
|
+
# Installation
|
|
253
|
+
MUSICA is installable via pip for Python or CMake for C++.
|
|
254
|
+
|
|
255
|
+
## Pip
|
|
256
|
+
```
|
|
257
|
+
pip install musica
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## CMake
|
|
261
|
+
```
|
|
262
|
+
$ git clone https://github.com/NCAR/musica.git
|
|
263
|
+
$ cd musica
|
|
264
|
+
$ mkdir build
|
|
265
|
+
$ cd build
|
|
266
|
+
$ ccmake ..
|
|
267
|
+
$ make
|
|
268
|
+
$ make install
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
# Using the MUSICA Python API
|
|
272
|
+
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.
|
|
273
|
+
```
|
|
274
|
+
# --- Import Musica ---
|
|
275
|
+
import musica
|
|
276
|
+
import musica.mechanism_configuration as mc
|
|
277
|
+
|
|
278
|
+
# --- 1. Define the chemical system of interest ---
|
|
279
|
+
A = mc.Species(name="A")
|
|
280
|
+
B = mc.Species(name="B")
|
|
281
|
+
C = mc.Species(name="C")
|
|
282
|
+
species = [A, B, C]
|
|
283
|
+
gas = mc.Phase(name="gas", species=species)
|
|
284
|
+
|
|
285
|
+
# --- 2. Define a mechanism of interest ---
|
|
286
|
+
# Through Musica, several different mechanisms can be explored to define reaction rates. Here, we use the Arrhenius equation as a simple example.
|
|
287
|
+
|
|
288
|
+
r1 = mc.Arrhenius(name="A->B", A=4.0e-3, C=50, reactants=[A], products=[B], gas_phase=gas)
|
|
289
|
+
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)
|
|
290
|
+
|
|
291
|
+
mechanism = mc.Mechanism(name="musica_example", species=species, phases=[gas], reactions=[r1, r2])
|
|
292
|
+
|
|
293
|
+
# --- 3. Create MICM solver ---
|
|
294
|
+
# A solver must be initialized with either a configuration file or a mechanism:
|
|
295
|
+
|
|
296
|
+
solver = musica.MICM(mechanism=mechanism, solver_type=musica.SolverType.rosenbrock_standard_order)
|
|
297
|
+
|
|
298
|
+
# --- 4. Define environmental conditions ---
|
|
299
|
+
temperature=300.0
|
|
300
|
+
pressure=101000.0
|
|
301
|
+
|
|
302
|
+
# --- 5. Create and initialize State ---
|
|
303
|
+
# In the model, conditions represent the starting environment for the reactions and are assigned by modifying the state.
|
|
304
|
+
|
|
305
|
+
state = solver.create_state()
|
|
306
|
+
state.set_concentrations({"A": 1.0, "B": 3.0, "C": 5.0})
|
|
307
|
+
state.set_conditions(temperature, pressure)
|
|
308
|
+
initial_pressure = state.get_conditions()['air_density'][0] # store for visualization and output
|
|
309
|
+
|
|
310
|
+
# --- 6. Time parameters ---
|
|
311
|
+
time_step = 4 # stepping
|
|
312
|
+
sim_length = 20 # total simulation time
|
|
313
|
+
|
|
314
|
+
# --- (Optional) 7. Save initial state (t=0) for output visualization ---
|
|
315
|
+
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]}
|
|
316
|
+
initial_row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
|
|
317
|
+
|
|
318
|
+
# --- 8. Solve through time loop only ---
|
|
319
|
+
# The following loop simply solves the model per each time step:
|
|
320
|
+
|
|
321
|
+
curr_time = time_step
|
|
322
|
+
while curr_time <= sim_length:
|
|
323
|
+
solver.solve(state, time_step)
|
|
324
|
+
concentrations = state.get_concentrations()
|
|
325
|
+
curr_time += time_step
|
|
246
326
|
|
|
247
|
-
#
|
|
248
|
-
|
|
249
|
-
|
|
327
|
+
# --- 9. Solve and create DataFrame ---
|
|
328
|
+
# It is likely more useful to solve at each time step and store the associated data:
|
|
329
|
+
import pandas as pd
|
|
330
|
+
|
|
331
|
+
output_data = [] # prepare to store output per time step
|
|
332
|
+
output_data.append(initial_row) # save t=0 data
|
|
333
|
+
|
|
334
|
+
curr_time = time_step
|
|
335
|
+
while curr_time <= sim_length:
|
|
336
|
+
solver.solve(state, time_step)
|
|
337
|
+
row = {
|
|
338
|
+
"time.s": curr_time,
|
|
339
|
+
"ENV.temperature.K": state.get_conditions()['temperature'][0],
|
|
340
|
+
"ENV.pressure.Pa": state.get_conditions()['pressure'][0],
|
|
341
|
+
"ENV.air number density.mol m-3": state.get_conditions()['air_density'][0]
|
|
342
|
+
}
|
|
343
|
+
row.update({f"CONC.{k}.mol m-3": v[0] for k, v in state.get_concentrations().items()})
|
|
344
|
+
output_data.append(row)
|
|
345
|
+
curr_time += time_step
|
|
346
|
+
|
|
347
|
+
df = pd.DataFrame(output_data)
|
|
348
|
+
print(df)
|
|
349
|
+
|
|
350
|
+
# --- 10. Visualize Specific Results ---
|
|
351
|
+
import matplotlib.pyplot as plt
|
|
352
|
+
|
|
353
|
+
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)')
|
|
354
|
+
plt.show()
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
# Available grids
|
|
358
|
+
Pre-made grids for use in MUSICA are available [here](https://wiki.ucar.edu/display/MUSICA/Available+Grids).
|
|
250
359
|
|
|
251
360
|
## Developer Options
|
|
252
361
|
|
|
253
|
-
### Specifying dependency versions via
|
|
362
|
+
### Specifying dependency versions via parameterization at configure time
|
|
254
363
|
|
|
255
364
|
Introduced in [Pull Request #124](https://github.com/NCAR/musica/pull/124), it is possible for developers to specify which versions of various dependencies should be used. These options are currently limited to those dependencies managed via `FetchContent`. This change allows for more easily testing `musica` against changes committed in different repositories and branches. The environmental variables introduced are outlined in the following table.
|
|
256
365
|
|
|
@@ -262,6 +371,7 @@ Introduced in [Pull Request #124](https://github.com/NCAR/musica/pull/124), it i
|
|
|
262
371
|
| [MICM](https://github.com/NCAR/mcim.git) | MICM_GIT_REPOSITORY | MICM_GIT_TAG |
|
|
263
372
|
| [TUV-X](https://github.com/NCAR/tuv-x.git) | TUVX_GIT_REPOSITORY | TUVX_GIT_TAG |
|
|
264
373
|
| [PyBind11](https://github.com/pybind/pybind11) | PYBIND11_GIT_REPOSITORY | PYBIND11_GIT_TAG |
|
|
374
|
+
| [Mechanism Configuration](https://github.com/NCAR/MechanismConfiguration.git) | MECH_CONFIG_GIT_REPOSITORY | MECH_CONFIG_GIT_TAG |
|
|
265
375
|
|
|
266
376
|
#### Example Usage
|
|
267
377
|
|
|
@@ -282,54 +392,80 @@ Specifying a specific version of `tuv-x` by has, but using the official reposito
|
|
|
282
392
|
### Python build
|
|
283
393
|
Musica has python bindings. If you want to install the python package, you may `pip install musica`.
|
|
284
394
|
|
|
285
|
-
|
|
395
|
+
#### PyPi
|
|
396
|
+
If you only want to use the CPU components,
|
|
286
397
|
|
|
287
398
|
```
|
|
288
|
-
pip install
|
|
399
|
+
pip install musica
|
|
289
400
|
```
|
|
290
401
|
|
|
291
|
-
|
|
292
|
-
|
|
402
|
+
Note that GPU support has only been tested on linux. If you have an NVIDIA GPU and would like to take
|
|
403
|
+
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.
|
|
293
404
|
|
|
294
405
|
```
|
|
295
|
-
|
|
406
|
+
pip install --upgrade setuptools pip wheel
|
|
407
|
+
pip install nvidia-pyindex
|
|
408
|
+
pip install musica[gpu]
|
|
296
409
|
```
|
|
297
410
|
|
|
298
|
-
|
|
411
|
+
#### Local build
|
|
299
412
|
|
|
300
|
-
|
|
301
|
-
of the MUSICA software. The bibtex entry below can be used to generate a citaiton for this.
|
|
413
|
+
Musica has python bindings. To build the package locally,
|
|
302
414
|
|
|
303
415
|
```
|
|
304
|
-
|
|
305
|
-
author = "Gabriele G. Pfister and Sebastian D. Eastham and Avelino F. Arellano and Bernard Aumont and Kelley C. Barsanti and Mary C. Barth and Andrew Conley and Nicholas A. Davis and Louisa K. Emmons and Jerome D. Fast and Arlene M. Fiore and Benjamin Gaubert and Steve Goldhaber and Claire Granier and Georg A. Grell and Marc Guevara and Daven K. Henze and Alma Hodzic and Xiaohong Liu and Daniel R. Marsh and John J. Orlando and John M. C. Plane and Lorenzo M. Polvani and Karen H. Rosenlof and Allison L. Steiner and Daniel J. Jacob and Guy P. Brasseur",
|
|
306
|
-
title = "The Multi-Scale Infrastructure for Chemistry and Aerosols (MUSICA)",
|
|
307
|
-
journal = "Bulletin of the American Meteorological Society",
|
|
308
|
-
year = "2020",
|
|
309
|
-
publisher = "American Meteorological Society",
|
|
310
|
-
address = "Boston MA, USA",
|
|
311
|
-
volume = "101",
|
|
312
|
-
number = "10",
|
|
313
|
-
doi = "10.1175/BAMS-D-19-0331.1",
|
|
314
|
-
pages= "E1743 - E1760",
|
|
315
|
-
url = "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
|
|
316
|
-
}
|
|
416
|
+
pip install -e .
|
|
317
417
|
```
|
|
318
418
|
|
|
319
|
-
|
|
320
|
-
|
|
419
|
+
If you have an NVIDIA GPU and cuda installed, you can enable a build of musica with GPU support by setting the environment
|
|
420
|
+
variable `BUILD_GPU`.
|
|
321
421
|
|
|
322
422
|
```
|
|
323
|
-
|
|
324
|
-
author = {Schwantes, Rebecca H. and Lacey, Forrest G. and Tilmes, Simone and Emmons, Louisa K. and Lauritzen, Peter H. and Walters, Stacy and Callaghan, Patrick and Zarzycki, Colin M. and Barth, Mary C. and Jo, Duseong S. and Bacmeister, Julio T. and Neale, Richard B. and Vitt, Francis and Kluzek, Erik and Roozitalab, Behrooz and Hall, Samuel R. and Ullmann, Kirk and Warneke, Carsten and Peischl, Jeff and Pollack, Ilana B. and Flocke, Frank and Wolfe, Glenn M. and Hanisco, Thomas F. and Keutsch, Frank N. and Kaiser, Jennifer and Bui, Thao Paul V. and Jimenez, Jose L. and Campuzano-Jost, Pedro and Apel, Eric C. and Hornbrook, Rebecca S. and Hills, Alan J. and Yuan, Bin and Wisthaler, Armin},
|
|
325
|
-
title = {Evaluating the Impact of Chemical Complexity and Horizontal Resolution on Tropospheric Ozone Over the Conterminous US With a Global Variable Resolution Chemistry Model},
|
|
326
|
-
journal = {Journal of Advances in Modeling Earth Systems},
|
|
327
|
-
volume = {14},
|
|
328
|
-
number = {6},
|
|
329
|
-
pages = {e2021MS002889},
|
|
330
|
-
doi = {https://doi.org/10.1029/2021MS002889},
|
|
331
|
-
url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2021MS002889},
|
|
332
|
-
eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2021MS002889},
|
|
333
|
-
year = {2022}
|
|
334
|
-
}
|
|
423
|
+
BUILD_GPU=1 pip install -e .
|
|
335
424
|
```
|
|
425
|
+
|
|
426
|
+
# Contributing
|
|
427
|
+
|
|
428
|
+
We welcome contributions from the community! Please see our [Contributing Guide](CONTRIBUTING.md) for information on how to get involved.
|
|
429
|
+
|
|
430
|
+
For a complete list of contributors and authors, see [AUTHORS.md](AUTHORS.md).
|
|
431
|
+
|
|
432
|
+
# Citations
|
|
433
|
+
|
|
434
|
+
MUSICA can be cited in at least two ways:
|
|
435
|
+
|
|
436
|
+
1. **Cite the foundational paper** that defines the vision of the MUSICA software:
|
|
437
|
+
- [Pfister et al., 2020, Bulletin of the American Meteorological Society](https://doi.org/10.1175/BAMS-D-19-0331.1)
|
|
438
|
+
- Use the following BibTeX entry:
|
|
439
|
+
```
|
|
440
|
+
@Article { acom.software.musica-vision,
|
|
441
|
+
author = "Gabriele G. Pfister and Sebastian D. Eastham and Avelino F. Arellano and Bernard Aumont and Kelley C. Barsanti and Mary C. Barth and Andrew Conley and Nicholas A. Davis and Louisa K. Emmons and Jerome D. Fast and Arlene M. Fiore and Benjamin Gaubert and Steve Goldhaber and Claire Granier and Georg A. Grell and Marc Guevara and Daven K. Henze and Alma Hodzic and Xiaohong Liu and Daniel R. Marsh and John J. Orlando and John M. C. Plane and Lorenzo M. Polvani and Karen H. Rosenlof and Allison L. Steiner and Daniel J. Jacob and Guy P. Brasseur",
|
|
442
|
+
title = "The Multi-Scale Infrastructure for Chemistry and Aerosols (MUSICA)",
|
|
443
|
+
journal = "Bulletin of the American Meteorological Society",
|
|
444
|
+
year = "2020",
|
|
445
|
+
publisher = "American Meteorological Society",
|
|
446
|
+
address = "Boston MA, USA",
|
|
447
|
+
volume = "101",
|
|
448
|
+
number = "10",
|
|
449
|
+
doi = "10.1175/BAMS-D-19-0331.1",
|
|
450
|
+
pages= "E1743 - E1760",
|
|
451
|
+
url = "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
2. **Cite the MUSICA software and its evaluation** (MUSICAv0):
|
|
456
|
+
- [Schwantes et al., 2022, Journal of Advances in Modeling Earth Systems](https://doi.org/10.1029/2021MS002889)
|
|
457
|
+
- Use the following BibTeX entry:
|
|
458
|
+
```
|
|
459
|
+
@Article{acom.software.musica,
|
|
460
|
+
author = {Schwantes, Rebecca H. and Lacey, Forrest G. and Tilmes, Simone and Emmons, Louisa K. and Lauritzen, Peter H. and Walters, Stacy and Callaghan, Patrick and Zarzycki, Colin M. and Barth, Mary C. and Jo, Duseong S. and Bacmeister, Julio T. and Neale, Richard B. and Vitt, Francis and Kluzek, Erik and Roozitalab, Behrooz and Hall, Samuel R. and Ullmann, Kirk and Warneke, Carsten and Peischl, Jeff and Pollack, Ilana B. and Flocke, Frank and Wolfe, Glenn M. and Hanisco, Thomas F. and Keutsch, Frank N. and Kaiser, Jennifer and Bui, Thao Paul V. and Jimenez, Jose L. and Campuzano-Jost, Pedro and Apel, Eric C. and Hornbrook, Rebecca S. and Hills, Alan J. and Yuan, Bin and Wisthaler, Armin},
|
|
461
|
+
title = {Evaluating the Impact of Chemical Complexity and Horizontal Resolution on Tropospheric Ozone Over the Conterminous US With a Global Variable Resolution Chemistry Model},
|
|
462
|
+
journal = {Journal of Advances in Modeling Earth Systems},
|
|
463
|
+
volume = {14},
|
|
464
|
+
number = {6},
|
|
465
|
+
pages = {e2021MS002889},
|
|
466
|
+
doi = {https://doi.org/10.1029/2021MS002889},
|
|
467
|
+
url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2021MS002889},
|
|
468
|
+
eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2021MS002889},
|
|
469
|
+
year = {2022}
|
|
470
|
+
}
|
|
471
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
musica-0.12.0.dist-info/RECORD,,
|
|
2
|
+
musica-0.12.0.dist-info/WHEEL,sha256=gUcXopd-K2IKuDoaEe4uBUYaf2fjHRiHplXdACpNr9A,112
|
|
3
|
+
musica-0.12.0.dist-info/METADATA,sha256=ecoVy_lRUnvTA_JTGQRg8SB3EtlnFMr2Lq_8Ke8X1gs,25995
|
|
4
|
+
musica-0.12.0.dist-info/licenses/AUTHORS.md,sha256=CYIlKZmXT9ngFk6d0MiD0A_Pt8BFoID4n-29OMrKkbM,2632
|
|
5
|
+
musica-0.12.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
6
|
+
musica/CMakeLists.txt,sha256=E5Z8tLfxUc0RAma1vKtN2-2s3CqHog2njYje9qHehQc,1050
|
|
7
|
+
musica/_version.py,sha256=0d_eblF-LMXh1_mZw-q2DqmmX_vZj5tYDy8MONmqkNU,19
|
|
8
|
+
musica/constants.py,sha256=BlRH2m12F7NXGZd5slV0qIgYa-qt1yfjKBbMpTQQd1c,122
|
|
9
|
+
musica/binding_common.cpp,sha256=40rvAVZQkOloAKXNhUngkiZNaD7LfHE8jnCcoOOXAak,560
|
|
10
|
+
musica/__init__.py,sha256=TXWCmKd4hBa09jf9917-cM5_DQ0Qcio__a1ZkfysT5k,1748
|
|
11
|
+
musica/cpu_binding.cpp,sha256=nOLBGDWvvtxeAyIbeP3bXIeB_xzZoU_ALduHanHjR0Q,224
|
|
12
|
+
musica/types.py,sha256=F4Gq2kXi3NTnj3_t7H-zN3E51n81kidThVYIJaNA-PM,14788
|
|
13
|
+
musica/gpu_binding.cpp,sha256=wWkM_J_2Ky0OawxEXkdvPCzctfSsiH7THs2cVkr0S2s,228
|
|
14
|
+
musica/_musica.cpython-39-darwin.so,sha256=HoeWT1LnrggQvYy4Paicv_ibzaqDE3JzdUAem4g4ukI,1559840
|
|
15
|
+
musica/cuda.py,sha256=A0U0plsFuQgezWrwN8217kkC5URxjlsKI0ymYJCSdDE,224
|
|
16
|
+
musica/cuda.cpp,sha256=qQOLKTUOB83gE-963rT579Me-NrqMUWnXDKmpTPMVFg,346
|
|
17
|
+
musica/binding_common.hpp,sha256=YVG7TS1JeVC4W_yisV4kL61qo3N6Dt6JdAh9bdr6z2w,102
|
|
18
|
+
musica/mechanism_configuration.cpp,sha256=OSYEoF6GeDntcyPRajKUdiU7b6r-6SFv4UsG8hySH0A,27034
|
|
19
|
+
musica/musica.cpp,sha256=cMi5OfncDV_ROlhjCSvvGtUHWBl_oYcUwTu4KFLTBjg,8400
|
|
20
|
+
musica/tools/prepare_build_environment_windows.sh,sha256=zMY_RIerqfMC1VlfpZ2KjjDWfBUOvvx8oRNk_jJhmII,826
|
|
21
|
+
musica/tools/prepare_build_environment_linux.sh,sha256=yKjBD_eFMMvqth_PSF1qzmr7VLSMWiPufBh1inhuIRs,1457
|
|
22
|
+
musica/tools/repair_wheel_gpu.sh,sha256=GJcKUJ2n9KMsj3QC5Shxt_ks9uFu2f9Than-4vVhG9U,1485
|
|
23
|
+
musica/test/test_parser.py,sha256=6G2RIR6u8V_EtDBJqjWJPkdSwa7ZXNDD9pkDqezm8fI,2259
|
|
24
|
+
musica/test/test_chapman.py,sha256=gOISpApVIMLCEv6W0Hq1yNGF0xu2MlZMHQQhOGPmoQI,3512
|
|
25
|
+
musica/test/test_serializer.py,sha256=8WnFme_CpJBMlACG_YePCjxdm6qAZxYhqFw-ZgnWPNA,2466
|
|
26
|
+
musica/test/tuvx.py,sha256=rWvBcG6cgLJylqkf8M0MFMKT2AkyoaZlGdaKjVSbCR8,116
|
|
27
|
+
musica/test/test_util_full_mechanism.py,sha256=rTxHljAJSODDYAcDbstneT0NlVGZxEIuXLU9o1qFi7k,24063
|
|
28
|
+
musica/test/test_analytical.py,sha256=U35zRGMjOQ_lRtFoKHn-MtA78oYagm7XzhiR96jPgE4,13806
|
|
29
|
+
musica/test/examples/v1/full_configuration/full_configuration.yaml,sha256=bY9JWnmnio03kUDX58aAzsPC5R2-lfLKavMFD_NtO3k,5535
|
|
30
|
+
musica/test/examples/v1/full_configuration/full_configuration.json,sha256=L_QdufMp4M1YqPMpHvI_g1jWjIWfVzEHfskilUFg3uo,9212
|
|
31
|
+
musica/test/examples/v0/species.json,sha256=xKTcwh9QV9sRjLPK9GvGEnatBrRPbP857NmPG0bCXqU,565
|
|
32
|
+
musica/test/examples/v0/species.yaml,sha256=vUYTs7bp2AYVWHDgXBFxnCkmqdO6ysJ_ulOQTAoKa1M,283
|
|
33
|
+
musica/test/examples/v0/config.json,sha256=7s6g5jxH2GiEiRcZmO13IJ5k4walg1C9t-dQr9o45U4,79
|
|
34
|
+
musica/test/examples/v0/config.yaml,sha256=GgA18mP8ZCzOdY-AlAePK48M05PJFPeWCk-IfrPN_VE,44
|
|
35
|
+
musica/test/examples/v0/reactions.json,sha256=7WJhItBPtGu89vLcPMK6izW8BvwUAIjfzqwjtDmfPPg,4188
|
|
36
|
+
musica/test/examples/v0/reactions.yaml,sha256=uEuQOz5i7vGyn0G7KsmdWv23V2Gn0QUmexrK030CFlo,2266
|
|
37
|
+
musica/mechanism_configuration/phase.py,sha256=1bT9iAn8Ah0txW9SkjRhViFlry027aZD95fKBrJOVkc,1539
|
|
38
|
+
musica/mechanism_configuration/species.py,sha256=S1jU9j4Pf6MjiepqM1jwaz6r5tiIanHS4_naduJxbl8,3923
|
|
39
|
+
musica/mechanism_configuration/henrys_law.py,sha256=ue5e_M0U37gbJeOq_kelv0kgXptEjbpMLSPWG5ByqxA,4181
|
|
40
|
+
musica/mechanism_configuration/tunneling.py,sha256=CtzNq7VyLsdI0_W9NdLOC89N99tSSbfRZMn5j1g-0as,4305
|
|
41
|
+
musica/mechanism_configuration/mechanism_configuration.py,sha256=A6JhB1VbNcMjsPhPuuihYI190rlzXqRsm-K_-uAdXmU,6867
|
|
42
|
+
musica/mechanism_configuration/branched.py,sha256=Ei0mFGUaxg8_nIfIi5UkFuye74KRyK5_bNuoertI7U8,5215
|
|
43
|
+
musica/mechanism_configuration/reactions.py,sha256=UXVRjWGY-n4RFF4xp4kGeFhdTr3J1z6dyLxIAQ5Zg6I,1674
|
|
44
|
+
musica/mechanism_configuration/__init__.py,sha256=WVIbDCgpAd-jH9TBPou-5tyrdxb5Vbm9Zl2h7xmNiQ8,38
|
|
45
|
+
musica/mechanism_configuration/user_defined.py,sha256=r2QwOkmRVeVJvJKXxnyxxjXkX4xmMQZ_AlOzO4s2UAg,3752
|
|
46
|
+
musica/mechanism_configuration/aqueous_equilibrium.py,sha256=NvuIlbMap4vJbHXBgLhrRku-uuWiN1Y_cDp3pMtwQzc,4760
|
|
47
|
+
musica/mechanism_configuration/condensed_phase_arrhenius.py,sha256=1HOWYXPL40koeCJOZKxUwJbt8sZybugP7Qa-Yh6e3Ok,5361
|
|
48
|
+
musica/mechanism_configuration/first_order_loss.py,sha256=blRz-RKUZICA5nd2SciQNXbxoLVF5iEV4_aITuKCHPo,3048
|
|
49
|
+
musica/mechanism_configuration/utils.py,sha256=nR-ukwYsplFfnsjXtKQsXnryMPvtjkZkFQv7TjcSrnE,346
|
|
50
|
+
musica/mechanism_configuration/wet_deposition.py,sha256=k6MV7vGWsxmR7FWbH2YPALFAwtZB37rNdoeyWICOleU,2183
|
|
51
|
+
musica/mechanism_configuration/condensed_phase_photolysis.py,sha256=nlWWKCKenPDHfQR-cyq6RNLoOpS0wW5-1Zw_BH4XiZo,4392
|
|
52
|
+
musica/mechanism_configuration/arrhenius.py,sha256=Q7ncI08AxN1yXvhslhe6oCFea43-44l2BYcy2HEaKWA,5147
|
|
53
|
+
musica/mechanism_configuration/troe.py,sha256=SX9REl-6ts1BEbEhIDtUBDbEZPpLjhZPWIgFv10-qpM,6576
|
|
54
|
+
musica/mechanism_configuration/simpol_phase_transfer.py,sha256=pPy1laAO9F4cmBcMM1NJ-RHuWjirfRZUF4zAWMVGF60,4247
|
|
55
|
+
musica/mechanism_configuration/photolysis.py,sha256=HXkOn_bU67Qe5VyPrAcyh1KPzIS19GyCXpDCVmU1yzs,3744
|
|
56
|
+
musica/mechanism_configuration/emission.py,sha256=uTVCN9M1XXsooiGyXDK9eOX3uBsSKnwxXMjVIAMU424,2946
|
|
57
|
+
musica/mechanism_configuration/surface.py,sha256=XdCWeIZ1OojjOfFO_Tw2MEhnyWGzncc64qOw6XHXZUI,4185
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# MUSICA Authors and Contributors
|
|
2
|
+
|
|
3
|
+
This file acknowledges all individuals who have contributed to the MUSICA project.
|
|
4
|
+
|
|
5
|
+
## Core Development Team
|
|
6
|
+
|
|
7
|
+
The following individuals are the primary developers and maintainers of the MUSICA software:
|
|
8
|
+
|
|
9
|
+
- **Matthew Dawson** (mattdawson@ucar.edu) - Core Developer
|
|
10
|
+
- **Jiwon Gim** (jiwongim@ucar.edu) - Core Developer
|
|
11
|
+
- **David Fillmore** (fillmore@ucar.edu) - Core Developer
|
|
12
|
+
- **Kyle Shores** (kshores@ucar.edu) - Core Developer
|
|
13
|
+
- **Montek Thind** (mthind@ucar.edu) - Core Developer
|
|
14
|
+
- **Jian Sun** - Core Developer
|
|
15
|
+
|
|
16
|
+
## Scientific Leadership and Vision
|
|
17
|
+
|
|
18
|
+
The scientific leadership and vision for MUSICA are provided by the authors of the [foundational paper](https://doi.org/10.1175/BAMS-D-19-0331.1).
|
|
19
|
+
This software implements that vision. For a full list of scientific authors,
|
|
20
|
+
please refer to our [CITATION.cff](CITATION.cff) file. To cite the software, use the Zenodo DOI from our latest release.
|
|
21
|
+
|
|
22
|
+
## Additional Contributors
|
|
23
|
+
|
|
24
|
+
<!-- Contributors will be added here as they join the project -->
|
|
25
|
+
<!-- Format: -->
|
|
26
|
+
<!-- - **Name** (affiliation) - Brief description of contribution -->
|
|
27
|
+
|
|
28
|
+
- **Aidan Winney** - Documentation and Tutorials
|
|
29
|
+
- **Angela Pak** - Documentation and Tutorials
|
|
30
|
+
- **Dee Grant** - Improving the Python API
|
|
31
|
+
- **Qina Tan** - Implementing the CUDA-based Rosenbrock solver
|
|
32
|
+
|
|
33
|
+
## Recognition Policy
|
|
34
|
+
|
|
35
|
+
We recognize contributors at different levels based on their involvement:
|
|
36
|
+
|
|
37
|
+
- **Core Development Team**: Listed in `pyproject.toml`, `.zenodo.json` (creators), and this file
|
|
38
|
+
- **Additional Contributors**: Listed in `.zenodo.json` (contributors) and this file
|
|
39
|
+
- **All Contributors**: Automatically tracked by GitHub's contributor statistics
|
|
40
|
+
|
|
41
|
+
See our [Contributing Guide](CONTRIBUTING.md) for more details on how contributions are recognized.
|
|
42
|
+
|
|
43
|
+
## How to Contribute
|
|
44
|
+
|
|
45
|
+
We welcome contributions from the community! Please see our [Contributing Guide](CONTRIBUTING.md) for information on how to get involved.
|
|
46
|
+
|
|
47
|
+
## Acknowledgments
|
|
48
|
+
|
|
49
|
+
We thank the broader atmospheric chemistry modeling community for their feedback, testing, and contributions to making MUSICA a robust and useful tool for scientific research.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Citation Information
|
|
54
|
+
|
|
55
|
+
For citation purposes, please refer to our [CITATION.cff](CITATION.cff) file for the appropriate citations based on your use case. The main citations are:
|
|
56
|
+
|
|
57
|
+
1. **For the MUSICA vision and scientific framework**: [Pfister et al., 2020](https://doi.org/10.1175/BAMS-D-19-0331.1)
|
|
58
|
+
2. **For the MUSICA software evaluation**: [Schwantes et al., 2022](https://doi.org/10.1029/2021MS002889)
|
|
59
|
+
3. **For the software itself**: Use the Zenodo DOI from our latest release
|
musica/binding.cpp
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
// Copyright (C) 2023-2025 University Corporation for Atmospheric Research
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
#include <pybind11/pybind11.h>
|
|
5
|
-
|
|
6
|
-
namespace py = pybind11;
|
|
7
|
-
|
|
8
|
-
void bind_musica(py::module_ &);
|
|
9
|
-
void bind_mechanism_configuration(py::module_ &);
|
|
10
|
-
|
|
11
|
-
// Wraps micm.cpp
|
|
12
|
-
PYBIND11_MODULE(_musica, m)
|
|
13
|
-
{
|
|
14
|
-
py::module_ core = m.def_submodule("_core", "Wrapper classes for MUSICA C library structs and functions");
|
|
15
|
-
py::module_ mechanism_configuration = m.def_submodule("_mechanism_configuration", "Wrapper classes for Mechanism Configuration library structs and functions");
|
|
16
|
-
|
|
17
|
-
bind_musica(core);
|
|
18
|
-
bind_mechanism_configuration(mechanism_configuration);
|
|
19
|
-
}
|
musica/lib/libmusica.a
DELETED
|
Binary file
|
musica/lib/libyaml-cpp.a
DELETED
|
Binary file
|