@driftengine/chemistry 3.61.0

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.
Files changed (142) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +9 -0
  3. package/README.md +194 -0
  4. package/dist/conservation.d.ts +9 -0
  5. package/dist/conservation.js +38 -0
  6. package/dist/element/elements.d.ts +31 -0
  7. package/dist/element/elements.js +73 -0
  8. package/dist/element/matrix.d.ts +27 -0
  9. package/dist/element/matrix.js +80 -0
  10. package/dist/field/ambient.d.ts +49 -0
  11. package/dist/field/ambient.js +82 -0
  12. package/dist/field/atmosphere.d.ts +308 -0
  13. package/dist/field/atmosphere.js +1033 -0
  14. package/dist/ignition/criteria.d.ts +97 -0
  15. package/dist/ignition/criteria.js +135 -0
  16. package/dist/ignition/events.d.ts +56 -0
  17. package/dist/ignition/events.js +90 -0
  18. package/dist/index.d.ts +84 -0
  19. package/dist/index.js +66 -0
  20. package/dist/library/biological.d.ts +6 -0
  21. package/dist/library/biological.js +229 -0
  22. package/dist/library/common.d.ts +26 -0
  23. package/dist/library/common.js +208 -0
  24. package/dist/library/food.d.ts +9 -0
  25. package/dist/library/food.js +272 -0
  26. package/dist/library/fuel.d.ts +19 -0
  27. package/dist/library/fuel.js +290 -0
  28. package/dist/library/library.d.ts +45 -0
  29. package/dist/library/library.js +29 -0
  30. package/dist/library/metal.d.ts +6 -0
  31. package/dist/library/metal.js +181 -0
  32. package/dist/library/mineral.d.ts +4 -0
  33. package/dist/library/mineral.js +177 -0
  34. package/dist/library/organic.d.ts +12 -0
  35. package/dist/library/organic.js +489 -0
  36. package/dist/library/polymer.d.ts +4 -0
  37. package/dist/library/polymer.js +237 -0
  38. package/dist/parcel/conduction.d.ts +20 -0
  39. package/dist/parcel/conduction.js +160 -0
  40. package/dist/parcel/shells.d.ts +49 -0
  41. package/dist/parcel/shells.js +73 -0
  42. package/dist/parcel/store.d.ts +395 -0
  43. package/dist/parcel/store.js +1152 -0
  44. package/dist/parcel/tier.d.ts +48 -0
  45. package/dist/parcel/tier.js +51 -0
  46. package/dist/present/audio.d.ts +41 -0
  47. package/dist/present/audio.js +50 -0
  48. package/dist/present/blackbody.d.ts +55 -0
  49. package/dist/present/blackbody.js +112 -0
  50. package/dist/present/flame.d.ts +34 -0
  51. package/dist/present/flame.js +103 -0
  52. package/dist/present/index.d.ts +25 -0
  53. package/dist/present/index.js +22 -0
  54. package/dist/present/install.d.ts +87 -0
  55. package/dist/present/install.js +157 -0
  56. package/dist/present/smoke.d.ts +63 -0
  57. package/dist/present/smoke.js +85 -0
  58. package/dist/present/surface.d.ts +40 -0
  59. package/dist/present/surface.js +76 -0
  60. package/dist/reaction/localise.d.ts +16 -0
  61. package/dist/reaction/localise.js +95 -0
  62. package/dist/reaction/rates.d.ts +59 -0
  63. package/dist/reaction/rates.js +101 -0
  64. package/dist/reaction/reaction.d.ts +178 -0
  65. package/dist/reaction/reaction.js +104 -0
  66. package/dist/reaction/registry.d.ts +47 -0
  67. package/dist/reaction/registry.js +215 -0
  68. package/dist/reaction/solver.d.ts +51 -0
  69. package/dist/reaction/solver.js +277 -0
  70. package/dist/species/registry.d.ts +26 -0
  71. package/dist/species/registry.js +97 -0
  72. package/dist/species/species.d.ts +48 -0
  73. package/dist/species/species.js +20 -0
  74. package/dist/species/standard.d.ts +30 -0
  75. package/dist/species/standard.js +436 -0
  76. package/dist/species/thermal.d.ts +18 -0
  77. package/dist/species/thermal.js +72 -0
  78. package/dist/substance/boiling.d.ts +29 -0
  79. package/dist/substance/boiling.js +54 -0
  80. package/dist/substance/composition.d.ts +34 -0
  81. package/dist/substance/composition.js +53 -0
  82. package/dist/substance/registry.d.ts +86 -0
  83. package/dist/substance/registry.js +187 -0
  84. package/dist/substance/substance.d.ts +94 -0
  85. package/dist/substance/substance.js +48 -0
  86. package/dist/testing/drift.d.ts +15 -0
  87. package/dist/testing/drift.js +29 -0
  88. package/dist/transport/contacts.d.ts +22 -0
  89. package/dist/transport/contacts.js +50 -0
  90. package/dist/transport/radiation.d.ts +101 -0
  91. package/dist/transport/radiation.js +199 -0
  92. package/dist/transport/world.d.ts +92 -0
  93. package/dist/transport/world.js +381 -0
  94. package/dist/world/fingerprint.d.ts +31 -0
  95. package/dist/world/fingerprint.js +70 -0
  96. package/package.json +100 -0
  97. package/src/conservation.ts +44 -0
  98. package/src/element/elements.ts +80 -0
  99. package/src/element/matrix.ts +89 -0
  100. package/src/field/ambient.ts +111 -0
  101. package/src/field/atmosphere.ts +1159 -0
  102. package/src/ignition/criteria.ts +177 -0
  103. package/src/ignition/events.ts +100 -0
  104. package/src/index.ts +213 -0
  105. package/src/library/biological.ts +252 -0
  106. package/src/library/common.ts +224 -0
  107. package/src/library/food.ts +302 -0
  108. package/src/library/fuel.ts +299 -0
  109. package/src/library/library.ts +62 -0
  110. package/src/library/metal.ts +186 -0
  111. package/src/library/mineral.ts +194 -0
  112. package/src/library/organic.ts +545 -0
  113. package/src/library/polymer.ts +243 -0
  114. package/src/parcel/conduction.ts +188 -0
  115. package/src/parcel/shells.ts +100 -0
  116. package/src/parcel/store.ts +1270 -0
  117. package/src/parcel/tier.ts +60 -0
  118. package/src/present/audio.ts +54 -0
  119. package/src/present/blackbody.ts +118 -0
  120. package/src/present/flame.ts +111 -0
  121. package/src/present/index.ts +25 -0
  122. package/src/present/install.ts +209 -0
  123. package/src/present/smoke.ts +139 -0
  124. package/src/present/surface.ts +107 -0
  125. package/src/reaction/localise.ts +126 -0
  126. package/src/reaction/rates.ts +153 -0
  127. package/src/reaction/reaction.ts +235 -0
  128. package/src/reaction/registry.ts +257 -0
  129. package/src/reaction/solver.ts +326 -0
  130. package/src/species/registry.ts +117 -0
  131. package/src/species/species.ts +53 -0
  132. package/src/species/standard.ts +449 -0
  133. package/src/species/thermal.ts +74 -0
  134. package/src/substance/boiling.ts +64 -0
  135. package/src/substance/composition.ts +81 -0
  136. package/src/substance/registry.ts +223 -0
  137. package/src/substance/substance.ts +148 -0
  138. package/src/testing/drift.ts +28 -0
  139. package/src/transport/contacts.ts +56 -0
  140. package/src/transport/radiation.ts +238 -0
  141. package/src/transport/world.ts +437 -0
  142. package/src/world/fingerprint.ts +106 -0
@@ -0,0 +1,181 @@
1
+ /**
2
+ * `@driftengine/chemistry/library/metal` — five metals, and the one number that decides most of it.
3
+ *
4
+ * **It is the emissivity, not the conductivity.** Polished copper's is 0.05 against oak's 0.90, and
5
+ * a radiative term is linear in it, so eighteen times less of the same fire arrives at the same
6
+ * distance. That is why a metal poker's handle stays cool beside a fire that chars a wooden one, and
7
+ * it is one field.
8
+ *
9
+ * **Three published heats of combustion fall out and none is stored**: magnesium 24.7 MJ/kg,
10
+ * aluminium 31.0, iron 7.4. What the table holds is the formation enthalpy of each oxide.
11
+ */
12
+ import { KIND_CORROSION } from '../reaction/reaction.js';
13
+ import { SHAPE_CYLINDER, SHAPE_SLAB } from '../parcel/shells.js';
14
+ import { massFractions } from '../substance/composition.js';
15
+ import { COMMON_REACTIONS } from './common.js';
16
+ export const RUST_IRON = 'rust-iron';
17
+ export const OXIDISE_ALUMINIUM = 'oxidise-aluminium';
18
+ export const OXIDISE_COPPER = 'oxidise-copper';
19
+ export const BURN_MAGNESIUM = 'burn-magnesium';
20
+ const REACTIONS = [
21
+ ...COMMON_REACTIONS,
22
+ {
23
+ /*
24
+ * The slowest reaction in the model by orders of magnitude, back-derived from the measured
25
+ * atmospheric corrosion rate — roughly a percent of a kilogram bar in a year.
26
+ *
27
+ * **The humidity gate `§8.7` asks for is absent.** `ReactionGates` is temperature only, so
28
+ * nothing here reproduces the 60% relative humidity below which atmospheric rusting effectively
29
+ * stops, and a bar in a desert corrodes as fast as one in a bog. Fixing it means a gate on a
30
+ * species fraction, which is a change to `reaction/` rather than to this file.
31
+ */
32
+ id: RUST_IRON,
33
+ reactants: [
34
+ { species: 'Fe', moles: 4 },
35
+ { species: 'O2', moles: 3 },
36
+ ],
37
+ products: [{ species: 'Fe2O3', moles: 2 }],
38
+ kinetics: { type: 'arrhenius', A: 5.6e-4, activationEnergy: 35000 },
39
+ kind: KIND_CORROSION,
40
+ },
41
+ {
42
+ /*
43
+ * **Gated at the melting point, which is the honest proxy for passivation.** Aluminium releases
44
+ * 31 MJ/kg and does not burn, because its oxide is coherent and seals the surface — and the
45
+ * temperature at which that layer stops being coherent is the temperature at which the metal
46
+ * under it is no longer solid. `§8.7` wanted an oxide-thickness gate; this is a gate that gets
47
+ * the same two answers right, said out loud rather than left off.
48
+ */
49
+ id: OXIDISE_ALUMINIUM,
50
+ reactants: [
51
+ { species: 'Al', moles: 4 },
52
+ { species: 'O2', moles: 3 },
53
+ ],
54
+ products: [{ species: 'Al2O3', moles: 2 }],
55
+ kinetics: { type: 'arrhenius', A: 1e6, activationEnergy: 120000 },
56
+ kind: KIND_CORROSION,
57
+ gates: { minTemperature: 933.15, width: 10 },
58
+ },
59
+ {
60
+ /* Slower than iron and green rather than red, which is a `§17` decision and not one here. */
61
+ id: OXIDISE_COPPER,
62
+ reactants: [
63
+ { species: 'Cu', moles: 2 },
64
+ { species: 'O2', moles: 1 },
65
+ ],
66
+ products: [{ species: 'CuO', moles: 2 }],
67
+ kinetics: { type: 'arrhenius', A: 1e-4, activationEnergy: 45000 },
68
+ kind: KIND_CORROSION,
69
+ },
70
+ {
71
+ /*
72
+ * The one metal a fire can actually light. It ignites at 973 K, fifty kelvin above its own
73
+ * melting point and eight hundred below its boiling one — so it burns as a liquid, which is why
74
+ * a magnesium fire runs.
75
+ */
76
+ id: BURN_MAGNESIUM,
77
+ reactants: [
78
+ { species: 'Mg', moles: 2 },
79
+ { species: 'O2', moles: 1 },
80
+ ],
81
+ products: [{ species: 'MgO', moles: 2 }],
82
+ kinetics: { type: 'arrhenius', A: 1e8, activationEnergy: 100000 },
83
+ kind: KIND_CORROSION,
84
+ gates: { minTemperature: 973.15, width: 10 },
85
+ },
86
+ ];
87
+ export const METAL = {
88
+ id: 'metal',
89
+ species: [],
90
+ reactions: REACTIONS,
91
+ substances: (species) => [
92
+ {
93
+ id: 'iron',
94
+ composition: massFractions(species, { Fe: 1 }),
95
+ density: 7870,
96
+ conductivity: { k0: 80.4, k1: -0.03 },
97
+ shells: 3,
98
+ shape: SHAPE_CYLINDER,
99
+ /* Oxidised rather than polished, which is what iron actually is after a week outdoors. */
100
+ emissivity: 0.65,
101
+ reactions: [RUST_IRON],
102
+ appearance: {
103
+ albedo: [0.28, 0.22, 0.18],
104
+ charAlbedo: [0.28, 0.22, 0.18],
105
+ sootYield: 0,
106
+ },
107
+ },
108
+ {
109
+ /* A little carbon and a little silicon, which is what makes it steel and not iron. */
110
+ id: 'steel',
111
+ composition: massFractions(species, { Fe: 0.98, 'C(graphite)': 0.008, SiO2: 0.012 }),
112
+ density: 7850,
113
+ conductivity: { k0: 45, k1: -0.02 },
114
+ shells: 3,
115
+ shape: SHAPE_SLAB,
116
+ emissivity: 0.28,
117
+ reactions: [RUST_IRON],
118
+ appearance: {
119
+ albedo: [0.56, 0.57, 0.58],
120
+ charAlbedo: [0.56, 0.57, 0.58],
121
+ sootYield: 0,
122
+ },
123
+ },
124
+ {
125
+ id: 'aluminium',
126
+ composition: massFractions(species, { Al: 1 }),
127
+ density: 2700,
128
+ conductivity: { k0: 237, k1: -0.04 },
129
+ shells: 3,
130
+ shape: SHAPE_SLAB,
131
+ emissivity: 0.09,
132
+ reactions: [OXIDISE_ALUMINIUM],
133
+ appearance: {
134
+ albedo: [0.91, 0.92, 0.92],
135
+ charAlbedo: [0.91, 0.92, 0.92],
136
+ sootYield: 0,
137
+ },
138
+ },
139
+ {
140
+ id: 'copper',
141
+ composition: massFractions(species, { Cu: 1 }),
142
+ density: 8960,
143
+ conductivity: { k0: 401, k1: -0.07 },
144
+ shells: 3,
145
+ shape: SHAPE_CYLINDER,
146
+ emissivity: 0.05,
147
+ reactions: [OXIDISE_COPPER],
148
+ appearance: {
149
+ albedo: [0.95, 0.64, 0.54],
150
+ charAlbedo: [0.2, 0.34, 0.28],
151
+ sootYield: 0,
152
+ },
153
+ },
154
+ {
155
+ id: 'magnesium',
156
+ composition: massFractions(species, { Mg: 1 }),
157
+ density: 1740,
158
+ conductivity: { k0: 156, k1: -0.02 },
159
+ shells: 3,
160
+ shape: SHAPE_CYLINDER,
161
+ emissivity: 0.13,
162
+ reactions: [BURN_MAGNESIUM],
163
+ /*
164
+ * A metal that genuinely catches, and the two temperatures are far apart from everything else
165
+ * in the library. Its flame is also the one water makes worse, which falls out of the
166
+ * enthalpy: 24.7 MJ/kg is enough to take the oxygen back out of steam.
167
+ */
168
+ ignition: {
169
+ pilotedSurfaceK: 973,
170
+ autoSurfaceK: 1023,
171
+ criticalMassFlux: 0.02,
172
+ limitingOxygen: 0.05,
173
+ },
174
+ appearance: {
175
+ albedo: [0.78, 0.78, 0.76],
176
+ charAlbedo: [0.9, 0.9, 0.88],
177
+ sootYield: 0,
178
+ },
179
+ },
180
+ ],
181
+ };
@@ -0,0 +1,4 @@
1
+ import type { SubstanceLibrary } from './library.ts';
2
+ export declare const CALCINE_LIMESTONE = "calcine-limestone";
3
+ export declare const DEHYDRATE_GYPSUM = "dehydrate-gypsum";
4
+ export declare const MINERAL: SubstanceLibrary;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * `@driftengine/chemistry/library/mineral` — stone, board, sand and glass.
3
+ *
4
+ * **Two reactions, and both matter for the same reason: they are endothermic and they release gas.**
5
+ * Gypsum gives up two waters at 120 °C, which is why plasterboard is a fire barrier. Limestone gives
6
+ * up carbon dioxide at 825 °C, which is why stone spalls in a fire and why a concrete wall in a
7
+ * serious one loses its surface explosively.
8
+ *
9
+ * Both enthalpies are Hess's law over the standard table and neither is written down: +179.2 kJ/mol
10
+ * for calcination against a published +178.3, and +104.4 for gypsum against a published +104.
11
+ */
12
+ import { KIND_CALCINATION } from '../reaction/reaction.js';
13
+ import { SHAPE_SLAB } from '../parcel/shells.js';
14
+ import { massFractions } from '../substance/composition.js';
15
+ import { wetComposition } from '../substance/substance.js';
16
+ import { BOIL_WATER, COMMON_REACTIONS } from './common.js';
17
+ export const CALCINE_LIMESTONE = 'calcine-limestone';
18
+ export const DEHYDRATE_GYPSUM = 'dehydrate-gypsum';
19
+ const REACTIONS = [
20
+ ...COMMON_REACTIONS,
21
+ {
22
+ /* Onset near 825 °C at one atmosphere. Endothermic and gas-releasing, so a limestone block in a
23
+ fire is both a heat sink and, eventually, a thing that comes apart. */
24
+ id: CALCINE_LIMESTONE,
25
+ reactants: [{ species: 'CaCO3', moles: 1 }],
26
+ products: [
27
+ { species: 'CaO', moles: 1 },
28
+ { species: 'CO2', moles: 1 },
29
+ ],
30
+ kinetics: { type: 'arrhenius', A: 1e8, activationEnergy: 190000 },
31
+ kind: KIND_CALCINATION,
32
+ gates: { minTemperature: 1098.15, width: 20 },
33
+ },
34
+ {
35
+ /*
36
+ * **The same idea four hundred degrees lower, and it is what a fire-rated wall is.** A kilogram
37
+ * of board holds 607 kJ of latent heat in two waters of crystallisation, and it will not let the
38
+ * far side past the boiling point until every one of them has gone.
39
+ */
40
+ id: DEHYDRATE_GYPSUM,
41
+ reactants: [{ species: 'gypsum', moles: 1 }],
42
+ products: [
43
+ { species: 'anhydrite', moles: 1 },
44
+ { species: 'H2O(g)', moles: 2 },
45
+ ],
46
+ kinetics: { type: 'arrhenius', A: 1e6, activationEnergy: 80000 },
47
+ kind: KIND_CALCINATION,
48
+ gates: { minTemperature: 393.15, width: 20 },
49
+ },
50
+ ];
51
+ export const MINERAL = {
52
+ id: 'mineral',
53
+ species: [],
54
+ reactions: REACTIONS,
55
+ substances: (species) => [
56
+ {
57
+ id: 'limestone',
58
+ composition: massFractions(species, { CaCO3: 1 }),
59
+ density: 2700,
60
+ conductivity: { k0: 2.2, k1: -0.0005 },
61
+ shells: 4,
62
+ shape: SHAPE_SLAB,
63
+ emissivity: 0.93,
64
+ reactions: [CALCINE_LIMESTONE],
65
+ appearance: {
66
+ albedo: [0.68, 0.66, 0.6],
67
+ charAlbedo: [0.68, 0.66, 0.6],
68
+ sootYield: 0,
69
+ },
70
+ },
71
+ {
72
+ /* Light, because it is foamed, and thermally poor — which together with the dehydration is the
73
+ whole of its fire rating. */
74
+ id: 'gypsum-board',
75
+ composition: wetComposition(species, massFractions(species, {
76
+ gypsum: 0.95,
77
+ SiO2: 0.05,
78
+ }), 0.01),
79
+ density: 700,
80
+ conductivity: { k0: 0.25, k1: 0.0002 },
81
+ shells: 4,
82
+ shape: SHAPE_SLAB,
83
+ porosity: 0.3,
84
+ emissivity: 0.9,
85
+ reactions: [BOIL_WATER, DEHYDRATE_GYPSUM],
86
+ appearance: {
87
+ albedo: [0.82, 0.81, 0.78],
88
+ charAlbedo: [0.82, 0.81, 0.78],
89
+ sootYield: 0,
90
+ },
91
+ },
92
+ {
93
+ id: 'sand',
94
+ composition: massFractions(species, { SiO2: 1 }),
95
+ density: 1600,
96
+ conductivity: { k0: 0.3, k1: 0.0003 },
97
+ shells: 3,
98
+ shape: SHAPE_SLAB,
99
+ porosity: 0.4,
100
+ emissivity: 0.9,
101
+ /* No reactions, which is why throwing it on a fire works: it is a blanket and a heat sink. */
102
+ appearance: {
103
+ albedo: [0.6, 0.52, 0.36],
104
+ charAlbedo: [0.6, 0.52, 0.36],
105
+ sootYield: 0,
106
+ },
107
+ },
108
+ {
109
+ /* Fifteen percent water, and it is the water that makes wet clay near a fire crack. */
110
+ id: 'clay',
111
+ composition: wetComposition(species, massFractions(species, {
112
+ SiO2: 0.55,
113
+ Al2O3: 0.4,
114
+ Fe2O3: 0.05,
115
+ }), 0.15),
116
+ density: 1700,
117
+ conductivity: { k0: 1.0, k1: 0.0002 },
118
+ shells: 4,
119
+ shape: SHAPE_SLAB,
120
+ porosity: 0.25,
121
+ emissivity: 0.91,
122
+ reactions: [BOIL_WATER],
123
+ appearance: {
124
+ albedo: [0.48, 0.34, 0.24],
125
+ charAlbedo: [0.48, 0.34, 0.24],
126
+ sootYield: 0,
127
+ },
128
+ },
129
+ {
130
+ /*
131
+ * **Spalls for two reasons at once and gets both by being declared.** Free water flashing to
132
+ * steam inside a matrix that cannot vent it, and then the limestone in the aggregate calcining
133
+ * and releasing carbon dioxide in the same place.
134
+ */
135
+ id: 'concrete',
136
+ composition: wetComposition(species, massFractions(species, {
137
+ SiO2: 0.62,
138
+ CaCO3: 0.2,
139
+ Al2O3: 0.1,
140
+ CaO: 0.05,
141
+ Fe2O3: 0.03,
142
+ }), 0.04),
143
+ density: 2300,
144
+ conductivity: { k0: 1.7, k1: -0.0003 },
145
+ shells: 4,
146
+ shape: SHAPE_SLAB,
147
+ porosity: 0.12,
148
+ emissivity: 0.92,
149
+ reactions: [BOIL_WATER, CALCINE_LIMESTONE],
150
+ appearance: {
151
+ albedo: [0.52, 0.52, 0.5],
152
+ charAlbedo: [0.52, 0.52, 0.5],
153
+ sootYield: 0,
154
+ },
155
+ },
156
+ {
157
+ /*
158
+ * **Nothing at all, and that is the point of it.** Glass in a fire gets hot, conducts,
159
+ * radiates and eventually softens — and softening is mechanical, which `§26` refuses in
160
+ * writing because this package owns no solver. A chemistry invented so the entry would not
161
+ * look empty would be worse than the empty entry.
162
+ */
163
+ id: 'glass',
164
+ composition: massFractions(species, { SiO2: 0.8, CaO: 0.13, Al2O3: 0.07 }),
165
+ density: 2500,
166
+ conductivity: { k0: 1.0, k1: 0.0005 },
167
+ shells: 3,
168
+ shape: SHAPE_SLAB,
169
+ emissivity: 0.94,
170
+ appearance: {
171
+ albedo: [0.1, 0.12, 0.11],
172
+ charAlbedo: [0.1, 0.12, 0.11],
173
+ sootYield: 0,
174
+ },
175
+ },
176
+ ],
177
+ };
@@ -0,0 +1,12 @@
1
+ import type { SubstanceLibrary } from './library.ts';
2
+ export declare const BURN_TAR = "burn-tar";
3
+ export declare const SOOT_TAR = "soot-tar";
4
+ export declare const CONDENSE_TAR = "condense-tar";
5
+ export declare const EVAPORATE_TAR = "evaporate-tar";
6
+ /**
7
+ * The gas-phase steps a wood fire needs: the common five, plus the four this library invents.
8
+ *
9
+ * A consumer hands these to `AtmosphereField`, which runs them through the same solver a shell uses.
10
+ */
11
+ export declare const ORGANIC_GAS_REACTIONS: readonly string[];
12
+ export declare const ORGANIC: SubstanceLibrary;