forked from 1b-agent/fieldcraft-upstream
Samples: the crank arm meshed structured from a partitioned half
crank-arm (and crank-mirror, kept as the same model under the name of its mirror workflow) now cut the crank on its symmetry plane and the half into seven cells: across the arm at x = 30, 60, 110 and 148, and on two diagonals radial to the pocket's corner fillets. Every cell's cross-section maps (four-sided blocks, the half O-grids round the bores, triangle primitives at the pocket's corners); exact edge seeds give each cut the same divisions on both sides, so mesh.cells merges all six cuts and mesh.mirror reflects the half: 7 710 hex20, scaled Jacobian min 0.37 (was 0.17, and 0.009 for the swept mirrored half), edge ratio at most 7.0. Root σxx ±62.43 MPa against M/Z 62.6 MPa, the spindle carries the 1500 N. The test asserts the quality floor. Gallery images regenerated. Fixes #247 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
1 parent
73987bdbae
commit
90948833e0
6 files changed
+188
-118
No files matched your search
+34
-24
@@ -114,42 +114,52 @@ clamp carries the whole 1 kN.
|
||||
|
||||
## Mirrored crank arm (`crank-mirror`)
|
||||
|
||||

|
||||

|
||||
|
||||
The crank arm of `crank-arm`, built from a half. A datum plane on its symmetry plane (`Sym`,
|
||||
y = 0) partitions it (`Half`) into `CrankArm/a` and `CrankArm/b`; the half `CrankArm/b` is swept
|
||||
all-hex (hex20 of 3 mm, 3 330 elements) and `mesh.mirror` reflects it onto `CrankArm/a`, joined
|
||||
on the plane: 6 660 hex20 elements, 32 933 nodes, all valid (scaled Jacobian min 0.009, mean 0.91).
|
||||
The image's faces carry `CrankArm/a`'s names, so the sets pick the square bore and the pedal hole
|
||||
on both halves. Material, supports and load as `crank-arm`.
|
||||
The model of `crank-arm` under the name of its mirror workflow (the sample kept so scripts and
|
||||
links made with it still open): seen from below, where the pocket is. How the half is cut,
|
||||
meshed and mirrored is told under `crank-arm`.
|
||||
|
||||
**Look at:** the two halves' meshes, mirror images of each other across the arm's middle (Mesh
|
||||
workspace), and the datum plane `Sym` before solving.
|
||||
**Look at:** the pocket from below: straight mapped rows along its sides and floor, and at each
|
||||
end its corner fillets cut off by the diagonal partitions into three-sided triangle primitives;
|
||||
the two halves, mirror images across the arm's middle.
|
||||
|
||||
**Check:** σxx on the arm's sides at x = 29 mm is −62.43 and +62.43 MPa, equal and opposite as
|
||||
the halves are, against M/Z = 62.5 MPa (0.2 %); the pedal bore moves 0.75 mm down, as on the whole
|
||||
swept crank; the spindle carries the whole 1500 N.
|
||||
**Check:** as `crank-arm`.
|
||||
|
||||
## Bicycle crank arm (`crank-arm`)
|
||||
|
||||

|
||||

|
||||
|
||||
A 170 mm aluminium crank built in SolidCraft (`crates/engine/samples/crank-arm.json`): a 16 mm
|
||||
arm tapering from 38 to 24 mm, root arcs into a Ø46 × 22 spindle boss with a 12.7 mm square bore
|
||||
(R1.5 corners) and a Ø30 × 20 pedal boss with a Ø14 hole, and an 82 × 14 × 8 pocket in its back
|
||||
(R5 corners). It is a stack of extrusions along z, so `mesh.hex.generate` sweeps it all-hex:
|
||||
7 274 hex20 elements of 3 mm, all valid, scaled Jacobian min 0.17, mean 0.83. To keep it
|
||||
sweepable the hex variant leaves out the pocket's floor fillet and the bosses' 1.5 mm chamfers,
|
||||
and its root arcs meet the bosses about 20° off tangent (a tangent meeting leaves a zero-angle
|
||||
cusp on the arm's top face, where any hex is degenerate). 6061-T6 (E = 68 900 MPa, ν = 0.33); the
|
||||
square bore's faces fixed, 1500 N on the pedal hole in the crank's plane, across the arm (−y).
|
||||
Linear static: about 4 s to open and 7 s to solve.
|
||||
(R5 corners). It is a stack of extrusions along z, so it sweeps all-hex. To keep it sweepable the
|
||||
hex variant leaves out the pocket's floor fillet and the bosses' 1.5 mm chamfers, and its root
|
||||
arcs meet the bosses about 20° off tangent (a tangent meeting leaves a zero-angle cusp on the
|
||||
arm's top face, where any hex is degenerate). 6061-T6 (E = 68 900 MPa, ν = 0.33); the square
|
||||
bore's faces fixed, 1500 N on the pedal hole in the crank's plane, across the arm (−y). Linear
|
||||
static: about 5 s to open and 7 s to solve.
|
||||
|
||||
**Look at:** the swept mesh (Prepare ▸ Mesh), eight layers through the arm, and the von Mises
|
||||
contours: the bending stress grows along the arm toward the root; the peak, 129 MPa, sits at a
|
||||
square-bore corner where the rigid clamp meets the free face, a support singularity.
|
||||
The mesh is built as an analyst builds a structured one. A datum plane on the symmetry plane
|
||||
(`Sym`, y = 0) partitions the crank (`Half`); the half `CrankArm/a` is cut into seven cells:
|
||||
across the arm at x = 30 (the root, beyond the spindle boss), 60 and 110 (the pocket's straight
|
||||
middle) and 148 (before the pedal boss), and on two diagonals (`D1`, `D2`) through the centres
|
||||
of the pocket's corner fillets, radial to them so they meet the pocket wall square. Every
|
||||
cell's cross-section then splits into regions that map: the half ring round each bore (an
|
||||
O-grid), four-sided blocks (transfinite), and the pocket's four corners, three-sided, as
|
||||
triangle primitives. Exact edge seeds (`mesh.seed.edge`) give every cut the same divisions on
|
||||
its two sides, so `mesh.cells` sweeps each cell (`extrude`, hex20 of 3 mm) and merges all six
|
||||
cuts node for node, and `mesh.mirror` reflects the half onto `CrankArm/b`: 7 710 hex20
|
||||
elements, 37 938 nodes, all valid, scaled Jacobian min 0.37, mean 0.92, edge ratio at most 7.0
|
||||
(the swept crank before: min 0.17, its free-paved middle at the pocket the worst).
|
||||
|
||||
**Check:** σxx on the arm's sides at x = 29 mm is ±62.4 MPa against the beam formula
|
||||
**Look at:** the mesh (Prepare ▸ Mesh): rows running straight along the arm, the O-grids round
|
||||
the bores, eight layers through the arm, and the von Mises contours: the bending stress grows
|
||||
along the arm toward the root; the peak, 145 MPa, sits at a square-bore corner where the rigid
|
||||
clamp meets the free face, a support singularity.
|
||||
|
||||
**Check:** σxx on the arm's sides at x = 29 mm is −62.43 and +62.43 MPa, equal and opposite as
|
||||
the mirror-image halves are, against the beam formula
|
||||
M/Z = 1500 · 141 / (16 · 35.6² / 6) = 62.6 MPa (0.3 %); a 41 815-element tet10 solution of the
|
||||
full part gives 62.3 MPa. The pedal bore moves 0.75 mm down (tet10: 0.70–0.75 mm; Euler–Bernoulli
|
||||
with a rigid clamp: 0.58 mm, without shear or the boss's compliance), and the spindle carries the
|
||||
|
||||
Reference in new issue
Block a user