Skip to content

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.