pyyeti.ode.SolveExp2.get_f2x

SolveExp2.get_f2x(phi, velo=False)[source]

Get force-to-displacement or force-to-velocity transform

Parameters:
  • phi (2d ndarray) – Transform from ODE coordinates to physical DOF

  • velo (bool; optional) – If True, get force to velocity transform instead

Returns:

flex (2d ndarray) – Force to displacement (or velocity) transform

Notes

This routine was written to support Henkel-Mar simulations; see [1]. The equations of motion for two separate bodies are solved simultaneously while enforcing joint compatibility. This is handy for allowing the two bodies to separate from each other. The flex matrix is part of the matrix in the upper right quadrant of equation 27 in ref [1]; the remaining part comes from the other body.

The interface DOF are those DOF that interface with the other body. The force is the interface force and the displacement (or velocity) is of the interface DOF.

The reference does not discuss enforcing joint velocity compatibility. This routine however lets you choose between the two since the velocity method is fundamentally more stable than the displacement method.

Let (see also __init__()):

phik = phi[:, kdof]
phirf = phi[:, rf]

If velo is False:

flex = phik @ Q[n:] @ phik.T + phirf @ ikrf @ phirf

If velo is True:

flex = phik @ Q[:n] @ phik.T

Note

A zeros matrix is returned if order is 0.

Raises:

NotImplementedError – When systype is not float.

References