visualdynamics.io.punch¶
punch
¶
Nastran punch files (.pch) — eigenvectors, read as a ShapeSet.
Phase 2 of the FEM interchange arc (PLAN.md): the bulk deck carries
the mesh and no results, and what a correlation needs is the modes.
SOL 103 punches them as text — DISPLACEMENT(PUNCH) = ALL in case
control — in a layout documented in every Nastran vendor's reference
and stable across them, which is exactly why the punch is read and
the .f06 print file is not: the print is a report formatted for eyes
and vendors disagree about its columns; the punch says the same
numbers in a fixed shape.
The layout, from those references: every line is 72 columns of data
with an optional sequence number in 73-80 (dropped unread). A mode
starts at a $EIGENVALUE = <lambda> MODE = <k> header — lambda is
the eigenvalue in (rad/s)^2, so the frequency in Hz is
sqrt(lambda)/2pi — under $ header lines naming the output
($DISPLACEMENTS, $EIGENVECTOR) and its arithmetic
($REAL OUTPUT or $COMPLEX OUTPUT). Each grid then takes one line
of id, type and three translations, with -CONT- lines carrying the
three rotations.
$COMPLEX OUTPUT refuses loudly: a complex modal solution punches
its eigenvalue in a header layout no file here has ever shown, and a
guessed frequency on every mode is worse than a refusal naming the
gap — sample-and-extend when a real one arrives.
Only G (grid) rows are kept. S (scalar) points carry one value
that belongs to no geometric direction, so they are skipped
knowingly rather than mapped onto an axis they do not have.
Real normal modes carry no damping; the ShapeSet says 0 and the person fitting against it knows why. A punch is unitless like the deck it came from, so shapes arrive raw.