turbigen 2.1.0__tar.gz → 2.2.1__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.1}/.gitlab-ci.yml +1 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/PKG-INFO +1 -1
- {turbigen-2.1.0 → turbigen-2.2.1}/bin/noquit.sh +1 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/changelog.rst +15 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/generate_examples.py +1 -3
- turbigen-2.2.1/doc/generate_meanline.py +54 -0
- turbigen-2.2.1/doc/generate_solver.py +93 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/index.rst +2 -1
- turbigen-2.2.1/doc/meanline.rst +264 -0
- turbigen-2.2.1/doc/solver.rst +153 -0
- turbigen-2.2.1/dspace.yaml +86 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/examples/turbine_cascade.yaml +2 -2
- {turbigen-2.1.0 → turbigen-2.2.1}/matplotlibrc +1 -1
- {turbigen-2.1.0 → turbigen-2.2.1}/meson.build +1 -0
- turbigen-2.2.1/plots/profile.txt +226 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/pyproject.toml +3 -2
- turbigen-2.2.1/scripts/plot_dspace.py +44 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/profile.sh +4 -1
- turbigen-2.2.1/scripts/test_dspace.py +63 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/smooth.f90 +0 -83
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/__init__.py +1 -1
- turbigen-2.2.1/src/turbigen/__main__.py +3 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/annulus.py +3 -3
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/base.py +17 -48
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/blade.py +11 -3
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/config2.py +115 -43
- turbigen-2.2.1/src/turbigen/dspace.py +469 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/flowfield.py +4 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/fluid.py +4 -4
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/grid.py +1 -1
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/hmesh.py +0 -1
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/inlet.py +2 -11
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/iterators.py +34 -5
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/job.py +49 -5
- turbigen-2.2.1/src/turbigen/job_server.py +119 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/main.py +34 -9
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/meanline.py +305 -50
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/nblade.py +64 -1
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post.py +4 -1
- turbigen-2.1.0/src/turbigen/solver.py → turbigen-2.2.1/src/turbigen/solvers/base.py +70 -23
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/solvers/emb.py +61 -55
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/solvers/ts3.py +50 -60
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/solvers/ts4.py +48 -20
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/thickness.py +0 -1
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/util.py +1 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/yaml.py +0 -1
- turbigen-2.2.1/tests/gpu/submit.sh +16 -0
- turbigen-2.2.1/tests/gpu/ts3.yaml +40 -0
- turbigen-2.2.1/tests/gpu/ts4.yaml +40 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_nozzle.py +1 -1
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_smooth.py +10 -5
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_visc.py +1 -1
- 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/post/blade_surf_dist.py +0 -153
- turbigen-2.1.0/src/turbigen/post/plot_annulus.py +0 -95
- turbigen-2.1.0/src/turbigen/run.py +0 -1443
- 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 → turbigen-2.2.1}/.flake8 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/.gitignore +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/.gitlab-ci-local/.gitignore +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/.pre-commit-config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/COPYING +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/MANIFEST.in +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/Makefile +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/README.md +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/bin/get_ssh_agent.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/bin/setup.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/Makefile +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/_static/siunitx.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/conf.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/examples/index.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/license.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/nomenclature.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/quickstart.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/turbigen-logo.svg +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/tutorial.rst.not +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc/usage.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/Makefile +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.buildinfo +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/changelog.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/config.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/environment.pickle +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/fluid.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/index.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/install.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/license.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/meanline.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/mesh.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/nomenclature.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/post.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/references.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/solver.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/tutorial.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/.doctrees/usage.doctree +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/index.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/base.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/fluid.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/hmesh.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/meanline/axial_turbine.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/meanline/radial_compressor.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/meanline/turbine_cascade.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/ohmesh.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/solvers/ts3.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_modules/turbigen/solvers/ts4.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/changelog.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/config.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/fluid.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/index.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/install.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/license.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/meanline.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/mesh.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/nomenclature.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/post.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/references.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/solver.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/tutorial.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_sources/usage.rst.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/alabaster.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/basic.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/custom.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/doctools.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/documentation_options.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/file.png +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/language_data.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/minus.png +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/plot_directive.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/plus.png +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/pygments.css +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/searchtools.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/siunitx.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/_static/sphinx_highlight.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/changelog.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/config.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/fluid.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/genindex.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/index.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/install.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/license.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/meanline.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/mesh.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/nomenclature.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/objects.inv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/post.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/py-modindex.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/references.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/search.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/searchindex.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/solver.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/tutorial.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_build/usage.html +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/_static/siunitx.js +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/changelog.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/conf.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/config.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/dummy_post.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/fluid.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/index.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/install.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/license.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/make.bat +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/meanline.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/mesh.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/method.md +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/nomenclature.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/post.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/references.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/refs.bib +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade/mean_line_actual.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade_test/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade_test/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade_test/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade_test/mean_line_actual.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/runs/cascade_test/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/solver.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/tutorial.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/doc-old/usage.rst +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/examples/axial_turbine.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/analysis.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/axial_compressor_rotor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/axial_turbine.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/axial_turbine_ts4.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/cascade_fit.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/cascade_iter.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/cascade_off_design.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/cascade_p3d.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/cascade_post.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/cascade_test.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/flat_plate.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/include1.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/include2.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/mixed_compressor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/profile.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/pure_radial_compressor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/quad_camber.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/radial_compressor.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/seminar_df.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/seminar_ds_025.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/seminar_ds_04.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/seminar_ds_055.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/seminar_xpeak.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/turbine_cascade.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/old-examples/turbine_include.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/plots/bench.dat +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/pytest.ini +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/benchmark.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/benchmark.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/eval_fitted_design_space.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/fit_eta_tt.json +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/plot_benchmark.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/plot_camber.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/plot_thickness.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/scripts/read_cuts.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/distribute.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/embsolve.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/embsolvec-f2pywrappers.f +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/embsolvec-f2pywrappers2.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/embsolvecmodule.c +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/fluxes.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/indexing.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/meson.build +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/multigrid.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/operators.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/embsolve/viscous.f90 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/__init__.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/ag_server.sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/autogrid.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/reader.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/script_ag.py2 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/script_igg.py2 +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/script_sh +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/autogrid/server.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/average.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/camber.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/__init__.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/check.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/double.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/exceptions.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/plot.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/single.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/symmetric.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/clusterfunc/util.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/compflow_native.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/exceptions.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/geometry.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/marching_cubes.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/mesh.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/ohmesh.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/polynomial.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/calc_surf_dissipation.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/check_phase.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/contour.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/find_extrema.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/plot_blade.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/plot_camber.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/plot_convergence.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/plot_incidence.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/plot_nose.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/plot_section.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/plot_thickness.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/spanwise.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/write_annulus.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/write_cuts.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/write_ibl.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/post/write_stl.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/solvers/convert_ts3_to_ts4_native.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/solvers/plot3d.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/tables.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/src/turbigen/util_post.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/emb.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3/mean_line_actual.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3/post/contour_Cp_spf_0.51.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3/post/pressure_distributions_raw.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/compressor/ts3.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/stage.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/emb.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/plot.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/run/config.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/run/log_turbigen.txt +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/run/mean_line_nominal.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/ts3/inverse.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/ts3/post/contour_Ys_m_2.05.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/ts3/post/pressure_distributions_raw.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine/ts3.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/back-to-back/turbine_oh/emb.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/data/cascade_splitter.tar.gz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/data/cascade_splitter.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/data/cfd_cut.json +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/data/sections.dat +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/not_test_body.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/not_test_examples.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/not_test_periodic.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/not_test_rotor.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/not_test_splitter.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/pdist_ts3.npz +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/pipe.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/plate.yaml +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/reformat_sections.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_average.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_bcond.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_cells.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_distribute.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_fluid.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_operators.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_periodic_step.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_tables.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/test_wall.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/turning_duct.py +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/xcd_yp5_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/xcd_yp5_turb.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/xcf_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/xcf_turb_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/xcf_yp5_ts3.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tests/xcf_yp5_turb.csv +0 -0
- {turbigen-2.1.0 → turbigen-2.2.1}/tutorial/config.yaml +0 -0
- /turbigen-2.1.0/tutorial/fan.py → /turbigen-2.2.1/tutorial/fan.notpy +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: turbigen
|
|
3
|
-
Version: 2.1
|
|
3
|
+
Version: 2.2.1
|
|
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>
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
v2.2.0
|
|
5
|
+
^^^^^^
|
|
6
|
+
|
|
7
|
+
* Allow partial configuration files, exiting at first blank required key
|
|
8
|
+
* Faster compiler flags for Fortran
|
|
9
|
+
* Turbostream solvers with new base class
|
|
10
|
+
* Generate meanline documentation from the docstrings
|
|
11
|
+
* Catch post-processing errors and continue
|
|
12
|
+
* Submit jobs to a local queue, implement worker script
|
|
13
|
+
* Check for nans in ember
|
|
14
|
+
* Allow invocation with `python -m turbigen`
|
|
15
|
+
* Implement design space sampling
|
|
16
|
+
* Bug fix for repeating stage iterator if spanwise points unequal
|
|
17
|
+
* General tidying up
|
|
18
|
+
|
|
4
19
|
v2.1.0
|
|
5
20
|
^^^^^^
|
|
6
21
|
|
|
@@ -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"
|
|
@@ -40,7 +38,7 @@ def run_example(input_yaml):
|
|
|
40
38
|
# Attempt to parse the title
|
|
41
39
|
try:
|
|
42
40
|
title = comments[0].split("#")[-1].strip()
|
|
43
|
-
except:
|
|
41
|
+
except Exception:
|
|
44
42
|
title = "Example"
|
|
45
43
|
|
|
46
44
|
# 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,93 @@
|
|
|
1
|
+
"""Make documentation for an abstract base class and subclasses."""
|
|
2
|
+
|
|
3
|
+
import turbigen.solvers.base
|
|
4
|
+
import turbigen.solvers.emb
|
|
5
|
+
from turbigen import util
|
|
6
|
+
import inspect
|
|
7
|
+
import dataclasses
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def generate_subclass(cls, fname):
|
|
11
|
+
rst_str = ""
|
|
12
|
+
|
|
13
|
+
# Base class first
|
|
14
|
+
doc = inspect.getdoc(cls).split("xxx")
|
|
15
|
+
rst_str += doc[0]
|
|
16
|
+
|
|
17
|
+
# Now subclasses
|
|
18
|
+
for subclass in cls.__subclasses__():
|
|
19
|
+
print(subclass)
|
|
20
|
+
rst_str += "\n\n"
|
|
21
|
+
rst_str += inspect.getdoc(subclass)
|
|
22
|
+
rst_str += "\n\n"
|
|
23
|
+
|
|
24
|
+
cls_name = util.camel_to_snake(subclass.__name__)
|
|
25
|
+
rst_str += generate_rst_table(subclass)
|
|
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 generate_rst_table(cls):
|
|
36
|
+
# Extract all dataclass fields
|
|
37
|
+
fields = dataclasses.fields(cls)
|
|
38
|
+
names = [f.name for f in fields]
|
|
39
|
+
|
|
40
|
+
# Extract docstrings from the class source
|
|
41
|
+
source_lines = inspect.getsourcelines(cls)[0]
|
|
42
|
+
doc_map = {}
|
|
43
|
+
current_field = None
|
|
44
|
+
|
|
45
|
+
for line in source_lines:
|
|
46
|
+
line = line.strip()
|
|
47
|
+
if line.startswith("#") or not line:
|
|
48
|
+
continue
|
|
49
|
+
elif ":" in line and "=" in line:
|
|
50
|
+
name = line.split(":")[0].strip()
|
|
51
|
+
if name in names:
|
|
52
|
+
current_field = name
|
|
53
|
+
print(f"Found field: {name}")
|
|
54
|
+
elif '"""' in line or "'''" in line:
|
|
55
|
+
doc = line.strip(' """\'')
|
|
56
|
+
if current_field:
|
|
57
|
+
print(f"Found docstring: {doc}")
|
|
58
|
+
doc_map[current_field] = doc
|
|
59
|
+
current_field = None
|
|
60
|
+
|
|
61
|
+
# RST table header
|
|
62
|
+
lines = [
|
|
63
|
+
".. list-table:: Parameters",
|
|
64
|
+
" :widths: 20 15 15 50",
|
|
65
|
+
" :header-rows: 1",
|
|
66
|
+
"",
|
|
67
|
+
" * - Name",
|
|
68
|
+
" - Type",
|
|
69
|
+
" - Default",
|
|
70
|
+
" - Description",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
for f in fields:
|
|
74
|
+
name = f.name
|
|
75
|
+
type_ = f.type.__name__ if hasattr(f.type, "__name__") else str(f.type)
|
|
76
|
+
default = f.default if f.default != dataclasses.MISSING else "Required"
|
|
77
|
+
doc = doc_map.get(name, "")
|
|
78
|
+
try:
|
|
79
|
+
getattr(turbigen.solvers.base.BaseSolver, name)
|
|
80
|
+
print(f"Skipping field: {name}")
|
|
81
|
+
continue
|
|
82
|
+
except AttributeError:
|
|
83
|
+
pass
|
|
84
|
+
lines.append(f" * - ``{name}``")
|
|
85
|
+
lines.append(f" - ``{type_}``")
|
|
86
|
+
lines.append(f" - ``{default}``")
|
|
87
|
+
lines.append(f" - {doc}")
|
|
88
|
+
|
|
89
|
+
return "\n".join(lines)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
if __name__ == "__main__":
|
|
93
|
+
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,153 @@
|
|
|
1
|
+
Base class for flow solvers.
|
|
2
|
+
|
|
3
|
+
:program:`turbigen` is CFD-solver agnostic, in that all all pre- and
|
|
4
|
+
post-processing is done by native code.
|
|
5
|
+
|
|
6
|
+
Each CFD solver accepts different configuration options. Solver options and
|
|
7
|
+
their default values are listed below; override the defaults using the
|
|
8
|
+
`solver` section of the configuration file.
|
|
9
|
+
|
|
10
|
+
Adding a new solver only requires
|
|
11
|
+
functions to save CFD input files, execute the
|
|
12
|
+
solver, and read back the flow solution into :program:`turbigen`'s internal
|
|
13
|
+
data structures. See the :ref:`solver-custom` section for more details.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
ember
|
|
18
|
+
-----
|
|
19
|
+
|
|
20
|
+
:program:`ember` is the native flow solver built into :program:`turbigen`.
|
|
21
|
+
|
|
22
|
+
.. list-table:: Parameters
|
|
23
|
+
:widths: 20 15 15 50
|
|
24
|
+
:header-rows: 1
|
|
25
|
+
|
|
26
|
+
* - Name
|
|
27
|
+
- Type
|
|
28
|
+
- Default
|
|
29
|
+
- Description
|
|
30
|
+
* - ``smooth4``
|
|
31
|
+
- ``float``
|
|
32
|
+
- ``0.01``
|
|
33
|
+
- Fourth-order smoothing factor.
|
|
34
|
+
* - ``smooth2_adapt``
|
|
35
|
+
- ``float``
|
|
36
|
+
- ``1.0``
|
|
37
|
+
- Second-order smoothing factor, adaptive on pressure.
|
|
38
|
+
* - ``smooth2_const``
|
|
39
|
+
- ``float``
|
|
40
|
+
- ``0.0``
|
|
41
|
+
- Second-order smoothing factor, constant throughout the flow.
|
|
42
|
+
* - ``smooth_ratio_min``
|
|
43
|
+
- ``float``
|
|
44
|
+
- ``0.1``
|
|
45
|
+
- Largest reduction in smoothing on a non-isotropic grid. Unity disables directional scaling, lower values clip the local smoothing factor to be sf_local >= sf * smooth_ratio_min.
|
|
46
|
+
* - ``CFL``
|
|
47
|
+
- ``float``
|
|
48
|
+
- ``0.65``
|
|
49
|
+
- Courant--Friedrichs--Lewy number, time step normalised by local wave speed and cell size. Reduced values are more stable but slower to converge.
|
|
50
|
+
* - ``n_step``
|
|
51
|
+
- ``int``
|
|
52
|
+
- ``5000``
|
|
53
|
+
- Number of time steps to run for.
|
|
54
|
+
* - ``n_step_mix``
|
|
55
|
+
- ``int``
|
|
56
|
+
- ``5``
|
|
57
|
+
- Number of time steps between mixing plane updates.
|
|
58
|
+
* - ``n_step_dt``
|
|
59
|
+
- ``int``
|
|
60
|
+
- ``10``
|
|
61
|
+
- Number of time steps between updates of the local time step.
|
|
62
|
+
* - ``n_step_log``
|
|
63
|
+
- ``int``
|
|
64
|
+
- ``500``
|
|
65
|
+
- Number of time steps between log prints.
|
|
66
|
+
* - ``n_step_avg``
|
|
67
|
+
- ``int``
|
|
68
|
+
- ``1``
|
|
69
|
+
- Number of time steps to average over.
|
|
70
|
+
* - ``n_step_ramp``
|
|
71
|
+
- ``int``
|
|
72
|
+
- ``250``
|
|
73
|
+
- Number of time steps to ramp smoothing and damping.
|
|
74
|
+
* - ``n_loss``
|
|
75
|
+
- ``int``
|
|
76
|
+
- ``5``
|
|
77
|
+
- Number of time steps between viscous force updates.
|
|
78
|
+
* - ``nstep_damp``
|
|
79
|
+
- ``int``
|
|
80
|
+
- ``-1``
|
|
81
|
+
- Number of steps to apply damping.
|
|
82
|
+
* - ``damping_factor``
|
|
83
|
+
- ``float``
|
|
84
|
+
- ``25.0``
|
|
85
|
+
- Negative feedback to damp down high residuals. Lower values are more stable.
|
|
86
|
+
* - ``Pr_turb``
|
|
87
|
+
- ``float``
|
|
88
|
+
- ``1.0``
|
|
89
|
+
- Turbulent Prandtl number.
|
|
90
|
+
* - ``xllim_pitch``
|
|
91
|
+
- ``float``
|
|
92
|
+
- ``0.03``
|
|
93
|
+
- Maximum mixing length as a fraction of the pitch.
|
|
94
|
+
* - ``precision``
|
|
95
|
+
- ``int``
|
|
96
|
+
- ``1``
|
|
97
|
+
- Precision of the solver. 1: single, 2: double.
|
|
98
|
+
* - ``i_scheme``
|
|
99
|
+
- ``int``
|
|
100
|
+
- ``1``
|
|
101
|
+
- Which time-stepping scheme to use. 0: scree, 1: super.
|
|
102
|
+
* - ``i_loss``
|
|
103
|
+
- ``int``
|
|
104
|
+
- ``1``
|
|
105
|
+
- Viscous loss model. 0: inviscid, 1: viscous.
|
|
106
|
+
* - ``K_exit``
|
|
107
|
+
- ``float``
|
|
108
|
+
- ``0.5``
|
|
109
|
+
- Relaxation factor for outlet forcing.
|
|
110
|
+
* - ``K_inlet``
|
|
111
|
+
- ``float``
|
|
112
|
+
- ``0.5``
|
|
113
|
+
- Relaxation factor for inlet forcing.
|
|
114
|
+
* - ``K_mix``
|
|
115
|
+
- ``float``
|
|
116
|
+
- ``0.1``
|
|
117
|
+
- Relaxation factor for mixing plane forcing.
|
|
118
|
+
* - ``sf_mix``
|
|
119
|
+
- ``float``
|
|
120
|
+
- ``0.01``
|
|
121
|
+
- Smoothing factor for uniform enthalpy and entropy downstream of mixing plane.
|
|
122
|
+
* - ``print_conv``
|
|
123
|
+
- ``bool``
|
|
124
|
+
- ``True``
|
|
125
|
+
- Print convergence history in the log.
|
|
126
|
+
* - ``fmgrid``
|
|
127
|
+
- ``float``
|
|
128
|
+
- ``0.2``
|
|
129
|
+
- Factor scaling the multigrid residual.
|
|
130
|
+
* - ``multigrid``
|
|
131
|
+
- ``tuple``
|
|
132
|
+
- ``(2, 2, 2)``
|
|
133
|
+
- Number of cells forming each multigrid level. (2, 2, 2) gives coarse cells of side length 2, 4, and 8 fine cells.
|
|
134
|
+
* - ``area_avg_Pout``
|
|
135
|
+
- ``bool``
|
|
136
|
+
- ``True``
|
|
137
|
+
- Force area-averaged outlet pressure to target, otherwise use uniform outlet pressure.
|
|
138
|
+
|
|
139
|
+
.. _solver-custom:
|
|
140
|
+
|
|
141
|
+
Custom solvers
|
|
142
|
+
--------------
|
|
143
|
+
|
|
144
|
+
To add a new solver, create a new class that inherits from :class:`turbigen.solvers.base.BaseSolver`. and implement the following methods:
|
|
145
|
+
|
|
146
|
+
- :meth:`run`: Run the solver on the given grid and machine geometry.
|
|
147
|
+
- :meth:`robust`: Create a copy of the config with more robust settings.
|
|
148
|
+
- :meth:`restart`: Create a copy of the config with settings to restart from converged solution.
|
|
149
|
+
|
|
150
|
+
:class:`turbigen.solvers.base.BaseSolver` is a dataclass, so has an automatic constructor and
|
|
151
|
+
useful built-in methods. The configuration file `solver` section
|
|
152
|
+
is fed into the constructor as keyword arguments and becomes attributes of
|
|
153
|
+
the instance.
|