Skip to content

Commit efc187e

Browse files
authored
Merge pull request #141 from SMI-Lab-Inha/chore/release-1.18.0
chore: promote CHANGELOG for 1.18.0
2 parents f40e87b + 70582d6 commit efc187e

2 files changed

Lines changed: 72 additions & 70 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 71 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,77 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
88

99
## [Unreleased]
1010

11+
(nothing yet)
12+
13+
## [1.18.0] — 2026-08-13
14+
15+
### Added
16+
17+
- **Discrete point masses at any station (#35).**
18+
`Tower.add_point_mass(height, mass)` attaches a lumped mass anywhere on
19+
the beam, filling the gap between `outfitting_factor` (smeared over the
20+
whole tower) and `tip_mass` (a single lump at the top) — a flange, an
21+
internal platform, a transformer, a boat-landing. The lump is assembled
22+
through the element shape functions at its exact station, so it does
23+
not have to land on a mesh node and the answer does not move if the
24+
mesh does. Validated against the closed-form cantilever-with-lump
25+
frequency. Its own rotary inertia about its centre is not modelled;
26+
use `tip_mass` where that term matters.
27+
- **Self-weight geometric softening (#134).**
28+
`Tower.run(gravity=True)` (or `gravity=9.80665`) puts the weight of the
29+
tower, the RNA and any point masses into the column as an axial load,
30+
which lowers the bending frequencies — typically around 2 % on the 1st
31+
fore-aft mode of a large machine, and usually the single largest term
32+
when reconciling against a tool that models gravity by default. **Off
33+
by default**, so every existing result is unchanged and the validated
34+
reference cases stay pinned to the BModes-equivalent behaviour. The
35+
geometric stiffness is anchored to two published buckling loads with
36+
different load distributions, Euler tip-load and Greenhill self-weight,
37+
both to 0.2 %. Refused for a free-base floating model, where buoyancy
38+
would have to be netted against the weight, and for the pinned-free
39+
cable BC.
40+
- **Distributed Winkler soil springs on the monopile path (#118).**
41+
`MudlineFoundation.distributed_springs()` turns the soil the lumped
42+
mudline springs were built from into a spring rate along the embedded
43+
pile, `k = D_P E_SO (z / L_P)^n` with the Shadlou and Bhattacharya
44+
inhomogeneity exponents. `Tower.attach_mudline_foundation(foundation,
45+
distributed=True)` lays it into `distr_k`, and
46+
`Tower.from_windio_with_monopile(..., soil_distributed=True)` keeps the
47+
embedded pile in the beam so it deflects against the soil over its real
48+
length rather than being condensed onto a base spring. Cross-validated
49+
against the lumped tier, which is the exact static condensation of the
50+
same beam and bed: the two agree to 0.4 %, the residual being the
51+
embedded pile's own inertia the condensed form drops.
52+
- **`n_nodes` on the deck and BMI readers (#58).** `Tower` and
53+
`RotatingBlade` gain a `refine_mesh(n_nodes)` method and an `n_nodes`
54+
keyword on every deck constructor — `Tower(...)`, `from_bmi`,
55+
`from_elastodyn`, `from_elastodyn_with_subdyn`,
56+
`from_elastodyn_with_mooring`, `RotatingBlade(...)` and its
57+
`from_elastodyn`. The geometry constructors already had it, so the
58+
keyword is now uniform across the whole surface. It stays opt-in
59+
because re-gridding a deck re-samples an **already tabulated** property
60+
table rather than recomputing exact tube properties: a `UserWarning`
61+
names any deliberate property step the new mesh misses, and a deck with
62+
tension-wire supports is refused outright, since those attach to node
63+
numbers that would silently move.
64+
- **Domain-aware validation for the civil-structural and geotechnical
65+
disciplines (#102).** `check_model` gains a fixed-bottom `D / t` band —
66+
the support-type-aware tightening of the deliberately wide band
67+
`tubular_section_props` applies at construction, which cannot know the
68+
boundary condition and has to admit a floating tower's far thinner
69+
shell. It also reports a monopile clamped rigidly at the mudline with
70+
no soil springs as non-conservative (INFO) and an implausible embedment
71+
ratio `L / D` (WARN). New `check_solved_frequencies` flags a
72+
fixed-bottom tower whose first mode lands outside 0.01-10 Hz, which is
73+
where a compounding scale error shows up when two inputs are wrong in
74+
compensating directions and each passes its own band; it runs
75+
automatically on `Tower.run(check_model=True)`.
76+
- `CheckOptions` gains `diameter_thickness_min` / `_max` and
77+
`embedment_ratio_min` / `_max` for the new bands.
78+
- `read_windio_monopile_tower` gains `clamp_at_mudline`, and its result
79+
carries the two reduced segments so a caller can read the raw tube and
80+
material each was built from.
81+
1182
### Fixed
1283

1384
- **The dense symmetric eigensolver could return confidently wrong low
@@ -103,75 +174,6 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
103174
the worsening counts) and `residual_retry_max_ndof` (the size above
104175
which the retry is not attempted at all).
105176

106-
## [1.18.0] — 2026-08-12
107-
108-
### Added
109-
110-
- **Discrete point masses at any station (#35).**
111-
`Tower.add_point_mass(height, mass)` attaches a lumped mass anywhere on
112-
the beam, filling the gap between `outfitting_factor` (smeared over the
113-
whole tower) and `tip_mass` (a single lump at the top) — a flange, an
114-
internal platform, a transformer, a boat-landing. The lump is assembled
115-
through the element shape functions at its exact station, so it does
116-
not have to land on a mesh node and the answer does not move if the
117-
mesh does. Validated against the closed-form cantilever-with-lump
118-
frequency. Its own rotary inertia about its centre is not modelled;
119-
use `tip_mass` where that term matters.
120-
- **Self-weight geometric softening (#134).**
121-
`Tower.run(gravity=True)` (or `gravity=9.80665`) puts the weight of the
122-
tower, the RNA and any point masses into the column as an axial load,
123-
which lowers the bending frequencies — typically around 2 % on the 1st
124-
fore-aft mode of a large machine, and usually the single largest term
125-
when reconciling against a tool that models gravity by default. **Off
126-
by default**, so every existing result is unchanged and the validated
127-
reference cases stay pinned to the BModes-equivalent behaviour. The
128-
geometric stiffness is anchored to two published buckling loads with
129-
different load distributions, Euler tip-load and Greenhill self-weight,
130-
both to 0.2 %. Refused for a free-base floating model, where buoyancy
131-
would have to be netted against the weight, and for the pinned-free
132-
cable BC.
133-
- **Distributed Winkler soil springs on the monopile path (#118).**
134-
`MudlineFoundation.distributed_springs()` turns the soil the lumped
135-
mudline springs were built from into a spring rate along the embedded
136-
pile, `k = D_P E_SO (z / L_P)^n` with the Shadlou and Bhattacharya
137-
inhomogeneity exponents. `Tower.attach_mudline_foundation(foundation,
138-
distributed=True)` lays it into `distr_k`, and
139-
`Tower.from_windio_with_monopile(..., soil_distributed=True)` keeps the
140-
embedded pile in the beam so it deflects against the soil over its real
141-
length rather than being condensed onto a base spring. Cross-validated
142-
against the lumped tier, which is the exact static condensation of the
143-
same beam and bed: the two agree to 0.4 %, the residual being the
144-
embedded pile's own inertia the condensed form drops.
145-
- **`n_nodes` on the deck and BMI readers (#58).** `Tower` and
146-
`RotatingBlade` gain a `refine_mesh(n_nodes)` method and an `n_nodes`
147-
keyword on every deck constructor — `Tower(...)`, `from_bmi`,
148-
`from_elastodyn`, `from_elastodyn_with_subdyn`,
149-
`from_elastodyn_with_mooring`, `RotatingBlade(...)` and its
150-
`from_elastodyn`. The geometry constructors already had it, so the
151-
keyword is now uniform across the whole surface. It stays opt-in
152-
because re-gridding a deck re-samples an **already tabulated** property
153-
table rather than recomputing exact tube properties: a `UserWarning`
154-
names any deliberate property step the new mesh misses, and a deck with
155-
tension-wire supports is refused outright, since those attach to node
156-
numbers that would silently move.
157-
- **Domain-aware validation for the civil-structural and geotechnical
158-
disciplines (#102).** `check_model` gains a fixed-bottom `D / t` band —
159-
the support-type-aware tightening of the deliberately wide band
160-
`tubular_section_props` applies at construction, which cannot know the
161-
boundary condition and has to admit a floating tower's far thinner
162-
shell. It also reports a monopile clamped rigidly at the mudline with
163-
no soil springs as non-conservative (INFO) and an implausible embedment
164-
ratio `L / D` (WARN). New `check_solved_frequencies` flags a
165-
fixed-bottom tower whose first mode lands outside 0.01-10 Hz, which is
166-
where a compounding scale error shows up when two inputs are wrong in
167-
compensating directions and each passes its own band; it runs
168-
automatically on `Tower.run(check_model=True)`.
169-
- `CheckOptions` gains `diameter_thickness_min` / `_max` and
170-
`embedment_ratio_min` / `_max` for the new bands.
171-
- `read_windio_monopile_tower` gains `clamp_at_mudline`, and its result
172-
carries the two reduced segments so a caller can read the raw tube and
173-
material each was built from.
174-
175177
## [1.17.0] — 2026-07-10
176178

177179
### Added

‎CITATION.cff‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ authors:
2323
affiliation: "Marine Structural Mechanics and Integrity Lab (SMI Lab), Inha University"
2424
orcid: "https://orcid.org/0000-0003-1047-2119"
2525
version: 1.18.0
26-
date-released: "2026-08-12"
26+
date-released: "2026-08-13"
2727
license: Apache-2.0
2828
repository-code: "https://github.com/SMI-Lab-Inha/pyBModes"
2929
url: "https://github.com/SMI-Lab-Inha/pyBModes"

0 commit comments

Comments
 (0)