pyoomph 0.2.0__tar.gz → 0.2.2__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 (1147) hide show
  1. {pyoomph-0.2.0 → pyoomph-0.2.2}/CHANGELOG.md +96 -0
  2. {pyoomph-0.2.0 → pyoomph-0.2.2}/CMakeLists.txt +1 -0
  3. {pyoomph-0.2.0 → pyoomph-0.2.2}/INSTALL.md +13 -42
  4. {pyoomph-0.2.0 → pyoomph-0.2.2}/PKG-INFO +2 -1
  5. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/generate_aiomfac_parameters.py +2 -2
  6. pyoomph-0.2.2/citools/patches/apply_ginac_patch.sh +128 -0
  7. pyoomph-0.2.2/citools/patches/ginac-binomial-real-imag-pow00.patch +55 -0
  8. pyoomph-0.2.2/citools/patches/ginac-inexact-whole-number-exponent.patch +78 -0
  9. pyoomph-0.2.2/citools/patches/ginac-to-polynomial-symbolic-exponent.patch +44 -0
  10. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/test_all_tutorial_scripts.py +49 -9
  11. {pyoomph-0.2.0 → pyoomph-0.2.2}/cmake/ThirdPartyGiNaC.cmake +46 -12
  12. {pyoomph-0.2.0 → pyoomph-0.2.2}/cmake/generate_stubs.py +115 -1
  13. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/__init__.py +77 -22
  14. pyoomph-0.2.2/pyoomph/_version.py +1 -0
  15. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/NSCH.py +70 -3
  16. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/low_order_NSCH.py +17 -1
  17. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/stabilization.py +29 -31
  18. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/stabilized_ns.py +32 -34
  19. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/topological_changes.py +142 -11
  20. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/tracers.py +62 -8
  21. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/viscoelastic.py +20 -3
  22. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/__init__.py +140 -12
  23. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/cb.py +315 -0
  24. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/generic.py +3 -2
  25. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/interpol.py +33 -1
  26. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/tensor_funcs.py +33 -6
  27. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/units.py +26 -9
  28. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/utils.py +41 -1
  29. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/problem.py +543 -96
  30. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/aiomfac.py +2 -2
  31. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/activity.py +218 -5
  32. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/activity_electrolyte.py +314 -19
  33. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/default_materials.py +18 -1
  34. pyoomph-0.2.2/pyoomph/materials/diffusivity_estimates.py +722 -0
  35. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/generic.py +177 -14
  36. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/axisymm_topology.py +248 -38
  37. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/gmsh.py +106 -6
  38. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/mesh.py +12 -2
  39. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/meshdatacache.py +13 -8
  40. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/remesher.py +5 -4
  41. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/generic.py +264 -149
  42. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/meshio.py +46 -2
  43. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/generic.py +34 -3
  44. pyoomph-0.2.2/pyoomph/solvers/mumps.py +622 -0
  45. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/petsc.py +5 -12
  46. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/spectra.py +4 -2
  47. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/controller.py +26 -1
  48. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/num_text_out.py +81 -5
  49. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyproject.toml +48 -3
  50. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/codegen.cpp +930 -259
  51. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/codegen.hpp +85 -7
  52. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements.cpp +11 -1
  53. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements.hpp +7 -0
  54. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_dofs.cpp +41 -17
  55. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_interface.cpp +88 -5
  56. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/expressions.cpp +672 -86
  57. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/expressions.hpp +180 -5
  58. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/jitbridge.h +72 -0
  59. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh.cpp +245 -1
  60. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/meshtemplate.cpp +63 -4
  61. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/meshtemplate.hpp +24 -5
  62. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/expressions.cpp +208 -60
  63. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/problem.cpp +6 -4
  64. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/INFO_oomph-lib +18 -0
  65. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/binary_tree.cc +13 -0
  66. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/adapt_continuation_worker.py +30 -3
  67. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/continue_run_worker.py +41 -20
  68. pyoomph-0.2.2/tests/gmsh_high_order_worker.py +94 -0
  69. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_dof_description_worker.py +6 -1
  70. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_dof_ordering_rowsplit_worker.py +6 -1
  71. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_dof_ordering_worker.py +6 -1
  72. pyoomph-0.2.2/tests/mpi_line_mesh_worker.py +70 -0
  73. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_observables_worker.py +9 -0
  74. pyoomph-0.2.2/tests/remesh_tangent_worker.py +184 -0
  75. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_reservoir_closure.py +80 -3
  76. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_topology.py +71 -5
  77. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_azimuthal_codegen.py +123 -0
  78. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_bifurcation_gui.py +25 -0
  79. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_custom_callbacks.py +25 -0
  80. pyoomph-0.2.2/tests/test_delayed_lambda_expansion.py +178 -0
  81. pyoomph-0.2.2/tests/test_diffusivity_estimates.py +366 -0
  82. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_dimensional_piecewise.py +29 -4
  83. pyoomph-0.2.2/tests/test_gmsh_high_order_optimize.py +134 -0
  84. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_inverted_element_remesh.py +92 -0
  85. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_math_functions.py +35 -2
  86. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mesh_point_locator.py +30 -0
  87. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_axisymm_reconnection.py +17 -10
  88. pyoomph-0.2.2/tests/test_mpi_line_mesh.py +127 -0
  89. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_observables.py +36 -0
  90. pyoomph-0.2.2/tests/test_multiret_hessian.py +549 -0
  91. pyoomph-0.2.2/tests/test_multiret_real_part.py +100 -0
  92. pyoomph-0.2.2/tests/test_mumps_solver.py +383 -0
  93. pyoomph-0.2.2/tests/test_solver_autoselection.py +213 -0
  94. pyoomph-0.2.2/tests/test_state_file_restart.py +787 -0
  95. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_structural_assembly.py +78 -0
  96. pyoomph-0.2.2/tests/test_symbolic_relational.py +382 -0
  97. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_tensor_index_conventions.py +35 -2
  98. pyoomph-0.2.2/tests/test_text_output_headers.py +158 -0
  99. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_tracers.py +116 -0
  100. pyoomph-0.2.2/tests/test_unifac_analytic_c_jacobian.py +170 -0
  101. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_unit_strings.py +39 -1
  102. pyoomph-0.2.0/.devcontainer/Dockerfile +0 -33
  103. pyoomph-0.2.0/.github/workflows/debug_wheel_case.yml +0 -373
  104. pyoomph-0.2.0/.github/workflows/prebuild_petsc_slepc.yml +0 -211
  105. pyoomph-0.2.0/.github/workflows/prebuild_static_ginac_cln.yml +0 -131
  106. pyoomph-0.2.0/.github/workflows/test_jit_cache.yml +0 -141
  107. pyoomph-0.2.0/.github/workflows/test_mac_accelerate.yml +0 -124
  108. pyoomph-0.2.0/.github/workflows/test_wheel_suite.yml +0 -532
  109. pyoomph-0.2.0/.github/workflows/test_wheels_multiversion.yml +0 -167
  110. pyoomph-0.2.0/.github/workflows/tutorial_scripts.yml +0 -614
  111. pyoomph-0.2.0/.github/workflows/wheels.yml +0 -720
  112. pyoomph-0.2.0/.readthedocs.yaml +0 -34
  113. pyoomph-0.2.0/AGENTS.md +0 -623
  114. pyoomph-0.2.0/CLAUDE.md +0 -105
  115. pyoomph-0.2.0/MANIFEST.in +0 -3
  116. pyoomph-0.2.0/agents/advanced.md +0 -612
  117. pyoomph-0.2.0/agents/examples.md +0 -557
  118. pyoomph-0.2.0/agents/materials.md +0 -381
  119. pyoomph-0.2.0/agents/meshes.md +0 -144
  120. pyoomph-0.2.0/agents/output.md +0 -126
  121. pyoomph-0.2.0/agents/parallel.md +0 -139
  122. pyoomph-0.2.0/agents/physics.md +0 -197
  123. pyoomph-0.2.0/agents/units.md +0 -139
  124. pyoomph-0.2.0/bisect.sh +0 -18
  125. pyoomph-0.2.0/build_for_develop.sh +0 -48
  126. pyoomph-0.2.0/citools/patches/apply_ginac_patch.sh +0 -38
  127. pyoomph-0.2.0/clean.sh +0 -40
  128. pyoomph-0.2.0/dev_docs/README.md +0 -91
  129. pyoomph-0.2.0/dev_docs/adaptive_refinement.md +0 -931
  130. pyoomph-0.2.0/dev_docs/adaptive_resolve_recovery.md +0 -373
  131. pyoomph-0.2.0/dev_docs/aiomfac_electrolytes.md +0 -147
  132. pyoomph-0.2.0/dev_docs/arclength_inner_product.md +0 -134
  133. pyoomph-0.2.0/dev_docs/assembly_overhead.md +0 -405
  134. pyoomph-0.2.0/dev_docs/axisymmetric_topological_changes.md +0 -801
  135. pyoomph-0.2.0/dev_docs/bifurcation_loci.md +0 -613
  136. pyoomph-0.2.0/dev_docs/boundary_node_membership.md +0 -292
  137. pyoomph-0.2.0/dev_docs/branch_switching.md +0 -699
  138. pyoomph-0.2.0/dev_docs/code_generation.md +0 -1818
  139. pyoomph-0.2.0/dev_docs/coordinate_system_tensor_ops.md +0 -390
  140. pyoomph-0.2.0/dev_docs/critical_wavenumber_tracking.md +0 -199
  141. pyoomph-0.2.0/dev_docs/deflation.md +0 -315
  142. pyoomph-0.2.0/dev_docs/distributed_periodic_bc.md +0 -206
  143. pyoomph-0.2.0/dev_docs/distributed_remeshing.md +0 -610
  144. pyoomph-0.2.0/dev_docs/distributed_state_files.md +0 -440
  145. pyoomph-0.2.0/dev_docs/dof_ordering.md +0 -222
  146. pyoomph-0.2.0/dev_docs/electrohydrodynamics.md +0 -900
  147. pyoomph-0.2.0/dev_docs/examples/axisymm_reconnection_minimal.py +0 -139
  148. pyoomph-0.2.0/dev_docs/examples/ginac_csrc_inexact_negative_exponent.cpp +0 -125
  149. pyoomph-0.2.0/dev_docs/examples/gmsh_orientation_matrix.py +0 -188
  150. pyoomph-0.2.0/dev_docs/examples/initialisation_profile.py +0 -109
  151. pyoomph-0.2.0/dev_docs/examples/inverted_element_notch.py +0 -181
  152. pyoomph-0.2.0/dev_docs/examples/sessile_droplet_surfactants.py +0 -193
  153. pyoomph-0.2.0/dev_docs/examples/simple_ginac +0 -0
  154. pyoomph-0.2.0/dev_docs/examples/simple_ginac.cpp +0 -94
  155. pyoomph-0.2.0/dev_docs/floquet_multipliers.md +0 -632
  156. pyoomph-0.2.0/dev_docs/hopf_normal_form.md +0 -177
  157. pyoomph-0.2.0/dev_docs/initialisation_cost.md +0 -319
  158. pyoomph-0.2.0/dev_docs/interface_refinement_coupling.md +0 -1128
  159. pyoomph-0.2.0/dev_docs/internal_facet_fields.md +0 -496
  160. pyoomph-0.2.0/dev_docs/jacobian_block_flags.md +0 -243
  161. pyoomph-0.2.0/dev_docs/linear_solvers.md +0 -837
  162. pyoomph-0.2.0/dev_docs/macro_elements.md +0 -805
  163. pyoomph-0.2.0/dev_docs/mesh_construction.md +0 -617
  164. pyoomph-0.2.0/dev_docs/mesh_data_cache.md +0 -635
  165. pyoomph-0.2.0/dev_docs/mesh_point_locator.md +0 -786
  166. pyoomph-0.2.0/dev_docs/mpi_augmented_systems.md +0 -612
  167. pyoomph-0.2.0/dev_docs/mpi_eigenproblems.md +0 -552
  168. pyoomph-0.2.0/dev_docs/nonconvergence_diagnostics.md +0 -164
  169. pyoomph-0.2.0/dev_docs/open_items.md +0 -486
  170. pyoomph-0.2.0/dev_docs/openmp_assembly.md +0 -307
  171. pyoomph-0.2.0/dev_docs/precice_setup.md +0 -86
  172. pyoomph-0.2.0/dev_docs/quick_continuation.md +0 -112
  173. pyoomph-0.2.0/dev_docs/replicated_condensation_gather.md +0 -341
  174. pyoomph-0.2.0/dev_docs/replicated_mpi_correctness.md +0 -421
  175. pyoomph-0.2.0/dev_docs/salt_transport.md +0 -235
  176. pyoomph-0.2.0/dev_docs/scripts/scan_required_shapes.py +0 -247
  177. pyoomph-0.2.0/dev_docs/scripts/scan_required_shapes_reverse.py +0 -147
  178. pyoomph-0.2.0/dev_docs/spatial_error_estimators.md +0 -700
  179. pyoomph-0.2.0/dev_docs/stabilized_navier_stokes.md +0 -362
  180. pyoomph-0.2.0/dev_docs/stabilized_scalar_transport.md +0 -390
  181. pyoomph-0.2.0/dev_docs/static_condensation.md +0 -1157
  182. pyoomph-0.2.0/dev_docs/structural_assembly.md +0 -780
  183. pyoomph-0.2.0/dev_docs/surfactant_transport.md +0 -465
  184. pyoomph-0.2.0/dev_docs/tracers.md +0 -432
  185. pyoomph-0.2.0/dev_docs/viscoelastic_log_conformation.md +0 -796
  186. pyoomph-0.2.0/docs/Makefile +0 -20
  187. pyoomph-0.2.0/docs/make.bat +0 -35
  188. pyoomph-0.2.0/docs/requirements.txt +0 -9
  189. pyoomph-0.2.0/docs/source/_ext/vidtime.py +0 -123
  190. pyoomph-0.2.0/docs/source/_static/css/custom.css +0 -61
  191. pyoomph-0.2.0/docs/source/_static/favicon.ico +0 -0
  192. pyoomph-0.2.0/docs/source/_static/js/vidtime.js +0 -69
  193. pyoomph-0.2.0/docs/source/conf.py +0 -221
  194. pyoomph-0.2.0/docs/source/index.rst +0 -354
  195. pyoomph-0.2.0/docs/source/latex_tutorial.rst +0 -31
  196. pyoomph-0.2.0/docs/source/pyoomph._pyoomph_core.rst +0 -17
  197. pyoomph-0.2.0/docs/source/pyoomph.equations.ALE.rst +0 -6
  198. pyoomph-0.2.0/docs/source/pyoomph.equations.NSCH.rst +0 -6
  199. pyoomph-0.2.0/docs/source/pyoomph.equations.additional.rst +0 -6
  200. pyoomph-0.2.0/docs/source/pyoomph.equations.advection_diffusion.rst +0 -6
  201. pyoomph-0.2.0/docs/source/pyoomph.equations.cahn_hilliard.rst +0 -6
  202. pyoomph-0.2.0/docs/source/pyoomph.equations.contact_angle.rst +0 -7
  203. pyoomph-0.2.0/docs/source/pyoomph.equations.darcy.rst +0 -6
  204. pyoomph-0.2.0/docs/source/pyoomph.equations.electrohydrodynamics.rst +0 -6
  205. pyoomph-0.2.0/docs/source/pyoomph.equations.electrostatics.rst +0 -6
  206. pyoomph-0.2.0/docs/source/pyoomph.equations.generic.rst +0 -6
  207. pyoomph-0.2.0/docs/source/pyoomph.equations.harmonic_oscillator.rst +0 -6
  208. pyoomph-0.2.0/docs/source/pyoomph.equations.helmholtz.rst +0 -6
  209. pyoomph-0.2.0/docs/source/pyoomph.equations.kuramoto_sivashinsky.rst +0 -6
  210. pyoomph-0.2.0/docs/source/pyoomph.equations.low_order_NSCH.rst +0 -6
  211. pyoomph-0.2.0/docs/source/pyoomph.equations.lubrication.rst +0 -6
  212. pyoomph-0.2.0/docs/source/pyoomph.equations.multi_component.rst +0 -6
  213. pyoomph-0.2.0/docs/source/pyoomph.equations.navier_stokes.rst +0 -6
  214. pyoomph-0.2.0/docs/source/pyoomph.equations.ode.rst +0 -6
  215. pyoomph-0.2.0/docs/source/pyoomph.equations.poisson.rst +0 -6
  216. pyoomph-0.2.0/docs/source/pyoomph.equations.potential_flow.rst +0 -6
  217. pyoomph-0.2.0/docs/source/pyoomph.equations.rst +0 -45
  218. pyoomph-0.2.0/docs/source/pyoomph.equations.salt_transport.rst +0 -6
  219. pyoomph-0.2.0/docs/source/pyoomph.equations.solid.rst +0 -6
  220. pyoomph-0.2.0/docs/source/pyoomph.equations.stabilization.rst +0 -6
  221. pyoomph-0.2.0/docs/source/pyoomph.equations.stabilized_ns.rst +0 -6
  222. pyoomph-0.2.0/docs/source/pyoomph.equations.stokes_stream_func.rst +0 -6
  223. pyoomph-0.2.0/docs/source/pyoomph.equations.surfactants.rst +0 -6
  224. pyoomph-0.2.0/docs/source/pyoomph.equations.topological_changes.rst +0 -6
  225. pyoomph-0.2.0/docs/source/pyoomph.equations.tracers.rst +0 -6
  226. pyoomph-0.2.0/docs/source/pyoomph.equations.viscoelastic.rst +0 -6
  227. pyoomph-0.2.0/docs/source/pyoomph.expressions.cb.rst +0 -6
  228. pyoomph-0.2.0/docs/source/pyoomph.expressions.coordsys.rst +0 -6
  229. pyoomph-0.2.0/docs/source/pyoomph.expressions.generic.rst +0 -6
  230. pyoomph-0.2.0/docs/source/pyoomph.expressions.interpol.rst +0 -6
  231. pyoomph-0.2.0/docs/source/pyoomph.expressions.phys_consts.rst +0 -6
  232. pyoomph-0.2.0/docs/source/pyoomph.expressions.rst +0 -24
  233. pyoomph-0.2.0/docs/source/pyoomph.expressions.tensor_funcs.rst +0 -6
  234. pyoomph-0.2.0/docs/source/pyoomph.expressions.units.rst +0 -6
  235. pyoomph-0.2.0/docs/source/pyoomph.expressions.utils.rst +0 -6
  236. pyoomph-0.2.0/docs/source/pyoomph.generic.assembly.rst +0 -6
  237. pyoomph-0.2.0/docs/source/pyoomph.generic.ccompiler.rst +0 -6
  238. pyoomph-0.2.0/docs/source/pyoomph.generic.codegen.rst +0 -7
  239. pyoomph-0.2.0/docs/source/pyoomph.generic.mpi.rst +0 -6
  240. pyoomph-0.2.0/docs/source/pyoomph.generic.problem.rst +0 -8
  241. pyoomph-0.2.0/docs/source/pyoomph.generic.rst +0 -21
  242. pyoomph-0.2.0/docs/source/pyoomph.jitbridge.rst +0 -9
  243. pyoomph-0.2.0/docs/source/pyoomph.materials.UNIFAC.aiomfac.rst +0 -6
  244. pyoomph-0.2.0/docs/source/pyoomph.materials.UNIFAC.aiomfac_electrolyte.rst +0 -6
  245. pyoomph-0.2.0/docs/source/pyoomph.materials.UNIFAC.dortmund.rst +0 -6
  246. pyoomph-0.2.0/docs/source/pyoomph.materials.UNIFAC.original.rst +0 -6
  247. pyoomph-0.2.0/docs/source/pyoomph.materials.UNIFAC.rst +0 -20
  248. pyoomph-0.2.0/docs/source/pyoomph.materials.activity.rst +0 -6
  249. pyoomph-0.2.0/docs/source/pyoomph.materials.activity_electrolyte.rst +0 -6
  250. pyoomph-0.2.0/docs/source/pyoomph.materials.default_materials.rst +0 -6
  251. pyoomph-0.2.0/docs/source/pyoomph.materials.generic.rst +0 -7
  252. pyoomph-0.2.0/docs/source/pyoomph.materials.ions.rst +0 -6
  253. pyoomph-0.2.0/docs/source/pyoomph.materials.mass_transfer.rst +0 -6
  254. pyoomph-0.2.0/docs/source/pyoomph.materials.rst +0 -31
  255. pyoomph-0.2.0/docs/source/pyoomph.materials.surfactant_isotherms.rst +0 -7
  256. pyoomph-0.2.0/docs/source/pyoomph.meshes.curved_entities.rst +0 -6
  257. pyoomph-0.2.0/docs/source/pyoomph.meshes.droplet_meshes.rst +0 -6
  258. pyoomph-0.2.0/docs/source/pyoomph.meshes.gmsh.rst +0 -6
  259. pyoomph-0.2.0/docs/source/pyoomph.meshes.interpolator.rst +0 -6
  260. pyoomph-0.2.0/docs/source/pyoomph.meshes.mesh.rst +0 -7
  261. pyoomph-0.2.0/docs/source/pyoomph.meshes.meshdatacache.rst +0 -6
  262. pyoomph-0.2.0/docs/source/pyoomph.meshes.remesher.rst +0 -6
  263. pyoomph-0.2.0/docs/source/pyoomph.meshes.rst +0 -26
  264. pyoomph-0.2.0/docs/source/pyoomph.meshes.simplemeshes.rst +0 -6
  265. pyoomph-0.2.0/docs/source/pyoomph.meshes.tqmesh.rst +0 -6
  266. pyoomph-0.2.0/docs/source/pyoomph.meshes.zeta.rst +0 -6
  267. pyoomph-0.2.0/docs/source/pyoomph.output.generic.rst +0 -6
  268. pyoomph-0.2.0/docs/source/pyoomph.output.latex.rst +0 -6
  269. pyoomph-0.2.0/docs/source/pyoomph.output.meshio.rst +0 -6
  270. pyoomph-0.2.0/docs/source/pyoomph.output.plotting.rst +0 -6
  271. pyoomph-0.2.0/docs/source/pyoomph.output.plotting1d.rst +0 -6
  272. pyoomph-0.2.0/docs/source/pyoomph.output.rst +0 -22
  273. pyoomph-0.2.0/docs/source/pyoomph.output.states.rst +0 -6
  274. pyoomph-0.2.0/docs/source/pyoomph.rst +0 -38
  275. pyoomph-0.2.0/docs/source/pyoomph.solvers.generic.rst +0 -6
  276. pyoomph-0.2.0/docs/source/pyoomph.solvers.pardiso.rst +0 -6
  277. pyoomph-0.2.0/docs/source/pyoomph.solvers.precice_adapter.rst +0 -6
  278. pyoomph-0.2.0/docs/source/pyoomph.solvers.rst +0 -21
  279. pyoomph-0.2.0/docs/source/pyoomph.solvers.scipy.rst +0 -6
  280. pyoomph-0.2.0/docs/source/pyoomph.solvers.spectra.rst +0 -6
  281. pyoomph-0.2.0/docs/source/pyoomph.typings.rst +0 -9
  282. pyoomph-0.2.0/docs/source/pyoomph.utils.bifurcation_gui.actions.rst +0 -6
  283. pyoomph-0.2.0/docs/source/pyoomph.utils.bifurcation_gui.controller.rst +0 -6
  284. pyoomph-0.2.0/docs/source/pyoomph.utils.bifurcation_gui.model.rst +0 -6
  285. pyoomph-0.2.0/docs/source/pyoomph.utils.bifurcation_gui.plotter.rst +0 -6
  286. pyoomph-0.2.0/docs/source/pyoomph.utils.bifurcation_gui.rst +0 -21
  287. pyoomph-0.2.0/docs/source/pyoomph.utils.bifurcation_gui.tkapp.rst +0 -6
  288. pyoomph-0.2.0/docs/source/pyoomph.utils.dropgeom.rst +0 -6
  289. pyoomph-0.2.0/docs/source/pyoomph.utils.lyapunov.rst +0 -6
  290. pyoomph-0.2.0/docs/source/pyoomph.utils.num_text_out.rst +0 -6
  291. pyoomph-0.2.0/docs/source/pyoomph.utils.paramscan.rst +0 -6
  292. pyoomph-0.2.0/docs/source/pyoomph.utils.periodic_driving_response.rst +0 -6
  293. pyoomph-0.2.0/docs/source/pyoomph.utils.rst +0 -24
  294. pyoomph-0.2.0/docs/source/pyoomph.utils.smallest_circle.rst +0 -6
  295. pyoomph-0.2.0/docs/source/refs.bib +0 -761
  296. pyoomph-0.2.0/docs/source/tutorial/advstab/azimuthal/rayleigh_benard_azimuthal_stability.py +0 -142
  297. pyoomph-0.2.0/docs/source/tutorial/advstab/azimuthal/rbconvect.rst +0 -87
  298. pyoomph-0.2.0/docs/source/tutorial/advstab/azimuthal/rising_bubble.py +0 -239
  299. pyoomph-0.2.0/docs/source/tutorial/advstab/azimuthal/rising_bubble.rst +0 -88
  300. pyoomph-0.2.0/docs/source/tutorial/advstab/azimuthal.rst +0 -38
  301. pyoomph-0.2.0/docs/source/tutorial/advstab/bifgui/example.rst +0 -107
  302. pyoomph-0.2.0/docs/source/tutorial/advstab/bifgui/keys.rst +0 -110
  303. pyoomph-0.2.0/docs/source/tutorial/advstab/bifgui/menus.rst +0 -267
  304. pyoomph-0.2.0/docs/source/tutorial/advstab/bifgui/tabs.rst +0 -208
  305. pyoomph-0.2.0/docs/source/tutorial/advstab/bifgui/thin_film_bifurcation_gui.py +0 -182
  306. pyoomph-0.2.0/docs/source/tutorial/advstab/bifgui.rst +0 -87
  307. pyoomph-0.2.0/docs/source/tutorial/advstab/cartesiannormal/rivulet.py +0 -111
  308. pyoomph-0.2.0/docs/source/tutorial/advstab/cartesiannormal/rivulet.rst +0 -77
  309. pyoomph-0.2.0/docs/source/tutorial/advstab/cartesiannormal/turing_dispersion.py +0 -86
  310. pyoomph-0.2.0/docs/source/tutorial/advstab/cartesiannormal/turing_transient.py +0 -64
  311. pyoomph-0.2.0/docs/source/tutorial/advstab/cartesiannormal/turingdispersion.rst +0 -58
  312. pyoomph-0.2.0/docs/source/tutorial/advstab/cartesiannormal.rst +0 -17
  313. pyoomph-0.2.0/docs/source/tutorial/advstab/deflation.rst +0 -12
  314. pyoomph-0.2.0/docs/source/tutorial/advstab/eigenbranch_continuation.py +0 -145
  315. pyoomph-0.2.0/docs/source/tutorial/advstab/eigenconti.rst +0 -48
  316. pyoomph-0.2.0/docs/source/tutorial/advstab/movmesh/dropdetach.rst +0 -81
  317. pyoomph-0.2.0/docs/source/tutorial/advstab/movmesh/hanging_droplet.py +0 -132
  318. pyoomph-0.2.0/docs/source/tutorial/advstab/movmesh.rst +0 -10
  319. pyoomph-0.2.0/docs/source/tutorial/advstab/response/dampedho.rst +0 -61
  320. pyoomph-0.2.0/docs/source/tutorial/advstab/response/drums.rst +0 -51
  321. pyoomph-0.2.0/docs/source/tutorial/advstab/response/linear_response_drum.py +0 -129
  322. pyoomph-0.2.0/docs/source/tutorial/advstab/response/linear_response_oscillator.py +0 -106
  323. pyoomph-0.2.0/docs/source/tutorial/advstab/response.rst +0 -11
  324. pyoomph-0.2.0/docs/source/tutorial/advstab.rst +0 -19
  325. pyoomph-0.2.0/docs/source/tutorial/ale/ALE_correction.py +0 -65
  326. pyoomph-0.2.0/docs/source/tutorial/ale/aledt.rst +0 -86
  327. pyoomph-0.2.0/docs/source/tutorial/ale/beads_on_string.py +0 -160
  328. pyoomph-0.2.0/docs/source/tutorial/ale/beadsonstring.rst +0 -97
  329. pyoomph-0.2.0/docs/source/tutorial/ale/free_surface.py +0 -87
  330. pyoomph-0.2.0/docs/source/tutorial/ale/freesurf.rst +0 -132
  331. pyoomph-0.2.0/docs/source/tutorial/ale/gmshfields.rst +0 -96
  332. pyoomph-0.2.0/docs/source/tutorial/ale/lagrange.rst +0 -8
  333. pyoomph-0.2.0/docs/source/tutorial/ale/laplace_smoothed_mesh.py +0 -65
  334. pyoomph-0.2.0/docs/source/tutorial/ale/laplsmooth.rst +0 -52
  335. pyoomph-0.2.0/docs/source/tutorial/ale/pinchoff.rst +0 -122
  336. pyoomph-0.2.0/docs/source/tutorial/ale/rayleigh_plateau.py +0 -173
  337. pyoomph-0.2.0/docs/source/tutorial/ale/rayleigh_plateau_pinchoff.py +0 -202
  338. pyoomph-0.2.0/docs/source/tutorial/ale/remesh.rst +0 -64
  339. pyoomph-0.2.0/docs/source/tutorial/ale/remeshing.py +0 -67
  340. pyoomph-0.2.0/docs/source/tutorial/ale/solid/cantilever.gif +0 -0
  341. pyoomph-0.2.0/docs/source/tutorial/ale/solid/cantilever.py +0 -93
  342. pyoomph-0.2.0/docs/source/tutorial/ale/solid/cantilever.rst +0 -55
  343. pyoomph-0.2.0/docs/source/tutorial/ale/solid/compressed_disc.py +0 -92
  344. pyoomph-0.2.0/docs/source/tutorial/ale/solid/compressed_disc.rst +0 -51
  345. pyoomph-0.2.0/docs/source/tutorial/ale/solid/solid_oscillations.gif +0 -0
  346. pyoomph-0.2.0/docs/source/tutorial/ale/solid/solid_oscillations.py +0 -69
  347. pyoomph-0.2.0/docs/source/tutorial/ale/solid/solid_oscillations.rst +0 -36
  348. pyoomph-0.2.0/docs/source/tutorial/ale/solid.rst +0 -69
  349. pyoomph-0.2.0/docs/source/tutorial/ale/spread/droplet_spread_3d.py +0 -76
  350. pyoomph-0.2.0/docs/source/tutorial/ale/spread/droplet_spread_free_slip.py +0 -76
  351. pyoomph-0.2.0/docs/source/tutorial/ale/spread/droplet_spread_hyperelastic_tangential_shift.py +0 -134
  352. pyoomph-0.2.0/docs/source/tutorial/ale/spread/droplet_spread_marangoni_and_gravity.py +0 -139
  353. pyoomph-0.2.0/docs/source/tutorial/ale/spread/droplet_spread_sliplength.py +0 -67
  354. pyoomph-0.2.0/docs/source/tutorial/ale/spread/free.rst +0 -45
  355. pyoomph-0.2.0/docs/source/tutorial/ale/spread/hyperelastic.rst +0 -49
  356. pyoomph-0.2.0/docs/source/tutorial/ale/spread/maraandgrav.rst +0 -101
  357. pyoomph-0.2.0/docs/source/tutorial/ale/spread/navier.rst +0 -43
  358. pyoomph-0.2.0/docs/source/tutorial/ale/spread/threedim.rst +0 -49
  359. pyoomph-0.2.0/docs/source/tutorial/ale/spread.rst +0 -19
  360. pyoomph-0.2.0/docs/source/tutorial/ale.rst +0 -25
  361. pyoomph-0.2.0/docs/source/tutorial/dg/advdiffu.rst +0 -152
  362. pyoomph-0.2.0/docs/source/tutorial/dg/convection_diffusion.py +0 -93
  363. pyoomph-0.2.0/docs/source/tutorial/dg/facetfields.rst +0 -151
  364. pyoomph-0.2.0/docs/source/tutorial/dg/hdg.rst +0 -111
  365. pyoomph-0.2.0/docs/source/tutorial/dg/hdg_poisson.py +0 -163
  366. pyoomph-0.2.0/docs/source/tutorial/dg/hybrid_poisson.py +0 -113
  367. pyoomph-0.2.0/docs/source/tutorial/dg/poisson_weak_dirichlet.py +0 -89
  368. pyoomph-0.2.0/docs/source/tutorial/dg/weakdirichlet.rst +0 -68
  369. pyoomph-0.2.0/docs/source/tutorial/dg.rst +0 -27
  370. pyoomph-0.2.0/docs/source/tutorial/installation/additional.rst +0 -18
  371. pyoomph-0.2.0/docs/source/tutorial/installation/cmakeoptions.rst +0 -96
  372. pyoomph-0.2.0/docs/source/tutorial/installation/cmdlineoptions.rst +0 -181
  373. pyoomph-0.2.0/docs/source/tutorial/installation/compile.rst +0 -15
  374. pyoomph-0.2.0/docs/source/tutorial/installation/envvars.rst +0 -88
  375. pyoomph-0.2.0/docs/source/tutorial/installation/petscslepc.rst +0 -110
  376. pyoomph-0.2.0/docs/source/tutorial/installation/problems.rst +0 -12
  377. pyoomph-0.2.0/docs/source/tutorial/installation/pypa.rst +0 -106
  378. pyoomph-0.2.0/docs/source/tutorial/installation/source/linux.rst +0 -61
  379. pyoomph-0.2.0/docs/source/tutorial/installation/source/mac.rst +0 -75
  380. pyoomph-0.2.0/docs/source/tutorial/installation/wsl.rst +0 -118
  381. pyoomph-0.2.0/docs/source/tutorial/installation.rst +0 -17
  382. pyoomph-0.2.0/docs/source/tutorial/math/coordsys.rst +0 -203
  383. pyoomph-0.2.0/docs/source/tutorial/math/diffops.rst +0 -66
  384. pyoomph-0.2.0/docs/source/tutorial/math/elementary.rst +0 -85
  385. pyoomph-0.2.0/docs/source/tutorial/math/keywords.rst +0 -70
  386. pyoomph-0.2.0/docs/source/tutorial/math.rst +0 -13
  387. pyoomph-0.2.0/docs/source/tutorial/mcflow/contact.rst +0 -95
  388. pyoomph-0.2.0/docs/source/tutorial/mcflow/freesurf/details.rst +0 -60
  389. pyoomph-0.2.0/docs/source/tutorial/mcflow/freesurf/evapmdl.rst +0 -30
  390. pyoomph-0.2.0/docs/source/tutorial/mcflow/freesurf.rst +0 -66
  391. pyoomph-0.2.0/docs/source/tutorial/mcflow/gcl.rst +0 -112
  392. pyoomph-0.2.0/docs/source/tutorial/mcflow/gcl_glycerol_water_capillary.py +0 -116
  393. pyoomph-0.2.0/docs/source/tutorial/mcflow/general.rst +0 -27
  394. pyoomph-0.2.0/docs/source/tutorial/mcflow/marainstab.rst +0 -80
  395. pyoomph-0.2.0/docs/source/tutorial/mcflow/marangoni_instability.py +0 -116
  396. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/gas.rst +0 -38
  397. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/gasmix.rst +0 -71
  398. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/liquid.rst +0 -30
  399. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/liquidmix.rst +0 -26
  400. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/materials_gas_mixture.py +0 -126
  401. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/materials_liquids.py +0 -113
  402. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/materials_pure_gas.py +0 -99
  403. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/ptdep.rst +0 -52
  404. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/solids.rst +0 -6
  405. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib/temperature_and_pressure_dependency.py +0 -69
  406. pyoomph-0.2.0/docs/source/tutorial/mcflow/matlib.rst +0 -17
  407. pyoomph-0.2.0/docs/source/tutorial/mcflow/rayleigh_taylor_instability.py +0 -78
  408. pyoomph-0.2.0/docs/source/tutorial/mcflow/rtinstab.rst +0 -61
  409. pyoomph-0.2.0/docs/source/tutorial/mcflow/salts/capillary.rst +0 -82
  410. pyoomph-0.2.0/docs/source/tutorial/mcflow/salts/define.rst +0 -85
  411. pyoomph-0.2.0/docs/source/tutorial/mcflow/salts/double_layer.rst +0 -93
  412. pyoomph-0.2.0/docs/source/tutorial/mcflow/salts/double_layer_relaxation.py +0 -164
  413. pyoomph-0.2.0/docs/source/tutorial/mcflow/salts/nacl_capillary_evaporation.py +0 -140
  414. pyoomph-0.2.0/docs/source/tutorial/mcflow/salts.rst +0 -14
  415. pyoomph-0.2.0/docs/source/tutorial/mcflow/surfact/define.rst +0 -46
  416. pyoomph-0.2.0/docs/source/tutorial/mcflow/surfact/insoluble.rst +0 -37
  417. pyoomph-0.2.0/docs/source/tutorial/mcflow/surfact/insoluble_surfactant_definition.py +0 -92
  418. pyoomph-0.2.0/docs/source/tutorial/mcflow/surfact/soluble.rst +0 -90
  419. pyoomph-0.2.0/docs/source/tutorial/mcflow/surfact/soluble_surfactants.py +0 -112
  420. pyoomph-0.2.0/docs/source/tutorial/mcflow/surfact.rst +0 -12
  421. pyoomph-0.2.0/docs/source/tutorial/mcflow/unifac.rst +0 -34
  422. pyoomph-0.2.0/docs/source/tutorial/mcflow.rst +0 -22
  423. pyoomph-0.2.0/docs/source/tutorial/miscsettings/glorder.rst +0 -13
  424. pyoomph-0.2.0/docs/source/tutorial/miscsettings.rst +0 -11
  425. pyoomph-0.2.0/docs/source/tutorial/multidom/conduction.rst +0 -94
  426. pyoomph-0.2.0/docs/source/tutorial/multidom/evap.rst +0 -116
  427. pyoomph-0.2.0/docs/source/tutorial/multidom/evaporating_water_droplet.py +0 -164
  428. pyoomph-0.2.0/docs/source/tutorial/multidom/falling_droplet.py +0 -185
  429. pyoomph-0.2.0/docs/source/tutorial/multidom/falling_droplet_with_surfactants.py +0 -61
  430. pyoomph-0.2.0/docs/source/tutorial/multidom/icefront.rst +0 -122
  431. pyoomph-0.2.0/docs/source/tutorial/multidom/melting.rst +0 -106
  432. pyoomph-0.2.0/docs/source/tutorial/multidom/melting_ice_convection.py +0 -138
  433. pyoomph-0.2.0/docs/source/tutorial/multidom/simple_fsi.py +0 -87
  434. pyoomph-0.2.0/docs/source/tutorial/multidom/simple_fsi.rst +0 -49
  435. pyoomph-0.2.0/docs/source/tutorial/multidom/stokeslaw.rst +0 -86
  436. pyoomph-0.2.0/docs/source/tutorial/multidom/temperature_conduction.py +0 -106
  437. pyoomph-0.2.0/docs/source/tutorial/multidom/temperature_conduction_propagation.py +0 -137
  438. pyoomph-0.2.0/docs/source/tutorial/multidom/two_layer_flow.py +0 -95
  439. pyoomph-0.2.0/docs/source/tutorial/multidom/two_layer_flow_single_domain.py +0 -110
  440. pyoomph-0.2.0/docs/source/tutorial/multidom/twofluids.rst +0 -128
  441. pyoomph-0.2.0/docs/source/tutorial/multidom.rst +0 -19
  442. pyoomph-0.2.0/docs/source/tutorial/parallel/mpi.rst +0 -205
  443. pyoomph-0.2.0/docs/source/tutorial/parallel/openmp.rst +0 -107
  444. pyoomph-0.2.0/docs/source/tutorial/parallel.rst +0 -28
  445. pyoomph-0.2.0/docs/source/tutorial/pde/adapt/cylinder.rst +0 -143
  446. pyoomph-0.2.0/docs/source/tutorial/pde/adapt/heated_cylinder.py +0 -262
  447. pyoomph-0.2.0/docs/source/tutorial/pde/adapt/moffatt.rst +0 -219
  448. pyoomph-0.2.0/docs/source/tutorial/pde/adapt/moffatt_eddies.py +0 -205
  449. pyoomph-0.2.0/docs/source/tutorial/pde/adapt.rst +0 -41
  450. pyoomph-0.2.0/docs/source/tutorial/pde/continue.rst +0 -16
  451. pyoomph-0.2.0/docs/source/tutorial/pde/convdiffu/convdiffu_SUPG.py +0 -89
  452. pyoomph-0.2.0/docs/source/tutorial/pde/convdiffu/convdiffu_simple.py +0 -92
  453. pyoomph-0.2.0/docs/source/tutorial/pde/convdiffu/naive.rst +0 -50
  454. pyoomph-0.2.0/docs/source/tutorial/pde/convdiffu/supg.rst +0 -89
  455. pyoomph-0.2.0/docs/source/tutorial/pde/convdiffu.rst +0 -30
  456. pyoomph-0.2.0/docs/source/tutorial/pde/lubric/coalesce.rst +0 -35
  457. pyoomph-0.2.0/docs/source/tutorial/pde/lubric/lubrication.py +0 -61
  458. pyoomph-0.2.0/docs/source/tutorial/pde/lubric/lubrication_coalescence.py +0 -62
  459. pyoomph-0.2.0/docs/source/tutorial/pde/lubric/lubrication_spreading.py +0 -57
  460. pyoomph-0.2.0/docs/source/tutorial/pde/lubric/relax.rst +0 -32
  461. pyoomph-0.2.0/docs/source/tutorial/pde/lubric/spread.rst +0 -30
  462. pyoomph-0.2.0/docs/source/tutorial/pde/lubric.rst +0 -62
  463. pyoomph-0.2.0/docs/source/tutorial/pde/navier/marainstab.rst +0 -41
  464. pyoomph-0.2.0/docs/source/tutorial/pde/navier/marangoni_instability.py +0 -77
  465. pyoomph-0.2.0/docs/source/tutorial/pde/navier/navier_stokes.py +0 -78
  466. pyoomph-0.2.0/docs/source/tutorial/pde/navier/navier_stokes_around_object.py +0 -163
  467. pyoomph-0.2.0/docs/source/tutorial/pde/navier/rayleigh_taylor_instability.py +0 -67
  468. pyoomph-0.2.0/docs/source/tutorial/pde/navier/rtinstab.rst +0 -32
  469. pyoomph-0.2.0/docs/source/tutorial/pde/navier/transientstokes.rst +0 -73
  470. pyoomph-0.2.0/docs/source/tutorial/pde/navier/viscoelastic.rst +0 -117
  471. pyoomph-0.2.0/docs/source/tutorial/pde/navier/viscoelastic_cylinder.py +0 -161
  472. pyoomph-0.2.0/docs/source/tutorial/pde/navier/womersley.rst +0 -30
  473. pyoomph-0.2.0/docs/source/tutorial/pde/navier.rst +0 -47
  474. pyoomph-0.2.0/docs/source/tutorial/pde/patterns/biftrack.rst +0 -48
  475. pyoomph-0.2.0/docs/source/tutorial/pde/patterns/eigen.rst +0 -104
  476. pyoomph-0.2.0/docs/source/tutorial/pde/patterns/kse.rst +0 -78
  477. pyoomph-0.2.0/docs/source/tutorial/pde/patterns/kuramoto_sivanshinsky.py +0 -81
  478. pyoomph-0.2.0/docs/source/tutorial/pde/patterns/kuramoto_sivanshinsky_arclength_eigen.py +0 -94
  479. pyoomph-0.2.0/docs/source/tutorial/pde/patterns/kuramoto_sivanshinsky_bifurcation.py +0 -72
  480. pyoomph-0.2.0/docs/source/tutorial/pde/patterns.rst +0 -15
  481. pyoomph-0.2.0/docs/source/tutorial/pde/wave/doubleslit.rst +0 -60
  482. pyoomph-0.2.0/docs/source/tutorial/pde/wave/drums.rst +0 -43
  483. pyoomph-0.2.0/docs/source/tutorial/pde/wave/onedim.rst +0 -54
  484. pyoomph-0.2.0/docs/source/tutorial/pde/wave/wave_eq.py +0 -72
  485. pyoomph-0.2.0/docs/source/tutorial/pde/wave/wave_eq_doubleslit.py +0 -132
  486. pyoomph-0.2.0/docs/source/tutorial/pde/wave/wave_eq_drums.py +0 -79
  487. pyoomph-0.2.0/docs/source/tutorial/pde/wave.rst +0 -13
  488. pyoomph-0.2.0/docs/source/tutorial/pde.rst +0 -19
  489. pyoomph-0.2.0/docs/source/tutorial/philosophy/generate_structure_figure.py +0 -216
  490. pyoomph-0.2.0/docs/source/tutorial/philosophy/structure.svg +0 -7666
  491. pyoomph-0.2.0/docs/source/tutorial/philosophy.rst +0 -89
  492. pyoomph-0.2.0/docs/source/tutorial/plotting/droplet.rst +0 -84
  493. pyoomph-0.2.0/docs/source/tutorial/plotting/eigendynamics.py +0 -59
  494. pyoomph-0.2.0/docs/source/tutorial/plotting/eigendynamics.rst +0 -47
  495. pyoomph-0.2.0/docs/source/tutorial/plotting/eigenfuncs.rst +0 -41
  496. pyoomph-0.2.0/docs/source/tutorial/plotting/evaporating_water_droplet.py +0 -164
  497. pyoomph-0.2.0/docs/source/tutorial/plotting/kuramoto_sivanshinsky.py +0 -81
  498. pyoomph-0.2.0/docs/source/tutorial/plotting/kuramoto_sivanshinsky_arclength_eigen.py +0 -94
  499. pyoomph-0.2.0/docs/source/tutorial/plotting/kuramoto_sivanshinsky_bifurcation.py +0 -72
  500. pyoomph-0.2.0/docs/source/tutorial/plotting/one_dimensional.py +0 -137
  501. pyoomph-0.2.0/docs/source/tutorial/plotting/one_dimensional.rst +0 -97
  502. pyoomph-0.2.0/docs/source/tutorial/plotting/plotting_eigenmodes.py +0 -113
  503. pyoomph-0.2.0/docs/source/tutorial/plotting/plotting_evaporating_droplet.py +0 -96
  504. pyoomph-0.2.0/docs/source/tutorial/plotting/replotting.rst +0 -41
  505. pyoomph-0.2.0/docs/source/tutorial/plotting/rising_bubble.py +0 -239
  506. pyoomph-0.2.0/docs/source/tutorial/plotting/tracers.py +0 -114
  507. pyoomph-0.2.0/docs/source/tutorial/plotting/tracers.rst +0 -129
  508. pyoomph-0.2.0/docs/source/tutorial/plotting.rst +0 -17
  509. pyoomph-0.2.0/docs/source/tutorial/precice/coupled_heat.rst +0 -71
  510. pyoomph-0.2.0/docs/source/tutorial/precice/coupled_heat_circle.rst +0 -65
  511. pyoomph-0.2.0/docs/source/tutorial/precice/partitioned_heat_conduction.py +0 -137
  512. pyoomph-0.2.0/docs/source/tutorial/precice/partitioned_heat_conduction_circle.py +0 -136
  513. pyoomph-0.2.0/docs/source/tutorial/precice.rst +0 -18
  514. pyoomph-0.2.0/docs/source/tutorial/preface/cite.rst +0 -26
  515. pyoomph-0.2.0/docs/source/tutorial/preface/general.rst +0 -4
  516. pyoomph-0.2.0/docs/source/tutorial/preface/license.rst +0 -171
  517. pyoomph-0.2.0/docs/source/tutorial/preface/motivation.rst +0 -15
  518. pyoomph-0.2.0/docs/source/tutorial/preface/oomph_lib_comparison.rst +0 -306
  519. pyoomph-0.2.0/docs/source/tutorial/preface/whentouse.rst +0 -27
  520. pyoomph-0.2.0/docs/source/tutorial/preface.rst +0 -19
  521. pyoomph-0.2.0/docs/source/tutorial/references.rst +0 -6
  522. pyoomph-0.2.0/docs/source/tutorial/spatial/helmholtz.rst +0 -169
  523. pyoomph-0.2.0/docs/source/tutorial/spatial/helmholtz_pml.py +0 -167
  524. pyoomph-0.2.0/docs/source/tutorial/spatial/math/internals.rst +0 -19
  525. pyoomph-0.2.0/docs/source/tutorial/spatial/math/shape.rst +0 -111
  526. pyoomph-0.2.0/docs/source/tutorial/spatial/math.rst +0 -15
  527. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/byhand.rst +0 -53
  528. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/curvedline.rst +0 -104
  529. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/gmsh.rst +0 -56
  530. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/mesh_Lshape_by_hand.py +0 -89
  531. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/mesh_fish_dimensional_curved.py +0 -114
  532. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/mesh_gmsh_fish_mesh_modes.py +0 -101
  533. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/mesh_gmsh_fish_with_holes.py +0 -115
  534. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/mesh_helical_line.py +0 -79
  535. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/resolution.rst +0 -53
  536. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh/unitsandmacro.rst +0 -94
  537. pyoomph-0.2.0/docs/source/tutorial/spatial/mesh.rst +0 -18
  538. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/adapt.rst +0 -38
  539. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/cauchy.rst +0 -10
  540. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/coordsys.rst +0 -35
  541. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/neumann.rst +0 -41
  542. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/onedimcoupled.rst +0 -39
  543. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/onedimdbc.rst +0 -59
  544. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson.py +0 -67
  545. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_2d.py +0 -56
  546. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_2d_adaptive.py +0 -53
  547. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_axisymm_adaptive.py +0 -42
  548. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_coupled.py +0 -50
  549. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_neumann.py +0 -64
  550. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_pure_neumann_nullspace.py +0 -85
  551. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_robin_via_lagrange.py +0 -73
  552. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/poisson_robin_via_neumann.py +0 -55
  553. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/pureneumann.rst +0 -92
  554. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/robin.rst +0 -73
  555. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/twodim.rst +0 -59
  556. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson/weakform.rst +0 -57
  557. pyoomph-0.2.0/docs/source/tutorial/spatial/poisson.rst +0 -23
  558. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/cavity_forward_problem.py +0 -66
  559. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/cavity_inverse_problem.py +0 -82
  560. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/cr.rst +0 -67
  561. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/cr_condensation.rst +0 -145
  562. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/cr_static_condensation.py +0 -119
  563. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/dimtraction.rst +0 -81
  564. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/implement.rst +0 -54
  565. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/inverse_problem.rst +0 -136
  566. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/nonnewton.rst +0 -23
  567. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/nonormalflow.rst +0 -69
  568. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/puredirichlet.rst +0 -16
  569. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/stokes.py +0 -88
  570. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/stokes_dimensional.py +0 -100
  571. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/stokes_flow_around_object.py +0 -141
  572. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/stokes_no_normal_flow.py +0 -113
  573. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/stokes_nonnewtonian.py +0 -59
  574. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/stokes_pressure_fix.py +0 -53
  575. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/stokeslaw.rst +0 -142
  576. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes/weakform.rst +0 -25
  577. pyoomph-0.2.0/docs/source/tutorial/spatial/stokes.rst +0 -23
  578. pyoomph-0.2.0/docs/source/tutorial/spatial.rst +0 -16
  579. pyoomph-0.2.0/docs/source/tutorial/temporal/changeparams.rst +0 -87
  580. pyoomph-0.2.0/docs/source/tutorial/temporal/coupled.rst +0 -109
  581. pyoomph-0.2.0/docs/source/tutorial/temporal/coupled_oscillators_method_1.py +0 -66
  582. pyoomph-0.2.0/docs/source/tutorial/temporal/coupled_oscillators_method_2.py +0 -66
  583. pyoomph-0.2.0/docs/source/tutorial/temporal/coupled_oscillators_method_3.py +0 -76
  584. pyoomph-0.2.0/docs/source/tutorial/temporal/custom_harmonic_oscillator.py +0 -75
  585. pyoomph-0.2.0/docs/source/tutorial/temporal/custommath/custom_math_dimensional_tennis.py +0 -122
  586. pyoomph-0.2.0/docs/source/tutorial/temporal/custommath/custom_math_driven_oscillator.py +0 -75
  587. pyoomph-0.2.0/docs/source/tutorial/temporal/custommath/drivenho.rst +0 -42
  588. pyoomph-0.2.0/docs/source/tutorial/temporal/custommath/multiret.rst +0 -4
  589. pyoomph-0.2.0/docs/source/tutorial/temporal/custommath/tennis.rst +0 -109
  590. pyoomph-0.2.0/docs/source/tutorial/temporal/custommath.rst +0 -14
  591. pyoomph-0.2.0/docs/source/tutorial/temporal/dimensional_oscillator_with_units.py +0 -74
  592. pyoomph-0.2.0/docs/source/tutorial/temporal/lagrange.rst +0 -117
  593. pyoomph-0.2.0/docs/source/tutorial/temporal/nondimho.rst +0 -90
  594. pyoomph-0.2.0/docs/source/tutorial/temporal/nonlinho.rst +0 -55
  595. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit/floquet.rst +0 -98
  596. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit/hopf_switch.py +0 -95
  597. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit/hopf_switch.rst +0 -48
  598. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit/langford_floquet.py +0 -115
  599. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit/langford_time_integration.py +0 -55
  600. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit/manual_orbit.py +0 -100
  601. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit/manual_orbit.rst +0 -48
  602. pyoomph-0.2.0/docs/source/tutorial/temporal/orbit.rst +0 -45
  603. pyoomph-0.2.0/docs/source/tutorial/temporal/ownho.rst +0 -60
  604. pyoomph-0.2.0/docs/source/tutorial/temporal/parallel_running.py +0 -49
  605. pyoomph-0.2.0/docs/source/tutorial/temporal/pendulum_generalized_coordinate.py +0 -63
  606. pyoomph-0.2.0/docs/source/tutorial/temporal/pendulum_lagrange_multiplier.py +0 -100
  607. pyoomph-0.2.0/docs/source/tutorial/temporal/predefined_harmonic_oscillator.py +0 -53
  608. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/arclength.rst +0 -96
  609. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/biftrack.rst +0 -101
  610. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_branch_switching.py +0 -182
  611. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_eigenvalues_transcritical.py +0 -46
  612. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_fold_arclength.py +0 -49
  613. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_fold_arclength_eigen.py +0 -59
  614. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_fold_param_change.py +0 -66
  615. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_fold_tracking.py +0 -48
  616. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_hopf_tracking_lorenz.py +0 -91
  617. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_pitchfork_arclength_eigen.py +0 -146
  618. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_pitchfork_tracking.py +0 -48
  619. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_stationary_transcritical.py +0 -51
  620. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_transcritital_arclength_eigen.py +0 -75
  621. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/bifurcation_transient_transcritical.py +0 -66
  622. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/branchswitch.rst +0 -124
  623. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/constraints.rst +0 -113
  624. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/deflated_continuation.py +0 -65
  625. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/deflated_solve.py +0 -55
  626. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/deflation.rst +0 -71
  627. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/eigenvals.rst +0 -20
  628. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/globalparams.rst +0 -62
  629. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/jumponbif.rst +0 -73
  630. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/lorenz_lyapunov.py +0 -77
  631. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/lyapunov.rst +0 -79
  632. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/pendulum_gencoord_eigenvalues.py +0 -62
  633. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/pendulum_lagrange_eigenvalues.py +0 -52
  634. pyoomph-0.2.0/docs/source/tutorial/temporal/stability/stationary.rst +0 -28
  635. pyoomph-0.2.0/docs/source/tutorial/temporal/stability.rst +0 -22
  636. pyoomph-0.2.0/docs/source/tutorial/temporal/testfunc.rst +0 -29
  637. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/adaptive_lorenz_attractor.py +0 -65
  638. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/adaptivity.rst +0 -71
  639. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/higherorder.rst +0 -7
  640. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/implicit.rst +0 -58
  641. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/midpoint.rst +0 -79
  642. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/oscillator_TPZ_scheme.py +0 -76
  643. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/oscillator_fully_implicit_schemes.py +0 -87
  644. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/time_stepping_schemes.py +0 -76
  645. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping/timescheme.rst +0 -92
  646. pyoomph-0.2.0/docs/source/tutorial/temporal/timestepping.rst +0 -19
  647. pyoomph-0.2.0/docs/source/tutorial/temporal/units.rst +0 -63
  648. pyoomph-0.2.0/docs/source/tutorial/temporal/van_der_pol_method_1.py +0 -61
  649. pyoomph-0.2.0/docs/source/tutorial/temporal/van_der_pol_method_2.py +0 -55
  650. pyoomph-0.2.0/docs/source/tutorial/temporal.rst +0 -27
  651. pyoomph-0.2.0/docs/source/tutorial/tutorial_bundle.py +0 -235
  652. pyoomph-0.2.0/docs/source/tutorial/vibecoding.rst +0 -45
  653. pyoomph-0.2.0/docs/source/tutorial.rst +0 -32
  654. pyoomph-0.2.0/pyoomph/_version.py +0 -1
  655. pyoomph-0.2.0/tests/test_state_file_restart.py +0 -376
  656. {pyoomph-0.2.0 → pyoomph-0.2.2}/.gitignore +0 -0
  657. {pyoomph-0.2.0 → pyoomph-0.2.2}/COPYING +0 -0
  658. {pyoomph-0.2.0 → pyoomph-0.2.2}/README.md +0 -0
  659. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/aiomfac_param_import.py +0 -0
  660. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/before_build_linux.sh +0 -0
  661. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/build_petsc_slepc.sh +0 -0
  662. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/build_static_ginac_cln.sh +0 -0
  663. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/build_static_ginac_cln_msys2.sh +0 -0
  664. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/build_static_libomp.sh +0 -0
  665. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/check_accelerate_reuse.py +0 -0
  666. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/compile_win_wheels_msys2.sh +0 -0
  667. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/download_and_build_static_ginac.sh +0 -0
  668. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/nightly_develop.conf.example +0 -0
  669. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/nightly_develop.sh +0 -0
  670. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/patches/ginac-deterministic-constant-hash.patch +0 -0
  671. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/patches/ginac-deterministic-hash-seed.patch +0 -0
  672. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/patches/patch_tqmesh.cmake +0 -0
  673. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/petsc_arch_diag.py +0 -0
  674. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/resolve_ginac_cln_versions.sh +0 -0
  675. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/tutorial_report_to_summary.py +0 -0
  676. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/windows_add_tkinter.py +0 -0
  677. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/windows_stubgen_diag.py +0 -0
  678. {pyoomph-0.2.0 → pyoomph-0.2.2}/citools/windows_tcc_diag.py +0 -0
  679. {pyoomph-0.2.0 → pyoomph-0.2.2}/cmake/ThirdPartySpectra.cmake +0 -0
  680. {pyoomph-0.2.0 → pyoomph-0.2.2}/cmake/ThirdPartyTQMesh.cmake +0 -0
  681. {pyoomph-0.2.0 → pyoomph-0.2.2}/cmake/ginac_determinism_probe.cpp +0 -0
  682. {pyoomph-0.2.0 → pyoomph-0.2.2}/cmake/stubgen_launcher.py +0 -0
  683. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/__main__.py +0 -0
  684. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/_deprecation.py +0 -0
  685. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/ALE.py +0 -0
  686. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/__init__.py +0 -0
  687. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/additional.py +0 -0
  688. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/advection_diffusion.py +0 -0
  689. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/cahn_hilliard.py +0 -0
  690. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/contact_angle.py +0 -0
  691. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/darcy.py +0 -0
  692. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/electrohydrodynamics.py +0 -0
  693. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/electrostatics.py +0 -0
  694. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/generic.py +0 -0
  695. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/harmonic_oscillator.py +0 -0
  696. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/helmholtz.py +0 -0
  697. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/kuramoto_sivashinsky.py +0 -0
  698. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/lubrication.py +0 -0
  699. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/multi_component.py +0 -0
  700. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/navier_stokes.py +0 -0
  701. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/ode.py +0 -0
  702. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/poisson.py +0 -0
  703. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/potential_flow.py +0 -0
  704. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/salt_transport.py +0 -0
  705. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/solid.py +0 -0
  706. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/stokes_stream_func.py +0 -0
  707. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/equations/surfactants.py +0 -0
  708. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/coordsys.py +0 -0
  709. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/phys_consts.py +0 -0
  710. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/expressions/vtu_interpol.py +0 -0
  711. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/external_tools/basilisk/__init__.py +0 -0
  712. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/external_tools/basilisk/qcc_code_gen.py +0 -0
  713. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/__init__.py +0 -0
  714. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/adaptive_recovery.py +0 -0
  715. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/assembly.py +0 -0
  716. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/bifurcation_tools.py +0 -0
  717. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/ccompiler.py +0 -0
  718. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/codegen.py +0 -0
  719. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/dof_ordering.py +0 -0
  720. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/floquet.py +0 -0
  721. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/jit_cache.py +0 -0
  722. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/logging.py +0 -0
  723. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/generic/mpi.py +0 -0
  724. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/jitbridge/__init__.py +0 -0
  725. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/__init__.py +0 -0
  726. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/aiomfac_electrolyte.py +0 -0
  727. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/dortmund.py +0 -0
  728. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/original.py +0 -0
  729. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/__init__.py +0 -0
  730. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/csv_data/__init__.py +0 -0
  731. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/csv_data/surftens_water_12hexanediol.csv +0 -0
  732. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/csv_data/surftens_water_12hexanediol_pendant.csv +0 -0
  733. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/csv_data/surftens_water_12hexanediol_ring.csv +0 -0
  734. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/ions.py +0 -0
  735. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/mass_transfer.py +0 -0
  736. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/materials/surfactant_isotherms.py +0 -0
  737. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/__init__.py +0 -0
  738. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/curved_entities.py +0 -0
  739. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/droplet_meshes.py +0 -0
  740. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/interpolator.py +0 -0
  741. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/meshdatamerge.py +0 -0
  742. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/meshstate.py +0 -0
  743. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/ordering.py +0 -0
  744. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/simplemeshes.py +0 -0
  745. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/tqmesh.py +0 -0
  746. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/meshes/zeta.py +0 -0
  747. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/__init__.py +0 -0
  748. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/latex.py +0 -0
  749. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/plotting.py +0 -0
  750. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/plotting1d.py +0 -0
  751. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/plotting3d.py +0 -0
  752. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/output/states.py +0 -0
  753. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/paraview/pyoomph_eigen_extrusion_filter.py +0 -0
  754. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/py.typed +0 -0
  755. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/__init__.py +0 -0
  756. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/accelerate.py +0 -0
  757. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/pardiso.py +0 -0
  758. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/precice_adapter.py +0 -0
  759. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/solvers/scipy.py +0 -0
  760. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/typings/__init__.py +0 -0
  761. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/__init__.py +0 -0
  762. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/__init__.py +0 -0
  763. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/actions.py +0 -0
  764. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/model.py +0 -0
  765. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/panes.py +0 -0
  766. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/plotter.py +0 -0
  767. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/tkapp.py +0 -0
  768. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/dropgeom.py +0 -0
  769. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/halleys_method.py +0 -0
  770. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/jacobian_analysis.py +0 -0
  771. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/lyapunov.py +0 -0
  772. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/paramscan.py +0 -0
  773. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/periodic_driving_response.py +0 -0
  774. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/rectangular_polar_mapping.py +0 -0
  775. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/smallest_circle.py +0 -0
  776. {pyoomph-0.2.0 → pyoomph-0.2.2}/pyoomph/utils/sympy.py +0 -0
  777. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/Makefile +0 -0
  778. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/bifurcation.cpp +0 -0
  779. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/bifurcation.hpp +0 -0
  780. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/ccompiler.cpp +0 -0
  781. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/ccompiler.hpp +0 -0
  782. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_0d1d.cpp +0 -0
  783. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_2d.cpp +0 -0
  784. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_3d.cpp +0 -0
  785. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_adapt.cpp +0 -0
  786. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_assembly.cpp +0 -0
  787. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_concrete.hpp +0 -0
  788. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_d2shape.cpp +0 -0
  789. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_geometry.cpp +0 -0
  790. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_hanging.cpp +0 -0
  791. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/elements_shapeinfo.cpp +0 -0
  792. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/exception.cpp +0 -0
  793. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/exception.hpp +0 -0
  794. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/ginac.hpp +0 -0
  795. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/hessian_tensor.cpp +0 -0
  796. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/hessian_tensor.hpp +0 -0
  797. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/kdtree.cpp +0 -0
  798. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/kdtree.hpp +0 -0
  799. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/lagr_error_estimator.cpp +0 -0
  800. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/lagr_error_estimator.hpp +0 -0
  801. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/logging.cpp +0 -0
  802. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/logging.hpp +0 -0
  803. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mac_accelerate.cpp +0 -0
  804. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mac_accelerate.hpp +0 -0
  805. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/macroelements.cpp +0 -0
  806. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/macroelements.hpp +0 -0
  807. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh.hpp +0 -0
  808. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh1d.cpp +0 -0
  809. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh1d.hpp +0 -0
  810. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh2d.cpp +0 -0
  811. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh2d.hpp +0 -0
  812. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh3d.cpp +0 -0
  813. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/mesh3d.hpp +0 -0
  814. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/missing_masters.hpp +0 -0
  815. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/codegen.cpp +0 -0
  816. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/geom_objects.cpp +0 -0
  817. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/mesh.cpp +0 -0
  818. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/mesh_handle.hpp +0 -0
  819. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/module.cpp +0 -0
  820. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/nb_array_utils.hpp +0 -0
  821. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/patch_stubs.py +0 -0
  822. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/problem.cpp +0 -0
  823. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/solver.cpp +0 -0
  824. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/spectra/spectra.cpp +0 -0
  825. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/timestepper.cpp +0 -0
  826. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/tqmesh/tqmesh.cpp +0 -0
  827. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nanobind/vector.cpp +0 -0
  828. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nodes.cpp +0 -0
  829. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/nodes.hpp +0 -0
  830. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/oomph_lib.hpp +0 -0
  831. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/parallel_assembly.cpp +0 -0
  832. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/periodic_bspline.cpp +0 -0
  833. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/periodic_bspline.hpp +0 -0
  834. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/pointlocator.cpp +0 -0
  835. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/pointlocator.hpp +0 -0
  836. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/problem.hpp +0 -0
  837. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/pyginacstruct.hpp +0 -0
  838. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/refdomain.cpp +0 -0
  839. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/refdomain.hpp +0 -0
  840. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/refineable_telements.cpp +0 -0
  841. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/refineable_telements.hpp +0 -0
  842. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/refinement_coupling.cpp +0 -0
  843. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/refinement_coupling.hpp +0 -0
  844. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/refinement_pattern.hpp +0 -0
  845. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/INFO_delaunator +0 -0
  846. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/INFO_nanoflann +0 -0
  847. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/INFO_tqmesh +0 -0
  848. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/delaunator.hpp +0 -0
  849. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/nanoflann.hpp +0 -0
  850. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/LICENCE +0 -0
  851. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/Makefile +0 -0
  852. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/cross_compile.sh +0 -0
  853. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelement_face_coordinate_translation_schemes.cc +0 -0
  854. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelement_face_coordinate_translation_schemes.h +0 -0
  855. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelements.cc +0 -0
  856. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelements.h +0 -0
  857. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Telements.cc +0 -0
  858. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Telements.h +0 -0
  859. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Vector.h +0 -0
  860. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/algebraic_elements.cc +0 -0
  861. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/algebraic_elements.h +0 -0
  862. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/assembly_handler.cc +0 -0
  863. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/assembly_handler.h +0 -0
  864. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/binary_tree.h +0 -0
  865. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/communicator.cc +0 -0
  866. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/communicator.h +0 -0
  867. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/domain.cc +0 -0
  868. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/domain.h +0 -0
  869. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector.cc +0 -0
  870. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector.h +0 -0
  871. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector_with_halo.cc +0 -0
  872. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector_with_halo.h +0 -0
  873. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_external_element.cc +0 -0
  874. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_external_element.h +0 -0
  875. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_moving_nodes.cc +0 -0
  876. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_moving_nodes.h +0 -0
  877. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/elements.cc +0 -0
  878. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/elements.h +0 -0
  879. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/error_estimator.cc +0 -0
  880. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/error_estimator.h +0 -0
  881. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/explicit_timesteppers.cc +0 -0
  882. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/explicit_timesteppers.h +0 -0
  883. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/generalised_timesteppers.h +0 -0
  884. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/geom_objects.h +0 -0
  885. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/integral.cc +0 -0
  886. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/integral.h +0 -0
  887. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_algebra_distribution.cc +0 -0
  888. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_algebra_distribution.h +0 -0
  889. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_solver.cc +0 -0
  890. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_solver.h +0 -0
  891. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element.cc +0 -0
  892. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element.h +0 -0
  893. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element_node_update_element.cc +0 -0
  894. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element_node_update_element.h +0 -0
  895. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/map_matrix.h +0 -0
  896. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/matrices.cc +0 -0
  897. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/matrices.h +0 -0
  898. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh.cc +0 -0
  899. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh.h +0 -0
  900. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh_as_geometric_object.cc +0 -0
  901. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh_as_geometric_object.h +0 -0
  902. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/missing_masters.cc +0 -0
  903. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/missing_masters.h +0 -0
  904. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/missing_masters.template.cc +0 -0
  905. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/nodes.cc +0 -0
  906. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/nodes.h +0 -0
  907. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/octree.cc +0 -0
  908. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/octree.h +0 -0
  909. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_definitions.cc +0 -0
  910. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_definitions.h +0 -0
  911. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_utilities.cc +0 -0
  912. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_utilities.h +0 -0
  913. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/orthpoly.cc +0 -0
  914. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/orthpoly.h +0 -0
  915. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/partitioning.cc +0 -0
  916. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/partitioning.h +0 -0
  917. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/problem.cc +0 -0
  918. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/problem.h +0 -0
  919. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/quadtree.cc +0 -0
  920. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/quadtree.h +0 -0
  921. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_brick_element.cc +0 -0
  922. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_brick_element.h +0 -0
  923. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_elements.cc +0 -0
  924. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_elements.h +0 -0
  925. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_line_element.cc +0 -0
  926. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_line_element.h +0 -0
  927. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_mesh.cc +0 -0
  928. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_mesh.h +0 -0
  929. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_mesh.template.cc +0 -0
  930. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_quad_element.cc +0 -0
  931. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_quad_element.h +0 -0
  932. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_container.cc +0 -0
  933. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_container.h +0 -0
  934. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_parameters.cc +0 -0
  935. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_parameters.h +0 -0
  936. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/shape.h +0 -0
  937. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sparse_vector.h +0 -0
  938. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/timesteppers.cc +0 -0
  939. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/timesteppers.h +0 -0
  940. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/tree.cc +0 -0
  941. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/tree.h +0 -0
  942. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/tree.template.cc +0 -0
  943. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/unstructured_two_d_mesh_geometry_base.cc +0 -0
  944. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/unstructured_two_d_mesh_geometry_base.h +0 -0
  945. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thread_state.cpp +0 -0
  946. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/thread_state.hpp +0 -0
  947. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/timestepper.cpp +0 -0
  948. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/timestepper.hpp +0 -0
  949. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/tracers.cpp +0 -0
  950. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/tracers.hpp +0 -0
  951. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/wedges_and_pyramids.cpp +0 -0
  952. {pyoomph-0.2.0 → pyoomph-0.2.2}/src/wedges_and_pyramids.hpp +0 -0
  953. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/README.md +0 -0
  954. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/arclength_inner_product_worker.py +0 -0
  955. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/arclength_metric_menu_worker.py +0 -0
  956. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/axisymm_physics_worker.py +0 -0
  957. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/axisymm_reconnection_worker.py +0 -0
  958. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/benchmarks/bench_assembly.py +0 -0
  959. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/benchmarks/bench_periodic_orbit_1d.py +0 -0
  960. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/boundary_interpolation_worker.py +0 -0
  961. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/box_cases.py +0 -0
  962. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/box_cases_3d.py +0 -0
  963. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/box_mesh_3d.py +0 -0
  964. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/branch_switch_worker.py +0 -0
  965. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/command_rollback_worker.py +0 -0
  966. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/conftest.py +0 -0
  967. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/deflation_gui_worker.py +0 -0
  968. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/deflation_tab_worker.py +0 -0
  969. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/delete_branch_worker.py +0 -0
  970. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/extremum_observable_worker.py +0 -0
  971. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/floquet_worker.py +0 -0
  972. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/gui_close_teardown_worker.py +0 -0
  973. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/hopf_lyapunov_worker.py +0 -0
  974. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/inverted_remesh_worker.py +0 -0
  975. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/jit_compiler_probe.py +0 -0
  976. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_adaptive_recovery_worker.py +0 -0
  977. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_arclength_smoothing_worker.py +0 -0
  978. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_axisymm_reconnection_worker.py +0 -0
  979. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_bifurcation_worker.py +0 -0
  980. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_boundary_membership_worker.py +0 -0
  981. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_branch_switch_worker.py +0 -0
  982. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_condensation_worker.py +0 -0
  983. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_curved_worker.py +0 -0
  984. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_deflation_worker.py +0 -0
  985. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_eigen_adapt_worker.py +0 -0
  986. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_eigen_worker.py +0 -0
  987. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_eigendynamics_worker.py +0 -0
  988. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_error_estimator_worker.py +0 -0
  989. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_facet_fields_worker.py +0 -0
  990. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_global_meshdata_worker.py +0 -0
  991. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_gmsh_write_worker.py +0 -0
  992. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_missing_pymetis_worker.py +0 -0
  993. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_newton_abort_worker.py +0 -0
  994. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_openmp_worker.py +0 -0
  995. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_orbit_output_worker.py +0 -0
  996. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_periodic_worker.py +0 -0
  997. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_remesh_agreement_worker.py +0 -0
  998. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_remeshing_worker.py +0 -0
  999. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_serial_solver_worker.py +0 -0
  1000. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_state_file_worker.py +0 -0
  1001. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_structural_worker.py +0 -0
  1002. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_tracer_worker.py +0 -0
  1003. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_undistributable_worker.py +0 -0
  1004. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/mpi_worker.py +0 -0
  1005. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/must_init_worker.py +0 -0
  1006. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/normal_mode_worker.py +0 -0
  1007. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/orbit_gui_worker.py +0 -0
  1008. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/orbit_tab_worker.py +0 -0
  1009. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/periodic_cases.py +0 -0
  1010. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/petsc_options_worker.py +0 -0
  1011. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/secondary_hopf_worker.py +0 -0
  1012. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/secondary_real_bifurcation_worker.py +0 -0
  1013. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/shortcut_worker.py +0 -0
  1014. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/slab_mesh.py +0 -0
  1015. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/stale_tangent_worker.py +0 -0
  1016. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/stripe_worker.py +0 -0
  1017. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/tag_output_worker.py +0 -0
  1018. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_activity_aiomfac.py +0 -0
  1019. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_adaptive_2d_campaign.py +0 -0
  1020. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_adaptive_3d_campaign.py +0 -0
  1021. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_adaptive_interface_coupling.py +0 -0
  1022. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_adaptive_resolve_recovery.py +0 -0
  1023. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_adaptivity.py +0 -0
  1024. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_coalescence_remesh.py +0 -0
  1025. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_pinchoff_remesh.py +0 -0
  1026. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_reconnection_detect.py +0 -0
  1027. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_reconnection_tqmesh.py +0 -0
  1028. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_reconnection_transfer.py +0 -0
  1029. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_transferred_history.py +0 -0
  1030. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_axisymm_twophase_remesh.py +0 -0
  1031. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_azimuthal_mode_list.py +0 -0
  1032. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_bifurcation_tracker_jacobians.py +0 -0
  1033. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_blocksolve_refused.py +0 -0
  1034. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_boundary_element_identification.py +0 -0
  1035. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_boundary_error_estimator.py +0 -0
  1036. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_boundary_interpolation_fixes.py +0 -0
  1037. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_compilers.py +0 -0
  1038. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_constrained_adaptivity.py +0 -0
  1039. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_critical_wavenumber_tracker.py +0 -0
  1040. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_curved_boundaries.py +0 -0
  1041. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_deflation.py +0 -0
  1042. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_deprecated_coordsys_kwarg.py +0 -0
  1043. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_desired_ndof.py +0 -0
  1044. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_dirichlet_matrix_manipulation.py +0 -0
  1045. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_dof_description_walk.py +0 -0
  1046. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_dof_ordering.py +0 -0
  1047. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_domain_name_patterns.py +0 -0
  1048. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_droplet_coalescence.py +0 -0
  1049. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_ehd.py +0 -0
  1050. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_eigen_during_tracking.py +0 -0
  1051. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_electrostatics.py +0 -0
  1052. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_facet_adjacency.py +0 -0
  1053. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_floquet_multipliers.py +0 -0
  1054. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_generated_code_expressions.py +0 -0
  1055. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_globally_convergent_newton.py +0 -0
  1056. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_hopf_lyapunov.py +0 -0
  1057. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_interface_mesh_stiffening.py +0 -0
  1058. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_internal_facet_fields.py +0 -0
  1059. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_jacobian_block_flags.py +0 -0
  1060. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_linear_response.py +0 -0
  1061. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_linear_solver_selfcheck.py +0 -0
  1062. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_loaded_text_file.py +0 -0
  1063. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mixed_3d.py +0 -0
  1064. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mixed_mesh.py +0 -0
  1065. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mixture_by_concentration.py +0 -0
  1066. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_adaptive_recovery.py +0 -0
  1067. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_adaptivity.py +0 -0
  1068. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_adaptivity_3d.py +0 -0
  1069. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_arclength_smoothing.py +0 -0
  1070. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_bifurcation_tracking.py +0 -0
  1071. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_boundary_membership.py +0 -0
  1072. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_branch_switch.py +0 -0
  1073. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_curved_boundaries.py +0 -0
  1074. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_deflation.py +0 -0
  1075. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_dof_description.py +0 -0
  1076. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_dof_ordering.py +0 -0
  1077. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_dof_ordering_rowsplit.py +0 -0
  1078. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_eigen_adapt.py +0 -0
  1079. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_eigendynamics.py +0 -0
  1080. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_eigenvalues.py +0 -0
  1081. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_error_estimator.py +0 -0
  1082. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_facet_fields.py +0 -0
  1083. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_floquet.py +0 -0
  1084. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_global_meshdata.py +0 -0
  1085. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_hopf_lyapunov.py +0 -0
  1086. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_interface_coupling.py +0 -0
  1087. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_newton_abort.py +0 -0
  1088. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_openmp_assembly.py +0 -0
  1089. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_orbit_output.py +0 -0
  1090. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_periodic.py +0 -0
  1091. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_rank_zero_failures.py +0 -0
  1092. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_remeshing.py +0 -0
  1093. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_row_layout.py +0 -0
  1094. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_serial_linear_solvers.py +0 -0
  1095. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_state_files.py +0 -0
  1096. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_static_condensation.py +0 -0
  1097. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_structural_assembly.py +0 -0
  1098. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_tracers.py +0 -0
  1099. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_mpi_undistributable.py +0 -0
  1100. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_multiple_problems.py +0 -0
  1101. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_newton_abort.py +0 -0
  1102. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_normal_derivatives.py +0 -0
  1103. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_normal_form_degenerate_a.py +0 -0
  1104. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_normal_form_units.py +0 -0
  1105. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_normal_mode_branch_switch.py +0 -0
  1106. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_openmp_assembly.py +0 -0
  1107. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_openmp_present.py +0 -0
  1108. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_output_vector_tensor_grouping.py +0 -0
  1109. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_petsc_options_hygiene.py +0 -0
  1110. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_plotter1d_secondary_axis.py +0 -0
  1111. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_pyramid_refinement.py +0 -0
  1112. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_quadrature.py +0 -0
  1113. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_rayleigh_plateau_pinchoff.py +0 -0
  1114. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_remesh_inside_solve.py +0 -0
  1115. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_remeshing_leaks.py +0 -0
  1116. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_salt_transport.py +0 -0
  1117. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_second_derivatives.py +0 -0
  1118. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_segment_ordering.py +0 -0
  1119. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_shared_equations.py +0 -0
  1120. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_slepc_present.py +0 -0
  1121. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_solid_momentum.py +0 -0
  1122. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_solver_deflation_hook.py +0 -0
  1123. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_solver_failure_recovery.py +0 -0
  1124. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_spectra_eigensolver.py +0 -0
  1125. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_spectra_present.py +0 -0
  1126. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_stabilized_transport.py +0 -0
  1127. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_state_file_header.py +0 -0
  1128. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_state_file_relocation.py +0 -0
  1129. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_state_file_template_class.py +0 -0
  1130. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_static_condensation.py +0 -0
  1131. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_stokes.py +0 -0
  1132. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_stubs_present.py +0 -0
  1133. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_surface_charge_transport.py +0 -0
  1134. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_surfactant_transport.py +0 -0
  1135. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_symmetric_solver_switch.py +0 -0
  1136. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_tensor_fields.py +0 -0
  1137. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_tet_refinement.py +0 -0
  1138. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_triangle_refinement.py +0 -0
  1139. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_two_live_problems.py +0 -0
  1140. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_vectorial_conditions.py +0 -0
  1141. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_viscoelastic.py +0 -0
  1142. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_viscoelastic_cylinder.py +0 -0
  1143. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/test_wedge_refinement.py +0 -0
  1144. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/tracked_state_worker.py +0 -0
  1145. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/transient_leave_worker.py +0 -0
  1146. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/two_domain_cases.py +0 -0
  1147. {pyoomph-0.2.0 → pyoomph-0.2.2}/tests/units_worker.py +0 -0
@@ -1,5 +1,101 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.2] - 2026-10-04
4
+
5
+ 79 commits since 0.2.1. Three themes: symbolic code generation that no longer treats an expression
6
+ DAG as a tree, an analytic Hessian that reaches through multi-return callbacks, and MUMPS reachable
7
+ without PETSc. Plus a long tail of remesh, continuation and `--distribute` fixes.
8
+
9
+ ### Added
10
+
11
+ - **MUMPS without PETSc**, via the separate `pyoomph_mumps` package: the linear solver `--mumps`
12
+ (serial or natively distributed) and the eigensolver `--mumps_eigen` (Spectra with MUMPS
13
+ factorising the shifted matrix, real and complex), so azimuthal and Floquet stability no longer
14
+ need a full PETSc+SLEPc stack.
15
+ - **Analytic Hessians through `CustomMultiReturnExpression`**, which brings the UNIFAC and AIOMFAC
16
+ activity coefficients, the log-conformation decompositions, `InvertMatrix` and the Cahn-Hilliard
17
+ potentials within reach of the eigenvalue, bifurcation, Floquet and orbit workflows.
18
+ - **The exact UNIFAC Jacobian is emitted into the generated C** instead of being finite-differenced
19
+ (`analytic_c_jacobian=False` restores the old body).
20
+ - **Liquid-mixture diffusivity estimation from the activity coefficients**,
21
+ `MixtureLiquidProperties.set_estimate_diffusivities()`.
22
+ - **Symbolic comparisons and branching**: `var("time") < 2*second` yields a held relational
23
+ expression, `conditional(cond, iftrue, iffalse)` compiles it to a C ternary, and comparisons
24
+ combine with `~`, `&`, `|` and `^`.
25
+ - **`is_zero(..., tensors=True)`** recognises a zero vector or matrix, which the plain test never did.
26
+ - **NSCH: a C1 clamp for density and viscosity**, plus an optional temporal error estimator; the old
27
+ branch-wise clamp made Newton two-cycle once the phase field overshot `|phi|>1`.
28
+ - **`--where` now also picks the state a `--runmode c` resumes from**, taking a `.dump` file, `i=N`,
29
+ `t=X` or a bool expression over `step` and `time`.
30
+ - **Tracer collections living on an interface are written to state files** (state format 0.1.6);
31
+ they were previously lost on `--runmode c`.
32
+
33
+ ### Changed / Improved
34
+
35
+ - **Code generation treats the residual as the DAG it is**, memoising or converting to DAG walks the
36
+ residual mappers, `MakeResidualSteady`, the subexpression-to-struct mapper, the parameter
37
+ substitution of the `dResidual/dParameter` loop, the two collectors and the last preorder scans of
38
+ the emission path -- a UNIFAC mass-transfer residual under `azimuthal_stability=True` previously
39
+ never finished at all.
40
+ - **The unit split skips `collect_common_factors` above a term count**, which is where an
41
+ evaporating droplet's never-returning split spent all of its samples.
42
+ - **`write_code` reports where it spends its time**, per residual set, with mapper and memo counters.
43
+ - **GiNaC patches** for `real_part`/`imag_part` of an integer power, `pow(0,0)`, a real and
44
+ commutative `subexpression()` marker, number lookups in `ex`-keyed caches, and a unit under a
45
+ symbolic exponent; the patch step re-runs when the patch set changes.
46
+ - **A spline macro element is parametrised by arclength** rather than the raw spline parameter, so
47
+ refinement puts new nodes at the geometric midpoint of an edge after a remesh.
48
+ - **Units written into a data file no longer contain a space**, which made them unreadable to
49
+ anything but pyoomph's own reader.
50
+ - **"There is no domain X defined in this mesh" after a remesh now says what it means**: the mesher
51
+ was handed a geometry it could not fill.
52
+ - The documentation builds against the current Sphinx generation.
53
+
54
+ ### Fixed
55
+
56
+ - **The arclength continuation tangent is carried correctly across a remesh or an adapt** -- five
57
+ defects that each left the arclength invariant satisfied while the tangent pointed elsewhere, so
58
+ nothing reported them.
59
+ - **Two defects in the viscoelastic equations on a moving mesh**, both invisible on the static,
60
+ dimensionless meshes the tests used.
61
+ - **Axisymmetric pinch-off and coalescence beside a wall survive their own surgery**, and the
62
+ degenerate branch of the zeta invertibility check is now pinned by tests.
63
+ - **Remeshing on an inverted element asks for a different mesh on each retry**, scaling
64
+ `default_resolution` so that the gmsh size fields move too.
65
+ - **Under `--distribute`**: a 1-D submesh survives a rank that gets none of it, an unowned interface
66
+ dof is skipped during interface generation, the nearest-node fallback searches the old mesh
67
+ globally, and fragment counting agrees across ranks.
68
+ - **State files**: tracer collections are restored when the file brings its own mesh, and a template
69
+ rebuilt from a stored `.msh` keeps its boundary corner sizes.
70
+ - **A resumed run leaves the output files an uninterrupted one would write**, rather than a time
71
+ column that runs forwards and then jumps back.
72
+ - **Two reference leaks**: a delayed expansion pinned both itself and its callable, and a mixture
73
+ stayed uncollectible once it had a multi-return activity model.
74
+ - `get_real_part()`/`get_imag_part()` split an argument that no longer contains a field.
75
+ - `numouts` produces at least one output.
76
+ - Docstring markup that rendered as artifacts on Read the Docs, NSCH's forward references under
77
+ Sphinx, the clone URL on the two source-install pages, and the macOS stubs.
78
+
79
+ ### Packaging & CI
80
+
81
+ - **The source distribution ships the sources, not the whole checkout**: 0.2.1 was 9.6 MB, most of it
82
+ a `docs/` tree that `.gitignore` had already punched holes in.
83
+ - arm64 Macs are pointed at `pyoomph_mumps`, and the deprecated `x86_64` arch is dropped for the
84
+ current Command Line Tools.
85
+ - `Programming Language :: Python :: 3.14` is declared, which the cp312 Stable-ABI wheel already
86
+ covers and is smoke-tested on.
87
+ - Test helper scripts in `tests/` are importable, so `pytest *.py` does not collect them as tests.
88
+
89
+ ## [0.2.1]
90
+
91
+ Released as urgent patch of 0.2.0.
92
+
93
+ ### Fixed
94
+
95
+ - **A two-sided interface could exhaust the machine's memory during the first assembly.** The pruned sparsity pattern (`prune_structural_zeros_by_field_coupling`, on by
96
+ default since 0.2.0) let the two sides of a coupled interface ask each other for an answer each was
97
+ still computing, which recursed without bound.
98
+
3
99
  ## [0.2.0] - 2026-08-30
4
100
 
5
101
  About six weeks and 940+ commits since 0.1.9. Four themes: h-adaptivity generalised from quads and
@@ -451,6 +451,7 @@ if(PYOOMPH_GENERATE_STUBS)
451
451
  COMMAND "${Python_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/cmake/generate_stubs.py"
452
452
  --module-dir "$<TARGET_FILE_DIR:_pyoomph_core>"
453
453
  --module-name "_pyoomph_core"
454
+ --expect-file "$<TARGET_FILE:_pyoomph_core>"
454
455
  --stage-dir "${PYOOMPH_STUB_STAGE_DIR}"
455
456
  --patch-script "${CMAKE_SOURCE_DIR}/src/nanobind/patch_stubs.py"
456
457
  --python "${Python_EXECUTABLE}"
@@ -16,58 +16,31 @@ Verify whether everything runs fine by
16
16
 
17
17
  > python -m pyoomph check all
18
18
 
19
- If you encounter segmentation faults during solving, please try to downgrade your MKL package, e.g. via *python -m pip install mkl==2024.1.0*.
20
-
21
- ### PETSc/SLEPc via WSL
22
-
23
- PETSc/SLEPc (used for a much more stable eigensolver, see the [tutorial](https://pyoomph.readthedocs.io/)) cannot be built natively on Windows. If you need it, install pyoomph inside the [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/windows/wsl/) instead, where it can be built exactly as on native Linux.
24
-
25
- From an elevated PowerShell:
26
-
27
- ```powershell
28
- wsl --install -d Ubuntu
29
- ```
19
+ If you encounter segmentation faults during solving, please try to upgrade or downgrade your MKL package, e.g. via *python -m pip install mkl==2024.1.0*.
30
20
 
31
- Reboot if prompted, open the "Ubuntu" app, then inside it install pyoomph as on Linux (see below), keeping the source trees on the Linux filesystem (e.g. `~/...`, not `/mnt/c/...`):
32
-
33
- ```bash
34
- sudo apt update
35
- sudo apt install gcc libopenmpi-dev flex bison
36
- python3 -m pip install --upgrade pyoomph
37
- ```
21
+ ## On Linux
38
22
 
39
- Then build PETSc/SLEPc as on Linux:
23
+ If you have installed via pip (see above), just make sure that you have the `gcc` compiler installed and check via
40
24
 
41
- ```bash
42
- cd A_FOLDER_OF_YOUR_CHOICE
43
- git clone -b release https://gitlab.com/petsc/petsc.git petsc
44
- cd petsc
45
- export PETSC_DIR=$(pwd)
46
- export PETSC_ARCH=pyoomph_petsc_arch
47
- ./configure --with-mpi --with-petsc4py --download-mumps=yes --download-hypre=yes --download-parmetis=yes --download-ptscotch=yes --download-slepc=yes --download-superlu=yes --download-superlu_dist=yes --download-suitesparse=yes --download-metis=yes --download-scalapack --with-scalar-type=complex
48
- ```
25
+ > python -m pyoomph check all
49
26
 
50
- `configure` prints the exact `make` command to run next. Afterwards, add to `~/.bashrc`:
27
+ If you encounter segmentation faults during solving, please try to downgrade your MKL package, e.g. via *python -m pip install mkl==2024.1.0*.
51
28
 
52
- ```bash
53
- export PETSC_DIR=A_FOLDER_OF_YOUR_CHOICE/petsc
54
- export PETSC_ARCH=pyoomph_petsc_arch
55
- export PYTHONPATH=$PYTHONPATH:$PETSC_DIR/$PETSC_ARCH/lib
56
- ```
29
+ ## On Mac
57
30
 
58
- If `make` is killed for running out of memory, raise the memory available to WSL2 via `C:\Users\<you>\.wslconfig` (`[wsl2]` section, `memory=8GB`), then `wsl --shutdown` and reopen. If you use VS Code, install the "WSL" remote extension and open the project from within WSL so the editor picks up the environment variables above. Full details, including how to select the SLEPc/MUMPS eigensolver, are in the [tutorial](https://pyoomph.readthedocs.io/en/latest/tutorial/installation/wsl.html).
31
+ The fast `MKL Pardiso` solver from `mkl` is not available on `arm64` Macs - Intel does not ship `mkl` for `arm64` at all. Since the default solver on `arm64` Macs (`Accelerate`) is unable to tackle larger problems at reasonable times, you definitely either want to use `MUMPS` or `MKL Pardiso` with a workaround.
59
32
 
60
- ## On Linux
33
+ The recommended way is `MUMPS`, which runs natively on `arm64`. There are two routes:
61
34
 
62
- If you have installed via pip (see above), just make sure that you have the `gcc` compiler installed and check via
35
+ * the standalone [pyoomph_mumps](https://github.com/pyoomph/pyoomph_mumps) package, which binds `MUMPS` directly and needs no `PETSc`. It gives you the `mumps` linear solver (`--mumps`) and, via pyoomph's built-in `Spectra` eigensolver, the `mumps` eigensolver (`--mumps_eigen`), in real and complex arithmetic. Install it (a Fortran compiler is required, e.g. by `brew install gcc`) via
63
36
 
64
- > python -m pyoomph check all
37
+ > git clone https://github.com/pyoomph/pyoomph_mumps.git ; cd pyoomph_mumps ; python3 -m pip install .
65
38
 
66
- If you encounter segmentation faults during solving, please try to downgrade your MKL package, e.g. via *python -m pip install mkl==2024.1.0*.
39
+ See [here](https://pyoomph.readthedocs.io/en/latest/tutorial/installation/mumps.html) for details and build options.
67
40
 
68
- ## On Mac
41
+ * `PETSc/MUMPS`, i.e. `MUMPS` through `PETSc`, which additionally gives you `PETSc` as linear solver and `SLEPc` as (also distributed) eigensolver, but is considerably more to install. See [here](https://pyoomph.readthedocs.io/en/latest/tutorial/installation/petscslepc.html) for details.
69
42
 
70
- The fast `MKL Pardiso` solver from `mkl` is not available on `arm64` Macs. If you want to use it, install pyoomph in a `Rosetta 2 terminal`, see [here](https://www.courier.com/blog/tips-and-tricks-to-setup-your-apple-m1-for-development/) how to set it up (**note**: recent systems must be handled differently, see [here](https://developer.apple.com/forums/thread/718666)).
43
+ To use `MKL Pardiso` instead, install pyoomph in a `Rosetta 2 terminal`, see [here](https://www.courier.com/blog/tips-and-tricks-to-setup-your-apple-m1-for-development/) how to set it up (**note**: recent systems must be handled differently, see [here](https://developer.apple.com/forums/thread/718666)). Note that Apple's x86_64 support degrades with every system update, so this route gets harder over time (the newer Command Line Tools cannot compile x86_64 any more, see the [documentation](https://pyoomph.readthedocs.io/en/latest/tutorial/installation/source/mac.html)).
71
44
  Also, please downgrade `mkl` by
72
45
 
73
46
  > python3 -m pip install mkl==2021.4.0
@@ -80,8 +53,6 @@ and test pyoomph via
80
53
 
81
54
  > python -m pyoomph check all
82
55
 
83
- Alternatively, if you do not want to use the `Rosetta 2 terminal` detour, you can also install it directly on arm64 systems. This will use the `Accelerate Framework` as default solver.
84
-
85
56
 
86
57
  ## Compilation from source (including MPI)
87
58
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyoomph
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: pyoomph - a multi-physics finite element framework based on oomph-lib and GiNaC
5
5
  Author-Email: Christian Diddens <c.diddens@utwente.nl>, Duarte Rocha <d.rocha@utwente.nl>, Maxim de Wildt <m.dewildt@utwente.nl>
6
6
  License: GNU GENERAL PUBLIC LICENSE Version 3
@@ -861,6 +861,7 @@ Classifier: Programming Language :: Python :: 3.10
861
861
  Classifier: Programming Language :: Python :: 3.11
862
862
  Classifier: Programming Language :: Python :: 3.12
863
863
  Classifier: Programming Language :: Python :: 3.13
864
+ Classifier: Programming Language :: Python :: 3.14
864
865
  Classifier: Topic :: Scientific/Engineering
865
866
  Classifier: Topic :: Scientific/Engineering :: Mathematics
866
867
  Classifier: Topic :: Scientific/Engineering :: Physics
@@ -189,7 +189,7 @@ def emit_short_range(p: AIOMFACParameters, keep_names: dict[int, str]) -> str:
189
189
 
190
190
  ##########################################################################################
191
191
  # These parameters stem from the AIOMFAC activity model
192
- #\t\thttp://www.aiomfac.caltech.edu/
192
+ #\t\thttps://aiomfac.lab.mcgill.ca/
193
193
  #
194
194
  # For the source code and parameter tables (GPL v3), see
195
195
  #\t\thttps://github.com/andizuend/AIOMFAC
@@ -207,7 +207,7 @@ from ..activity import UNIFACLikeActivityModel,ActivityModel
207
207
  @ActivityModel.register_activity_model()
208
208
  class AIOMFAC(UNIFACLikeActivityModel):
209
209
  """
210
- AIOMFAC activity model (http://www.aiomfac.caltech.edu/), parameters taken from the AIOMFAC
210
+ AIOMFAC activity model (https://aiomfac.lab.mcgill.ca/), parameters taken from the AIOMFAC
211
211
  source code (https://github.com/andizuend/AIOMFAC).
212
212
 
213
213
  Cite the publications when using this activity model (https://aiomfac.lab.mcgill.ca/citation.html).
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env bash
2
+ # Applies pyoomph's GiNaC patches to a GiNaC source tree (run with cwd = the
3
+ # extracted GiNaC source root, i.e. the directory containing ginac/).
4
+ #
5
+ # Idempotent by design: cmake/ThirdPartyGiNaC.cmake makes the ExternalProject
6
+ # patch step depend on this script and on every *.patch beside it, so touching
7
+ # any of them re-runs the step against a tree that is already (partly) patched.
8
+ # A plain `patch -p1 -i ...` fails loudly the second time ("Reversed (or
9
+ # previously applied) patch detected!"), so each patch has to be recognised as
10
+ # already applied and skipped - while a genuine mismatch (e.g. GiNaC source
11
+ # changed unexpectedly) still aborts the build loudly.
12
+ #
13
+ # That recognition used to be "reverse-dry-run the whole patch; if it applies,
14
+ # it is already applied". That is wrong for patches that touch the same region
15
+ # of the same file, and it broke the 2026-09-22 nightly: patch 5 inserts
16
+ # exact_whole_number_exponent() and the real_part()/imag_part() preamble
17
+ # exactly into patch 4's trailing context, so against a tree carrying both,
18
+ # patch 4 no longer reverses (its hunk 1 wants power::real_part() to follow
19
+ # binomial_expansion_pow(), and now it does not) while its hunk 1 still
20
+ # *forward*-matched with fuzz somewhere else. Neither branch held and the
21
+ # script aborted on a correctly patched tree.
22
+ #
23
+ # So record what was applied instead of re-deriving it: a stamp per patch under
24
+ # $stamp_dir, holding that patch's checksum. The stamp lives inside the source
25
+ # tree, so a re-extracted tarball correctly starts over, and editing a patch
26
+ # invalidates only its own stamp. The two fallbacks below adopt a tree that was
27
+ # patched before stamps existed - including the tree the 2026-09-22 failure
28
+ # left behind - and write its stamps, so this heals in place with no need to
29
+ # blow away build/.
30
+ set -euo pipefail
31
+
32
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
+ stamp_dir=".pyoomph-ginac-patches"
34
+
35
+ # The first two fix the same class of bug (GiNaC hashing the ASLR-dependent
36
+ # address of an RTTI type-name string instead of something deterministic) in
37
+ # two different spots; the third stops power::to_polynomial() recursing
38
+ # forever on a negative integer power of a power with a symbolic exponent; the
39
+ # fourth stops power::real_part()/imag_part() raising pow(0,0) on the end terms
40
+ # of their binomial expansion; the fifth lets those two use that binomial branch
41
+ # for an inexact whole-number exponent (2.0) as well, instead of falling through
42
+ # to a polar form that buries the basis in an atan2.
43
+ # See each patch's own header comment for the full rationale. Applied in
44
+ # order; add further patches to this list as found.
45
+ patches=(
46
+ "ginac-deterministic-hash-seed.patch"
47
+ "ginac-deterministic-constant-hash.patch"
48
+ "ginac-to-polynomial-symbolic-exponent.patch"
49
+ "ginac-binomial-real-imag-pow00.patch"
50
+ "ginac-inexact-whole-number-exponent.patch"
51
+ )
52
+
53
+ # Every non-blank line a patch adds, already present in the file it adds it to?
54
+ # The last-resort "already applied" test, and the only one that survives a
55
+ # later patch rewriting an earlier one's context: it asks about the state of
56
+ # the tree rather than about whether patch(1) can still line the hunks up.
57
+ # Exact whole-line matching, so it does not confuse an added line with a
58
+ # similar one elsewhere; context and removed lines are deliberately ignored.
59
+ added_lines_all_present() {
60
+ awk '
61
+ /^\+\+\+ / { target = $2; sub(/^b\//, "", target); next }
62
+ /^--- / { next }
63
+ /^\+/ {
64
+ if (target == "")
65
+ next
66
+ line = substr($0, 2)
67
+ if (line ~ /^[[:space:]]*$/)
68
+ next
69
+ if (!(target in loaded)) {
70
+ loaded[target] = 1
71
+ while ((getline l < target) > 0)
72
+ present[target SUBSEP l] = 1
73
+ close(target)
74
+ }
75
+ if (!((target SUBSEP line) in present))
76
+ ok = 1
77
+ }
78
+ END { exit ok }
79
+ ' "$1"
80
+ }
81
+
82
+ # sha256sum is GNU coreutils and is NOT on a stock macOS: the arm64 prebuild runner died here with
83
+ # "sha256sum: command not found" (exit 127) while the Intel one happened to have coreutils pulled in
84
+ # by some other brew formula, so this broke on exactly one of the four prebuild platforms. BSD/macOS
85
+ # ships `shasum -a 256` instead, and openssl is the last resort for an image with neither. Only the
86
+ # hex digest is wanted, hence the cut in every branch - the three tools pad and order their output
87
+ # differently ("<hash> <file>" for the first two, "SHA256(<file>)= <hash>" for openssl).
88
+ if command -v sha256sum >/dev/null 2>&1; then
89
+ checksum_of() { sha256sum "$1" | cut -d' ' -f1; }
90
+ elif command -v shasum >/dev/null 2>&1; then
91
+ checksum_of() { shasum -a 256 "$1" | cut -d' ' -f1; }
92
+ elif command -v openssl >/dev/null 2>&1; then
93
+ checksum_of() { openssl dgst -sha256 "$1" | awk '{print $NF}'; }
94
+ else
95
+ echo "none of sha256sum, shasum or openssl is available; cannot checksum the patches" >&2
96
+ exit 1
97
+ fi
98
+
99
+ mkdir -p "$stamp_dir"
100
+
101
+ for patch_name in "${patches[@]}"; do
102
+ patch_file="$script_dir/$patch_name"
103
+ stamp_file="$stamp_dir/$patch_name.applied"
104
+ checksum="$(checksum_of "$patch_file")"
105
+
106
+ if [ -f "$stamp_file" ] && [ "$(cat "$stamp_file")" = "$checksum" ]; then
107
+ echo "$patch_name already applied (stamp), skipping."
108
+ continue
109
+ fi
110
+
111
+ # --fuzz=0: a hunk must match exactly. With patch(1)'s default fuzz of 2 an
112
+ # already-applied patch can half-match somewhere else entirely - which is
113
+ # how patch 4 reported "Hunk #1 succeeded at 698 with fuzz 1 (offset 36
114
+ # lines)" against a tree that already had it - and applying that would
115
+ # duplicate the addition rather than fail.
116
+ if patch -p1 -N --fuzz=0 --dry-run -s -i "$patch_file" >/dev/null 2>&1; then
117
+ patch -p1 -N --fuzz=0 -i "$patch_file"
118
+ elif patch -p1 -R --fuzz=0 --dry-run -s -i "$patch_file" >/dev/null 2>&1; then
119
+ echo "$patch_name already applied (reverses cleanly), recording stamp."
120
+ elif added_lines_all_present "$patch_file"; then
121
+ echo "$patch_name already applied (every added line present), recording stamp."
122
+ else
123
+ echo "ERROR: $patch_name does not apply to $(pwd) and is not already applied - GiNaC source may have changed unexpectedly." >&2
124
+ exit 1
125
+ fi
126
+
127
+ printf '%s\n' "$checksum" > "$stamp_file"
128
+ done
@@ -0,0 +1,55 @@
1
+ Stop GiNaC::power::real_part()/imag_part() from raising "pow(0,0) is undefined" on an integer power
2
+ whose basis has a zero real or a zero imaginary part.
3
+
4
+ Both build Re/Im of (a+I*b)^N from the binomial expansion and write each term as
5
+ binomial(NN,n) * pow(a, NN-n) * pow(b, n). A binomial expansion needs the 0^0 == 1 convention for
6
+ its end terms, and GiNaC's pow() refuses: pow(0,0) throws. So (I*x)^2, whose expansion contains the
7
+ factor a^0 with a == Re(I*x) == 0, aborts code generation with a ValueError that says nothing about
8
+ where it came from. Every terminating case is unchanged: pow(x,0) is 1 for every x for which the
9
+ old code did not throw.
10
+
11
+ pyoomph reaches it from the azimuthal real/imaginary split. subexpression() now reports the real and
12
+ imaginary parts of a marker whose content is provably real (that is what keeps the split from
13
+ multiplying products out, see dev_docs/subexpression_unit_analysis_stall.md), so mul::find_real_imag
14
+ can now conclude that the real part of a factor is exactly zero, where before it produced a held
15
+ real_part() node that was never zero. The GiNaC bug is independent of pyoomph - "ex e = pow(I*x, 2);
16
+ e.real_part();" reproduces it - and is what to send upstream.
17
+
18
+ --- a/ginac/power.cpp
19
+ +++ b/ginac/power.cpp
20
+ @@ -662,6 +662,17 @@
21
+ return conjugate_function(*this).hold();
22
+ }
23
+
24
+ +// x^n for one factor of a binomial expansion, with the 0^0 == 1 convention that such an expansion
25
+ +// requires. GiNaC's pow() throws "power::eval(): pow(0,0) is undefined" instead, which makes
26
+ +// real_part()/imag_part() of an integer power abort whenever the basis has a zero real OR a zero
27
+ +// imaginary part - e.g. (I*x)^2, whose expansion contains a term with the factor a^0 = 0^0.
28
+ +static ex binomial_expansion_pow(const ex & x, long n)
29
+ +{
30
+ + if (n == 0)
31
+ + return _ex1;
32
+ + return pow(x, n);
33
+ +}
34
+ +
35
+ ex power::real_part() const
36
+ {
37
+ // basis == a+I*b, exponent == c+I*d
38
+ @@ -683,7 +694,7 @@
39
+ ex numer = N > 0 ? _ex1 : pow(pow(a,2) + pow(b,2), NN);
40
+ ex result = 0;
41
+ for (long n = 0; n <= NN; n += 2) {
42
+ - ex term = binomial(NN, n) * pow(a, NN-n) * pow(b, n) / numer;
43
+ + ex term = binomial(NN, n) * binomial_expansion_pow(a, NN-n) * binomial_expansion_pow(b, n) / numer;
44
+ if (n % 4 == 0) {
45
+ result += term; // sign: I^n w/ n == 4*m
46
+ } else {
47
+ @@ -720,7 +731,7 @@
48
+ ex numer = N > 0 ? _ex1 : pow(pow(a,2) + pow(b,2), NN);
49
+ ex result = 0;
50
+ for (long n = 1; n <= NN; n += 2) {
51
+ - ex term = binomial(NN, n) * pow(a, NN-n) * pow(b, n) / numer;
52
+ + ex term = binomial(NN, n) * binomial_expansion_pow(a, NN-n) * binomial_expansion_pow(b, n) / numer;
53
+ if (n % 4 == p) {
54
+ result += term; // sign: I^n w/ n == 4*m+p
55
+ } else {
@@ -0,0 +1,78 @@
1
+ Make GiNaC::power::real_part()/imag_part() use their integer-binomial branch for an INEXACT
2
+ whole-number exponent too, instead of falling through to the polar form.
3
+
4
+ Both decide whether the (exact, rational) binomial expansion of Re/Im of (a+I*b)^N applies by asking
5
+ exponent.info(integer). An inexact 2.0 does not satisfy that even though the expansion is just as
6
+ valid for it, so they take the general branch
7
+
8
+ |X|^c * exp(-d*atan2(b,a)) * cos(c*atan2(b,a) + d*log|X|)
9
+
10
+ which is mathematically right and useless to a caller that must not have the basis appear inside a
11
+ transcendental function. In pyoomph it is the dimensional analysis of a residual that then fails:
12
+ the basis is a mass density, atan2 hides its units from collect_base_units(), and code generation
13
+ aborts with "The added residual contribution is not dimensionless. It still carries the base units:
14
+ kilogram, meter". The exponent reached that state through a cache that compared the exact -2 to a
15
+ stored -2.0 - GiNaC hashes and compares numbers by value, and ex::compare() then unifies the two by
16
+ pointer, rewriting the power in place.
17
+
18
+ That cache is fixed in pyoomph, and keeping numbers exact is where the problem belongs. This is the
19
+ backstop for the whole class: an exponent that is an integer VALUE is treated as the integer it is,
20
+ by redoing the call with the exact number. Nothing else changes - every case that already took the
21
+ binomial branch had an exact exponent and is untouched.
22
+
23
+ This patch applies on top of ginac-binomial-real-imag-pow00.patch (it shares its context) and is
24
+ worth sending upstream together with it.
25
+
26
+ --- a/ginac/power.cpp
27
+ +++ b/ginac/power.cpp
28
+ @@ -673,8 +673,38 @@
29
+ return pow(x, n);
30
+ }
31
+
32
+ +// An exponent that is an inexact numeric happening to be a whole number - 2.0 rather than 2 - as
33
+ +// the exact integer it is, or the expression unchanged if it is not one. real_part() and
34
+ +// imag_part() below decide whether they may use the (exact, real) integer-binomial expansion by
35
+ +// asking exponent.info(integer), which an inexact 2.0 does not satisfy even though the expansion is
36
+ +// just as valid for it. They then fall through to the general polar form
37
+ +// |X|^c*exp(-d*atan2(b,a))*cos(c*atan2(b,a)+d*log|X|), which is correct but useless to any caller
38
+ +// that has to keep the result free of transcendental functions of the basis - in pyoomph, the
39
+ +// dimensional analysis of a residual, which cannot separate the units of a basis that has landed
40
+ +// inside an atan2. Numbers should of course be kept exact in the first place; this is the backstop.
41
+ +static ex exact_whole_number_exponent(const ex & e)
42
+ +{
43
+ + if (!is_exactly_a<numeric>(e))
44
+ + return e;
45
+ + const numeric & n = ex_to<numeric>(e);
46
+ + if (n.is_crational() || !n.is_real())
47
+ + return e;
48
+ + const double d = n.to_double();
49
+ + if (d > 1e15 || d < -1e15)
50
+ + return e;
51
+ + const long l = (long)d;
52
+ + if ((double)l != d)
53
+ + return e;
54
+ + return numeric(l);
55
+ +}
56
+ +
57
+ ex power::real_part() const
58
+ {
59
+ + {
60
+ + const ex xexponent = exact_whole_number_exponent(exponent);
61
+ + if (!are_ex_trivially_equal(xexponent, exponent))
62
+ + return pow(basis, xexponent).real_part();
63
+ + }
64
+ // basis == a+I*b, exponent == c+I*d
65
+ const ex a = basis.real_part();
66
+ const ex c = exponent.real_part();
67
+ @@ -711,6 +741,11 @@
68
+
69
+ ex power::imag_part() const
70
+ {
71
+ + {
72
+ + const ex xexponent = exact_whole_number_exponent(exponent);
73
+ + if (!are_ex_trivially_equal(xexponent, exponent))
74
+ + return pow(basis, xexponent).imag_part();
75
+ + }
76
+ // basis == a+I*b, exponent == c+I*d
77
+ const ex a = basis.real_part();
78
+ const ex c = exponent.real_part();
@@ -0,0 +1,44 @@
1
+ Stop GiNaC::power::to_polynomial() from recursing forever on (x^a)^(-n), i.e. a negative integer
2
+ power of a power whose own exponent is symbolic.
3
+
4
+ The negint branch rebuilds pow(basis_pref, exponent) and recurses into it, justified by the comment
5
+ "(A*B)^n will be automagically transformed to A^n*B^n". That holds for a `mul` basis, and for a
6
+ `power` basis whose inner exponent is numeric ((x^3)^(-2) evaluates to x^(-6)). It does NOT hold for
7
+ a `power` basis with a SYMBOLIC inner exponent: power::eval only contracts (x^a)^b into x^(a*b) when
8
+ that is provably valid, since for symbolic a the two sides differ across the branch cut. So
9
+ pow((x^a), -2) evaluates back to the very expression to_polynomial was called on, and the recursion
10
+ is a self-call with an unchanged argument -- roughly 47000 frames deep here before the stack runs
11
+ out, with no diagnostic of any kind.
12
+
13
+ Recursing only when the rebuilt expression actually differs leaves every terminating case
14
+ bit-identical (there t differs from *this by construction) and turns the non-terminating one into
15
+ the same opaque-symbol replacement that to_polynomial already applies to any other non-polynomial
16
+ subexpression -- including, without this patch, the closely related (x^a)^(1/2).
17
+
18
+ pyoomph reaches it through unit extraction: collect_base_units() calls collect_common_factors(),
19
+ which calls to_polynomial(). A Vignes-interpolated Maxwell-Stefan diffusivity written as
20
+ D0_ij^e_ij * D0_ji^e_ji has composition FIELDS in its exponents, and when the mixture viscosity
21
+ inside D0 is a sum the unit symbols do not cancel automatically, leaving factors of the form
22
+ kilogram^(<field expression>) for collect_common_factors to choke on. See
23
+ dev_docs/examples/ginac_to_polynomial_symbolic_exponent.cpp, which reproduces it in five lines with
24
+ no pyoomph involved and is what to send upstream.
25
+
26
+ --- a/ginac/normal.cpp
27
+ +++ b/ginac/normal.cpp
28
+ @@ -2720,10 +2720,13 @@
29
+ if (is_exactly_a<mul>(basis_pref) || is_exactly_a<power>(basis_pref)) {
30
+ // (A*B)^n will be automagically transformed to A^n*B^n
31
+ ex t = pow(basis_pref, exponent);
32
+ - return t.to_polynomial(repl);
33
+ + // ... but a power with a SYMBOLIC exponent is not, and rebuilding it unchanged
34
+ + // would make this an infinite self-recursion. Fall through to the replacement
35
+ + // below instead, which is what any other non-polynomial basis gets.
36
+ + if (!t.is_equal(*this))
37
+ + return t.to_polynomial(repl);
38
+ }
39
+ - else
40
+ - return pow(replace_with_symbol(pow(basis, _ex_1), repl), -exponent);
41
+ + return pow(replace_with_symbol(pow(basis, _ex_1), repl), -exponent);
42
+ }
43
+ else
44
+ return replace_with_symbol(*this, repl);
@@ -40,6 +40,12 @@ parser.add_argument("--report-json", metavar="PATH", default=None, help="Also wr
40
40
  parser.add_argument("--mpirun", type=int, default=0, metavar="N", help="Run each script under 'mpirun -n N' instead of directly. Default 0, i.e. no mpirun")
41
41
  parser.add_argument("--omp", type=int, default=0, metavar="N", help="Pass '--omp N' to each script, i.e. assemble the elements on N threads. Default 0, i.e. leave each script on the serial element loop. Composes with --mpirun, which is threads per rank then")
42
42
  parser.add_argument("--distribute", help="Pass --distribute to each script, i.e. distribute the mesh over the ranks. Only meaningful together with --mpirun", action="store_true")
43
+ # Deliberately general rather than one option per solver. Note what forcing a solver DOES, though:
44
+ # it changes what is being computed, not just how fast. petsc_mumps collapses hopf_switch's arclength
45
+ # continuation and plain --petsc (an iterative KSP) fails outright on the augmented systems, so a
46
+ # failure under this flag is not by itself a failure of the backend - re-run the same script without
47
+ # it before concluding anything.
48
+ parser.add_argument("--extra-arg", action="append", default=[], metavar="ARG", help="Pass this argument on to every script. Repeatable, e.g. --extra-arg --mumps. See the note in the source about what forcing a solver changes")
43
49
  # For chasing one flaky script across the platforms: a full pass is hours per OS, and a script that
44
50
  # only fails once in a while has to be run as the CI runs it - same wheel, same runner - not once in
45
51
  # a scratch directory. Substring rather than glob, on "Folder/script.py", so that a bare script name
@@ -158,6 +164,14 @@ _MISSING_MODULE=re.compile(rb"ModuleNotFoundError: No module named '([A-Za-z0-9_
158
164
  _UNAVAILABLE_SOLVER=re.compile(rb"^RuntimeError: .* is not available \(ModuleNotFoundError: No module named '([A-Za-z0-9_.]+)'\)")
159
165
  _BROKEN_IMPORT=re.compile(rb"^ImportError: (.*)$")
160
166
  _TRACEBACK_FRAME=re.compile(rb'^ File "([^"]+)"')
167
+ # Under mpirun every stderr line is tagged "[rank N] " - on every rank and in every --mpi-output mode,
168
+ # see pyoomph/generic/logging.py _ConsoleWrapper._decorate. The three anchored patterns above would
169
+ # therefore never match in the MPI pass (only _MISSING_MODULE, which searches, survived), so the tag
170
+ # comes off before a line is examined.
171
+ _RANK_TAG=re.compile(rb"^\[rank \d+\] ?")
172
+
173
+ def untag_rank(line):
174
+ return _RANK_TAG.sub(b"",line)
161
175
 
162
176
  def missing_optional_module(output):
163
177
  """(package, why) when an optional package, and nothing else, ended this script - else None.
@@ -183,7 +197,7 @@ def missing_optional_module(output):
183
197
  lines=output.strip().splitlines()
184
198
  if not lines:
185
199
  return None
186
- last=lines[-1]
200
+ last=untag_rank(lines[-1])
187
201
  m=_UNAVAILABLE_SOLVER.match(last)
188
202
  if m is not None:
189
203
  name=m.group(1).decode().split(".")[0]
@@ -195,7 +209,7 @@ def missing_optional_module(output):
195
209
  m=_BROKEN_IMPORT.match(last)
196
210
  if m is None:
197
211
  return None
198
- frames=[f.group(1).decode() for f in (_TRACEBACK_FRAME.match(l) for l in lines) if f]
212
+ frames=[f.group(1).decode() for f in (_TRACEBACK_FRAME.match(untag_rank(l)) for l in lines) if f]
199
213
  for name in _OPTIONAL_MODULES:
200
214
  if any(("/"+name+"/") in p or p.endswith("/"+name+".py") for p in frames):
201
215
  return (name,"is installed but cannot be loaded here ("+m.group(1).decode()+")")
@@ -207,16 +221,40 @@ def missing_optional_module(output):
207
221
  # for why - so without dropping that epilogue every optional-package skip would be counted as a real
208
222
  # failure in the MPI pass, which is exactly the noise the skip mechanism exists to avoid.
209
223
  _DASH_RULE=re.compile(rb"^-{20,}$")
224
+ # Not everything mpirun appends is fenced, and since 2026-08-18 pyoomph appends a line of its own.
225
+ # Both sit AFTER the traceback and so become "the last line" that missing_optional_module() reads:
226
+ #
227
+ # pyoomph: uncaught ... -- aborting the whole job.
228
+ # generic/mpi.py's excepthook (commit a8973de2), which turns a rank dying alone - and the other
229
+ # three then spinning in a collective until the step's timeout - into an MPI_Abort. It prints
230
+ # this note after the traceback it has just let through.
231
+ # [duarte:37160] N more processes have sent help message ...
232
+ # Open MPI's help-message aggregator, written by mpirun itself once the job is down. Plain
233
+ # "[host:pid] " lines, with no dash rules around them.
234
+ #
235
+ # Together they are why the mpirun pass reported rayleigh_plateau_pinchoff.py as FAILED on the
236
+ # 2026-09-02 and 2026-09-03 nightlies while the serial pass skipped it for the same missing shapely.
237
+ _UNFENCED_EPILOGUE=(re.compile(rb"^\[[^\]\s]+:\d+\]\s"),
238
+ re.compile(rb"^pyoomph: uncaught \w+ on MPI rank \d+ of \d+ -- aborting the whole job\."))
210
239
 
211
240
  def strip_mpirun_epilogue(output):
212
241
  lines=output.rstrip().splitlines()
213
- while len(lines)>=2 and _DASH_RULE.match(lines[-1].strip()):
214
- for i in range(len(lines)-2,-1,-1):
215
- if _DASH_RULE.match(lines[i].strip()):
216
- del lines[i:]
217
- break
218
- else:
219
- break # an unpaired rule: not one of mpirun's blocks, leave the output alone
242
+ peeled=True
243
+ while peeled: # the two kinds interleave, so keep going until a pass changes nothing
244
+ peeled=False
245
+ while len(lines)>=2 and _DASH_RULE.match(lines[-1].strip()):
246
+ for i in range(len(lines)-2,-1,-1):
247
+ if _DASH_RULE.match(lines[i].strip()):
248
+ del lines[i:]
249
+ peeled=True
250
+ break
251
+ else:
252
+ break # an unpaired rule: not one of mpirun's blocks, leave the output alone
253
+ while lines and not lines[-1].strip():
254
+ lines.pop()
255
+ while lines and any(p.match(untag_rank(lines[-1].strip())) for p in _UNFENCED_EPILOGUE):
256
+ lines.pop()
257
+ peeled=True
220
258
  while lines and not lines[-1].strip():
221
259
  lines.pop()
222
260
  return b"\n".join(lines)
@@ -437,6 +475,7 @@ for d in glob.glob("./*/"):
437
475
  cmd.append("--distribute")
438
476
  if args.omp>0:
439
477
  cmd+=["--omp",str(args.omp)]
478
+ cmd+=args.extra_arg
440
479
  started_at=time.time()
441
480
  proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
442
481
  #proc = subprocess.Popen([sys.executable, '-u', f], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
@@ -550,6 +589,7 @@ if report_json is not None:
550
589
  "python":sys.version.split()[0],
551
590
  "options":{"quick_test":args.quick_test,"tcc":args.tcc,"no_petsc":args.no_petsc,
552
591
  "mpirun":args.mpirun,"omp":args.omp,"distribute":args.distribute,
592
+ "extra_arg":args.extra_arg,
553
593
  "timeout":args.timeout,
554
594
  "skips":skips,"only":args.only},
555
595
  "scripts":records},jf,indent=1)