visualdynamics.core.correlate¶
correlate
¶
Test-analysis correlation: FEM shapes sampled at the test's DOFs.
A finite element model carries a dense mesh with three or more DOFs per node; the test measured a sparse set of directions at its own nodes. Comparing the two starts by projecting the model onto the test: match each test node to its nearest FEM node, take the FEM displacement there (already resolved to global by the deform machinery), and dot it with the test DOF's global direction — which handles uniaxial measurements and local coordinate systems in one step. The result is an ordinary ShapeSet at the test's DOFs, so everything downstream — cross-MAC, overlay animation, reports — works on it unchanged.
Both geometries must overlay in one frame already; aligning mismatched frames is a separate, later problem.
References
The projection here is ordinary; these are where the comparison it feeds is set out.
- Allemang, R. J., & Brown, D. L. (1982). "A Correlation Coefficient for Modal Vector Analysis." Proceedings of the 1st International Modal Analysis Conference (IMAC). The Modal Assurance Criterion.
- Allemang, R. J. (2003). "The Modal Assurance Criterion - Twenty Years of Use and Abuse." Sound and Vibration. What the number does and does not say, including why a high MAC between a model and a test is not by itself agreement.
- Ewins, D. J. (2000). Modal Testing: Theory, Practice and Application, 2nd ed. Research Studies Press. Comparing a model with a test, and reducing one to the other's degrees of freedom.
Functions:
| Name | Description |
|---|---|
project_shapes |
|
Classes¶
Functions:¶
project_shapes
¶
project_shapes(fem_shapes: ShapeSet, fem_geometry: Geometry, test_shapes: ShapeSet, test_geometry: Geometry, tolerance: float = 0.02) -> tuple[ShapeSet, dict[str, Any]]
fem_shapes reduced to test_shapes' DOFs.
tolerance is a fraction of the test geometry's extent: a test
node whose nearest FEM node lies further away is not matched, and
its DOFs are dropped from the result rather than guessed. A FEM
geometry of plates (its element groups giving thicknesses) is allowed half
its thickest plate beyond that, since its sensors are on surfaces
and its nodes on mid-surfaces.
Returns (shape_set, report): the projected ShapeSet and a dict with 'matched' / 'total' test node counts, 'worst' matched distance and 'limit' (both meters, in the units-defined case), and 'dropped' — the test DOFs the projection could not carry.
Source code in src/visualdynamics/core/correlate.py
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | |