pyyeti.ode.get_su_coef

pyyeti.ode.get_su_coef(m, b, k, h, rbmodes=None, rfmodes=None)[source]

Get uncoupled equations of motion integration coefficients.

Parameters:
  • m (1d ndarray or None) – Mass; vector (of diagonal), or None (identity assumed)

  • b (1d ndarray) – Damping; vector (of diagonal)

  • k (1d ndarray) – Stiffness; vector (of diagonal)

  • h (scalar or None) – Time step; if None, this return returns None.

  • rbmodes (1d ndarray or None; optional) – Index vector for the rigid-body modes; if None, a mode is assumed rigid-body if the k value is < 0.005.

  • rfmodes (1d ndarray or None; optional) – Index vector for the residual flexibility modes; if None, there are no residual flexibility modes.

Returns:

coefs (SimpleNamespace with the members:) – F, G, A, B, Fp, Gp, Ap, Bp, pvrb, pvrb_damped

Notes

All entries in coefs are 1d ndarrays. Except for pvrb, the outputs are the integration coefficients. It can handle rigid-body, under-damped, critically-damped, and over-damped equations. It can also handle rigid-body with damping. The solver is exact with the assumption that the forces vary linearly during a time step (1st order hold). pvrb is a boolean vector with True specifying where rigid-body modes are and pvrb_damped is the same but for the damped rigid-body modes.

The coefficients are used as follows:

for j in range(nt-1):
    d[:, j+1] = (F * d[:, j] + G * v[:, j] +
                   A * P[:, j] + B * P[:, j+1])
    v[:, j+1] = (Fp * d[:, j] + Gp * v[:, j] +
                   Ap * P[:, j] + Bp * P[:, j+1])

where d is the displacement, v is the velocity, and P is the applied force.

Most of the coefficients can be found in the Nastran Theoretical Manual [1]. For the case where k = 0 but b != 0 (rigid-body with damping … which is probably unusual), the coefficients were computed by hand and confirmed in Python using the “sympy” package.

References

See also

SolveUnc