|
1 | 1 | # CHANGELOG |
2 | 2 |
|
3 | | -## v0.11.0 05-06-2026 |
| 3 | +## v0.11.1 06-06-2026 |
| 4 | + |
| 5 | +### Added |
| 6 | +- `init_stretch_frac` (YAML column and `Tether(...; stretch_frac)` kwarg), |
| 7 | + mutually exclusive with `init_tether_force`: `reinit!` derives the |
| 8 | + unstretched `len` as `len = stretch_frac·stretched`. Setting one input |
| 9 | + clears the other. `init_stretch_frac` must be positive: `<1` pre-stretch, |
| 10 | + `1` neutral, `>1` slack. |
| 11 | +- `test_twist_alignment.jl`: under group twist the structural strut |
| 12 | + trailing-edge points stay aligned with the deformed VSM panel trailing |
| 13 | + edges for a `RIGID_DYNAMICS` wing. |
| 14 | + |
| 15 | +### Changed |
| 16 | +- `VortexStepMethod` compat raised to `3.3.5`. |
| 17 | + |
| 18 | +### Fixed |
| 19 | +- Per-group unrefined moment uses the VSM solver field |
| 20 | + `moment_coeff_unrefined_dist`. |
| 21 | + |
| 22 | +## v0.11.0 02-06-2026 |
4 | 23 |
|
5 | 24 | ### Breaking |
6 | 25 | - Tether `init_unstretched_length` (YAML) removed; specifying it errors. |
7 | 26 | The unstretched rest length is now *derived*: placement is driven by |
8 | 27 | `init_stretched_length` (the standoff / placed point geometry, |
9 | 28 | default = geometric) and `init_tether_force` (default 0), and |
10 | 29 | `len = stretched·(1 − force/unit_stiffness)`. |
11 | | -- `Tether` gained `init_stretched_len` (`Union{SimFloat,Nothing}` |
12 | | - placement standoff) and the mutually-exclusive pre-tension inputs |
13 | | - `init_tether_force` / `init_stretch_frac`. `init_unstretched_len` is |
14 | | - no longer a field — the derived rest length is now the |
15 | | - `init_unstretched_len(tether, segments)` function. The positional |
16 | | - length constructor arg (now the stretched length) is optional. |
17 | | - Serialized models must be rebuilt. |
| 30 | +- `Tether.init_stretched_len`/`init_unstretched_len` are now |
| 31 | + `Union{SimFloat,Nothing}` (`init_unstretched_len` is derived); `Tether` |
| 32 | + gained `init_tether_force`; the positional length constructor arg |
| 33 | + (now the stretched length) is optional. Serialized models must be |
| 34 | + rebuilt. |
18 | 35 | - `VSMWing` `origin_idx`/`origin_ref` replaced by |
19 | 36 | `origin::WeightedRefPoints` (weighted body-frame origin). |
20 | 37 | - `update_yaml_from_sys_struct!` and `update_sys_struct_from_yaml!` |
21 | 38 | removed (unreliable line-based YAML round-tripping, no longer used). |
22 | 39 |
|
23 | 40 | ### Added |
24 | | -- `init_tether_force` (default 0) and `init_stretch_frac` (mutually |
25 | | - exclusive; YAML columns and `Tether(...; tether_force / stretch_frac)` |
26 | | - kwargs): `reinit!` derives every tether's unstretched `len` from the |
27 | | - placed stretched length — `len = stretched·(1 − force/unit_stiffness)` |
28 | | - or `len = stretch_frac·stretched`. Setting one clears the other. |
29 | | - `init_stretch_frac` must be positive: `<1` pre-stretch, `1` neutral, |
30 | | - `>1` slack. |
| 41 | +- `init_tether_force` (YAML / `Tether(...; tether_force)`, default 0): |
| 42 | + `reinit!` derives every tether's unstretched `len` from the placed |
| 43 | + stretched length, `len = stretched·(1 − force/unit_stiffness)`; |
| 44 | + force 0 gives zero tension. |
31 | 45 | - `init!`/`reinit!` `apply_tether_lengths` kwarg to skip placement. |
32 | 46 | - `WeightedRefPoints(::AbstractString)`; `yaml_parse_origin` for |
33 | 47 | weighted origin specs. |
|
49 | 63 | use `wing.pos_w` directly. |
50 | 64 | - `build_point_to_vsm_point_mapping` takes a `VSMWing`, using |
51 | 65 | body-frame closest-point distances. |
52 | | -- `VortexStepMethod` compat raised to `3.3.5`. |
53 | 66 |
|
54 | 67 | ### Fixed |
55 | | -- Per-group unrefined moment uses the VSM solver field |
56 | | - `moment_coeff_unrefined_dist`. |
57 | 68 | - Makie zoom/pan world-camera save/restore (no view drift); body-frame |
58 | 69 | zoom distance preserved across mode switches. |
59 | 70 | - `vsm_refine.jl`: RIGID_DYNAMICS wings always keep their aerodynamic |
|
0 commit comments