pyoomph 0.2.1__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.1 → pyoomph-0.2.2}/CHANGELOG.md +86 -0
  2. {pyoomph-0.2.1 → pyoomph-0.2.2}/CMakeLists.txt +1 -0
  3. {pyoomph-0.2.1 → pyoomph-0.2.2}/INSTALL.md +13 -4
  4. {pyoomph-0.2.1 → pyoomph-0.2.2}/PKG-INFO +2 -1
  5. {pyoomph-0.2.1 → 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.1 → pyoomph-0.2.2}/citools/test_all_tutorial_scripts.py +49 -9
  11. {pyoomph-0.2.1 → pyoomph-0.2.2}/cmake/ThirdPartyGiNaC.cmake +46 -12
  12. {pyoomph-0.2.1 → pyoomph-0.2.2}/cmake/generate_stubs.py +115 -1
  13. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/__init__.py +77 -22
  14. pyoomph-0.2.2/pyoomph/_version.py +1 -0
  15. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/NSCH.py +70 -3
  16. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/low_order_NSCH.py +17 -1
  17. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/stabilization.py +29 -31
  18. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/stabilized_ns.py +32 -34
  19. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/topological_changes.py +142 -11
  20. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/tracers.py +62 -8
  21. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/viscoelastic.py +20 -3
  22. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/__init__.py +140 -12
  23. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/cb.py +315 -0
  24. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/generic.py +3 -2
  25. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/interpol.py +33 -1
  26. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/tensor_funcs.py +33 -6
  27. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/units.py +26 -9
  28. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/utils.py +41 -1
  29. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/problem.py +538 -94
  30. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/aiomfac.py +2 -2
  31. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/activity.py +218 -5
  32. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/activity_electrolyte.py +314 -19
  33. {pyoomph-0.2.1 → 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.1 → pyoomph-0.2.2}/pyoomph/materials/generic.py +177 -14
  36. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/axisymm_topology.py +248 -38
  37. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/gmsh.py +106 -6
  38. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/mesh.py +12 -2
  39. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/meshdatacache.py +13 -8
  40. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/remesher.py +5 -4
  41. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/generic.py +264 -149
  42. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/meshio.py +46 -2
  43. {pyoomph-0.2.1 → 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.1 → pyoomph-0.2.2}/pyoomph/solvers/petsc.py +5 -12
  46. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/solvers/spectra.py +4 -2
  47. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/controller.py +26 -1
  48. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/num_text_out.py +81 -5
  49. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyproject.toml +48 -3
  50. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/codegen.cpp +930 -259
  51. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/codegen.hpp +85 -7
  52. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements.cpp +11 -1
  53. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements.hpp +1 -0
  54. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_interface.cpp +27 -2
  55. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/expressions.cpp +672 -86
  56. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/expressions.hpp +180 -5
  57. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/jitbridge.h +72 -0
  58. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh.cpp +245 -1
  59. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/meshtemplate.cpp +63 -4
  60. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/meshtemplate.hpp +24 -5
  61. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/expressions.cpp +208 -60
  62. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/problem.cpp +6 -4
  63. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/INFO_oomph-lib +18 -0
  64. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/binary_tree.cc +13 -0
  65. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/adapt_continuation_worker.py +30 -3
  66. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/continue_run_worker.py +41 -20
  67. pyoomph-0.2.2/tests/gmsh_high_order_worker.py +94 -0
  68. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_dof_description_worker.py +6 -1
  69. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_dof_ordering_rowsplit_worker.py +6 -1
  70. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_dof_ordering_worker.py +6 -1
  71. pyoomph-0.2.2/tests/mpi_line_mesh_worker.py +70 -0
  72. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_observables_worker.py +9 -0
  73. pyoomph-0.2.2/tests/remesh_tangent_worker.py +184 -0
  74. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_reservoir_closure.py +80 -3
  75. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_topology.py +71 -5
  76. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_azimuthal_codegen.py +123 -0
  77. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_bifurcation_gui.py +25 -0
  78. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_custom_callbacks.py +25 -0
  79. pyoomph-0.2.2/tests/test_delayed_lambda_expansion.py +178 -0
  80. pyoomph-0.2.2/tests/test_diffusivity_estimates.py +366 -0
  81. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_dimensional_piecewise.py +29 -4
  82. pyoomph-0.2.2/tests/test_gmsh_high_order_optimize.py +134 -0
  83. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_inverted_element_remesh.py +92 -0
  84. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_math_functions.py +35 -2
  85. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mesh_point_locator.py +30 -0
  86. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_axisymm_reconnection.py +17 -10
  87. pyoomph-0.2.2/tests/test_mpi_line_mesh.py +127 -0
  88. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_observables.py +36 -0
  89. pyoomph-0.2.2/tests/test_multiret_hessian.py +549 -0
  90. pyoomph-0.2.2/tests/test_multiret_real_part.py +100 -0
  91. pyoomph-0.2.2/tests/test_mumps_solver.py +383 -0
  92. pyoomph-0.2.2/tests/test_solver_autoselection.py +213 -0
  93. pyoomph-0.2.2/tests/test_state_file_restart.py +787 -0
  94. pyoomph-0.2.2/tests/test_symbolic_relational.py +382 -0
  95. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_tensor_index_conventions.py +35 -2
  96. pyoomph-0.2.2/tests/test_text_output_headers.py +158 -0
  97. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_tracers.py +116 -0
  98. pyoomph-0.2.2/tests/test_unifac_analytic_c_jacobian.py +170 -0
  99. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_unit_strings.py +39 -1
  100. pyoomph-0.2.1/.devcontainer/Dockerfile +0 -33
  101. pyoomph-0.2.1/.github/workflows/debug_wheel_case.yml +0 -373
  102. pyoomph-0.2.1/.github/workflows/prebuild_petsc_slepc.yml +0 -211
  103. pyoomph-0.2.1/.github/workflows/prebuild_static_ginac_cln.yml +0 -131
  104. pyoomph-0.2.1/.github/workflows/test_jit_cache.yml +0 -141
  105. pyoomph-0.2.1/.github/workflows/test_mac_accelerate.yml +0 -124
  106. pyoomph-0.2.1/.github/workflows/test_wheel_suite.yml +0 -532
  107. pyoomph-0.2.1/.github/workflows/test_wheels_multiversion.yml +0 -167
  108. pyoomph-0.2.1/.github/workflows/tutorial_scripts.yml +0 -614
  109. pyoomph-0.2.1/.github/workflows/wheels.yml +0 -772
  110. pyoomph-0.2.1/.readthedocs.yaml +0 -34
  111. pyoomph-0.2.1/AGENTS.md +0 -623
  112. pyoomph-0.2.1/CLAUDE.md +0 -105
  113. pyoomph-0.2.1/MANIFEST.in +0 -3
  114. pyoomph-0.2.1/agents/advanced.md +0 -612
  115. pyoomph-0.2.1/agents/examples.md +0 -557
  116. pyoomph-0.2.1/agents/materials.md +0 -381
  117. pyoomph-0.2.1/agents/meshes.md +0 -144
  118. pyoomph-0.2.1/agents/output.md +0 -126
  119. pyoomph-0.2.1/agents/parallel.md +0 -139
  120. pyoomph-0.2.1/agents/physics.md +0 -197
  121. pyoomph-0.2.1/agents/units.md +0 -139
  122. pyoomph-0.2.1/bisect.sh +0 -18
  123. pyoomph-0.2.1/build_for_develop.sh +0 -48
  124. pyoomph-0.2.1/citools/patches/apply_ginac_patch.sh +0 -38
  125. pyoomph-0.2.1/clean.sh +0 -40
  126. pyoomph-0.2.1/dev_docs/README.md +0 -91
  127. pyoomph-0.2.1/dev_docs/adaptive_refinement.md +0 -931
  128. pyoomph-0.2.1/dev_docs/adaptive_resolve_recovery.md +0 -373
  129. pyoomph-0.2.1/dev_docs/aiomfac_electrolytes.md +0 -147
  130. pyoomph-0.2.1/dev_docs/arclength_inner_product.md +0 -134
  131. pyoomph-0.2.1/dev_docs/assembly_overhead.md +0 -405
  132. pyoomph-0.2.1/dev_docs/axisymmetric_topological_changes.md +0 -801
  133. pyoomph-0.2.1/dev_docs/bifurcation_loci.md +0 -613
  134. pyoomph-0.2.1/dev_docs/boundary_node_membership.md +0 -292
  135. pyoomph-0.2.1/dev_docs/branch_switching.md +0 -699
  136. pyoomph-0.2.1/dev_docs/code_generation.md +0 -1818
  137. pyoomph-0.2.1/dev_docs/coordinate_system_tensor_ops.md +0 -390
  138. pyoomph-0.2.1/dev_docs/critical_wavenumber_tracking.md +0 -199
  139. pyoomph-0.2.1/dev_docs/deflation.md +0 -315
  140. pyoomph-0.2.1/dev_docs/distributed_periodic_bc.md +0 -206
  141. pyoomph-0.2.1/dev_docs/distributed_remeshing.md +0 -610
  142. pyoomph-0.2.1/dev_docs/distributed_state_files.md +0 -440
  143. pyoomph-0.2.1/dev_docs/dof_ordering.md +0 -222
  144. pyoomph-0.2.1/dev_docs/electrohydrodynamics.md +0 -900
  145. pyoomph-0.2.1/dev_docs/examples/axisymm_reconnection_minimal.py +0 -139
  146. pyoomph-0.2.1/dev_docs/examples/ginac_csrc_inexact_negative_exponent.cpp +0 -125
  147. pyoomph-0.2.1/dev_docs/examples/gmsh_orientation_matrix.py +0 -188
  148. pyoomph-0.2.1/dev_docs/examples/initialisation_profile.py +0 -109
  149. pyoomph-0.2.1/dev_docs/examples/inverted_element_notch.py +0 -181
  150. pyoomph-0.2.1/dev_docs/examples/sessile_droplet_surfactants.py +0 -193
  151. pyoomph-0.2.1/dev_docs/examples/simple_ginac +0 -0
  152. pyoomph-0.2.1/dev_docs/examples/simple_ginac.cpp +0 -94
  153. pyoomph-0.2.1/dev_docs/floquet_multipliers.md +0 -632
  154. pyoomph-0.2.1/dev_docs/hopf_normal_form.md +0 -177
  155. pyoomph-0.2.1/dev_docs/initialisation_cost.md +0 -319
  156. pyoomph-0.2.1/dev_docs/interface_refinement_coupling.md +0 -1128
  157. pyoomph-0.2.1/dev_docs/internal_facet_fields.md +0 -496
  158. pyoomph-0.2.1/dev_docs/jacobian_block_flags.md +0 -243
  159. pyoomph-0.2.1/dev_docs/linear_solvers.md +0 -837
  160. pyoomph-0.2.1/dev_docs/macro_elements.md +0 -805
  161. pyoomph-0.2.1/dev_docs/mesh_construction.md +0 -617
  162. pyoomph-0.2.1/dev_docs/mesh_data_cache.md +0 -635
  163. pyoomph-0.2.1/dev_docs/mesh_point_locator.md +0 -786
  164. pyoomph-0.2.1/dev_docs/mpi_augmented_systems.md +0 -612
  165. pyoomph-0.2.1/dev_docs/mpi_eigenproblems.md +0 -552
  166. pyoomph-0.2.1/dev_docs/nonconvergence_diagnostics.md +0 -164
  167. pyoomph-0.2.1/dev_docs/open_items.md +0 -486
  168. pyoomph-0.2.1/dev_docs/openmp_assembly.md +0 -307
  169. pyoomph-0.2.1/dev_docs/precice_setup.md +0 -86
  170. pyoomph-0.2.1/dev_docs/quick_continuation.md +0 -112
  171. pyoomph-0.2.1/dev_docs/replicated_condensation_gather.md +0 -341
  172. pyoomph-0.2.1/dev_docs/replicated_mpi_correctness.md +0 -421
  173. pyoomph-0.2.1/dev_docs/salt_transport.md +0 -235
  174. pyoomph-0.2.1/dev_docs/scripts/scan_required_shapes.py +0 -247
  175. pyoomph-0.2.1/dev_docs/scripts/scan_required_shapes_reverse.py +0 -147
  176. pyoomph-0.2.1/dev_docs/spatial_error_estimators.md +0 -700
  177. pyoomph-0.2.1/dev_docs/stabilized_navier_stokes.md +0 -362
  178. pyoomph-0.2.1/dev_docs/stabilized_scalar_transport.md +0 -390
  179. pyoomph-0.2.1/dev_docs/static_condensation.md +0 -1157
  180. pyoomph-0.2.1/dev_docs/structural_assembly.md +0 -780
  181. pyoomph-0.2.1/dev_docs/surfactant_transport.md +0 -465
  182. pyoomph-0.2.1/dev_docs/tracers.md +0 -432
  183. pyoomph-0.2.1/dev_docs/viscoelastic_log_conformation.md +0 -796
  184. pyoomph-0.2.1/docs/Makefile +0 -20
  185. pyoomph-0.2.1/docs/make.bat +0 -35
  186. pyoomph-0.2.1/docs/requirements.txt +0 -9
  187. pyoomph-0.2.1/docs/source/_ext/vidtime.py +0 -123
  188. pyoomph-0.2.1/docs/source/_static/css/custom.css +0 -62
  189. pyoomph-0.2.1/docs/source/_static/favicon.ico +0 -0
  190. pyoomph-0.2.1/docs/source/_static/js/vidtime.js +0 -69
  191. pyoomph-0.2.1/docs/source/conf.py +0 -229
  192. pyoomph-0.2.1/docs/source/index.rst +0 -354
  193. pyoomph-0.2.1/docs/source/latex_tutorial.rst +0 -31
  194. pyoomph-0.2.1/docs/source/pyoomph._pyoomph_core.rst +0 -17
  195. pyoomph-0.2.1/docs/source/pyoomph.equations.ALE.rst +0 -6
  196. pyoomph-0.2.1/docs/source/pyoomph.equations.NSCH.rst +0 -6
  197. pyoomph-0.2.1/docs/source/pyoomph.equations.additional.rst +0 -6
  198. pyoomph-0.2.1/docs/source/pyoomph.equations.advection_diffusion.rst +0 -6
  199. pyoomph-0.2.1/docs/source/pyoomph.equations.cahn_hilliard.rst +0 -6
  200. pyoomph-0.2.1/docs/source/pyoomph.equations.contact_angle.rst +0 -7
  201. pyoomph-0.2.1/docs/source/pyoomph.equations.darcy.rst +0 -6
  202. pyoomph-0.2.1/docs/source/pyoomph.equations.electrohydrodynamics.rst +0 -6
  203. pyoomph-0.2.1/docs/source/pyoomph.equations.electrostatics.rst +0 -6
  204. pyoomph-0.2.1/docs/source/pyoomph.equations.generic.rst +0 -6
  205. pyoomph-0.2.1/docs/source/pyoomph.equations.harmonic_oscillator.rst +0 -6
  206. pyoomph-0.2.1/docs/source/pyoomph.equations.helmholtz.rst +0 -6
  207. pyoomph-0.2.1/docs/source/pyoomph.equations.kuramoto_sivashinsky.rst +0 -6
  208. pyoomph-0.2.1/docs/source/pyoomph.equations.low_order_NSCH.rst +0 -6
  209. pyoomph-0.2.1/docs/source/pyoomph.equations.lubrication.rst +0 -6
  210. pyoomph-0.2.1/docs/source/pyoomph.equations.multi_component.rst +0 -6
  211. pyoomph-0.2.1/docs/source/pyoomph.equations.navier_stokes.rst +0 -6
  212. pyoomph-0.2.1/docs/source/pyoomph.equations.ode.rst +0 -6
  213. pyoomph-0.2.1/docs/source/pyoomph.equations.poisson.rst +0 -6
  214. pyoomph-0.2.1/docs/source/pyoomph.equations.potential_flow.rst +0 -6
  215. pyoomph-0.2.1/docs/source/pyoomph.equations.rst +0 -45
  216. pyoomph-0.2.1/docs/source/pyoomph.equations.salt_transport.rst +0 -6
  217. pyoomph-0.2.1/docs/source/pyoomph.equations.solid.rst +0 -6
  218. pyoomph-0.2.1/docs/source/pyoomph.equations.stabilization.rst +0 -6
  219. pyoomph-0.2.1/docs/source/pyoomph.equations.stabilized_ns.rst +0 -6
  220. pyoomph-0.2.1/docs/source/pyoomph.equations.stokes_stream_func.rst +0 -6
  221. pyoomph-0.2.1/docs/source/pyoomph.equations.surfactants.rst +0 -6
  222. pyoomph-0.2.1/docs/source/pyoomph.equations.topological_changes.rst +0 -6
  223. pyoomph-0.2.1/docs/source/pyoomph.equations.tracers.rst +0 -6
  224. pyoomph-0.2.1/docs/source/pyoomph.equations.viscoelastic.rst +0 -6
  225. pyoomph-0.2.1/docs/source/pyoomph.expressions.cb.rst +0 -6
  226. pyoomph-0.2.1/docs/source/pyoomph.expressions.coordsys.rst +0 -6
  227. pyoomph-0.2.1/docs/source/pyoomph.expressions.generic.rst +0 -6
  228. pyoomph-0.2.1/docs/source/pyoomph.expressions.interpol.rst +0 -6
  229. pyoomph-0.2.1/docs/source/pyoomph.expressions.phys_consts.rst +0 -6
  230. pyoomph-0.2.1/docs/source/pyoomph.expressions.rst +0 -24
  231. pyoomph-0.2.1/docs/source/pyoomph.expressions.tensor_funcs.rst +0 -6
  232. pyoomph-0.2.1/docs/source/pyoomph.expressions.units.rst +0 -6
  233. pyoomph-0.2.1/docs/source/pyoomph.expressions.utils.rst +0 -6
  234. pyoomph-0.2.1/docs/source/pyoomph.generic.assembly.rst +0 -6
  235. pyoomph-0.2.1/docs/source/pyoomph.generic.ccompiler.rst +0 -6
  236. pyoomph-0.2.1/docs/source/pyoomph.generic.codegen.rst +0 -7
  237. pyoomph-0.2.1/docs/source/pyoomph.generic.mpi.rst +0 -6
  238. pyoomph-0.2.1/docs/source/pyoomph.generic.problem.rst +0 -8
  239. pyoomph-0.2.1/docs/source/pyoomph.generic.rst +0 -21
  240. pyoomph-0.2.1/docs/source/pyoomph.jitbridge.rst +0 -9
  241. pyoomph-0.2.1/docs/source/pyoomph.materials.UNIFAC.aiomfac.rst +0 -6
  242. pyoomph-0.2.1/docs/source/pyoomph.materials.UNIFAC.aiomfac_electrolyte.rst +0 -6
  243. pyoomph-0.2.1/docs/source/pyoomph.materials.UNIFAC.dortmund.rst +0 -6
  244. pyoomph-0.2.1/docs/source/pyoomph.materials.UNIFAC.original.rst +0 -6
  245. pyoomph-0.2.1/docs/source/pyoomph.materials.UNIFAC.rst +0 -20
  246. pyoomph-0.2.1/docs/source/pyoomph.materials.activity.rst +0 -6
  247. pyoomph-0.2.1/docs/source/pyoomph.materials.activity_electrolyte.rst +0 -6
  248. pyoomph-0.2.1/docs/source/pyoomph.materials.default_materials.rst +0 -6
  249. pyoomph-0.2.1/docs/source/pyoomph.materials.generic.rst +0 -7
  250. pyoomph-0.2.1/docs/source/pyoomph.materials.ions.rst +0 -6
  251. pyoomph-0.2.1/docs/source/pyoomph.materials.mass_transfer.rst +0 -6
  252. pyoomph-0.2.1/docs/source/pyoomph.materials.rst +0 -31
  253. pyoomph-0.2.1/docs/source/pyoomph.materials.surfactant_isotherms.rst +0 -7
  254. pyoomph-0.2.1/docs/source/pyoomph.meshes.curved_entities.rst +0 -6
  255. pyoomph-0.2.1/docs/source/pyoomph.meshes.droplet_meshes.rst +0 -6
  256. pyoomph-0.2.1/docs/source/pyoomph.meshes.gmsh.rst +0 -6
  257. pyoomph-0.2.1/docs/source/pyoomph.meshes.interpolator.rst +0 -6
  258. pyoomph-0.2.1/docs/source/pyoomph.meshes.mesh.rst +0 -7
  259. pyoomph-0.2.1/docs/source/pyoomph.meshes.meshdatacache.rst +0 -6
  260. pyoomph-0.2.1/docs/source/pyoomph.meshes.remesher.rst +0 -6
  261. pyoomph-0.2.1/docs/source/pyoomph.meshes.rst +0 -26
  262. pyoomph-0.2.1/docs/source/pyoomph.meshes.simplemeshes.rst +0 -6
  263. pyoomph-0.2.1/docs/source/pyoomph.meshes.tqmesh.rst +0 -6
  264. pyoomph-0.2.1/docs/source/pyoomph.meshes.zeta.rst +0 -6
  265. pyoomph-0.2.1/docs/source/pyoomph.output.generic.rst +0 -6
  266. pyoomph-0.2.1/docs/source/pyoomph.output.latex.rst +0 -6
  267. pyoomph-0.2.1/docs/source/pyoomph.output.meshio.rst +0 -6
  268. pyoomph-0.2.1/docs/source/pyoomph.output.plotting.rst +0 -6
  269. pyoomph-0.2.1/docs/source/pyoomph.output.plotting1d.rst +0 -6
  270. pyoomph-0.2.1/docs/source/pyoomph.output.rst +0 -22
  271. pyoomph-0.2.1/docs/source/pyoomph.output.states.rst +0 -6
  272. pyoomph-0.2.1/docs/source/pyoomph.rst +0 -38
  273. pyoomph-0.2.1/docs/source/pyoomph.solvers.generic.rst +0 -6
  274. pyoomph-0.2.1/docs/source/pyoomph.solvers.pardiso.rst +0 -6
  275. pyoomph-0.2.1/docs/source/pyoomph.solvers.precice_adapter.rst +0 -6
  276. pyoomph-0.2.1/docs/source/pyoomph.solvers.rst +0 -21
  277. pyoomph-0.2.1/docs/source/pyoomph.solvers.scipy.rst +0 -6
  278. pyoomph-0.2.1/docs/source/pyoomph.solvers.spectra.rst +0 -6
  279. pyoomph-0.2.1/docs/source/pyoomph.typings.rst +0 -9
  280. pyoomph-0.2.1/docs/source/pyoomph.utils.bifurcation_gui.actions.rst +0 -6
  281. pyoomph-0.2.1/docs/source/pyoomph.utils.bifurcation_gui.controller.rst +0 -6
  282. pyoomph-0.2.1/docs/source/pyoomph.utils.bifurcation_gui.model.rst +0 -6
  283. pyoomph-0.2.1/docs/source/pyoomph.utils.bifurcation_gui.plotter.rst +0 -6
  284. pyoomph-0.2.1/docs/source/pyoomph.utils.bifurcation_gui.rst +0 -21
  285. pyoomph-0.2.1/docs/source/pyoomph.utils.bifurcation_gui.tkapp.rst +0 -6
  286. pyoomph-0.2.1/docs/source/pyoomph.utils.dropgeom.rst +0 -6
  287. pyoomph-0.2.1/docs/source/pyoomph.utils.lyapunov.rst +0 -6
  288. pyoomph-0.2.1/docs/source/pyoomph.utils.num_text_out.rst +0 -6
  289. pyoomph-0.2.1/docs/source/pyoomph.utils.paramscan.rst +0 -6
  290. pyoomph-0.2.1/docs/source/pyoomph.utils.periodic_driving_response.rst +0 -6
  291. pyoomph-0.2.1/docs/source/pyoomph.utils.rst +0 -24
  292. pyoomph-0.2.1/docs/source/pyoomph.utils.smallest_circle.rst +0 -6
  293. pyoomph-0.2.1/docs/source/refs.bib +0 -761
  294. pyoomph-0.2.1/docs/source/tutorial/advstab/azimuthal/rayleigh_benard_azimuthal_stability.py +0 -142
  295. pyoomph-0.2.1/docs/source/tutorial/advstab/azimuthal/rbconvect.rst +0 -89
  296. pyoomph-0.2.1/docs/source/tutorial/advstab/azimuthal/rising_bubble.py +0 -239
  297. pyoomph-0.2.1/docs/source/tutorial/advstab/azimuthal/rising_bubble.rst +0 -90
  298. pyoomph-0.2.1/docs/source/tutorial/advstab/azimuthal.rst +0 -38
  299. pyoomph-0.2.1/docs/source/tutorial/advstab/bifgui/example.rst +0 -109
  300. pyoomph-0.2.1/docs/source/tutorial/advstab/bifgui/keys.rst +0 -110
  301. pyoomph-0.2.1/docs/source/tutorial/advstab/bifgui/menus.rst +0 -267
  302. pyoomph-0.2.1/docs/source/tutorial/advstab/bifgui/tabs.rst +0 -208
  303. pyoomph-0.2.1/docs/source/tutorial/advstab/bifgui/thin_film_bifurcation_gui.py +0 -182
  304. pyoomph-0.2.1/docs/source/tutorial/advstab/bifgui.rst +0 -87
  305. pyoomph-0.2.1/docs/source/tutorial/advstab/cartesiannormal/rivulet.py +0 -111
  306. pyoomph-0.2.1/docs/source/tutorial/advstab/cartesiannormal/rivulet.rst +0 -79
  307. pyoomph-0.2.1/docs/source/tutorial/advstab/cartesiannormal/turing_dispersion.py +0 -86
  308. pyoomph-0.2.1/docs/source/tutorial/advstab/cartesiannormal/turing_transient.py +0 -64
  309. pyoomph-0.2.1/docs/source/tutorial/advstab/cartesiannormal/turingdispersion.rst +0 -60
  310. pyoomph-0.2.1/docs/source/tutorial/advstab/cartesiannormal.rst +0 -17
  311. pyoomph-0.2.1/docs/source/tutorial/advstab/deflation.rst +0 -12
  312. pyoomph-0.2.1/docs/source/tutorial/advstab/eigenbranch_continuation.py +0 -145
  313. pyoomph-0.2.1/docs/source/tutorial/advstab/eigenconti.rst +0 -50
  314. pyoomph-0.2.1/docs/source/tutorial/advstab/movmesh/dropdetach.rst +0 -83
  315. pyoomph-0.2.1/docs/source/tutorial/advstab/movmesh/hanging_droplet.py +0 -132
  316. pyoomph-0.2.1/docs/source/tutorial/advstab/movmesh.rst +0 -10
  317. pyoomph-0.2.1/docs/source/tutorial/advstab/response/dampedho.rst +0 -63
  318. pyoomph-0.2.1/docs/source/tutorial/advstab/response/drums.rst +0 -53
  319. pyoomph-0.2.1/docs/source/tutorial/advstab/response/linear_response_drum.py +0 -129
  320. pyoomph-0.2.1/docs/source/tutorial/advstab/response/linear_response_oscillator.py +0 -106
  321. pyoomph-0.2.1/docs/source/tutorial/advstab/response.rst +0 -11
  322. pyoomph-0.2.1/docs/source/tutorial/advstab.rst +0 -19
  323. pyoomph-0.2.1/docs/source/tutorial/ale/ALE_correction.py +0 -65
  324. pyoomph-0.2.1/docs/source/tutorial/ale/aledt.rst +0 -88
  325. pyoomph-0.2.1/docs/source/tutorial/ale/beads_on_string.py +0 -160
  326. pyoomph-0.2.1/docs/source/tutorial/ale/beadsonstring.rst +0 -99
  327. pyoomph-0.2.1/docs/source/tutorial/ale/free_surface.py +0 -87
  328. pyoomph-0.2.1/docs/source/tutorial/ale/freesurf.rst +0 -134
  329. pyoomph-0.2.1/docs/source/tutorial/ale/gmshfields.rst +0 -98
  330. pyoomph-0.2.1/docs/source/tutorial/ale/lagrange.rst +0 -8
  331. pyoomph-0.2.1/docs/source/tutorial/ale/laplace_smoothed_mesh.py +0 -65
  332. pyoomph-0.2.1/docs/source/tutorial/ale/laplsmooth.rst +0 -54
  333. pyoomph-0.2.1/docs/source/tutorial/ale/pinchoff.rst +0 -124
  334. pyoomph-0.2.1/docs/source/tutorial/ale/rayleigh_plateau.py +0 -173
  335. pyoomph-0.2.1/docs/source/tutorial/ale/rayleigh_plateau_pinchoff.py +0 -202
  336. pyoomph-0.2.1/docs/source/tutorial/ale/remesh.rst +0 -66
  337. pyoomph-0.2.1/docs/source/tutorial/ale/remeshing.py +0 -67
  338. pyoomph-0.2.1/docs/source/tutorial/ale/solid/cantilever.gif +0 -0
  339. pyoomph-0.2.1/docs/source/tutorial/ale/solid/cantilever.py +0 -93
  340. pyoomph-0.2.1/docs/source/tutorial/ale/solid/cantilever.rst +0 -57
  341. pyoomph-0.2.1/docs/source/tutorial/ale/solid/compressed_disc.py +0 -92
  342. pyoomph-0.2.1/docs/source/tutorial/ale/solid/compressed_disc.rst +0 -53
  343. pyoomph-0.2.1/docs/source/tutorial/ale/solid/solid_oscillations.gif +0 -0
  344. pyoomph-0.2.1/docs/source/tutorial/ale/solid/solid_oscillations.py +0 -69
  345. pyoomph-0.2.1/docs/source/tutorial/ale/solid/solid_oscillations.rst +0 -38
  346. pyoomph-0.2.1/docs/source/tutorial/ale/solid.rst +0 -69
  347. pyoomph-0.2.1/docs/source/tutorial/ale/spread/droplet_spread_3d.py +0 -76
  348. pyoomph-0.2.1/docs/source/tutorial/ale/spread/droplet_spread_free_slip.py +0 -76
  349. pyoomph-0.2.1/docs/source/tutorial/ale/spread/droplet_spread_hyperelastic_tangential_shift.py +0 -134
  350. pyoomph-0.2.1/docs/source/tutorial/ale/spread/droplet_spread_marangoni_and_gravity.py +0 -139
  351. pyoomph-0.2.1/docs/source/tutorial/ale/spread/droplet_spread_sliplength.py +0 -67
  352. pyoomph-0.2.1/docs/source/tutorial/ale/spread/free.rst +0 -47
  353. pyoomph-0.2.1/docs/source/tutorial/ale/spread/hyperelastic.rst +0 -51
  354. pyoomph-0.2.1/docs/source/tutorial/ale/spread/maraandgrav.rst +0 -103
  355. pyoomph-0.2.1/docs/source/tutorial/ale/spread/navier.rst +0 -45
  356. pyoomph-0.2.1/docs/source/tutorial/ale/spread/threedim.rst +0 -51
  357. pyoomph-0.2.1/docs/source/tutorial/ale/spread.rst +0 -19
  358. pyoomph-0.2.1/docs/source/tutorial/ale.rst +0 -25
  359. pyoomph-0.2.1/docs/source/tutorial/dg/advdiffu.rst +0 -154
  360. pyoomph-0.2.1/docs/source/tutorial/dg/convection_diffusion.py +0 -93
  361. pyoomph-0.2.1/docs/source/tutorial/dg/facetfields.rst +0 -153
  362. pyoomph-0.2.1/docs/source/tutorial/dg/hdg.rst +0 -113
  363. pyoomph-0.2.1/docs/source/tutorial/dg/hdg_poisson.py +0 -163
  364. pyoomph-0.2.1/docs/source/tutorial/dg/hybrid_poisson.py +0 -113
  365. pyoomph-0.2.1/docs/source/tutorial/dg/poisson_weak_dirichlet.py +0 -89
  366. pyoomph-0.2.1/docs/source/tutorial/dg/weakdirichlet.rst +0 -70
  367. pyoomph-0.2.1/docs/source/tutorial/dg.rst +0 -27
  368. pyoomph-0.2.1/docs/source/tutorial/installation/additional.rst +0 -18
  369. pyoomph-0.2.1/docs/source/tutorial/installation/cmakeoptions.rst +0 -96
  370. pyoomph-0.2.1/docs/source/tutorial/installation/cmdlineoptions.rst +0 -181
  371. pyoomph-0.2.1/docs/source/tutorial/installation/compile.rst +0 -15
  372. pyoomph-0.2.1/docs/source/tutorial/installation/envvars.rst +0 -88
  373. pyoomph-0.2.1/docs/source/tutorial/installation/petscslepc.rst +0 -110
  374. pyoomph-0.2.1/docs/source/tutorial/installation/problems.rst +0 -12
  375. pyoomph-0.2.1/docs/source/tutorial/installation/pypa.rst +0 -106
  376. pyoomph-0.2.1/docs/source/tutorial/installation/source/linux.rst +0 -61
  377. pyoomph-0.2.1/docs/source/tutorial/installation/source/mac.rst +0 -77
  378. pyoomph-0.2.1/docs/source/tutorial/installation/wsl.rst +0 -118
  379. pyoomph-0.2.1/docs/source/tutorial/installation.rst +0 -17
  380. pyoomph-0.2.1/docs/source/tutorial/math/coordsys.rst +0 -203
  381. pyoomph-0.2.1/docs/source/tutorial/math/diffops.rst +0 -66
  382. pyoomph-0.2.1/docs/source/tutorial/math/elementary.rst +0 -85
  383. pyoomph-0.2.1/docs/source/tutorial/math/keywords.rst +0 -70
  384. pyoomph-0.2.1/docs/source/tutorial/math.rst +0 -13
  385. pyoomph-0.2.1/docs/source/tutorial/mcflow/contact.rst +0 -95
  386. pyoomph-0.2.1/docs/source/tutorial/mcflow/freesurf/details.rst +0 -60
  387. pyoomph-0.2.1/docs/source/tutorial/mcflow/freesurf/evapmdl.rst +0 -30
  388. pyoomph-0.2.1/docs/source/tutorial/mcflow/freesurf.rst +0 -66
  389. pyoomph-0.2.1/docs/source/tutorial/mcflow/gcl.rst +0 -114
  390. pyoomph-0.2.1/docs/source/tutorial/mcflow/gcl_glycerol_water_capillary.py +0 -116
  391. pyoomph-0.2.1/docs/source/tutorial/mcflow/general.rst +0 -27
  392. pyoomph-0.2.1/docs/source/tutorial/mcflow/marainstab.rst +0 -82
  393. pyoomph-0.2.1/docs/source/tutorial/mcflow/marangoni_instability.py +0 -116
  394. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/gas.rst +0 -40
  395. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/gasmix.rst +0 -73
  396. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/liquid.rst +0 -32
  397. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/liquidmix.rst +0 -28
  398. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/materials_gas_mixture.py +0 -126
  399. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/materials_liquids.py +0 -113
  400. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/materials_pure_gas.py +0 -99
  401. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/ptdep.rst +0 -54
  402. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/solids.rst +0 -6
  403. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib/temperature_and_pressure_dependency.py +0 -69
  404. pyoomph-0.2.1/docs/source/tutorial/mcflow/matlib.rst +0 -17
  405. pyoomph-0.2.1/docs/source/tutorial/mcflow/rayleigh_taylor_instability.py +0 -78
  406. pyoomph-0.2.1/docs/source/tutorial/mcflow/rtinstab.rst +0 -63
  407. pyoomph-0.2.1/docs/source/tutorial/mcflow/salts/capillary.rst +0 -84
  408. pyoomph-0.2.1/docs/source/tutorial/mcflow/salts/define.rst +0 -85
  409. pyoomph-0.2.1/docs/source/tutorial/mcflow/salts/double_layer.rst +0 -95
  410. pyoomph-0.2.1/docs/source/tutorial/mcflow/salts/double_layer_relaxation.py +0 -164
  411. pyoomph-0.2.1/docs/source/tutorial/mcflow/salts/nacl_capillary_evaporation.py +0 -140
  412. pyoomph-0.2.1/docs/source/tutorial/mcflow/salts.rst +0 -14
  413. pyoomph-0.2.1/docs/source/tutorial/mcflow/surfact/define.rst +0 -48
  414. pyoomph-0.2.1/docs/source/tutorial/mcflow/surfact/insoluble.rst +0 -37
  415. pyoomph-0.2.1/docs/source/tutorial/mcflow/surfact/insoluble_surfactant_definition.py +0 -92
  416. pyoomph-0.2.1/docs/source/tutorial/mcflow/surfact/soluble.rst +0 -92
  417. pyoomph-0.2.1/docs/source/tutorial/mcflow/surfact/soluble_surfactants.py +0 -112
  418. pyoomph-0.2.1/docs/source/tutorial/mcflow/surfact.rst +0 -12
  419. pyoomph-0.2.1/docs/source/tutorial/mcflow/unifac.rst +0 -34
  420. pyoomph-0.2.1/docs/source/tutorial/mcflow.rst +0 -22
  421. pyoomph-0.2.1/docs/source/tutorial/miscsettings/glorder.rst +0 -13
  422. pyoomph-0.2.1/docs/source/tutorial/miscsettings.rst +0 -11
  423. pyoomph-0.2.1/docs/source/tutorial/multidom/conduction.rst +0 -96
  424. pyoomph-0.2.1/docs/source/tutorial/multidom/evap.rst +0 -118
  425. pyoomph-0.2.1/docs/source/tutorial/multidom/evaporating_water_droplet.py +0 -164
  426. pyoomph-0.2.1/docs/source/tutorial/multidom/falling_droplet.py +0 -185
  427. pyoomph-0.2.1/docs/source/tutorial/multidom/falling_droplet_with_surfactants.py +0 -61
  428. pyoomph-0.2.1/docs/source/tutorial/multidom/icefront.rst +0 -124
  429. pyoomph-0.2.1/docs/source/tutorial/multidom/melting.rst +0 -108
  430. pyoomph-0.2.1/docs/source/tutorial/multidom/melting_ice_convection.py +0 -138
  431. pyoomph-0.2.1/docs/source/tutorial/multidom/simple_fsi.py +0 -87
  432. pyoomph-0.2.1/docs/source/tutorial/multidom/simple_fsi.rst +0 -51
  433. pyoomph-0.2.1/docs/source/tutorial/multidom/stokeslaw.rst +0 -90
  434. pyoomph-0.2.1/docs/source/tutorial/multidom/temperature_conduction.py +0 -106
  435. pyoomph-0.2.1/docs/source/tutorial/multidom/temperature_conduction_propagation.py +0 -137
  436. pyoomph-0.2.1/docs/source/tutorial/multidom/two_layer_flow.py +0 -95
  437. pyoomph-0.2.1/docs/source/tutorial/multidom/two_layer_flow_single_domain.py +0 -110
  438. pyoomph-0.2.1/docs/source/tutorial/multidom/twofluids.rst +0 -130
  439. pyoomph-0.2.1/docs/source/tutorial/multidom.rst +0 -19
  440. pyoomph-0.2.1/docs/source/tutorial/parallel/mpi.rst +0 -205
  441. pyoomph-0.2.1/docs/source/tutorial/parallel/openmp.rst +0 -107
  442. pyoomph-0.2.1/docs/source/tutorial/parallel.rst +0 -28
  443. pyoomph-0.2.1/docs/source/tutorial/pde/adapt/cylinder.rst +0 -145
  444. pyoomph-0.2.1/docs/source/tutorial/pde/adapt/heated_cylinder.py +0 -262
  445. pyoomph-0.2.1/docs/source/tutorial/pde/adapt/moffatt.rst +0 -221
  446. pyoomph-0.2.1/docs/source/tutorial/pde/adapt/moffatt_eddies.py +0 -205
  447. pyoomph-0.2.1/docs/source/tutorial/pde/adapt.rst +0 -41
  448. pyoomph-0.2.1/docs/source/tutorial/pde/continue.rst +0 -16
  449. pyoomph-0.2.1/docs/source/tutorial/pde/convdiffu/convdiffu_SUPG.py +0 -89
  450. pyoomph-0.2.1/docs/source/tutorial/pde/convdiffu/convdiffu_simple.py +0 -92
  451. pyoomph-0.2.1/docs/source/tutorial/pde/convdiffu/naive.rst +0 -52
  452. pyoomph-0.2.1/docs/source/tutorial/pde/convdiffu/supg.rst +0 -91
  453. pyoomph-0.2.1/docs/source/tutorial/pde/convdiffu.rst +0 -30
  454. pyoomph-0.2.1/docs/source/tutorial/pde/lubric/coalesce.rst +0 -37
  455. pyoomph-0.2.1/docs/source/tutorial/pde/lubric/lubrication.py +0 -61
  456. pyoomph-0.2.1/docs/source/tutorial/pde/lubric/lubrication_coalescence.py +0 -62
  457. pyoomph-0.2.1/docs/source/tutorial/pde/lubric/lubrication_spreading.py +0 -57
  458. pyoomph-0.2.1/docs/source/tutorial/pde/lubric/relax.rst +0 -34
  459. pyoomph-0.2.1/docs/source/tutorial/pde/lubric/spread.rst +0 -32
  460. pyoomph-0.2.1/docs/source/tutorial/pde/lubric.rst +0 -62
  461. pyoomph-0.2.1/docs/source/tutorial/pde/navier/marainstab.rst +0 -43
  462. pyoomph-0.2.1/docs/source/tutorial/pde/navier/marangoni_instability.py +0 -77
  463. pyoomph-0.2.1/docs/source/tutorial/pde/navier/navier_stokes.py +0 -78
  464. pyoomph-0.2.1/docs/source/tutorial/pde/navier/navier_stokes_around_object.py +0 -163
  465. pyoomph-0.2.1/docs/source/tutorial/pde/navier/rayleigh_taylor_instability.py +0 -67
  466. pyoomph-0.2.1/docs/source/tutorial/pde/navier/rtinstab.rst +0 -34
  467. pyoomph-0.2.1/docs/source/tutorial/pde/navier/transientstokes.rst +0 -75
  468. pyoomph-0.2.1/docs/source/tutorial/pde/navier/viscoelastic.rst +0 -119
  469. pyoomph-0.2.1/docs/source/tutorial/pde/navier/viscoelastic_cylinder.py +0 -161
  470. pyoomph-0.2.1/docs/source/tutorial/pde/navier/womersley.rst +0 -32
  471. pyoomph-0.2.1/docs/source/tutorial/pde/navier.rst +0 -47
  472. pyoomph-0.2.1/docs/source/tutorial/pde/patterns/biftrack.rst +0 -50
  473. pyoomph-0.2.1/docs/source/tutorial/pde/patterns/eigen.rst +0 -106
  474. pyoomph-0.2.1/docs/source/tutorial/pde/patterns/kse.rst +0 -80
  475. pyoomph-0.2.1/docs/source/tutorial/pde/patterns/kuramoto_sivanshinsky.py +0 -81
  476. pyoomph-0.2.1/docs/source/tutorial/pde/patterns/kuramoto_sivanshinsky_arclength_eigen.py +0 -94
  477. pyoomph-0.2.1/docs/source/tutorial/pde/patterns/kuramoto_sivanshinsky_bifurcation.py +0 -72
  478. pyoomph-0.2.1/docs/source/tutorial/pde/patterns.rst +0 -15
  479. pyoomph-0.2.1/docs/source/tutorial/pde/wave/doubleslit.rst +0 -62
  480. pyoomph-0.2.1/docs/source/tutorial/pde/wave/drums.rst +0 -45
  481. pyoomph-0.2.1/docs/source/tutorial/pde/wave/onedim.rst +0 -56
  482. pyoomph-0.2.1/docs/source/tutorial/pde/wave/wave_eq.py +0 -72
  483. pyoomph-0.2.1/docs/source/tutorial/pde/wave/wave_eq_doubleslit.py +0 -132
  484. pyoomph-0.2.1/docs/source/tutorial/pde/wave/wave_eq_drums.py +0 -79
  485. pyoomph-0.2.1/docs/source/tutorial/pde/wave.rst +0 -13
  486. pyoomph-0.2.1/docs/source/tutorial/pde.rst +0 -19
  487. pyoomph-0.2.1/docs/source/tutorial/philosophy/generate_structure_figure.py +0 -216
  488. pyoomph-0.2.1/docs/source/tutorial/philosophy/structure.svg +0 -7666
  489. pyoomph-0.2.1/docs/source/tutorial/philosophy.rst +0 -89
  490. pyoomph-0.2.1/docs/source/tutorial/plotting/droplet.rst +0 -86
  491. pyoomph-0.2.1/docs/source/tutorial/plotting/eigendynamics.py +0 -59
  492. pyoomph-0.2.1/docs/source/tutorial/plotting/eigendynamics.rst +0 -49
  493. pyoomph-0.2.1/docs/source/tutorial/plotting/eigenfuncs.rst +0 -43
  494. pyoomph-0.2.1/docs/source/tutorial/plotting/evaporating_water_droplet.py +0 -164
  495. pyoomph-0.2.1/docs/source/tutorial/plotting/kuramoto_sivanshinsky.py +0 -81
  496. pyoomph-0.2.1/docs/source/tutorial/plotting/kuramoto_sivanshinsky_arclength_eigen.py +0 -94
  497. pyoomph-0.2.1/docs/source/tutorial/plotting/kuramoto_sivanshinsky_bifurcation.py +0 -72
  498. pyoomph-0.2.1/docs/source/tutorial/plotting/one_dimensional.py +0 -137
  499. pyoomph-0.2.1/docs/source/tutorial/plotting/one_dimensional.rst +0 -99
  500. pyoomph-0.2.1/docs/source/tutorial/plotting/plotting_eigenmodes.py +0 -113
  501. pyoomph-0.2.1/docs/source/tutorial/plotting/plotting_evaporating_droplet.py +0 -96
  502. pyoomph-0.2.1/docs/source/tutorial/plotting/replotting.rst +0 -41
  503. pyoomph-0.2.1/docs/source/tutorial/plotting/rising_bubble.py +0 -239
  504. pyoomph-0.2.1/docs/source/tutorial/plotting/tracers.py +0 -114
  505. pyoomph-0.2.1/docs/source/tutorial/plotting/tracers.rst +0 -131
  506. pyoomph-0.2.1/docs/source/tutorial/plotting.rst +0 -17
  507. pyoomph-0.2.1/docs/source/tutorial/precice/coupled_heat.rst +0 -73
  508. pyoomph-0.2.1/docs/source/tutorial/precice/coupled_heat_circle.rst +0 -67
  509. pyoomph-0.2.1/docs/source/tutorial/precice/partitioned_heat_conduction.py +0 -137
  510. pyoomph-0.2.1/docs/source/tutorial/precice/partitioned_heat_conduction_circle.py +0 -136
  511. pyoomph-0.2.1/docs/source/tutorial/precice.rst +0 -18
  512. pyoomph-0.2.1/docs/source/tutorial/preface/cite.rst +0 -26
  513. pyoomph-0.2.1/docs/source/tutorial/preface/general.rst +0 -4
  514. pyoomph-0.2.1/docs/source/tutorial/preface/license.rst +0 -171
  515. pyoomph-0.2.1/docs/source/tutorial/preface/motivation.rst +0 -15
  516. pyoomph-0.2.1/docs/source/tutorial/preface/oomph_lib_comparison.rst +0 -306
  517. pyoomph-0.2.1/docs/source/tutorial/preface/whentouse.rst +0 -27
  518. pyoomph-0.2.1/docs/source/tutorial/preface.rst +0 -19
  519. pyoomph-0.2.1/docs/source/tutorial/references.rst +0 -6
  520. pyoomph-0.2.1/docs/source/tutorial/spatial/helmholtz.rst +0 -171
  521. pyoomph-0.2.1/docs/source/tutorial/spatial/helmholtz_pml.py +0 -167
  522. pyoomph-0.2.1/docs/source/tutorial/spatial/math/internals.rst +0 -19
  523. pyoomph-0.2.1/docs/source/tutorial/spatial/math/shape.rst +0 -111
  524. pyoomph-0.2.1/docs/source/tutorial/spatial/math.rst +0 -15
  525. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/byhand.rst +0 -55
  526. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/curvedline.rst +0 -106
  527. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/gmsh.rst +0 -58
  528. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/mesh_Lshape_by_hand.py +0 -89
  529. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/mesh_fish_dimensional_curved.py +0 -114
  530. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/mesh_gmsh_fish_mesh_modes.py +0 -101
  531. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/mesh_gmsh_fish_with_holes.py +0 -115
  532. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/mesh_helical_line.py +0 -79
  533. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/resolution.rst +0 -55
  534. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh/unitsandmacro.rst +0 -96
  535. pyoomph-0.2.1/docs/source/tutorial/spatial/mesh.rst +0 -18
  536. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/adapt.rst +0 -40
  537. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/cauchy.rst +0 -10
  538. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/coordsys.rst +0 -37
  539. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/neumann.rst +0 -43
  540. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/onedimcoupled.rst +0 -41
  541. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/onedimdbc.rst +0 -61
  542. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson.py +0 -67
  543. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_2d.py +0 -56
  544. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_2d_adaptive.py +0 -53
  545. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_axisymm_adaptive.py +0 -42
  546. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_coupled.py +0 -50
  547. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_neumann.py +0 -64
  548. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_pure_neumann_nullspace.py +0 -85
  549. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_robin_via_lagrange.py +0 -73
  550. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/poisson_robin_via_neumann.py +0 -55
  551. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/pureneumann.rst +0 -94
  552. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/robin.rst +0 -77
  553. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/twodim.rst +0 -61
  554. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson/weakform.rst +0 -57
  555. pyoomph-0.2.1/docs/source/tutorial/spatial/poisson.rst +0 -23
  556. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/cavity_forward_problem.py +0 -66
  557. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/cavity_inverse_problem.py +0 -82
  558. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/cr.rst +0 -67
  559. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/cr_condensation.rst +0 -147
  560. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/cr_static_condensation.py +0 -119
  561. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/dimtraction.rst +0 -83
  562. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/implement.rst +0 -56
  563. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/inverse_problem.rst +0 -140
  564. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/nonnewton.rst +0 -25
  565. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/nonormalflow.rst +0 -71
  566. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/puredirichlet.rst +0 -16
  567. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/stokes.py +0 -88
  568. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/stokes_dimensional.py +0 -100
  569. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/stokes_flow_around_object.py +0 -141
  570. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/stokes_no_normal_flow.py +0 -113
  571. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/stokes_nonnewtonian.py +0 -59
  572. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/stokes_pressure_fix.py +0 -53
  573. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/stokeslaw.rst +0 -144
  574. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes/weakform.rst +0 -25
  575. pyoomph-0.2.1/docs/source/tutorial/spatial/stokes.rst +0 -23
  576. pyoomph-0.2.1/docs/source/tutorial/spatial.rst +0 -16
  577. pyoomph-0.2.1/docs/source/tutorial/temporal/changeparams.rst +0 -89
  578. pyoomph-0.2.1/docs/source/tutorial/temporal/coupled.rst +0 -115
  579. pyoomph-0.2.1/docs/source/tutorial/temporal/coupled_oscillators_method_1.py +0 -66
  580. pyoomph-0.2.1/docs/source/tutorial/temporal/coupled_oscillators_method_2.py +0 -66
  581. pyoomph-0.2.1/docs/source/tutorial/temporal/coupled_oscillators_method_3.py +0 -76
  582. pyoomph-0.2.1/docs/source/tutorial/temporal/custom_harmonic_oscillator.py +0 -75
  583. pyoomph-0.2.1/docs/source/tutorial/temporal/custommath/custom_math_dimensional_tennis.py +0 -122
  584. pyoomph-0.2.1/docs/source/tutorial/temporal/custommath/custom_math_driven_oscillator.py +0 -75
  585. pyoomph-0.2.1/docs/source/tutorial/temporal/custommath/drivenho.rst +0 -44
  586. pyoomph-0.2.1/docs/source/tutorial/temporal/custommath/multiret.rst +0 -4
  587. pyoomph-0.2.1/docs/source/tutorial/temporal/custommath/tennis.rst +0 -111
  588. pyoomph-0.2.1/docs/source/tutorial/temporal/custommath.rst +0 -14
  589. pyoomph-0.2.1/docs/source/tutorial/temporal/dimensional_oscillator_with_units.py +0 -74
  590. pyoomph-0.2.1/docs/source/tutorial/temporal/lagrange.rst +0 -121
  591. pyoomph-0.2.1/docs/source/tutorial/temporal/nondimho.rst +0 -92
  592. pyoomph-0.2.1/docs/source/tutorial/temporal/nonlinho.rst +0 -59
  593. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit/floquet.rst +0 -102
  594. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit/hopf_switch.py +0 -95
  595. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit/hopf_switch.rst +0 -50
  596. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit/langford_floquet.py +0 -115
  597. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit/langford_time_integration.py +0 -55
  598. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit/manual_orbit.py +0 -100
  599. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit/manual_orbit.rst +0 -50
  600. pyoomph-0.2.1/docs/source/tutorial/temporal/orbit.rst +0 -45
  601. pyoomph-0.2.1/docs/source/tutorial/temporal/ownho.rst +0 -62
  602. pyoomph-0.2.1/docs/source/tutorial/temporal/parallel_running.py +0 -49
  603. pyoomph-0.2.1/docs/source/tutorial/temporal/pendulum_generalized_coordinate.py +0 -63
  604. pyoomph-0.2.1/docs/source/tutorial/temporal/pendulum_lagrange_multiplier.py +0 -100
  605. pyoomph-0.2.1/docs/source/tutorial/temporal/predefined_harmonic_oscillator.py +0 -53
  606. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/arclength.rst +0 -102
  607. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/biftrack.rst +0 -103
  608. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_branch_switching.py +0 -182
  609. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_eigenvalues_transcritical.py +0 -46
  610. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_fold_arclength.py +0 -49
  611. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_fold_arclength_eigen.py +0 -59
  612. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_fold_param_change.py +0 -66
  613. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_fold_tracking.py +0 -48
  614. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_hopf_tracking_lorenz.py +0 -91
  615. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_pitchfork_arclength_eigen.py +0 -146
  616. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_pitchfork_tracking.py +0 -48
  617. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_stationary_transcritical.py +0 -51
  618. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_transcritital_arclength_eigen.py +0 -75
  619. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/bifurcation_transient_transcritical.py +0 -66
  620. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/branchswitch.rst +0 -126
  621. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/constraints.rst +0 -117
  622. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/deflated_continuation.py +0 -65
  623. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/deflated_solve.py +0 -55
  624. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/deflation.rst +0 -75
  625. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/eigenvals.rst +0 -22
  626. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/globalparams.rst +0 -64
  627. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/jumponbif.rst +0 -75
  628. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/lorenz_lyapunov.py +0 -77
  629. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/lyapunov.rst +0 -81
  630. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/pendulum_gencoord_eigenvalues.py +0 -62
  631. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/pendulum_lagrange_eigenvalues.py +0 -52
  632. pyoomph-0.2.1/docs/source/tutorial/temporal/stability/stationary.rst +0 -30
  633. pyoomph-0.2.1/docs/source/tutorial/temporal/stability.rst +0 -22
  634. pyoomph-0.2.1/docs/source/tutorial/temporal/testfunc.rst +0 -29
  635. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/adaptive_lorenz_attractor.py +0 -65
  636. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/adaptivity.rst +0 -73
  637. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/higherorder.rst +0 -7
  638. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/implicit.rst +0 -60
  639. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/midpoint.rst +0 -81
  640. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/oscillator_TPZ_scheme.py +0 -76
  641. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/oscillator_fully_implicit_schemes.py +0 -87
  642. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/time_stepping_schemes.py +0 -76
  643. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping/timescheme.rst +0 -94
  644. pyoomph-0.2.1/docs/source/tutorial/temporal/timestepping.rst +0 -19
  645. pyoomph-0.2.1/docs/source/tutorial/temporal/units.rst +0 -65
  646. pyoomph-0.2.1/docs/source/tutorial/temporal/van_der_pol_method_1.py +0 -61
  647. pyoomph-0.2.1/docs/source/tutorial/temporal/van_der_pol_method_2.py +0 -55
  648. pyoomph-0.2.1/docs/source/tutorial/temporal.rst +0 -27
  649. pyoomph-0.2.1/docs/source/tutorial/tutorial_bundle.py +0 -235
  650. pyoomph-0.2.1/docs/source/tutorial/vibecoding.rst +0 -45
  651. pyoomph-0.2.1/docs/source/tutorial.rst +0 -32
  652. pyoomph-0.2.1/pyoomph/_version.py +0 -1
  653. pyoomph-0.2.1/tests/test_state_file_restart.py +0 -376
  654. {pyoomph-0.2.1 → pyoomph-0.2.2}/.gitignore +0 -0
  655. {pyoomph-0.2.1 → pyoomph-0.2.2}/COPYING +0 -0
  656. {pyoomph-0.2.1 → pyoomph-0.2.2}/README.md +0 -0
  657. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/aiomfac_param_import.py +0 -0
  658. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/before_build_linux.sh +0 -0
  659. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/build_petsc_slepc.sh +0 -0
  660. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/build_static_ginac_cln.sh +0 -0
  661. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/build_static_ginac_cln_msys2.sh +0 -0
  662. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/build_static_libomp.sh +0 -0
  663. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/check_accelerate_reuse.py +0 -0
  664. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/compile_win_wheels_msys2.sh +0 -0
  665. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/download_and_build_static_ginac.sh +0 -0
  666. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/nightly_develop.conf.example +0 -0
  667. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/nightly_develop.sh +0 -0
  668. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/patches/ginac-deterministic-constant-hash.patch +0 -0
  669. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/patches/ginac-deterministic-hash-seed.patch +0 -0
  670. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/patches/patch_tqmesh.cmake +0 -0
  671. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/petsc_arch_diag.py +0 -0
  672. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/resolve_ginac_cln_versions.sh +0 -0
  673. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/tutorial_report_to_summary.py +0 -0
  674. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/windows_add_tkinter.py +0 -0
  675. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/windows_stubgen_diag.py +0 -0
  676. {pyoomph-0.2.1 → pyoomph-0.2.2}/citools/windows_tcc_diag.py +0 -0
  677. {pyoomph-0.2.1 → pyoomph-0.2.2}/cmake/ThirdPartySpectra.cmake +0 -0
  678. {pyoomph-0.2.1 → pyoomph-0.2.2}/cmake/ThirdPartyTQMesh.cmake +0 -0
  679. {pyoomph-0.2.1 → pyoomph-0.2.2}/cmake/ginac_determinism_probe.cpp +0 -0
  680. {pyoomph-0.2.1 → pyoomph-0.2.2}/cmake/stubgen_launcher.py +0 -0
  681. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/__main__.py +0 -0
  682. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/_deprecation.py +0 -0
  683. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/ALE.py +0 -0
  684. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/__init__.py +0 -0
  685. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/additional.py +0 -0
  686. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/advection_diffusion.py +0 -0
  687. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/cahn_hilliard.py +0 -0
  688. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/contact_angle.py +0 -0
  689. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/darcy.py +0 -0
  690. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/electrohydrodynamics.py +0 -0
  691. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/electrostatics.py +0 -0
  692. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/generic.py +0 -0
  693. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/harmonic_oscillator.py +0 -0
  694. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/helmholtz.py +0 -0
  695. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/kuramoto_sivashinsky.py +0 -0
  696. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/lubrication.py +0 -0
  697. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/multi_component.py +0 -0
  698. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/navier_stokes.py +0 -0
  699. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/ode.py +0 -0
  700. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/poisson.py +0 -0
  701. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/potential_flow.py +0 -0
  702. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/salt_transport.py +0 -0
  703. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/solid.py +0 -0
  704. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/stokes_stream_func.py +0 -0
  705. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/equations/surfactants.py +0 -0
  706. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/coordsys.py +0 -0
  707. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/phys_consts.py +0 -0
  708. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/expressions/vtu_interpol.py +0 -0
  709. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/external_tools/basilisk/__init__.py +0 -0
  710. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/external_tools/basilisk/qcc_code_gen.py +0 -0
  711. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/__init__.py +0 -0
  712. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/adaptive_recovery.py +0 -0
  713. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/assembly.py +0 -0
  714. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/bifurcation_tools.py +0 -0
  715. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/ccompiler.py +0 -0
  716. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/codegen.py +0 -0
  717. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/dof_ordering.py +0 -0
  718. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/floquet.py +0 -0
  719. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/jit_cache.py +0 -0
  720. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/logging.py +0 -0
  721. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/generic/mpi.py +0 -0
  722. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/jitbridge/__init__.py +0 -0
  723. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/__init__.py +0 -0
  724. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/aiomfac_electrolyte.py +0 -0
  725. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/dortmund.py +0 -0
  726. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/UNIFAC/original.py +0 -0
  727. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/__init__.py +0 -0
  728. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/csv_data/__init__.py +0 -0
  729. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/csv_data/surftens_water_12hexanediol.csv +0 -0
  730. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/csv_data/surftens_water_12hexanediol_pendant.csv +0 -0
  731. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/csv_data/surftens_water_12hexanediol_ring.csv +0 -0
  732. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/ions.py +0 -0
  733. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/mass_transfer.py +0 -0
  734. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/materials/surfactant_isotherms.py +0 -0
  735. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/__init__.py +0 -0
  736. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/curved_entities.py +0 -0
  737. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/droplet_meshes.py +0 -0
  738. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/interpolator.py +0 -0
  739. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/meshdatamerge.py +0 -0
  740. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/meshstate.py +0 -0
  741. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/ordering.py +0 -0
  742. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/simplemeshes.py +0 -0
  743. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/tqmesh.py +0 -0
  744. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/meshes/zeta.py +0 -0
  745. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/__init__.py +0 -0
  746. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/latex.py +0 -0
  747. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/plotting.py +0 -0
  748. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/plotting1d.py +0 -0
  749. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/plotting3d.py +0 -0
  750. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/output/states.py +0 -0
  751. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/paraview/pyoomph_eigen_extrusion_filter.py +0 -0
  752. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/py.typed +0 -0
  753. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/solvers/__init__.py +0 -0
  754. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/solvers/accelerate.py +0 -0
  755. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/solvers/pardiso.py +0 -0
  756. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/solvers/precice_adapter.py +0 -0
  757. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/solvers/scipy.py +0 -0
  758. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/typings/__init__.py +0 -0
  759. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/__init__.py +0 -0
  760. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/__init__.py +0 -0
  761. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/actions.py +0 -0
  762. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/model.py +0 -0
  763. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/panes.py +0 -0
  764. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/plotter.py +0 -0
  765. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/bifurcation_gui/tkapp.py +0 -0
  766. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/dropgeom.py +0 -0
  767. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/halleys_method.py +0 -0
  768. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/jacobian_analysis.py +0 -0
  769. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/lyapunov.py +0 -0
  770. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/paramscan.py +0 -0
  771. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/periodic_driving_response.py +0 -0
  772. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/rectangular_polar_mapping.py +0 -0
  773. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/smallest_circle.py +0 -0
  774. {pyoomph-0.2.1 → pyoomph-0.2.2}/pyoomph/utils/sympy.py +0 -0
  775. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/Makefile +0 -0
  776. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/bifurcation.cpp +0 -0
  777. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/bifurcation.hpp +0 -0
  778. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/ccompiler.cpp +0 -0
  779. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/ccompiler.hpp +0 -0
  780. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_0d1d.cpp +0 -0
  781. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_2d.cpp +0 -0
  782. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_3d.cpp +0 -0
  783. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_adapt.cpp +0 -0
  784. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_assembly.cpp +0 -0
  785. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_concrete.hpp +0 -0
  786. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_d2shape.cpp +0 -0
  787. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_dofs.cpp +0 -0
  788. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_geometry.cpp +0 -0
  789. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_hanging.cpp +0 -0
  790. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/elements_shapeinfo.cpp +0 -0
  791. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/exception.cpp +0 -0
  792. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/exception.hpp +0 -0
  793. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/ginac.hpp +0 -0
  794. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/hessian_tensor.cpp +0 -0
  795. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/hessian_tensor.hpp +0 -0
  796. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/kdtree.cpp +0 -0
  797. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/kdtree.hpp +0 -0
  798. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/lagr_error_estimator.cpp +0 -0
  799. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/lagr_error_estimator.hpp +0 -0
  800. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/logging.cpp +0 -0
  801. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/logging.hpp +0 -0
  802. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mac_accelerate.cpp +0 -0
  803. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mac_accelerate.hpp +0 -0
  804. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/macroelements.cpp +0 -0
  805. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/macroelements.hpp +0 -0
  806. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh.hpp +0 -0
  807. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh1d.cpp +0 -0
  808. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh1d.hpp +0 -0
  809. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh2d.cpp +0 -0
  810. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh2d.hpp +0 -0
  811. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh3d.cpp +0 -0
  812. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/mesh3d.hpp +0 -0
  813. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/missing_masters.hpp +0 -0
  814. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/codegen.cpp +0 -0
  815. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/geom_objects.cpp +0 -0
  816. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/mesh.cpp +0 -0
  817. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/mesh_handle.hpp +0 -0
  818. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/module.cpp +0 -0
  819. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/nb_array_utils.hpp +0 -0
  820. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/patch_stubs.py +0 -0
  821. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/problem.cpp +0 -0
  822. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/solver.cpp +0 -0
  823. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/spectra/spectra.cpp +0 -0
  824. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/timestepper.cpp +0 -0
  825. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/tqmesh/tqmesh.cpp +0 -0
  826. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nanobind/vector.cpp +0 -0
  827. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nodes.cpp +0 -0
  828. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/nodes.hpp +0 -0
  829. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/oomph_lib.hpp +0 -0
  830. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/parallel_assembly.cpp +0 -0
  831. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/periodic_bspline.cpp +0 -0
  832. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/periodic_bspline.hpp +0 -0
  833. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/pointlocator.cpp +0 -0
  834. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/pointlocator.hpp +0 -0
  835. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/problem.hpp +0 -0
  836. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/pyginacstruct.hpp +0 -0
  837. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/refdomain.cpp +0 -0
  838. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/refdomain.hpp +0 -0
  839. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/refineable_telements.cpp +0 -0
  840. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/refineable_telements.hpp +0 -0
  841. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/refinement_coupling.cpp +0 -0
  842. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/refinement_coupling.hpp +0 -0
  843. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/refinement_pattern.hpp +0 -0
  844. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/INFO_delaunator +0 -0
  845. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/INFO_nanoflann +0 -0
  846. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/INFO_tqmesh +0 -0
  847. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/delaunator.hpp +0 -0
  848. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/nanoflann.hpp +0 -0
  849. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/LICENCE +0 -0
  850. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/Makefile +0 -0
  851. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/cross_compile.sh +0 -0
  852. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelement_face_coordinate_translation_schemes.cc +0 -0
  853. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelement_face_coordinate_translation_schemes.h +0 -0
  854. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelements.cc +0 -0
  855. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Qelements.h +0 -0
  856. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Telements.cc +0 -0
  857. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Telements.h +0 -0
  858. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/Vector.h +0 -0
  859. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/algebraic_elements.cc +0 -0
  860. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/algebraic_elements.h +0 -0
  861. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/assembly_handler.cc +0 -0
  862. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/assembly_handler.h +0 -0
  863. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/binary_tree.h +0 -0
  864. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/communicator.cc +0 -0
  865. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/communicator.h +0 -0
  866. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/domain.cc +0 -0
  867. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/domain.h +0 -0
  868. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector.cc +0 -0
  869. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector.h +0 -0
  870. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector_with_halo.cc +0 -0
  871. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/double_vector_with_halo.h +0 -0
  872. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_external_element.cc +0 -0
  873. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_external_element.h +0 -0
  874. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_moving_nodes.cc +0 -0
  875. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/element_with_moving_nodes.h +0 -0
  876. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/elements.cc +0 -0
  877. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/elements.h +0 -0
  878. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/error_estimator.cc +0 -0
  879. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/error_estimator.h +0 -0
  880. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/explicit_timesteppers.cc +0 -0
  881. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/explicit_timesteppers.h +0 -0
  882. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/generalised_timesteppers.h +0 -0
  883. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/geom_objects.h +0 -0
  884. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/integral.cc +0 -0
  885. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/integral.h +0 -0
  886. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_algebra_distribution.cc +0 -0
  887. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_algebra_distribution.h +0 -0
  888. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_solver.cc +0 -0
  889. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/linear_solver.h +0 -0
  890. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element.cc +0 -0
  891. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element.h +0 -0
  892. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element_node_update_element.cc +0 -0
  893. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/macro_element_node_update_element.h +0 -0
  894. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/map_matrix.h +0 -0
  895. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/matrices.cc +0 -0
  896. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/matrices.h +0 -0
  897. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh.cc +0 -0
  898. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh.h +0 -0
  899. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh_as_geometric_object.cc +0 -0
  900. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/mesh_as_geometric_object.h +0 -0
  901. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/missing_masters.cc +0 -0
  902. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/missing_masters.h +0 -0
  903. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/missing_masters.template.cc +0 -0
  904. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/nodes.cc +0 -0
  905. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/nodes.h +0 -0
  906. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/octree.cc +0 -0
  907. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/octree.h +0 -0
  908. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_definitions.cc +0 -0
  909. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_definitions.h +0 -0
  910. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_utilities.cc +0 -0
  911. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/oomph_utilities.h +0 -0
  912. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/orthpoly.cc +0 -0
  913. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/orthpoly.h +0 -0
  914. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/partitioning.cc +0 -0
  915. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/partitioning.h +0 -0
  916. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/problem.cc +0 -0
  917. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/problem.h +0 -0
  918. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/quadtree.cc +0 -0
  919. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/quadtree.h +0 -0
  920. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_brick_element.cc +0 -0
  921. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_brick_element.h +0 -0
  922. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_elements.cc +0 -0
  923. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_elements.h +0 -0
  924. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_line_element.cc +0 -0
  925. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_line_element.h +0 -0
  926. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_mesh.cc +0 -0
  927. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_mesh.h +0 -0
  928. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_mesh.template.cc +0 -0
  929. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_quad_element.cc +0 -0
  930. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/refineable_quad_element.h +0 -0
  931. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_container.cc +0 -0
  932. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_container.h +0 -0
  933. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_parameters.cc +0 -0
  934. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sample_point_parameters.h +0 -0
  935. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/shape.h +0 -0
  936. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/sparse_vector.h +0 -0
  937. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/timesteppers.cc +0 -0
  938. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/timesteppers.h +0 -0
  939. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/tree.cc +0 -0
  940. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/tree.h +0 -0
  941. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/tree.template.cc +0 -0
  942. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/unstructured_two_d_mesh_geometry_base.cc +0 -0
  943. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thirdparty/oomph-lib/include/unstructured_two_d_mesh_geometry_base.h +0 -0
  944. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thread_state.cpp +0 -0
  945. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/thread_state.hpp +0 -0
  946. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/timestepper.cpp +0 -0
  947. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/timestepper.hpp +0 -0
  948. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/tracers.cpp +0 -0
  949. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/tracers.hpp +0 -0
  950. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/wedges_and_pyramids.cpp +0 -0
  951. {pyoomph-0.2.1 → pyoomph-0.2.2}/src/wedges_and_pyramids.hpp +0 -0
  952. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/README.md +0 -0
  953. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/arclength_inner_product_worker.py +0 -0
  954. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/arclength_metric_menu_worker.py +0 -0
  955. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/axisymm_physics_worker.py +0 -0
  956. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/axisymm_reconnection_worker.py +0 -0
  957. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/benchmarks/bench_assembly.py +0 -0
  958. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/benchmarks/bench_periodic_orbit_1d.py +0 -0
  959. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/boundary_interpolation_worker.py +0 -0
  960. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/box_cases.py +0 -0
  961. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/box_cases_3d.py +0 -0
  962. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/box_mesh_3d.py +0 -0
  963. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/branch_switch_worker.py +0 -0
  964. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/command_rollback_worker.py +0 -0
  965. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/conftest.py +0 -0
  966. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/deflation_gui_worker.py +0 -0
  967. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/deflation_tab_worker.py +0 -0
  968. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/delete_branch_worker.py +0 -0
  969. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/extremum_observable_worker.py +0 -0
  970. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/floquet_worker.py +0 -0
  971. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/gui_close_teardown_worker.py +0 -0
  972. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/hopf_lyapunov_worker.py +0 -0
  973. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/inverted_remesh_worker.py +0 -0
  974. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/jit_compiler_probe.py +0 -0
  975. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_adaptive_recovery_worker.py +0 -0
  976. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_arclength_smoothing_worker.py +0 -0
  977. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_axisymm_reconnection_worker.py +0 -0
  978. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_bifurcation_worker.py +0 -0
  979. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_boundary_membership_worker.py +0 -0
  980. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_branch_switch_worker.py +0 -0
  981. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_condensation_worker.py +0 -0
  982. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_curved_worker.py +0 -0
  983. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_deflation_worker.py +0 -0
  984. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_eigen_adapt_worker.py +0 -0
  985. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_eigen_worker.py +0 -0
  986. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_eigendynamics_worker.py +0 -0
  987. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_error_estimator_worker.py +0 -0
  988. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_facet_fields_worker.py +0 -0
  989. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_global_meshdata_worker.py +0 -0
  990. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_gmsh_write_worker.py +0 -0
  991. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_missing_pymetis_worker.py +0 -0
  992. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_newton_abort_worker.py +0 -0
  993. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_openmp_worker.py +0 -0
  994. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_orbit_output_worker.py +0 -0
  995. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_periodic_worker.py +0 -0
  996. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_remesh_agreement_worker.py +0 -0
  997. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_remeshing_worker.py +0 -0
  998. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_serial_solver_worker.py +0 -0
  999. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_state_file_worker.py +0 -0
  1000. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_structural_worker.py +0 -0
  1001. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_tracer_worker.py +0 -0
  1002. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_undistributable_worker.py +0 -0
  1003. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/mpi_worker.py +0 -0
  1004. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/must_init_worker.py +0 -0
  1005. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/normal_mode_worker.py +0 -0
  1006. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/orbit_gui_worker.py +0 -0
  1007. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/orbit_tab_worker.py +0 -0
  1008. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/periodic_cases.py +0 -0
  1009. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/petsc_options_worker.py +0 -0
  1010. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/secondary_hopf_worker.py +0 -0
  1011. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/secondary_real_bifurcation_worker.py +0 -0
  1012. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/shortcut_worker.py +0 -0
  1013. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/slab_mesh.py +0 -0
  1014. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/stale_tangent_worker.py +0 -0
  1015. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/stripe_worker.py +0 -0
  1016. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/tag_output_worker.py +0 -0
  1017. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_activity_aiomfac.py +0 -0
  1018. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_adaptive_2d_campaign.py +0 -0
  1019. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_adaptive_3d_campaign.py +0 -0
  1020. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_adaptive_interface_coupling.py +0 -0
  1021. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_adaptive_resolve_recovery.py +0 -0
  1022. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_adaptivity.py +0 -0
  1023. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_coalescence_remesh.py +0 -0
  1024. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_pinchoff_remesh.py +0 -0
  1025. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_reconnection_detect.py +0 -0
  1026. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_reconnection_tqmesh.py +0 -0
  1027. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_reconnection_transfer.py +0 -0
  1028. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_transferred_history.py +0 -0
  1029. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_axisymm_twophase_remesh.py +0 -0
  1030. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_azimuthal_mode_list.py +0 -0
  1031. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_bifurcation_tracker_jacobians.py +0 -0
  1032. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_blocksolve_refused.py +0 -0
  1033. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_boundary_element_identification.py +0 -0
  1034. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_boundary_error_estimator.py +0 -0
  1035. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_boundary_interpolation_fixes.py +0 -0
  1036. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_compilers.py +0 -0
  1037. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_constrained_adaptivity.py +0 -0
  1038. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_critical_wavenumber_tracker.py +0 -0
  1039. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_curved_boundaries.py +0 -0
  1040. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_deflation.py +0 -0
  1041. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_deprecated_coordsys_kwarg.py +0 -0
  1042. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_desired_ndof.py +0 -0
  1043. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_dirichlet_matrix_manipulation.py +0 -0
  1044. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_dof_description_walk.py +0 -0
  1045. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_dof_ordering.py +0 -0
  1046. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_domain_name_patterns.py +0 -0
  1047. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_droplet_coalescence.py +0 -0
  1048. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_ehd.py +0 -0
  1049. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_eigen_during_tracking.py +0 -0
  1050. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_electrostatics.py +0 -0
  1051. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_facet_adjacency.py +0 -0
  1052. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_floquet_multipliers.py +0 -0
  1053. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_generated_code_expressions.py +0 -0
  1054. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_globally_convergent_newton.py +0 -0
  1055. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_hopf_lyapunov.py +0 -0
  1056. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_interface_mesh_stiffening.py +0 -0
  1057. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_internal_facet_fields.py +0 -0
  1058. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_jacobian_block_flags.py +0 -0
  1059. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_linear_response.py +0 -0
  1060. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_linear_solver_selfcheck.py +0 -0
  1061. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_loaded_text_file.py +0 -0
  1062. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mixed_3d.py +0 -0
  1063. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mixed_mesh.py +0 -0
  1064. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mixture_by_concentration.py +0 -0
  1065. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_adaptive_recovery.py +0 -0
  1066. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_adaptivity.py +0 -0
  1067. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_adaptivity_3d.py +0 -0
  1068. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_arclength_smoothing.py +0 -0
  1069. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_bifurcation_tracking.py +0 -0
  1070. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_boundary_membership.py +0 -0
  1071. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_branch_switch.py +0 -0
  1072. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_curved_boundaries.py +0 -0
  1073. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_deflation.py +0 -0
  1074. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_dof_description.py +0 -0
  1075. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_dof_ordering.py +0 -0
  1076. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_dof_ordering_rowsplit.py +0 -0
  1077. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_eigen_adapt.py +0 -0
  1078. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_eigendynamics.py +0 -0
  1079. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_eigenvalues.py +0 -0
  1080. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_error_estimator.py +0 -0
  1081. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_facet_fields.py +0 -0
  1082. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_floquet.py +0 -0
  1083. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_global_meshdata.py +0 -0
  1084. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_hopf_lyapunov.py +0 -0
  1085. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_interface_coupling.py +0 -0
  1086. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_newton_abort.py +0 -0
  1087. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_openmp_assembly.py +0 -0
  1088. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_orbit_output.py +0 -0
  1089. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_periodic.py +0 -0
  1090. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_rank_zero_failures.py +0 -0
  1091. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_remeshing.py +0 -0
  1092. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_row_layout.py +0 -0
  1093. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_serial_linear_solvers.py +0 -0
  1094. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_state_files.py +0 -0
  1095. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_static_condensation.py +0 -0
  1096. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_structural_assembly.py +0 -0
  1097. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_tracers.py +0 -0
  1098. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_mpi_undistributable.py +0 -0
  1099. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_multiple_problems.py +0 -0
  1100. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_newton_abort.py +0 -0
  1101. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_normal_derivatives.py +0 -0
  1102. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_normal_form_degenerate_a.py +0 -0
  1103. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_normal_form_units.py +0 -0
  1104. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_normal_mode_branch_switch.py +0 -0
  1105. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_openmp_assembly.py +0 -0
  1106. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_openmp_present.py +0 -0
  1107. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_output_vector_tensor_grouping.py +0 -0
  1108. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_petsc_options_hygiene.py +0 -0
  1109. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_plotter1d_secondary_axis.py +0 -0
  1110. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_pyramid_refinement.py +0 -0
  1111. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_quadrature.py +0 -0
  1112. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_rayleigh_plateau_pinchoff.py +0 -0
  1113. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_remesh_inside_solve.py +0 -0
  1114. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_remeshing_leaks.py +0 -0
  1115. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_salt_transport.py +0 -0
  1116. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_second_derivatives.py +0 -0
  1117. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_segment_ordering.py +0 -0
  1118. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_shared_equations.py +0 -0
  1119. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_slepc_present.py +0 -0
  1120. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_solid_momentum.py +0 -0
  1121. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_solver_deflation_hook.py +0 -0
  1122. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_solver_failure_recovery.py +0 -0
  1123. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_spectra_eigensolver.py +0 -0
  1124. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_spectra_present.py +0 -0
  1125. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_stabilized_transport.py +0 -0
  1126. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_state_file_header.py +0 -0
  1127. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_state_file_relocation.py +0 -0
  1128. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_state_file_template_class.py +0 -0
  1129. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_static_condensation.py +0 -0
  1130. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_stokes.py +0 -0
  1131. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_structural_assembly.py +0 -0
  1132. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_stubs_present.py +0 -0
  1133. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_surface_charge_transport.py +0 -0
  1134. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_surfactant_transport.py +0 -0
  1135. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_symmetric_solver_switch.py +0 -0
  1136. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_tensor_fields.py +0 -0
  1137. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_tet_refinement.py +0 -0
  1138. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_triangle_refinement.py +0 -0
  1139. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_two_live_problems.py +0 -0
  1140. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_vectorial_conditions.py +0 -0
  1141. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_viscoelastic.py +0 -0
  1142. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_viscoelastic_cylinder.py +0 -0
  1143. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/test_wedge_refinement.py +0 -0
  1144. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/tracked_state_worker.py +0 -0
  1145. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/transient_leave_worker.py +0 -0
  1146. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/two_domain_cases.py +0 -0
  1147. {pyoomph-0.2.1 → pyoomph-0.2.2}/tests/units_worker.py +0 -0
@@ -1,5 +1,91 @@
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
+
3
89
  ## [0.2.1]
4
90
 
5
91
  Released as urgent patch of 0.2.0.
@@ -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}"
@@ -28,14 +28,23 @@ If you encounter segmentation faults during solving, please try to downgrade you
28
28
 
29
29
  ## On Mac
30
30
 
31
- The fast `MKL Pardiso` solver from `mkl` is not available on `arm64` Macs. Since the default solver on `arm64` Macs (`Accelerate`) is unable to tackle larger problems at reasonable times, you definitely either want to use `MKL Pardiso` with a workaround or use `MUMPS` via `PETSc`.
32
- To use `MKL Pardiso`, 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)).
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.
32
+
33
+ The recommended way is `MUMPS`, which runs natively on `arm64`. There are two routes:
34
+
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
36
+
37
+ > git clone https://github.com/pyoomph/pyoomph_mumps.git ; cd pyoomph_mumps ; python3 -m pip install .
38
+
39
+ See [here](https://pyoomph.readthedocs.io/en/latest/tutorial/installation/mumps.html) for details and build options.
40
+
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.
42
+
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)).
33
44
  Also, please downgrade `mkl` by
34
45
 
35
46
  > python3 -m pip install mkl==2021.4.0
36
47
 
37
- The alternative, solving with `PETSc/MUMPS`, runs natively on `arm64`, but requires the installation of `PETSc/MUMPS`. See [here](https://pyoomph.readthedocs.io/en/latest/tutorial/installation/petscslepc.html) for details.
38
-
39
48
  Make sure to have the `Xcode` developer tools, e.g. by installing them via
40
49
 
41
50
  > xcode-select --install
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyoomph
3
- Version: 0.2.1
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)