mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
from build123d import *
|
|
|
|
exchanger_diameter = 10 * CM
|
|
exchanger_length = 30 * CM
|
|
plate_thickness = 5 * MM
|
|
# 149 tubes
|
|
tube_diameter = 5 * MM
|
|
tube_spacing = 2 * MM
|
|
tube_wall_thickness = 0.5 * MM
|
|
tube_extension = 3 * MM
|
|
bundle_diameter = exchanger_diameter - 2 * tube_diameter
|
|
fillet_radius = tube_spacing / 3
|
|
assert tube_extension > fillet_radius
|
|
|
|
# Build the heat exchanger
|
|
tube_locations = [
|
|
l
|
|
for l in HexLocations(
|
|
apothem=(tube_diameter + tube_spacing) / 2,
|
|
x_count=exchanger_diameter // tube_diameter,
|
|
y_count=exchanger_diameter // tube_diameter,
|
|
)
|
|
if l.position.length < bundle_diameter / 2
|
|
]
|
|
|
|
tube_plan = Sketch() + [
|
|
loc
|
|
* (
|
|
Circle(radius=tube_diameter / 2)
|
|
- Circle(radius=tube_diameter / 2 - tube_wall_thickness)
|
|
)
|
|
for loc in tube_locations
|
|
]
|
|
|
|
heat_exchanger = extrude(tube_plan, exchanger_length / 2)
|
|
|
|
plate_plane = Plane(
|
|
origin=(0, 0, exchanger_length / 2 - tube_extension - plate_thickness),
|
|
z_dir=(0, 0, 1),
|
|
)
|
|
plate = Circle(radius=exchanger_diameter / 2) - [
|
|
loc * Circle(radius=tube_diameter / 2 - tube_wall_thickness)
|
|
for loc in tube_locations
|
|
]
|
|
heat_exchanger += extrude(plate_plane * plate, plate_thickness)
|
|
edges = (
|
|
heat_exchanger.edges()
|
|
.filter_by(GeomType.CIRCLE)
|
|
.group_by(SortBy.RADIUS)[1]
|
|
.group_by()[2]
|
|
)
|
|
half_volume_before_fillet = heat_exchanger.volume
|
|
heat_exchanger = fillet(*edges, radius=fillet_radius, target=heat_exchanger)
|
|
half_volume_after_fillet = heat_exchanger.volume
|
|
heat_exchanger += mirror(heat_exchanger, about=Plane.XY)
|
|
|
|
fillet_volume = 2 * (half_volume_after_fillet - half_volume_before_fillet)
|
|
assert abs(fillet_volume - 469.88331045553787) < 1e-3
|
|
|
|
if "show_object" in locals():
|
|
show_object(heat_exchanger.wrapped)
|