|
1 | 1 | # CHANGELOG |
2 | 2 |
|
| 3 | +## v0.11.0 01-06-2026 |
| 4 | + |
| 5 | +### Breaking |
| 6 | +- Tether `init_unstretched_length` (YAML) removed; specifying it errors. |
| 7 | + The unstretched rest length is now *derived*: placement is driven by |
| 8 | + `init_stretched_length` (the standoff / placed point geometry, |
| 9 | + default = geometric) and `init_tether_force` (default 0), and |
| 10 | + `len = stretched·(1 − force/unit_stiffness)`. |
| 11 | +- `Tether.init_stretched_len`/`init_unstretched_len` are now |
| 12 | + `Union{SimFloat,Nothing}` (`init_unstretched_len` is derived); `Tether` |
| 13 | + gained `init_tether_force`; the positional length constructor arg |
| 14 | + (now the stretched length) is optional. Serialized models must be |
| 15 | + rebuilt. |
| 16 | +- `VSMWing` `origin_idx`/`origin_ref` replaced by |
| 17 | + `origin::WeightedRefPoints` (weighted body-frame origin). |
| 18 | +- `update_yaml_from_sys_struct!` and `update_sys_struct_from_yaml!` |
| 19 | + removed (unreliable line-based YAML round-tripping, no longer used). |
| 20 | + |
| 21 | +### Added |
| 22 | +- `init_tether_force` (YAML / `Tether(...; tether_force)`, default 0): |
| 23 | + `reinit!` derives every tether's unstretched `len` from the placed |
| 24 | + stretched length, `len = stretched·(1 − force/unit_stiffness)`; |
| 25 | + force 0 gives zero tension. |
| 26 | +- `init!`/`reinit!` `apply_tether_lengths` kwarg to skip placement. |
| 27 | +- `WeightedRefPoints(::AbstractString)`; `yaml_parse_origin` for |
| 28 | + weighted origin specs. |
| 29 | +- Helpers: `apply_tether_init_forces!`, `tether_unit_stiffness`, |
| 30 | + `tether_anchor_free`, `rigid_point_siblings`, `parse_tether_init`, |
| 31 | + `tether_ordered_point_idxs`, `tether_downstream_idxs`, |
| 32 | + `group_tethers_by_overlap`, `apply_cluster_init_stretched_len!`, |
| 33 | + `_wing_log_pos`; `test_tether_init.jl`. |
| 34 | + |
| 35 | +### Changed |
| 36 | +- Tether placement honored only on *root* tethers (one endpoint on a |
| 37 | + `STATIC`/winch boundary — the fixed anchor, either end); a tether |
| 38 | + with neither endpoint anchored is an error. Tethers sharing a |
| 39 | + `RIGID_DYNAMICS` wing are treated as one cluster (rigid-body |
| 40 | + connectivity). Multi-root clusters placed by the mean displacement of |
| 41 | + all roots (length + direction), logging `@info` (gated on `prn`). |
| 42 | +- Wing position stored in dedicated `SysState` slots; reads via |
| 43 | + `update_from_sysstate!` / `_wing_log_pos` / Makie body-frame arrows |
| 44 | + use `wing.pos_w` directly. |
| 45 | +- `build_point_to_vsm_point_mapping` takes a `VSMWing`, using |
| 46 | + body-frame closest-point distances. |
| 47 | + |
| 48 | +### Fixed |
| 49 | +- Makie zoom/pan world-camera save/restore (no view drift); body-frame |
| 50 | + zoom distance preserved across mode switches. |
| 51 | +- `vsm_refine.jl`: RIGID_DYNAMICS wings always keep their aerodynamic |
| 52 | + panel geometry (mesh- or YAML-defined); section rebuilding from |
| 53 | + structural points is now PARTICLE_DYNAMICS-only. The 2plate aero |
| 54 | + geometry was corrected to match its structural points. |
| 55 | +- `get_sys_struct_hash` hashes `wing.origin`. |
| 56 | + |
3 | 57 | ## v0.10.0 30-05-2026 |
4 | 58 |
|
5 | 59 | ### Changed |
|
32 | 86 | `kps4_comparison`, `vsm_linearization`, and `sam_tutorial`. |
33 | 87 |
|
34 | 88 | ### Fixed |
| 89 | +- `init_stretched_len` now works for multi-tether systems. Tethers |
| 90 | + sharing downstream structure are placed to a single effective |
| 91 | + length (the average of several specified values, with a warning), |
| 92 | + and the initial-positioning BFS no longer drags other tethers' |
| 93 | + ground anchors — it stops at `STATIC` points and winch points |
| 94 | + (which may be `DYNAMIC`). |
35 | 95 | - `bin/create_sys_image`: fixed a bug that prevented deletion of |
36 | 96 | stale `.so` files before rebuilding the system image. |
37 | 97 | - `AUTHORS.md`: corrected contributor entry. |
|
0 commit comments