Skip to main content

Onshore and offshore wind layout generation.

Reason this release was yanked:

reserving of name space

Project description

OOWL

Onshore and Offshore Wind Layouts (OOWL) generates diverse, exact-count wind-farm layouts from composable geometry and placement methods.

The Python package is currently imported as oowl.

import oowl
from oowl import boundaries as B
from oowl import layouts as L

boundary = B.Rectangle(9000, 5000).with_channels(
    n_channels=2, width=500, seed=3
)
farm = oowl.generate_farm(
    boundary,
    L.GridLayout(n_turbines=92, lattice_angle=60, seed=4),
)
farm.plot()

Model

The public API has three independent layers:

  • boundaries define the allowed polygonal farm area. A MultiPolygon remains one logical farm; BoundaryCluster explicitly represents multiple farms.
  • strings define optional ordered line guides. Breaks and meanders compose as non-mutating geometry modifiers.
  • layouts place an exact turbine count. Grids occupy selected intersections of an aligned parallelogram grid, circular layouts select from boundary- clipped concentric rings, contour layouts follow nested inward copies of the farm boundary and retain a central point by default, Poisson layouts provide blue-noise patterns, and string farms distribute turbines along guides.

oowl.generate_farm(...) is the single entry point for ordinary boundaries, multipart farms, clusters, and standalone string layouts.

contours = oowl.generate_farm(
    boundary,
    L.ContourLayout(n_turbines=80, include_center=True),
)

Strings and clusters

from oowl import strings as S

guide = S.Parallel(S.Straight(), n_strings=5, spacing=0.18)
guide = guide.with_meander(roughness=0.03, seed=2)

string_farm = oowl.generate_farm(
    B.Circle(3000),
    L.StringLayout(60, strings=guide),
)

cluster = B.BoundaryCluster.from_components(boundary)
mixed = oowl.generate_farm(
    cluster,
    L.MixedLayout(
        n_turbines=92,
        layouts=[L.GridLayout(), L.StringLayout(strings=S.Straight())],
        seed=8,
    ),
)

Units and windIO

Realized boundary and turbine coordinates are interpreted as metres. String guide lengths and spacing are relative shape parameters when fitted to a boundary; standalone StringLayout.spacing is dimensional.

Farm.positions is an ordered (N, 2) array that maps directly to windIO's coordinates.x and coordinates.y. Cluster provenance stores contiguous farm slices so a future adapter can emit windIO's array of wind-farm objects. The package does not currently depend on windIO or model turbines, substations, or electrical collection arrays.

Randomness and provenance

Explicit seeds reproduce a farm. An unseeded generation call receives fresh entropy and records the resolved seed in Farm.provenance, so it can be replayed later:

farm = oowl.generate_farm(boundary, L.GridLayout(92))
replay = oowl.generate_farm(
    boundary,
    L.GridLayout(92),
    seed=farm.provenance["seed"],
)

Random boundaries and guides resolve their seed when constructed. Reusing one such object therefore reuses the same realized geometry, while constructing a new unseeded object produces a new geometry.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oowl-0.0.1.tar.gz (40.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oowl-0.0.1-py3-none-any.whl (54.0 kB view details)

Uploaded Python 3

File details

Details for the file oowl-0.0.1.tar.gz.

File metadata

  • Download URL: oowl-0.0.1.tar.gz
  • Upload date:
  • Size: 40.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for oowl-0.0.1.tar.gz
Algorithm Hash digest
SHA256 0b0826923d0501ecb67d4dc86ad9410c01c7d657947c11ee829534ad24f6fabb
MD5 d99ed760943b8a8684af8bcfaaaf1038
BLAKE2b-256 d456a7b6fbc79036cf65c24efc51c93a9f644888969092f626407d110bdc2604

See more details on using hashes here.

File details

Details for the file oowl-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: oowl-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 54.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for oowl-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3859b263885fc87fcf1079f63399c4d2bc7b66b7c27fda5f8f3f91e2f2a5be4a
MD5 380076e827c98f22ab02379abc928d3e
BLAKE2b-256 a3f4dbfed89fd112b68f8aaebaa8340537890f4aaa1f2c7fdb67c032b735c672

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page