musica 0.12.2__cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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 +68 -0
- musica/__init__.py +11 -0
- musica/_musica.cpython-312-x86_64-linux-gnu.so +0 -0
- musica/_musica_gpu.cpython-312-x86_64-linux-gnu.so +0 -0
- musica/_version.py +1 -0
- musica/backend.py +41 -0
- musica/binding_common.cpp +33 -0
- musica/binding_common.hpp +7 -0
- musica/carma.cpp +911 -0
- musica/carma.py +1729 -0
- musica/constants.py +3 -0
- musica/cpu_binding.cpp +11 -0
- musica/cuda.cpp +12 -0
- musica/cuda.py +13 -0
- 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 +11 -0
- musica/main.py +89 -0
- musica/mechanism_configuration/__init__.py +1 -0
- musica/mechanism_configuration/aqueous_equilibrium.py +274 -0
- musica/mechanism_configuration/arrhenius.py +307 -0
- musica/mechanism_configuration/branched.py +299 -0
- musica/mechanism_configuration/condensed_phase_arrhenius.py +309 -0
- musica/mechanism_configuration/condensed_phase_photolysis.py +88 -0
- musica/mechanism_configuration/emission.py +71 -0
- musica/mechanism_configuration/first_order_loss.py +174 -0
- musica/mechanism_configuration/henrys_law.py +44 -0
- musica/mechanism_configuration/mechanism_configuration.py +234 -0
- musica/mechanism_configuration/phase.py +47 -0
- musica/mechanism_configuration/photolysis.py +88 -0
- musica/mechanism_configuration/reactions.py +73 -0
- musica/mechanism_configuration/simpol_phase_transfer.py +217 -0
- musica/mechanism_configuration/species.py +91 -0
- musica/mechanism_configuration/surface.py +94 -0
- musica/mechanism_configuration/ternary_chemical_activation.py +352 -0
- musica/mechanism_configuration/troe.py +352 -0
- musica/mechanism_configuration/tunneling.py +250 -0
- musica/mechanism_configuration/user_defined.py +88 -0
- musica/mechanism_configuration/utils.py +10 -0
- musica/mechanism_configuration/wet_deposition.py +52 -0
- musica/mechanism_configuration.cpp +607 -0
- musica/musica.cpp +201 -0
- musica/test/examples/v1/full_configuration/full_configuration.json +466 -0
- musica/test/examples/v1/full_configuration/full_configuration.yaml +295 -0
- musica/test/integration/test_analytical.py +324 -0
- 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_chapman.py +139 -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/unit/test_serializer.py +69 -0
- musica/test/unit/test_state.py +325 -0
- musica/test/unit/test_util_full_mechanism.py +698 -0
- musica/tools/prepare_build_environment_linux.sh +32 -0
- musica/tools/prepare_build_environment_macos.sh +1 -0
- musica/tools/repair_wheel_gpu.sh +40 -0
- musica/tuvx.cpp +93 -0
- musica/tuvx.py +199 -0
- musica/types.py +407 -0
- musica-0.12.2.dist-info/METADATA +473 -0
- musica-0.12.2.dist-info/RECORD +111 -0
- musica-0.12.2.dist-info/WHEEL +6 -0
- musica-0.12.2.dist-info/entry_points.txt +3 -0
- musica-0.12.2.dist-info/licenses/AUTHORS.md +59 -0
- musica-0.12.2.dist-info/licenses/LICENSE +201 -0
- musica.libs/libaec-91f0ca0f.so.0.0.8 +0 -0
- musica.libs/libblas-fe34f726.so.3.8.0 +0 -0
- musica.libs/libbrotlicommon-6ce2a53c.so.1.0.6 +0 -0
- musica.libs/libbrotlidec-811d1be3.so.1.0.6 +0 -0
- musica.libs/libcom_err-448cbf49.so.2.1 +0 -0
- musica.libs/libcrypt-52aca757.so.1.1.0 +0 -0
- musica.libs/libcrypto-bdaed0ea.so.1.1.1k +0 -0
- musica.libs/libcurl-c96f124b.so.4.5.0 +0 -0
- musica.libs/libdf-2848fafa.so.0.0.0 +0 -0
- musica.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- musica.libs/libgssapi_krb5-323bbd21.so.2.2 +0 -0
- musica.libs/libhdf5-b5e70f84.so.103.1.0 +0 -0
- musica.libs/libhdf5_hl-0b60eabd.so.100.1.2 +0 -0
- musica.libs/libidn2-2f4a5893.so.0.3.6 +0 -0
- musica.libs/libjpeg-e87d2658.so.62.2.0 +0 -0
- musica.libs/libk5crypto-9a74ff38.so.3.1 +0 -0
- musica.libs/libkeyutils-2777d33d.so.1.6 +0 -0
- musica.libs/libkrb5-a55300e8.so.3.3 +0 -0
- musica.libs/libkrb5support-e6594cfc.so.0.1 +0 -0
- musica.libs/liblapack-31d7d384.so.3.8.0 +0 -0
- musica.libs/liblber-2-d20824ef.4.so.2.10.9 +0 -0
- musica.libs/libldap-2-cea2a960.4.so.2.10.9 +0 -0
- musica.libs/libmfhdf-38b34047.so.0.0.0 +0 -0
- musica.libs/libmvec-2-583a17db.28.so +0 -0
- musica.libs/libnetcdf-3915b03a.so.15.0.1 +0 -0
- musica.libs/libnetcdff-8cc3a1b0.so.7.0.0 +0 -0
- musica.libs/libnghttp2-39367a22.so.14.17.0 +0 -0
- musica.libs/libpcre2-8-516f4c9d.so.0.7.1 +0 -0
- musica.libs/libpsl-99becdd3.so.5.3.1 +0 -0
- musica.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- musica.libs/libsasl2-7de4d792.so.3.0.0 +0 -0
- musica.libs/libselinux-d0805dcb.so.1 +0 -0
- musica.libs/libssh-c11d285b.so.4.8.7 +0 -0
- musica.libs/libssl-60250281.so.1.1.1k +0 -0
- musica.libs/libsz-0deeef7d.so.2.0.1 +0 -0
- musica.libs/libtirpc-cff449a4.so.3.0.0 +0 -0
- musica.libs/libunistring-05abdd40.so.2.1.0 +0 -0
musica/musica.cpp
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// Copyright (C) 2023-2025 University Corporation for Atmospheric Research
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#include <musica/micm/cuda_availability.hpp>
|
|
4
|
+
#include <musica/micm/micm.hpp>
|
|
5
|
+
#include <musica/micm/micm_c_interface.hpp>
|
|
6
|
+
#include <musica/micm/state.hpp>
|
|
7
|
+
#include <musica/micm/state_c_interface.hpp>
|
|
8
|
+
|
|
9
|
+
#include <mechanism_configuration/v1/types.hpp>
|
|
10
|
+
#include <pybind11/pybind11.h>
|
|
11
|
+
#include <pybind11/stl.h>
|
|
12
|
+
#include <pybind11/stl_bind.h>
|
|
13
|
+
|
|
14
|
+
namespace py = pybind11;
|
|
15
|
+
namespace v1 = mechanism_configuration::v1::types;
|
|
16
|
+
|
|
17
|
+
PYBIND11_MAKE_OPAQUE(std::vector<double>)
|
|
18
|
+
PYBIND11_MAKE_OPAQUE(std::vector<micm::Conditions>)
|
|
19
|
+
|
|
20
|
+
void bind_musica(py::module_ &core)
|
|
21
|
+
{
|
|
22
|
+
py::bind_vector<std::vector<double>>(core, "VectorDouble");
|
|
23
|
+
py::bind_vector<std::vector<micm::Conditions>>(core, "VectorConditions");
|
|
24
|
+
|
|
25
|
+
py::class_<micm::Conditions>(core, "_Conditions")
|
|
26
|
+
.def(py::init<>())
|
|
27
|
+
.def_readwrite("temperature", &micm::Conditions::temperature_)
|
|
28
|
+
.def_readwrite("pressure", &micm::Conditions::pressure_)
|
|
29
|
+
.def_readwrite("air_density", &micm::Conditions::air_density_);
|
|
30
|
+
|
|
31
|
+
py::class_<musica::State>(core, "_State")
|
|
32
|
+
.def(py::init<>())
|
|
33
|
+
.def("__del__", [](musica::State &state) {})
|
|
34
|
+
.def("number_of_grid_cells", [](musica::State &state) { return state.NumberOfGridCells(); })
|
|
35
|
+
.def_property(
|
|
36
|
+
"conditions",
|
|
37
|
+
[](musica::State &state) -> std::vector<micm::Conditions> & { return state.GetConditions(); },
|
|
38
|
+
nullptr,
|
|
39
|
+
"list of conditions structs for each grid cell")
|
|
40
|
+
.def_property(
|
|
41
|
+
"concentrations",
|
|
42
|
+
[](musica::State &state) -> std::vector<double> & { return state.GetOrderedConcentrations(); },
|
|
43
|
+
nullptr,
|
|
44
|
+
"native 1D list of concentrations, ordered by species and grid cell according to matrix type")
|
|
45
|
+
.def_property(
|
|
46
|
+
"user_defined_rate_parameters",
|
|
47
|
+
[](musica::State &state) -> std::vector<double> & { return state.GetOrderedRateParameters(); },
|
|
48
|
+
nullptr,
|
|
49
|
+
"native 1D list of user-defined rate parameters, ordered by parameter and grid cell according to matrix type")
|
|
50
|
+
.def("concentration_strides", [](musica::State &state) { return state.GetConcentrationsStrides(); })
|
|
51
|
+
.def(
|
|
52
|
+
"user_defined_rate_parameter_strides",
|
|
53
|
+
[](musica::State &state) { return state.GetUserDefinedRateParametersStrides(); });
|
|
54
|
+
|
|
55
|
+
py::enum_<musica::MICMSolver>(core, "_SolverType")
|
|
56
|
+
.value("rosenbrock", musica::MICMSolver::Rosenbrock)
|
|
57
|
+
.value("rosenbrock_standard_order", musica::MICMSolver::RosenbrockStandardOrder)
|
|
58
|
+
.value("backward_euler", musica::MICMSolver::BackwardEuler)
|
|
59
|
+
.value("backward_euler_standard_order", musica::MICMSolver::BackwardEulerStandardOrder)
|
|
60
|
+
.value("cuda_rosenbrock", musica::MICMSolver::CudaRosenbrock);
|
|
61
|
+
|
|
62
|
+
py::class_<musica::MICM>(core, "_Solver");
|
|
63
|
+
|
|
64
|
+
core.def(
|
|
65
|
+
"_vector_size",
|
|
66
|
+
[](const musica::MICMSolver solver_type)
|
|
67
|
+
{
|
|
68
|
+
switch (solver_type)
|
|
69
|
+
{
|
|
70
|
+
case musica::MICMSolver::Rosenbrock:
|
|
71
|
+
case musica::MICMSolver::BackwardEuler:
|
|
72
|
+
case musica::MICMSolver::CudaRosenbrock: return musica::MUSICA_VECTOR_SIZE;
|
|
73
|
+
case musica::MICMSolver::RosenbrockStandardOrder:
|
|
74
|
+
case musica::MICMSolver::BackwardEulerStandardOrder: return static_cast<std::size_t>(0);
|
|
75
|
+
default: throw py::value_error("Invalid MICM solver type.");
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"Returns the vector dimension for vector-ordered solvers, 0 otherwise.");
|
|
79
|
+
|
|
80
|
+
core.def(
|
|
81
|
+
"_create_solver",
|
|
82
|
+
[](const char *config_path, musica::MICMSolver solver_type)
|
|
83
|
+
{
|
|
84
|
+
musica::Error error;
|
|
85
|
+
musica::MICM *micm = musica::CreateMicm(config_path, solver_type, &error);
|
|
86
|
+
if (!musica::IsSuccess(error))
|
|
87
|
+
{
|
|
88
|
+
std::cout << "Error creating solver: " << error.message_.value_ << " solver_type: " << solver_type
|
|
89
|
+
<< " config_path: " << config_path << std::endl;
|
|
90
|
+
std::string message = "Error creating solver: " + std::string(error.message_.value_);
|
|
91
|
+
DeleteError(&error);
|
|
92
|
+
throw py::value_error(message);
|
|
93
|
+
}
|
|
94
|
+
return micm;
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
core.def(
|
|
98
|
+
"_create_solver_from_mechanism",
|
|
99
|
+
[](const v1::Mechanism &mechanism, musica::MICMSolver solver_type, bool ignore_non_gas_phases)
|
|
100
|
+
{
|
|
101
|
+
musica::Error error;
|
|
102
|
+
musica::Chemistry chemistry = musica::ConvertV1Mechanism(mechanism, ignore_non_gas_phases);
|
|
103
|
+
musica::MICM *micm = musica::CreateMicmFromChemistryMechanism(&chemistry, solver_type, &error);
|
|
104
|
+
if (!musica::IsSuccess(error))
|
|
105
|
+
{
|
|
106
|
+
std::string message = "Error creating solver: " + std::string(error.message_.value_);
|
|
107
|
+
DeleteError(&error);
|
|
108
|
+
throw py::value_error(message);
|
|
109
|
+
}
|
|
110
|
+
return micm;
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
core.def(
|
|
114
|
+
"_create_state",
|
|
115
|
+
[](musica::MICM *micm, std::size_t number_of_grid_cells)
|
|
116
|
+
{
|
|
117
|
+
musica::Error error;
|
|
118
|
+
musica::State *state = musica::CreateMicmState(micm, number_of_grid_cells, &error);
|
|
119
|
+
if (!musica::IsSuccess(error))
|
|
120
|
+
{
|
|
121
|
+
std::string message = "Error creating state: " + std::string(error.message_.value_);
|
|
122
|
+
DeleteError(&error);
|
|
123
|
+
throw py::value_error(message);
|
|
124
|
+
}
|
|
125
|
+
return state;
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
core.def(
|
|
129
|
+
"_micm_solve",
|
|
130
|
+
[](musica::MICM *micm, musica::State *state, double time_step)
|
|
131
|
+
{
|
|
132
|
+
musica::String solver_state;
|
|
133
|
+
musica::SolverResultStats solver_stats;
|
|
134
|
+
musica::Error error;
|
|
135
|
+
musica::MicmSolve(micm, state, time_step, &solver_state, &solver_stats, &error);
|
|
136
|
+
if (!musica::IsSuccess(error))
|
|
137
|
+
{
|
|
138
|
+
std::string message = "Error solving system: " + std::string(error.message_.value_);
|
|
139
|
+
DeleteError(&error);
|
|
140
|
+
throw py::value_error(message);
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"Solve the chemistry system");
|
|
144
|
+
|
|
145
|
+
core.def(
|
|
146
|
+
"_species_ordering",
|
|
147
|
+
[](musica::State *state)
|
|
148
|
+
{
|
|
149
|
+
std::map<std::string, std::size_t> map;
|
|
150
|
+
std::visit([&map](auto &state) { map = state.variable_map_; }, state->state_variant_);
|
|
151
|
+
return map;
|
|
152
|
+
},
|
|
153
|
+
"Return map of species names to their indices in the state concentrations vector");
|
|
154
|
+
|
|
155
|
+
core.def(
|
|
156
|
+
"_user_defined_rate_parameters_ordering",
|
|
157
|
+
[](musica::State *state)
|
|
158
|
+
{
|
|
159
|
+
std::map<std::string, std::size_t> map;
|
|
160
|
+
|
|
161
|
+
std::visit([&map](auto &state) { map = state.custom_rate_parameter_map_; }, state->state_variant_);
|
|
162
|
+
return map;
|
|
163
|
+
},
|
|
164
|
+
"Return map of reaction rate parameters to their indices in the state user-defined rate parameters vector");
|
|
165
|
+
|
|
166
|
+
core.def("_is_cuda_available", &musica::IsCudaAvailable, "Check if CUDA is available");
|
|
167
|
+
|
|
168
|
+
core.def(
|
|
169
|
+
"_print_state",
|
|
170
|
+
[](musica::State *state, const double current_time)
|
|
171
|
+
{
|
|
172
|
+
std::visit(
|
|
173
|
+
[¤t_time](auto &state)
|
|
174
|
+
{
|
|
175
|
+
std::cout << "Current time: " << current_time << std::endl;
|
|
176
|
+
std::cout << "State variables: " << std::endl;
|
|
177
|
+
std::vector<std::string> species_names(state.variable_map_.size());
|
|
178
|
+
for (const auto &species : state.variable_map_)
|
|
179
|
+
species_names[species.second] = species.first;
|
|
180
|
+
for (const auto &name : species_names)
|
|
181
|
+
std::cout << name << ",";
|
|
182
|
+
std::cout << std::endl << state.variables_ << std::endl;
|
|
183
|
+
std::cout << "User-defined rate parameters: " << std::endl;
|
|
184
|
+
std::vector<std::string> rate_param_names(state.custom_rate_parameter_map_.size());
|
|
185
|
+
for (const auto &rate : state.custom_rate_parameter_map_)
|
|
186
|
+
rate_param_names[rate.second] = rate.first;
|
|
187
|
+
for (const auto &name : rate_param_names)
|
|
188
|
+
std::cout << name << ",";
|
|
189
|
+
std::cout << std::endl << state.custom_rate_parameters_ << std::endl;
|
|
190
|
+
std::cout << "Conditions: " << std::endl;
|
|
191
|
+
std::cout << "Temperature,Pressure,Air density" << std::endl;
|
|
192
|
+
for (const auto &condition : state.conditions_)
|
|
193
|
+
{
|
|
194
|
+
std::cout << condition.temperature_ << "," << condition.pressure_ << "," << condition.air_density_
|
|
195
|
+
<< std::endl;
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
state->state_variant_);
|
|
199
|
+
},
|
|
200
|
+
"Print the state to stdout with the current time");
|
|
201
|
+
}
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"name": "Full Configuration",
|
|
4
|
+
"species": [
|
|
5
|
+
{
|
|
6
|
+
"name": "A",
|
|
7
|
+
"__absolute tolerance": 1.0e-30
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"name": "B",
|
|
11
|
+
"tracer type": "AEROSOL"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "C",
|
|
15
|
+
"tracer type": "THIRD_BODY"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "M"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "H2O2",
|
|
22
|
+
"HLC(298K) [mol m-3 Pa-1]": 1.011596348,
|
|
23
|
+
"HLC exponential factor [K]": 6340,
|
|
24
|
+
"diffusion coefficient [m2 s-1]": 1.46E-05,
|
|
25
|
+
"N star": 1.74,
|
|
26
|
+
"molecular weight [kg mol-1]": 0.0340147,
|
|
27
|
+
"density [kg m-3]": 1000.0,
|
|
28
|
+
"__absolute tolerance": 1.0e-10
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "ethanol",
|
|
32
|
+
"diffusion coefficient [m2 s-1]": 0.95E-05,
|
|
33
|
+
"N star": 2.55,
|
|
34
|
+
"molecular weight [kg mol-1]": 0.04607,
|
|
35
|
+
"__absolute tolerance": 1.0e-20
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "ethanol_aq",
|
|
39
|
+
"molecular weight [kg mol-1]": 0.04607,
|
|
40
|
+
"density [kg m-3]": 1000.0,
|
|
41
|
+
"__absolute tolerance": 1.0e-20
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "H2O2_aq",
|
|
45
|
+
"molecular weight [kg mol-1]": 0.0340147,
|
|
46
|
+
"density [kg m-3]": 1000.0,
|
|
47
|
+
"__absolute tolerance": 1.0e-10
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "H2O_aq",
|
|
51
|
+
"density [kg m-3]": 1000.0,
|
|
52
|
+
"molecular weight [kg mol-1]": 0.01801
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "aerosol stuff",
|
|
56
|
+
"molecular weight [kg mol-1]": 0.5,
|
|
57
|
+
"density [kg m-3]": 1000.0,
|
|
58
|
+
"__absolute tolerance": 1.0e-20
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "more aerosol stuff",
|
|
62
|
+
"molecular weight [kg mol-1]": 0.2,
|
|
63
|
+
"density [kg m-3]": 1000.0,
|
|
64
|
+
"__absolute tolerance": 1.0e-20
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"phases": [
|
|
68
|
+
{
|
|
69
|
+
"name": "gas",
|
|
70
|
+
"species": [
|
|
71
|
+
"A",
|
|
72
|
+
"B",
|
|
73
|
+
"C",
|
|
74
|
+
"ethanol"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "aqueous aerosol",
|
|
79
|
+
"species": [
|
|
80
|
+
"H2O2_aq",
|
|
81
|
+
"H2O_aq",
|
|
82
|
+
"ethanol_aq",
|
|
83
|
+
"A",
|
|
84
|
+
"B",
|
|
85
|
+
"C"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "surface reacting phase",
|
|
90
|
+
"species": [
|
|
91
|
+
"aerosol stuff",
|
|
92
|
+
"more aerosol stuff"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "cloud",
|
|
97
|
+
"species": [
|
|
98
|
+
"B",
|
|
99
|
+
"C"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"reactions": [
|
|
104
|
+
{
|
|
105
|
+
"type": "SIMPOL_PHASE_TRANSFER",
|
|
106
|
+
"gas phase": "gas",
|
|
107
|
+
"gas-phase species": "ethanol",
|
|
108
|
+
"condensed phase": "aqueous aerosol",
|
|
109
|
+
"condensed-phase species": "ethanol_aq",
|
|
110
|
+
"B": [
|
|
111
|
+
-1.97E+03,
|
|
112
|
+
2.91E+00,
|
|
113
|
+
1.96E-03,
|
|
114
|
+
-4.96E-01
|
|
115
|
+
],
|
|
116
|
+
"name": "my simpol",
|
|
117
|
+
"__irrelevant": "2"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"type": "AQUEOUS_EQUILIBRIUM",
|
|
121
|
+
"condensed phase": "aqueous aerosol",
|
|
122
|
+
"condensed-phase water": "H2O_aq",
|
|
123
|
+
"A": 1.14e-2,
|
|
124
|
+
"C": 2300.0,
|
|
125
|
+
"k_reverse": 0.32,
|
|
126
|
+
"reactants": [
|
|
127
|
+
{
|
|
128
|
+
"species name": "A",
|
|
129
|
+
"coefficient": 2
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"products": [
|
|
133
|
+
{
|
|
134
|
+
"species name": "B",
|
|
135
|
+
"coefficient": 1
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"species name": "C",
|
|
139
|
+
"coefficient": 1
|
|
140
|
+
}
|
|
141
|
+
],
|
|
142
|
+
"name": "my aqueous eq",
|
|
143
|
+
"__irrelevant": "2"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"type": "CONDENSED_PHASE_ARRHENIUS",
|
|
147
|
+
"condensed phase": "aqueous aerosol",
|
|
148
|
+
"A": 123.45,
|
|
149
|
+
"Ea": 123.45,
|
|
150
|
+
"B": 1.3,
|
|
151
|
+
"D": 300.0,
|
|
152
|
+
"E": 0.6E-5,
|
|
153
|
+
"reactants": [
|
|
154
|
+
{
|
|
155
|
+
"species name": "H2O2_aq",
|
|
156
|
+
"coefficient": 1
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"species name": "H2O_aq",
|
|
160
|
+
"coefficient": 1
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"products": [
|
|
164
|
+
{
|
|
165
|
+
"species name": "ethanol_aq",
|
|
166
|
+
"coefficient": 1
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
"name": "my condensed arrhenius",
|
|
170
|
+
"__irrelevant": "2"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"type": "CONDENSED_PHASE_ARRHENIUS",
|
|
174
|
+
"condensed phase": "aqueous aerosol",
|
|
175
|
+
"A": 123.45,
|
|
176
|
+
"C": 123.45,
|
|
177
|
+
"B": 1.3,
|
|
178
|
+
"D": 300.0,
|
|
179
|
+
"E": 0.6E-5,
|
|
180
|
+
"reactants": [
|
|
181
|
+
{
|
|
182
|
+
"species name": "H2O2_aq",
|
|
183
|
+
"coefficient": 1
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"species name": "H2O_aq",
|
|
187
|
+
"coefficient": 1
|
|
188
|
+
}
|
|
189
|
+
],
|
|
190
|
+
"products": [
|
|
191
|
+
{
|
|
192
|
+
"species name": "ethanol_aq",
|
|
193
|
+
"coefficient": 1
|
|
194
|
+
}
|
|
195
|
+
],
|
|
196
|
+
"name": "my other condensed arrhenius"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"type": "CONDENSED_PHASE_PHOTOLYSIS",
|
|
200
|
+
"condensed phase": "aqueous aerosol",
|
|
201
|
+
"reactants": [
|
|
202
|
+
{
|
|
203
|
+
"species name": "H2O2_aq",
|
|
204
|
+
"coefficient": 1
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"products": [
|
|
208
|
+
{
|
|
209
|
+
"species name": "ethanol_aq",
|
|
210
|
+
"coefficient": 1
|
|
211
|
+
}
|
|
212
|
+
],
|
|
213
|
+
"scaling factor": 12.3,
|
|
214
|
+
"name": "condensed photo B",
|
|
215
|
+
"__irrelevant": "2"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"type": "EMISSION",
|
|
219
|
+
"gas phase": "gas",
|
|
220
|
+
"products": [
|
|
221
|
+
{
|
|
222
|
+
"species name": "B",
|
|
223
|
+
"coefficient": 1
|
|
224
|
+
}
|
|
225
|
+
],
|
|
226
|
+
"name": "my emission",
|
|
227
|
+
"scaling factor": 12.3,
|
|
228
|
+
"__irrelevant": "2"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"type": "FIRST_ORDER_LOSS",
|
|
232
|
+
"gas phase": "gas",
|
|
233
|
+
"reactants": [
|
|
234
|
+
{
|
|
235
|
+
"species name": "C",
|
|
236
|
+
"coefficient": 1
|
|
237
|
+
}
|
|
238
|
+
],
|
|
239
|
+
"name": "my first order loss",
|
|
240
|
+
"scaling factor": 12.3,
|
|
241
|
+
"__irrelevant": "2"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"type": "PHOTOLYSIS",
|
|
245
|
+
"gas phase": "gas",
|
|
246
|
+
"reactants": [
|
|
247
|
+
{
|
|
248
|
+
"species name": "B",
|
|
249
|
+
"coefficient": 1
|
|
250
|
+
}
|
|
251
|
+
],
|
|
252
|
+
"products": [
|
|
253
|
+
{
|
|
254
|
+
"species name": "C",
|
|
255
|
+
"coefficient": 1
|
|
256
|
+
}
|
|
257
|
+
],
|
|
258
|
+
"name": "photo B",
|
|
259
|
+
"scaling factor": 12.3,
|
|
260
|
+
"__irrelevant": "2"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"type": "SURFACE",
|
|
264
|
+
"gas phase": "gas",
|
|
265
|
+
"gas-phase species": "A",
|
|
266
|
+
"reaction probability": 2.0e-2,
|
|
267
|
+
"gas-phase products": [
|
|
268
|
+
{
|
|
269
|
+
"species name": "B",
|
|
270
|
+
"coefficient": 1
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"species name": "C",
|
|
274
|
+
"coefficient": 1
|
|
275
|
+
}
|
|
276
|
+
],
|
|
277
|
+
"condensed phase": "surface reacting phase",
|
|
278
|
+
"name": "my surface",
|
|
279
|
+
"__irrelevant": "2"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"type": "TROE",
|
|
283
|
+
"gas phase": "gas",
|
|
284
|
+
"reactants": [
|
|
285
|
+
{
|
|
286
|
+
"species name": "B",
|
|
287
|
+
"coefficient": 1
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"species name": "M",
|
|
291
|
+
"coefficient": 1
|
|
292
|
+
}
|
|
293
|
+
],
|
|
294
|
+
"products": [
|
|
295
|
+
{
|
|
296
|
+
"species name": "C",
|
|
297
|
+
"coefficient": 1
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
"k0_A": 1.2e-12,
|
|
301
|
+
"k0_B": 167,
|
|
302
|
+
"k0_C": 3,
|
|
303
|
+
"kinf_A": 136,
|
|
304
|
+
"kinf_B": 5,
|
|
305
|
+
"kinf_C": 24,
|
|
306
|
+
"Fc": 0.9,
|
|
307
|
+
"N": 0.8,
|
|
308
|
+
"name": "my troe",
|
|
309
|
+
"__irrelevant": "2"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"type": "TERNARY_CHEMICAL_ACTIVATION",
|
|
313
|
+
"gas phase": "gas",
|
|
314
|
+
"name": "my ternary chemical activation",
|
|
315
|
+
"reactants": [
|
|
316
|
+
{
|
|
317
|
+
"species name": "B",
|
|
318
|
+
"coefficient": 1
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"species name": "M",
|
|
322
|
+
"coefficient": 1
|
|
323
|
+
}
|
|
324
|
+
],
|
|
325
|
+
"products": [
|
|
326
|
+
{
|
|
327
|
+
"species name": "C",
|
|
328
|
+
"coefficient": 1
|
|
329
|
+
}
|
|
330
|
+
],
|
|
331
|
+
"k0_A": 32.1,
|
|
332
|
+
"k0_B": -2.3,
|
|
333
|
+
"k0_C": 102.3,
|
|
334
|
+
"kinf_A": 63.4,
|
|
335
|
+
"kinf_B": -1.3,
|
|
336
|
+
"kinf_C": 908.5,
|
|
337
|
+
"Fc": 1.3,
|
|
338
|
+
"N": 32.1,
|
|
339
|
+
"__irrelevant": "2"
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"type": "BRANCHED_NO_RO2",
|
|
343
|
+
"gas phase": "gas",
|
|
344
|
+
"reactants": [
|
|
345
|
+
{
|
|
346
|
+
"species name": "A",
|
|
347
|
+
"coefficient": 1
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
"alkoxy products": [
|
|
351
|
+
{
|
|
352
|
+
"species name": "B",
|
|
353
|
+
"coefficient": 1
|
|
354
|
+
}
|
|
355
|
+
],
|
|
356
|
+
"nitrate products": [
|
|
357
|
+
{
|
|
358
|
+
"species name": "C",
|
|
359
|
+
"coefficient": 1
|
|
360
|
+
}
|
|
361
|
+
],
|
|
362
|
+
"X": 1.2e-4,
|
|
363
|
+
"Y": 167,
|
|
364
|
+
"a0": 0.15,
|
|
365
|
+
"n": 9,
|
|
366
|
+
"name": "my branched",
|
|
367
|
+
"__irrelevant": "2"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"gas phase": "gas",
|
|
371
|
+
"name": "my tunneling",
|
|
372
|
+
"type": "TUNNELING",
|
|
373
|
+
"A": 123.45,
|
|
374
|
+
"B": 1200.0,
|
|
375
|
+
"C": 1.0e8,
|
|
376
|
+
"reactants": [
|
|
377
|
+
{
|
|
378
|
+
"species name": "B",
|
|
379
|
+
"coefficient": 1
|
|
380
|
+
}
|
|
381
|
+
],
|
|
382
|
+
"products": [
|
|
383
|
+
{
|
|
384
|
+
"species name": "C",
|
|
385
|
+
"coefficient": 1
|
|
386
|
+
}
|
|
387
|
+
],
|
|
388
|
+
"__irrelevant": "2"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"type": "WET_DEPOSITION",
|
|
392
|
+
"condensed phase": "cloud",
|
|
393
|
+
"name": "rxn cloud",
|
|
394
|
+
"scaling factor": 12.3,
|
|
395
|
+
"__irrelevant": "2"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"type": "ARRHENIUS",
|
|
399
|
+
"gas phase": "gas",
|
|
400
|
+
"reactants": [
|
|
401
|
+
{
|
|
402
|
+
"species name": "B",
|
|
403
|
+
"coefficient": 1
|
|
404
|
+
}
|
|
405
|
+
],
|
|
406
|
+
"products": [
|
|
407
|
+
{
|
|
408
|
+
"species name": "C",
|
|
409
|
+
"coefficient": 1
|
|
410
|
+
}
|
|
411
|
+
],
|
|
412
|
+
"A": 32.1,
|
|
413
|
+
"B": -2.3,
|
|
414
|
+
"C": 102.3,
|
|
415
|
+
"D": 63.4,
|
|
416
|
+
"E": -1.3,
|
|
417
|
+
"name": "my arrhenius",
|
|
418
|
+
"__irrelevant": "2"
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"type": "ARRHENIUS",
|
|
422
|
+
"gas phase": "gas",
|
|
423
|
+
"reactants": [
|
|
424
|
+
{
|
|
425
|
+
"species name": "A",
|
|
426
|
+
"coefficient": 1
|
|
427
|
+
}
|
|
428
|
+
],
|
|
429
|
+
"products": [
|
|
430
|
+
{
|
|
431
|
+
"species name": "B",
|
|
432
|
+
"coefficient": 1.2
|
|
433
|
+
}
|
|
434
|
+
],
|
|
435
|
+
"A": 29.3,
|
|
436
|
+
"B": -1.5,
|
|
437
|
+
"Ea": 101.2,
|
|
438
|
+
"D": 82.6,
|
|
439
|
+
"E": -0.98,
|
|
440
|
+
"name": "my other arrhenius"
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
"type": "USER_DEFINED",
|
|
444
|
+
"gas phase": "gas",
|
|
445
|
+
"reactants": [
|
|
446
|
+
{
|
|
447
|
+
"species name": "A",
|
|
448
|
+
"coefficient": 1
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"species name": "B",
|
|
452
|
+
"coefficient": 1
|
|
453
|
+
}
|
|
454
|
+
],
|
|
455
|
+
"products": [
|
|
456
|
+
{
|
|
457
|
+
"species name": "C",
|
|
458
|
+
"coefficient": 1.3
|
|
459
|
+
}
|
|
460
|
+
],
|
|
461
|
+
"name": "my user defined",
|
|
462
|
+
"scaling factor": 12.3,
|
|
463
|
+
"__irrelevant": "2"
|
|
464
|
+
}
|
|
465
|
+
]
|
|
466
|
+
}
|