aeolus1d 0.3.0rc1__tar.gz

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 (541) hide show
  1. aeolus1d-0.3.0rc1/.gitignore +127 -0
  2. aeolus1d-0.3.0rc1/AUTHORS.md +14 -0
  3. aeolus1d-0.3.0rc1/CHANGELOG.md +39 -0
  4. aeolus1d-0.3.0rc1/CITATION.cff +37 -0
  5. aeolus1d-0.3.0rc1/CODE_OF_CONDUCT.md +46 -0
  6. aeolus1d-0.3.0rc1/CONTRIBUTING.md +150 -0
  7. aeolus1d-0.3.0rc1/LICENSE +21 -0
  8. aeolus1d-0.3.0rc1/MAINTAINERS.md +21 -0
  9. aeolus1d-0.3.0rc1/PKG-INFO +659 -0
  10. aeolus1d-0.3.0rc1/README.md +593 -0
  11. aeolus1d-0.3.0rc1/SECURITY.md +108 -0
  12. aeolus1d-0.3.0rc1/SUPPORT.md +39 -0
  13. aeolus1d-0.3.0rc1/THIRD_PARTY_NOTICES.md +77 -0
  14. aeolus1d-0.3.0rc1/aeolus1d_gui/__init__.py +24 -0
  15. aeolus1d-0.3.0rc1/aeolus1d_gui/__main__.py +81 -0
  16. aeolus1d-0.3.0rc1/aeolus1d_gui/app.py +4037 -0
  17. aeolus1d-0.3.0rc1/aeolus1d_gui/controller/__init__.py +9 -0
  18. aeolus1d-0.3.0rc1/aeolus1d_gui/controller/mutations.py +185 -0
  19. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/__init__.py +6 -0
  20. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/canvas.py +2182 -0
  21. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/case_renderer.py +111 -0
  22. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/decorations.py +178 -0
  23. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/history.py +83 -0
  24. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/nodes.py +676 -0
  25. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/organize_layout.py +516 -0
  26. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/ports.py +53 -0
  27. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/rules.py +129 -0
  28. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/silhouettes.py +308 -0
  29. aeolus1d-0.3.0rc1/aeolus1d_gui/editor/visual_style.py +407 -0
  30. aeolus1d-0.3.0rc1/aeolus1d_gui/io/__init__.py +10 -0
  31. aeolus1d-0.3.0rc1/aeolus1d_gui/io/autosave.py +183 -0
  32. aeolus1d-0.3.0rc1/aeolus1d_gui/io/case_io.py +1528 -0
  33. aeolus1d-0.3.0rc1/aeolus1d_gui/io/layout_heuristic.py +287 -0
  34. aeolus1d-0.3.0rc1/aeolus1d_gui/io/layout_io.py +190 -0
  35. aeolus1d-0.3.0rc1/aeolus1d_gui/io/recent.py +69 -0
  36. aeolus1d-0.3.0rc1/aeolus1d_gui/model.py +807 -0
  37. aeolus1d-0.3.0rc1/aeolus1d_gui/post/__init__.py +5 -0
  38. aeolus1d-0.3.0rc1/aeolus1d_gui/post/cfl_dock.py +218 -0
  39. aeolus1d-0.3.0rc1/aeolus1d_gui/post/h5_reader.py +524 -0
  40. aeolus1d-0.3.0rc1/aeolus1d_gui/post/initial_conditions.py +216 -0
  41. aeolus1d-0.3.0rc1/aeolus1d_gui/post/live_plot_dock.py +192 -0
  42. aeolus1d-0.3.0rc1/aeolus1d_gui/post/modes_dock.py +336 -0
  43. aeolus1d-0.3.0rc1/aeolus1d_gui/post/network_view.py +1588 -0
  44. aeolus1d-0.3.0rc1/aeolus1d_gui/post/optimize_dock.py +737 -0
  45. aeolus1d-0.3.0rc1/aeolus1d_gui/post/plot_dock.py +1509 -0
  46. aeolus1d-0.3.0rc1/aeolus1d_gui/post/schematic_style.py +408 -0
  47. aeolus1d-0.3.0rc1/aeolus1d_gui/post/sensitivity_dock.py +280 -0
  48. aeolus1d-0.3.0rc1/aeolus1d_gui/post/solver_internals_dock.py +538 -0
  49. aeolus1d-0.3.0rc1/aeolus1d_gui/post/toml_view_dock.py +327 -0
  50. aeolus1d-0.3.0rc1/aeolus1d_gui/post/turbo_map_dock.py +262 -0
  51. aeolus1d-0.3.0rc1/aeolus1d_gui/runners/__init__.py +30 -0
  52. aeolus1d-0.3.0rc1/aeolus1d_gui/runners/qprocess_optimize_runner.py +230 -0
  53. aeolus1d-0.3.0rc1/aeolus1d_gui/runners/qprocess_runner.py +187 -0
  54. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/__init__.py +1 -0
  55. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/auci_compare_dialog.py +480 -0
  56. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/brinkmeier_rate_widget.py +211 -0
  57. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/case_settings_dock.py +132 -0
  58. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/component_list.py +375 -0
  59. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/doc_viewer.py +873 -0
  60. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/engine_param_wizard.py +240 -0
  61. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/form_factory.py +2315 -0
  62. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/inspector.py +198 -0
  63. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/named_rate_widget.py +169 -0
  64. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/onboarding.py +452 -0
  65. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/palette.py +177 -0
  66. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/pid_tuning_playground.py +269 -0
  67. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/play_controls.py +286 -0
  68. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/runner_dock.py +1273 -0
  69. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/schedule_widget.py +678 -0
  70. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/settings.py +540 -0
  71. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/theme.py +805 -0
  72. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/time_format.py +193 -0
  73. aeolus1d-0.3.0rc1/aeolus1d_gui/shell/validators.py +35 -0
  74. aeolus1d-0.3.0rc1/aeolus1d_gui/vehicle_panel.py +642 -0
  75. aeolus1d-0.3.0rc1/docs/adr/0001-operator-split-stiff-chemistry.md +61 -0
  76. aeolus1d-0.3.0rc1/docs/adr/0002-direct-block-thomas-over-jfnk.md +55 -0
  77. aeolus1d-0.3.0rc1/docs/adr/0003-canonical-extras-layout-invariant.md +63 -0
  78. aeolus1d-0.3.0rc1/docs/adr/0004-implicit-upwind-qs-species-transport.md +50 -0
  79. aeolus1d-0.3.0rc1/docs/adr/0005-semi-implicit-catalyst-energy-coupling.md +47 -0
  80. aeolus1d-0.3.0rc1/docs/adr/0006-hllc-core-microopt-rejected.md +49 -0
  81. aeolus1d-0.3.0rc1/docs/adr/0007-versioned-toml-case-format.md +94 -0
  82. aeolus1d-0.3.0rc1/docs/adr/0008-cylinder-orifice-valve-coupling.md +102 -0
  83. aeolus1d-0.3.0rc1/docs/adr/0009-inflow-ghost-species-conservation.md +82 -0
  84. aeolus1d-0.3.0rc1/docs/adr/0010-verification-and-validation-strategy.md +136 -0
  85. aeolus1d-0.3.0rc1/docs/adr/0011-non-positive-density-is-a-hard-error.md +131 -0
  86. aeolus1d-0.3.0rc1/docs/adr/0012-plenum-port-reservoir-coupling.md +167 -0
  87. aeolus1d-0.3.0rc1/docs/adr/0013-cross-component-boundaries-in-conserved-form.md +168 -0
  88. aeolus1d-0.3.0rc1/docs/adr/README.md +49 -0
  89. aeolus1d-0.3.0rc1/docs/aftertreatment-thermal-reference.md +100 -0
  90. aeolus1d-0.3.0rc1/docs/api/closures.md +61 -0
  91. aeolus1d-0.3.0rc1/docs/api/driving.md +54 -0
  92. aeolus1d-0.3.0rc1/docs/api/index.md +96 -0
  93. aeolus1d-0.3.0rc1/docs/api/runtime.md +80 -0
  94. aeolus1d-0.3.0rc1/docs/architecture-refactor-plan.md +497 -0
  95. aeolus1d-0.3.0rc1/docs/architecture.md +412 -0
  96. aeolus1d-0.3.0rc1/docs/benchmarks-baseline.md +128 -0
  97. aeolus1d-0.3.0rc1/docs/changelog.md +3062 -0
  98. aeolus1d-0.3.0rc1/docs/chemistry-file-formats.md +317 -0
  99. aeolus1d-0.3.0rc1/docs/ci-runner-runbook.md +247 -0
  100. aeolus1d-0.3.0rc1/docs/cli.md +515 -0
  101. aeolus1d-0.3.0rc1/docs/closures-reference.md +230 -0
  102. aeolus1d-0.3.0rc1/docs/closures.md +503 -0
  103. aeolus1d-0.3.0rc1/docs/component-index.md +215 -0
  104. aeolus1d-0.3.0rc1/docs/concepts.md +443 -0
  105. aeolus1d-0.3.0rc1/docs/cylinder-reference.md +359 -0
  106. aeolus1d-0.3.0rc1/docs/examples.md +178 -0
  107. aeolus1d-0.3.0rc1/docs/gui.md +400 -0
  108. aeolus1d-0.3.0rc1/docs/implicit-solver-plan.md +438 -0
  109. aeolus1d-0.3.0rc1/docs/implicit-solver-reference.md +230 -0
  110. aeolus1d-0.3.0rc1/docs/index.md +95 -0
  111. aeolus1d-0.3.0rc1/docs/installation.md +142 -0
  112. aeolus1d-0.3.0rc1/docs/interop.md +278 -0
  113. aeolus1d-0.3.0rc1/docs/low-mach-at-plan.md +183 -0
  114. aeolus1d-0.3.0rc1/docs/milestone-8-cruise-import-completeness.md +352 -0
  115. aeolus1d-0.3.0rc1/docs/milestone-9-gt-suite-import-completeness.md +340 -0
  116. aeolus1d-0.3.0rc1/docs/modes.md +327 -0
  117. aeolus1d-0.3.0rc1/docs/numerics.md +300 -0
  118. aeolus1d-0.3.0rc1/docs/perf-history.md +2299 -0
  119. aeolus1d-0.3.0rc1/docs/phase-iy-picard.md +427 -0
  120. aeolus1d-0.3.0rc1/docs/phase-log.md +4826 -0
  121. aeolus1d-0.3.0rc1/docs/post-processing.md +521 -0
  122. aeolus1d-0.3.0rc1/docs/pypi-registration.md +254 -0
  123. aeolus1d-0.3.0rc1/docs/quickstart.md +143 -0
  124. aeolus1d-0.3.0rc1/docs/release-readiness.md +240 -0
  125. aeolus1d-0.3.0rc1/docs/release.md +349 -0
  126. aeolus1d-0.3.0rc1/docs/roadmap.md +467 -0
  127. aeolus1d-0.3.0rc1/docs/run-settings.md +321 -0
  128. aeolus1d-0.3.0rc1/docs/schema-block-reference.md +280 -0
  129. aeolus1d-0.3.0rc1/docs/scope-and-limitations.md +413 -0
  130. aeolus1d-0.3.0rc1/docs/theory.md +1771 -0
  131. aeolus1d-0.3.0rc1/docs/troubleshooting.md +487 -0
  132. aeolus1d-0.3.0rc1/docs/turbo-map-format.md +258 -0
  133. aeolus1d-0.3.0rc1/docs/tutorials/aftertreatment-chain.md +282 -0
  134. aeolus1d-0.3.0rc1/docs/tutorials/chem-surrogate-training.md +237 -0
  135. aeolus1d-0.3.0rc1/docs/tutorials/egr-feedback.md +184 -0
  136. aeolus1d-0.3.0rc1/docs/tutorials/engine.md +404 -0
  137. aeolus1d-0.3.0rc1/docs/tutorials/index.md +116 -0
  138. aeolus1d-0.3.0rc1/docs/tutorials/networks.md +300 -0
  139. aeolus1d-0.3.0rc1/docs/tutorials/post-processing.md +507 -0
  140. aeolus1d-0.3.0rc1/docs/tutorials/sod.md +242 -0
  141. aeolus1d-0.3.0rc1/docs/tutorials/throttle-controller.md +139 -0
  142. aeolus1d-0.3.0rc1/docs/udf/friction.md +103 -0
  143. aeolus1d-0.3.0rc1/docs/udf/heat.md +45 -0
  144. aeolus1d-0.3.0rc1/docs/udf/index.md +133 -0
  145. aeolus1d-0.3.0rc1/docs/udf/junction-bc.md +50 -0
  146. aeolus1d-0.3.0rc1/docs/udf/porous.md +60 -0
  147. aeolus1d-0.3.0rc1/docs/udf/reactions.md +36 -0
  148. aeolus1d-0.3.0rc1/docs/validation-dossier.md +433 -0
  149. aeolus1d-0.3.0rc1/docs/validation-report-v0.3.0.md +193 -0
  150. aeolus1d-0.3.0rc1/docs/vehicle-system.md +189 -0
  151. aeolus1d-0.3.0rc1/examples/01_single_pipe_sod.toml +41 -0
  152. aeolus1d-0.3.0rc1/examples/02_cd_nozzle.toml +43 -0
  153. aeolus1d-0.3.0rc1/examples/03_two_pipes_junction.toml +67 -0
  154. aeolus1d-0.3.0rc1/examples/04_pulsed_intake.toml +41 -0
  155. aeolus1d-0.3.0rc1/examples/05_catalyst_plug.toml +50 -0
  156. aeolus1d-0.3.0rc1/examples/06_helmholtz_quasi2d.toml +57 -0
  157. aeolus1d-0.3.0rc1/examples/07_catalyst_thermal_front.toml +58 -0
  158. aeolus1d-0.3.0rc1/examples/08_reactive_pipe.toml +49 -0
  159. aeolus1d-0.3.0rc1/examples/09_real_gas_shock_tube.toml +58 -0
  160. aeolus1d-0.3.0rc1/examples/10_cp_junction_kloss.toml +82 -0
  161. aeolus1d-0.3.0rc1/examples/11_neck_pipe_junction.toml +87 -0
  162. aeolus1d-0.3.0rc1/examples/12_cp_junction.toml +81 -0
  163. aeolus1d-0.3.0rc1/examples/13_ehr_helmholtz.toml +45 -0
  164. aeolus1d-0.3.0rc1/examples/14_py_junction_bc.toml +48 -0
  165. aeolus1d-0.3.0rc1/examples/15_strang_chemistry.toml +55 -0
  166. aeolus1d-0.3.0rc1/examples/16_bs_chemistry.toml +56 -0
  167. aeolus1d-0.3.0rc1/examples/17_real_gas_nozzle.toml +60 -0
  168. aeolus1d-0.3.0rc1/examples/18_real_gas_catalyst.toml +65 -0
  169. aeolus1d-0.3.0rc1/examples/19_real_gas_plenum.toml +80 -0
  170. aeolus1d-0.3.0rc1/examples/20_multi_species.toml +53 -0
  171. aeolus1d-0.3.0rc1/examples/21_multi_species_kinetics.toml +56 -0
  172. aeolus1d-0.3.0rc1/examples/22_lodi_port.toml +55 -0
  173. aeolus1d-0.3.0rc1/examples/23_mp5_sod.toml +69 -0
  174. aeolus1d-0.3.0rc1/examples/24_hllc_lm_pulse.toml +61 -0
  175. aeolus1d-0.3.0rc1/examples/25_valve_inlet.toml +55 -0
  176. aeolus1d-0.3.0rc1/examples/26_valve_orifice.toml +54 -0
  177. aeolus1d-0.3.0rc1/examples/27_compressor.toml +71 -0
  178. aeolus1d-0.3.0rc1/examples/28_turbo_shaft.toml +126 -0
  179. aeolus1d-0.3.0rc1/examples/29_learned_junction_bc.toml +83 -0
  180. aeolus1d-0.3.0rc1/examples/30_learned_turbo_map.toml +74 -0
  181. aeolus1d-0.3.0rc1/examples/31_cylinder.toml +104 -0
  182. aeolus1d-0.3.0rc1/examples/35_mechanism_pipe.toml +56 -0
  183. aeolus1d-0.3.0rc1/examples/38_engine_turbo_scr.toml +238 -0
  184. aeolus1d-0.3.0rc1/examples/39_4cyl_engine_turbo_scr.toml +669 -0
  185. aeolus1d-0.3.0rc1/examples/40_implicit_adaptive_pipe.toml +64 -0
  186. aeolus1d-0.3.0rc1/examples/41_dpf_regen.toml +111 -0
  187. aeolus1d-0.3.0rc1/examples/42_scr_urea_injector.toml +172 -0
  188. aeolus1d-0.3.0rc1/examples/43_scrf.toml +217 -0
  189. aeolus1d-0.3.0rc1/examples/44_egr_cooler.toml +56 -0
  190. aeolus1d-0.3.0rc1/examples/45_two_stage_scr.toml +212 -0
  191. aeolus1d-0.3.0rc1/examples/46_doc.toml +124 -0
  192. aeolus1d-0.3.0rc1/examples/48_hnco_hydrolysis.toml +124 -0
  193. aeolus1d-0.3.0rc1/examples/49_dpf_no_inhibition.toml +101 -0
  194. aeolus1d-0.3.0rc1/examples/50_dpf_active_regen.toml +107 -0
  195. aeolus1d-0.3.0rc1/examples/50_two_cyl_engine.toml +279 -0
  196. aeolus1d-0.3.0rc1/examples/51_vgt_boost_ctrl.toml +135 -0
  197. aeolus1d-0.3.0rc1/examples/52_knock_event.toml +127 -0
  198. aeolus1d-0.3.0rc1/examples/53_dpf_heater_ctrl.toml +117 -0
  199. aeolus1d-0.3.0rc1/examples/54_adaptive_picard_turbo.toml +159 -0
  200. aeolus1d-0.3.0rc1/examples/55_dpf_regen_hrr.toml +100 -0
  201. aeolus1d-0.3.0rc1/examples/55_vgt_3d_turbo.toml +154 -0
  202. aeolus1d-0.3.0rc1/examples/56_dpf_regen_lowmach.toml +104 -0
  203. aeolus1d-0.3.0rc1/examples/57_picard_stiffness_step.toml +189 -0
  204. aeolus1d-0.3.0rc1/examples/58_tabulated_eos_implicit.toml +73 -0
  205. aeolus1d-0.3.0rc1/examples/59_wastegate_boost_ctrl.toml +148 -0
  206. aeolus1d-0.3.0rc1/examples/60_twin_sequential_turbo.toml +235 -0
  207. aeolus1d-0.3.0rc1/examples/61_doc_sulfur_poisoning.toml +167 -0
  208. aeolus1d-0.3.0rc1/examples/62_egr_valve_ctrl.toml +98 -0
  209. aeolus1d-0.3.0rc1/examples/63_spark_timing_ctrl.toml +139 -0
  210. aeolus1d-0.3.0rc1/examples/71_ktm_510_si.toml +256 -0
  211. aeolus1d-0.3.0rc1/examples/72_throttle_demo.toml +76 -0
  212. aeolus1d-0.3.0rc1/examples/74_twc.toml +226 -0
  213. aeolus1d-0.3.0rc1/examples/75_coolant_pipe.toml +67 -0
  214. aeolus1d-0.3.0rc1/examples/76_wltp_lite_dpf.toml +194 -0
  215. aeolus1d-0.3.0rc1/examples/77_pipe_flow_heat.toml +57 -0
  216. aeolus1d-0.3.0rc1/examples/78_pipe_bend_loss.toml +53 -0
  217. aeolus1d-0.3.0rc1/examples/79_orifice_plate.toml +57 -0
  218. aeolus1d-0.3.0rc1/examples/80_pipe_wall_warmup.toml +60 -0
  219. aeolus1d-0.3.0rc1/examples/81_bend_geometric.toml +50 -0
  220. aeolus1d-0.3.0rc1/examples/82_multilayer_wall.toml +72 -0
  221. aeolus1d-0.3.0rc1/examples/83_turbo_robustness.toml +145 -0
  222. aeolus1d-0.3.0rc1/examples/84_dpf_substrate_inertia.toml +80 -0
  223. aeolus1d-0.3.0rc1/examples/85_vehicle_drive_cycle.toml +65 -0
  224. aeolus1d-0.3.0rc1/examples/86_electrified_drive_cycle.toml +56 -0
  225. aeolus1d-0.3.0rc1/examples/87_multicomponent_variable_gamma_shock_tube.toml +69 -0
  226. aeolus1d-0.3.0rc1/examples/88_dd13_diesel.toml +115 -0
  227. aeolus1d-0.3.0rc1/examples/89_epw_diesel.toml +1025 -0
  228. aeolus1d-0.3.0rc1/examples/90_variable_cv_real_gas.toml +72 -0
  229. aeolus1d-0.3.0rc1/examples/91_cylinder_species_transport.toml +221 -0
  230. aeolus1d-0.3.0rc1/hatch_build.py +49 -0
  231. aeolus1d-0.3.0rc1/mkdocs.yml +165 -0
  232. aeolus1d-0.3.0rc1/pyproject.toml +343 -0
  233. aeolus1d-0.3.0rc1/requirements-gui.lock +1012 -0
  234. aeolus1d-0.3.0rc1/requirements.lock +260 -0
  235. aeolus1d-0.3.0rc1/requirements.txt +50 -0
  236. aeolus1d-0.3.0rc1/src/aeolus1d/__init__.py +43 -0
  237. aeolus1d-0.3.0rc1/src/aeolus1d/_compat.py +94 -0
  238. aeolus1d-0.3.0rc1/src/aeolus1d/_numba_flags.py +189 -0
  239. aeolus1d-0.3.0rc1/src/aeolus1d/_resources.py +57 -0
  240. aeolus1d-0.3.0rc1/src/aeolus1d/_tables.py +109 -0
  241. aeolus1d-0.3.0rc1/src/aeolus1d/_types.py +103 -0
  242. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/__init__.py +61 -0
  243. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/acoustics.py +879 -0
  244. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/acoustics_tm.py +172 -0
  245. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/cfl_inspector.py +406 -0
  246. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/core_zone_probe.py +536 -0
  247. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/energy_audit.py +1123 -0
  248. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/engine_metrics.py +616 -0
  249. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/linearize.py +1364 -0
  250. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/nox_post.py +457 -0
  251. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/random_cycle.py +189 -0
  252. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/sensitivities.py +199 -0
  253. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/system_reports.py +433 -0
  254. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/turbo_map_viz.py +367 -0
  255. aeolus1d-0.3.0rc1/src/aeolus1d/analysis/vehicle_tasks.py +200 -0
  256. aeolus1d-0.3.0rc1/src/aeolus1d/audio.py +286 -0
  257. aeolus1d-0.3.0rc1/src/aeolus1d/battery_ecm.py +164 -0
  258. aeolus1d-0.3.0rc1/src/aeolus1d/bc/__init__.py +103 -0
  259. aeolus1d-0.3.0rc1/src/aeolus1d/bc/base.py +197 -0
  260. aeolus1d-0.3.0rc1/src/aeolus1d/bc/egr_valve.py +211 -0
  261. aeolus1d-0.3.0rc1/src/aeolus1d/bc/mass_flow_inlet.py +134 -0
  262. aeolus1d-0.3.0rc1/src/aeolus1d/bc/nonreflecting.py +96 -0
  263. aeolus1d-0.3.0rc1/src/aeolus1d/bc/orifice_flow.py +209 -0
  264. aeolus1d-0.3.0rc1/src/aeolus1d/bc/pressure_outlet.py +103 -0
  265. aeolus1d-0.3.0rc1/src/aeolus1d/bc/stagnation_inlet.py +145 -0
  266. aeolus1d-0.3.0rc1/src/aeolus1d/bc/throttle.py +171 -0
  267. aeolus1d-0.3.0rc1/src/aeolus1d/bc/transient.py +272 -0
  268. aeolus1d-0.3.0rc1/src/aeolus1d/bc/valve.py +151 -0
  269. aeolus1d-0.3.0rc1/src/aeolus1d/bc/valve_orifice.py +230 -0
  270. aeolus1d-0.3.0rc1/src/aeolus1d/bc/velocity_inlet.py +96 -0
  271. aeolus1d-0.3.0rc1/src/aeolus1d/bench/__init__.py +1 -0
  272. aeolus1d-0.3.0rc1/src/aeolus1d/bench/abgrall_interface.py +156 -0
  273. aeolus1d-0.3.0rc1/src/aeolus1d/bench/colebrook.py +89 -0
  274. aeolus1d-0.3.0rc1/src/aeolus1d/bench/helmholtz.py +148 -0
  275. aeolus1d-0.3.0rc1/src/aeolus1d/bench/helmholtz_quasi2d.py +161 -0
  276. aeolus1d-0.3.0rc1/src/aeolus1d/bench/helmholtz_resonator.py +108 -0
  277. aeolus1d-0.3.0rc1/src/aeolus1d/bench/lax.py +72 -0
  278. aeolus1d-0.3.0rc1/src/aeolus1d/bench/moody.py +94 -0
  279. aeolus1d-0.3.0rc1/src/aeolus1d/bench/nozzle.py +154 -0
  280. aeolus1d-0.3.0rc1/src/aeolus1d/bench/porous_plug.py +106 -0
  281. aeolus1d-0.3.0rc1/src/aeolus1d/bench/riemann_suite.py +255 -0
  282. aeolus1d-0.3.0rc1/src/aeolus1d/bench/shock_reflection.py +115 -0
  283. aeolus1d-0.3.0rc1/src/aeolus1d/bench/shu_osher.py +123 -0
  284. aeolus1d-0.3.0rc1/src/aeolus1d/bench/smooth_advection.py +257 -0
  285. aeolus1d-0.3.0rc1/src/aeolus1d/bench/sod.py +185 -0
  286. aeolus1d-0.3.0rc1/src/aeolus1d/bench/tjunction.py +111 -0
  287. aeolus1d-0.3.0rc1/src/aeolus1d/bench/tjunction_cp.py +89 -0
  288. aeolus1d-0.3.0rc1/src/aeolus1d/bench/woodward_colella.py +98 -0
  289. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/__init__.py +19 -0
  290. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/burcat_db.py +214 -0
  291. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db.py +309 -0
  292. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/CH4.npz +0 -0
  293. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/CO.npz +0 -0
  294. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/CO2.npz +0 -0
  295. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/H.npz +0 -0
  296. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/H2.npz +0 -0
  297. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/H2O.npz +0 -0
  298. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/H2O2.npz +0 -0
  299. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/HO2.npz +0 -0
  300. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/N2.npz +0 -0
  301. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/N2_janaf_sample.dat +21 -0
  302. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/NH3.npz +0 -0
  303. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/NO.npz +0 -0
  304. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/O.npz +0 -0
  305. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/O2.npz +0 -0
  306. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/db_data/OH.npz +0 -0
  307. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/equilibrium.py +211 -0
  308. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/fuel_stoichiometry.py +157 -0
  309. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/importers/__init__.py +15 -0
  310. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/importers/burcat.py +230 -0
  311. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/importers/cantera_yaml.py +943 -0
  312. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/importers/chemkin_mech.py +828 -0
  313. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/importers/janaf.py +229 -0
  314. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/importers/nasa7.py +317 -0
  315. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/kinetics.py +1049 -0
  316. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/kinetics_njit.py +615 -0
  317. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/mech_db/ammonia_scr_demo.json +71 -0
  318. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/mech_db/h2_oxidation_demo.json +168 -0
  319. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/mech_db.py +221 -0
  320. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/mixture.py +640 -0
  321. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/reaction.py +276 -0
  322. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/species.py +180 -0
  323. aeolus1d-0.3.0rc1/src/aeolus1d/chemistry/surface_kinetics.py +252 -0
  324. aeolus1d-0.3.0rc1/src/aeolus1d/cli/__init__.py +1 -0
  325. aeolus1d-0.3.0rc1/src/aeolus1d/cli/_shared.py +29 -0
  326. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/__init__.py +61 -0
  327. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/acoustics.py +137 -0
  328. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/analyze_cfl.py +44 -0
  329. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/auci_compare.py +54 -0
  330. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/audio.py +83 -0
  331. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/bench.py +59 -0
  332. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/cycle_settle.py +215 -0
  333. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/drive_cycle.py +130 -0
  334. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/examples.py +75 -0
  335. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/expand.py +74 -0
  336. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/export.py +36 -0
  337. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/export_fmu.py +31 -0
  338. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/extract.py +50 -0
  339. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/gui.py +66 -0
  340. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/import_.py +47 -0
  341. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/inspect_gtm.py +35 -0
  342. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/modes.py +174 -0
  343. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/optimize.py +88 -0
  344. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/parallel.py +63 -0
  345. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/run.py +967 -0
  346. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/sensitivity.py +116 -0
  347. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/thermo_db.py +76 -0
  348. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/turbo_map.py +99 -0
  349. aeolus1d-0.3.0rc1/src/aeolus1d/cli/commands/warmup.py +154 -0
  350. aeolus1d-0.3.0rc1/src/aeolus1d/cli/doctor.py +242 -0
  351. aeolus1d-0.3.0rc1/src/aeolus1d/cli/main.py +127 -0
  352. aeolus1d-0.3.0rc1/src/aeolus1d/cli/registry.py +102 -0
  353. aeolus1d-0.3.0rc1/src/aeolus1d/closures/__init__.py +5 -0
  354. aeolus1d-0.3.0rc1/src/aeolus1d/closures/_extras_layout.py +81 -0
  355. aeolus1d-0.3.0rc1/src/aeolus1d/closures/bend_loss.py +86 -0
  356. aeolus1d-0.3.0rc1/src/aeolus1d/closures/catalyst.py +705 -0
  357. aeolus1d-0.3.0rc1/src/aeolus1d/closures/catalyst_eos.py +212 -0
  358. aeolus1d-0.3.0rc1/src/aeolus1d/closures/chem_linop.py +111 -0
  359. aeolus1d-0.3.0rc1/src/aeolus1d/closures/chem_surrogate.py +97 -0
  360. aeolus1d-0.3.0rc1/src/aeolus1d/closures/diesel_predictive_combustion.py +214 -0
  361. aeolus1d-0.3.0rc1/src/aeolus1d/closures/doc_sulfur.py +246 -0
  362. aeolus1d-0.3.0rc1/src/aeolus1d/closures/eos.py +529 -0
  363. aeolus1d-0.3.0rc1/src/aeolus1d/closures/eos_njit.py +791 -0
  364. aeolus1d-0.3.0rc1/src/aeolus1d/closures/eos_tabulated.py +275 -0
  365. aeolus1d-0.3.0rc1/src/aeolus1d/closures/eos_tabulated_njit.py +636 -0
  366. aeolus1d-0.3.0rc1/src/aeolus1d/closures/film_transfer.py +106 -0
  367. aeolus1d-0.3.0rc1/src/aeolus1d/closures/filter.py +1357 -0
  368. aeolus1d-0.3.0rc1/src/aeolus1d/closures/flame_geometry.py +92 -0
  369. aeolus1d-0.3.0rc1/src/aeolus1d/closures/friction.py +360 -0
  370. aeolus1d-0.3.0rc1/src/aeolus1d/closures/gas.py +63 -0
  371. aeolus1d-0.3.0rc1/src/aeolus1d/closures/hc_oxidation.py +300 -0
  372. aeolus1d-0.3.0rc1/src/aeolus1d/closures/heat.py +370 -0
  373. aeolus1d-0.3.0rc1/src/aeolus1d/closures/hnco_hydrolysis.py +136 -0
  374. aeolus1d-0.3.0rc1/src/aeolus1d/closures/incylinder_turbulence.py +65 -0
  375. aeolus1d-0.3.0rc1/src/aeolus1d/closures/isat_chem.py +141 -0
  376. aeolus1d-0.3.0rc1/src/aeolus1d/closures/laminar_flame_speed.py +101 -0
  377. aeolus1d-0.3.0rc1/src/aeolus1d/closures/learned_junction_bc.py +292 -0
  378. aeolus1d-0.3.0rc1/src/aeolus1d/closures/learned_models/junction_bc_resistive.npz +0 -0
  379. aeolus1d-0.3.0rc1/src/aeolus1d/closures/learned_models/turbo_map_centrifugal.npz +0 -0
  380. aeolus1d-0.3.0rc1/src/aeolus1d/closures/learned_turbo_map.py +378 -0
  381. aeolus1d-0.3.0rc1/src/aeolus1d/closures/mechanism.py +524 -0
  382. aeolus1d-0.3.0rc1/src/aeolus1d/closures/monolith.py +173 -0
  383. aeolus1d-0.3.0rc1/src/aeolus1d/closures/multi_stage_wiebe.py +404 -0
  384. aeolus1d-0.3.0rc1/src/aeolus1d/closures/pinn.py +211 -0
  385. aeolus1d-0.3.0rc1/src/aeolus1d/closures/pollutants.py +549 -0
  386. aeolus1d-0.3.0rc1/src/aeolus1d/closures/porous.py +509 -0
  387. aeolus1d-0.3.0rc1/src/aeolus1d/closures/reaction_demo.py +232 -0
  388. aeolus1d-0.3.0rc1/src/aeolus1d/closures/reaction_demo_njit.py +35 -0
  389. aeolus1d-0.3.0rc1/src/aeolus1d/closures/registry.py +198 -0
  390. aeolus1d-0.3.0rc1/src/aeolus1d/closures/scr_kinetics.py +449 -0
  391. aeolus1d-0.3.0rc1/src/aeolus1d/closures/scr_storage.py +388 -0
  392. aeolus1d-0.3.0rc1/src/aeolus1d/closures/si_turbulent_combustion.py +161 -0
  393. aeolus1d-0.3.0rc1/src/aeolus1d/closures/species_contract.py +186 -0
  394. aeolus1d-0.3.0rc1/src/aeolus1d/closures/thiele.py +225 -0
  395. aeolus1d-0.3.0rc1/src/aeolus1d/closures/transport.py +136 -0
  396. aeolus1d-0.3.0rc1/src/aeolus1d/closures/twc.py +433 -0
  397. aeolus1d-0.3.0rc1/src/aeolus1d/closures/twc_brinkmeier.py +1237 -0
  398. aeolus1d-0.3.0rc1/src/aeolus1d/closures/urea_decomposition.py +177 -0
  399. aeolus1d-0.3.0rc1/src/aeolus1d/closures/user_code.py +359 -0
  400. aeolus1d-0.3.0rc1/src/aeolus1d/closures/wall_coolant.py +165 -0
  401. aeolus1d-0.3.0rc1/src/aeolus1d/closures/wall_thermal.py +411 -0
  402. aeolus1d-0.3.0rc1/src/aeolus1d/components/__init__.py +90 -0
  403. aeolus1d-0.3.0rc1/src/aeolus1d/components/coolant_pipe.py +207 -0
  404. aeolus1d-0.3.0rc1/src/aeolus1d/components/cylinder.py +3141 -0
  405. aeolus1d-0.3.0rc1/src/aeolus1d/components/helmholtz_resonator.py +231 -0
  406. aeolus1d-0.3.0rc1/src/aeolus1d/components/junction.py +1112 -0
  407. aeolus1d-0.3.0rc1/src/aeolus1d/components/junction_cp.py +519 -0
  408. aeolus1d-0.3.0rc1/src/aeolus1d/components/junction_ehr.py +308 -0
  409. aeolus1d-0.3.0rc1/src/aeolus1d/components/junction_passthrough.py +276 -0
  410. aeolus1d-0.3.0rc1/src/aeolus1d/components/pipe.py +1024 -0
  411. aeolus1d-0.3.0rc1/src/aeolus1d/components/protocols.py +124 -0
  412. aeolus1d-0.3.0rc1/src/aeolus1d/components/species_coupling.py +333 -0
  413. aeolus1d-0.3.0rc1/src/aeolus1d/components/turbo.py +1324 -0
  414. aeolus1d-0.3.0rc1/src/aeolus1d/components/turbo_csv.py +185 -0
  415. aeolus1d-0.3.0rc1/src/aeolus1d/components/turbo_data/example_centrifugal.csv +37 -0
  416. aeolus1d-0.3.0rc1/src/aeolus1d/components/turbo_data/example_centrifugal.npz +0 -0
  417. aeolus1d-0.3.0rc1/src/aeolus1d/components/valve_flow.py +187 -0
  418. aeolus1d-0.3.0rc1/src/aeolus1d/components/volume.py +415 -0
  419. aeolus1d-0.3.0rc1/src/aeolus1d/constants.py +9 -0
  420. aeolus1d-0.3.0rc1/src/aeolus1d/control/__init__.py +79 -0
  421. aeolus1d-0.3.0rc1/src/aeolus1d/control/boost_controller.py +89 -0
  422. aeolus1d-0.3.0rc1/src/aeolus1d/control/dpf_heater_controller.py +100 -0
  423. aeolus1d-0.3.0rc1/src/aeolus1d/control/egr_valve_controller.py +138 -0
  424. aeolus1d-0.3.0rc1/src/aeolus1d/control/epw_closed_loop.py +282 -0
  425. aeolus1d-0.3.0rc1/src/aeolus1d/control/fuel_injector_controller.py +176 -0
  426. aeolus1d-0.3.0rc1/src/aeolus1d/control/pid_tune.py +228 -0
  427. aeolus1d-0.3.0rc1/src/aeolus1d/control/signal_toolbox.py +327 -0
  428. aeolus1d-0.3.0rc1/src/aeolus1d/control/spark_timing_controller.py +159 -0
  429. aeolus1d-0.3.0rc1/src/aeolus1d/control/step_response.py +181 -0
  430. aeolus1d-0.3.0rc1/src/aeolus1d/control/wastegate_controller.py +127 -0
  431. aeolus1d-0.3.0rc1/src/aeolus1d/coolant.py +147 -0
  432. aeolus1d-0.3.0rc1/src/aeolus1d/doe.py +223 -0
  433. aeolus1d-0.3.0rc1/src/aeolus1d/drive_cycles.py +208 -0
  434. aeolus1d-0.3.0rc1/src/aeolus1d/driveline.py +360 -0
  435. aeolus1d-0.3.0rc1/src/aeolus1d/driver.py +200 -0
  436. aeolus1d-0.3.0rc1/src/aeolus1d/emotor.py +179 -0
  437. aeolus1d-0.3.0rc1/src/aeolus1d/energy_management.py +158 -0
  438. aeolus1d-0.3.0rc1/src/aeolus1d/engine_oil.py +147 -0
  439. aeolus1d-0.3.0rc1/src/aeolus1d/engine_post.py +492 -0
  440. aeolus1d-0.3.0rc1/src/aeolus1d/fmi.py +325 -0
  441. aeolus1d-0.3.0rc1/src/aeolus1d/fuel_map.py +80 -0
  442. aeolus1d-0.3.0rc1/src/aeolus1d/fuels.py +107 -0
  443. aeolus1d-0.3.0rc1/src/aeolus1d/homotopy.py +216 -0
  444. aeolus1d-0.3.0rc1/src/aeolus1d/hybrid.py +313 -0
  445. aeolus1d-0.3.0rc1/src/aeolus1d/io/__init__.py +47 -0
  446. aeolus1d-0.3.0rc1/src/aeolus1d/io/_kind_codec.py +286 -0
  447. aeolus1d-0.3.0rc1/src/aeolus1d/io/build.py +3373 -0
  448. aeolus1d-0.3.0rc1/src/aeolus1d/io/case.py +939 -0
  449. aeolus1d-0.3.0rc1/src/aeolus1d/io/case_upgrades.py +227 -0
  450. aeolus1d-0.3.0rc1/src/aeolus1d/io/cgns_writer.py +296 -0
  451. aeolus1d-0.3.0rc1/src/aeolus1d/io/expand_case.py +302 -0
  452. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/__init__.py +197 -0
  453. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/_xml_common.py +151 -0
  454. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_boost.py +140 -0
  455. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/__init__.py +107 -0
  456. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/_calibration.py +1405 -0
  457. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/_core.py +3937 -0
  458. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/_geometry.py +683 -0
  459. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/_porous.py +601 -0
  460. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/_urea.py +467 -0
  461. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/types.py +140 -0
  462. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m/units.py +212 -0
  463. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/avl_cruise_m_tune.py +1004 -0
  464. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/btc_turbo_map.py +767 -0
  465. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/extract.py +247 -0
  466. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/fmu.py +440 -0
  467. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/gt_maps.py +393 -0
  468. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/gt_params.py +207 -0
  469. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/gt_power.py +171 -0
  470. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/gt_suite_native.py +2319 -0
  471. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/schematic.py +795 -0
  472. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/species_db.py +237 -0
  473. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/ucp.py +434 -0
  474. aeolus1d-0.3.0rc1/src/aeolus1d/io/interop/wave.py +145 -0
  475. aeolus1d-0.3.0rc1/src/aeolus1d/io/manifest.py +152 -0
  476. aeolus1d-0.3.0rc1/src/aeolus1d/io/parsers.py +1665 -0
  477. aeolus1d-0.3.0rc1/src/aeolus1d/io/resume.py +749 -0
  478. aeolus1d-0.3.0rc1/src/aeolus1d/io/schema.py +3367 -0
  479. aeolus1d-0.3.0rc1/src/aeolus1d/io/schema_help.py +2615 -0
  480. aeolus1d-0.3.0rc1/src/aeolus1d/io/schema_upgrades.py +166 -0
  481. aeolus1d-0.3.0rc1/src/aeolus1d/io/snapshot.py +399 -0
  482. aeolus1d-0.3.0rc1/src/aeolus1d/io/source_pos.py +202 -0
  483. aeolus1d-0.3.0rc1/src/aeolus1d/io/tracer.py +509 -0
  484. aeolus1d-0.3.0rc1/src/aeolus1d/io/validate.py +2384 -0
  485. aeolus1d-0.3.0rc1/src/aeolus1d/io/vehicle_case.py +566 -0
  486. aeolus1d-0.3.0rc1/src/aeolus1d/io/writer.py +552 -0
  487. aeolus1d-0.3.0rc1/src/aeolus1d/io/xdmf.py +309 -0
  488. aeolus1d-0.3.0rc1/src/aeolus1d/logging.py +193 -0
  489. aeolus1d-0.3.0rc1/src/aeolus1d/modes/__init__.py +65 -0
  490. aeolus1d-0.3.0rc1/src/aeolus1d/modes/assemble.py +130 -0
  491. aeolus1d-0.3.0rc1/src/aeolus1d/modes/elements.py +168 -0
  492. aeolus1d-0.3.0rc1/src/aeolus1d/modes/network.py +371 -0
  493. aeolus1d-0.3.0rc1/src/aeolus1d/modes/solve.py +125 -0
  494. aeolus1d-0.3.0rc1/src/aeolus1d/notebook.py +169 -0
  495. aeolus1d-0.3.0rc1/src/aeolus1d/optimize.py +811 -0
  496. aeolus1d-0.3.0rc1/src/aeolus1d/parallel.py +139 -0
  497. aeolus1d-0.3.0rc1/src/aeolus1d/planetary.py +71 -0
  498. aeolus1d-0.3.0rc1/src/aeolus1d/py.typed +0 -0
  499. aeolus1d-0.3.0rc1/src/aeolus1d/regen.py +58 -0
  500. aeolus1d-0.3.0rc1/src/aeolus1d/runtime/__init__.py +8 -0
  501. aeolus1d-0.3.0rc1/src/aeolus1d/runtime/cfl_ramp.py +84 -0
  502. aeolus1d-0.3.0rc1/src/aeolus1d/runtime/live_control.py +270 -0
  503. aeolus1d-0.3.0rc1/src/aeolus1d/scaffold/__init__.py +20 -0
  504. aeolus1d-0.3.0rc1/src/aeolus1d/scaffold/engine.py +190 -0
  505. aeolus1d-0.3.0rc1/src/aeolus1d/scaffold/thermal_network.py +169 -0
  506. aeolus1d-0.3.0rc1/src/aeolus1d/scaffold/turbo_sizing.py +253 -0
  507. aeolus1d-0.3.0rc1/src/aeolus1d/scaffold/wizards.py +175 -0
  508. aeolus1d-0.3.0rc1/src/aeolus1d/sensitivity.py +158 -0
  509. aeolus1d-0.3.0rc1/src/aeolus1d/solver/__init__.py +1 -0
  510. aeolus1d-0.3.0rc1/src/aeolus1d/solver/chem_bs_brinkmeier.py +946 -0
  511. aeolus1d-0.3.0rc1/src/aeolus1d/solver/chem_bs_jit.py +366 -0
  512. aeolus1d-0.3.0rc1/src/aeolus1d/solver/chem_diagnostics.py +252 -0
  513. aeolus1d-0.3.0rc1/src/aeolus1d/solver/chem_numbalsoda.py +360 -0
  514. aeolus1d-0.3.0rc1/src/aeolus1d/solver/hllc.py +154 -0
  515. aeolus1d-0.3.0rc1/src/aeolus1d/solver/hllc_eos.py +142 -0
  516. aeolus1d-0.3.0rc1/src/aeolus1d/solver/hllc_eos_njit.py +626 -0
  517. aeolus1d-0.3.0rc1/src/aeolus1d/solver/hllc_jac.py +1839 -0
  518. aeolus1d-0.3.0rc1/src/aeolus1d/solver/hllc_lm.py +135 -0
  519. aeolus1d-0.3.0rc1/src/aeolus1d/solver/implicit_euler.py +749 -0
  520. aeolus1d-0.3.0rc1/src/aeolus1d/solver/implicit_kernels.py +3901 -0
  521. aeolus1d-0.3.0rc1/src/aeolus1d/solver/implicit_network.py +1849 -0
  522. aeolus1d-0.3.0rc1/src/aeolus1d/solver/implicit_radau.py +396 -0
  523. aeolus1d-0.3.0rc1/src/aeolus1d/solver/kernels.py +645 -0
  524. aeolus1d-0.3.0rc1/src/aeolus1d/solver/kernels_mp5.py +491 -0
  525. aeolus1d-0.3.0rc1/src/aeolus1d/solver/loop_flow_steady.py +399 -0
  526. aeolus1d-0.3.0rc1/src/aeolus1d/solver/network_timeloop.py +2982 -0
  527. aeolus1d-0.3.0rc1/src/aeolus1d/solver/packed_pipes.py +342 -0
  528. aeolus1d-0.3.0rc1/src/aeolus1d/solver/physics_asserts.py +173 -0
  529. aeolus1d-0.3.0rc1/src/aeolus1d/solver/quasi_steady.py +688 -0
  530. aeolus1d-0.3.0rc1/src/aeolus1d/solver/quasi_steady_network.py +3324 -0
  531. aeolus1d-0.3.0rc1/src/aeolus1d/solver/reconstruct.py +148 -0
  532. aeolus1d-0.3.0rc1/src/aeolus1d/solver/rk.py +45 -0
  533. aeolus1d-0.3.0rc1/src/aeolus1d/solver/solver_ops.py +324 -0
  534. aeolus1d-0.3.0rc1/src/aeolus1d/solver/species_advection_njit.py +203 -0
  535. aeolus1d-0.3.0rc1/src/aeolus1d/solver/startup_banner.py +317 -0
  536. aeolus1d-0.3.0rc1/src/aeolus1d/solver/timeloop.py +641 -0
  537. aeolus1d-0.3.0rc1/src/aeolus1d/surrogates.py +123 -0
  538. aeolus1d-0.3.0rc1/src/aeolus1d/transmission_shift.py +171 -0
  539. aeolus1d-0.3.0rc1/src/aeolus1d/uq.py +149 -0
  540. aeolus1d-0.3.0rc1/src/aeolus1d/validation.py +778 -0
  541. aeolus1d-0.3.0rc1/src/aeolus1d/vehicle.py +202 -0
@@ -0,0 +1,127 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .eggs/
5
+ # Repo-root build/ + dist/ only — the PyInstaller spec lives at
6
+ # ``aeolus1d_gui/build/`` and is intentionally tracked.
7
+ /build/
8
+ /dist/
9
+ # mkdocs build output.
10
+ /site/
11
+ .venv/
12
+ venv/
13
+ .env
14
+
15
+ .pytest_cache/
16
+ .ruff_cache/
17
+ .mypy_cache/
18
+ .coverage
19
+ htmlcov/
20
+ # CI caches ``.cache/pip`` INTO the build workspace (see .gitlab-ci.yml's
21
+ # ``cache.paths``). hatchling picks sdist contents from what git would track,
22
+ # so while this was unignored ``python -m build`` packaged the entire pip
23
+ # cache: the build-smoke artifact was 231.5 MB against 9.8 MB from a clean
24
+ # tree, and a 231 MB upload over a home link resets often enough that the job
25
+ # failed 4 of 5 attempts. That looked like flaky infrastructure for a whole
26
+ # day. It also meant a release would have shipped a pip cache to PyPI.
27
+ .cache/
28
+
29
+ .ipynb_checkpoints/
30
+ .idea/
31
+ .vscode/
32
+ *.swp
33
+ *~
34
+
35
+ run.h5
36
+ *.h5
37
+ !reference_data/*.npz
38
+ outputs/
39
+
40
+ # graphify outputs — knowledge-graph artifacts (HTML viz, raw
41
+ # graph.json, GRAPH_REPORT.md). Regenerated on every run; no
42
+ # value tracking.
43
+ graphify-out/
44
+
45
+ # Auto-generated TOML outputs from optimizer runs; intermediate
46
+ # artifacts of long-running fits, not source.
47
+ *.tuned.toml
48
+
49
+ # Third-party / vendor case files used as local interop fixtures.
50
+ # Cruise M / GT-Suite / GT-Power project files carry vendor IP and
51
+ # proprietary engine-program data; keep them out of the repo.
52
+ # Drop the file at the path below to enable the corresponding
53
+ # integration tests; the tests skip cleanly when the file is
54
+ # absent.
55
+ tests/fixtures/interop/*.proj
56
+ tests/fixtures/interop/*.gt.xml
57
+ tests/fixtures/interop/*.bws
58
+ tests/fixtures/interop/*.wvm
59
+ tests/fixtures/interop/*.gtm
60
+ tests/fixtures/interop/*.gtsub
61
+ # Umbrella folder for user-supplied vendor case files used as
62
+ # local interop fixtures. Stays untracked; the integration
63
+ # tests resolve their fixtures from
64
+ # ``local_cases/<vendor-subfolder>/`` and skip cleanly when
65
+ # absent.
66
+ /local_cases/
67
+ # Defensive root-level globs so vendor case files (Cruise M
68
+ # ``.proj`` archives, GT-Suite ``.gtm``/``.gtsub`` + their
69
+ # binary turbo-map / parameter-table siblings) never end up
70
+ # staged by accident, even if dropped at the repo root in their
71
+ # own folder.
72
+ *.proj
73
+ *.gtm
74
+ *.gtsub
75
+ *.cmp
76
+ *.trb
77
+ *.glx
78
+ *.rlt
79
+
80
+
81
+
82
+ # screenshots from doc rendering issues
83
+ ss*.png
84
+
85
+ # Claude harness lock files
86
+ .claude/
87
+
88
+ # Numba JIT cache — primed by ``aeolus1d warmup`` (Phase 2). Bulky,
89
+ # host-specific, and regenerated on demand.
90
+ .numba_cache/
91
+
92
+ # Transient interop diagnostic dumps (e.g. GT-Suite InteropReport
93
+ # warnings). Captured per-session, not source.
94
+ warnings.txt
95
+
96
+ # Bundled-example plot artefacts — regenerated by ``plot_*.py``
97
+ # scripts; the scripts are tracked, the PNGs are not.
98
+ examples/plots/*.png
99
+
100
+ # Validation dataset archives — the CSV under ``data/`` is tracked,
101
+ # the upstream archive + HTML landing page from Mendeley / Ricardo /
102
+ # Argonne / UMich are not (each has its own DATA_LICENSE).
103
+ examples/validation/mendeley_ethanol_water/*.zip
104
+ examples/validation/mendeley_ethanol_water/*.html
105
+ examples/validation/ricardo_ktm/*.zip
106
+ examples/validation/argonne_d3/*.zip
107
+ examples/validation/umich_diesel/*.zip
108
+
109
+ # ML chemistry surrogate — generated datasets + trained models (regenerable)
110
+ ml_chemistry/data/
111
+ ml_chemistry/models/
112
+
113
+ # AVL comparison-plot aeolus1d-run cache (regenerable; written by
114
+ # scripts/plot_avl_validation_comparison.py to skip the re-solve on
115
+ # reference-only re-plots).
116
+ examples/validation/**/.aeolus_run_*.pkl
117
+
118
+ # Local scratch: ad-hoc diagnostics, audit notes, CI watchers, throwaway
119
+ # harnesses. Never source — kept out of the tree so `git add -A` can't sweep it.
120
+ .pipeline/
121
+
122
+ # Hypothesis' example database — a machine-local cache the plugin writes into
123
+ # the CWD. It is not source, and because it was never ignored, hatchling's
124
+ # default sdist swept 630 of its files into every published tarball. The
125
+ # allow-list in pyproject now keeps them out of the sdist regardless; this
126
+ # keeps them out of `git add -A` as well.
127
+ .hypothesis/
@@ -0,0 +1,14 @@
1
+ # Authors
2
+
3
+ aeolus1d is developed and maintained by:
4
+
5
+ - **Niklas Nordin** &lt;niklas.nordin@nequam.se&gt;
6
+ - **Claude** (Anthropic) — pair-programming assistant
7
+
8
+ ## Acknowledgements
9
+
10
+ Phase-by-phase contributions are recorded in the git log
11
+ (`git log --format='%h %s'`). The strict-mode arc (Phase 7g.3-burn-*),
12
+ the implicit-solver Picard / JFNK work (Phase I-Y / I-8), and the
13
+ AVL-inspired backlog sweep (Phase A1–H3, L1, E1–E4, F3, G2/G3, I2)
14
+ are all in-tree in `src/aeolus1d/`.
@@ -0,0 +1,39 @@
1
+ # Changelog
2
+
3
+ The full changelog lives at **[docs/changelog.md](docs/changelog.md)**
4
+ — this file is a pointer so community-health scanners, GitHub
5
+ release-notes auto-detection, and `pip show aeolus1d`-style tools
6
+ find a `CHANGELOG.md` at the repo root.
7
+
8
+ The `docs/` copy is the single source of truth; mirroring would
9
+ drift. Use the table-of-contents below to jump straight to a
10
+ version.
11
+
12
+
13
+ ## Releases
14
+
15
+ - **Unreleased** — [v0.3.0 (pre-release) in flight on `main`](docs/changelog.md#v030-pre-release--state-space-linearization--engine-warm-up-arc)
16
+ - **v0.2.0** (2026-05-17) — [standalone repo + validation closures + CI](docs/changelog.md#v020--standalone-repo--validation-closures--ci)
17
+ - **Milestones 1-6** — [docs/changelog.md](docs/changelog.md#milestone-1--pipe-network-core)
18
+ (pipe-network core → MP5 dispatch closes + optimization driver)
19
+
20
+
21
+ ## Per-phase technical detail
22
+
23
+ `docs/changelog.md` summarises each milestone at the
24
+ sentence-per-phase level. For the full blow-by-blow — every
25
+ ``@register_closure``, every bench-line delta — see:
26
+
27
+ - **[docs/phase-log.md](docs/phase-log.md)** — detailed per-phase
28
+ technical history.
29
+ - **[docs/perf-history.md](docs/perf-history.md)** — Phase Perf-1
30
+ → Perf-17 before / after numbers.
31
+
32
+
33
+ ## Convention
34
+
35
+ aeolus1d follows [Semantic Versioning](https://semver.org). Until
36
+ v1.0, breaking changes happen between minor versions; the entry
37
+ under each version in `docs/changelog.md` calls them out
38
+ explicitly. Phase numbering is internal to the project (~600
39
+ phases across 6 milestones at v0.2.0) and is not tied to SemVer.
@@ -0,0 +1,37 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use aeolus1d in academic work, please cite it as below."
3
+ title: "aeolus1d — a 1D compressible gas-dynamics pipe-network solver"
4
+ abstract: >-
5
+ aeolus1d is an open-source 1D compressible-Euler pipe-network solver
6
+ built for engine intake/exhaust simulation, aftertreatment chemistry,
7
+ and 1D wave-action workflows. Numba-JIT inner kernels run within
8
+ roughly 3× of hand-tuned Fortran; the solver ships HLLC + MUSCL/MP5,
9
+ implicit Euler / BDF2 / Radau IIA(3) with analytic Jacobians,
10
+ Strang-split chemistry, real-gas EOS, full engine + aftertreatment
11
+ component depth, a Qt/PyVista visual editor, and a validated TOML
12
+ case format.
13
+ type: software
14
+ authors:
15
+ - family-names: Nordin
16
+ given-names: Niklas
17
+ email: niklas.nordin@nequam.se
18
+ affiliation: nequam
19
+ - name: "Claude (Anthropic)"
20
+ affiliation: "Anthropic — pair-programming assistant"
21
+ version: "0.2.0"
22
+ date-released: "2026-05-17"
23
+ license: MIT
24
+ repository-code: "https://gitlab.com/niklas.nordin.swe/aeolus"
25
+ url: "https://gitlab.com/niklas.nordin.swe/aeolus"
26
+ keywords:
27
+ - cfd
28
+ - gas-dynamics
29
+ - engine-simulation
30
+ - aftertreatment
31
+ - 1d-wave-action
32
+ - numba
33
+ - compressible-euler
34
+ # DOI placeholder — populated when a Zenodo release is cut (Phase 9
35
+ # of the maturity remediation plan). Replace with the concrete DOI
36
+ # at that point.
37
+ # doi: 10.5281/zenodo.XXXXXXX
@@ -0,0 +1,46 @@
1
+ # Code of Conduct
2
+
3
+ The aeolus1d project adopts the
4
+ [**Contributor Covenant, v2.1**](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
5
+ as its code of conduct. The full text — covering expected behaviour,
6
+ enforcement guidelines, and the four-tier consequences ladder — lives
7
+ at the URL above. Treat that document as authoritative; this file
8
+ just records the adoption and the local enforcement contact.
9
+
10
+
11
+ ## In short
12
+
13
+ - Be respectful and constructive in issues, merge requests, code
14
+ review, and any other project space.
15
+ - Disagree on technical substance, not on people.
16
+ - Assume good faith. Ask clarifying questions before escalating.
17
+
18
+
19
+ ## Scope
20
+
21
+ Applies to all project spaces — the GitLab repository (issues,
22
+ merge requests, code review threads, the wiki) and any official
23
+ channel (email, chat, video calls) where someone is representing
24
+ the project.
25
+
26
+
27
+ ## Enforcement
28
+
29
+ Report unacceptable behaviour to **niklas.nordin@nequam.se**.
30
+
31
+ Reports are handled confidentially. Expect an acknowledgement
32
+ within 72 hours and a substantive response within two weeks. The
33
+ project follows the Contributor Covenant enforcement ladder:
34
+ correction → warning → temporary ban → permanent ban, calibrated
35
+ to the severity and pattern of the incident.
36
+
37
+ Reporters acting in good faith will not face retaliation, even if
38
+ the report is ultimately not actionable.
39
+
40
+
41
+ ## Attribution
42
+
43
+ This Code of Conduct is adapted from the
44
+ [Contributor Covenant](https://www.contributor-covenant.org),
45
+ version 2.1, available at the URL above. The Contributor Covenant
46
+ is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
@@ -0,0 +1,150 @@
1
+ # Contributing to aeolus1d
2
+
3
+ Thanks for picking up the repo. This file covers the practical mechanics
4
+ — how to install a dev environment, run the test gates, and shape a
5
+ merge request so it lands quickly.
6
+
7
+ For the wider community policy, see [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md).
8
+ For security disclosure, see [`SECURITY.md`](SECURITY.md).
9
+
10
+
11
+ ## Getting set up
12
+
13
+ ```bash
14
+ git clone https://gitlab.com/niklas.nordin.swe/aeolus
15
+ cd aeolus1d
16
+ python -m venv .venv && source .venv/bin/activate
17
+ pip install -e ".[dev]"
18
+ pre-commit install
19
+ ```
20
+
21
+ Optional extras (`gui`, `real-gas`, `docs`, `build`, `chemistry-yaml`,
22
+ `interop`) are independently installable — see
23
+ [`docs/installation.md`](docs/installation.md).
24
+
25
+ Verify the install:
26
+
27
+ ```bash
28
+ make test # ~3 min parallel, skips @pytest.mark.slow
29
+ aeolus1d bench nozzle # quick smoke
30
+ ```
31
+
32
+
33
+ ## The local gates
34
+
35
+ Every merge request has to clear these — they all run in CI but it's
36
+ faster to catch failures locally first.
37
+
38
+ | Gate | Command | What it checks |
39
+ |---|---|---|
40
+ | Lint | `make lint` (or `pre-commit run --all-files`) | ruff style + auto-fixes |
41
+ | Types | `mypy --strict src/aeolus1d aeolus1d_gui` | strict typing, no Any-leaks |
42
+ | Tests (fast) | `make test` | full suite minus `@slow`; ~3 min |
43
+ | Tests (full) | `make test-all` | everything including benches |
44
+ | Docs | `make docs` | `mkdocs build --strict` |
45
+
46
+ `pre-commit install` wires the ruff hook so commits fail locally
47
+ before they reach CI. Bypass with `--no-verify` only when you really
48
+ know what you're doing.
49
+
50
+
51
+ ## Branching & merge requests
52
+
53
+ - **One concern per MR.** A bugfix and a feature in the same branch
54
+ invariably slows review and bisecting.
55
+ - **Branch naming.** `feat/<topic>`, `fix/<topic>`, `docs/<topic>`,
56
+ `perf/<topic>`, `hotfix/<topic>`. Topic in kebab-case.
57
+ - **Commit messages.** Imperative mood, one-line subject under 72
58
+ chars, optional body explaining *why*. Match the existing log
59
+ style — see `git log --oneline` for examples.
60
+ - **No `--amend` on pushed commits.** Create a new commit instead.
61
+ CI re-runs from scratch on push, so amending breaks bisect history.
62
+ - **No `--no-verify`.** If a hook fails, fix the cause.
63
+
64
+
65
+ ## The phase-workflow rule (aeolus1d convention)
66
+
67
+ Substantial features land as **phases** — each phase touches the same
68
+ three surfaces together so the docs/examples never lag the code:
69
+
70
+ 1. **Code** — `src/aeolus1d/...` change + tests.
71
+ 2. **Example** — a bundled `examples/NN_<topic>.toml` (and matching
72
+ `plot_NN_<topic>.py` script under `examples/plots/` if useful)
73
+ that exercises the new feature end-to-end.
74
+ 3. **Documentation** — `README.md` milestone section *and*
75
+ `docs/changelog.md` *and* one of `docs/theory.md` /
76
+ `docs/concepts.md` / `docs/closures-reference.md` as appropriate.
77
+
78
+ Commit the three pieces together in a single MR. If a phase is large,
79
+ split it into sub-phases (e.g. `Phase 8m-ctrl-3`) — each sub-phase
80
+ still ships the three surfaces.
81
+
82
+
83
+ ## Validation discipline
84
+
85
+ Validation cases live under `examples/validation/<dataset>/` and have
86
+ their own `run_validation.py` + `pass_criteria.toml`. **Don't loosen
87
+ a passing tolerance to make a refactor green** — investigate the
88
+ divergence first. The KTM and Mendeley suites are currently the
89
+ quantitative truth-set; promoting them to gated CI tests is on the
90
+ roadmap (see [`docs/roadmap.md`](docs/roadmap.md)).
91
+
92
+
93
+ ## Performance work
94
+
95
+ Numeric kernels are `@njit(cache=True, fastmath=FASTMATH)`, where
96
+ `FASTMATH` is the centralised flag in `aeolus1d._numba_flags` (overridable
97
+ with `AEOLUS_FASTMATH=0` for IEEE-strict numerics). Performance MRs need
98
+ a before/after measurement in the description (e.g.
99
+ `tests/benchmarks/test_baseline_regression.py` output, or a one-off
100
+ timer from a representative example). Hot-path changes that don't
101
+ include numbers will be sent back with a request to measure.
102
+
103
+ A hot-kernel change must also **preserve bit-identity** (the
104
+ `regression` golden net catches a "faster but different" kernel) or be
105
+ gated behind a numerics-changing flag with re-baselined snapshots — and
106
+ the dev box is not a reliable benchmark host (see
107
+ [ADR-0006](docs/adr/0006-hllc-core-microopt-rejected.md)).
108
+
109
+ The historical performance baselines live in
110
+ [`docs/perf-history.md`](docs/perf-history.md) and
111
+ [`docs/benchmarks-baseline.md`](docs/benchmarks-baseline.md). Update
112
+ the relevant table when you ship a win.
113
+
114
+
115
+ ## Architecture decisions (ADRs)
116
+
117
+ Load-bearing decisions — especially the ones where the interesting part
118
+ is the *rejected* alternative — are recorded as ADRs in
119
+ [`docs/adr/`](docs/adr/README.md). Before re-litigating a settled design
120
+ question (a different chemistry integrator, a matrix-free implicit solve,
121
+ a hot-kernel rewrite), check whether an ADR already covers it.
122
+
123
+ Write a new ADR when a change alters (or deliberately does *not* alter)
124
+ the architecture or numerics and the rationale isn't recoverable from the
125
+ code alone. Routine fixes and features don't need one — the changelog and
126
+ `docs/phase-log.md` cover those. Format + conventions are in the
127
+ [ADR overview](docs/adr/README.md).
128
+
129
+
130
+ ## Reporting bugs
131
+
132
+ Open an issue on the project tracker with:
133
+
134
+ 1. A minimal TOML case that reproduces (the smaller the better — strip
135
+ to the offending pipe + closure).
136
+ 2. The full `aeolus1d run <case>.toml` console output.
137
+ 3. Your environment — run `aeolus1d doctor`, which bundles the aeolus1d
138
+ version, Python + platform, the core and optional dependency
139
+ versions, and the relevant `AEOLUS_*` / `NUMBA_*` env vars (add
140
+ `--json` for a machine-readable dump to attach to the report).
141
+
142
+ For numerical disagreements with published data, include the dataset
143
+ reference and the analytical or measured value you expected.
144
+
145
+
146
+ ## License of contributions
147
+
148
+ By contributing you agree that your contribution is licensed under
149
+ the project's MIT License (see [`LICENSE`](LICENSE)). No additional
150
+ CLA is required.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Niklas Nordin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,21 @@
1
+ # Maintainers
2
+
3
+ aeolus1d is currently maintained by a single maintainer:
4
+
5
+ - **Niklas Nordin** — <niklas.nordin@nequam.se>
6
+
7
+ (Claude, Anthropic's AI assistant, is credited as a pair-programming
8
+ contributor in `CITATION.cff` / `pyproject.toml`; it is not a maintainer.)
9
+
10
+ ## What this means for you
11
+
12
+ - **Bus factor is 1.** This is a known, documented risk rather than a hidden
13
+ one. Load-bearing design rationale is being migrated into in-repo
14
+ Architecture Decision Records (see the maturity roadmap) so the project's
15
+ reasoning survives independent of any single person.
16
+ - **Support is best-effort.** There is no guaranteed response-time SLA
17
+ pre-1.0 — see [SUPPORT.md](SUPPORT.md) and [SECURITY.md](SECURITY.md).
18
+ - **A second maintainer is actively welcome.** It is the single highest-value
19
+ contribution to the project's longevity. The path is the usual one: read
20
+ [CONTRIBUTING.md](CONTRIBUTING.md), pick up an issue, and land a few
21
+ well-scoped MRs; sustained, high-quality contribution earns commit rights.