Skip to content
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
4ae2687
torque 2026 loss factors and pie charts
ptrbortolotti Dec 29, 2025
fc6647a
wip [skip ci]
ptrbortolotti Dec 29, 2025
a05a348
more wip, not yet done [skip ci]
ptrbortolotti Dec 29, 2025
de356f8
15mw is running [skip ci]
ptrbortolotti Dec 29, 2025
371cdd5
updates to following examples
ptrbortolotti Dec 29, 2025
c1fa7c6
fix examples 7 and 8 [skip ci]
ptrbortolotti Dec 29, 2025
3d4475a
progress but several tests still not passing [skip ci]
ptrbortolotti Dec 29, 2025
019c600
progress [skip ci]
ptrbortolotti Dec 29, 2025
2f6fa78
fix 06 tests, more to do [skip ci]
ptrbortolotti Dec 30, 2025
89bcac5
may fix tests 1 and 2 [skip ci]
ptrbortolotti Dec 30, 2025
529e030
tests should be passing now
ptrbortolotti Dec 30, 2025
a830153
kick out nrel5mw, not running and not relevant
ptrbortolotti Dec 30, 2025
fadece8
fix a couple white spaces from pre-commit
ptrbortolotti Jan 5, 2026
6dcceff
validate yaml with windIO [skip ci]
ptrbortolotti Jan 5, 2026
fec5005
make progress [skip ci]
ptrbortolotti Jan 5, 2026
3ebb560
fix name rotated beam [skip ci]
ptrbortolotti Jan 5, 2026
a23721c
fix yaml example 6 [skip ci]
ptrbortolotti Jan 5, 2026
0858096
fix box beam coordinates and twist in degrees. start running tests. s…
ptrbortolotti Jan 5, 2026
c5e9ba0
fix a couple of issues
ptrbortolotti Jan 5, 2026
5083b3f
work on example 7 and reg tests 7
ptrbortolotti Jan 5, 2026
6c5c24d
try fixing iea15 and iea22 tests
ptrbortolotti Jan 5, 2026
8deed1d
update refs IEA15-22
ptrbortolotti Jan 5, 2026
86317fc
fix precommit
ptrbortolotti Jan 5, 2026
a799b5f
two tests #7 still failin [skip ci]
ptrbortolotti Jan 6, 2026
4e19418
two tests still failing [skip ci]
ptrbortolotti Jan 6, 2026
7c362f8
Fixed one of the viscoelastic tests, still have an issue with other. …
JustinPorter88 Jan 6, 2026
253af2a
tests might pass now
ptrbortolotti Jan 6, 2026
2b36c17
try again, lower tolerance on stiffness checks
ptrbortolotti Jan 7, 2026
21126a7
Specifying windIO versions more strictly + adding fatal errors.
JustinPorter88 Jan 8, 2026
1b12a71
Merge branch 'windIO2p0p1' of github.com:WISDEM/SONATA into windIO2p0p1
JustinPorter88 Jan 8, 2026
a0ee446
Only doing analytical viscoelastic calcs when appropriate (single mat…
JustinPorter88 Jan 8, 2026
b41f555
work on example 8, where anba4 fails
ptrbortolotti Jan 8, 2026
a36abf2
do not extrapolate and fix double conversion to radians when using c2…
ptrbortolotti Jan 8, 2026
0ea4970
Merge branch 'windIO2p0p1' of https://github.com/WISDEM/SONATA into w…
ptrbortolotti Jan 8, 2026
7f30c40
remove example 5 as it's currently empty
ptrbortolotti Jan 8, 2026
73b5242
fix twist again
ptrbortolotti Jan 8, 2026
a4c4d4c
Removing viscoelastic material props code that was moved out of windio.
JustinPorter88 Jan 8, 2026
4f36f54
Merge branch 'windIO2p0p1' of github.com:WISDEM/SONATA into windIO2p0p1
JustinPorter88 Jan 8, 2026
1dc9b89
update readme
ptrbortolotti Jan 8, 2026
abe4200
update reg values for iea15 and iea22
ptrbortolotti Jan 8, 2026
a1d308c
Merge branch 'windIO2p0p1' of https://github.com/WISDEM/SONATA into w…
ptrbortolotti Jan 8, 2026
690d40f
Changing the custom mesh material number in the example since a mater…
JustinPorter88 Jan 8, 2026
09ab351
fix precommit
ptrbortolotti Jan 8, 2026
56a2cc9
Merge pull request #41 from WISDEM/ex8
ptrbortolotti Jan 8, 2026
757c4d9
add examples 7 and 8 to CI
ptrbortolotti Jan 8, 2026
38a1d05
Merge branch 'windIO2p0p1' of https://github.com/WISDEM/SONATA into w…
ptrbortolotti Jan 8, 2026
4aad377
white spaces
ptrbortolotti Jan 8, 2026
2949e4b
Adding README notes about WindIO support in SONATA.
JustinPorter88 Jan 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/python-package-conda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,11 @@ jobs:
export MPLBACKEND=Agg
python 2_sonata_IEA22.py

- name: Run example 5
run: |
cd examples/5_IEA_5MW
export MPLBACKEND=Agg
python 5_sonata_IEA5.py
# - name: Run example 5
# run: |
# cd examples/5_NREL_5MW
# export MPLBACKEND=Agg
# python 5_sonata_NREL_5MW.py

- name: Run example 6
run: |
Expand Down
6 changes: 3 additions & 3 deletions SONATA/cbm/classCBM.py
Original file line number Diff line number Diff line change
Expand Up @@ -728,7 +728,7 @@ def cbm_run_viscoelastic(self, test_elastic=True, test_tau0=True):

if not (self.materials[MatID].viscoelastic == {}):
time_scale_list += self.materials[MatID]\
.viscoelastic['time_scales_v'].tolist()
.viscoelastic['time_scales_v']

time_scale_list = np.sort(np.unique(time_scale_list)).tolist()

Expand All @@ -743,7 +743,7 @@ def cbm_run_viscoelastic(self, test_elastic=True, test_tau0=True):
mat = self.materials[MatID]

if hasattr(mat, 'viscoelastic') and not (mat.viscoelastic=={}):
found_time_scale = tau in mat.viscoelastic['time_scales_v'].tolist()
found_time_scale = tau in mat.viscoelastic['time_scales_v']
else:
found_time_scale = False

Expand All @@ -758,7 +758,7 @@ def cbm_run_viscoelastic(self, test_elastic=True, test_tau0=True):
else:
# find index of time scale
time_scale_ind = np.argmax(tau
== mat.viscoelastic['time_scales_v'])
== np.array(mat.viscoelastic['time_scales_v']))

if found_time_scale and mat.orth == 0:

Expand Down
20 changes: 1 addition & 19 deletions SONATA/cbm/classCBMConfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@

# Third party modules
import numpy as np
import yaml

# First party modules
from SONATA.classMaterial import find_material, read_materials
from SONATA.classMaterial import find_material
from SONATA.anbax.classANBAXConfig import ANBAXConfig

if __name__ == "__main__":
Expand Down Expand Up @@ -144,20 +143,3 @@ def read_yaml_cbm(self, yml, materials):
if yml.get("trim_mass"):
self.bw = yml.get("trim_mass") #
self.setup["BalanceWeight"] = True


if __name__ == "__main__":

# classic configuration file:
os.chdir("/media/gu32kij/work/TPflumm/SONATA")
# fname = 'jobs/VariSpeed/advanced/sec_config.yml'
fname = "examples/sec_config.yml"
cfg = CBMConfig(fname)

with open("jobs/VariSpeed/UH-60A_adv.yml", "r") as myfile:
inputs = myfile.read()

yml = yaml.load(inputs)
materials = read_materials(yml.get("materials"))
yml = yml.get("components").get("blade").get("2d_fem").get("sections")[0]
wt_cfg = CBMConfig(yml, materials)
34 changes: 4 additions & 30 deletions SONATA/classAirfoil.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import os

# Third party modules
import matplotlib.pyplot as plt
import numpy as np
# PythonOCC Libraries
from OCC.Core.gp import gp_Pnt
Expand Down Expand Up @@ -129,7 +128,7 @@ def gen_OCCtopo(self, angular_deflection = 30 ):
self.wire = build_wire_from_BSplineLst(self.BSplineLst, twoD=False)
return self.wire

def trsf_to_blfr(self, loc, pa_loc, chord, twist):
def trsf_to_blfr(self, loc, soy, chord, twist):
"""
transforms the nondim. airfoil to the blade reference frame location
and pitch-axis information, scales it with chord information and rotates
Expand All @@ -139,8 +138,8 @@ def trsf_to_blfr(self, loc, pa_loc, chord, twist):
----------
loc : array
[x,y,z] position in blade reference coordinates
pa_loc : float
nondim. pitch axis location
soy : float
dim. pitch axis location
chord : float
chordlength
twist : float
Expand All @@ -151,7 +150,7 @@ def trsf_to_blfr(self, loc, pa_loc, chord, twist):
wire : TopoDS_Wire

"""
Trsf = trsf_af_to_blfr(loc, pa_loc, chord, twist)
Trsf = trsf_af_to_blfr(loc, soy, chord, twist)
if self.wire is None or self.BSplineLst is None:
self.gen_OCCtopo()

Expand Down Expand Up @@ -237,28 +236,3 @@ def transformed(self, airfoil2, k=0.5):
trf_af.coordinates = self.interpolate_shapes(self.coordinates, airfoil2.coordinates, k)

return trf_af



if __name__ == "__main__":
plt.close("all")
import yaml

with open("jobs/VariSpeed/UH-60A_adv.yml", "r") as f:
data = yaml.load(f.read())

airfoils = [Airfoil(af) for af in data["airfoils"]]

for af in airfoils:
af.gen_OCCtopo()

af1 = airfoils[0]
af2 = airfoils[1]
res = af1.transformed(af2, 1.0)
res.gen_OCCtopo()

with open("data1.yml", "w") as outfile:
yaml.dump(af1.write_yaml_airfoil(), outfile)

with open("data2.yml", "w") as outfile:
yaml.dump(af2.write_yaml_airfoil(), outfile)
Loading
Loading