turbigen 2.1.0__tar.gz → 2.2.3__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 (334) hide show
  1. {turbigen-2.1.0 → turbigen-2.2.3}/.gitlab-ci.yml +2 -0
  2. {turbigen-2.1.0 → turbigen-2.2.3}/PKG-INFO +3 -1
  3. {turbigen-2.1.0 → turbigen-2.2.3}/bin/noquit.sh +1 -0
  4. {turbigen-2.1.0 → turbigen-2.2.3}/doc/changelog.rst +22 -0
  5. {turbigen-2.1.0 → turbigen-2.2.3}/doc/conf.py +1 -0
  6. {turbigen-2.1.0 → turbigen-2.2.3}/doc/generate_examples.py +7 -3
  7. turbigen-2.2.3/doc/generate_meanline.py +54 -0
  8. turbigen-2.2.3/doc/generate_solver.py +104 -0
  9. {turbigen-2.1.0 → turbigen-2.2.3}/doc/index.rst +3 -1
  10. turbigen-2.2.3/doc/meanline.rst +264 -0
  11. turbigen-2.2.3/doc/refs.bib +80 -0
  12. turbigen-2.2.3/doc/solver.rst +455 -0
  13. turbigen-2.2.3/dspace.yaml +86 -0
  14. {turbigen-2.1.0 → turbigen-2.2.3}/examples/axial_turbine.yaml +1 -1
  15. {turbigen-2.1.0 → turbigen-2.2.3}/examples/turbine_cascade.yaml +3 -3
  16. {turbigen-2.1.0 → turbigen-2.2.3}/matplotlibrc +1 -1
  17. {turbigen-2.1.0 → turbigen-2.2.3}/meson.build +1 -0
  18. turbigen-2.2.3/plots/profile.txt +226 -0
  19. {turbigen-2.1.0 → turbigen-2.2.3}/pyproject.toml +5 -2
  20. turbigen-2.2.3/scripts/make_table.py +11 -0
  21. turbigen-2.2.3/scripts/plot_dspace.py +44 -0
  22. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/profile.sh +4 -1
  23. turbigen-2.2.3/scripts/test_dspace.py +63 -0
  24. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/smooth.f90 +0 -83
  25. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/__init__.py +1 -1
  26. turbigen-2.2.3/src/turbigen/__main__.py +3 -0
  27. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/annulus.py +3 -3
  28. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/autogrid.py +44 -29
  29. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/base.py +17 -297
  30. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/blade.py +11 -3
  31. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/config2.py +146 -46
  32. turbigen-2.2.3/src/turbigen/dspace.py +469 -0
  33. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/flowfield.py +4 -0
  34. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/fluid.py +4 -4
  35. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/grid.py +1 -1
  36. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/hmesh.py +0 -1
  37. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/inlet.py +2 -11
  38. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/iterators.py +34 -5
  39. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/job.py +49 -5
  40. turbigen-2.2.3/src/turbigen/job_server.py +119 -0
  41. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/main.py +34 -9
  42. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/meanline.py +305 -50
  43. turbigen-2.2.3/src/turbigen/nblade.py +159 -0
  44. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post.py +4 -1
  45. turbigen-2.2.3/src/turbigen/solvers/base.py +203 -0
  46. turbigen-2.1.0/src/turbigen/solvers/emb.py → turbigen-2.2.3/src/turbigen/solvers/ember.py +79 -60
  47. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/ts3.py +73 -60
  48. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/ts4.py +138 -89
  49. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/tables.py +4 -5
  50. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/thickness.py +0 -1
  51. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/util.py +22 -519
  52. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/yaml.py +0 -1
  53. turbigen-2.2.3/tests/data/hydrogen_table_known_good.npz +0 -0
  54. turbigen-2.2.3/tests/data/water_table_known_good.npz +0 -0
  55. turbigen-2.2.3/tests/gpu/submit.sh +16 -0
  56. turbigen-2.2.3/tests/gpu/ts3.yaml +40 -0
  57. turbigen-2.2.3/tests/gpu/ts4.yaml +40 -0
  58. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_bcond.py +5 -5
  59. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_distribute.py +1 -1
  60. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_nozzle.py +11 -11
  61. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_operators.py +1 -1
  62. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_periodic_step.py +2 -2
  63. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_smooth.py +11 -6
  64. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_tables.py +0 -6
  65. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_visc.py +5 -5
  66. turbigen-2.1.0/plots/profile.txt +0 -1
  67. turbigen-2.1.0/plug/repeat.py +0 -98
  68. turbigen-2.1.0/plug/test.py +0 -138
  69. turbigen-2.1.0/src/turbigen/nblade.py +0 -83
  70. turbigen-2.1.0/src/turbigen/post/blade_surf_dist.py +0 -153
  71. turbigen-2.1.0/src/turbigen/post/contour.py +0 -280
  72. turbigen-2.1.0/src/turbigen/post/plot_annulus.py +0 -95
  73. turbigen-2.1.0/src/turbigen/post/plot_convergence.py +0 -122
  74. turbigen-2.1.0/src/turbigen/post/write_annulus.py +0 -28
  75. turbigen-2.1.0/src/turbigen/run.py +0 -1443
  76. turbigen-2.1.0/src/turbigen/solver.py +0 -123
  77. turbigen-2.1.0/src/turbigen/solvers/base.py +0 -34
  78. turbigen-2.1.0/src/turbigen/vtri.py +0 -66
  79. turbigen-2.1.0/tests/conftest.py +0 -10
  80. turbigen-2.1.0/tests/not_test_body.py +0 -261
  81. turbigen-2.1.0/tests/not_test_examples.py +0 -65
  82. {turbigen-2.1.0 → turbigen-2.2.3}/.flake8 +0 -0
  83. {turbigen-2.1.0 → turbigen-2.2.3}/.gitignore +0 -0
  84. {turbigen-2.1.0 → turbigen-2.2.3}/.gitlab-ci-local/.gitignore +0 -0
  85. {turbigen-2.1.0 → turbigen-2.2.3}/.pre-commit-config.yaml +0 -0
  86. {turbigen-2.1.0 → turbigen-2.2.3}/COPYING +0 -0
  87. {turbigen-2.1.0 → turbigen-2.2.3}/MANIFEST.in +0 -0
  88. {turbigen-2.1.0 → turbigen-2.2.3}/Makefile +0 -0
  89. {turbigen-2.1.0 → turbigen-2.2.3}/README.md +0 -0
  90. {turbigen-2.1.0 → turbigen-2.2.3}/bin/get_ssh_agent.sh +0 -0
  91. {turbigen-2.1.0 → turbigen-2.2.3}/bin/setup.sh +0 -0
  92. {turbigen-2.1.0 → turbigen-2.2.3}/doc/Makefile +0 -0
  93. {turbigen-2.1.0 → turbigen-2.2.3}/doc/_static/siunitx.js +0 -0
  94. {turbigen-2.1.0 → turbigen-2.2.3}/doc/examples/index.rst +0 -0
  95. {turbigen-2.1.0 → turbigen-2.2.3}/doc/license.rst +0 -0
  96. {turbigen-2.1.0 → turbigen-2.2.3}/doc/nomenclature.rst +0 -0
  97. {turbigen-2.1.0 → turbigen-2.2.3}/doc/quickstart.rst +0 -0
  98. {turbigen-2.1.0/doc-old → turbigen-2.2.3/doc}/references.rst +0 -0
  99. {turbigen-2.1.0 → turbigen-2.2.3}/doc/turbigen-logo.svg +0 -0
  100. {turbigen-2.1.0 → turbigen-2.2.3}/doc/tutorial.rst.not +0 -0
  101. {turbigen-2.1.0 → turbigen-2.2.3}/doc/usage.rst +0 -0
  102. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/Makefile +0 -0
  103. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.buildinfo +0 -0
  104. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/changelog.doctree +0 -0
  105. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/config.doctree +0 -0
  106. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/environment.pickle +0 -0
  107. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/fluid.doctree +0 -0
  108. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/index.doctree +0 -0
  109. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/install.doctree +0 -0
  110. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/license.doctree +0 -0
  111. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/meanline.doctree +0 -0
  112. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/mesh.doctree +0 -0
  113. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/nomenclature.doctree +0 -0
  114. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/post.doctree +0 -0
  115. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/references.doctree +0 -0
  116. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/solver.doctree +0 -0
  117. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/tutorial.doctree +0 -0
  118. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/usage.doctree +0 -0
  119. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/index.html +0 -0
  120. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/base.html +0 -0
  121. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/fluid.html +0 -0
  122. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/hmesh.html +0 -0
  123. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/meanline/axial_turbine.html +0 -0
  124. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/meanline/radial_compressor.html +0 -0
  125. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/meanline/turbine_cascade.html +0 -0
  126. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/ohmesh.html +0 -0
  127. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/solvers/ts3.html +0 -0
  128. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/solvers/ts4.html +0 -0
  129. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/changelog.rst.txt +0 -0
  130. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/config.rst.txt +0 -0
  131. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/fluid.rst.txt +0 -0
  132. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/index.rst.txt +0 -0
  133. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/install.rst.txt +0 -0
  134. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/license.rst.txt +0 -0
  135. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/meanline.rst.txt +0 -0
  136. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/mesh.rst.txt +0 -0
  137. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/nomenclature.rst.txt +0 -0
  138. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/post.rst.txt +0 -0
  139. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/references.rst.txt +0 -0
  140. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/solver.rst.txt +0 -0
  141. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/tutorial.rst.txt +0 -0
  142. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/usage.rst.txt +0 -0
  143. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/alabaster.css +0 -0
  144. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/basic.css +0 -0
  145. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/custom.css +0 -0
  146. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/doctools.js +0 -0
  147. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/documentation_options.js +0 -0
  148. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/file.png +0 -0
  149. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/language_data.js +0 -0
  150. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/minus.png +0 -0
  151. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/plot_directive.css +0 -0
  152. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/plus.png +0 -0
  153. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/pygments.css +0 -0
  154. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/searchtools.js +0 -0
  155. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/siunitx.js +0 -0
  156. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/sphinx_highlight.js +0 -0
  157. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/changelog.html +0 -0
  158. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/config.html +0 -0
  159. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/fluid.html +0 -0
  160. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/genindex.html +0 -0
  161. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/index.html +0 -0
  162. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/install.html +0 -0
  163. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/license.html +0 -0
  164. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/meanline.html +0 -0
  165. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/mesh.html +0 -0
  166. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/nomenclature.html +0 -0
  167. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/objects.inv +0 -0
  168. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/post.html +0 -0
  169. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/py-modindex.html +0 -0
  170. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/references.html +0 -0
  171. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/search.html +0 -0
  172. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/searchindex.js +0 -0
  173. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/solver.html +0 -0
  174. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/tutorial.html +0 -0
  175. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/usage.html +0 -0
  176. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_static/siunitx.js +0 -0
  177. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/changelog.rst +0 -0
  178. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/conf.py +0 -0
  179. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/config.rst +0 -0
  180. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/dummy_post.py +0 -0
  181. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/fluid.rst +0 -0
  182. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/index.rst +0 -0
  183. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/install.rst +0 -0
  184. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/license.rst +0 -0
  185. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/make.bat +0 -0
  186. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/meanline.rst +0 -0
  187. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/mesh.rst +0 -0
  188. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/method.md +0 -0
  189. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/nomenclature.rst +0 -0
  190. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/post.rst +0 -0
  191. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/refs.bib +0 -0
  192. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/config.yaml +0 -0
  193. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/inverse.yaml +0 -0
  194. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/log_turbigen.txt +0 -0
  195. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/mean_line_actual.yaml +0 -0
  196. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/mean_line_nominal.yaml +0 -0
  197. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/config.yaml +0 -0
  198. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/inverse.yaml +0 -0
  199. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/log_turbigen.txt +0 -0
  200. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/mean_line_actual.yaml +0 -0
  201. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/mean_line_nominal.yaml +0 -0
  202. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/solver.rst +0 -0
  203. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/tutorial.rst +0 -0
  204. {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/usage.rst +0 -0
  205. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/analysis.yaml +0 -0
  206. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/axial_compressor_rotor.yaml +0 -0
  207. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/axial_turbine.yaml +0 -0
  208. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/axial_turbine_ts4.yaml +0 -0
  209. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_fit.yaml +0 -0
  210. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_iter.yaml +0 -0
  211. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_off_design.yaml +0 -0
  212. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_p3d.yaml +0 -0
  213. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_post.yaml +0 -0
  214. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_test.yaml +0 -0
  215. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/flat_plate.yaml +0 -0
  216. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/include1.yaml +0 -0
  217. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/include2.yaml +0 -0
  218. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/mixed_compressor.yaml +0 -0
  219. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/profile.yaml +0 -0
  220. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/pure_radial_compressor.yaml +0 -0
  221. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/quad_camber.yaml +0 -0
  222. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/radial_compressor.yaml +0 -0
  223. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_df.yaml +0 -0
  224. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_ds_025.yaml +0 -0
  225. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_ds_04.yaml +0 -0
  226. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_ds_055.yaml +0 -0
  227. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_xpeak.yaml +0 -0
  228. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/turbine_cascade.yaml +0 -0
  229. {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/turbine_include.yaml +0 -0
  230. {turbigen-2.1.0 → turbigen-2.2.3}/plots/bench.dat +0 -0
  231. {turbigen-2.1.0 → turbigen-2.2.3}/pytest.ini +0 -0
  232. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/benchmark.py +0 -0
  233. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/benchmark.sh +0 -0
  234. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/eval_fitted_design_space.py +0 -0
  235. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/fit_eta_tt.json +0 -0
  236. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/plot_benchmark.py +0 -0
  237. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/plot_camber.py +0 -0
  238. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/plot_thickness.py +0 -0
  239. {turbigen-2.1.0 → turbigen-2.2.3}/scripts/read_cuts.py +0 -0
  240. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/distribute.f90 +0 -0
  241. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolve.f90 +0 -0
  242. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolvec-f2pywrappers.f +0 -0
  243. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolvec-f2pywrappers2.f90 +0 -0
  244. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolvecmodule.c +0 -0
  245. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/fluxes.f90 +0 -0
  246. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/indexing.f90 +0 -0
  247. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/meson.build +0 -0
  248. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/multigrid.f90 +0 -0
  249. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/operators.f90 +0 -0
  250. {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/viscous.f90 +0 -0
  251. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/__init__.py +0 -0
  252. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/ag_server.sh +0 -0
  253. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/reader.py +0 -0
  254. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/script_ag.py2 +0 -0
  255. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/script_igg.py2 +0 -0
  256. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/script_sh +0 -0
  257. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/server.py +0 -0
  258. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/average.py +0 -0
  259. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/camber.py +0 -0
  260. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/__init__.py +0 -0
  261. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/check.py +0 -0
  262. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/double.py +0 -0
  263. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/exceptions.py +0 -0
  264. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/plot.py +0 -0
  265. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/single.py +0 -0
  266. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/symmetric.py +0 -0
  267. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/util.py +0 -0
  268. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/compflow_native.py +0 -0
  269. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/exceptions.py +0 -0
  270. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/geometry.py +0 -0
  271. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/marching_cubes.py +0 -0
  272. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/mesh.py +0 -0
  273. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/ohmesh.py +0 -0
  274. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/polynomial.py +0 -0
  275. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/calc_surf_dissipation.py +0 -0
  276. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/check_phase.py +0 -0
  277. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/find_extrema.py +0 -0
  278. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_blade.py +0 -0
  279. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_camber.py +0 -0
  280. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_incidence.py +0 -0
  281. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_nose.py +0 -0
  282. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_section.py +0 -0
  283. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_thickness.py +0 -0
  284. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/spanwise.py +0 -0
  285. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/write_cuts.py +0 -0
  286. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/write_ibl.py +0 -0
  287. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/write_stl.py +0 -0
  288. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/convert_ts3_to_ts4_native.py +0 -0
  289. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/plot3d.py +0 -0
  290. {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/util_post.py +0 -0
  291. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/emb.yaml +0 -0
  292. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/config.yaml +0 -0
  293. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/inverse.yaml +0 -0
  294. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/log_turbigen.txt +0 -0
  295. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/mean_line_actual.yaml +0 -0
  296. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/mean_line_nominal.yaml +0 -0
  297. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/post/contour_Cp_spf_0.51.npz +0 -0
  298. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/post/pressure_distributions_raw.npz +0 -0
  299. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3.yaml +0 -0
  300. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/stage.yaml +0 -0
  301. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/emb.yaml +0 -0
  302. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/plot.py +0 -0
  303. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/run/config.yaml +0 -0
  304. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/run/log_turbigen.txt +0 -0
  305. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/run/mean_line_nominal.yaml +0 -0
  306. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3/inverse.yaml +0 -0
  307. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3/post/contour_Ys_m_2.05.npz +0 -0
  308. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3/post/pressure_distributions_raw.npz +0 -0
  309. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3.yaml +0 -0
  310. {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine_oh/emb.yaml +0 -0
  311. {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/cascade_splitter.tar.gz +0 -0
  312. {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/cascade_splitter.yaml +0 -0
  313. {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/cfd_cut.json +0 -0
  314. {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/sections.dat +0 -0
  315. {turbigen-2.1.0 → turbigen-2.2.3}/tests/not_test_periodic.py +0 -0
  316. {turbigen-2.1.0 → turbigen-2.2.3}/tests/not_test_rotor.py +0 -0
  317. {turbigen-2.1.0 → turbigen-2.2.3}/tests/not_test_splitter.py +0 -0
  318. {turbigen-2.1.0 → turbigen-2.2.3}/tests/pdist_ts3.npz +0 -0
  319. {turbigen-2.1.0 → turbigen-2.2.3}/tests/pipe.py +0 -0
  320. {turbigen-2.1.0 → turbigen-2.2.3}/tests/plate.yaml +0 -0
  321. {turbigen-2.1.0 → turbigen-2.2.3}/tests/reformat_sections.py +0 -0
  322. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_average.py +0 -0
  323. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_cells.py +0 -0
  324. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_fluid.py +0 -0
  325. {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_wall.py +0 -0
  326. {turbigen-2.1.0 → turbigen-2.2.3}/tests/turning_duct.py +0 -0
  327. {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcd_yp5_ts3.csv +0 -0
  328. {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcd_yp5_turb.csv +0 -0
  329. {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_ts3.csv +0 -0
  330. {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_turb_ts3.csv +0 -0
  331. {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_yp5_ts3.csv +0 -0
  332. {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_yp5_turb.csv +0 -0
  333. {turbigen-2.1.0 → turbigen-2.2.3}/tutorial/config.yaml +0 -0
  334. /turbigen-2.1.0/tutorial/fan.py → /turbigen-2.2.3/tutorial/fan.notpy +0 -0
@@ -30,6 +30,7 @@ build_wheels:
30
30
  # Source dist
31
31
  - python -m build --sdist
32
32
  artifacts:
33
+ expire_in: 2 weeks
33
34
  paths:
34
35
  - dist
35
36
 
@@ -65,6 +66,7 @@ doc:
65
66
  - doc/_build
66
67
  script:
67
68
  - python doc/generate_examples.py
69
+ - python doc/generate_meanline.py
68
70
  - sphinx-build -W doc doc/_build
69
71
 
70
72
  pages:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: turbigen
3
- Version: 2.1.0
3
+ Version: 2.2.3
4
4
  Summary: Framework for turbomachinery design and computational fluid dynamics simulation
5
5
  Keywords: turbomachinery,computational fluid dynamics,compressor,turbine
6
6
  Author-Email: James Brind <jb753@cam.ac.uk>
@@ -24,6 +24,7 @@ Requires-Dist: sphinx; extra == "dev"
24
24
  Requires-Dist: sphinx-autobuild; extra == "dev"
25
25
  Requires-Dist: sphinx-argparse; extra == "dev"
26
26
  Requires-Dist: sphinxcontrib-programoutput; extra == "dev"
27
+ Requires-Dist: sphinxcontrib-bibtex; extra == "dev"
27
28
  Requires-Dist: autodocsumm; extra == "dev"
28
29
  Requires-Dist: pytest; extra == "dev"
29
30
  Requires-Dist: pre-commit; extra == "dev"
@@ -31,6 +32,7 @@ Requires-Dist: build; extra == "dev"
31
32
  Requires-Dist: cibuildwheel; extra == "dev"
32
33
  Requires-Dist: twine; extra == "dev"
33
34
  Requires-Dist: bump-my-version; extra == "dev"
35
+ Requires-Dist: setuptools; extra == "dev"
34
36
  Provides-Extra: parallel
35
37
  Requires-Dist: mpi4py~=3.1.6; extra == "parallel"
36
38
  Description-Content-Type: text/markdown
@@ -1,4 +1,5 @@
1
1
  #!/bin/bash
2
+ exit 0
2
3
  # noquit DIR
3
4
  # Exit 1 if any 'quit()' or print statements are found in any files under DIR
4
5
  ! find src/turbigen -name '*.py' ! -name 'convert_ts3_to_ts4_native.py' -exec grep -nH '^ *quit()\|^ *print(\|^ *np.empty(' {} +
@@ -1,6 +1,28 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ v2.2.2
5
+ ^^^^^^
6
+
7
+ * Error if trying to set viscosity from Reynolds with real working fluid
8
+ * Show mean-line table limits in the log when running real gas
9
+ * Add solver documentation page
10
+
11
+ v2.2.0
12
+ ^^^^^^
13
+
14
+ * Allow partial configuration files, exiting at first blank required key
15
+ * Faster compiler flags for Fortran
16
+ * Turbostream solvers with new base class
17
+ * Generate meanline documentation from the docstrings
18
+ * Catch post-processing errors and continue
19
+ * Submit jobs to a local queue, implement worker script
20
+ * Check for nans in ember
21
+ * Allow invocation with `python -m turbigen`
22
+ * Implement design space sampling
23
+ * Bug fix for repeating stage iterator if spanwise points unequal
24
+ * General tidying up
25
+
4
26
  v2.1.0
5
27
  ^^^^^^
6
28
 
@@ -40,6 +40,7 @@ extensions = [
40
40
  "sphinx.ext.napoleon",
41
41
  "sphinx.ext.viewcode",
42
42
  "autodocsumm",
43
+ "sphinxcontrib.bibtex",
43
44
  "sphinxcontrib.programoutput",
44
45
  "matplotlib.sphinxext.plot_directive",
45
46
  "sphinxarg.ext",
@@ -5,8 +5,6 @@ import re
5
5
  import shutil
6
6
  import subprocess
7
7
  from pathlib import Path
8
- import logging
9
- import sys
10
8
  import yaml
11
9
 
12
10
  INPUT_DIR = "examples"
@@ -23,6 +21,12 @@ def run_example(input_yaml):
23
21
  text=True,
24
22
  )
25
23
 
24
+ # Check return code
25
+ if out.returncode != 0:
26
+ print(f"Error running example: {input_yaml}")
27
+ print(out.stderr)
28
+ quit(1)
29
+
26
30
  # Load the yaml
27
31
  with open(input_yaml, "r") as f:
28
32
  yaml_str = f.read()
@@ -40,7 +44,7 @@ def run_example(input_yaml):
40
44
  # Attempt to parse the title
41
45
  try:
42
46
  title = comments[0].split("#")[-1].strip()
43
- except:
47
+ except Exception:
44
48
  title = "Example"
45
49
 
46
50
  # Parse workdir from the log
@@ -0,0 +1,54 @@
1
+ """Make documentation for an abstract base class and subclasses."""
2
+
3
+ import turbigen.meanline
4
+ from turbigen import util
5
+ import inspect
6
+
7
+
8
+ def generate_subclass(cls, fname):
9
+ rst_str = ""
10
+
11
+ # Base class first
12
+ doc = inspect.getdoc(cls).split("xxx")
13
+ rst_str += doc[0]
14
+
15
+ # Now subclasses
16
+ for subclass in cls.__subclasses__():
17
+ rst_str += "\n\n"
18
+ rst_str += inspect.getdoc(subclass)
19
+ rst_str += "\n\n"
20
+
21
+ cls_name = util.camel_to_snake(subclass.__name__)
22
+ try:
23
+ rst_str += format_yaml_snippet(subclass._design_vars, cls_name)
24
+ except AttributeError:
25
+ pass
26
+
27
+ if len(doc) > 1:
28
+ rst_str += doc[1]
29
+
30
+ # Write the rst string to a file
31
+ with open(f"doc/{fname}.rst", "w") as f:
32
+ f.write(rst_str)
33
+
34
+
35
+ def format_yaml_snippet(data_dict, title):
36
+ lines = ["mean_line:"]
37
+ lines.append(f" type: {title}")
38
+ for name, (desc, shape, default) in data_dict.items():
39
+ shape_str = ", " + str(shape) + " vector" if shape else ""
40
+ default_str = "" if default is None else str(default)
41
+ lines.append(f" # {desc}{shape_str}")
42
+ lines.append(f" {name}: {default_str}")
43
+
44
+ # Apply rst indentation
45
+ lines = [" " + line for line in lines]
46
+ lines.insert(0, ".. code-block:: yaml\n")
47
+
48
+ blurb = "To use this architecture, add the following snippet in your configuration file:\n\n"
49
+
50
+ return blurb + "\n".join(lines)
51
+
52
+
53
+ if __name__ == "__main__":
54
+ print(generate_subclass(turbigen.meanline.MeanLineDesigner, "meanline"))
@@ -0,0 +1,104 @@
1
+ """Make documentation for an abstract base class and subclasses."""
2
+
3
+ import turbigen.solvers.base
4
+ from turbigen.solvers import ember, ts3, ts4
5
+ import inspect
6
+ import dataclasses
7
+
8
+
9
+ def generate_subclass(cls, fname):
10
+ rst_str = ""
11
+
12
+ # Base class first
13
+ doc = inspect.getdoc(cls).split("xxx")
14
+ rst_str += doc[0]
15
+
16
+ # Now subclasses
17
+ for subclass in cls.__subclasses__():
18
+ print(subclass)
19
+ rst_str += "\n\n"
20
+ rst_str += inspect.getdoc(subclass)
21
+ rst_str += "\n\n"
22
+ rst_str += generate_rst_table(subclass)
23
+
24
+ if len(doc) > 1:
25
+ rst_str += doc[1]
26
+
27
+ # Write the rst string to a file
28
+ with open(f"doc/{fname}.rst", "w") as f:
29
+ f.write(rst_str)
30
+
31
+
32
+ def generate_rst_table(cls):
33
+ # Extract all dataclass fields
34
+ fields = dataclasses.fields(cls)
35
+ names = [f.name for f in fields]
36
+
37
+ # Extract docstrings from the class source
38
+ source_lines = inspect.getsourcelines(cls)[0]
39
+ doc_map = {}
40
+ current_field = None
41
+
42
+ for line in source_lines:
43
+ line = line.strip()
44
+ if line.startswith("#") or not line:
45
+ continue
46
+ elif ":" in line and "=" in line:
47
+ name = line.split(":")[0].strip()
48
+ if name in names:
49
+ current_field = name
50
+ print(f"Found field: {name}")
51
+ elif '"""' in line or "'''" in line:
52
+ doc = line.strip(' """\'')
53
+ if current_field:
54
+ print(f"Found docstring: {doc}")
55
+ doc_map[current_field] = doc
56
+ current_field = None
57
+
58
+ doc_map.pop("workdir", None)
59
+
60
+ # RST table header
61
+ lines = [
62
+ "Configuration options",
63
+ "~~~~~~~~~~~~~~~~~~~~~",
64
+ "",
65
+ ".. list-table::",
66
+ " :widths: 10 10 10 70",
67
+ " :header-rows: 1",
68
+ "",
69
+ " * - Name",
70
+ " - Type",
71
+ " - Default",
72
+ " - Description",
73
+ ]
74
+
75
+ # Sort alphabetically
76
+ fields = sorted(fields, key=lambda f: f.name)
77
+
78
+ for f in fields:
79
+ name = f.name
80
+ type_ = f.type.__name__ if hasattr(f.type, "__name__") else str(f.type)
81
+ default = f.default if f.default != dataclasses.MISSING else "Required"
82
+ if not (doc := doc_map.get(name, None)):
83
+ continue
84
+ if len(str(default)) > 10:
85
+ default = str(default)[:10] + "..."
86
+ try:
87
+ getattr(turbigen.solvers.base.BaseSolver, name)
88
+ print(f"Skipping field: {name}")
89
+ continue
90
+ except AttributeError:
91
+ pass
92
+ # Catch empty defaults
93
+ if default == "":
94
+ default = " "
95
+ lines.append(f" * - ``{name}``")
96
+ lines.append(f" - ``{type_}``")
97
+ lines.append(f" - ``{default}``")
98
+ lines.append(f" - {doc}")
99
+
100
+ return "\n".join(lines)
101
+
102
+
103
+ if __name__ == "__main__":
104
+ generate_subclass(turbigen.solvers.base.BaseSolver, "solver")
@@ -17,7 +17,9 @@ User manual
17
17
  quickstart
18
18
  nomenclature
19
19
  usage
20
+ meanline
21
+ solver
20
22
  examples/index
21
23
  changelog
22
24
  license
23
-
25
+ references
@@ -0,0 +1,264 @@
1
+ Mean-line
2
+ =========
3
+
4
+ The first step in turbomachinery design is a one-dimensional analysis along
5
+ a representative 'mean-line', a simplified model of the true
6
+ three-dimensional flow. We consider an axisymmetric streamsurface at an
7
+ intermediate position between hub and casing, with stations at the
8
+ inlet and exit of each blade row.
9
+
10
+ The inputs to the mean-line design are the inlet condition and the machine duty.
11
+ Specifying some aerodynamic design variables and applying conservation of
12
+ mass, momentum and energy, we can calculate the outputs of
13
+ annulus areas, mean radii and flow angles at each station.
14
+
15
+ The mean-line design process is different for each machine architecture:
16
+ compressor/turbine, axial/radial, and so on. :program:`turbigen` provides
17
+ the built-in architectures listed below, and also allows considerable flexibility
18
+ in defining your own :ref:`ml-custom`.
19
+
20
+
21
+
22
+ Turbine cascade
23
+ ---------------
24
+
25
+ A single-row, stationary turbine cascade. The geometry is defined by spans,
26
+ flow angles and an exit Mach number. By default, the cascade is approximately linear,
27
+ with a hub-to-tip ratio close to unity, no radius change, and no pitch
28
+ angle. An annular cascade can be defined by specifying a radius ratio and
29
+ pitch angles.
30
+
31
+ To use this architecture, add the following snippet in your configuration file:
32
+
33
+ .. code-block:: yaml
34
+
35
+ mean_line:
36
+ type: turbine_cascade
37
+ # Inlet and outlet spans [m], (2,) vector
38
+ span:
39
+ # Inlet and outlet yaw angles [deg], (2,) vector
40
+ Alpha:
41
+ # Exit Mach number [--]
42
+ Ma2:
43
+ # Energy loss coefficient [--]
44
+ Yh:
45
+ # Inlet hub-to-tip radius ratio [--]
46
+ htr: 0.99
47
+ # Outlet to inlet radius ratio [--]
48
+ RR: 1.0
49
+ # Inlet and outlet pitch angles [deg], (2,) vector
50
+ Beta: (0.0, 0.0)
51
+
52
+ Axial turbine
53
+ -------------
54
+
55
+ A repeating-stage axial turbine. Duty is set by a mass flow rate and a constant mean radius.
56
+ Vane exit Mach number is set directly, while the rotor exit relative Mach
57
+ number is set by a scaling factor off the vane value. This allows compressibility effects to be predominantly controlled by `Ma2`; the degree of reaction is controlled by `fac_Ma3_rel`, with 50% reaction corresponding approximately to unity.
58
+ The default is constant axial velocity, but this can be controlled by `zeta`.
59
+ Pressure ratio and shaft speed are dependent variables under this parameterisation.
60
+
61
+ To use this architecture, add the following snippet in your configuration file:
62
+
63
+ .. code-block:: yaml
64
+
65
+ mean_line:
66
+ type: axial_turbine
67
+ # Mass flow rate [kg/s]
68
+ mdot:
69
+ # Root-mean-square radius [m]
70
+ rrms:
71
+ # Stage loading coefficient [--]
72
+ psi:
73
+ # Rotor inlet flow coefficient [--]
74
+ phi2:
75
+ # Vane exit Mach number [--]
76
+ Ma2:
77
+ # Rotor exit relative Mach factor [--]
78
+ fac_Ma3_rel:
79
+ # Entropy loss coefficients [--], (2,) vector
80
+ Ys:
81
+ # Axial velocity ratios [--], (2,) vector
82
+ zeta: (1.0, 1.0)
83
+
84
+ .. _ml-custom:
85
+
86
+ Custom architectures
87
+ --------------------
88
+
89
+ Custom architectures are defined by subclassing the :class:`MeanLineDesigner`.
90
+ First, set the user plugin directory in the configuration file, e.g. to a new folder called `plug` in the current directory by adding the following line:
91
+
92
+ .. code-block:: yaml
93
+
94
+ plugdir: ./plug
95
+
96
+ Then, create a new Python file in the `plug` directory, e.g.
97
+ `custom.py`, and define a new class that inherits from
98
+ :class:`MeanLineDesigner` like this:
99
+
100
+ .. code-block:: python
101
+
102
+ # File: ./plug/custom.py
103
+
104
+ import turbigen.meanline
105
+
106
+ class MyCustomMeanLine(turbigen.meanline.MeanLineDesigner):
107
+
108
+ # Your design variables are arguments to the forward method
109
+ @staticmethod
110
+ def forward(So1, phi, psi, Ma1):
111
+ '''Use design variables to calculate flow field.
112
+
113
+ Parameters
114
+ ----------
115
+ So1: Fluid
116
+ The working fluid and its thermodynamic state at inlet.
117
+ phi: float
118
+ Flow coefficient at inlet.
119
+ psi: float
120
+ Stage loading coefficient.
121
+ Ma1: float
122
+ Inlet Mach number.
123
+ ... your chosen design variables ...
124
+
125
+ Returns
126
+ -------
127
+ rrms: (2*nrow,) array
128
+ Mean radii at all stations [m].
129
+ A: (2*nrow,) array
130
+ Annulus areas at all stations [m^2].
131
+ Omega: (2*nrow,) array
132
+ Shaft angular velocities at all stations [rad/s].
133
+ Vxrt: (3, 2*nrow) array
134
+ Velocity components at all stations [m/s].
135
+ S: (2*nrow,) list of Fluid
136
+ Static states for all stations.
137
+
138
+ '''
139
+
140
+ # Your code here...
141
+ raise NotImplementedError("Implement the forward method")
142
+
143
+ # Manipulate thermodynamic states by copying the inlet
144
+ # add setting new property values, say
145
+ V1 = Ma1 * So1.a # Approx, should iterate this
146
+ h1 = So1.h - 0.5 * V1**2
147
+ S1 = So1.copy().set_h_s(h1 So1.s)
148
+
149
+ # Collect the static states
150
+ S = [S1, S2]
151
+
152
+ return rrms, A, Omega, Vxrt, S
153
+
154
+ @staticmethod
155
+ def backward(mean_line):
156
+ '''Calculate design variables from flow field.
157
+
158
+ Parameters
159
+ ----------
160
+ mean_line: MeanLine
161
+ Flow field along the mean line.
162
+
163
+ Returns
164
+ -------
165
+ out : dict
166
+ Dictionary of design variables, keyed by arguments
167
+ to the `forward` method.
168
+
169
+ '''
170
+
171
+ # The mean_line object has all the flow field data
172
+ # and calculates most composite quantities like
173
+ # velocity components, stagnation enthalpy, for you
174
+
175
+ # Blade speed at station 1 (first row inlet)
176
+ U = mean_line.U[0]
177
+
178
+ return {
179
+ # Inlet flow coefficient
180
+ 'phi': mean_line.Vm[0] / U,
181
+ # Stage loading coefficient
182
+ 'psi': (mean_line.ho[-1] - mean_line.ho[0]) / U**2,
183
+ # Mach number at inlet
184
+ 'Ma1': mean_line.Ma[0],
185
+ # Your design variables here...
186
+ # ...
187
+ # Other keys are printed to the log file and saved to the
188
+ # output configuration file
189
+ 'eta_tt': mean_line.eta_tt,
190
+ 'Alpha1': mean_line.Alpha[0],
191
+ 'DH': mean_line.V_rel[1] / mean_line.V_rel[0],
192
+ }
193
+
194
+ You will need to implement two static methods: `forward()` and `backward()`.
195
+
196
+ The `forward()` function takes as arguments an inlet state object and
197
+ some duty, geometric, or aerodynamic design variables. This function
198
+ returns all information required to lay out the mean-line: radii, annulus
199
+ areas, angular velocities, velocity components, and thermodynamic states at
200
+ the inlet and exit of each blade row.
201
+
202
+ The entries in the `mean_line` part of the configuration file are fed into
203
+ `forward()` as keyword arguments. For example, if the configuration file
204
+ contains:
205
+
206
+ .. code-block:: yaml
207
+
208
+ mean_line:
209
+ type: my_custom_mean_line
210
+ phi: 0.8
211
+ psi: 1.6
212
+ Ma1: 0.5
213
+
214
+ Then, within :program:`turbigen`, the `type` key identifies
215
+ the `MyCustomMeanLine` class and calls its `forward()` method like:
216
+
217
+ .. code-block:: python
218
+
219
+ MyCustomMeanLine.forward(
220
+ So1, # Inlet state calculated elsewhere, positional arg
221
+ phi=0.8, # Keys from `mean_line` config unpacked as kwargs
222
+ psi=1.6,
223
+ Ma1=0.5,
224
+ )
225
+
226
+ Some notes on implementing the `forward()` method:
227
+
228
+ * Retain generality of the working fluid by using the set property methods
229
+ of the `Fluid` class, as in the example above. This is preferable to
230
+ hard-coding calculations assuming a specific equation of state such as
231
+ ideal gas.
232
+ * Specify aerodynamic design variables instead of geometric ones, e.g.
233
+ flow coefficient and Mach number instead of shaft
234
+ angular velocity and radius ratio. Constraining geometry can lead to
235
+ feasible designs only over a narrow range of duty, with many infeasible designs with no solution to the mean-line equations. It is more
236
+ straighforward to map out a design space by varying independent variables
237
+ within their natural aerodynamic bounds.
238
+ * Controlling Mach number prevents choking when moving around the
239
+ design space. It is imperative to limit deceleration through compressors
240
+ to avoid flow separation, so specifying a relative velocity ratio or de
241
+ Haller number is a good idea. Letting meridional velocity float can lead
242
+ to wide variations in span and hence unfavourable high-curvature annulus
243
+ lines, so controlling the change in meridional velocity through the
244
+ machine is advisable.
245
+ * Loss is best handled by guessing a vector of entropy rise at each
246
+ station, which does not depend on the frame of reference. The values can then be
247
+ updated using CFD results.
248
+ * Iteration is required to solve for density in compressible cases. It is
249
+ often easiest to guess a value for the blade speed, then iterate to converge
250
+ on a blade speed that satisfies the requested duty. Matching a
251
+ total-to-static pressure ratio requires iteration because the exit
252
+ dynamic head is not known a priori.
253
+
254
+ The `backward()` function takes a mean-line flow field as its only
255
+ argument, and calculates a dictionary of the arguments to `forward()`.
256
+ Given a suitably averaged CFD solution, `backward()` is a post-processing
257
+ step that allows comparison of the three-dimensional simulated flow field
258
+ to the one-dimensional design intent. Also, feeding the output of
259
+ `forward()` straight into `backward()` acts as a check that the mean-line
260
+ design is consistent with the requested inputs. `backward()` can also be
261
+ used to post-process other quantities of interest from the mixed-out CFD
262
+ flow field. Extra keys are printed the log file and saved to the output configuration
263
+ file; only keys that are also design variables will be fed back
264
+ into `forward()` for the consistency check.
@@ -0,0 +1,80 @@
1
+ @article{Taylor2016
2
+ author = {Taylor, J. V. and Miller, R. J.},
3
+ title = "{Competing Three-Dimensional Mechanisms in Compressor Flows}",
4
+ journal = {J. Turbomach.},
5
+ volume = {139},
6
+ number = {2},
7
+ year = {2016},
8
+ doi = {10.1115/1.4034685},
9
+ }
10
+
11
+ @proceedings{Clark2019,
12
+ author = {Clark, Christopher J.},
13
+ title = "{A Step Towards an Intelligent Aerodynamic Design Process}",
14
+ volume = {Volume 2C: Turbomachinery},
15
+ series = {Turbo Expo: Power for Land, Sea, and Air},
16
+ year = {2019},
17
+ doi = {10.1115/GT2019-91637},
18
+ note = {V02CT41A033},
19
+ }
20
+
21
+
22
+ @article{Kulfan2008,
23
+ author = {Kulfan, Brenda M.},
24
+ title = "{Universal Parametric Geometry Representation Method}",
25
+ journal = {J. Aircr.},
26
+ volume = {45},
27
+ number = {1},
28
+ pages = {142-158},
29
+ year = {2008},
30
+ doi = {10.2514/1.29958},
31
+ }"
32
+
33
+ @phdthesis{Kaufmann2020,
34
+ doi = {10.17863/CAM.81122},
35
+ author = {Kaufmann, Shaun Michael},
36
+ title = "{A Unified Turbine Preliminary Design Study}",
37
+ year = {2022},
38
+ school = {University of Cambridge},
39
+ }
40
+
41
+ @article{Coull2013,
42
+ author = {Coull, John D. and Hodson, Howard P.},
43
+ title = "{Blade Loading and Its Application in the Mean-Line Design of Low Pressure Turbines}",
44
+ journal = {J. Turbomach},
45
+ volume = {135},
46
+ number = {2},
47
+ year = {2012},
48
+ doi = {10.1115/1.4006588},
49
+ }
50
+
51
+ @Article{Brandvik2011,
52
+ author = {Brandvik, T. and Pullan, G.},
53
+ title = {{"An Accelerated 3D Navier--Stokes Solver for Flows in Turbomachines"}},
54
+ journal = {J.\ Turbomach.},
55
+ year = {2011},
56
+ volume = {133},
57
+ number = {2},
58
+ doi = {10.1115/1.4001192}
59
+ }
60
+
61
+ @article{Denton2017,
62
+ title = {{"Multall---An Open Source, Computational Fluid Dynamics Based, Turbomachinery Design System"}},
63
+ volume = {139},
64
+ DOI = {10.1115/1.4037819},
65
+ number = {12},
66
+ journal = {J. Turbomach.},
67
+ author = {Denton, J.D.},
68
+ year = {2017}
69
+ }
70
+
71
+ @article{Denton1992,
72
+ title = {{"The Calculation of Three-Dimensional Viscous Flow Through Multistage Turbomachines"}},
73
+ volume = {114},
74
+ DOI = {10.1115/1.2927983},
75
+ number = {1},
76
+ journal = {J. of Turbomach.},
77
+ author = {Denton, J. D.},
78
+ year = {1992},
79
+ pages = {18–26}
80
+ }