NOTES¶
Localization — Identify Which DOF is Damaged
Use COMAC analysis to measure mode shape changes at each degree of freedom.
Algorithm — COMAC¶
COMAC measures per-DOF mode shape consistency across all modes:
\[ \operatorname{COMAC}(d) = \frac{\left(\sum_{m=1}^{N_m} \phi_{m,d}^{cur} \cdot \phi_{m,d}^{base}\right)^2} {\sum \left(\phi_{m,d}^{cur}\right)^2 \cdot \sum \left(\phi_{m,d}^{base}\right)^2} \]
- COMAC = 1: mode shape unchanged at this DOF
- COMAC < 1: mode shape changed; lower = more change
Damage probability: \(P(d) = (1 - \operatorname{COMAC}(d)) / \max(\cdot)\)
Data Structure¶
typedef struct {
int dof; // most likely damaged DOF (-1=none)
float prob[TINY_DAMAGE_MAX_DOF]; // per-DOF probability [0, 1]
float comac_min; // minimum COMAC value
} tiny_damage_locate_t;
Design Deep Dive¶
1. COMAC vs MAC¶
| MAC | COMAC | |
|---|---|---|
| Scope | Whole shape (all DOFs) | Single DOF |
| Output | One scalar [0, 1] | One per DOF |
| Purpose | Mode pairing, validation | Damage localization |
COMAC is the "per-DOF version" of MAC.
2. Why double Accumulation?¶
Float precision loss occurs when mode shape values at a DOF are near zero. Double provides 15-16 significant digits vs float's 7.
3. Probability Normalization¶
Normalization maps to [0, 1], making the highest-probability DOF always 1.0. Caveat: when all COMAC ≈ 1, the "highest" DOF may have very little actual damage. Check comac_min: if > 0.95, the 100% probability may be misleading.