musica 0.10.1__cp312-cp312-win_amd64.whl → 0.11.1.0__cp312-cp312-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.cp312-win_amd64.pyd +0 -0
- lib/musica.lib +0 -0
- lib/yaml-cpp.lib +0 -0
- musica/CMakeLists.txt +47 -0
- musica/__init__.py +3 -0
- musica/_version.py +1 -1
- musica/binding.cpp +19 -0
- musica/mechanism_configuration.cpp +519 -0
- musica/mechanism_configuration.py +1291 -0
- musica/musica.cpp +214 -0
- musica/test/examples/v0/config.json +7 -0
- musica/test/examples/v0/config.yaml +3 -0
- musica/test/examples/v0/reactions.json +193 -0
- musica/test/examples/v0/reactions.yaml +142 -0
- musica/test/examples/v0/species.json +40 -0
- musica/test/examples/v0/species.yaml +19 -0
- musica/test/examples/v1/full_configuration.json +434 -0
- musica/test/examples/v1/full_configuration.yaml +271 -0
- musica/test/test_analytical.py +323 -0
- musica/test/test_chapman.py +123 -0
- musica/test/test_parser.py +693 -0
- musica/test/tuvx.py +10 -0
- musica/tools/prepare_build_environment_linux.sh +41 -0
- musica/tools/prepare_build_environment_windows.sh +22 -0
- musica/tools/repair_wheel_gpu.sh +25 -0
- musica/types.py +362 -0
- {musica-0.10.1.dist-info → musica-0.11.1.0.dist-info}/METADATA +22 -1
- musica-0.11.1.0.dist-info/RECORD +30 -0
- {musica-0.10.1.dist-info → musica-0.11.1.0.dist-info}/WHEEL +1 -1
- lib/mechanism_configuration.lib +0 -0
- musica-0.10.1.dist-info/RECORD +0 -9
- musica.cp312-win_amd64.pyd +0 -0
- {musica-0.10.1.dist-info → musica-0.11.1.0.dist-info}/licenses/LICENSE +0 -0
musica/musica.cpp
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// Copyright (C) 2023-2025 University Corporation for Atmospheric Research
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#include <musica/micm/micm.hpp>
|
|
4
|
+
#include <musica/micm/micm_c_interface.hpp>
|
|
5
|
+
#include <musica/micm/state_c_interface.hpp>
|
|
6
|
+
#include <musica/micm/state.hpp>
|
|
7
|
+
#include <mechanism_configuration/v1/types.hpp>
|
|
8
|
+
#include <musica/micm/cuda_availability.hpp>
|
|
9
|
+
|
|
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",
|
|
35
|
+
[](musica::State &state) {
|
|
36
|
+
return state.NumberOfGridCells();
|
|
37
|
+
})
|
|
38
|
+
.def_property(
|
|
39
|
+
"conditions",
|
|
40
|
+
[](musica::State &state) -> std::vector<micm::Conditions>& {
|
|
41
|
+
return state.GetConditions();
|
|
42
|
+
},
|
|
43
|
+
nullptr,
|
|
44
|
+
"list of conditions structs for each grid cell")
|
|
45
|
+
.def_property(
|
|
46
|
+
"concentrations",
|
|
47
|
+
[](musica::State &state) -> std::vector<double>& {
|
|
48
|
+
return state.GetOrderedConcentrations();
|
|
49
|
+
},
|
|
50
|
+
nullptr,
|
|
51
|
+
"native 1D list of concentrations, ordered by species and grid cell according to matrix type")
|
|
52
|
+
.def_property(
|
|
53
|
+
"user_defined_rate_parameters",
|
|
54
|
+
[](musica::State &state) -> std::vector<double>& {
|
|
55
|
+
return state.GetOrderedRateParameters();
|
|
56
|
+
},
|
|
57
|
+
nullptr,
|
|
58
|
+
"native 1D list of user-defined rate parameters, ordered by parameter and grid cell according to matrix type")
|
|
59
|
+
.def("concentration_strides",
|
|
60
|
+
[](musica::State &state) {
|
|
61
|
+
return state.GetConcentrationsStrides();
|
|
62
|
+
})
|
|
63
|
+
.def("user_defined_rate_parameter_strides",
|
|
64
|
+
[](musica::State &state) {
|
|
65
|
+
return state.GetUserDefinedRateParametersStrides();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
py::enum_<musica::MICMSolver>(core, "_SolverType")
|
|
69
|
+
.value("rosenbrock", musica::MICMSolver::Rosenbrock)
|
|
70
|
+
.value("rosenbrock_standard_order", musica::MICMSolver::RosenbrockStandardOrder)
|
|
71
|
+
.value("backward_euler", musica::MICMSolver::BackwardEuler)
|
|
72
|
+
.value("backward_euler_standard_order", musica::MICMSolver::BackwardEulerStandardOrder)
|
|
73
|
+
.value("cuda_rosenbrock", musica::MICMSolver::CudaRosenbrock);
|
|
74
|
+
|
|
75
|
+
py::class_<musica::MICM>(core, "_Solver");
|
|
76
|
+
|
|
77
|
+
core.def("_vector_size",
|
|
78
|
+
[](const musica::MICMSolver solver_type)
|
|
79
|
+
{
|
|
80
|
+
switch (solver_type)
|
|
81
|
+
{
|
|
82
|
+
case musica::MICMSolver::Rosenbrock:
|
|
83
|
+
case musica::MICMSolver::BackwardEuler:
|
|
84
|
+
case musica::MICMSolver::CudaRosenbrock:
|
|
85
|
+
return musica::MUSICA_VECTOR_SIZE;
|
|
86
|
+
case musica::MICMSolver::RosenbrockStandardOrder:
|
|
87
|
+
case musica::MICMSolver::BackwardEulerStandardOrder:
|
|
88
|
+
return static_cast<std::size_t>(0);
|
|
89
|
+
default:
|
|
90
|
+
throw py::value_error("Invalid MICM solver type.");
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"Returns the vector dimension for vector-ordered solvers, 0 otherwise.");
|
|
94
|
+
|
|
95
|
+
core.def(
|
|
96
|
+
"_create_solver",
|
|
97
|
+
[](const char *config_path, musica::MICMSolver solver_type)
|
|
98
|
+
{
|
|
99
|
+
musica::Error error;
|
|
100
|
+
musica::MICM *micm = musica::CreateMicm(config_path, solver_type, &error);
|
|
101
|
+
if (!musica::IsSuccess(error))
|
|
102
|
+
{
|
|
103
|
+
std::cout << "Error creating solver: " << error.message_.value_ << " solver_type: " << solver_type
|
|
104
|
+
<< " config_path: " << config_path << std::endl;
|
|
105
|
+
std::string message = "Error creating solver: " + std::string(error.message_.value_);
|
|
106
|
+
DeleteError(&error);
|
|
107
|
+
throw py::value_error(message);
|
|
108
|
+
}
|
|
109
|
+
return micm;
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
core.def(
|
|
113
|
+
"_create_solver_from_mechanism",
|
|
114
|
+
[](const v1::Mechanism &mechanism, musica::MICMSolver solver_type)
|
|
115
|
+
{
|
|
116
|
+
musica::Error error;
|
|
117
|
+
musica::Chemistry chemistry = musica::ConvertV1Mechanism(mechanism);
|
|
118
|
+
musica::MICM *micm = musica::CreateMicmFromChemistryMechanism(&chemistry, solver_type, &error);
|
|
119
|
+
if (!musica::IsSuccess(error))
|
|
120
|
+
{
|
|
121
|
+
std::string message = "Error creating solver: " + std::string(error.message_.value_);
|
|
122
|
+
DeleteError(&error);
|
|
123
|
+
throw py::value_error(message);
|
|
124
|
+
}
|
|
125
|
+
return micm;
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
core.def(
|
|
129
|
+
"_create_state",
|
|
130
|
+
[](musica::MICM *micm, std::size_t number_of_grid_cells)
|
|
131
|
+
{
|
|
132
|
+
musica::Error error;
|
|
133
|
+
musica::State *state = musica::CreateMicmState(micm, number_of_grid_cells, &error);
|
|
134
|
+
if (!musica::IsSuccess(error))
|
|
135
|
+
{
|
|
136
|
+
std::string message = "Error creating state: " + std::string(error.message_.value_);
|
|
137
|
+
DeleteError(&error);
|
|
138
|
+
throw py::value_error(message);
|
|
139
|
+
}
|
|
140
|
+
return state;
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
core.def(
|
|
144
|
+
"_micm_solve",
|
|
145
|
+
[](musica::MICM *micm, musica::State *state, double time_step)
|
|
146
|
+
{
|
|
147
|
+
musica::String solver_state;
|
|
148
|
+
musica::SolverResultStats solver_stats;
|
|
149
|
+
musica::Error error;
|
|
150
|
+
musica::MicmSolve(micm, state, time_step, &solver_state, &solver_stats, &error);
|
|
151
|
+
if (!musica::IsSuccess(error))
|
|
152
|
+
{
|
|
153
|
+
std::string message = "Error solving system: " + std::string(error.message_.value_);
|
|
154
|
+
DeleteError(&error);
|
|
155
|
+
throw py::value_error(message);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"Solve the chemistry system");
|
|
159
|
+
|
|
160
|
+
core.def(
|
|
161
|
+
"_species_ordering",
|
|
162
|
+
[](musica::State *state)
|
|
163
|
+
{
|
|
164
|
+
std::map<std::string, std::size_t> map;
|
|
165
|
+
std::visit([&map](auto &state) { map = state.variable_map_; }, state->state_variant_);
|
|
166
|
+
return map;
|
|
167
|
+
},
|
|
168
|
+
"Return map of species names to their indices in the state concentrations vector");
|
|
169
|
+
|
|
170
|
+
core.def(
|
|
171
|
+
"_user_defined_rate_parameters_ordering",
|
|
172
|
+
[](musica::State *state)
|
|
173
|
+
{
|
|
174
|
+
std::map<std::string, std::size_t> map;
|
|
175
|
+
|
|
176
|
+
std::visit([&map](auto &state) { map = state.custom_rate_parameter_map_; }, state->state_variant_);
|
|
177
|
+
return map;
|
|
178
|
+
},
|
|
179
|
+
"Return map of reaction rate parameters to their indices in the state user-defined rate parameters vector");
|
|
180
|
+
|
|
181
|
+
core.def("_is_cuda_available", &musica::IsCudaAvailable, "Check if CUDA is available");
|
|
182
|
+
|
|
183
|
+
core.def(
|
|
184
|
+
"_print_state",
|
|
185
|
+
[](musica::State *state, const double current_time)
|
|
186
|
+
{
|
|
187
|
+
std::visit([¤t_time](auto &state) {
|
|
188
|
+
std::cout << "Current time: " << current_time << std::endl;
|
|
189
|
+
std::cout << "State variables: " << std::endl;
|
|
190
|
+
std::vector<std::string> species_names(state.variable_map_.size());
|
|
191
|
+
for (const auto &species : state.variable_map_)
|
|
192
|
+
species_names[species.second] = species.first;
|
|
193
|
+
for (const auto &name : species_names)
|
|
194
|
+
std::cout << name << ",";
|
|
195
|
+
std::cout << std::endl << state.variables_ << std::endl;
|
|
196
|
+
std::cout << "User-defined rate parameters: " << std::endl;
|
|
197
|
+
std::vector<std::string> rate_param_names(state.custom_rate_parameter_map_.size());
|
|
198
|
+
for (const auto &rate : state.custom_rate_parameter_map_)
|
|
199
|
+
rate_param_names[rate.second] = rate.first;
|
|
200
|
+
for (const auto &name : rate_param_names)
|
|
201
|
+
std::cout << name << ",";
|
|
202
|
+
std::cout << std::endl << state.custom_rate_parameters_ << std::endl;
|
|
203
|
+
std::cout << "Conditions: " << std::endl;
|
|
204
|
+
std::cout << "Temperature,Pressure,Air density" << std::endl;
|
|
205
|
+
for (const auto &condition : state.conditions_)
|
|
206
|
+
{
|
|
207
|
+
std::cout << condition.temperature_ << ","
|
|
208
|
+
<< condition.pressure_ << ","
|
|
209
|
+
<< condition.air_density_ << std::endl;
|
|
210
|
+
}
|
|
211
|
+
}, state->state_variant_);
|
|
212
|
+
},
|
|
213
|
+
"Print the state to stdout with the current time");
|
|
214
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
{
|
|
2
|
+
"camp-data": [
|
|
3
|
+
{
|
|
4
|
+
"type": "MECHANISM",
|
|
5
|
+
"name": "music box interactive configuration",
|
|
6
|
+
"reactions": [
|
|
7
|
+
{
|
|
8
|
+
"type": "PHOTOLYSIS",
|
|
9
|
+
"scaling factor": 1,
|
|
10
|
+
"MUSICA name": "foo",
|
|
11
|
+
"reactants": {
|
|
12
|
+
"foo": {}
|
|
13
|
+
},
|
|
14
|
+
"products": {
|
|
15
|
+
"buz": {
|
|
16
|
+
"yield": 1
|
|
17
|
+
},
|
|
18
|
+
"bar": {
|
|
19
|
+
"yield": 1
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "ARRHENIUS",
|
|
25
|
+
"A": 6e-34,
|
|
26
|
+
"Ea": 0,
|
|
27
|
+
"B": -2.4,
|
|
28
|
+
"D": 300,
|
|
29
|
+
"E": 0,
|
|
30
|
+
"reactants": {
|
|
31
|
+
"bar": {
|
|
32
|
+
"qty": 1
|
|
33
|
+
},
|
|
34
|
+
"quuz": {
|
|
35
|
+
"qty": 1
|
|
36
|
+
},
|
|
37
|
+
"M": {
|
|
38
|
+
"qty": 1
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"products": {
|
|
42
|
+
"baz": {
|
|
43
|
+
"yield": 1
|
|
44
|
+
},
|
|
45
|
+
"M": {
|
|
46
|
+
"yield": 1
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"type": "TROE",
|
|
52
|
+
"k0_A": 2.5e-31,
|
|
53
|
+
"k0_B": -1.8,
|
|
54
|
+
"k0_C": 0,
|
|
55
|
+
"kinf_A": 2.2e-11,
|
|
56
|
+
"kinf_B": -0.7,
|
|
57
|
+
"kinf_C": 0,
|
|
58
|
+
"Fc": 0.6,
|
|
59
|
+
"N": 1,
|
|
60
|
+
"reactants": {
|
|
61
|
+
"bar": {
|
|
62
|
+
"qty": 1
|
|
63
|
+
},
|
|
64
|
+
"foo": {
|
|
65
|
+
"qty": 1
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"products": {
|
|
69
|
+
"baz": {
|
|
70
|
+
"yield": 1
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"type": "EMISSION",
|
|
76
|
+
"scaling factor": 1,
|
|
77
|
+
"MUSICA name": "buz",
|
|
78
|
+
"species": "buz"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"type": "FIRST_ORDER_LOSS",
|
|
82
|
+
"species": "bar",
|
|
83
|
+
"MUSICA name": "bar",
|
|
84
|
+
"scaling factor": 2.5
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"type": "TERNARY_CHEMICAL_ACTIVATION",
|
|
88
|
+
"reactants": {
|
|
89
|
+
"bar" : { },
|
|
90
|
+
"baz" : { }
|
|
91
|
+
},
|
|
92
|
+
"products": {
|
|
93
|
+
"bar": { "yield": 0.5 },
|
|
94
|
+
"foo": { }
|
|
95
|
+
},
|
|
96
|
+
"k0_A": 32.1,
|
|
97
|
+
"k0_B": -2.3,
|
|
98
|
+
"k0_C": 102.3,
|
|
99
|
+
"kinf_A": 63.4,
|
|
100
|
+
"kinf_B": -1.3,
|
|
101
|
+
"kinf_C": 908.5,
|
|
102
|
+
"Fc": 1.3,
|
|
103
|
+
"N": 32.1
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"type": "BRANCHED",
|
|
107
|
+
"reactants": {
|
|
108
|
+
"foo" : { },
|
|
109
|
+
"quz" : { "qty" :2 }
|
|
110
|
+
},
|
|
111
|
+
"alkoxy products": {
|
|
112
|
+
"bar": { "yield": 1.0 },
|
|
113
|
+
"baz": { "yield": 3.2 }
|
|
114
|
+
},
|
|
115
|
+
"nitrate products": {
|
|
116
|
+
"quz": { "yield": 1.0 }
|
|
117
|
+
},
|
|
118
|
+
"Y" : 42.3,
|
|
119
|
+
"X" : 12.3,
|
|
120
|
+
"a0" : 1.0e-5,
|
|
121
|
+
"n" : 3
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"type": "WENNBERG_NO_RO2",
|
|
125
|
+
"reactants": {
|
|
126
|
+
"bar" : { },
|
|
127
|
+
"baz" : { }
|
|
128
|
+
},
|
|
129
|
+
"alkoxy products": {
|
|
130
|
+
"baz": { }
|
|
131
|
+
},
|
|
132
|
+
"nitrate products": {
|
|
133
|
+
"bar": { "yield": 0.5 },
|
|
134
|
+
"foo": { }
|
|
135
|
+
},
|
|
136
|
+
"Y" : 2.3e8,
|
|
137
|
+
"X" : 0.32,
|
|
138
|
+
"a0" : 0.423,
|
|
139
|
+
"n" : 6
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"type": "TUNNELING",
|
|
143
|
+
"reactants": {
|
|
144
|
+
"bar" : { },
|
|
145
|
+
"baz" : { }
|
|
146
|
+
},
|
|
147
|
+
"products": {
|
|
148
|
+
"bar": { "yield": 0.5 },
|
|
149
|
+
"foo": { }
|
|
150
|
+
},
|
|
151
|
+
"A": 32.1,
|
|
152
|
+
"B": -2.3,
|
|
153
|
+
"C": 102.3
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"type": "WENNBERG_TUNNELING",
|
|
157
|
+
"reactants": {
|
|
158
|
+
"bar2" : { },
|
|
159
|
+
"baz2" : { }
|
|
160
|
+
},
|
|
161
|
+
"products": {
|
|
162
|
+
"bar2": { "yield": 0.5 },
|
|
163
|
+
"foo2": { }
|
|
164
|
+
},
|
|
165
|
+
"A": 2.1,
|
|
166
|
+
"B": -1.3,
|
|
167
|
+
"C": 12.3
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"type": "SURFACE",
|
|
171
|
+
"gas-phase reactant": "bar",
|
|
172
|
+
"gas-phase products": {
|
|
173
|
+
"bar": { "yield": 0.5 },
|
|
174
|
+
"foo": { }
|
|
175
|
+
},
|
|
176
|
+
"reaction probability": 0.5,
|
|
177
|
+
"MUSICA name": "kbar"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"type": "USER_DEFINED",
|
|
181
|
+
"MUSICA name": "bar",
|
|
182
|
+
"reactants": {
|
|
183
|
+
"foo" : { "qty": 2 }
|
|
184
|
+
},
|
|
185
|
+
"products": {
|
|
186
|
+
"bar" : { }
|
|
187
|
+
},
|
|
188
|
+
"scaling factor": 2.5
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
camp-data:
|
|
2
|
+
- name: music box interactive configuration
|
|
3
|
+
reactions:
|
|
4
|
+
- MUSICA name: foo
|
|
5
|
+
products:
|
|
6
|
+
bar:
|
|
7
|
+
yield: 1
|
|
8
|
+
buz:
|
|
9
|
+
yield: 1
|
|
10
|
+
reactants:
|
|
11
|
+
foo: {}
|
|
12
|
+
scaling factor: 1
|
|
13
|
+
type: PHOTOLYSIS
|
|
14
|
+
- A: 6.0e-34
|
|
15
|
+
B: -2.4
|
|
16
|
+
D: 300
|
|
17
|
+
E: 0
|
|
18
|
+
Ea: 0
|
|
19
|
+
products:
|
|
20
|
+
M:
|
|
21
|
+
yield: 1
|
|
22
|
+
baz:
|
|
23
|
+
yield: 1
|
|
24
|
+
reactants:
|
|
25
|
+
M:
|
|
26
|
+
qty: 1
|
|
27
|
+
bar:
|
|
28
|
+
qty: 1
|
|
29
|
+
quuz:
|
|
30
|
+
qty: 1
|
|
31
|
+
type: ARRHENIUS
|
|
32
|
+
- Fc: 0.6
|
|
33
|
+
N: 1
|
|
34
|
+
k0_A: 2.5e-31
|
|
35
|
+
k0_B: -1.8
|
|
36
|
+
k0_C: 0
|
|
37
|
+
kinf_A: 2.2e-11
|
|
38
|
+
kinf_B: -0.7
|
|
39
|
+
kinf_C: 0
|
|
40
|
+
products:
|
|
41
|
+
baz:
|
|
42
|
+
yield: 1
|
|
43
|
+
reactants:
|
|
44
|
+
bar:
|
|
45
|
+
qty: 1
|
|
46
|
+
foo:
|
|
47
|
+
qty: 1
|
|
48
|
+
type: TROE
|
|
49
|
+
- MUSICA name: buz
|
|
50
|
+
scaling factor: 1
|
|
51
|
+
species: buz
|
|
52
|
+
type: EMISSION
|
|
53
|
+
- MUSICA name: bar
|
|
54
|
+
scaling factor: 2.5
|
|
55
|
+
species: bar
|
|
56
|
+
type: FIRST_ORDER_LOSS
|
|
57
|
+
- Fc: 1.3
|
|
58
|
+
N: 32.1
|
|
59
|
+
k0_A: 32.1
|
|
60
|
+
k0_B: -2.3
|
|
61
|
+
k0_C: 102.3
|
|
62
|
+
kinf_A: 63.4
|
|
63
|
+
kinf_B: -1.3
|
|
64
|
+
kinf_C: 908.5
|
|
65
|
+
products:
|
|
66
|
+
bar:
|
|
67
|
+
yield: 0.5
|
|
68
|
+
foo: {}
|
|
69
|
+
reactants:
|
|
70
|
+
bar: {}
|
|
71
|
+
baz: {}
|
|
72
|
+
type: TERNARY_CHEMICAL_ACTIVATION
|
|
73
|
+
- X: 12.3
|
|
74
|
+
Y: 42.3
|
|
75
|
+
a0: 1.0e-05
|
|
76
|
+
alkoxy products:
|
|
77
|
+
bar:
|
|
78
|
+
yield: 1.0
|
|
79
|
+
baz:
|
|
80
|
+
yield: 3.2
|
|
81
|
+
n: 3
|
|
82
|
+
nitrate products:
|
|
83
|
+
quz:
|
|
84
|
+
yield: 1.0
|
|
85
|
+
reactants:
|
|
86
|
+
foo: {}
|
|
87
|
+
quz:
|
|
88
|
+
qty: 2
|
|
89
|
+
type: BRANCHED
|
|
90
|
+
- X: 0.32
|
|
91
|
+
Y: 230000000.0
|
|
92
|
+
a0: 0.423
|
|
93
|
+
alkoxy products:
|
|
94
|
+
baz: {}
|
|
95
|
+
n: 6
|
|
96
|
+
nitrate products:
|
|
97
|
+
bar:
|
|
98
|
+
yield: 0.5
|
|
99
|
+
foo: {}
|
|
100
|
+
reactants:
|
|
101
|
+
bar: {}
|
|
102
|
+
baz: {}
|
|
103
|
+
type: WENNBERG_NO_RO2
|
|
104
|
+
- A: 32.1
|
|
105
|
+
B: -2.3
|
|
106
|
+
C: 102.3
|
|
107
|
+
products:
|
|
108
|
+
bar:
|
|
109
|
+
yield: 0.5
|
|
110
|
+
foo: {}
|
|
111
|
+
reactants:
|
|
112
|
+
bar: {}
|
|
113
|
+
baz: {}
|
|
114
|
+
type: TUNNELING
|
|
115
|
+
- A: 2.1
|
|
116
|
+
B: -1.3
|
|
117
|
+
C: 12.3
|
|
118
|
+
products:
|
|
119
|
+
bar2:
|
|
120
|
+
yield: 0.5
|
|
121
|
+
foo2: {}
|
|
122
|
+
reactants:
|
|
123
|
+
bar2: {}
|
|
124
|
+
baz2: {}
|
|
125
|
+
type: WENNBERG_TUNNELING
|
|
126
|
+
- MUSICA name: kbar
|
|
127
|
+
gas-phase products:
|
|
128
|
+
bar:
|
|
129
|
+
yield: 0.5
|
|
130
|
+
foo: {}
|
|
131
|
+
gas-phase reactant: bar
|
|
132
|
+
reaction probability: 0.5
|
|
133
|
+
type: SURFACE
|
|
134
|
+
- MUSICA name: bar
|
|
135
|
+
products:
|
|
136
|
+
bar: {}
|
|
137
|
+
reactants:
|
|
138
|
+
foo:
|
|
139
|
+
qty: 2
|
|
140
|
+
scaling factor: 2.5
|
|
141
|
+
type: USER_DEFINED
|
|
142
|
+
type: MECHANISM
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"camp-data": [
|
|
3
|
+
{
|
|
4
|
+
"name": "foo",
|
|
5
|
+
"type": "CHEM_SPEC"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"name": "bar",
|
|
9
|
+
"type": "CHEM_SPEC"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "buz",
|
|
13
|
+
"type": "CHEM_SPEC"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "quuz",
|
|
17
|
+
"type": "CHEM_SPEC"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "foo2",
|
|
21
|
+
"type": "CHEM_SPEC"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "bar2",
|
|
25
|
+
"type": "CHEM_SPEC"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "baz",
|
|
29
|
+
"type": "CHEM_SPEC"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "baz2",
|
|
33
|
+
"type": "CHEM_SPEC"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "M",
|
|
37
|
+
"type": "CHEM_SPEC"
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
camp-data:
|
|
2
|
+
- name: foo
|
|
3
|
+
type: CHEM_SPEC
|
|
4
|
+
- name: bar
|
|
5
|
+
type: CHEM_SPEC
|
|
6
|
+
- name: buz
|
|
7
|
+
type: CHEM_SPEC
|
|
8
|
+
- name: quuz
|
|
9
|
+
type: CHEM_SPEC
|
|
10
|
+
- name: foo2
|
|
11
|
+
type: CHEM_SPEC
|
|
12
|
+
- name: bar2
|
|
13
|
+
type: CHEM_SPEC
|
|
14
|
+
- name: baz
|
|
15
|
+
type: CHEM_SPEC
|
|
16
|
+
- name: baz2
|
|
17
|
+
type: CHEM_SPEC
|
|
18
|
+
- name: M
|
|
19
|
+
type: CHEM_SPEC
|