Skip to content
Merged
Show file tree
Hide file tree
Changes from 47 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
b84bf0d
fix typos in installation instructions (#152)
jaredthomas68 Oct 24, 2025
1e9c533
Multi-objective refactor (#153)
cfrontin Oct 28, 2025
0315328
Add a simple viewshed component (#156)
cfrontin Nov 3, 2025
da94d6d
Remove zero velocity resource for FLORIS (#160)
cfrontin Dec 2, 2025
816d3c0
Create a new automated stdout/stderr redirection system (#161)
cfrontin Dec 15, 2025
df0ef37
Bugfix/optiwindnet jitter overlapping (#163)
cfrontin Dec 17, 2025
aecfed6
WISDEM NSGA2 incorporation (#158)
cfrontin Jan 6, 2026
79cb5ee
Feature/goodybag (#165)
cfrontin Jan 6, 2026
7682664
fix logomaker (#166)
cfrontin Jan 8, 2026
0355db7
WISDEM update and configurations (#172)
cfrontin Jan 16, 2026
c9690f3
Add domain exclusion zones via windIO (#167)
cfrontin Jan 20, 2026
031589d
Black reformat update to 2026 stable format (#173)
cfrontin Jan 20, 2026
52a7ce8
Eagle density function for eco-constrained design setups (#168)
cfrontin Jan 21, 2026
5e2c43e
update org name (#170)
ptrbortolotti Jan 21, 2026
f8ccba1
Add some helpers for "house style" plots (#174)
cfrontin Feb 3, 2026
db417dd
Merge branch 'main' of github.com:WISDEM/Ard into develop
cfrontin Feb 3, 2026
5aace3b
Release/develop (#177)
jaredthomas68 Feb 6, 2026
3dcb186
Merge branch 'develop' of github.com:WISDEM/Ard into develop
cfrontin Feb 6, 2026
93d5c0b
Develop backmerge (#178)
cfrontin Feb 6, 2026
6257dd7
Update ard/utils/geometry.py
jaredthomas68 Feb 6, 2026
9171ee7
Update test/ard/unit/utils/test_geometry.py
jaredthomas68 Feb 6, 2026
7666e2c
Update docs/testing.md
jaredthomas68 Feb 6, 2026
a1c57ef
correct connection x->y is now x->x
jaredthomas68 Feb 6, 2026
1b60ab1
Merge remote-tracking branch 'origin/develop' into develop
jaredthomas68 Feb 6, 2026
8a1226d
run black
jaredthomas68 Feb 6, 2026
11f6977
Update ard/viz/house_style.py
jaredthomas68 Feb 6, 2026
fa2b610
correct turbine connections and remove unused gplot import
jaredthomas68 Feb 6, 2026
c26a008
run black
jaredthomas68 Feb 6, 2026
b33fc4a
Merge branch 'NLRWindSystems:develop' into develop
cfrontin Feb 6, 2026
766675a
Merge branch 'main' into develop
cfrontin Feb 6, 2026
581041f
Merge branch 'NLRWindSystems:develop' into develop
cfrontin Feb 6, 2026
a004f89
Feature/main hotfixes (#184)
cfrontin Mar 27, 2026
dbc48ca
Merge branch 'develop' of github.com:WISDEM/Ard into develop
cfrontin Mar 27, 2026
8f52b21
Migrate away from optiwindnet's EW_presolver deprecated heuristic (#185)
mdealencar Jul 27, 2026
1da6cfc
update to work with WISDEM 4.2.6
jaredthomas68 Jul 28, 2026
d33bb75
Merge branch 'develop' of github.com:WISDEM/Ard into develop
cfrontin Jul 28, 2026
93aa090
update to work with WISDEM 4.2.6 (#186)
jaredthomas68 Jul 28, 2026
2dae0bd
Merge remote-tracking branch 'origin/develop' into develop
jaredthomas68 Jul 28, 2026
5661f16
backmerge from main into develop and resolve conflicts
jaredthomas68 Jul 28, 2026
8dfb264
prep for beta.5
cfrontin Jul 28, 2026
1e577d5
Merge branch 'develop' of github.com:WISDEM/Ard into develop
cfrontin Jul 28, 2026
8022bc0
backpin optiwindnet and wisdem (#189)
cfrontin Oct 17, 2026
79bdf1b
WindIO changed shear specification and python 11 compatibility (#183)
jaredthomas68 Oct 19, 2026
8de79a6
Adapt to optiwindnet 0.3.2 network constraints API (#188)
mdealencar Oct 19, 2026
02f5732
rebuild the curtailment tools for the current state of develop (#190)
cfrontin Oct 22, 2026
6d1d35b
Merge branch 'main' into rc-beta.6
cfrontin Oct 22, 2026
ef12936
Merge branch 'develop' of github.com:WISDEM/Ard into develop
cfrontin Oct 22, 2026
b81ab83
Add conditional turbine output retrieval
cfrontin Oct 22, 2026
e99e695
Enhance input shape validation for x1 array
cfrontin Oct 22, 2026
234cb2b
Enable turbine turbulence grid in setup method
cfrontin Oct 22, 2026
94446ad
Make mooring packing test imports explicit (#192)
Copilot Oct 22, 2026
1260d10
Map unlimited FLORIS setpoints to full surrogate demand (#194)
Copilot Oct 22, 2026
07183e6
Align FLORIS predictions with nonzero wind-rose bins (#196)
Copilot Oct 22, 2026
cca523a
Bump version to 0.1.0-beta6 and update urls
cfrontin Oct 23, 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
9 changes: 0 additions & 9 deletions ard/__init__.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,4 @@
from pathlib import Path

from . import collection
from . import layout
from . import offshore
from . import wind_query
from . import utils
from . import viz

from .viz import house_style

BASE_DIR = Path(__file__).parent.absolute()
Comment thread
cfrontin marked this conversation as resolved.
Resolved
ASSET_DIR = BASE_DIR / "api" / "default_systems"
12 changes: 3 additions & 9 deletions ard/api/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,6 @@
from openmdao.utils.file_utils import clean_outputs
from ard.utils.io import load_yaml, replace_key_value
from ard.utils.logging import prepend_tabs_to_stdio
from ard.cost.wisdem_wrap import (
LandBOSSE_setup_latents,
ORBIT_setup_latents,
FinanceSE_setup_latents,
)
import windIO
from ard import ASSET_DIR
from typing import Union
Expand Down Expand Up @@ -163,12 +158,11 @@ def set_up_system_recursive(
prob = None

# Add subsystems directly from the input dictionary
indent = "\t" * _depth
if hasattr(parent_group, "name") and (parent_group.name != ""):
print(
f"{''.join(' ' * 4 * _depth)}Adding {system_name} to {parent_group.name}."
)
print(f"{indent}Adding {system_name} to {parent_group.name}.")
else:
print(f"{''.join(' ' * 4 * _depth)}Adding {system_name}.")
print(f"{indent}Adding {system_name}.")
if "systems" in input_dict: # Recursively add nested subsystems]
if _depth > 0:
group = parent_group.add_subsystem(
Expand Down
52 changes: 40 additions & 12 deletions ard/collection/optiwindnet_wrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import numpy as np

from optiwindnet.mesh import make_planar_embedding
from optiwindnet.interarraylib import L_from_site
from optiwindnet.converting import L_from_site
from optiwindnet.heuristics import constructor
from optiwindnet.MILP import OWNWarmupFailed, solver_factory, ModelOptions
from optiwindnet.types import OWNWarmupFailed
from optiwindnet.constraints import NetworkConstraints
from optiwindnet.MILP import solver_factory
from optiwindnet.MILP._core import _constraints_from_options

from . import templates

Expand Down Expand Up @@ -153,15 +156,41 @@ def initialize(self):
def setup(self):
"""Setup of OM component."""
super().setup()
# network constraints are given either as optiwindnet `NetworkConstraints`
# arguments (`network_constraints`) or as the legacy `model_options`
collection_options = self.modeling_options["collection"]
if "network_constraints" in collection_options:
if "model_options" in collection_options:
raise ValueError(
"give either network_constraints or model_options, not both"
)
constraints = NetworkConstraints(
**collection_options["network_constraints"]
)
else:
# stopgap until optiwindnet v0.4, which drops the legacy options
constraints = _constraints_from_options(
**collection_options.get("model_options", {})
)
self.constraints = constraints

# the heuristic warm-start only applies if the feeder count is free
self.constructor_args = {}
model_options = self.modeling_options["collection"]["model_options"]
if model_options.get("feeder_limit") == "unlimited":
if all(
value is None
for value in (
constraints.feeders,
constraints.max_feeders,
constraints.substation_feeders,
constraints.max_substation_feeders,
)
):
self.constructor_args["straight_feeder_route"] = (
model_options.get("feeder_route") == "straight"
constraints.feeder_route == "straight"
)
if model_options.get("topology") == "branched":
if constraints.topology == "branched":
self.constructor_args["method"] = "rootlust"
elif model_options.get("topology") == "radial":
elif constraints.topology == "radial":
self.constructor_args["method"] = "radial_EW"
else:
self.constructor_args.clear()
Expand Down Expand Up @@ -200,7 +229,6 @@ def compute(

solver = solver_factory(solver_name)

model_options = self.modeling_options["collection"]["model_options"]
# start from previous solution if available, else from heuristic if it fits
if self.S_previous is not None:
S_warm = self.S_previous
Expand All @@ -217,17 +245,17 @@ def compute(
solver.set_problem(
P,
A,
max_turbines_per_string,
ModelOptions(**model_options),
capacity=max_turbines_per_string,
constraints=self.constraints,
warmstart=S_warm,
)
except OWNWarmupFailed:
# the previous solution is no longer feasible
solver.set_problem(
P,
A,
max_turbines_per_string,
ModelOptions(**model_options),
capacity=max_turbines_per_string,
constraints=self.constraints,
)

# do the branch-and-bound MILP search
Expand Down
Loading
Loading