tmdsimpy.roms.epmc.constant_displacement¶
- tmdsimpy.roms.epmc.constant_displacement(epmc_bb, h, Flcos, Omega, control_point, control_amplitude, w=None, zeta=None)¶
Reduced order model based on EPMC to capture constant vibration response obtained via varying force levels.
- Parameters:
- epmc_bb(M, Nhc*Ndof+3) numpy.ndarray
Each row corresponds to an EPMC solution at a given amplitude level. The first Nhc*Ndof entries of each row are the displacements of the harmonics in h (all of the first harmonic component, then all of next etc.). The last three entries of each row are frequency (rad/s), xi in EPMC formulation (coefficient in front of mass matrix to create a damping matrix), and log10(modal amplitude). Harmonic displacements must be multiplied by the modal amplitude to get the physical displacements except for displacements corresponding to the zeroth harmonic.
- hnumpy.ndarray, sorted
Array of the harmonics used to calculate epmc_bb, must be sorted.
- Flcos(Ndof,) numpy.ndarray
External constant excitation to be considered. Excitation is just applied to the first harmonic (at undetermined phase)
- Omega(Mout,) numpy.ndarray
External forcing frequencies to calculate the force scaling at to achieve constant amplitude.
- control_point(Ndof,) numpy.ndarray
Vector for extracting the degree of freedom that should be controlled to constant amplitude as control_point @ U(t) where U(t) is the Ndof displacement vector.
- control_amplitudefloat
Desired amplitude that the control point should be controlled to. This is displacement amplitude (0th derivative of motion)
- wNone, float, or (M,) numpy.ndarray, optional
Alternative natural frequencies to use instead of those provided in epmc_bb. If provided, it is also used in calculating the fraction of critical damping (if zeta is not provided). Units should be rad/s. If a numpy.ndarray, the order corresponds to entries in epmc_bb. The default is None.
- zetaNone, float, or (M,) numpy.ndarray, optional
Alternative modal damping (fraction of critical) to use rather than calculating it from the epmc_bb. If a numpy.ndarray, the order corresponds to entries in epmc_bb. The default is None.
- Returns:
- force_magnitude(Mout,) numpy.ndarray
The magnitude of the force at each frequency in Omega that gives the desired response amplitude according to the ROM.
- epmc_point(Nhc*Ndof+3) numpy.ndarray
The interpolated EPMC solution at the desired control amplitude level. If w and or zeta are included, then the epmc_point has the modified values of these parameters (interpolated to the control amplitude).
See also
constant_forceEPMC based ROM for constant external force rather than displacement
tmdsimpy.VibrationSystem.epmc_resEPMC residual method that each line of epmc_bb solves as the Uwxa input
tmdsimpy.VibrationSystem.hbm_amp_control_resHBM residual method calculates something similar to a truth solution to compare this ROM to.
tmdsimpy.Continuation.continuationMethod of obtaining solutions to EPMC at multiple points to create the epmc_bb input to this function
Notes
Theory for this method is derived in [1], [2].
Interpolation along the EPMC backbone is done using linear coordinates for the modal amplitude (e.g., 10**epmc_bb[:, -1] rather than epmc_bb[:, -1]).
EPMC is the Extended Periodic Motion Concept (EPMC). The number of harmonic components is Nhc = tmdsimpy.utils.harmonic.Nhc(h)
The fraction of critical damping from an EPMC backbone can be calculated as zeta = epmc_bb[:, -2] / (2*epmc_bb[:, -3]).
The complex mode shape is represented as psi = U1c + 1j*U1s where U1c and U1s are the first harmonic cosine and sine respectively
Only 1st harmonic forcing is considered.
References
[1]Porter, J. H., and M. R. W. Brake. Under Review. “Efficient Model Reduction and Prediction of Superharmonic Resonances in Frictional and Hysteretic Systems.” Mechanical Systems and Signal Processing. arXiv:2405.15918.
[2]Porter, J. H. 2024. Modal Interactions and Jointed Structures. PhD Thesis. Rice University.