Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
343 commits
Select commit Hold shift + click to select a range
1678781
Outline dlc generator cases
dzalkind Nov 25, 2024
21279d2
Add DLC documentation (1.X)
dzalkind Dec 3, 2024
4ff7158
Add tip clearance channels
dzalkind Dec 3, 2024
d9986c4
Increase WvHiCOff so we can model normal sea states properly
dzalkind Dec 3, 2024
0f39767
Rename case to case_i
dzalkind Dec 3, 2024
c5163a0
DLCDocs: Start documentation for DLC 2.x
Dec 4, 2024
a3a6400
Add fatigue processing input
dzalkind Dec 5, 2024
2b1c32e
Update DLC 1.2 case generation with wind/wave direction, etc.
dzalkind Dec 5, 2024
30a509e
Fix typo
dzalkind Dec 5, 2024
7a82155
Fix AEP DLC and PSFs
dzalkind Dec 11, 2024
6285de0
Merge remote-tracking branch 'origin/DLC_RefactorCaseInputs' into DLC…
dzalkind Dec 11, 2024
3b0e912
Finish ROSCO user DVs
dzalkind Dec 11, 2024
01296fd
Load DISCON inputs from modeling yaml
dzalkind Dec 11, 2024
d658fef
Merge remote-tracking branch 'dz/torque_FF' into generic_control
dzalkind Dec 11, 2024
b7dfc3d
Initial add of OrcaFlex translation scripts/inputs
dzalkind Dec 12, 2024
bb50b7b
Enable any ROSCO DISCON input as DV
dzalkind Dec 17, 2024
8b16395
Enable the running/optimization of DISCON parameters without tune_rosco
dzalkind Dec 19, 2024
ddd6fad
Fix fstring/dict formatting
dzalkind Dec 19, 2024
fba21da
Add more tower translation to OrcaFlex notebook
dzalkind Dec 26, 2024
767b5d4
Set up member-based hydro coefficients
dzalkind Jan 8, 2025
febe6bb
Add new potential model override
dzalkind Jan 8, 2025
fd01fc0
run user-defined blade elastic properties
yqliaohk Feb 5, 2025
e39e263
Let NumSegs be a mod opt, set wtrdepth consistently, moordyn ordering
dzalkind Mar 21, 2025
af1abac
Update BEM_dir when PotFile is provided
dzalkind Mar 21, 2025
aae2169
Add WEIS example for running orcaflex based input
dzalkind Mar 26, 2025
a313920
Merge remote-tracking branch 'origin/develop' into orcaflex_translator
dzalkind Mar 26, 2025
cb0488b
Add back NumSegs input for MoorDyn
dzalkind Mar 26, 2025
848d486
Add member-based Cb
dzalkind Mar 26, 2025
3063765
Point to correct ROSCO yaml
dzalkind Mar 26, 2025
680dadc
Changes default Cb to 1
dzalkind Mar 26, 2025
ebe12df
Merge remote-tracking branch 'nrel/orcaflex_translator' into orcaflex…
yqliaohk Mar 26, 2025
0aba9ff
Merge remote-tracking branch 'nrel/orcaflex_translator' into orcaflex…
yqliaohk Mar 26, 2025
0871b68
Fix numsegs error message
dzalkind Mar 26, 2025
54ac174
Skip member-based hydro coeffs for monopiles
dzalkind Mar 26, 2025
acb8e56
Add blank IEA-15 yaml
dzalkind Mar 28, 2025
b2a5342
Fix potential model override
dzalkind Apr 1, 2025
349f314
Add time period calculations for freedecay DLC
Apr 2, 2025
baf2a32
FTW surrogate model template
yonghoonlee Apr 3, 2025
c54e04b
SGP surrogate model modified for WT application
yonghoonlee Apr 3, 2025
a48d396
Modify get_signalperiods to better identify peaks
Apr 10, 2025
456e1fd
Merge remote-tracking branch 'upstream/develop' into generic_control
dzalkind Apr 14, 2025
397f8e3
Tidy up merge, regen discons
dzalkind Apr 14, 2025
573aff2
Remove hard-coded control DVs
dzalkind Apr 14, 2025
253407d
Fix f-string parsing
dzalkind Apr 15, 2025
fdf4412
Force rosco_tuning dv into single float, for now
dzalkind Apr 15, 2025
0638a4c
Skip twr_freq input scaling
dzalkind Apr 15, 2025
d05eb5a
Support tuning yaml discon arrays
dzalkind Apr 16, 2025
b9062b2
Simplify initial control parameter assignment, dv should have start
dzalkind Apr 16, 2025
5c846ee
Clean up print tools and ontology writing
dzalkind Apr 16, 2025
ba7ee47
Merge remote-tracking branch 'upstream/develop' into generic_control
dzalkind Apr 16, 2025
de22acd
Add back twr_freq input
dzalkind Apr 17, 2025
24e301f
Remove whitespace
dzalkind Apr 17, 2025
83e3e55
Related updates for user-defined blade properties
yqliaohk Apr 24, 2025
6ebccc8
Merge remote-tracking branch 'nrel/orcaflex_translator' into orcaflex…
yqliaohk Apr 24, 2025
5d67e7c
Add force excursion DLC
dzalkind Apr 24, 2025
01c9102
Merge remote-tracking branch 'origin/orcaflex_translator' into orcafl…
dzalkind Apr 24, 2025
f1423e2
Updated dlc driver and example 02 - loads to AeroDyn changes from v4.x
May 7, 2025
2b83b3c
Add startup and shutdown DLCs
May 7, 2025
94b4b70
Modify DLCs to make them more accurate according to IEC standards
May 11, 2025
3af773a
Merge remote-tracking branch 'upstream/develop' into ftw
yonghoonlee May 12, 2025
41d6dee
Place holder for design coupling analysis algorithm
amsunilsunil May 12, 2025
dcfed5b
Fix shutdown dlc to allow for better default values and fix yaw_misal…
May 13, 2025
2f355eb
Merge remote-tracking branch 'upstream/develop' into ftw
yonghoonlee May 15, 2025
607d673
Merge remote-tracking branch 'origin/develop' into orcaflex_translator
dzalkind May 16, 2025
e80ffe7
Fix merge conflicts
dzalkind May 16, 2025
80c3956
Allow RAFT to have user-define potential flow model
dzalkind May 16, 2025
74992f2
Initialize WaterKin
dzalkind May 19, 2025
5318e3a
Add steady, step and ramp DLCs
May 22, 2025
dc2aeb7
Add DLC 10.1 and 10.2 and fix small bugs
May 22, 2025
6449d56
Initialize WaterKin
dzalkind May 22, 2025
da4a128
Merge remote-tracking branch 'origin/develop' into finalizedlc
dzalkind May 22, 2025
c969fb7
Reduce fault times for DLC tests and small bugfix
May 22, 2025
8560f85
Streamline post_processing, dicts don't need to be returned, error prone
dzalkind May 23, 2025
3e5c85d
Add default wind speed to some DLCs
Jun 2, 2025
64c312c
Fix bug with wind file generation
Jun 2, 2025
2624b24
Fix bug introduced in DLC 6.4
Jun 2, 2025
2c834bb
Fix more tests for DLCs
Jun 2, 2025
b021e13
Fix more DLC tests and options for DLC 4.2
Jun 2, 2025
3c28c7f
Fix DLC 4.2 and adjust test timings.
Jun 5, 2025
5d11ea1
Revert FAST_exe addition to dlc_driver tests
Jun 5, 2025
401a9ae
Set default value for PLExp for windtype2
Jun 6, 2025
40140f4
Add descriptions to some DLCs
Jun 7, 2025
1aa9551
Add comments to mooring failure DLCs
Jun 7, 2025
3138f5b
Rename Steady,Ramp and Step DLCs to steady, ramp and step
Jun 7, 2025
2084db9
Fix bug with dlc 2.3
Jun 7, 2025
d392562
Merge DLC changes from PR 396 to orcaflex_translator branch
Jun 11, 2025
8ef892a
Merge remote-tracking branch 'origin/orcaflex_translator' into orcafl…
Jun 11, 2025
819fb31
Add user_bts option to allow for user defined wind
Jun 12, 2025
d161c80
Add user_bts option for more wind types
Jun 12, 2025
060cda1
Add userwind DLC
Jun 12, 2025
89d438c
Merge remote-tracking branch 'upstream/develop' into generic_control
dzalkind Jun 12, 2025
aae2cdb
Merge remote-tracking branch 'origin/orcaflex_translator' into orcafl…
dzalkind Jun 16, 2025
004b9d9
Fix user bts, set wind heading for steady dlc
dzalkind Jun 16, 2025
7677cf0
Fix static load application with new case generator
dzalkind Jun 16, 2025
7cfd296
Set wave_model for each DLC
dzalkind Jun 16, 2025
607254d
Add wind_heading to userwind DLC
dzalkind Jun 16, 2025
d7871c5
Set AxCp to zero for potential_model_override = 3
dzalkind Jun 17, 2025
8eddbcd
Merge remote-tracking branch 'upstream/develop' into ftw
yonghoonlee Jun 19, 2025
b90efda
WEIS wrapper for RAFT DOE for FTW
yonghoonlee Jun 19, 2025
f070472
DOE exceptions and parallel training implemented
yonghoonlee Jun 23, 2025
f19a157
Surrogate outputs specified in analysis_option, More constraints impl…
yonghoonlee Jun 25, 2025
547674e
Extract data from recorded DOE database files
yonghoonlee Jun 26, 2025
62c96ae
constrainted nsga2 working
cfrontin Jul 10, 2025
560b292
remove archive
cfrontin Jul 10, 2025
ebcca33
got the openmdao driver working with constraints
cfrontin Jul 11, 2025
28ad0c6
numba compilation now optimal
cfrontin Jul 11, 2025
8f7cc60
recompile for automatic numba or non-numba implementations
cfrontin Jul 11, 2025
9fd5560
further updates with automatic imports
cfrontin Jul 11, 2025
d6fe66f
Pass rigid bodies to RAFT
dzalkind Jul 15, 2025
d439377
Merge remote-tracking branch 'origin/develop' into orcaflex_translator
dzalkind Jul 15, 2025
06132e8
Merge remote-tracking branch 'dz/fatigue_cases' into orcaflex_translator
dzalkind Jul 15, 2025
cb80e88
added beginnings of unit testing
cfrontin Jul 16, 2025
0137600
actually adding the unit tests...
cfrontin Jul 16, 2025
2e00a52
added crowding distance tests
cfrontin Jul 16, 2025
4856c5c
Finish merge and OF 4.1 support for pot_mod_override = 3
dzalkind Jul 18, 2025
2d2f5ae
Merge remote-tracking branch 'upstream/orcaflex_translator' into gene…
dzalkind Jul 22, 2025
7004ce9
Merge remote-tracking branch 'upstream/orcaflex_translator' into gene…
dzalkind Jul 22, 2025
3f52c57
Merge branch 'nsga2_submodule' into generic_control
cfrontin Jul 22, 2025
b923478
Enable multiple merit figures in WEIS
dzalkind Jul 22, 2025
b917037
Merge remote-tracking branch 'origin/generic_control' into generic_co…
dzalkind Jul 22, 2025
7bc8f0b
updated consensus example
cfrontin Jul 22, 2025
40a5fdc
Clean up error catching on merit figure
dzalkind Jul 22, 2025
9894c79
Merge remote-tracking branch 'origin/generic_control' into generic_co…
dzalkind Jul 22, 2025
b15095c
Enable both user and non-user merit figures for MOO
dzalkind Jul 22, 2025
9851206
Skip super call to set_merit_figure_user, not needed
dzalkind Jul 22, 2025
30a4765
Add dummy user-defined merit figure
dzalkind Jul 22, 2025
c75c0cf
Fix unit binary crossover so no 0s returned
dzalkind Jul 22, 2025
3296df7
Check that design variables stay within bounds
dzalkind Jul 22, 2025
d54d29f
Skip runs if out_of_bounds, shouldn't happen with exception (revert?)
dzalkind Jul 22, 2025
e1a83b7
fix funkiness with twin values
cfrontin Jul 22, 2025
f5a117f
Merge remote-tracking branch 'origin/generic_control' into generic_co…
dzalkind Jul 22, 2025
754b924
Fix last iteration bug
dzalkind Jul 22, 2025
2675778
added two-sided constraints
cfrontin Jul 24, 2025
23b8ad7
Merge branch 'generic_control' of github.com:dzalkind/WEIS into gener…
cfrontin Jul 24, 2025
2057bfa
add init files
cfrontin Jul 24, 2025
1c97ab5
algo update
cfrontin Jul 25, 2025
1bdb177
modify/upgrade ptfmpitch optimization targets to be able to track dif…
cfrontin Jul 25, 2025
077c843
operational triobjective optimization setup
cfrontin Jul 25, 2025
d55f18a
Connect ROSCO peak shaving to RotorSE
dzalkind Jul 25, 2025
637ec66
Merge remote-tracking branch 'origin/generic_control' into generic_co…
dzalkind Jul 25, 2025
bd3ecef
basic plotly
cfrontin Jul 26, 2025
afcb8f7
Merge branch 'generic_control' of github.com:dzalkind/WEIS into gener…
cfrontin Jul 26, 2025
662b0d6
two analysis scripts now
cfrontin Jul 26, 2025
ce47223
configs for meeting
cfrontin Jul 29, 2025
77c5fb0
turn on evolutionary parallelization stuff
cfrontin Jul 29, 2025
f735f67
update the analyses
cfrontin Jul 29, 2025
d4cf24e
Extraction merged into ftw_doe function + doedata skipping logic impl…
yonghoonlee Aug 1, 2025
0a576c6
Merge remote-tracking branch 'upstream/develop' into ftw
yonghoonlee Aug 1, 2025
e622bce
some changes
cfrontin Aug 5, 2025
606189f
init commit for multi objective optimization dashboard
sora-ryu Aug 6, 2025
d14cff4
Merge remote-tracking branch 'upstream/main' into generic_control
dzalkind Aug 6, 2025
ca5f290
Allow only a user defined MF with no WISDEM
dzalkind Aug 6, 2025
5d46cea
Merge remote-tracking branch 'origin/generic_control' into generic_co…
dzalkind Aug 6, 2025
dab82ec
implement data loader
sora-ryu Aug 6, 2025
e43d87b
doedata filename changed for consistency
yonghoonlee Aug 7, 2025
e3432d6
adjust driver output
cfrontin Aug 7, 2025
4bed1f3
filename changed
yonghoonlee Aug 8, 2025
592b619
surrogate model expanded to general methods in addition to SGP
yonghoonlee Aug 8, 2025
15e824a
Split listed items to available MPI cores
yonghoonlee Aug 8, 2025
2ec57d6
Surrogate model class updated to support vector values
yonghoonlee Aug 14, 2025
838902d
return [skip if smt exists] flag
yonghoonlee Aug 14, 2025
bc9cd1d
ftw_doe returns [skip if smt exists] flag
yonghoonlee Aug 14, 2025
55791d3
filename changed
yonghoonlee Aug 14, 2025
ec92e24
kestrel updates
cfrontin Aug 14, 2025
56e82e1
skip surrogate model training flag defined
yonghoonlee Aug 15, 2025
9ed1c5e
surrogate modeling class defined
yonghoonlee Aug 15, 2025
a9bf0e4
typo corrected
yonghoonlee Aug 15, 2025
99fdaf0
surrogate model reading routine implemented
yonghoonlee Aug 15, 2025
3d93653
simple surrogate prediction implemented
yonghoonlee Aug 15, 2025
b92d3ec
some new sandboxes
cfrontin Aug 15, 2025
02962f7
rename
cfrontin Aug 19, 2025
c365dee
render dynamic scatter plot
sora-ryu Aug 20, 2025
f1aba79
link samples with row idx (iteration)
sora-ryu Aug 20, 2025
461f727
Merge remote-tracking branch 'origin/generic_control' into generic_co…
dzalkind Aug 20, 2025
bd28d97
Merge remote-tracking branch 'upstream/main' into generic_control
dzalkind Aug 20, 2025
8f291f2
Merge remote-tracking branch 'sryu/moo-viz' into generic_control
dzalkind Aug 20, 2025
b5c7574
split single script to modules
sora-ryu Aug 26, 2025
5a1dde6
resize label size
sora-ryu Aug 26, 2025
f7269ae
add data table on clicked data
sora-ryu Sep 3, 2025
a18aef6
link samples with highlight
sora-ryu Sep 3, 2025
51f1f58
add clear highlight btn
sora-ryu Sep 3, 2025
7355730
improve stylings for plot and table
sora-ryu Sep 4, 2025
b926e82
delete old single compact script
sora-ryu Sep 4, 2025
5b9e620
add discussion debrief
sora-ryu Sep 4, 2025
143f3b6
add update
cfrontin Sep 5, 2025
593d74f
Merge branch 'generic_control' of github.com:dzalkind/WEIS into gener…
cfrontin Sep 5, 2025
9dd226f
Merge remote-tracking branch 'origin/generic_control' into generic_co…
dzalkind Sep 5, 2025
82a67fc
Merge remote-tracking branch 'uiuc/ftw' into generic_control
dzalkind Sep 5, 2025
ed40790
Skip DOE and go right to training SM
dzalkind Sep 5, 2025
a1b6056
Add placeholder for FTW documentation
dzalkind Sep 5, 2025
eba22d8
add subchannels for array-type columns
sora-ryu Sep 9, 2025
27852b4
fix channel selection error
sora-ryu Sep 10, 2025
ab9ce66
add toggle buttons on array channels
sora-ryu Sep 18, 2025
0d4b7b9
add pareto fronts
sora-ryu Sep 18, 2025
b48cda2
accurate pareto fronts calculation
sora-ryu Sep 18, 2025
1e5068c
fix small variance issues on SPLOM
sora-ryu Sep 18, 2025
2c59b99
make array channels simple + add constraint bounds comparison
sora-ryu Sep 18, 2025
a23ab08
add action items after discussion
sora-ryu Sep 18, 2025
bb2cede
minor styling edit to make visible
sora-ryu Sep 30, 2025
bcd84c3
add action item
sora-ryu Oct 1, 2025
4f606c6
Merge remote-tracking branch 'upstream/develop' into generic_control
dzalkind Oct 31, 2025
3cbaf6e
remove nsga2_weis directory (replaced into WISDEM)
cfrontin Oct 31, 2025
e291ecf
Update update_rosco_options for DISCON params
dzalkind Oct 31, 2025
731eb36
Clean up merge, tuning example seems to work
dzalkind Oct 31, 2025
aa0bf96
Merge branch 'develop' into generic_control
dzalkind Dec 1, 2025
9666023
Clean up merge
dzalkind Dec 1, 2025
b69029d
Merge remote-tracking branch 'dz/generic_control' into generic_control
dzalkind Dec 1, 2025
a4e5eb3
Merge remote-tracking branch 'origin/develop' into moo-viz
sora-ryu Dec 1, 2025
1df73a1
make ui layout adjustable to browser size
sora-ryu Dec 2, 2025
f8d8f65
color data table by categories (plot is unavailable)
sora-ryu Dec 2, 2025
12f6769
add objective options - min vs max
sora-ryu Dec 3, 2025
a49e387
button to show/hide diagonal lines
sora-ryu Dec 3, 2025
0af0f20
save dashboard as interactive html
sora-ryu Dec 3, 2025
449679b
clean codes
sora-ryu Dec 3, 2025
03e860f
add moo dashboard docs
sora-ryu Dec 3, 2025
62d8e9c
Merge branch 'generic_control' of github.com:dzalkind/WEIS into gener…
cfrontin Dec 3, 2025
dd4586c
fix issue when less than 2 channels selected
sora-ryu Dec 19, 2025
f4ebff9
adjust plot size, font size of html
sora-ryu Dec 19, 2025
c75cab0
debug export functions
sora-ryu Dec 19, 2025
df67959
fix table update function on html
sora-ryu Dec 20, 2025
d13656f
add videos of moo dashboard on docs
sora-ryu Dec 20, 2025
72804a5
remove comments
sora-ryu Dec 20, 2025
568ed5a
Merge branch 'generic_control' into moo-viz
dzalkind Jan 9, 2026
01200a1
Merge remote-tracking branch 'upstream/develop' into generic_control
dzalkind Jan 9, 2026
432a6d8
Clean up merge
dzalkind Jan 9, 2026
87d7bb9
Remove pre-processing notebooks added in other PRs
dzalkind Jan 9, 2026
93ecd96
Fix another float cast
dzalkind Jan 22, 2026
9a2d3b3
Save each timeseries using the same name as the OpenFAST inputs/outputs
dzalkind Feb 13, 2026
a29e5dc
Updates for windio 2.1
dzalkind Feb 19, 2026
6300958
Install WISDEM develop for testing [revert later]
dzalkind Feb 24, 2026
91d0d15
Remove wisdem [revert]
dzalkind Feb 24, 2026
2cc3375
Install RAFT via conda
dzalkind Feb 24, 2026
31fab57
Fix typo on installation [revert]
dzalkind Feb 24, 2026
8a979ff
Pull latest windIO inputs from WISDEM
dzalkind Feb 27, 2026
5deb50d
Update model creation geometry inputs
dzalkind Feb 27, 2026
6e7e288
Switch to using assembly cut-in, cut-out
dzalkind Feb 27, 2026
4fc0fe5
Remove unused IEA-22 geometry input
dzalkind Feb 27, 2026
9d01c70
Update non-wisdem geometry inputs
dzalkind Feb 27, 2026
7221cbf
Merge branch 'windio2p1' into ts_names
dzalkind Feb 27, 2026
ef00994
Point to new timeseries name
dzalkind Feb 28, 2026
7be6257
Remove gdown from test packages
dzalkind Feb 28, 2026
db475f1
Bring TMDs back
dzalkind Mar 2, 2026
bfbcd2a
Bring TMDs back
dzalkind Mar 2, 2026
deedce7
Merge branch 'windio2p1' into ts_names
dzalkind Mar 2, 2026
1adb3b5
Assign a max_torque_rate if not defined in the yaml
dzalkind Mar 3, 2026
a90e033
Assign a max_torque_rate if not defined in the yaml
dzalkind Mar 3, 2026
a48bb3c
Merge branch 'windio2p1' into ts_names
dzalkind Mar 3, 2026
cf20bf2
Disable special branch of WISDEM in CI
dzalkind Mar 10, 2026
7011115
Merge branch 'windio2p1' into ts_names
dzalkind Mar 10, 2026
7148f97
Merge remote-tracking branch 'origin/ts_names' into generic_control
dzalkind Mar 10, 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
6 changes: 3 additions & 3 deletions .github/workflows/CI_WEIS.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ jobs:

# - name: feature branches of other codes
# run: |
# conda remove --force openraft
# pip install https://github.com/yqliaohk/RAFT/archive/meshing_update.zip
# conda remove --force wisdem
# pip install https://github.com/NLRWindSystems/WISDEM/archive/develop.zip

# Don't delete after this

Expand All @@ -75,7 +75,7 @@ jobs:

- name: Add test packages
run: |
conda install -y pytest pytest-cov coveralls treon gdown
conda install -y pytest pytest-cov coveralls treon

- name: Show custom environment
run: |
Expand Down
13 changes: 13 additions & 0 deletions docs/ftw_overview.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.. _section-ftw:

====================================
Formulation Toolbox for WEIS (FTW)
====================================


The Formulation Toolbox for WEIS (FTW) provides a set of tools and methodologies for formulating and analyzing design optimizations.


--------------------------
Introduction
--------------------------
288 changes: 288 additions & 0 deletions docs/how_weis_moo_viz_works.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,288 @@
.. _moo_dashboard:


WEIS Multi-Objective Optimization Dashboard
============================================

The MOO Dashboard is an interactive visualization tool for analyzing multi-objective optimization results from WEIS. It provides real-time exploration of design space, Pareto fronts, and trade-offs between competing objectives.

Overview
--------

The dashboard enables users to:

* Visualize high-dimensional optimization results using Scatter Plot Matrix (SPLOM)
* Identify and explore Pareto-optimal solutions
* Analyze relationships between design variables, objectives, and constraints
* Export interactive visualizations for reports and presentations
* Compare individual design iterations with detailed data tables

.. video:: images/viz/MOO/dashboard.mov
:width: 900
:autoplay:

Installation
------------

The MOO Dashboard is included with WEIS. Ensure you have the required dependencies:

.. code-block:: bash

conda activate weis-env
pip install dash plotly pandas numpy pyyaml dash-bootstrap-components

Running the Dashboard
---------------------

Launch the dashboard from the command line:

.. code-block:: bash

conda activate weis-env
cd weis/visualization/moo_dashboard
python main.py

The dashboard will open in your default browser at ``http://localhost:8050``.

User Interface
--------------

The dashboard consists of four main sections:

1. **File Loaders**

* **CSV File**: Load optimization results (design variables, objectives, constraints)
* **YAML File**: Load problem definition (variable categories, optimization goals)


2. **Controls & Variables**

Select which variables to visualize:

* **Objectives** (blue): Quantities to minimize or maximize
* **Constraints** (orange): Feasibility requirements
* **Design Variables** (green): Parameters that can be modified

For each objective, select whether to minimize or maximize using toggle buttons.


3. **Scatter Plot Matrix (SPLOM)**

Interactive matrix showing all pairwise relationships between selected variables:

* **Color scale**: Represents iteration number
* **Red diamonds**: Pareto-optimal solutions (if enabled)
* **Green star**: Currently highlighted point (when clicked)
* **Click** on any point to see detailed values in the data table

Controls:

* ``Show/Hide Pareto Front``: Toggle visualization of optimal solutions
* ``Show/Hide Diagonal``: Toggle diagonal histogram plots
* ``Clear Highlighting``: Remove point selection
* ``Download Dashboard``: Export as standalone interactive HTML


4. **Data Table**

Displays detailed values for the selected iteration.


Input File Formats
------------------

CSV File
~~~~~~~~

The CSV file should contain one row per optimization iteration with columns for:

* Design variables (e.g., ``tune_rosco_ivc.Kp_float``)
* Objectives (e.g., ``aeroelastic.AEP``)
* Constraints (e.g., ``aeroelastic.rotor_overspeed``)

Example:

.. csv-table::
:header: "aeroelastic.AEP", "aeroelastic.DEL_TwrBsMyt", "aeroelastic.rotor_overspeed", "aeroelastic.Max_PtfmPitch", "tune_rosco_ivc.Kp_float", "tune_rosco_ivc.ps_percent"
:widths: 15, 15, 15, 15, 15, 15

"410786235558.229", "87616.5338", "0.0905", "5.0551", "-20.4375", "0.6525"
"421847787601.9160", "101079.1819", "0.0848", "5.2194", "-8.4375", "0.8725"


YAML File
~~~~~~~~~

The YAML file defines the optimization problem structure:

.. code-block:: yaml

design_vars:
- - tune_rosco_ivc.Kp_float
- name: tune_rosco_ivc.Kp_float
upper: 0.0
lower: -30.0
size: 1
val: [-9.937499999999996]
- - tune_rosco_ivc.ps_percent
- name: tune_rosco_ivc.ps_percent
upper: 1.0
lower: 0.6
size: 1
val: [0.8775]
constraints:
- - aeroelastic.rotor_overspeed
- name: aeroelastic.rotor_overspeed
lower: 0.0
upper: 0.2
equals: ''
size: 1
val: [0.1168584634534533]
- - aeroelastic.Max_PtfmPitch
- name: aeroelastic.Max_PtfmPitch
lower: -1e+30
upper: 5.5
equals: ''
size: 1
val: [5.111509323120117]
objectives:
- - aeroelastic.AEP
- name: aeroelastic.AEP
size: 1
val: [-4209011.602067122]
- - aeroelastic.DEL_TwrBsMyt
- name: aeroelastic.DEL_TwrBsMyt
size: 1
val: [0.9920550255927588]

Features
--------

Pareto Front Calculation
~~~~~~~~~~~~~~~~~~~~~~~~

The dashboard automatically calculates Pareto-optimal solutions based on:

* Selected objectives and their optimization sense (minimize/maximize)
* Non-dominated sorting algorithm
* Visual distinction with red diamond markers

The Pareto front represents the set of solutions where no objective can be improved without degrading another.

Array Variable Handling
~~~~~~~~~~~~~~~~~~~~~~~

Variables containing arrays (e.g., blade chord distribution) are automatically detected and split into:

* ``variable_min``: Minimum value in the array
* ``variable_max``: Maximum value in the array

This allows visualization of array-valued design variables in the SPLOM.

Interactive HTML Export
~~~~~~~~~~~~~~~~~~~~~~~

The ``Download Dashboard`` button creates a standalone HTML file that saves the current status of the dashboard, allowing you to continue analysis offline. The exported file contains:

* Full interactive SPLOM with all data points
* Current selections and highlighted points
* Click-through functionality for data table updates
* Toggle controls for Pareto front and diagonal visibility
* All optimization data embedded for complete offline access
* No external dependencies or internet connection required

.. video:: images/viz/MOO/export.mov
:width: 900
:autoplay:

Configuration
-------------

Settings can be modified in ``config/settings.py``:

.. code-block:: python

# Server configuration
HOST = '0.0.0.0'
PORT = 8050

# Plot styling
DEFAULT_PLOT_WIDTH = 800
DEFAULT_PLOT_HEIGHT = 800
MARKER_SIZE = 4

# Color schemes
HIGHLIGHT_COLOR = '#00FF41' # Bright green
COLOR_SCALES = {
'objectives': 'primary', # Blue
'constraints': 'warning', # Orange
'design_vars': 'success' # Green
}


Architecture
------------

The dashboard follows a modular architecture:

.. code-block:: text

moo_dashboard/
├── main.py # Entry point
├── app_init.py # Application initialization
├── config/
│ └── settings.py # Configuration constants
├── layouts/
│ ├── layout.py # Main page layout
│ └── components.py # Reusable UI components
├── callbacks/
│ ├── data_loading.py # File upload/loading
│ ├── channel_selection.py # Variable selection
│ └── visualization.py # Plot updates and interactions
└── utils/
├── data_processing.py # Data transformation and Pareto calculation
└── plot_helpers.py # Plotly figure creation


Troubleshooting
---------------

Dashboard won't start
~~~~~~~~~~~~~~~~~~~~~

Check that the port is not already in use:

.. code-block:: bash

lsof -i :8050

Change the port in ``config/settings.py`` if needed.

Data not loading
~~~~~~~~~~~~~~~~

Verify:

* CSV file has proper column headers
* YAML file follows the required structure
* File paths are absolute (not relative)
* Files are accessible with read permissions

Pareto front not showing
~~~~~~~~~~~~~~~~~~~~~~~~

Ensure:

* At least 2 objectives are selected
* Objective senses (min/max) are configured correctly
* CSV data contains valid numeric values for objectives

Click events not working
~~~~~~~~~~~~~~~~~~~~~~~~

This is a known issue with some browser configurations. Try:

* Using a different browser (Chrome/Firefox recommended)
* Clearing browser cache
* Disabling browser extensions that might interfere with JavaScript

2 changes: 1 addition & 1 deletion docs/how_weis_viz_works.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.. _weis_viz_app:


WEIS Visualization APP
WEIS I/O Visualization APP
=======================

This application provides a web-based graphical user interface to visualize input/output from WEIS.
Expand Down
Binary file added docs/images/viz/MOO/dashboard.mov
Binary file not shown.
Binary file added docs/images/viz/MOO/export.mov
Binary file not shown.
10 changes: 9 additions & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,22 @@ WEIS Outputs

weis_outputs

WEIS Visualization Application
WEIS I/O Visualization Application
===============================

.. toctree::
:maxdepth: 2

how_weis_viz_works

WEIS Multi-Objective Optimization Visualization Application
================================================

.. toctree::
:maxdepth: 2

how_weis_moo_viz_works

Developer Documentation
=========================

Expand Down
4 changes: 2 additions & 2 deletions environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ dependencies:
- openfast>=4.1.0
- openfast-io>=4.1.0
- pyopenfast>=4.1.0
# - openraft>=2.0.2
- openraft>=2.0.3
- osqp
- pcrunch>=2.1.5
- pip
Expand All @@ -33,7 +33,7 @@ dependencies:
- orbit-nrel
- smt
- windIO>=2.0.1
- git+https://github.com/NLRWindSystems/RAFT.git@dev
# - git+https://github.com/NLRWindSystems/RAFT.git@dev
# Needs to be done outside of environment file:
# - m2w64-toolchain # [win]
# - libpython # [win]
Expand Down
1 change: 1 addition & 0 deletions examples/00_setup/OpenFAST_models/update_weis_discons.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@

# Make discons
update_discons(discon_map)

Loading
Loading