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.
- {turbigen-2.1.0 → turbigen-2.2.3}/.gitlab-ci.yml +2 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/PKG-INFO +3 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/bin/noquit.sh +1 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/changelog.rst +22 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/conf.py +1 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/generate_examples.py +7 -3
- turbigen-2.2.3/doc/generate_meanline.py +54 -0
- turbigen-2.2.3/doc/generate_solver.py +104 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/index.rst +3 -1
- turbigen-2.2.3/doc/meanline.rst +264 -0
- turbigen-2.2.3/doc/refs.bib +80 -0
- turbigen-2.2.3/doc/solver.rst +455 -0
- turbigen-2.2.3/dspace.yaml +86 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/examples/axial_turbine.yaml +1 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/examples/turbine_cascade.yaml +3 -3
- {turbigen-2.1.0 → turbigen-2.2.3}/matplotlibrc +1 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/meson.build +1 -0
- turbigen-2.2.3/plots/profile.txt +226 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/pyproject.toml +5 -2
- turbigen-2.2.3/scripts/make_table.py +11 -0
- turbigen-2.2.3/scripts/plot_dspace.py +44 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/profile.sh +4 -1
- turbigen-2.2.3/scripts/test_dspace.py +63 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/smooth.f90 +0 -83
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/__init__.py +1 -1
- turbigen-2.2.3/src/turbigen/__main__.py +3 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/annulus.py +3 -3
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/autogrid.py +44 -29
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/base.py +17 -297
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/blade.py +11 -3
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/config2.py +146 -46
- turbigen-2.2.3/src/turbigen/dspace.py +469 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/flowfield.py +4 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/fluid.py +4 -4
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/grid.py +1 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/hmesh.py +0 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/inlet.py +2 -11
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/iterators.py +34 -5
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/job.py +49 -5
- turbigen-2.2.3/src/turbigen/job_server.py +119 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/main.py +34 -9
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/meanline.py +305 -50
- turbigen-2.2.3/src/turbigen/nblade.py +159 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post.py +4 -1
- turbigen-2.2.3/src/turbigen/solvers/base.py +203 -0
- turbigen-2.1.0/src/turbigen/solvers/emb.py → turbigen-2.2.3/src/turbigen/solvers/ember.py +79 -60
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/ts3.py +73 -60
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/ts4.py +138 -89
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/tables.py +4 -5
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/thickness.py +0 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/util.py +22 -519
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/yaml.py +0 -1
- turbigen-2.2.3/tests/data/hydrogen_table_known_good.npz +0 -0
- turbigen-2.2.3/tests/data/water_table_known_good.npz +0 -0
- turbigen-2.2.3/tests/gpu/submit.sh +16 -0
- turbigen-2.2.3/tests/gpu/ts3.yaml +40 -0
- turbigen-2.2.3/tests/gpu/ts4.yaml +40 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_bcond.py +5 -5
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_distribute.py +1 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_nozzle.py +11 -11
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_operators.py +1 -1
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_periodic_step.py +2 -2
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_smooth.py +11 -6
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_tables.py +0 -6
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_visc.py +5 -5
- turbigen-2.1.0/plots/profile.txt +0 -1
- turbigen-2.1.0/plug/repeat.py +0 -98
- turbigen-2.1.0/plug/test.py +0 -138
- turbigen-2.1.0/src/turbigen/nblade.py +0 -83
- turbigen-2.1.0/src/turbigen/post/blade_surf_dist.py +0 -153
- turbigen-2.1.0/src/turbigen/post/contour.py +0 -280
- turbigen-2.1.0/src/turbigen/post/plot_annulus.py +0 -95
- turbigen-2.1.0/src/turbigen/post/plot_convergence.py +0 -122
- turbigen-2.1.0/src/turbigen/post/write_annulus.py +0 -28
- turbigen-2.1.0/src/turbigen/run.py +0 -1443
- turbigen-2.1.0/src/turbigen/solver.py +0 -123
- turbigen-2.1.0/src/turbigen/solvers/base.py +0 -34
- turbigen-2.1.0/src/turbigen/vtri.py +0 -66
- turbigen-2.1.0/tests/conftest.py +0 -10
- turbigen-2.1.0/tests/not_test_body.py +0 -261
- turbigen-2.1.0/tests/not_test_examples.py +0 -65
- {turbigen-2.1.0 → turbigen-2.2.3}/.flake8 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/.gitignore +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/.gitlab-ci-local/.gitignore +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/.pre-commit-config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/COPYING +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/MANIFEST.in +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/Makefile +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/README.md +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/bin/get_ssh_agent.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/bin/setup.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/Makefile +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/_static/siunitx.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/examples/index.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/license.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/nomenclature.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/quickstart.rst +0 -0
- {turbigen-2.1.0/doc-old → turbigen-2.2.3/doc}/references.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/turbigen-logo.svg +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/tutorial.rst.not +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc/usage.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/Makefile +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.buildinfo +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/changelog.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/config.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/environment.pickle +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/fluid.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/index.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/install.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/license.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/meanline.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/mesh.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/nomenclature.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/post.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/references.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/solver.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/tutorial.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/.doctrees/usage.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/index.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/base.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/fluid.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/hmesh.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/meanline/axial_turbine.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/meanline/radial_compressor.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/meanline/turbine_cascade.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/ohmesh.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/solvers/ts3.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_modules/turbigen/solvers/ts4.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/changelog.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/config.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/fluid.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/index.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/install.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/license.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/meanline.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/mesh.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/nomenclature.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/post.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/references.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/solver.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/tutorial.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_sources/usage.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/alabaster.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/basic.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/custom.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/doctools.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/documentation_options.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/file.png +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/language_data.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/minus.png +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/plot_directive.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/plus.png +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/pygments.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/searchtools.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/siunitx.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/_static/sphinx_highlight.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/changelog.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/config.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/fluid.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/genindex.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/index.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/install.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/license.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/meanline.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/mesh.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/nomenclature.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/objects.inv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/post.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/py-modindex.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/references.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/search.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/searchindex.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/solver.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/tutorial.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_build/usage.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/_static/siunitx.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/changelog.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/conf.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/config.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/dummy_post.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/fluid.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/index.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/install.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/license.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/make.bat +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/meanline.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/mesh.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/method.md +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/nomenclature.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/post.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/refs.bib +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/mean_line_actual.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/mean_line_actual.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/runs/cascade_test/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/solver.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/tutorial.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/doc-old/usage.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/analysis.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/axial_compressor_rotor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/axial_turbine.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/axial_turbine_ts4.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_fit.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_iter.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_off_design.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_p3d.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_post.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/cascade_test.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/flat_plate.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/include1.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/include2.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/mixed_compressor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/profile.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/pure_radial_compressor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/quad_camber.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/radial_compressor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_df.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_ds_025.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_ds_04.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_ds_055.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/seminar_xpeak.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/turbine_cascade.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/old-examples/turbine_include.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/plots/bench.dat +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/pytest.ini +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/benchmark.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/benchmark.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/eval_fitted_design_space.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/fit_eta_tt.json +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/plot_benchmark.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/plot_camber.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/plot_thickness.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/scripts/read_cuts.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/distribute.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolve.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolvec-f2pywrappers.f +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolvec-f2pywrappers2.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/embsolvecmodule.c +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/fluxes.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/indexing.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/meson.build +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/multigrid.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/operators.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/embsolve/viscous.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/__init__.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/ag_server.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/reader.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/script_ag.py2 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/script_igg.py2 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/script_sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/autogrid/server.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/average.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/camber.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/__init__.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/check.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/double.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/exceptions.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/plot.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/single.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/symmetric.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/clusterfunc/util.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/compflow_native.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/exceptions.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/geometry.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/marching_cubes.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/mesh.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/ohmesh.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/polynomial.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/calc_surf_dissipation.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/check_phase.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/find_extrema.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_blade.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_camber.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_incidence.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_nose.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_section.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/plot_thickness.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/spanwise.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/write_cuts.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/write_ibl.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/post/write_stl.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/convert_ts3_to_ts4_native.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/solvers/plot3d.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/src/turbigen/util_post.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/emb.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/mean_line_actual.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/post/contour_Cp_spf_0.51.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3/post/pressure_distributions_raw.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/compressor/ts3.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/stage.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/emb.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/plot.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/run/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/run/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/run/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3/post/contour_Ys_m_2.05.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3/post/pressure_distributions_raw.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine/ts3.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/back-to-back/turbine_oh/emb.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/cascade_splitter.tar.gz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/cascade_splitter.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/cfd_cut.json +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/data/sections.dat +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/not_test_periodic.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/not_test_rotor.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/not_test_splitter.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/pdist_ts3.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/pipe.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/plate.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/reformat_sections.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_average.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_cells.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_fluid.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/test_wall.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/turning_duct.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcd_yp5_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcd_yp5_turb.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_turb_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_yp5_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tests/xcf_yp5_turb.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.3}/tutorial/config.yaml +0 -0
- /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.
|
|
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,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
|
|
|
@@ -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")
|
|
@@ -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
|
+
}
|