|
5 | 5 | # A nozzle with a chamber that produces self-induced oscillations.
|
6 | 6 | # See helmholtz_nozzle.svg for geometry explanation.
|
7 | 7 |
|
8 |
| -# Also a good example how inapproproate blocking leads to bad mesh |
9 |
| -# when boundary layers are required. |
10 |
| - |
11 |
| -# Also a good example how InflationGrader isn't finished yet. |
12 |
| -# TODO: finish InflationGrader |
13 |
| - |
14 |
| -# geometry data (all dimensions in milimeters): |
| 8 | +# geometry data (all dimensions in meters): |
15 | 9 | # inlet pipe
|
16 |
| -r_inlet = 10 |
17 |
| -l_inlet = 50 |
| 10 | +r_inlet = 10e-3 |
| 11 | +l_inlet = 50e-3 |
18 | 12 |
|
19 | 13 | # nozzle
|
20 |
| -r_nozzle = 6 |
21 |
| -l_nozzle = 20 |
| 14 | +r_nozzle = 6e-3 |
| 15 | +l_nozzle = 20e-3 |
22 | 16 |
|
23 | 17 | # chamber
|
24 |
| -l_chamber_inner = 100 |
25 |
| -l_chamber_outer = 105 |
26 |
| -r_chamber_outer = 20 |
| 18 | +l_chamber_inner = 100e-3 |
| 19 | +l_chamber_outer = 105e-3 |
| 20 | +r_chamber_outer = 20e-3 |
27 | 21 |
|
28 | 22 | # outlet
|
29 |
| -l_outlet = 80 |
| 23 | +l_outlet = 80e-3 |
30 | 24 |
|
31 | 25 | # cell sizing
|
32 |
| -first_cell_size = 0.02 |
33 |
| -bulk_cell_size = 1.2 |
| 26 | +cell_size = 1.5e-3 |
| 27 | +bl_size = 0.15e-3 |
| 28 | +c2c_expansion = 1.1 |
| 29 | +axial_expansion = 2 # make cells in non-interesting places longer to save on count |
34 | 30 |
|
35 | 31 | mesh = cb.Mesh()
|
36 | 32 |
|
37 | 33 | # inlet
|
38 | 34 | inlet = cb.Cylinder([0, 0, 0], [l_inlet, 0, 0], [0, 0, r_inlet])
|
| 35 | +inlet.chop_axial(start_size=cell_size * axial_expansion, end_size=cell_size) |
| 36 | +inlet.chop_tangential(start_size=cell_size) |
39 | 37 |
|
40 | 38 | inlet.set_start_patch("inlet")
|
41 | 39 | inlet.set_outer_patch("wall")
|
42 | 40 | mesh.add(inlet)
|
43 | 41 |
|
44 | 42 | # nozzle
|
45 | 43 | nozzle = cb.Frustum.chain(inlet, l_nozzle, r_nozzle)
|
| 44 | +# cell sizing: make sure bl_size is correct here |
| 45 | +nozzle.chop_axial(length_ratio=0.5, start_size=cell_size * axial_expansion, end_size=cell_size) |
| 46 | +nozzle.chop_axial(length_ratio=0.5, start_size=cell_size, end_size=bl_size) |
| 47 | +nozzle.chop_radial(end_size=bl_size, c2c_expansion=1 / c2c_expansion) |
46 | 48 | nozzle.set_outer_patch("wall")
|
47 | 49 | mesh.add(nozzle)
|
48 | 50 |
|
49 | 51 | # chamber: inner cylinder
|
50 | 52 | chamber_inner = cb.Cylinder.chain(nozzle, l_chamber_inner)
|
| 53 | +# create smaller cells at inlet and outlet but leave them bigger in the middle; |
| 54 | +chamber_inner.chop_axial(length_ratio=0.25, start_size=bl_size, end_size=cell_size) |
| 55 | +chamber_inner.chop_axial(length_ratio=0.25, start_size=cell_size, end_size=cell_size * axial_expansion) |
| 56 | + |
| 57 | +chamber_inner.chop_axial(length_ratio=0.25, start_size=cell_size * axial_expansion, end_size=cell_size) |
| 58 | +chamber_inner.chop_axial(length_ratio=0.25, start_size=cell_size, end_size=bl_size) |
51 | 59 | mesh.add(chamber_inner)
|
52 | 60 |
|
53 | 61 | # chamber outer: expanded ring; the end face will be moved when the mesh is assembled
|
54 | 62 | chamber_outer = cb.ExtrudedRing.expand(chamber_inner, r_chamber_outer - r_inlet)
|
| 63 | +chamber_outer.chop_radial(length_ratio=0.5, start_size=bl_size, c2c_expansion=c2c_expansion) |
| 64 | +chamber_outer.chop_radial(length_ratio=0.5, end_size=bl_size, c2c_expansion=1 / c2c_expansion) |
| 65 | +chamber_outer.set_start_patch("wall") |
| 66 | +chamber_outer.set_end_patch("wall") |
| 67 | +chamber_outer.set_outer_patch("wall") |
| 68 | +mesh.add(chamber_outer) |
55 | 69 |
|
56 | 70 | # translate outer points of outer chamber (and edges) to get
|
57 | 71 | # that inverted cone at the end;
|
|
62 | 76 |
|
63 | 77 | face.add_edge(1, cb.Origin([l_inlet + l_nozzle + l_chamber_outer, 0, 0]))
|
64 | 78 |
|
65 |
| -chamber_outer.set_start_patch("wall") |
66 |
| -chamber_outer.set_end_patch("wall") |
67 |
| -chamber_outer.set_outer_patch("wall") |
68 |
| -mesh.add(chamber_outer) |
69 |
| - |
70 | 79 | # outlet pipe
|
71 | 80 | outlet = cb.Cylinder.chain(chamber_inner, l_outlet)
|
| 81 | +outlet.chop_axial(length_ratio=0.5, start_size=bl_size, end_size=cell_size) |
| 82 | +outlet.chop_axial(length_ratio=0.5, start_size=cell_size, end_size=cell_size * axial_expansion) |
72 | 83 | outlet.set_outer_patch("wall")
|
73 | 84 | outlet.set_end_patch("outlet")
|
74 | 85 | mesh.add(outlet)
|
75 | 86 |
|
76 |
| -mesh.modify_patch("wall", "wall") |
77 |
| - |
78 |
| -grader = cb.InflationGrader(mesh, first_cell_size, bulk_cell_size) |
79 |
| -grader.grade() |
80 |
| - |
81 |
| -mesh.settings["scale"] = 0.001 |
82 | 87 | mesh.write(os.path.join("..", "case", "system", "blockMeshDict"), debug_path="debug.vtk")
|
0 commit comments