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 = 0butb != 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