kcl-samples → radial-flow-centrifugal-impeller

radial-flow-centrifugal-impeller

radial-flow-centrifugal-impeller

KCL

// Impeller (Radial-flow)
// Radial-flow impeller for centrifugal pumps—designed as a parametric base for blade and housing experiments.




@settings(defaultLengthUnit = mm, kclVersion = 1.0)

// parameters
bladeCount = 12 // number of blades
sweepDeg = 30 // yaw offset between leading and trailing edge
od = 150 // overall diameter
hubOd = 40 // hub outside diameter
boreDia = 30 // shaft hole diameter
baseThick = 6 // back-plate thickness
hubHeight = 40 // hub axial length
bladeRadSpan = 30 // radial blade width
bladeChord = 35 // axial blade length
bladeHeight = hubHeight // plate height
bladeThickness = 3
rootR = hubOd / 2 + 10

// root rectangle (leading edge)
leadSketch = startSketchOn(XY)
leadRect = startProfile(leadSketch, at = [0, 0])
  |> xLine(length = bladeThickness)
  |> yLine(length = bladeChord)
  |> xLine(length = -bladeThickness)
  |> close()

// tip rectangle (trailing edge, rotated by sweepDeg)
trailPlane = offsetPlane(XY, offset = bladeHeight) // lift by bladeHeight to give sheet thickness
trailSketch = startSketchOn(trailPlane)
trailRect = startProfile(trailSketch, at = [0, 0])
  |> xLine(length = bladeThickness)
  |> yLine(length = bladeChord)
  |> xLine(length = -bladeThickness)
  |> close()
  |> rotate(yaw = sweepDeg)

// loft one curved blade
oneBlade = loft([leadRect, trailRect])

// move blade outward so tip reaches outer diameter
bladeOffset = translate(
  oneBlade,
  x = 0,
  y = rootR,
  z = 0,
)

// pattern blades around 360 °
blades = patternCircular3d(
  bladeOffset,
  axis = [0, 0, 1],
  center = [0, 0, 0],
  instances = bladeCount,
  arcDegrees = 360,
)

// back-plate disk
diskSketch = startSketchOn(XY)
diskCircle = circle(diskSketch, center = [0, 0], radius = od / 2)
backPlate = extrude(diskCircle, length = -baseThick)

// hub solid
hubSketch = startSketchOn(backPlate, face = END)
hubCircle = circle(hubSketch, center = [0, 0], radius = hubOd / 2)
hub = extrude(hubCircle, length = hubHeight)

// bore hole
boreSketch = startSketchOn(offsetPlane(XY, offset = -baseThick * 2))
boreCircle = circle(boreSketch, center = [0, 0], radius = boreDia / 2)
bore = extrude(boreCircle, length = baseThick * 2 + hubHeight + 5)

// final impeller
impeller = subtract(hub, tools = [bore])