• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

WISDEM / WEIS / 17959868633

23 Sep 2025 09:43PM UTC coverage: 58.153% (-0.5%) from 58.657%
17959868633

push

github

web-flow
Support for WindIO 2.0 and WISDEM 4.0 (#430)

* beginning migration to windiov2

* can now run through at least one example

* more examples running

* fixing more tests and examples

* testing improvements

* more test fixes

* trying with wisdem windio2

* fixing command option

* trying less restrictive model options writing

* making sure to test py313

* some progress, but have to sync on raft changes too

* fix section_offset_y and section_offset_x in visualizer

* gha update

* some more viz app progress

* Joints have names, openfast only

* Fix Ca_coarse definition

* fixed unit tests

* consistency in 15mw files, enabling unit tests

* wisdem integration and examples debugging progress

* testing improvements

* setting truth values

* trap all zeros in mode shapes

* Make merit figure checks lower case

* remove conflicting schema for merit figure

* trying again with kestrel-generated truth archive

* fix rectangular by pulling from windio branch directly

* redo tagging

* typo in url

* Try m2-pkg-config in windows

* changing to strip theory so hams does not choke on the size of the mesh

* Revert into to RAFT viz test

* Install bs4 in conda

* Sync tower design geometry/modeling with regular IEA-15 inputs

* Sync TMD example with vanilla Volturnus geometry/modeling

* Activate test mode for overrides example

* make sure ontology is updated in both weis and wisdem before being written out

* Fix tiny typo

* Reduce SeaState nodes to reduce memory usage

---------

Co-authored-by: Garrett Barter <garrett.barter@nrel.gov>
Co-authored-by: ptrbortolotti <ptrbortolotti@gmail.com>

681 of 775 new or added lines in 18 files covered. (87.87%)

126 existing lines in 8 files now uncovered.

7949 of 13669 relevant lines covered (58.15%)

0.58 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

62.5
/weis/glue_code/gc_ROSCOInputs.py
1
def assign_ROSCO_values(wt_opt, modeling_options, opt_options):
1✔
2

3
    rosco_init_options = modeling_options["ROSCO"]
1✔
4

5
    # Pitch regulation
6
    wt_opt["tune_rosco_ivc.omega_pc"]      = rosco_init_options["omega_pc"]
1✔
7
    wt_opt["tune_rosco_ivc.zeta_pc"]       = rosco_init_options["zeta_pc"]
1✔
8
    # if not (len(rosco_init_options["omega_pc"]) == \
9
    #     len(rosco_init_options["zeta_pc"]) == \
10
    #     len(rosco_init_options["U_pc"])):
11
    #     raise Exception("omega_pc, zeta_pc, and U_pc must have the same number of elements in the modeling options")
12

13
    # Torque control
14
    wt_opt["tune_rosco_ivc.omega_vs"]      = rosco_init_options["omega_vs"]
1✔
15
    wt_opt["tune_rosco_ivc.zeta_vs"]       = rosco_init_options["zeta_vs"]
1✔
16

17
    # Flap control params
18
    if rosco_init_options["Flp_Mode"] > 0:
1✔
19
        try:
×
NEW
20
            wt_opt["tune_rosco_ivc.flp_kp_norm"]      = rosco_init_options["flp_kp_norm"]
×
NEW
21
            wt_opt["tune_rosco_ivc.flp_tau"]       = rosco_init_options["flp_tau"]
×
22
        except:
×
NEW
23
            raise Exception("If Flp_Mode > 0, you must set flp_kp_norm, flp_tau in the modeling options")
×
24

25
    # IPC
26
    if rosco_init_options["IPC_ControlMode"]:
1✔
NEW
27
        wt_opt["tune_rosco_ivc.IPC_Kp1p"] = rosco_init_options["IPC_Kp1p"]
×
NEW
28
        wt_opt["tune_rosco_ivc.IPC_Ki1p"] = rosco_init_options["IPC_Ki1p"]
×
29

30
    # Robust controller tuning
31
    if opt_options["design_variables"]["control"]["servo"]["pitch_control"]["stability_margin"]["flag"]:
1✔
NEW
32
        wt_opt["tune_rosco_ivc.stability_margin"] = rosco_init_options["linmodel_tuning"]["stability_margin"]
×
NEW
33
        wt_opt["tune_rosco_ivc.omega_pc_max"] = rosco_init_options["linmodel_tuning"]["omega_pc"]["max"]
×
34
    # other optional parameters
35
    optional_params = [
1✔
36
         'max_pitch',
37
         'min_pitch',
38
         'vs_minspd',
39
         'ss_vsgain',
40
         'ss_pcgain',
41
         'ps_percent',
42
    ]
43
    for param in optional_params:
1✔
44
        if param in rosco_init_options:
1✔
45
            wt_opt[f'tune_rosco_ivc.{param}'] = rosco_init_options[param]
1✔
46
    
47
    if rosco_init_options["Fl_Mode"]:
1✔
48
        try:
1✔
49
            # wt_opt["tune_rosco_ivc.twr_freq"]      = rosco_init_options["twr_freq"]
50
            wt_opt["tune_rosco_ivc.ptfm_freq"]     = rosco_init_options["ptfm_freq"]
1✔
51
            if "Kp_float" in rosco_init_options:
1✔
52
                wt_opt["tune_rosco_ivc.Kp_float"]      = rosco_init_options["Kp_float"]
1✔
53
        except:
×
NEW
54
            raise Exception("If Fl_Mode > 0, you must set twr_freq and ptfm_freq in modeling options")
×
55

56
    # Check for proper Flp_Mode, print warning
57
    #if modeling_options["WISDEM"]["RotorSE"]["n_tab"] > 1 and rosco_init_options["Flp_Mode"] == 0:
58
    #        raise Exception("A distributed aerodynamic control device is specified in the geometry yaml, but Flp_Mode is zero in the modeling options.")
59
    if rosco_init_options["Flp_Mode"] > 0:
1✔
NEW
60
        raise Exception("Flp_Mode is non zero in the modeling options, but no distributed aerodynamic control device is allowed in the geometry yaml. anymore")
×
61

62
    return wt_opt
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc