Skip to content

Flow model chain#3

Draft
bjarketol wants to merge 6 commits into
EUFLOW:mainfrom
bjarketol:flow-model-chain
Draft

Flow model chain#3
bjarketol wants to merge 6 commits into
EUFLOW:mainfrom
bjarketol:flow-model-chain

Conversation

@bjarketol

Copy link
Copy Markdown

Modifications made for the FLOW validation model chain. Persisting branch with stand-alone PRs cherry-picked from here.

bjarketol and others added 6 commits June 4, 2026 14:30
Follow-up corrections to the PyWake-submodel schema expansion (6d58bb4),
scoped to not break the foxes windIO reader.

- rotor_averaging.name: restyle to engine-neutral lowercase names and add
  the native overlap models gaussian_overlap (Niayifar/TurbOPark) and
  area_overlap (Jensen/PARK2); keep the old capitalized names as deprecated
  aliases. Note the gaussian_overlap/area_overlap vs Weighted-superposition
  incompatibility (Weighted needs a node model, e.g. grid). foxes ignores
  this field (uses background_averaging/wake_averaging), so this is safe.
- TI reference flag: remove the redundant top-level use_effective_ti and
  standardize on the nested wake_expansion_coefficient.free_stream_ti, which
  foxes already reads; document its polarity.
- use_effective_ws: fix misleading title (True = local/effective, not freestream).
- turbulence_model: add c0 (foxes IEC reader reads c0/c1/c2).
- ws_superposition: add Vector (foxes capability).
- example: flow_example_timeseries rotor_averaging name GQGrid -> gq_grid.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Assert multiple_types.yaml yields a multi-entry turbine_types map with a
  per-position index and distinct hub heights
- Assert a wind_turbine-dimensioned resource round-trips through
  dict_to_netcdf with the per-turbine dimension and height preserved

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- load_yaml/_get_YAML/_ds2yml gain an nc_data option ("list" default,
  "array" keeps numpy arrays), avoiding the ~4-28x memory blow-up of turning
  large included netCDF resources into nested Python lists
- make _fmt ndarray-safe (the elementwise "!= {}" filter broke on arrays)
- validate() gains array_data=True for structure-only validation: numpy
  arrays are replaced by [] so jsonschema checks keys/dims without
  materialising or iterating the bulk data

Default behaviour (lists, full validation) is unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- turbulence_model.c: optional 4-element calibration array for the
  CrespoHernandez added-turbulence model, so a paper's coefficients
  (e.g. Niayifar, Zong) can be expressed in windIO.
- rotor_averaging.name: add "none" (no rotor-averaging model). This is the only
  non-node option PyWake's Weighted superposition accepts, and is what the
  Zong (2020) literature model uses.

Both fields are additive and optional; existing inputs are unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add CrespoHernandez c-coefficients and 'none' rotor option
FUGA is already in the wind_deficit_model name enum, but its on-the-fly LUT
generation (pyfuga, in WIFA) had no schema. Add a `fuga` object documenting the
knobs: z0 (scalar or sweep list), zi, zeta0, n_z0, ti_min/ti_max/ti_qlo/ti_qhi,
nkz0/nbeta/nx/ny, lut_vars, cache_dir. All optional — omitted fields fall back
to WIFA defaults (z0 derived from the site TI, swept across its distribution).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant