<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">WES</journal-id><journal-title-group>
    <journal-title>Wind Energy Science</journal-title>
    <abbrev-journal-title abbrev-type="publisher">WES</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Wind Energ. Sci.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">2366-7451</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/wes-11-2869-2026</article-id><title-group><article-title>Convolutional versus graph-based surrogate models for inter-farm wake prediction using multi-fidelity transfer learning</article-title><alt-title>Multi-fidelity surrogates for inter-farm wake prediction</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" equal-contrib="yes" corresp="yes" rid="aff1">
          <name><surname>Schøler</surname><given-names>Jens Peter</given-names></name>
          <email>jpsch@dtu.dk</email>
        <ext-link>https://orcid.org/0000-0001-7927-2639</ext-link></contrib>
        <contrib contrib-type="author" equal-contrib="yes" corresp="yes" rid="aff1">
          <name><surname>Peder Weilmann Rasmussen</surname><given-names>Frederik</given-names></name>
          <email>fpwra@dtu.dk</email>
        <ext-link>https://orcid.org/0009-0005-2147-4541</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>van der Laan</surname><given-names>M. Paul</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-8778-2302</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Peña</surname><given-names>Alfredo</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-7900-9651</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Réthoré</surname><given-names>Pierre-Elouan</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-2300-5440</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>DTU Wind and Energy Systems, Frederiksborgvej 399, 4000 Roskilde, Denmark</institution>
        </aff><author-comment content-type="econtrib"><p>These authors contributed equally to this work.</p></author-comment>
      </contrib-group>
      <author-notes><corresp id="corr1">Jens Peter Schøler (jpsch@dtu.dk) and Frederik Peder Weilmann Rasmussen (fpwra@dtu.dk)</corresp></author-notes><pub-date><day>11</day><month>August</month><year>2026</year></pub-date>
      
      <volume>11</volume>
      <issue>8</issue>
      <fpage>2869</fpage><lpage>2893</lpage>
      <history>
        <date date-type="received"><day>11</day><month>March</month><year>2026</year></date>
           <date date-type="rev-request"><day>30</day><month>March</month><year>2026</year></date>
           <date date-type="rev-recd"><day>6</day><month>June</month><year>2026</year></date>
           <date date-type="accepted"><day>7</day><month>July</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Jens Peter Schøler et al.</copyright-statement>
        <copyright-year>2026</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026.html">This article is available from https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026.html</self-uri><self-uri xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026.pdf">The full text article is available as a PDF file from https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e123">Accurate prediction of wind farm wake interactions is important for energy yield assessment, as offshore wind farms increasingly operate in close proximity to one another. This work presents a systematic comparison of two neural network surrogate models for inter-farm wake deficit prediction: a convolutional neural network (CNN)-based attention residual U-Net (ARU-Net) and a graph neural network (GNN)-based graph neural operator (GNO). Both architectures are trained using multi-fidelity transfer learning, pre-training with low-fidelity engineering model simulations, and then fine-tuning with high-fidelity Reynolds-averaged Navier–Stokes actuator wind farm (RANS-AWF) data. The models are evaluated on procedurally generated wind farm layouts spanning diverse farm sizes, turbine spacings, wind speeds, and ambient turbulence intensities. Both architectures achieve high prediction accuracy but exhibit complementary strengths: evaluated over the wake region (<inline-formula><mml:math id="M1" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>) and averaged across both evaluation grids, the GNO achieves a lower root mean squared error (RMSE) (0.024 vs. 0.028 m s<sup>−1</sup>), while the ARU-Net attains a higher <inline-formula><mml:math id="M4" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score (0.98 vs. 0.91), reflecting its superior wake boundary capture. Transfer learning substantially benefits the ARU-Net, while the GNO shows a smaller but measurable improvement, achieving its best performance with transfer learning.</p>
  </abstract>
    </article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e191">As global energy demand increases, and a number of areas suitable for offshore wind development become increasingly densely populated, the complexity of accurately modelling these environments has increased significantly. Multiple wind farms now operate in close proximity, creating complex flow interactions that extend far beyond single-farm boundaries. However, wake interactions between neighbouring farms remain poorly predicted by current engineering models, posing an important challenge for accurate energy yield assessment and wind farm layout optimisation (WFLO).</p>
      <p id="d2e194">Wind farm wakes, defined as downstream regions of a wind farm with reduced wind speed and increased turbulence intensity (TI), have been observed to persist over remarkably long distances. Multiple independent measurement methodologies, including ground-based radar <xref ref-type="bibr" rid="bib1.bibx38" id="paren.1"/>, scanning lidar systems <xref ref-type="bibr" rid="bib1.bibx53 bib1.bibx9" id="paren.2"/>, synthetic aperture radar (SAR) satellite imagery <xref ref-type="bibr" rid="bib1.bibx22 bib1.bibx12" id="paren.3"/>, and airborne measurement campaigns <xref ref-type="bibr" rid="bib1.bibx48" id="paren.4"/>, have confirmed that wind farm wakes can extend far outside the wind farm boundaries and, under certain atmospheric conditions, beyond tens of kilometres, particularly for large wind farm clusters operating in stable atmospheric boundary layers. These observations challenge the fundamental assumptions of conventional engineering models, which are primarily developed and calibrated for intra-farm wake effects at distances of tens of rotor diameters.</p>
      <p id="d2e210">Recent studies have further highlighted the importance of inter-farm wake interactions in wind farm clusters. <xref ref-type="bibr" rid="bib1.bibx63" id="text.5"/> showed that atmospheric stability and terrain can strongly affect wake persistence and downstream power losses for neighbouring onshore farms, while <xref ref-type="bibr" rid="bib1.bibx64" id="text.6"/> demonstrated that offshore cluster wakes may extend over very large distances as installed capacity increases. These findings further motivate the development of fast surrogate models for evaluating inter-farm wake effects across many layouts and inflow conditions.</p>
      <p id="d2e219">Engineering wake models have served as the workhorses of wind farm design and energy yield assessment for the last few decades, offering computational efficiency and enabling the rapid evaluation of thousands of layout configurations during WFLO. Models such as the Park model by <xref ref-type="bibr" rid="bib1.bibx29" id="text.7"/>, the Gaussian wake model of <xref ref-type="bibr" rid="bib1.bibx5" id="text.8"/>, and the Turbulence Optimised Park model (TurbOPark) developed by <xref ref-type="bibr" rid="bib1.bibx39 bib1.bibx40" id="text.9"/> are popular representative examples of analytical wake models.</p>
      <p id="d2e232">The atmospheric conditions play an important role in wake persistence. Low turbulence, for instance, suppresses wake mixing, limiting downstream wake recovery, while high TI increases turbulent mixing, accelerating wake recovery. The interplay among atmospheric conditions, farm size, turbine spacing, and wake superposition creates a multidimensional parameter space that engineering models struggle to predict accurately.</p>
      <p id="d2e235">Engineering wake models have fundamental limitations that become increasingly problematic at inter-farm scales. First, they assume steady-state, axisymmetric wake structures, neglecting the inherent unsteadiness and three-dimensional complexity of turbulent wakes. Second, they rely on algebraic superposition methods, typically linear or squared-sum approaches, to combine multiple single-turbine wakes. While computationally efficient, superposition does not capture the non-linear wake interactions that occur when multiple wakes merge and interact with the atmospheric boundary layer. Third, these models neglect large-scale atmospheric effects, including Coriolis forces, atmospheric stability, and mesoscale flow phenomena, that become relevant at distances of tens of kilometres. Even when calibrated to specific sites or conditions, engineering models lack the physical fidelity to generalise across the diverse operating conditions met in practice. When designing a wind farm, consideration must be given to neighbouring wind farms, as wake losses from neighbouring projects may affect profitability. Multiple neighbours may be present simultaneously, and at the time of freezing the design, their layouts might not yet be finalised and subsequently change. Accounting for these inter-farm effects is therefore challenging due to the inherent uncertainty surrounding the configuration of neighbouring projects, and a fast, accurate model is needed to efficiently evaluate many candidate designs.</p>
      <p id="d2e238">Data-driven surrogate models have gained popularity as they bridge the accuracy–efficiency gap in wind farm flow modelling. By learning mappings from input parameters, like wind farm layout and inflow conditions, to output flow fields directly from simulation data, these models can achieve prediction speeds comparable to engineering models while capturing more of the complex physics of the training data. However, the accuracy of data-driven surrogates is fundamentally constrained by the fidelity of the training data. Therefore, a model trained exclusively on engineering model outputs cannot exceed the engineering accuracy of the model, regardless of how sophisticated the fully data-driven neural network architecture is.</p>
      <p id="d2e241">Reynolds-averaged Navier–Stokes (RANS) or large-eddy simulations (LES) are more physically accurate, but computationally much more expensive than low-fidelity engineering models. On the other hand, idealised RANS and LES cannot account for the large and mesoscale scales of the atmospheric flow. Therefore, a common method for simulating inter-farm wake effects is to use wind farm parameterisations implemented in numerical weather prediction models. Although such models realistically simulate atmospheric processes across large spatial domains, their spatial resolutions are too coarse to account for individual wind turbine wakes. Therefore, the accuracy of these parameterisations is currently a matter of debate <xref ref-type="bibr" rid="bib1.bibx46 bib1.bibx19" id="paren.10"/>. This observation motivates multi-fidelity transfer learning approaches that utilise both the abundant low-fidelity data and sparse high-fidelity data. The strategy involves pre-training neural network models on large datasets generated by computationally inexpensive engineering models, thereby establishing robust representations of fundamental wake physics and layout-to-flow mappings. These pre-trained models can then be fine-tuned on smaller datasets of high-fidelity simulations, enabling them to learn corrections to engineering model predictions while avoiding overfitting to limited data.</p>
      <p id="d2e247">Within this multi-fidelity surrogate modelling framework, convolutional neural networks (CNNs) and graph neural networks (GNNs) represent two principal architectural paradigms for learning layout-to-flow mappings from simulation data. In this work, two principal families of neural network architectures have been applied to wind farm flow prediction: CNNs and GNNs. These architectures differ in how they interpret spatial information and how they handle wind farm geometry. CNNs operate with flow fields on a regular grid, treating the spatial domain as a regular, image-like structure, while the GNNs operate on the more adaptive structure of a graph.</p>
      <p id="d2e250">Both neural network architectures can be trained to predict the flow field around different layouts, but the two methods use different methods of encoding turbine placement. In most CNN-based approaches, it is necessary to rasterise locations onto a fixed spatial domain, whereas turbine positions can be placed exactly at graph nodes, as the graph is adaptive. However, this depends on how the graph is constructed. Graphs can broadly be divided into two categories: <italic>extrinsic</italic> graphs, where the nodes and edges form a spatial mesh, and <italic>intrinsic</italic> graphs, where the nodes correspond directly to the physical entities of interest, in the context of wind farms typically the turbines themselves.</p>
      <p id="d2e260">Multiple previous studies have applied CNN-based architectures to aerodynamic and wind flow prediction tasks. <xref ref-type="bibr" rid="bib1.bibx58" id="text.11"/> demonstrated that a U-Net encoder–decoder architecture could serve as an effective RANS surrogate for predicting velocity and pressure fields around airfoils, establishing the viability of convolutional auto-encoders (CAEs) for learning complex flow patterns from simulation data. <xref ref-type="bibr" rid="bib1.bibx23" id="text.12"/> developed a physics-informed deep convolutional hierarchical encoder–decoder neural network for predicting flow fields within wind farms, incorporating physical constraints to improve generalisation. <xref ref-type="bibr" rid="bib1.bibx32" id="text.13"/> proposed their Super-Fidelity Network (SFNet), which utilises a CNN-based model for super-resolution-type task mapping between low-fidelity engineering models and high-fidelity LES data. <xref ref-type="bibr" rid="bib1.bibx3" id="text.14"/> employed CNN-based wake models within a multi-fidelity deep transfer learning framework to accelerate wind farm yaw and layout optimisation, demonstrating that features learned from low-fidelity wake simulations could be transferred to improve predictions at higher fidelity levels.</p>
      <p id="d2e275">Similarly, GNNs have previously been explored in the literature: <xref ref-type="bibr" rid="bib1.bibx43" id="text.15"/> trained a physics-induced graph neural network (PGNN) for power estimation in wind farms. <xref ref-type="bibr" rid="bib1.bibx6" id="text.16"/> trained a GNN as an RANS surrogate to predict turbine wind speeds. <xref ref-type="bibr" rid="bib1.bibx41" id="text.17"/> employed a graph attention network (GAT) to predict individual turbine power production. <xref ref-type="bibr" rid="bib1.bibx14 bib1.bibx15" id="text.18"/> created a GNN using intrinsic graphs for load estimation of the turbines. <xref ref-type="bibr" rid="bib1.bibx34" id="text.19"/> demonstrated a graph transformer for power estimation with yaw angle variations. <xref ref-type="bibr" rid="bib1.bibx10" id="text.20"/> implemented a spatio-temporal GNN capable of predicting the power of individual turbines by processing node input signals with a long short-term memory (LSTM) model rather than a conventional multi-layer perceptron (MLP). <xref ref-type="bibr" rid="bib1.bibx65" id="text.21"/> demonstrated a graph transformer with a hybrid approach, which they termed a knowledge-fusion graph transformer (KFGT), capable of predicting the turbine-level flow and loads. <xref ref-type="bibr" rid="bib1.bibx25" id="text.22"/> demonstrated a two-stage GNN with a novel approach to turbine connectivity using a hybrid approach.</p>
<sec id="Ch1.S1.SS1">
  <label>1.1</label><title>Our contribution</title>
      <p id="d2e310">In our own previous work, we have explored both a CNN-based architecture; the attention residual U-Net (ARU-Net) <xref ref-type="bibr" rid="bib1.bibx50" id="paren.23"/>; and a GNN-based approach, the graph neural operator <xref ref-type="bibr" rid="bib1.bibx54" id="paren.24"/>. In <xref ref-type="bibr" rid="bib1.bibx50" id="text.25"/>, a two-stage transfer learning strategy was applied, pre-trained on the Gaussian engineering model by <xref ref-type="bibr" rid="bib1.bibx66" id="text.26"/> and fine-tuned on Reynolds-averaged Navier–Stokes actuator wind farm (RANS-AWF) <xref ref-type="bibr" rid="bib1.bibx60" id="paren.27"/> data. The present work builds on this foundation by extending the ARU-Net architecture with feature-wise linear modulation (FiLM) conditioning, using a variant of parameter-efficient fine-tuning (PEFT), namely low-rank adaptation (LoRA), and by directly comparing its performance with that of a graph-based alternative.</p>
      <p id="d2e328">In <xref ref-type="bibr" rid="bib1.bibx54" id="text.28"/>, we demonstrated a methodology to predict a flow field using a graph neural operator (GNO), an intrinsic graph approach where each node represents a physical wind turbine. However, to predict at a random location, we introduced probe nodes in addition to the intrinsic wind farm nodes. This probe node formulation shares some similarities with the extrinsic approach, as they can be placed at arbitrary spatial locations rather than at physical entities.</p>
      <p id="d2e334">In this work, we present a systematic comparison of the ARU-Net and the GNO for multi-fidelity transfer learning in inter-farm wake modelling. Both architectures are pre-trained on a large dataset generated using the TurbOPark engineering model <xref ref-type="bibr" rid="bib1.bibx40" id="paren.29"/> implemented in PyWake <xref ref-type="bibr" rid="bib1.bibx45" id="paren.30"/>, then fine-tuned on RANS-AWF data using PyWakeEllipSys <xref ref-type="bibr" rid="bib1.bibx13" id="paren.31"/> simulations with LoRA-based PEFT. This common multi-fidelity workflow enables a direct comparison of raster-based and graph-based surrogate modelling approaches under the same low- and high-fidelity training stages. We evaluate wind speed prediction accuracy across diverse wind farm layouts and inflow conditions; analyse spatial performance, including wind speed error distributions; and assess sensitivity to farm size and atmospheric inflow conditions.</p>
      <p id="d2e346">The remainder of this paper is organised as follows: Sect. <xref ref-type="sec" rid="Ch1.S2"/> describes the methodology, including wind farm flow modelling approaches, procedural data generation, neural network architectures, and training procedures. Section <xref ref-type="sec" rid="Ch1.S3"/> presents the results and discussion for both models, covering qualitative and quantitative analyses alongside an assessment of the implications for practical wind farm modelling applications. Section <xref ref-type="sec" rid="Ch1.S4"/> concludes with a summary of the results, an overview of the qualitative differences between the models, and directions for future research.</p>
</sec>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Methodology</title>
      <p id="d2e364">In this section, the simulation tools and the neural network architectures are described. However, first, a broader comparison of CNNs and GNNs is presented to clarify their similarities and differences.</p>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>On the connection between CNNs and GNNs</title>
      <p id="d2e375">In fields such as computer vision and medical science, CNNs have shown usefulness across many diverse applications. Most users of machine learning (ML) in wind energy have worked with CNNs. Although GNNs are gaining wider adoption within the wind energy community, they remain under-investigated. In this section, an analogy between CNNs and GNNs is presented.</p>
      <p id="d2e378">A grid can be viewed as a specific type of graph where the connections of the nodes are fixed on a regular lattice; see e.g. <xref ref-type="bibr" rid="bib1.bibx8" id="text.32"><named-content content-type="post">Sects. 3.4 and 4.2</named-content></xref> for a thorough introduction to the concepts and <xref ref-type="bibr" rid="bib1.bibx52" id="text.33"/> for an interactive introduction. This abstraction carries important implications for the relationship between CNNs and GNNs.  Graphs used in scientific machine learning (SciML) can be broadly placed on a spectrum between two poles.  At one end lie <italic>extrinsic</italic> (discretised) graphs: the nodes and edges form a mesh that approximates an underlying continuous field.  The graph is a computational artefact. One could remesh at a different resolution or with a different triangulation and still represent the same physical domain.  At the other end lie <italic>intrinsic</italic> (native) graphs, where the nodes correspond to the actual entities of interest, and the topology is physically meaningful.  A graph whose nodes are wind turbines and whose edges encode relative positional information between them is an example: the topology directly reflects the physical layout of the farm, and there is no finer-resolution version of that layout to recover. CNNs operate exclusively on discretised, regular grids of pixel positions, e.g. on an image or, in the present context, cell centres in the flow field grid.</p>
      <p id="d2e395">At a high level, CNNs and GNNs can both be viewed as local aggregation methods. A CNN applies a learned kernel over neighbouring cells on a regular grid, while a GNN aggregates information through message passing over graph edges. This analogy is illustrated in Fig. <xref ref-type="fig" rid="F1"/>, with a more detailed mathematical discussion provided in Appendix <xref ref-type="sec" rid="App1.Ch1.S1"/>.</p>

      <fig id="F1"><label>Figure 1</label><caption><p id="d2e405">Comparison of local aggregation operations: <bold>(a)</bold> convolution applies a learned kernel <inline-formula><mml:math id="M5" display="inline"><mml:mi mathvariant="bold">K</mml:mi></mml:math></inline-formula> over a regular grid, aggregating values from a fixed spatial neighbourhood; <bold>(b)</bold> message passing aggregates features from neighbouring nodes on a graph with a fixed grid domain.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f01.png"/>

        </fig>

      <p id="d2e427">On a regular pixel grid, a single convolutional layer can only aggregate information from a small spatial neighbourhood defined by the kernel size. For wind farm wake modelling, where upstream turbines are far away from downstream conditions, this local view is insufficient. Deeper architectures address this limitation: in a plain CNN, stacking <inline-formula><mml:math id="M6" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">depth</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> convolutional layers linearly increases the active domain with depth, while convolutional encoder–decoder architectures, such as the U-Net, go further by compressing the spatial domain using downsampling, allowing deeper layers to see increasingly larger portions of the domain. The methodology is depicted in Fig. <xref ref-type="fig" rid="F2"/>a.</p>

      <fig id="F2" specific-use="star"><label>Figure 2</label><caption><p id="d2e445">Depth as a mechanism for multi-scale information aggregation. <bold>(a)</bold> A CNN operating on an input domain of size <inline-formula><mml:math id="M7" display="inline"><mml:mrow><mml:mi>H</mml:mi><mml:mo>×</mml:mo><mml:mi>W</mml:mi></mml:mrow></mml:math></inline-formula> growing its effective domain through successive downsampling layers: a local <inline-formula><mml:math id="M8" display="inline"><mml:mrow><mml:mn mathvariant="normal">3</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:math></inline-formula> kernel covers the full spatial domain after two downsampling stages. <bold>(b)</bold> A GNN spreads information progressively via message-passing steps (<inline-formula><mml:math id="M9" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula>).</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f02.png"/>

        </fig>

      <p id="d2e491">Unlike CNNs, which are inherently defined on regular grids, GNNs operate on arbitrary graph structures, where the choice of intrinsic or extrinsic topology is specified as part of the model architecture prior to training. When the graph is a discretised mesh, similar to grids regularly used for computational fluid dynamics (CFD), as in the MeshGraphNets framework of <xref ref-type="bibr" rid="bib1.bibx47" id="text.34"/>, the message-passing mirrors the spatial discretisation of the computational domain. Stacking message-passing layers then serves a purpose similar to stacking convolutional layers: each additional step propagates information one step further across the mesh, gradually extending the spatial reach of the model. Two examples relevant to wind energy flow modelling include <xref ref-type="bibr" rid="bib1.bibx33" id="text.35"/>, who created a single-turbine RANS-based GNN wake surrogate model using a discredited mesh, and <xref ref-type="bibr" rid="bib1.bibx16" id="text.36"/>, who demonstrated a mesh-type GNN that is used to create realistic realisations of the flow around an airfoil given knowledge of the airfoil boundary.</p>
      <p id="d2e503">In contrast, when the graph is intrinsic, as in this work, where each node represents a wind turbine, and the edges encode positional relations, a single message-passing step already exchanges information directly between the turbines. Stacking additional layers, therefore, takes on a different role. Rather than extending the spatial reach in a grid, it enables the model to consider turbine interactions outside the direct neighbourhood of each local turbine, thereby connecting the turbines into a farm. A visualisation of GNN message passing in connection with depth is illustrated in Fig. <xref ref-type="fig" rid="F2"/>b, where three source nodes are not directly connected, but information is exchanged between them after successive message-passing steps (<inline-formula><mml:math id="M10" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula>).</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Wind farm engineering model</title>
      <p id="d2e523">To generate the low-fidelity dataset, we use the open-source tool PyWake <xref ref-type="bibr" rid="bib1.bibx45" id="paren.37"/>. PyWake is a modular implementation of various engineering modelling tools, including wake deficit models, added TI models, blockage, wake deflection, and mirroring. We employ the Turbulence Optimised Park model (TurbOPark) with the Gaussian wake profile developed by <xref ref-type="bibr" rid="bib1.bibx40" id="text.38"/>. TurbOPark was selected because it was calibrated for far-wake and cluster-wake applications and showed the closest agreement with RANS-AWF among the engineering models we tested.</p>
      <p id="d2e532">The model incorporates the added TI formulation of <xref ref-type="bibr" rid="bib1.bibx18" id="text.39"/> directly into the wake expansion, eliminating the need for a standalone TI model. For combining multiple wakes, it uses squared-sum superposition, motivated by energy-deficit arguments <xref ref-type="bibr" rid="bib1.bibx49" id="paren.40"/>, a ground-mirroring model to implement the surface boundary condition, and a Gaussian overlap model for rotor averaging. The wake deficit model is given by
          

                <disp-formula id="Ch1.E1" specific-use="align" content-type="subnumberedsingle"><mml:math id="M11" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E1.2"><mml:mtd><mml:mtext>1a</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:mi>C</mml:mi><mml:mi>exp⁡</mml:mi><mml:mfenced open="(" close=")"><mml:mrow><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msup><mml:mi>r</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">w</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:mfenced><mml:mo>,</mml:mo><mml:mspace width="1em" linebreak="nobreak"/><mml:mi>C</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:msqrt><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:mn mathvariant="normal">8</mml:mn><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>w</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:mi>D</mml:mi><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:msqrt><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mtr><mml:mtd><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>w</mml:mi></mml:msub></mml:mrow><mml:mi>D</mml:mi></mml:mfrac></mml:mstyle></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>=</mml:mo><mml:mi mathvariant="italic">ε</mml:mi><mml:mo>+</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mn mathvariant="normal">0.04</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mi mathvariant="italic">β</mml:mi></mml:mfrac></mml:mstyle><mml:mfenced close="" open="("><mml:mrow><mml:msqrt><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="italic">ξ</mml:mi><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msqrt><mml:mo>-</mml:mo><mml:msqrt><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="italic">α</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:mfenced></mml:mrow></mml:mtd></mml:mtr><mml:mlabeledtr id="Ch1.E1.3"><mml:mtd><mml:mtext>1b</mml:mtext></mml:mtd><mml:mtd><mml:mstyle class="stylechange" displaystyle="true"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mfenced open="" close=")"><mml:mrow><mml:mo>-</mml:mo><mml:mi>ln⁡</mml:mi><mml:mfenced open="[" close="]"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo mathsize="1.1em">(</mml:mo><mml:msqrt><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="italic">ξ</mml:mi><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msqrt><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo mathsize="1.1em">)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">α</mml:mi></mml:mrow><mml:mrow><mml:mo mathsize="1.1em">(</mml:mo><mml:msqrt><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="italic">α</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:msqrt><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo mathsize="1.1em">)</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="italic">ξ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mtr><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="italic">α</mml:mi></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1.5</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="1em"/><mml:mi mathvariant="italic">β</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mn mathvariant="normal">0.8</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:msqrt><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:msqrt></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mlabeledtr id="Ch1.E1.4"><mml:mtd><mml:mtext>1c</mml:mtext></mml:mtd><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="italic">ε</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.25</mml:mn><mml:msqrt><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo><mml:msqrt><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>C</mml:mi><mml:mo mathvariant="normal" stretchy="true">^</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:msqrt></mml:mrow><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:msqrt><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>C</mml:mi><mml:mo mathvariant="normal" stretchy="true">^</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mstyle></mml:msqrt><mml:mo>,</mml:mo><mml:mspace width="1em" linebreak="nobreak"/><mml:msub><mml:mover accent="true"><mml:mi>C</mml:mi><mml:mo mathvariant="normal" stretchy="true">^</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo movablelimits="false">min⁡</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>C</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mn mathvariant="normal">0.96</mml:mn><mml:mo>)</mml:mo><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M12" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>u</mml:mi></mml:mrow></mml:math></inline-formula> is the velocity deficit, <inline-formula><mml:math id="M13" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> the free-stream velocity, <inline-formula><mml:math id="M14" display="inline"><mml:mi>r</mml:mi></mml:math></inline-formula> the radial distance from the wake centreline, <inline-formula><mml:math id="M15" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> the characteristic wake width, <inline-formula><mml:math id="M16" display="inline"><mml:mrow><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> the rotor diameter, <inline-formula><mml:math id="M17" display="inline"><mml:mrow><mml:mi mathvariant="italic">ξ</mml:mi><mml:mo>=</mml:mo><mml:mi>x</mml:mi><mml:mo>/</mml:mo><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> the dimensionless downstream distance, <inline-formula><mml:math id="M18" display="inline"><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> the thrust coefficient, and <inline-formula><mml:math id="M19" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> the ambient TI. The coefficient <inline-formula><mml:math id="M20" display="inline"><mml:mi>C</mml:mi></mml:math></inline-formula> represents the centreline maximum velocity deficit. The parameters <inline-formula><mml:math id="M21" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M22" display="inline"><mml:mi mathvariant="italic">β</mml:mi></mml:math></inline-formula>, which govern the turbulence-dependent wake expansion rate, are adopted from <xref ref-type="bibr" rid="bib1.bibx18" id="text.41"/>; the coefficient 0.04 was calibrated by <xref ref-type="bibr" rid="bib1.bibx40" id="text.42"/> against operational data from 19 offshore wind farms. The initial wake width <inline-formula><mml:math id="M23" display="inline"><mml:mi mathvariant="italic">ε</mml:mi></mml:math></inline-formula> follows the formulation of <xref ref-type="bibr" rid="bib1.bibx5" id="text.43"/>.</p>
      <p id="d2e1060">Despite its calibration including far-wake physics, TurbOPark shares limitations common to engineering wake models: it assumes steady, axisymmetric wakes; neglects large-scale atmospheric effects; and relies on algebraic superposition, which does not fully capture wake interactions.</p>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Reynolds-averaged Navier–Stokes with actuator wind farm (RANS-AWF)</title>
      <p id="d2e1072">RANS-AWF simulations offer higher physical fidelity than engineering models by resolving the mean flow field around wind farms, including pressure gradients and wake boundary layer interactions, while representing turbines through distributed momentum sink terms.</p>
      <p id="d2e1075">The high-fidelity dataset is produced with EllipSys3D <xref ref-type="bibr" rid="bib1.bibx36 bib1.bibx55" id="paren.44"/>, coupled to the AWF model of <xref ref-type="bibr" rid="bib1.bibx60" id="text.45"/>. In this formulation, the RANS equations are closed by the <inline-formula><mml:math id="M24" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>-<inline-formula><mml:math id="M25" display="inline"><mml:mi mathvariant="italic">ε</mml:mi></mml:math></inline-formula>-<inline-formula><mml:math id="M26" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> turbulence closure <xref ref-type="bibr" rid="bib1.bibx59" id="paren.46"/>, and each wind farm enters the momentum equations as a distributed drag force analogous to a forest canopy. A surrogate trained on higher-resolution actuator-disc simulations <xref ref-type="bibr" rid="bib1.bibx61" id="paren.47"/> provides the wind farm thrust coefficient, enabling accurate long-distance wake prediction at moderate computational cost. A single RANS-AWF simulation takes only a few minutes using multiple nodes on a high-performance computing (HPC) cluster <xref ref-type="bibr" rid="bib1.bibx57" id="paren.48"/>.</p>
      <p id="d2e1119">A neutral atmospheric surface layer is employed by prescribing a logarithmic streamwise velocity profile, a constant turbulence kinetic energy (TKE), and a profile of the TKE dissipation at both the inlet and top boundaries. Inflow TI is governed by the surface roughness length <inline-formula><mml:math id="M27" display="inline"><mml:mrow><mml:msub><mml:mi>z</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, which we relate to a prescribed streamwise <inline-formula><mml:math id="M28" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> via

            <disp-formula id="Ch1.E5" content-type="numbered"><label>2</label><mml:math id="M29" display="block"><mml:mrow><mml:msub><mml:mi>z</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>z</mml:mi><mml:mi>H</mml:mi></mml:msub><mml:mi>exp⁡</mml:mi><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:mfenced close=")" open="("><mml:mrow><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          Because the <inline-formula><mml:math id="M30" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>-<inline-formula><mml:math id="M31" display="inline"><mml:mi mathvariant="italic">ε</mml:mi></mml:math></inline-formula>-<inline-formula><mml:math id="M32" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> turbulence closure is formulated in terms of a turbulence kinetic energy (TKE)-based turbulence intensity <inline-formula><mml:math id="M33" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mi mathvariant="normal">TKE</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mi>k</mml:mi><mml:mo>/</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msqrt><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>/</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> rather than the streamwise component, a conversion is needed to map to the ambient TI, <inline-formula><mml:math id="M34" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. In the atmospheric surface layer, turbulence is anisotropic, with streamwise fluctuations exceeding those in the vertical and lateral directions <xref ref-type="bibr" rid="bib1.bibx59" id="paren.49"/>. We therefore adopt <inline-formula><mml:math id="M35" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mi mathvariant="normal">TKE</mml:mi></mml:msub><mml:mo>≈</mml:mo><mml:mn mathvariant="normal">0.8</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. The sampled range for the RANS-AWF dataset is <inline-formula><mml:math id="M36" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.03</mml:mn><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mn mathvariant="normal">0.25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, corresponding to roughness lengths <inline-formula><mml:math id="M37" display="inline"><mml:mrow><mml:msub><mml:mi>z</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mo>∼</mml:mo><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">12</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>∼</mml:mo><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mn mathvariant="normal">2</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> m.</p>
      <p id="d2e1336">The numerical domain represents a Cartesian grid with dimensions <inline-formula><mml:math id="M38" display="inline"><mml:mrow><mml:mn mathvariant="normal">1522</mml:mn><mml:mi>D</mml:mi><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1266</mml:mn><mml:mi>D</mml:mi><mml:mo>×</mml:mo><mml:mn mathvariant="normal">25</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> in the streamwise (<inline-formula><mml:math id="M39" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>) lateral (<inline-formula><mml:math id="M40" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>), and vertical (<inline-formula><mml:math id="M41" display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula>) directions, respectively. The wind farm is placed at the horizontal origin of the domain, <inline-formula><mml:math id="M42" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo mathvariant="italic">}</mml:mo><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula>, which is located <inline-formula><mml:math id="M43" display="inline"><mml:mrow><mml:mn mathvariant="normal">569</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> from the inlet boundary and <inline-formula><mml:math id="M44" display="inline"><mml:mrow><mml:mn mathvariant="normal">633</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> from the lateral boundaries. A region around the wind farm, with dimensions of <inline-formula><mml:math id="M45" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">69</mml:mn><mml:mo>&lt;</mml:mo><mml:mi>x</mml:mi><mml:mo>/</mml:mo><mml:mi>D</mml:mi><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">453</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M46" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">133</mml:mn><mml:mo>&lt;</mml:mo><mml:mi>y</mml:mi><mml:mo>/</mml:mo><mml:mi>D</mml:mi><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">133</mml:mn></mml:mrow></mml:math></inline-formula>, is defined, at which a cell spacing of <inline-formula><mml:math id="M47" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> is applied, based on a grid refinement study <xref ref-type="bibr" rid="bib1.bibx60" id="paren.50"/>. The horizontal cell sizes are stretched towards the lateral, inlet, and outlet boundaries with a maximum growth ratio of 1.2, covering a distance of <inline-formula><mml:math id="M48" display="inline"><mml:mrow><mml:mn mathvariant="normal">500</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula>. The vertical cell distribution consists of a first cell height of <inline-formula><mml:math id="M49" display="inline"><mml:mrow><mml:mi>D</mml:mi><mml:mo>/</mml:mo><mml:mn mathvariant="normal">200</mml:mn></mml:mrow></mml:math></inline-formula> that is initially stretched towards a cell height of <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:mi>D</mml:mi><mml:mo>/</mml:mo><mml:mn mathvariant="normal">6</mml:mn></mml:mrow></mml:math></inline-formula> at <inline-formula><mml:math id="M51" display="inline"><mml:mrow><mml:mi>z</mml:mi><mml:mo>/</mml:mo><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:math></inline-formula> and then further stretched towards the top boundary. In total, 3.9 million cells are used, distributed as <inline-formula><mml:math id="M52" display="inline"><mml:mrow><mml:mn mathvariant="normal">320</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">192</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">64</mml:mn></mml:mrow></mml:math></inline-formula> in the horizontal, lateral, and vertical directions, respectively. The logarithmic inflow is prescribed at the inlet and top boundary, resulting in a lid-driven flow setup. A fully developed flow is assumed at the outlet, at which all gradients normal to the outlet plane are assumed to be zero. The bottom boundary is a rough wall boundary <xref ref-type="bibr" rid="bib1.bibx56" id="paren.51"/>, and the lateral boundaries are periodic. The hub height plane at 119 m is extracted from each simulation and interpolated onto a <inline-formula><mml:math id="M53" display="inline"><mml:mrow><mml:mn mathvariant="normal">256</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">128</mml:mn></mml:mrow></mml:math></inline-formula> Cartesian grid consistent with the low-fidelity domain, with 64 vertical levels. The resulting dataset comprises 1000 samples from 250 distinct layouts, each evaluated at four uniformly sampled inflow conditions, and is partitioned into 700 for training, 100 for validation, and 200 for test cases.</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e1579">Procedurally generated data for the RANS-AWF dataset, <bold>(a–b)</bold> statistics of generated layouts, <bold>(c)</bold> <inline-formula><mml:math id="M54" display="inline"><mml:mi>U</mml:mi></mml:math></inline-formula> distribution, <bold>(d)</bold> ambient TI distribution, and <bold>(e)</bold> generated <inline-formula><mml:math id="M55" display="inline"><mml:mi>U</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M56" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> samples with boundary.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f03.png"/>

        </fig>

</sec>
<sec id="Ch1.S2.SS4">
  <label>2.4</label><title>Procedural data generation</title>
      <p id="d2e1634">To ensure the models are trained on a broad range of layouts and inflow conditions, a procedural data generation strategy is adopted for the engineering model dataset. The method is adopted from <xref ref-type="bibr" rid="bib1.bibx54" id="text.52"/>, but with two improvements: (i) layout-specific number of wind turbines (<inline-formula><mml:math id="M57" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) and turbine separation factors (<inline-formula><mml:math id="M58" display="inline"><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) defining the smallest allowed distance between turbines and (ii) capping <inline-formula><mml:math id="M59" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> at 80 % to limit the number of extreme cases. An overview of the method as applied when generating the low-fidelity dataset is shown in Fig. <xref ref-type="fig" rid="F4"/>.</p>
      <p id="d2e1675">The RANS-AWF dataset is repurposed from <xref ref-type="bibr" rid="bib1.bibx50" id="text.53"/> and therefore does not utilise the same sampling strategy. In <xref ref-type="bibr" rid="bib1.bibx50" id="text.54"/>, wind farm layouts were generated by placing turbines within random polygons using Poisson disc sampling with minimum spacing constraints between <inline-formula><mml:math id="M60" display="inline"><mml:mrow><mml:mn mathvariant="normal">3</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M61" display="inline"><mml:mrow><mml:mn mathvariant="normal">10</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula>, similar to the cluster generation mode in PLayGen. Random turbine removal, with a probability of 0 %–50 %, was applied to increase layout diversity. As the RANS-AWF dataset used in this work only contains the equivalent of the cluster layout type, the resulting models are therefore not expected to generalise as well to the remaining layout types. Future datasets should incorporate a broader range of layouts to address this limitation in subsequent works.</p>
      <p id="d2e1706">Inflow conditions were sampled uniformly with <inline-formula><mml:math id="M62" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">4</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup> and <inline-formula><mml:math id="M64" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.03</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0.25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, treating wind speed and turbulence intensity as independent variables. This contrasts with the engineering model dataset, in which <inline-formula><mml:math id="M65" display="inline"><mml:mi>U</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are coupled through the correlated International Electrotechnical Commission (IEC)-based sampling framework. The RANS-AWF sampling domain can largely be considered a subset of the engineering model inflow range. However, because the IEC-based upper bound on <inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> (Eq. <xref ref-type="disp-formula" rid="Ch1.E6.8"/>) decays with increasing wind speed, the correlated Sobol sequence does not populate the corner of the <inline-formula><mml:math id="M68" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> space, where both quantities are simultaneously high. A small number of uniformly sampled RANS-AWF points occupy this region and therefore fall outside the engineering model's inflow coverage.</p>

      <fig id="F4" specific-use="star"><label>Figure 4</label><caption><p id="d2e1824">Procedurally generated data for the engineering model dataset, <bold>(a–d)</bold> examples of wind farm layout types in PLayGen, <bold>(e–g)</bold> statistics of generated layouts, <bold>(h)</bold> <inline-formula><mml:math id="M69" display="inline"><mml:mi>U</mml:mi></mml:math></inline-formula> distribution, <bold>(i)</bold> ambient TI distribution, and <bold>(j)</bold> generated <inline-formula><mml:math id="M70" display="inline"><mml:mi>U</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M71" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> samples with boundary.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f04.png"/>

        </fig>

<sec id="Ch1.S2.SS4.SSSx1" specific-use="unnumbered">
  <title>Wind farm layout generation</title>
      <p id="d2e1879">To generate the wind farm layouts, the Plant Layout Generator (PLayGen) by <xref ref-type="bibr" rid="bib1.bibx21" id="text.55"/> is used. PLayGen generates four types of layouts: <italic>cluster</italic>, which consists of irregularly distributed turbines across the domain; <italic>single-string</italic> layouts, which arrange turbines along a single curved string with periodic gaps; <italic>parallel-string</italic> layouts, which feature multiple strings sharing an orientation, similar to conventional offshore wind farms; and <italic>multiple-string</italic> layouts, which comprise several strings with independent orientations, resulting in configurations with strings at multiple angles. Examples are shown in Fig. <xref ref-type="fig" rid="F4"/>a–d.</p>
</sec>
<sec id="Ch1.S2.SS4.SSSx2" specific-use="unnumbered">
  <title>Inflow sampling</title>
      <p id="d2e1906">For each layout, we consider four different combinations of inflow conditions, meaning four combinations of the free-stream velocity <inline-formula><mml:math id="M72" display="inline"><mml:mi>U</mml:mi></mml:math></inline-formula> and ambient turbulence intensity <inline-formula><mml:math id="M73" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. These parameters are coupled in the atmospheric boundary layer, so we employ the correlated sampling framework of <xref ref-type="bibr" rid="bib1.bibx11" id="text.56"/> to generate physically realistic combinations. Following updates to <xref ref-type="bibr" rid="bib1.bibx28" id="text.57"/>, we adopt the <inline-formula><mml:math id="M74" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="normal">A</mml:mi><mml:mo>+</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> turbulence class with reference intensity <inline-formula><mml:math id="M75" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:msup><mml:mi mathvariant="normal">A</mml:mi><mml:mo>+</mml:mo></mml:msup></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.18</mml:mn></mml:mrow></mml:math></inline-formula>. An upper bound of <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">max</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.8</mml:mn></mml:mrow></mml:math></inline-formula> was set to avoid overly extreme flow cases.</p>
      <p id="d2e1988">The operational velocity range is set by the DTU 10 MW reference turbine <xref ref-type="bibr" rid="bib1.bibx4" id="paren.58"/>, which has a rotor diameter <inline-formula><mml:math id="M77" display="inline"><mml:mrow><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">178.3</mml:mn></mml:mrow></mml:math></inline-formula> m, cut-in wind speed <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mrow><mml:mi mathvariant="normal">c</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">in</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>, rated wind speed  <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">rated</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">11.4</mml:mn></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>, and cut-out wind speed <inline-formula><mml:math id="M82" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mrow><mml:mi mathvariant="normal">c</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">out</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">25</mml:mn></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>. Bounds on the velocity standard deviation <inline-formula><mml:math id="M84" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> follow <xref ref-type="bibr" rid="bib1.bibx11" id="text.59"><named-content content-type="post">Tab. 1</named-content></xref>:
            

                  <disp-formula id="Ch1.E6" specific-use="align" content-type="subnumberedsingle"><mml:math id="M85" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E6.7"><mml:mtd><mml:mtext>3a</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mn mathvariant="normal">4</mml:mn><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>≤</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">25</mml:mn><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mtr><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mn mathvariant="normal">0.0025</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>≤</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub><mml:mo>≤</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:msup><mml:mi mathvariant="normal">A</mml:mi><mml:mo>+</mml:mo></mml:msup></mml:mrow></mml:msub><mml:mfenced close=")" open="("><mml:mrow><mml:mn mathvariant="normal">6.8</mml:mn><mml:mo>+</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">3</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:mfrac></mml:mstyle><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:mn mathvariant="normal">3</mml:mn><mml:msup><mml:mfenced close=")" open="("><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mfenced></mml:mrow></mml:mtd></mml:mtr><mml:mlabeledtr id="Ch1.E6.8"><mml:mtd><mml:mtext>3b</mml:mtext></mml:mtd><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>[</mml:mo><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo>]</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

            We populate the inflow space using quasi-Monte Carlo sampling with the improved Sobol sequence of <xref ref-type="bibr" rid="bib1.bibx30" id="text.60"/>. Although <xref ref-type="bibr" rid="bib1.bibx11" id="text.61"/> used the Halton sequence, we found that the Sobol sequence achieves better coverage of the distribution tails <xref ref-type="bibr" rid="bib1.bibx54" id="paren.62"/>. The velocity samples are mapped through a Rayleigh distribution following <xref ref-type="bibr" rid="bib1.bibx28" id="text.63"/> and scaled to the bounds in Eq. (<xref ref-type="disp-formula" rid="Ch1.E6.7"/>). The turbulence samples are transformed via Eq. (<xref ref-type="disp-formula" rid="Ch1.E6.8"/>) to obtain <inline-formula><mml:math id="M86" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, which is then converted to ambient TI through <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">u</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The resulting TI distribution is shown in Fig. <xref ref-type="fig" rid="F4"/>j.</p>
</sec>
<sec id="Ch1.S2.SS4.SSS1">
  <label>2.4.1</label><title>Dataset configuration</title>
      <p id="d2e2336">Table <xref ref-type="table" rid="T1"/> summarises the dataset configuration for both fidelity levels. Both architectures are trained on the same layouts and inflow conditions to permit a fair comparison. However, the data representations differ. The ARU-Net operates on gridded flow fields of shape <inline-formula><mml:math id="M88" display="inline"><mml:mrow><mml:mn mathvariant="normal">256</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">128</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>, whereas the GNO represents each layout as a graph whose turbine nodes carry positional and inflow features and whose probe nodes are placed at evaluation locations. The two models are evaluated on two distinct grids, the CNN grid (<inline-formula><mml:math id="M89" display="inline"><mml:mrow><mml:mn mathvariant="normal">256</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">128</mml:mn></mml:mrow></mml:math></inline-formula>) and the GNN grid (<inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:mn mathvariant="normal">257</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">129</mml:mn></mml:mrow></mml:math></inline-formula>), to assess the sensitivity of each model to the grid changes (Sect. <xref ref-type="sec" rid="Ch1.S3.SS4"/>).</p>

<table-wrap id="T1" specific-use="star"><label>Table 1</label><caption><p id="d2e2386">Dataset configuration for low-fidelity and high-fidelity simulations.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="3">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Parameter</oasis:entry>
         <oasis:entry colname="col2">Low-fidelity (TurbOPark)</oasis:entry>
         <oasis:entry colname="col3">High-fidelity (RANS-AWF)</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">Wind speed (<inline-formula><mml:math id="M91" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">4–25 m s<sup>−1</sup> (Rayleigh/Sobol)</oasis:entry>
         <oasis:entry colname="col3">4–25 m s<sup>−1</sup> (uniform)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Turbulence intensity (<inline-formula><mml:math id="M94" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M95" display="inline"><mml:mn mathvariant="normal">0.25</mml:mn></mml:math></inline-formula> %–<inline-formula><mml:math id="M96" display="inline"><mml:mn mathvariant="normal">80</mml:mn></mml:math></inline-formula> % <xref ref-type="bibr" rid="bib1.bibx11" id="paren.64"/></oasis:entry>
         <oasis:entry colname="col3">3 %–25 % (uniform)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Wind direction</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M97" display="inline"><mml:mn mathvariant="normal">270</mml:mn></mml:math></inline-formula>° (fixed)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M98" display="inline"><mml:mn mathvariant="normal">270</mml:mn></mml:math></inline-formula>° (fixed)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Conditions per layout</oasis:entry>
         <oasis:entry colname="col2">4</oasis:entry>
         <oasis:entry colname="col3">4</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Unique layouts</oasis:entry>
         <oasis:entry colname="col2">2000</oasis:entry>
         <oasis:entry colname="col3">250</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Total samples</oasis:entry>
         <oasis:entry colname="col2">8000</oasis:entry>
         <oasis:entry colname="col3">1000</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Train/val/test split</oasis:entry>
         <oasis:entry colname="col2">75 %/25 %/–</oasis:entry>
         <oasis:entry colname="col3">70 %/10 %/20 %</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e2576">The low-fidelity dataset comprises 8000 TurbOPark simulations generated from 2000 unique layouts, each evaluated at four inflow conditions sampled using the correlated IEC-based framework of <xref ref-type="bibr" rid="bib1.bibx11" id="text.65"/>, as described in Sect. <xref ref-type="sec" rid="Ch1.S2.SS4.SSSx2"/>. The high-fidelity dataset consists of 1000 RANS-AWF simulations repurposed from <xref ref-type="bibr" rid="bib1.bibx50" id="text.66"/>, where the layouts were generated as cluster-like farm configurations using random farm polygons and Poisson disc turbine placement. It comprises 250 unique layouts, each evaluated at four uniformly sampled inflow conditions with <inline-formula><mml:math id="M99" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">4</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup> and <inline-formula><mml:math id="M101" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.03</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0.25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, and is partitioned into 700 training, 100 validation, and 200 test samples. An overview of the RANS-AWF dataset is presented in Fig. <xref ref-type="fig" rid="F3"/>. Consequently, the present fine-tuning results mainly assess generalisation within cluster-like farm layouts rather than across all PLayGen layout classes. In both datasets, layouts are assigned to a single data split before inflow sampling, ensuring that no identical layout appears in both the training and evaluation sets. A key difference between the two datasets is the distribution of inflows. The low-fidelity data span a substantially wider turbulence intensity range (<inline-formula><mml:math id="M102" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> up to 80 %; Fig. <xref ref-type="fig" rid="F4"/>i–j) using the correlated sampling of <xref ref-type="bibr" rid="bib1.bibx11" id="text.67"/>, whereas the RANS-AWF data are restricted to <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.03</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0.25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> (see Fig. <xref ref-type="fig" rid="F3"/>e). Figure <xref ref-type="fig" rid="F5"/> shows the domain in which the data are generated.</p>

      <fig id="F5"><label>Figure 5</label><caption><p id="d2e2695">Modelling domain shared by the U-Net and GNO, indicating the spatial subset of probe locations used when training the GNO.</p></caption>
            <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f05.png"/>

          </fig>

      <p id="d2e2704">For data generation, the same fixed-resolution domain for all layouts is required by the CNN-based approach. For the GNO, no fixed grid is necessary. Owing to its grid invariance, only a spatial subset of the domain is queried during training to improve computational efficiency. This concept is shown in Fig. <xref ref-type="fig" rid="F5"/>.</p>
</sec>
</sec>
<sec id="Ch1.S2.SS5">
  <label>2.5</label><title>Attention residual U-Net (ARU-Net)</title>
      <p id="d2e2718">The attention residual U-Net (ARU-Net) is a convolutional surrogate model that predicts wind farm wake fields from turbine layout rasters and inflow specifications. Its architecture follows the encoder–decoder paradigm established by U-Net <xref ref-type="bibr" rid="bib1.bibx51" id="paren.68"/>, with several enhancements to improve feature extraction and gradient flow. The encoder extracts hierarchical spatial features through successive downsampling stages. The bottleneck integrates inflow conditions, and the decoder reconstructs the flow field at the original resolution via skip connections that preserve fine-grained spatial information. A similar architecture was previously used in a multi-fidelity transfer learning context in <xref ref-type="bibr" rid="bib1.bibx50" id="text.69"/>. The remainder of this section describes the configuration used in the present work.</p>
      <p id="d2e2727">The encoder comprises six resolution levels connected by five downsampling stages, with channel counts increasing at each stage and a fixed maximum channel count. Each encoder block contains two <inline-formula><mml:math id="M104" display="inline"><mml:mrow><mml:mn mathvariant="normal">3</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:math></inline-formula> convolutional layers with residual connections,

            <disp-formula id="Ch1.E9" content-type="numbered"><label>4</label><mml:math id="M105" display="block"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">ψ</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mspace width="-0.125em" linebreak="nobreak"/><mml:mfenced close=")" open="("><mml:mrow><mml:mi mathvariant="script">F</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>;</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="bold-italic">θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M106" display="inline"><mml:mi mathvariant="script">F</mml:mi></mml:math></inline-formula> denotes the stacked convolution–normalisation transformation with learnable parameters <inline-formula><mml:math id="M107" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">θ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M108" display="inline"><mml:mi mathvariant="script">P</mml:mi></mml:math></inline-formula> is a <inline-formula><mml:math id="M109" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> projection that matches channel dimensions when necessary, and <inline-formula><mml:math id="M110" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ψ</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="normal">Mish</mml:mi></mml:mrow></mml:math></inline-formula> <xref ref-type="bibr" rid="bib1.bibx37" id="paren.70"/> is the activation function. Group normalisation is applied after each convolution. Downsampling employs a learned Gaussian blur filter to avoid spatial aliasing artefacts, while the decoder uses transposed convolutions for upsampling. Squeeze-and-excitation (SE) blocks <xref ref-type="bibr" rid="bib1.bibx27" id="paren.71"/> provide channel-wise feature recalibration within each encoder and decoder block, as seen in Eq. (<xref ref-type="disp-formula" rid="Ch1.E10"/>):
          

                <disp-formula id="Ch1.E10" specific-use="align" content-type="subnumberedsingle"><mml:math id="M111" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E10.11"><mml:mtd><mml:mtext>5a</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold-italic">z</mml:mi></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:mi>H</mml:mi><mml:mi>W</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:munder><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:munder><mml:msub><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E10.12"><mml:mtd><mml:mtext>5b</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="bold-italic">s</mml:mi></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">ψ</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mfenced close=")" open="("><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi mathvariant="italic">ψ</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mi mathvariant="bold-italic">z</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E10.13"><mml:mtd><mml:mtext>5c</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mover accent="true"><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">s</mml:mi><mml:mo>⊙</mml:mo><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M112" display="inline"><mml:mi mathvariant="bold-italic">z</mml:mi></mml:math></inline-formula> is the spatially pooled feature vector, <inline-formula><mml:math id="M113" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M114" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> are learnable weights with a reduction factor of <inline-formula><mml:math id="M115" display="inline"><mml:mn mathvariant="normal">16</mml:mn></mml:math></inline-formula>, <inline-formula><mml:math id="M116" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ψ</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the rectified linear unit (ReLU) activation function <xref ref-type="bibr" rid="bib1.bibx1" id="paren.72"/>, <inline-formula><mml:math id="M117" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ψ</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the sigmoid function, and <inline-formula><mml:math id="M118" display="inline"><mml:mo>⊙</mml:mo></mml:math></inline-formula> denotes the index-wise product. Attention gates (AGs) <xref ref-type="bibr" rid="bib1.bibx42" id="paren.73"/> are applied to skip connections to suppress irrelevant features before concatenation with decoder activations, allowing the network to focus on spatially relevant wake structures, denoted by AG in Fig. <xref ref-type="fig" rid="F6"/>.</p>

      <fig id="F6" specific-use="star"><label>Figure 6</label><caption><p id="d2e3093">Overview of the attention residual U-Net (ARU-Net) architecture. The model follows an encoder–decoder structure with skip connections, incorporating squeeze-and-excitation (SE) attention in each block and attention gates (AG) on skip connections. Inflow conditions are injected at the spatial bottleneck and through feature-wise linear modulation (FiLM) layers.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f06.png"/>

        </fig>

      <p id="d2e3103">Conditioning on inflow variables <inline-formula><mml:math id="M119" display="inline"><mml:mrow><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>∈</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> is achieved through two mechanisms. At the spatial bottleneck, the scalar inputs are projected to match the bottleneck channel dimension, broadcast across the spatial dimensions, and added to the feature map. This is followed by channel mixing using an expansion, followed by a compression pathway, such that the channels are expanded by <inline-formula><mml:math id="M120" display="inline"><mml:mrow><mml:mi>c</mml:mi><mml:mo>→</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mi>c</mml:mi><mml:mo>→</mml:mo><mml:mi>c</mml:mi></mml:mrow></mml:math></inline-formula>, with a residual connection and depthwise-separable spatial refinement. Additionally, FiLM layers modulate intermediate feature maps throughout the encoder (from the second block onward) and all decoder blocks:

            <disp-formula id="Ch1.E14" content-type="numbered"><label>6</label><mml:math id="M121" display="block"><mml:mrow><mml:mi mathvariant="normal">FiLM</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mo>⊙</mml:mo><mml:mo mathsize="1.1em">(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>+</mml:mo><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>)</mml:mo><mml:mo mathsize="1.1em">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">β</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M122" display="inline"><mml:mi mathvariant="italic">γ</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M123" display="inline"><mml:mi mathvariant="italic">β</mml:mi></mml:math></inline-formula> are learned scale and MLP scalers for the inflow conditions, with outputs clamped to <inline-formula><mml:math id="M124" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.3</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M125" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.1</mml:mn></mml:mrow></mml:math></inline-formula>, respectively, to ensure stable training. Regularisation is applied through dropout (<inline-formula><mml:math id="M126" display="inline"><mml:mn mathvariant="normal">10</mml:mn></mml:math></inline-formula> % in the bottleneck and decoder) and stochastic depth with a linear schedule that increases from <inline-formula><mml:math id="M127" display="inline"><mml:mn mathvariant="normal">0</mml:mn></mml:math></inline-formula> % at the shallowest encoder block to a peak, determined during hyperparameter tuning, at the deepest encoder blocks and is mirrored symmetrically in the decoder.</p>
      <p id="d2e3255">To select the ARU-Net architecture and training hyperparameters, a Bayesian hyperparameter optimisation was conducted on the TurbOPark engineering dataset using the Optuna framework <xref ref-type="bibr" rid="bib1.bibx2" id="paren.74"/> with the tree-structured Parzen estimator (TPE) sampler. A total of 200 trials were evaluated, each trained for a fixed budget of 50 epochs. The final selected model was subsequently trained to convergence on the full TurbOPark dataset. The search space for the hyperparameter tuning can be seen in Table <xref ref-type="table" rid="T2"/>. A weight decay of 0.01 was applied through the AdamW optimiser, and gradients were clipped to a maximum norm of 1.0.</p>
      <p id="d2e3263">For the ARU-Net, the inflow conditioning variables are scaled to the unit interval via min–max normalisation: <inline-formula><mml:math id="M128" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">4.0</mml:mn><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mn mathvariant="normal">25.0</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup> and <inline-formula><mml:math id="M130" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.03</mml:mn><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mn mathvariant="normal">0.25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> are each mapped to <inline-formula><mml:math id="M131" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>. The target flow field undergoes a log-deficit transformation. Because RANS-AWF simulations can produce local speed-ups from blockage effects, cell velocities exceeding <inline-formula><mml:math id="M132" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are first clamped to <inline-formula><mml:math id="M133" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The relative wake deficit, <inline-formula><mml:math id="M134" display="inline"><mml:mrow><mml:mi mathvariant="italic">δ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi>u</mml:mi><mml:mo>/</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, then quantifies the fractional velocity reduction at each grid cell. Because the logarithm is singular at zero, a floor value <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ε</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> is applied, giving the clamped deficit <inline-formula><mml:math id="M136" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi>c</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>max⁡</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="italic">δ</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi mathvariant="italic">ε</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The normalised target <inline-formula><mml:math id="M137" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="italic">δ</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> is then obtained as

            <disp-formula id="Ch1.E15" content-type="numbered"><label>7</label><mml:math id="M138" display="block"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="italic">δ</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi>ln⁡</mml:mi><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi>c</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:mi>ln⁡</mml:mi><mml:msub><mml:mi mathvariant="italic">ε</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mi>ln⁡</mml:mi><mml:msub><mml:mi mathvariant="italic">ε</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          This log transformation compresses the wide dynamic range of wake deficits, improving the network's ability to resolve both strong and near-wake losses and subtle far-wake recovery.</p>

<table-wrap id="T2"><label>Table 2</label><caption><p id="d2e3511">Hyperparameter search space for the ARU-Net architecture (15 dimensions). The search was conducted using the Optuna framework. Categorical choices are denoted by braces <inline-formula><mml:math id="M139" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> and continuous ranges by brackets <inline-formula><mml:math id="M140" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="2">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Parameter</oasis:entry>
         <oasis:entry colname="col2">Search space</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">Architecture</oasis:entry>
         <oasis:entry colname="col2"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Initial channels</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M141" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">16</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">24</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">32</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">48</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Encoder depth</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M142" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">3</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">4</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">5</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Channel multiplier</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M143" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">1.3</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">2.5</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Max channels</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M144" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">256</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">384</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">512</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Kernel size</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M145" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">3</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">5</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Convolutions per block</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M146" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">3</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Flags (SE, Attn, L.Down, L.Up)</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M147" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:mtext>on, off</mml:mtext><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Regularisation</oasis:entry>
         <oasis:entry colname="col2"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Dropout rate</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M148" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0.25</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Stochastic depth (<inline-formula><mml:math id="M149" display="inline"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi mathvariant="normal">sd</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M150" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0.15</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Optimisation</oasis:entry>
         <oasis:entry colname="col2"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Learning rate (log)</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M151" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Weight decay (log)</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M152" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Gradient clip norm</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M153" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">2.0</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

</sec>
<sec id="Ch1.S2.SS6">
  <label>2.6</label><title>Graph neural operator (GNO)</title>
      <p id="d2e3923">The GNN approach uses the GNO model, first introduced in <xref ref-type="bibr" rid="bib1.bibx54" id="text.75"/>. The GNO is a graph-based surrogate model that enables the prediction of flow fields. An overview of the model is presented in Fig. <xref ref-type="fig" rid="F7"/>. The architecture is organised into three stages: an encoder (<inline-formula><mml:math id="M154" display="inline"><mml:mi mathvariant="script">E</mml:mi></mml:math></inline-formula>) that projects turbine features and their spatial relationships into a latent space, an approximator (<inline-formula><mml:math id="M155" display="inline"><mml:mi mathvariant="script">A</mml:mi></mml:math></inline-formula>) that iteratively refines turbine states through learned message passing, and a decoder (<inline-formula><mml:math id="M156" display="inline"><mml:mi mathvariant="script">D</mml:mi></mml:math></inline-formula>) that evaluates the resulting flow at arbitrary locations.</p>

      <fig id="F7" specific-use="star"><label>Figure 7</label><caption><p id="d2e3954">Overview of the GNO model with the added global context. The three main components remain encoder (<inline-formula><mml:math id="M157" display="inline"><mml:mi mathvariant="script">E</mml:mi></mml:math></inline-formula>), approximator (<inline-formula><mml:math id="M158" display="inline"><mml:mi mathvariant="script">A</mml:mi></mml:math></inline-formula>), and decoder (<inline-formula><mml:math id="M159" display="inline"><mml:mi mathvariant="script">D</mml:mi></mml:math></inline-formula>).</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f07.png"/>

        </fig>

      <p id="d2e3984">The architecture has one addition: a global context that supplies inflow conditions to the decoder, as illustrated in Fig. <xref ref-type="fig" rid="F7"/>, following the path of <inline-formula><mml:math id="M160" display="inline"><mml:mi mathvariant="bold">Ω</mml:mi></mml:math></inline-formula>. Rather than concatenating the raw inflow values <inline-formula><mml:math id="M161" display="inline"><mml:mrow><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>∈</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mi>U</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> directly to the process node, which would mix observational and latent spaces, a small encoder <inline-formula><mml:math id="M162" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> first projects <inline-formula><mml:math id="M163" display="inline"><mml:mi mathvariant="bold">Ω</mml:mi></mml:math></inline-formula> into a latent representation <inline-formula><mml:math id="M164" display="inline"><mml:mi mathvariant="bold-italic">ω</mml:mi></mml:math></inline-formula> with the same dimensionality as the latent space node features. Because its sole purpose is to bridge this dimensional mismatch, <inline-formula><mml:math id="M165" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is implemented as a single-hidden-layer neural network,
          

                <disp-formula id="Ch1.E16" specific-use="align" content-type="subnumberedsingle"><mml:math id="M166" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E16.17"><mml:mtd><mml:mtext>8a</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msubsup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">ψ</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="-0.125em"/><mml:mfenced close=")" open="("><mml:mrow><mml:msup><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo><mml:mo>⊤</mml:mo></mml:mrow></mml:msup><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E16.18"><mml:mtd><mml:mtext>8b</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">ω</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo><mml:mo>⊤</mml:mo></mml:mrow></mml:msup><mml:msubsup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msubsup><mml:mo>+</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          where <inline-formula><mml:math id="M167" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is the hidden-layer activation, and <inline-formula><mml:math id="M168" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M169" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> are the learnable weights and biases of layer <inline-formula><mml:math id="M170" display="inline"><mml:mi>l</mml:mi></mml:math></inline-formula>. The resulting <inline-formula><mml:math id="M171" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">ω</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">Ω</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="bold">Ω</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is concatenated to each process node prior to decoding. The remaining hyperparameter names are adopted directly from <xref ref-type="bibr" rid="bib1.bibx54" id="text.76"/>, with the latent space dimension (<inline-formula><mml:math id="M172" display="inline"><mml:mi>Q</mml:mi></mml:math></inline-formula>), hidden layer size of the internal MLP (<inline-formula><mml:math id="M173" display="inline"><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi mathvariant="normal">int</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) and hidden layers (<inline-formula><mml:math id="M174" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mi mathvariant="normal">int</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), the number of message-passing steps in the wind turbine processor (<inline-formula><mml:math id="M175" display="inline"><mml:mrow><mml:msub><mml:mi>M</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) as seen in Fig. <xref ref-type="fig" rid="F7"/>, and hidden layer size of the decoder (<inline-formula><mml:math id="M176" display="inline"><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi mathvariant="normal">dec</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) and the decoder hidden layers (<inline-formula><mml:math id="M177" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mi mathvariant="normal">dec</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). To ensure that changes in both the data type and the model architecture are adequately addressed, a smaller grid search has been conducted with variations in these hyperparameters.</p>
      <p id="d2e4338">The GNO uses the normalisation and regularisation techniques from <xref ref-type="bibr" rid="bib1.bibx54" id="text.77"/>, normalising inputs and targets to the min–max range, applying dropout with a rate of 10 %, and using layer normalisation. In addition, during transfer learning, gradient clipping normalisation has been added as an optional addition, with a max <inline-formula><mml:math id="M178" display="inline"><mml:mrow><mml:msup><mml:mi>l</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> norm of 1.0.</p>
      <p id="d2e4355">In Fig. <xref ref-type="fig" rid="F8"/> an overview of the data flow is provided, demonstrating how the model stages process the graph and a prediction is made. This design decouples the turbine interaction model from the spatial prediction, allowing new locations to be evaluated without recomputing the upstream turbine graph. A full description of the base architecture is given in <xref ref-type="bibr" rid="bib1.bibx54" id="text.78"/>. The remainder of this section describes an improvement introduced in the present work.</p>

      <fig id="F8" specific-use="star"><label>Figure 8</label><caption><p id="d2e4365">GNO model input and output augmentation. The model stages, encoder <inline-formula><mml:math id="M179" display="inline"><mml:mi mathvariant="script">E</mml:mi></mml:math></inline-formula>, approximator <inline-formula><mml:math id="M180" display="inline"><mml:mi mathvariant="script">A</mml:mi></mml:math></inline-formula>, and decoder <inline-formula><mml:math id="M181" display="inline"><mml:mi mathvariant="script">D</mml:mi></mml:math></inline-formula>, are displayed as simple blocks; see Fig. <xref ref-type="fig" rid="F7"/> for the expanded model stages.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f08.png"/>

        </fig>

      <p id="d2e4397">To distinguish between the ARU-Net and the GNO, it is at times convenient to refer to the GNO with the operator notation, <inline-formula><mml:math id="M182" display="inline"><mml:mi mathvariant="script">G</mml:mi></mml:math></inline-formula>. All considered model variations are based on the best original model, designated as <inline-formula><mml:math id="M183" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mi mathvariant="normal">org</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. In addition, three smaller and three larger models have been considered. These variations are reported here in order of size: <inline-formula><mml:math id="M184" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M185" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M186" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M187" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mi mathvariant="normal">org</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M188" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M189" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M190" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. The actual model configurations are reported in Table <xref ref-type="table" rid="T3"/>. In addition, for the step-based learning rate schedule, two initial learning rates, <inline-formula><mml:math id="M191" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M192" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, have been considered, each divided by 10 at 200 and 350 epochs, respectively.</p>
</sec>
<sec id="Ch1.S2.SS7">
  <label>2.7</label><title>Training and validation</title>
      <p id="d2e4561">For training the respective models, different stochastic gradient-based optimisers have been used: the GNO has been trained with Adam <xref ref-type="bibr" rid="bib1.bibx31" id="paren.79"/> using default parameters, while the ARU-Net has been trained using AdamW <xref ref-type="bibr" rid="bib1.bibx35" id="paren.80"/>, which decouples weight decay from the adaptive learning rate by applying it directly to the parameters, ensuring that regularisation is applied uniformly regardless of gradient history. For the GNO, training is monitored using the validation set, which is evaluated every five epochs. If an improvement of less than <inline-formula><mml:math id="M193" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">7</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> is observed over 1000 consecutive epochs, training is stopped. During transfer learning to the RANS-AWF dataset, the limit is lowered to 200 epochs. The ARU-Net and GNO use slightly different training stacks. The ARU-Net is built on PyTorch <xref ref-type="bibr" rid="bib1.bibx44" id="paren.81"/>, while the GNO is built on a JAX-based framework <xref ref-type="bibr" rid="bib1.bibx7" id="paren.82"/>, using Jraph <xref ref-type="bibr" rid="bib1.bibx20" id="paren.83"/> for GNN abstractions, Flax <xref ref-type="bibr" rid="bib1.bibx24" id="paren.84"/> for neural network layers, and PyTorch Geometric <xref ref-type="bibr" rid="bib1.bibx17" id="paren.85"/> for graph construction and data loading. All training was done on a system featuring two AMD EPYC 7351 16-core CPUs (32 cores, 2.4 GHz), 256 GB of DDR4 RAM (2.666 GHz), and an 8 GB NVIDIA Quadro RTX 4000 GPU <xref ref-type="bibr" rid="bib1.bibx57" id="paren.86"/>.</p>
<sec id="Ch1.S2.SS7.SSSx1" specific-use="unnumbered">
  <title>Performance metrics and loss function</title>
      <p id="d2e4612">During training and validation, two metrics are considered: the <inline-formula><mml:math id="M194" display="inline"><mml:mrow><mml:msup><mml:mi>l</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>-norm-based mean absolute error (MAE) and the <inline-formula><mml:math id="M195" display="inline"><mml:mrow><mml:msup><mml:mi>l</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>-norm-based mean squared error (MSE). MSE is used as the loss function (<inline-formula><mml:math id="M196" display="inline"><mml:mi mathvariant="script">L</mml:mi></mml:math></inline-formula>) for both the ARU-Net and the GNO. In addition, during testing, the root mean squared error (RMSE) and an <inline-formula><mml:math id="M197" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score are also reported. MAE and MSE are used to compare models during development, while RMSE is chosen for final evaluation as it is more readily interpretable than MSE. While most of these metrics are standard for flow surrogates, the <inline-formula><mml:math id="M198" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score is less common. The <inline-formula><mml:math id="M199" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score is typically used in classification tasks, where it quantifies performance by comparing true positives (<inline-formula><mml:math id="M200" display="inline"><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mi mathvariant="normal">p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), false positives (<inline-formula><mml:math id="M201" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), and false negatives (<inline-formula><mml:math id="M202" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">n</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). Here, the <inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score is used to evaluate how well the wake boundary is captured. A binary mask is created using a threshold (<inline-formula><mml:math id="M204" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>): grid points falling below the threshold are classified as unwaked and those above as waked. Equation <xref ref-type="disp-formula" rid="Ch1.E19"/> shows the definitions of the metrics applied in this paper:
            

                  <disp-formula id="Ch1.E19" specific-use="align" content-type="subnumberedsingle"><mml:math id="M205" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E19.20"><mml:mtd><mml:mtext>9a</mml:mtext></mml:mtd><mml:mtd><mml:mstyle class="stylechange" displaystyle="true"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi mathvariant="normal">MAE</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>N</mml:mi></mml:mfrac></mml:mstyle><mml:msub><mml:mfenced close="∥" open="∥"><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>′</mml:mo></mml:msup></mml:mrow></mml:mfenced><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E19.21"><mml:mtd><mml:mtext>9b</mml:mtext></mml:mtd><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="script">L</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="normal">MSE</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>N</mml:mi></mml:mfrac></mml:mstyle><mml:msubsup><mml:mfenced open="∥" close="∥"><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>′</mml:mo></mml:msup></mml:mrow></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mi mathvariant="normal">RMSE</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:msqrt><mml:mi>N</mml:mi></mml:msqrt></mml:mfrac></mml:mstyle><mml:msub><mml:mfenced open="∥" close="∥"><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>′</mml:mo></mml:msup></mml:mrow></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E19.22"><mml:mtd><mml:mtext>9c</mml:mtext></mml:mtd><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>⋅</mml:mo><mml:mi mathvariant="normal">precision</mml:mi><mml:mo>⋅</mml:mo><mml:mi mathvariant="normal">recall</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">precision</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="normal">recall</mml:mi></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>t</mml:mi><mml:mi mathvariant="normal">p</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>t</mml:mi><mml:mi mathvariant="normal">p</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">p</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">n</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

            where <inline-formula><mml:math id="M206" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula> represents the target velocities, <inline-formula><mml:math id="M207" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>′</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> represents the predicted velocities, and <inline-formula><mml:math id="M208" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> is the number of observations. The <inline-formula><mml:math id="M209" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score, defined as the harmonic mean of precision and recall, is shown in two equivalent forms: one using precision and recall and one using the classification outcomes <inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mi mathvariant="normal">p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M212" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">n</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> to emphasise its interpretation as an overall classification accuracy metric.</p>
</sec>
<sec id="Ch1.S2.SS7.SSSx2" specific-use="unnumbered">
  <title>Multi-fidelity transfer learning</title>
      <p id="d2e4999">A range of different strategies has been tested to perform the transfer learning. The most straightforward approach is to update all weights during transfer learning; however, in some cases, this has been reported to be less efficient than freezing parts of the network during the transfer learning stage <xref ref-type="bibr" rid="bib1.bibx26" id="paren.87"/>. Updating all parameters during transfer learning is termed fine-tuning, whereas freezing parts of the network is collectively referred to as weight freezing. Finally, the last considered approach is a variation of parameter-efficient fine-tuning (PEFT) called low-rank adaptation (LoRA) by <xref ref-type="bibr" rid="bib1.bibx26" id="text.88"/>, which is referred to as LoRA fine-tuning. During fine-tuning with LoRA, the pre-trained weights <inline-formula><mml:math id="M213" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">W</mml:mi><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msubsup><mml:mo>∈</mml:mo><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mo>×</mml:mo><mml:mi>p</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> are frozen across the entire network. LoRA adapters are introduced in all layers of the targeted MLPs, while the remaining MLPs are kept fully frozen. For each adapted layer, the forward pass becomes
            

                  <disp-formula id="Ch1.E23" specific-use="align" content-type="subnumberedsingle"><mml:math id="M214" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E23.24"><mml:mtd><mml:mtext>10a</mml:mtext></mml:mtd><mml:mtd><mml:mstyle class="stylechange" displaystyle="true"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msup><mml:mi mathvariant="bold-italic">ξ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mfenced close=")" open="("><mml:mrow><mml:msubsup><mml:mi mathvariant="bold">W</mml:mi><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msubsup><mml:mo>+</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:msup><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:mfenced><mml:msup><mml:mi mathvariant="bold-italic">ξ</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mstyle class="stylechange" displaystyle="true"/></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E23.25"><mml:mtd><mml:mtext>10b</mml:mtext></mml:mtd><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi mathvariant="normal">Δ</mml:mi><mml:msup><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="bold">B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:msup><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mstyle class="stylechange" displaystyle="true"/></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E23.26"><mml:mtd><mml:mtext>10c</mml:mtext></mml:mtd><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msubsup><mml:mi mathvariant="bold">A</mml:mi><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msubsup><mml:mo>∼</mml:mo><mml:mi mathvariant="script">N</mml:mi><mml:mo>(</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mi>r</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="1em"/><mml:msubsup><mml:mi mathvariant="bold">B</mml:mi><mml:mn mathvariant="normal">0</mml:mn><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mstyle displaystyle="true" class="stylechange"/></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

            where <inline-formula><mml:math id="M215" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>∈</mml:mo><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mo>×</mml:mo><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M216" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold">B</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>∈</mml:mo><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mrow><mml:mi>p</mml:mi><mml:mo>×</mml:mo><mml:mi>r</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, with a pre-determined rank <inline-formula><mml:math id="M217" display="inline"><mml:mi>r</mml:mi></mml:math></inline-formula> that controls the degree of parameter reduction. The initialisation in Eq. (<xref ref-type="disp-formula" rid="Ch1.E23.26"/>) ensures <inline-formula><mml:math id="M218" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:msup><mml:mi mathvariant="bold">W</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>l</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></inline-formula> at the start of fine-tuning, so the model initially reproduces the pre-trained predictions exactly.</p>
</sec>
</sec>
<sec id="Ch1.S2.SS8">
  <label>2.8</label><title>Testing and validation</title>
      <p id="d2e5320">To test the performance of the neural networks, a separate test set is used to avoid data leakage. While it is a moderate dataset of 200 inflow–layout combinations, it is still more than what is practical for creating qualitative plots, such as streamwise velocity deficit profiles and flow field plots. To ensure a representative sub-sample, the test set is grouped by layout size into three categories based on the number of turbines. Within each size category, three inflow conditions are selected targeting the diagonal of the (<inline-formula><mml:math id="M219" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M220" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) space. The low, medium, and high regions are defined by dividing the wind speed and ambient TI ranges into three equal bins across all test cases. For each size–inflow combination, the case closest to the centroid of each category in the (<inline-formula><mml:math id="M221" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M222" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) space is selected, yielding nine representative test cases in total. The three size categories are split into the following sizes (<inline-formula><mml:math id="M223" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>): small (S, <inline-formula><mml:math id="M224" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">47</mml:mn></mml:mrow></mml:math></inline-formula>), medium (M, <inline-formula><mml:math id="M225" display="inline"><mml:mrow><mml:mn mathvariant="normal">47</mml:mn><mml:mo>&lt;</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">110</mml:mn></mml:mrow></mml:math></inline-formula>), and large (L, <inline-formula><mml:math id="M226" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:mn mathvariant="normal">110</mml:mn></mml:mrow></mml:math></inline-formula>), where the S–M boundary is the median of sub-large layouts, and the M–L boundary is set at 110 turbines. These thresholds yield 21 small, 21 medium, and 8 large layouts. The selection of these regions is shown visually in Fig. <xref ref-type="fig" rid="F9"/>.</p>

      <fig id="F9"><label>Figure 9</label><caption><p id="d2e5432">Selection of the RANS-AWF test subset for qualitative evaluation. Background scatter points represent the layouts in the test set, grouped by turbine count <inline-formula><mml:math id="M227" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> into S, M, and L. The parameter space of (<inline-formula><mml:math id="M228" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M229" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) is divided into low, medium, and high regions along the diagonal. For each size category, the case closest to the centroid of each (<inline-formula><mml:math id="M230" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M231" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) region is selected. The centroids of each background region are marked with a black dot, surrounded by a circle encompassing the three size-selected test cases.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f09.png"/>

        </fig>

      <p id="d2e5496">For the transfer learning approach to be feasible, it is a prerequisite that the source and target domains share sufficient similarities for the learned representations to generalise, while the high-fidelity data remain sufficiently different that training on both provides meaningful improvements in accuracy, justifying the additional cost. Figure <xref ref-type="fig" rid="F10"/> examines that balance for the two fidelity levels used in this work, with Fig. <xref ref-type="fig" rid="F10"/>a–d displaying the flow case from the RANS-AWF test dataset with the largest overall RMSE between TurbOPark and RANS-AWF (<inline-formula><mml:math id="M232" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">185</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M233" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5.90</mml:mn></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>, <inline-formula><mml:math id="M235" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">3.69</mml:mn></mml:mrow></mml:math></inline-formula> %).</p>
      <p id="d2e5562">Figure <xref ref-type="fig" rid="F10"/>a shows the cross-stream velocity profiles, meaning the relative streamwise velocity deficit <inline-formula><mml:math id="M236" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>u</mml:mi><mml:mo>/</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> across the lateral <inline-formula><mml:math id="M237" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> direction, at specific downstream <inline-formula><mml:math id="M238" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> locations. It shows that, even in this worst-case scenario, the two models share broad structural similarities. Overall, the wind farm wake expansion and extent of the wake region are consistent between TurbOPark and RANS-AWF. However, TurbOPark generally overestimates the magnitude of the wake deficit compared to RANS-AWF (Fig. <xref ref-type="fig" rid="F10"/>a, f), consistent with earlier findings that TurbOPark predicts stronger wind farm wake effects than RANS <xref ref-type="bibr" rid="bib1.bibx60" id="paren.89"/>. The individual turbine wakes in TurbOPark also remain distinctly separated, especially for low TI, where the turbulent mixing is at a minimum, producing a jagged cross-stream profile, whereas the RANS-AWF solution shows significantly greater lateral mixing that merges neighbouring wakes into a smooth deficit profile. The two-dimensional velocity maps (Fig. <xref ref-type="fig" rid="F10"/>b–c) confirm these observations. TurbOPark retains a jagged wake structure for all downstream distances, while the RANS-AWF field is laterally diffused a few rotor diameters downstream. From Fig. <xref ref-type="fig" rid="F10"/>d, it can further be seen that the RANS-AWF dataset contains blockage upstream of the wind farm and speed ups on the side of the wind farm.</p>
      <p id="d2e5608">This has implications for the ARU-Net target representation, since velocities above <inline-formula><mml:math id="M239" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are clamped to <inline-formula><mml:math id="M240" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> before the logarithmic wake deficit transformation. The ARU-Net is not trained to reproduce these local speed-up regions, whereas the GNO predicts velocity directly and is not subject to the same target-space restriction. This is, however, expected to have limited influence on the threshold-based wake metrics reported below, since the wake mask is defined using <inline-formula><mml:math id="M241" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, while clamped speed-up and unwaked regions are assigned the much smaller floor value <inline-formula><mml:math id="M242" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ε</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. The effect is therefore mainly relevant for full-field error comparisons and for applications in which blockage-induced acceleration is of interest.</p>
      <p id="d2e5675">The quantile-to-quantile density scatter of the wake region (Fig. <xref ref-type="fig" rid="F10"/>e) quantifies this difference, giving an RMSE of <inline-formula><mml:math id="M243" display="inline"><mml:mn mathvariant="normal">1.31</mml:mn></mml:math></inline-formula> %, an MAE of <inline-formula><mml:math id="M244" display="inline"><mml:mn mathvariant="normal">0.48</mml:mn></mml:math></inline-formula> %, and a coefficient of determination of <inline-formula><mml:math id="M245" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.47</mml:mn></mml:mrow></mml:math></inline-formula>. The low <inline-formula><mml:math id="M246" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> indicates that, despite the broad similarities between the wakes, the two models differ significantly in the pointwise magnitudes of the predicted wake deficits. The mean streamwise wake recovery curves (Fig. <xref ref-type="fig" rid="F10"/>f) further illustrate this difference. The lateral average wake deficit calculated by TurbOPark is consistently larger than the RANS-AWF reference downstream of the wind farm. From Fig. <xref ref-type="fig" rid="F10"/>f, it can also be observed that the RANS-AWF model includes decreased wind speed upstream from the wind farm due to blockage.</p>
      <p id="d2e5725">Finally, the RMSE between the two models, binned by the free-stream velocity and ambient TI (Fig. <xref ref-type="fig" rid="F10"/>g), shows a clear dependency on the inflow conditions. The largest difference between the two models occurs at low wind speeds and low <inline-formula><mml:math id="M247" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, where high thrust coefficients increase the individual wake deficits and reduce turbulent mixing, thereby limiting both turbulent mixing and streamwise recovery. Especially at wind speeds below <inline-formula><mml:math id="M248" display="inline"><mml:mn mathvariant="normal">13</mml:mn></mml:math></inline-formula> m s<sup>−1</sup>, the difference between TurbOPark and RANS-AWF is most significant.</p>

      <fig id="F10" specific-use="star"><label>Figure 10</label><caption><p id="d2e5762">Comparison between TurbOPark and RANS-AWF. <bold>(a)</bold> Cross-stream velocity profiles (<inline-formula><mml:math id="M250" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>u</mml:mi><mml:mo>/</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>). <bold>(b–c)</bold> Two-dimensional maps of <inline-formula><mml:math id="M251" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>u</mml:mi><mml:mo>/</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> for an arbitrary case. <bold>(d)</bold> Spatial difference map (<inline-formula><mml:math id="M252" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>u</mml:mi><mml:mo>/</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) on a symmetric logarithmic scale. <bold>(e)</bold> Quantile-to-quantile density scatter of effective velocity in the wake region, with RMSE, MAE, and <inline-formula><mml:math id="M253" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>. <bold>(f)</bold> Streamwise wake recovery as laterally averaged <inline-formula><mml:math id="M254" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>u</mml:mi><mml:mo>/</mml:mo><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> versus <inline-formula><mml:math id="M255" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mo>/</mml:mo><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula>. <bold>(g)</bold> RMSE between models binned by freestream wind speed and turbulence intensity (<inline-formula><mml:math id="M256" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>).</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f10.png"/>

        </fig>

</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Results and discussion</title>
      <p id="d2e5902">This section first presents the results of the architecture search for engineering-model-based source models, followed by the transfer learning results. Based on these, the best-performing ARU-Net and GNO models are selected and analysed together in terms of prediction accuracy and ability to resolve the wake region of the flow. This analysis comprises both a qualitative comparison, using cross-stream velocity deficit plots and flow field plots of velocity predictions from both models, and a quantitative comparison of performance metrics.</p>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Engineering source model – architecture search</title>
      <p id="d2e5913">To investigate the effect of model architecture, a small hyperparameter search was performed for both the ARU-Net and the GNO. The best configuration from the ARU-Net hyperparameter search (Table <xref ref-type="table" rid="T2"/>) uses five encoder levels with channel counts of 24, 48, 96, 192, and 384, yielding 16 113 456 parameters. The optimiser enabled SE blocks, AGs, and learnable downsampling but preferred transposed convolutions (<inline-formula><mml:math id="M257" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> kernels, stride 2) over the bilinear-plus-learned-convolution alternative for upsampling. Training uses an effective batch size of 32 (physical batch size of 8 with 4 gradient accumulation steps), 16 bit floating-point mixed-precision arithmetic, and no learning rate schedule. When trained to converge on TurbOPark, the selected model achieves a full-domain RMSE of <inline-formula><mml:math id="M258" display="inline"><mml:mn mathvariant="normal">0.1050</mml:mn></mml:math></inline-formula> m s<sup>−1</sup> and MAE of <inline-formula><mml:math id="M260" display="inline"><mml:mn mathvariant="normal">0.0225</mml:mn></mml:math></inline-formula> m s<sup>−1</sup> on the validation set. Table <xref ref-type="table" rid="T3"/> shows the results of this search.</p>

<table-wrap id="T3" specific-use="star"><label>Table 3</label><caption><p id="d2e5974">Source model architecture search on TurbOPark dataset, evaluated on validation set. The ARU-Net architecture was selected via a 200-trial Optuna search (Table <xref ref-type="table" rid="T2"/>); the GNO results show the best result per architecture across 14 configurations (7 architectures <inline-formula><mml:math id="M262" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 2 initial learning rates). Best value per metric column in bold.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="9">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:colspec colnum="6" colname="col6" align="right"/>
     <oasis:colspec colnum="7" colname="col7" align="right"/>
     <oasis:colspec colnum="8" colname="col8" align="right"/>
     <oasis:colspec colnum="9" colname="col9" align="right"/>
     <oasis:thead>
       <oasis:row>

         <oasis:entry colname="col1">Model</oasis:entry>

         <oasis:entry namest="col2" nameend="col7" align="center">Architecture </oasis:entry>

         <oasis:entry colname="col8">RMSE<sub>val</sub></oasis:entry>

         <oasis:entry colname="col9">MAE<sub>val</sub></oasis:entry>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col1"/>

         <oasis:entry colname="col2"/>

         <oasis:entry colname="col3"/>

         <oasis:entry colname="col4"/>

         <oasis:entry colname="col5"/>

         <oasis:entry colname="col6"/>

         <oasis:entry colname="col7"/>

         <oasis:entry colname="col8">[m s<sup>−1</sup>]</oasis:entry>

         <oasis:entry colname="col9">[m s<sup>−1</sup>]</oasis:entry>

       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>

         <oasis:entry rowsep="1" colname="col1" morerows="2">Best ARU-Net</oasis:entry>

         <oasis:entry colname="col2"><inline-formula><mml:math id="M269" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M270" display="inline"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mi mathvariant="normal">enc</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M271" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">μ</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M272" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">max</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M273" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col7"><inline-formula><mml:math id="M274" display="inline"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi mathvariant="normal">drop</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col8"/>

         <oasis:entry colname="col9"/>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col2">init. ch.</oasis:entry>

         <oasis:entry colname="col3">enc. depth</oasis:entry>

         <oasis:entry colname="col4">ch. mult.</oasis:entry>

         <oasis:entry colname="col5">max ch.</oasis:entry>

         <oasis:entry colname="col6">kernel</oasis:entry>

         <oasis:entry colname="col7">dropout</oasis:entry>

         <oasis:entry colname="col8"/>

         <oasis:entry colname="col9"/>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col2">24</oasis:entry>

         <oasis:entry colname="col3">5</oasis:entry>

         <oasis:entry colname="col4">2.0</oasis:entry>

         <oasis:entry colname="col5">384</oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M275" display="inline"><mml:mrow><mml:mn mathvariant="normal">3</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col7">10 %</oasis:entry>

         <oasis:entry colname="col8"><bold>0.1050</bold></oasis:entry>

         <oasis:entry colname="col9"><bold>0.0225</bold></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry rowsep="1" colname="col1" morerows="1">GNO grid-search</oasis:entry>

         <oasis:entry colname="col2"><inline-formula><mml:math id="M276" display="inline"><mml:mi>Q</mml:mi></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M277" display="inline"><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi mathvariant="normal">int</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M278" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mi mathvariant="normal">int</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M279" display="inline"><mml:mrow><mml:msub><mml:mi>M</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M280" display="inline"><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mi mathvariant="normal">dec</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col7"><inline-formula><mml:math id="M281" display="inline"><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mi mathvariant="normal">dec</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col8"/>

         <oasis:entry colname="col9"/>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col2">latent dim.</oasis:entry>

         <oasis:entry colname="col3">hidden width</oasis:entry>

         <oasis:entry colname="col4">MLP layers</oasis:entry>

         <oasis:entry colname="col5">MP steps</oasis:entry>

         <oasis:entry colname="col6">dec. width</oasis:entry>

         <oasis:entry colname="col7">dec. layers</oasis:entry>

         <oasis:entry colname="col8"/>

         <oasis:entry colname="col9"/>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1"><inline-formula><mml:math id="M282" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">128</oasis:entry>

         <oasis:entry colname="col3">320</oasis:entry>

         <oasis:entry colname="col4">2</oasis:entry>

         <oasis:entry colname="col5">4</oasis:entry>

         <oasis:entry colname="col6">448</oasis:entry>

         <oasis:entry colname="col7">4</oasis:entry>

         <oasis:entry colname="col8"><bold>0.2031</bold></oasis:entry>

         <oasis:entry colname="col9"><bold>0.0755</bold></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1"><inline-formula><mml:math id="M283" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">64</oasis:entry>

         <oasis:entry colname="col3">160</oasis:entry>

         <oasis:entry colname="col4">2</oasis:entry>

         <oasis:entry colname="col5">3</oasis:entry>

         <oasis:entry colname="col6">224</oasis:entry>

         <oasis:entry colname="col7">2</oasis:entry>

         <oasis:entry colname="col8">0.2036</oasis:entry>

         <oasis:entry colname="col9">0.0811</oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1"><inline-formula><mml:math id="M284" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mi mathvariant="normal">org</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">100</oasis:entry>

         <oasis:entry colname="col3">250</oasis:entry>

         <oasis:entry colname="col4">2</oasis:entry>

         <oasis:entry colname="col5">3</oasis:entry>

         <oasis:entry colname="col6">350</oasis:entry>

         <oasis:entry colname="col7">3</oasis:entry>

         <oasis:entry colname="col8">0.2056</oasis:entry>

         <oasis:entry colname="col9">0.0779</oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1"><inline-formula><mml:math id="M285" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">160</oasis:entry>

         <oasis:entry colname="col3">400</oasis:entry>

         <oasis:entry colname="col4">3</oasis:entry>

         <oasis:entry colname="col5">4</oasis:entry>

         <oasis:entry colname="col6">560</oasis:entry>

         <oasis:entry colname="col7">4</oasis:entry>

         <oasis:entry colname="col8">0.2058</oasis:entry>

         <oasis:entry colname="col9">0.0796</oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1"><inline-formula><mml:math id="M286" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">50</oasis:entry>

         <oasis:entry colname="col3">125</oasis:entry>

         <oasis:entry colname="col4">2</oasis:entry>

         <oasis:entry colname="col5">2</oasis:entry>

         <oasis:entry colname="col6">175</oasis:entry>

         <oasis:entry colname="col7">2</oasis:entry>

         <oasis:entry colname="col8">0.2202</oasis:entry>

         <oasis:entry colname="col9">0.0888</oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1"><inline-formula><mml:math id="M287" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">32</oasis:entry>

         <oasis:entry colname="col3">80</oasis:entry>

         <oasis:entry colname="col4">2</oasis:entry>

         <oasis:entry colname="col5">2</oasis:entry>

         <oasis:entry colname="col6">112</oasis:entry>

         <oasis:entry colname="col7">2</oasis:entry>

         <oasis:entry colname="col8">0.2340</oasis:entry>

         <oasis:entry colname="col9">0.1003</oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1"><inline-formula><mml:math id="M288" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula><sup>*</sup></oasis:entry>

         <oasis:entry colname="col2">180</oasis:entry>

         <oasis:entry colname="col3">450</oasis:entry>

         <oasis:entry colname="col4">3</oasis:entry>

         <oasis:entry colname="col5">4</oasis:entry>

         <oasis:entry colname="col6">630</oasis:entry>

         <oasis:entry colname="col7">4</oasis:entry>

         <oasis:entry colname="col8">0.2720</oasis:entry>

         <oasis:entry colname="col9">0.1332</oasis:entry>

       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table><table-wrap-foot><p id="d2e5986"><sup>*</sup> Best result obtained with initial learning rate <inline-formula><mml:math id="M264" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>.</p></table-wrap-foot></table-wrap>

      <p id="d2e6681">For the GNO, a simple grid search was conducted, as described in Sect. <xref ref-type="sec" rid="Ch1.S2.SS6"/>, and seven model variations were considered. The two best-performing GNO configurations are the variations closest to the originally best <inline-formula><mml:math id="M290" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mi mathvariant="normal">org</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> configuration described in <xref ref-type="bibr" rid="bib1.bibx54" id="text.90"/>, namely the <inline-formula><mml:math id="M291" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M292" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>  models, followed by the <inline-formula><mml:math id="M293" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mi mathvariant="normal">org</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> setup itself. The best-performing <inline-formula><mml:math id="M294" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> model uses slightly larger internal and decoder MLPs and employs four wind turbine message-passing steps (<inline-formula><mml:math id="M295" display="inline"><mml:mrow><mml:msub><mml:mi>M</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) instead of the original three. The hyperparameter tuning done during the creation of the TurbOPark pre-trained model is not exhaustive. A more thorough tuning could yield baseline models that yield better metrics. However, the authors believe that improvement would be minor.</p>
</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Transfer learning – RANS-AWF hyperparameter search</title>
      <p id="d2e6773">Based on the results of the initial source model training stage, a transfer learning experiment is conducted using combinations of the different approaches described in Sect. <xref ref-type="sec" rid="Ch1.S2.SS7"/> with the chosen model architectures. The ARU-Net model architecture was selected as the best-performing model from the hyperparameter tuning on the TurbOPark dataset, as described in Sect. <xref ref-type="sec" rid="Ch1.S2.SS5"/>. The resulting hyperparameters for the ARU-Net are shown in Table <xref ref-type="table" rid="T3"/>. Before the model was used as the initial weights for the fine-tuning procedures, it was further trained to convergence, beyond the initial 50 epochs. This model is denoted as ARU-Net Best in Table <xref ref-type="table" rid="T3"/>. During fine-tuning, the exact same model architecture and hyperparameters were used as during the pre-training, except for the learning rate, which was tested for <inline-formula><mml:math id="M296" display="inline"><mml:mrow><mml:mtext>lr</mml:mtext><mml:mo>∈</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula>. For the LoRA-fine-tuned models, each learning rate was tested with ranks <inline-formula><mml:math id="M297" display="inline"><mml:mrow><mml:mi>r</mml:mi><mml:mo>∈</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">4</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">8</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula>. The GNO was tested across a range of transfer learning combinations, using <inline-formula><mml:math id="M298" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">G</mml:mi><mml:mrow><mml:mi mathvariant="normal">L</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> as the source model. As a significant number of variations were included, the models have been grouped into categories, and only the best in each group are shown in Table <xref ref-type="table" rid="T4"/>.</p>

<table-wrap id="T4" specific-use="star"><label>Table 4</label><caption><p id="d2e6876">Results of RANS-AWF transfer learning for both the ARU-Net and the GNO. The GNO results are based on the best L1 model weights from the TurbOPark training. Results are grouped by architecture and fine-tuning strategy, showing only the best configuration per category. <inline-formula><mml:math id="M299" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> is the number of models in each category. Best model options, listing the learning rate, the LoRA rank and <inline-formula><mml:math id="M300" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> where applicable, as well as the gradient clipping setting for the GNO. All models are trained on an Nvidia Quadro P4000 GPU. GNO metrics are reported to five decimal places to distinguish otherwise tied values. Best metrics are marked with bold.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="8">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:colspec colnum="6" colname="col6" align="right"/>
     <oasis:colspec colnum="7" colname="col7" align="right"/>
     <oasis:colspec colnum="8" colname="col8" align="left"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1">Group</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M301" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3">Best model options</oasis:entry>
         <oasis:entry colname="col4">Total Tunable</oasis:entry>
         <oasis:entry colname="col5">RMSE<sub>val</sub></oasis:entry>
         <oasis:entry colname="col6">MAE<sub>val</sub></oasis:entry>
         <oasis:entry colname="col7">Final</oasis:entry>
         <oasis:entry colname="col8">Wall-clock</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">Parameters</oasis:entry>
         <oasis:entry colname="col5">[m s<sup>−1</sup>]</oasis:entry>
         <oasis:entry colname="col6">[m s<sup>−1</sup>]</oasis:entry>
         <oasis:entry colname="col7">epoch</oasis:entry>
         <oasis:entry colname="col8">time</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col8">ARU-Net </oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Full fine-tune</oasis:entry>
         <oasis:entry colname="col2">4</oasis:entry>
         <oasis:entry colname="col3">lr <inline-formula><mml:math id="M306" display="inline"><mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">16 113 456</oasis:entry>
         <oasis:entry colname="col5"><bold>0.0169</bold></oasis:entry>
         <oasis:entry colname="col6"><bold>0.0087</bold></oasis:entry>
         <oasis:entry colname="col7">1823</oasis:entry>
         <oasis:entry colname="col8">5 h 5 m</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Freeze encoder</oasis:entry>
         <oasis:entry colname="col2">4</oasis:entry>
         <oasis:entry colname="col3">lr <inline-formula><mml:math id="M307" display="inline"><mml:mrow><mml:mo>=</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">7 662 696</oasis:entry>
         <oasis:entry colname="col5">0.0185</oasis:entry>
         <oasis:entry colname="col6">0.0092</oasis:entry>
         <oasis:entry colname="col7">3474</oasis:entry>
         <oasis:entry colname="col8">8 h 21 m</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">LoRA</oasis:entry>
         <oasis:entry colname="col2">8</oasis:entry>
         <oasis:entry colname="col3">LoRA (<inline-formula><mml:math id="M308" display="inline"><mml:mrow><mml:mi>r</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M309" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>), lr  <inline-formula><mml:math id="M310" display="inline"><mml:mrow><mml:mo>=</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">460 944</oasis:entry>
         <oasis:entry colname="col5">0.0275</oasis:entry>
         <oasis:entry colname="col6">0.0129</oasis:entry>
         <oasis:entry colname="col7">9467</oasis:entry>
         <oasis:entry colname="col8">28 h 58 m</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">From scratch</oasis:entry>
         <oasis:entry colname="col2">4</oasis:entry>
         <oasis:entry colname="col3">lr <inline-formula><mml:math id="M311" display="inline"><mml:mrow><mml:mo>=</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">16 113 456</oasis:entry>
         <oasis:entry colname="col5">0.0380</oasis:entry>
         <oasis:entry colname="col6">0.0153</oasis:entry>
         <oasis:entry colname="col7">548</oasis:entry>
         <oasis:entry colname="col8">1 h 32 m</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col8">GNO </oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">LoRA</oasis:entry>
         <oasis:entry colname="col2">12</oasis:entry>
         <oasis:entry colname="col3">LoRA (<inline-formula><mml:math id="M312" display="inline"><mml:mrow><mml:mi>r</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">16</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M313" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">32</mml:mn></mml:mrow></mml:math></inline-formula>), no clip</oasis:entry>
         <oasis:entry colname="col4">291 312</oasis:entry>
         <oasis:entry colname="col5"><bold>0.00558</bold></oasis:entry>
         <oasis:entry colname="col6">0.00234</oasis:entry>
         <oasis:entry colname="col7">417</oasis:entry>
         <oasis:entry colname="col8">7 h 11 m</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Full fine-tune</oasis:entry>
         <oasis:entry colname="col2">2</oasis:entry>
         <oasis:entry colname="col3">no clip</oasis:entry>
         <oasis:entry colname="col4">2 704 916</oasis:entry>
         <oasis:entry colname="col5">0.00563</oasis:entry>
         <oasis:entry colname="col6"><bold>0.00233</bold></oasis:entry>
         <oasis:entry colname="col7">360</oasis:entry>
         <oasis:entry colname="col8">5 h 49 m</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Freeze <inline-formula><mml:math id="M314" display="inline"><mml:mi mathvariant="script">E</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">16</oasis:entry>
         <oasis:entry colname="col3">clip 1.0</oasis:entry>
         <oasis:entry colname="col4">2 406 850</oasis:entry>
         <oasis:entry colname="col5">0.00565</oasis:entry>
         <oasis:entry colname="col6">0.00245</oasis:entry>
         <oasis:entry colname="col7">309</oasis:entry>
         <oasis:entry colname="col8">3 h 57 m</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Freeze <inline-formula><mml:math id="M315" display="inline"><mml:mi mathvariant="script">E</mml:mi></mml:math></inline-formula>+<inline-formula><mml:math id="M316" display="inline"><mml:mi mathvariant="script">A</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">16</oasis:entry>
         <oasis:entry colname="col3">LoRA (<inline-formula><mml:math id="M317" display="inline"><mml:mrow><mml:mi>r</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">16</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M318" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">32</mml:mn></mml:mrow></mml:math></inline-formula>), no clip</oasis:entry>
         <oasis:entry colname="col4">245 792</oasis:entry>
         <oasis:entry colname="col5">0.00576</oasis:entry>
         <oasis:entry colname="col6">0.00255</oasis:entry>
         <oasis:entry colname="col7">255</oasis:entry>
         <oasis:entry colname="col8">3 h 14 m</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">From scratch</oasis:entry>
         <oasis:entry colname="col2">1</oasis:entry>
         <oasis:entry colname="col3">no clip</oasis:entry>
         <oasis:entry colname="col4">2 704 916</oasis:entry>
         <oasis:entry colname="col5">0.00696</oasis:entry>
         <oasis:entry colname="col6">0.00285</oasis:entry>
         <oasis:entry colname="col7">2712</oasis:entry>
         <oasis:entry colname="col8">43 h 24 m</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e7442">As shown in Table <xref ref-type="table" rid="T4"/>, for both the ARU-Net and GNO, the LoRA-based approach yields no significant computational advantage over full fine-tuning or training from randomly initialised weights, despite the reduction in tunable parameters. This is likely because the full models are relatively small, leading the training process to be dominated by overhead, or because the ratio of tunable parameters in the LoRA configuration relative to the full model is not as distinct as in large language models (LLMs) with billions of parameters. For the ARU-Net, the fully fine-tuned model and the frozen-encoder variant perform comparably, whereas LoRA and training from scratch perform worse. This indicates that initialising the model weights and leaving them fully or partially tuneable is the most effective strategy, as it leverages the pre-learned wake physics while retaining sufficient flexibility to adapt to the high-fidelity data, unlike the restricted parameter space of LoRA or the uninformative starting point of random initialisation.</p>
      <p id="d2e7448">Table <xref ref-type="table" rid="T4"/> shows that for the majority of the fine-tuning techniques used for fine-tuning the GNO, the results fall within an acceptable range. Even for the model, which is trained from scratch using randomly initialised parameters, the results are mostly acceptable. Interestingly, the full fine-tune group, which applies neither LoRA nor freezing, performs remarkably well, achieving the lowest MAE. Ultimately, the best model was a LoRA variant, but not by a wide margin. Although this improvement is smaller than that observed for the ARU-Net, it should not be interpreted as negligible. Compared with training the GNO from scratch, the best LoRA fine-tuned GNO reduces the validation RMSE from <inline-formula><mml:math id="M319" display="inline"><mml:mn mathvariant="normal">0.00696</mml:mn></mml:math></inline-formula> to <inline-formula><mml:math id="M320" display="inline"><mml:mn mathvariant="normal">0.00558</mml:mn></mml:math></inline-formula> m s<sup>−1</sup>, corresponding to an improvement of approximately 20 %. Pre-training thus still provides the best absolute GNO performance, even though the relative benefit is more marginal than for the ARU-Net.</p>
      <p id="d2e7479">Another intriguing insight is that the time column in Table <xref ref-type="table" rid="T4"/> shows that using LoRA did not significantly reduce training time compared to simply using the full fine-tuning variations. This indicates that wall-clock time is not solely determined by the number of trainable parameters. The frozen layers must still be evaluated in the forward pass, and for the GNO, additional overhead arises from graph batching, graph construction, and data loading. Therefore, LoRA mainly reduces the cost of gradient updates and optimiser states while leaving a substantial part of the per-epoch computation unchanged. This likely explains why the reduction in trainable parameters does not translate into a proportional reduction in wall-clock time. It should be noted that the reported wall-clock times are not intended as a hardware- or framework-normalised benchmark between ARU-Net and GNO, since the two models are implemented in different software stacks. The ARU-Net is implemented in PyTorch, whereas the GNO uses JAX, Jraph and Flax together with PyTorch Geometric for graph construction and data loading. The timing comparison should therefore mainly be interpreted within each architecture, where the same framework and data pipeline are used across fine-tuning strategies. The LoRA group coming out ahead is therefore ascribed to the fact that 12 configurations were considered, and one of the initialisations managed to escape a local minimum that the full fine-tuning runs became trapped in before early stopping was triggered. This interpretation is supported by the fact that only one LoRA model outperformed the best full fine-tuning model.</p>
</sec>
<sec id="Ch1.S3.SS3">
  <label>3.3</label><title>Qualitative study – predictions with representative layout–inflow cases</title>
      <p id="d2e7493">The streamwise coordinate <inline-formula><mml:math id="M322" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> is measured from the centre of the wind farm, as seen in Fig. <xref ref-type="fig" rid="F5"/>. The distance from the most downstream turbine to a given wake location varies with wind farm size. To account for this, we introduce <inline-formula><mml:math id="M323" display="inline"><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo stretchy="true" mathvariant="normal">̃</mml:mo></mml:mover></mml:math></inline-formula>, defined as the streamwise distance from the most downstream turbine to that location. In Fig. <xref ref-type="fig" rid="F11"/>, the nine selected combinations of farm layouts and inflow conditions described in Sect. <xref ref-type="sec" rid="Ch1.S2.SS8"/> are used to create cross-stream deficit profiles at <inline-formula><mml:math id="M324" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo stretchy="true" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mn mathvariant="normal">6</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula> downstream distances for both predictions using the ground truth RANS-AWF data and the ARU-Net and GNO.</p>

      <fig id="F11" specific-use="star"><label>Figure 11</label><caption><p id="d2e7540">Cross-stream velocity deficits at selected distances behind the wind farm, comparing ARU-Net and GNO predictions against the RANS-AWF ground truth for a number of <bold>(a–c)</bold> small (S), <bold>(d–f)</bold> medium (M), and <bold>(g–i)</bold> large (L) farm layouts. Transverse profiles are extracted at downstream distances <inline-formula><mml:math id="M325" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo mathvariant="normal" stretchy="true">̃</mml:mo></mml:mover><mml:mo>∈</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">50</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">100</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">150</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">200</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">250</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">300</mml:mn><mml:mo mathvariant="italic">}</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula>, where <inline-formula><mml:math id="M326" display="inline"><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo stretchy="true" mathvariant="normal">̃</mml:mo></mml:mover></mml:math></inline-formula> is measured from the turbine furthest downstream. The grey hue indicates the RANS-AWF flow field data.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f11.png"/>

        </fig>

      <p id="d2e7611">Figure <xref ref-type="fig" rid="F11"/> shows that both models produce good results and reproduce the ground truth with only minor inaccuracies. The areas where the ARU-Net has its most significant errors are dominated by a degree of over-smoothing, which is most notable in Fig. <xref ref-type="fig" rid="F11"/>a at <inline-formula><mml:math id="M327" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi>x</mml:mi><mml:mo mathvariant="normal" stretchy="true">̃</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mn mathvariant="normal">50</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula>, where the most significant relative discrepancy occurs. For the GNO, the error characteristics are not over-smoothing but rather a failure to capture the peak values accurately, primarily manifested as overestimation of peaks, e.g. as in Fig. <xref ref-type="fig" rid="F11"/>e, i. In Fig. <xref ref-type="fig" rid="F12"/>, the model predictions and ground truths are displayed as velocity field plots, with inclusions of model errors (<inline-formula><mml:math id="M328" display="inline"><mml:mi mathvariant="italic">ε</mml:mi></mml:math></inline-formula>). It is clear that both models perform worst in or near the farm. Simultaneously, there is a negative correlation between error and both free-stream velocity and ambient TI. This inverse correlation is due to wake physics: when the velocity is low, the turbines operate at high thrust coefficients, meaning they are in the state where they most affect the flow. At the same time, a low ambient TI means wake recovery is slow, as insufficient turbulence-induced mixing makes the wakes more persistent. These factors, when combined, produce a pronounced wake effect and a complex flow, both of which negatively affect model performance. That said, all investigated cases remain well within an acceptable error range for both models.</p>

      <fig id="F12" specific-use="star"><label>Figure 12</label><caption><p id="d2e7651">Flow field plots of the representative farm layout–inflow combinations. Columns indicate <bold>(a)</bold> RANS-AWF ground truth, <bold>(b)</bold> ARU-Net predictions, <bold>(c)</bold> GNO predictions, <bold>(d–e)</bold> free-stream normalised model errors for the ARU-Net and GNO, respectively.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f12.png"/>

        </fig>

      <p id="d2e7672">For the ARU-Net, another behaviour has been identified. It is clearest in the case of the small wind farm at low wind speed: when the turbines are placed far apart, and the farm is small, there is a low degree of wake mixing, and the convolutional kernels are not sufficient to resolve the finer details of the flow. This is observed mainly in areas where a neighbouring wind farm would not be placed, but it remains an interesting qualitative difference between the considered models. For the GNO, there are indications of a similar behaviour, though it is less pronounced. When the farm is dense, as in Fig. <xref ref-type="fig" rid="F11"/>b and e, the GNO tends to overestimate the wake effect slightly, although the effect is not clear enough to draw a decisive conclusion.</p>
      <p id="d2e7677">To facilitate a direct visual comparison between the two models, their absolute errors are subtracted for each of the representation layout–inflow combinations. The resulting difference fields are shown in Fig. <xref ref-type="fig" rid="F13"/>, where blue indicates that the ARU-Net has lower error, and red indicates that the GNO has lower error.</p>

      <fig id="F13" specific-use="star"><label>Figure 13</label><caption><p id="d2e7684">Model comparison using flow field error plots of the selected layout–inflow combinations.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f13.png"/>

        </fig>

      <p id="d2e7693">As seen in Fig. <xref ref-type="fig" rid="F13"/>, the relative difference between the models is low, and both models have areas where they outperform the other. Most notably, the ARU-Net performs slightly better in the L–high case (<inline-formula><mml:math id="M329" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">19.7</mml:mn></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>, <inline-formula><mml:math id="M331" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">25</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/></mml:mrow></mml:math></inline-formula> %; Fig. <xref ref-type="fig" rid="F13"/>i), while the GNO performs better in the S–low case (<inline-formula><mml:math id="M332" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8.4</mml:mn></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>, <inline-formula><mml:math id="M334" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">7</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/></mml:mrow></mml:math></inline-formula> %; Fig. <xref ref-type="fig" rid="F13"/>a). Looking at the overall picture, the GNO appears to have a slight advantage over the ARU-Net, with more areas coloured red than blue. Also, the case where the ARU-Net performs best is with a high inflow velocity and a small nominal error, while the case where the GNO performs best is with a low velocity and a larger nominal error. However, because this advantage is primarily within the farm, it is not expected to yield a meaningful benefit in most practical applications.</p>
</sec>
<sec id="Ch1.S3.SS4">
  <label>3.4</label><title>Quantitative study – performance metrics and sensitivity analysis</title>
      <p id="d2e7797">To supplement the more qualitative investigation of the selected representative layout–inflow combinations, a quantitative comparison has been performed using the performance metrics introduced in Sect. <xref ref-type="sec" rid="Ch1.S2.SS7"/>. As a CNN-based approach requires a fixed, gridded domain, there will naturally be a lot of data with uninteresting flow, with no wake effect. This fixed-raster representation also affects evaluations away from the native CNN grid. When ARU-Net predictions are evaluated on the GNN grid in Table <xref ref-type="table" rid="T5"/>, the predictions are mapped from the native <inline-formula><mml:math id="M335" display="inline"><mml:mrow><mml:mn mathvariant="normal">256</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">128</mml:mn></mml:mrow></mml:math></inline-formula> CNN grid using bilinear interpolation. The degradation observed on the GNN grid, therefore, reflects both interpolation error and the fact that the ARU-Net is trained to output on a fixed raster. This is a practical limitation when predictions are required at arbitrary query locations that do not align with the training grid. In such cases, interpolation, retraining at the target resolution, or a grid-invariant architecture is required. By contrast, the GNO can evaluate arbitrary probe locations directly. While this area is partially of interest as a model should not predict strong wake effects where none are present, having it dominate the performance metrics is suboptimal. Therefore, the performance metrics are also reported using a range of wake masks (<inline-formula><mml:math id="M336" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:mfenced close="}" open="{"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>) that have been applied on the RANS-AWF, and only the data above the threshold have been considered in the metric evaluation. The resulting performance metrics are reported in Table <xref ref-type="table" rid="T5"/>, along with the change in each metric relative to a TurbOPark reference. Please note that this metric is strictly included as a reference point and is not suitable for passing judgement on the TurbOPark model, as it was not calibrated towards RANS-AWF data.</p>

<table-wrap id="T5" specific-use="star"><label>Table 5</label><caption><p id="d2e7877">CNN (ARU-Net) vs. GNN (GNO) comparison across grids and wake deficit thresholds. Bilinear interpolation is used on the ARU-Net predictions when evaluating them on the GNN grid. Percentages in parentheses are relative changes compared to a TurbOPark baseline; for RMSE and MAE, negative values indicate an improvement, while for the <inline-formula><mml:math id="M338" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score, a positive value indicates an improvement over the baseline. Best metrics are marked with bold.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="6">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right" colsep="1"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:colspec colnum="6" colname="col6" align="right"/>
     <oasis:thead>
       <oasis:row>

         <oasis:entry colname="col1"/>

         <oasis:entry colname="col2"/>

         <oasis:entry rowsep="1" namest="col3" nameend="col4" align="center" colsep="1">CNN grid (<inline-formula><mml:math id="M339" display="inline"><mml:mrow><mml:mn mathvariant="normal">256</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">128</mml:mn></mml:mrow></mml:math></inline-formula>) </oasis:entry>

         <oasis:entry rowsep="1" namest="col5" nameend="col6" align="center">GNN grid (<inline-formula><mml:math id="M340" display="inline"><mml:mrow><mml:mn mathvariant="normal">257</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">129</mml:mn></mml:mrow></mml:math></inline-formula>) </oasis:entry>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col1">Threshold</oasis:entry>

         <oasis:entry colname="col2">Metric (test set)</oasis:entry>

         <oasis:entry colname="col3" align="center">ARU-Net </oasis:entry>

         <oasis:entry colname="col4" align="center">GNO </oasis:entry>

         <oasis:entry colname="col5" align="center">ARU-Net </oasis:entry>

         <oasis:entry colname="col6" align="center">GNO </oasis:entry>

       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>

         <oasis:entry rowsep="1" colname="col1" morerows="2">No mask</oasis:entry>

         <oasis:entry colname="col2">RMSE [<inline-formula><mml:math id="M341" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M342" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0140</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0125</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">92.8</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M343" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0151</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0128</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">92.2</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M344" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0176</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0135</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">90.7</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M345" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0159</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0131</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">91.6</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col2">MAE [<inline-formula><mml:math id="M346" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M347" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0073</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0067</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">90.1</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M348" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0103</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0079</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">86.0</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M349" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0083</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0071</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">88.5</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M350" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0105</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0080</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">85.4</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col2"><inline-formula><mml:math id="M351" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> [–]</oasis:entry>

         <oasis:entry colname="col3">–</oasis:entry>

         <oasis:entry colname="col4">–</oasis:entry>

         <oasis:entry colname="col5">–</oasis:entry>

         <oasis:entry colname="col6">–</oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry rowsep="1" colname="col1" morerows="2"><inline-formula><mml:math id="M352" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">RMSE [<inline-formula><mml:math id="M353" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M354" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0209</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0188</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">93.1</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M355" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0205</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0203</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">93.3</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M356" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0269</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0201</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">91.0</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M357" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0221</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0208</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">92.6</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col2">MAE [<inline-formula><mml:math id="M358" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M359" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0108</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0108</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">93.7</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M360" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0122</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0127</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">92.9</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M361" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0133</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0116</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">92.1</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M362" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0128</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0130</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">92.4</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col2"><inline-formula><mml:math id="M363" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> [–]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M364" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.5971</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.1277</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">31.9</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M365" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.6019</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.1356</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">31.4</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M366" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.5902</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.1259</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">32.8</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M367" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.5999</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.1357</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">31.7</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry rowsep="1" colname="col1" morerows="2"><inline-formula><mml:math id="M368" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">RMSE [<inline-formula><mml:math id="M369" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M370" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0214</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0189</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">93.1</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M371" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0209</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0205</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">93.3</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M372" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0275</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0202</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">91.0</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M373" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0225</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0210</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">92.7</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col2">MAE [<inline-formula><mml:math id="M374" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M375" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0112</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0110</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">93.7</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M376" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0124</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0129</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">93.0</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M377" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0139</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0119</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">92.1</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M378" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0131</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0132</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">92.6</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row rowsep="1">

         <oasis:entry colname="col2"><inline-formula><mml:math id="M379" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> [–]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M380" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.9944</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0081</mml:mn><mml:mo>(</mml:mo><mml:mo>+</mml:mo><mml:mn mathvariant="bold">13.9</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M381" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.6263</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.1598</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">28.2</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M382" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.9903</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0089</mml:mn><mml:mo>(</mml:mo><mml:mo>+</mml:mo><mml:mn mathvariant="bold">13.2</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M383" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.6246</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.1602</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">28.6</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col1" morerows="2"><inline-formula><mml:math id="M384" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col2">RMSE [<inline-formula><mml:math id="M385" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M386" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0239</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0192</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">93.4</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M387" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0234</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0212</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">93.5</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M388" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0311</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0201</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">91.3</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M389" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0253</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0215</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">92.9</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col2">MAE [<inline-formula><mml:math id="M390" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">s</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M391" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0137</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0116</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">93.9</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M392" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0147</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0138</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">93.4</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M393" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.0173</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.0122</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">92.2</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M394" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.0156</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0139</mml:mn><mml:mo>(</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="bold">92.9</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
       <oasis:row>

         <oasis:entry colname="col2"><inline-formula><mml:math id="M395" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> [–]</oasis:entry>

         <oasis:entry colname="col3"><inline-formula><mml:math id="M396" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.9850</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0141</mml:mn><mml:mo>(</mml:mo><mml:mo>+</mml:mo><mml:mn mathvariant="bold">29.2</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col4"><inline-formula><mml:math id="M397" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.9079</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.1180</mml:mn><mml:mo>(</mml:mo><mml:mo>+</mml:mo><mml:mn mathvariant="normal">19.1</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col5"><inline-formula><mml:math id="M398" display="inline"><mml:mrow><mml:mn mathvariant="bold">0.9804</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="bold">0.0162</mml:mn><mml:mo>(</mml:mo><mml:mo>+</mml:mo><mml:mn mathvariant="bold">28.2</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="bold">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

         <oasis:entry colname="col6"><inline-formula><mml:math id="M399" display="inline"><mml:mrow><mml:mn mathvariant="normal">0.9054</mml:mn><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.1184</mml:mn><mml:mo>(</mml:mo><mml:mo>+</mml:mo><mml:mn mathvariant="normal">18.4</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">%</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>

       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e9365">Table <xref ref-type="table" rid="T5"/> shows a mixed picture of both the ARU-Net and the GNO performing well in different categories. To summarise these results with a single pair of metrics, the wake region (<inline-formula><mml:math id="M400" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>) grid-averaged RMSE is 0.024 m s<sup>−1</sup> for the GNO and 0.028 m s<sup>−1</sup> for the ARU-Net, while the corresponding <inline-formula><mml:math id="M404" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> scores are 0.91 and 0.98, respectively. However, both models achieve better performance when evaluated on grids matching the resolution of their respective training data. The GNO has the lowest RMSE in most scenarios, while the ARU-Net has the best <inline-formula><mml:math id="M405" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score most of the time. This underpins the observations from the qualitative study, which found that the GNO performs slightly better in overall accuracy, while the ARU-Net captures the wake boundary more accurately. The ARU-Net's ability to capture a well-defined wake boundary may be due to logarithmic scaling of the target data, which emphasises smaller values and rewards the network for capturing these changes. Both models outperform the TurbOPark baseline across all cases, with lower RMSE and MAE. For the <inline-formula><mml:math id="M406" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score, however, the ARU-Net only outperforms the baseline once the wake cut-off is set to <inline-formula><mml:math id="M407" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>; at <inline-formula><mml:math id="M408" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, its performance drops off sharply. This drop-off is not practically significant: at the <inline-formula><mml:math id="M409" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> level, the wake deficit cannot be distinguished from background variation under real conditions, so poor classification in this regime has little bearing on real-world performance. This supports the use of a more aggressive cut-off when applying the models.</p>
      <p id="d2e9518">To better understand how the models perform as input variables change, metrics are computed for each layout–inflow combination in the full test set. This is explored in Fig. <xref ref-type="fig" rid="F14"/>, where the RMSE is binned by the different input variables, illustrating how the error behaves for the two considered models and for their variations trained from scratch during the transfer learning study. Figure <xref ref-type="fig" rid="F14"/> presents a comparison between the best-performing fine-tuned ARU-Net models and equivalent models trained without weight initialisation. The results indicate that the ARU-Net benefits significantly from pre-training compared to the GNO, with the RMSE often reduced by more than half in specific regimes. These improvements are most pronounced at wind speeds near the rated velocity (<inline-formula><mml:math id="M410" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">10</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">15</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>), in the lower-turbulence-intensity range (<inline-formula><mml:math id="M412" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">3</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">8</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> %), and within the largest (<inline-formula><mml:math id="M413" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">70</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">190</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>) and densest (<inline-formula><mml:math id="M414" display="inline"><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:mi>D</mml:mi><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">3</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">7</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>) wind farms. In contrast, the GNO only minimally benefits from transfer learning, showing only slight improvements or, in some instances, slightly degraded performance.</p>

      <fig id="F14" specific-use="star"><label>Figure 14</label><caption><p id="d2e9636">ARU-Net and GNO binned RMSE metrics with respect to inputs: <bold>(a)</bold> free-stream velocity <inline-formula><mml:math id="M415" display="inline"><mml:mrow><mml:msub><mml:mi>U</mml:mi><mml:mi mathvariant="normal">∞</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <bold>(b)</bold> ambient TI <inline-formula><mml:math id="M416" display="inline"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <bold>(c)</bold> number of wind turbines <inline-formula><mml:math id="M417" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <bold>(d)</bold> wind turbine separation factor <inline-formula><mml:math id="M418" display="inline"><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi mathvariant="normal">wt</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/2869/2026/wes-11-2869-2026-f14.png"/>

        </fig>

      <p id="d2e9702">While more rigorous experimentation would be required to ascertain the precise cause of this behaviour, a plausible explanation is the structural differences between the two architectures. The GNO operates on an input–output graph whose nodes correspond to physical turbine positions, meaning the farm layout is encoded directly in the data representation fed to the model. The ARU-Net also receives layout information via a raster representation, which is propagated across the encoder and decoder stages via skip connections. However, this constitutes a weaker form of spatial enforcement than the explicit node-wise correspondence of the GNO graph. This stronger geometric inductive bias in the GNO may allow it to learn the underlying flow physics more effectively from limited high-fidelity data, reducing its dependence on low-fidelity pre-training and explaining the comparatively modest gains it achieves through transfer learning. From Fig. <xref ref-type="fig" rid="F14"/>, it is clear that the ARU-Net trained from scratch performs much worse than any of the other models. It is, however, less clear whether the fine-tuned ARU-Net or GNO model performs better, though the GNO appears to have a slight edge, consistent with its lower RMSE in most scenarios in Table <xref ref-type="table" rid="T5"/>. It is important to note that the main objective of this work was to evaluate the ARU-Net and the GNO in capturing the inter-farm effects simulated by the reference RANS-AWF dataset, rather than demonstrating that these predicted wake deficits are comparable to those generated by large wind turbine clusters in practice. The RANS-AWF dataset is limited to the capabilities of both RANS and the conditions simulated. As mentioned previously, inter-farm wake effects can be highly influenced by large-scale atmospheric variability. Therefore, we also plan to extend the evaluation of the methods proposed in this work to account for the range of multiscale phenomena encountered by offshore wind farms.</p>
</sec>
<sec id="Ch1.S3.SS5">
  <label>3.5</label><title>Future work</title>
      <p id="d2e9717">The models presented in this work show great promise, and several avenues for further development have emerged. Drawing on the complementary strengths of each architecture, one promising direction is to use the ARU-Net's superior capability to characterise the wake region as a spatially informed background field for the GNO, replacing the current uniform background-flow assumption. This hybridisation could enable the GNO to match the ARU-Net in wake boundary prediction accuracy, as both models are already orders of magnitude faster than full RANS-AWF. This additional inference cost is not expected to be problematic. Another related direction is to investigate graph-transformer models, which may provide a more flexible attention-based mechanism for capturing long-range inter-turbine interactions while retaining the layout adaptability of graph-based surrogates. Alternatively, a more specialised ARU-Net could be trained exclusively to capture the wake boundary, potentially surpassing the current capability demonstrated here. From the ARU-Net perspective, the neural operator framework could be adopted by replacing the current convolutional kernels with Fourier layers similar to those in Fourier neural operator (FNO) networks, potentially improving generalisation to unseen spatial configurations. Finally, the scope of the training data could be broadened in several directions: extension to three-dimensional flow fields; inclusion of <inline-formula><mml:math id="M419" display="inline"><mml:mrow><mml:msub><mml:mi>C</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> curves to account for multiple turbine types; use of higher-fidelity full RANS simulations; and incorporation of more complex atmospheric conditions such as Coriolis force, atmospheric stability, and mesoscale effects.</p>
</sec>
</sec>
<sec id="Ch1.S4" sec-type="conclusions">
  <label>4</label><title>Conclusions</title>
      <p id="d2e9740">This work presents a systematic comparison between an ARU-Net and a GNO as surrogate models for inter-farm wake deficit predictions. Both architectures were pre-trained on low-fidelity TurbOPark engineering model data and fine-tuned on high-fidelity RANS-AWF simulations using a multi-fidelity transfer learning strategy, though the GNO benefited only marginally from this approach. Both architectures have demonstrated strong capability to predict downstream wake deficits across a wide range of arbitrarily generated wind farm layouts and randomly generated ambient wind speed and turbulence intensity. The two models have shown complementary strengths: evaluated over the wake region (<inline-formula><mml:math id="M420" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">δ</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> m s<sup>−1</sup>) and averaged across both evaluation grids, the GNO achieves a lower RMSE (0.024 vs. 0.028 m s<sup>−1</sup>), indicating slightly better accuracy in estimating the flow field wind speed, while the ARU-Net attains a higher <inline-formula><mml:math id="M423" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> score (0.98 vs. 0.91), indicating a better ability to correctly predict wake boundaries. The advantage of the ARU-Net for predicting wake boundaries may be attributed to its logarithmic target transform, which improves its ability to estimate wake deficits across different magnitudes by equally rewarding the ARU-Net's ability to predict subtle and strong wake effects. However, this transformation does not preserve speed-up regions, so applications requiring accurate blockage-induced acceleration would require a modified target representation.</p>
      <p id="d2e9799">Qualitative analysis has revealed distinct failure modes for each network architecture. The ARU-Net is prone to over-smoothing its predictions, particularly for sparse wind farms with large turbine spacing, where the convolutional kernel was insufficient to resolve fine flow structures. In contrast, the GNO tended to overestimate peak wake deficits, most notably in dense wind farm configurations. Both models perform worst at low wind speeds and low ambient TI, consistent with the underlying wake physics: these conditions are dominated by high thrust coefficients and low turbulent mixing, leading to stronger, more persistent, and more complex wake structures, which are inherently more difficult to predict.</p>
      <p id="d2e9802">The transfer learning results demonstrate that the ARU-Net benefits substantially more from pre-training on engineering models than the GNO, with RMSE reductions often exceeding 50 % in specific regimes compared to training from scratch. In contrast, the GNO shows a smaller improvement from transfer learning than the ARU-Net, though it still achieves its best performance with it. This suggests that its intrinsic graph structure, where nodes directly represent physical turbines, and edges encode positional relationships, already provides a strong inductive bias for learning wake interactions even with limited high-fidelity data. For the ARU-Net, full fine-tuning and the frozen-encoder strategy performed comparably. Neither the ARU-Net nor the GNO improved from LoRA-based PEFT, which offered no significant computational or accuracy benefit over training from scratch, likely due to the relatively small size of the models compared to the large language models for which LoRA was originally designed.</p>
      <p id="d2e9805">From a practical standpoint, the choice between the two models involves trade-offs beyond pure prediction accuracy. The ARU-Net operates on fixed-resolution grids, making it straightforward to obtain complete flow fields, but it offers limited flexibility when wind farm domains vary in size and resolution. The GNO, being grid-invariant, can evaluate the flow at arbitrary spatial locations without recomputing the upstream turbine graph, offering greater flexibility for diverse farm configurations and variable resolution queries. Future work will build on these complementary strengths through hybrid CNN–GNN and graph-transformer architectures, as well as broader validation under more realistic flow conditions.</p>
</sec>

      
      </body>
    <back><app-group>

<app id="App1.Ch1.S1">
  <label>Appendix A</label><title>Convolution and message-passing mathematical equivalency</title>
      <p id="d2e9820">Consider a graph <inline-formula><mml:math id="M424" display="inline"><mml:mrow><mml:mi>G</mml:mi><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mi>V</mml:mi><mml:mo>,</mml:mo><mml:mi>E</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> where each node <inline-formula><mml:math id="M425" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> carries a feature vector <inline-formula><mml:math id="M426" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and each directed edge from <inline-formula><mml:math id="M427" display="inline"><mml:mi>j</mml:mi></mml:math></inline-formula> to <inline-formula><mml:math id="M428" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula> carries an edge feature <inline-formula><mml:math id="M429" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. A single message-passing step computes

          <disp-formula id="App1.Ch1.S1.E27" content-type="numbered"><label>A1</label><mml:math id="M430" display="block"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>i</mml:mi><mml:mo>′</mml:mo></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">ρ</mml:mi><mml:mrow><mml:mi>e</mml:mi><mml:mo>→</mml:mo><mml:mi>v</mml:mi></mml:mrow></mml:msub><mml:mo mathsize="1.1em">(</mml:mo><mml:mo mathsize="1.1em" mathvariant="italic">{</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo mathsize="1.1em">|</mml:mo><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mi>j</mml:mi><mml:mo>∈</mml:mo><mml:mi mathvariant="script">N</mml:mi><mml:mo>(</mml:mo><mml:mi>i</mml:mi><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo mathvariant="italic" mathsize="1.1em">}</mml:mo><mml:mo mathsize="1.1em">)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

        where <inline-formula><mml:math id="M431" display="inline"><mml:mrow><mml:mi mathvariant="script">N</mml:mi><mml:mo>(</mml:mo><mml:mi>i</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is the set of neighbours of node <inline-formula><mml:math id="M432" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M433" display="inline"><mml:mi mathvariant="italic">ϕ</mml:mi></mml:math></inline-formula> is a learnable node update function, and <inline-formula><mml:math id="M434" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ρ</mml:mi><mml:mrow><mml:mi>e</mml:mi><mml:mo>→</mml:mo><mml:mi>v</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is a permutation-invariant aggregation. Now consider a regular pixel grid in which nodes are arranged on a lattice, and each node is connected to its neighbours within a <inline-formula><mml:math id="M435" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>×</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:math></inline-formula> footprint. If the edge features encode the relative spatial offset <inline-formula><mml:math id="M436" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> between nodes, the aggregation is chosen as summation, and the node update function returns an offset-dependent weight matrix multiplied by the sender feature, i.e. <inline-formula><mml:math id="M437" display="inline"><mml:mrow><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>-</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, then  Eq. (<xref ref-type="disp-formula" rid="App1.Ch1.S1.E27"/>) reduces to

          <disp-formula id="App1.Ch1.S1.E28" content-type="numbered"><label>A2</label><mml:math id="M438" display="block"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>i</mml:mi><mml:mo>′</mml:mo></mml:msubsup><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="bold">K</mml:mi><mml:mo>*</mml:mo><mml:mi mathvariant="bold-italic">h</mml:mi><mml:msub><mml:mo>)</mml:mo><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:munder><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>∈</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="script">N</mml:mi><mml:mo>(</mml:mo><mml:mi>i</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:munder><mml:msub><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>-</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mspace width="0.25em" linebreak="nobreak"/><mml:msub><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

        where <inline-formula><mml:math id="M439" display="inline"><mml:mo>*</mml:mo></mml:math></inline-formula> denotes the discrete convolution operator, and <inline-formula><mml:math id="M440" display="inline"><mml:mrow><mml:mi mathvariant="bold">K</mml:mi><mml:mo>∈</mml:mo><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>×</mml:mo><mml:mi>k</mml:mi><mml:mo>×</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">out</mml:mi></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">in</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> is the learnable convolution kernel of spatial extent <inline-formula><mml:math id="M441" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>, whose entries <inline-formula><mml:math id="M442" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">K</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>-</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>∈</mml:mo><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">out</mml:mi></mml:msub><mml:mo>×</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">in</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> are weight matrices indexed by the relative offset between nodes. This is precisely the standard discrete convolution used in CNNs. In other words, CNNs exploit the fixed, regular structure of the grid to share weights by spatial offset. In contrast, GNNs achieve the same effect through edge connections during the message passing without the strict requirement of a regular grid.</p>
</app>
  </app-group><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d2e10241">The code used to train the GNO is publicly available at <uri>https://github.com/jenspeterschoeler/Wind-Farm-GNO</uri>. The code used to train the ARU-Net is publicly available at <uri>https://github.com/FPWRasmussen/Wind-Farm-ARU-Net</uri>. The RANS-AWF dataset using the DTU 10 MW reference turbine has been made available at Zenodo <ext-link xlink:href="https://doi.org/10.5281/zenodo.20543178" ext-link-type="DOI">10.5281/zenodo.20543178</ext-link> <xref ref-type="bibr" rid="bib1.bibx62" id="paren.91"/>.</p>
  </notes><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e10259">JPS, FPWR, and PER conceived the research; FPWR developed the code and methodology around the ARU-Net; JPS developed the code and methodology around the GNO; MPL generated the RANS-AWF data; both JPS and FPWR performed the analysis and contributed to the model comparison code; MPL, AP, and PER  supervised the work; JPS and FPWR wrote the original draft; and JPS, FPWR, MPL, AP, and PER reviewed the draft.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e10265">At least one of the (co-)authors is a member of the editorial board of <italic>Wind Energy Science</italic>. The peer-review process was guided by an independent editor, and the authors also have no other competing interests to declare.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e10274">Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e10280">Model training was performed on the Sophia cluster <xref ref-type="bibr" rid="bib1.bibx57" id="paren.92"/>. The authors also acknowledge the use of AI tools in preparing this paper and the associated code. In particular, Claude, Gemini, and Grammarly were used for proofreading and Claude-Code for code development. All AI-assisted work has been reviewed by the authors.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e10288">This work was partially funded by TotalEnergies under the “Inter-Farm Interactions (IFI)” project.</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e10294">This paper was edited by Xiaolei Yang and reviewed by two anonymous referees.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Agarap(2019)</label><mixed-citation>Agarap, A. F.: Deep Learning using Rectified Linear Units (ReLU), arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.1803.08375" ext-link-type="DOI">10.48550/arXiv.1803.08375</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Akiba et al.(2019)Akiba, Sano, Yanase, Ohta, and Koyama</label><mixed-citation>Akiba, T., Sano, S., Yanase, T., Ohta, T., and Koyama, M.: Optuna: A Next-generation Hyperparameter Optimization Framework, Proceedings of the ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 2623–2631, <ext-link xlink:href="https://doi.org/10.1145/3292500.3330701" ext-link-type="DOI">10.1145/3292500.3330701</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Anagnostopoulos et al.(2023)Anagnostopoulos, Bauer, Clare, and Piggott</label><mixed-citation>Anagnostopoulos, S. J., Bauer, J., Clare, M. C., and Piggott, M. D.: Accelerated wind farm yaw and layout optimisation with multi-fidelity deep transfer learning wake models, Renewable Energy, 218, 119293, <ext-link xlink:href="https://doi.org/10.1016/J.RENENE.2023.119293" ext-link-type="DOI">10.1016/J.RENENE.2023.119293</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Bak et al.(2013)Bak, Zahle, Bitsche, Kim, Yde, Henriksen, Hansen, Blasques, Gaunaa, and Natarajan</label><mixed-citation>Bak, C., Zahle, F., Bitsche, R., Kim, T., Yde, A., Henriksen, L., Hansen, M., Blasques, J., Gaunaa, M., and Natarajan, A.: The DTU 10-MW Reference Wind Turbine, <uri>https://orbit.dtu.dk/en/publications/the-dtu-10-mw-reference-wind-turbine/</uri> (last access: 3 August 2026), 2013.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Bastankhah and Porté-Agel(2014)</label><mixed-citation>Bastankhah, M. and Porté-Agel, F.: A new analytical model for wind-turbine wakes, Renewable Energy, 70, 116–123, <ext-link xlink:href="https://doi.org/10.1016/j.renene.2014.01.002" ext-link-type="DOI">10.1016/j.renene.2014.01.002</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Bleeg(2020)</label><mixed-citation>Bleeg, J.: A Graph Neural Network Surrogate Model for the Prediction of Turbine Interaction Loss, J. Phys. Conf. Ser., 1618,  <ext-link xlink:href="https://doi.org/10.1088/1742-6596/1618/6/062054" ext-link-type="DOI">10.1088/1742-6596/1618/6/062054</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Bradbury et al.(2018)Bradbury, Frostig, Hawkins, Johnson, Leary, Maclaurin, Necula, Paszke, VanderPlas, Wanderman-Milne, and Zhang</label><mixed-citation>Bradbury, J., Frostig, R., Hawkins, P., Johnson, M. J., Leary, C., Maclaurin, D., Necula, G., Paszke, A., VanderPlas, J., Wanderman-Milne, S., and Zhang, Q.: JAX: composable transformations of Python+NumPy programs, GitHub [code], <uri>http://github.com/jax-ml/jax</uri> (last access: 4 August 2026), 2018.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Bronstein et al.(2021)Bronstein, Bruna, Cohen, and Veličković</label><mixed-citation>Bronstein, M. M., Bruna, J., Cohen, T., and Veličković, P.: Geometric Deep Learning: Grids, Groups, Graphs, Geodesics, and Gauges, arxiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.2104.13478" ext-link-type="DOI">10.48550/arXiv.2104.13478</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Cañadillas et al.(2022)Cañadillas, Beckenbauer, Trujillo, Dörenkämper, Foreman, Neumann, and Lampert</label><mixed-citation>Cañadillas, B., Beckenbauer, M., Trujillo, J. J., Dörenkämper, M., Foreman, R., Neumann, T., and Lampert, A.: Offshore wind farm cluster wakes as observed by long-range-scanning wind lidar measurements and mesoscale modeling, Wind Energ. Sci., 7, 1241–1262, <ext-link xlink:href="https://doi.org/10.5194/wes-7-1241-2022" ext-link-type="DOI">10.5194/wes-7-1241-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Daenens et al.(2025)Daenens, Verstraeten, Daems, Nowé, and Helsen</label><mixed-citation>Daenens, S., Verstraeten, T., Daems, P.-J., Nowé, A., and Helsen, J.: Spatio-temporal graph neural networks for power prediction in offshore wind farms using SCADA data, Wind Energ. Sci., 10, 1137–1152, <ext-link xlink:href="https://doi.org/10.5194/wes-10-1137-2025" ext-link-type="DOI">10.5194/wes-10-1137-2025</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Dimitrov et al.(2018)Dimitrov, Kelly, Vignaroli, and Berg</label><mixed-citation>Dimitrov, N., Kelly, M. C., Vignaroli, A., and Berg, J.: From wind to loads: wind turbine site-specific load estimation with surrogate models trained on high-fidelity load databases, Wind Energ. Sci., 3, 767–790, <ext-link xlink:href="https://doi.org/10.5194/wes-3-767-2018" ext-link-type="DOI">10.5194/wes-3-767-2018</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Djath et al.(2018)Djath, Schulz-Stellenfleth, and Cañadillas</label><mixed-citation>Djath, B., Schulz-Stellenfleth, J., and Cañadillas, B.: Impact of atmospheric stability on X-band and C-band synthetic aperture radar imagery of offshore windpark wakes, J. Renew. Sustain. Ener., 10, 17, <ext-link xlink:href="https://doi.org/10.1063/1.5020437" ext-link-type="DOI">10.1063/1.5020437</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>DTU Wind and Energy Systems(2026)</label><mixed-citation>DTU Wind and Energy Systems: PyWakeEllipSys v6.0 [code], <uri>https://topfarm.pages.windenergy.dtu.dk/cuttingedge/pywake/pywake_ellipsys</uri>, last access: 4 August 2026.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Duthé et al.(2023)Duthé, de Nolasco Santos, Abdallah, Réthore, Weijtjens, Chatzi, and Devriendt</label><mixed-citation>Duthé, G., de Nolasco Santos, F., Abdallah, I., Réthore, P.-E., Weijtjens, W., Chatzi, E., and Devriendt, C.: Local flow and loads estimation on wake-affected wind turbines using graph neural networks and PyWake, J. Phys. Conf. Ser., 2505, 012014, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/2505/1/012014" ext-link-type="DOI">10.1088/1742-6596/2505/1/012014</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx15"><label>Duthé et al.(2024)Duthé, de N Santos, Abdallah, Weijtjens, Devriendt, and Chatzi</label><mixed-citation>Duthé, G., de N Santos, F., Abdallah, I., Weijtjens, W., Devriendt, C., and Chatzi, E.: Flexible multi-fidelity framework for load estimation of wind farms through graph neural networks and transfer learning, Data-Centric Engineering, 5, e29, <ext-link xlink:href="https://doi.org/10.1017/dce.2024.35" ext-link-type="DOI">10.1017/dce.2024.35</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Duthé et al.(2025)Duthé, Abdallah, and Chatzi</label><mixed-citation>Duthé, G., Abdallah, I., and Chatzi, E.: Graph Transformers for inverse physics: reconstructing flows around arbitrary 2D airfoils, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.2501.17081" ext-link-type="DOI">10.48550/arXiv.2501.17081</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Fey and Lenssen(2019)</label><mixed-citation>Fey, M. and Lenssen, J. E.: Fast Graph Representation Learning with PyTorch Geometric, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.1903.02428" ext-link-type="DOI">10.48550/arXiv.1903.02428</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Frandsen(2007)</label><mixed-citation>Frandsen, S. T.: Turbulence and turbulence-generated structural loading in wind turbine clusters, Ph.D. thesis, Risø, ISBN 87-550-3458-6, <uri>https://orbit.dtu.dk/en/publications/turbulence-and-turbulence-generated-structural-loading-in-wind-tu/</uri> (last access: 4 August 2026), 2007.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>García-Santiago et al.(2024)García-Santiago, Hahmann, Badger, and Peña</label><mixed-citation>García-Santiago, O., Hahmann, A. N., Badger, J., and Peña, A.: Evaluation of wind farm parameterizations in the WRF model under different atmospheric stability conditions with high-resolution wake simulations, Wind Energ. Sci., 9, 963–979, <ext-link xlink:href="https://doi.org/10.5194/wes-9-963-2024" ext-link-type="DOI">10.5194/wes-9-963-2024</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Godwin et al.(2020)Godwin, Keck, Battaglia, Bapst, Kipf, Li, Stachenfeld, Veličković, and Sanchez-Gonzalez</label><mixed-citation>Godwin, J., Keck, T., Battaglia, P., Bapst, V., Kipf, T., Li, Y., Stachenfeld, K., Veličković, P., and Sanchez-Gonzalez, A.: Jraph: A library for graph neural networks in jax, GitHub [code], <uri>http://github.com/deepmind/jraph</uri> (last access: 4 August 2026), 2020.</mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Harrison-Atlas et al.(2024)Harrison-Atlas, Glaws, King, and Lantz</label><mixed-citation>Harrison-Atlas, D., Glaws, A., King, R. N., and Lantz, E.: Artificial intelligence-aided wind plant optimization for nationwide evaluation of land use and economic benefits of wake steering, Nature Energy, 9, 735–749, <ext-link xlink:href="https://doi.org/10.1038/s41560-024-01516-8" ext-link-type="DOI">10.1038/s41560-024-01516-8</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>Hasager et al.(2015)Hasager, Vincent, Badger, Badger, Bella, Peña, Husson, and Volker</label><mixed-citation>Hasager, C. B., Vincent, P., Badger, J., Badger, M., Bella, A. D., Peña, A., Husson, R., and Volker, P. J.: Using Satellite SAR to Characterize the Wind Flow around Offshore Wind Farms, Energies, 8, 5413–5439, <ext-link xlink:href="https://doi.org/10.3390/EN8065413" ext-link-type="DOI">10.3390/EN8065413</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>Hasanpoor et al.(2025)Hasanpoor, Romero, Moran, and Amon</label><mixed-citation>Hasanpoor, S., Romero, D. A., Moran, J. E., and Amon, C. H.: Physics-informed deep convolutional hierarchical encoder-decoder neural network for flow field prediction in wind farms, Energy and AI, 21, 100553, <ext-link xlink:href="https://doi.org/10.1016/J.EGYAI.2025.100553" ext-link-type="DOI">10.1016/J.EGYAI.2025.100553</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Heek et al.(2024)Heek, Levskaya, Oliver, Ritter, Rondepierre, Steiner, and van Zee</label><mixed-citation>Heek, J., Levskaya, A., Oliver, A., Ritter, M., Rondepierre, B., Steiner, A., and van Zee, M.: Flax: A neural network library and ecosystem for JAX, GitHub [code], <uri>http://github.com/google/flax</uri> (last access: 4 August 2026), 2024.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>Hou et al.(2026)Hou, Zhang, Huang, and Huang</label><mixed-citation>Hou, G., Zhang, F., Huang, C., and Huang, T.: Multivariate modeling on wake-affected wind farms by two-stage hybrid graph neural network, Applied Energy, 402, 127018, <ext-link xlink:href="https://doi.org/10.1016/j.apenergy.2025.127018" ext-link-type="DOI">10.1016/j.apenergy.2025.127018</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx26"><label>Hu et al.(2021)Hu, Shen, Wallis, Allen-Zhu, Li, Wang, Wang, and Chen</label><mixed-citation>Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., and Chen, W.: LoRA: Low-Rank Adaptation of Large Language Models, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.2106.09685" ext-link-type="DOI">10.48550/arXiv.2106.09685</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx27"><label>Hu et al.(2018)Hu, Shen, and Sun</label><mixed-citation>Hu, J., Shen, L., and Sun, G.: Squeeze-and-Excitation Networks, Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 7132–7141, <ext-link xlink:href="https://doi.org/10.1109/CVPR.2018.00745" ext-link-type="DOI">10.1109/CVPR.2018.00745</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx28"><label>IEC 61400-1 (2019 ed. 4)()</label><mixed-citation> IEC 61400-1 (2019 ed. 4): Wind energy generation systems – Part 1: Design requirements (IEC 61400-1:2019 ed. 4), 2019.</mixed-citation></ref>
      <ref id="bib1.bibx29"><label>Jensen(1983)</label><mixed-citation>Jensen, N. O.: A note on wind generator interaction – RISØ-M-2411, Tech. rep., Risø National Laboratories, <uri>https://orbit.dtu.dk/en/publications/a-note-on-wind-generator-interaction/</uri> (last access: 4 August 2026), 1983.</mixed-citation></ref>
      <ref id="bib1.bibx30"><label>Joe and Kuo(2008)</label><mixed-citation>Joe, S. and Kuo, F. Y.: Constructing Sobol Sequences with Better Two-Dimensional Projections, SIAM J. Sci. Comput., 30, 2635–2654, <ext-link xlink:href="https://doi.org/10.1137/070709359" ext-link-type="DOI">10.1137/070709359</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx31"><label>Kingma and Ba(2014)</label><mixed-citation>Kingma, D. P. and Ba, J.: Adam: A Method for Stochastic Optimization, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.1412.6980" ext-link-type="DOI">10.48550/arXiv.1412.6980</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx32"><label>Li et al.(2022a)Li, Zhang, and Zhao</label><mixed-citation>Li, R., Zhang, J., and Zhao, X.: Multi-fidelity modeling of wind farm wakes based on a novel super-fidelity network, Energ. Convers. Manage., 270, 116185, <ext-link xlink:href="https://doi.org/10.1016/j.enconman.2022.116185" ext-link-type="DOI">10.1016/j.enconman.2022.116185</ext-link>, 2022a.</mixed-citation></ref>
      <ref id="bib1.bibx33"><label>Li et al.(2022b)Li, Zhang, and Piggott</label><mixed-citation>Li, S., Zhang, M., and Piggott, M. D.: End-to-end Wind Turbine Wake Modelling with Deep Graph Representation Learning, Applied Energy, 339, <ext-link xlink:href="https://doi.org/10.1016/j.apenergy.2023.120928" ext-link-type="DOI">10.1016/j.apenergy.2023.120928</ext-link>, 2022b.</mixed-citation></ref>
      <ref id="bib1.bibx34"><label>Li et al.(2024)Li, Robert, Faisal, and Piggott</label><mixed-citation>Li, S., Robert, A., Faisal, A. A., and Piggott, M. D.: Learning to optimise wind farms with graph transformers, Applied Energy, 359, 122758, <ext-link xlink:href="https://doi.org/10.1016/j.apenergy.2024.122758" ext-link-type="DOI">10.1016/j.apenergy.2024.122758</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx35"><label>Loshchilov and Hutter(2019)</label><mixed-citation>Loshchilov, I. and Hutter, F.: Decoupled Weight Decay Regularization, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.1711.05101" ext-link-type="DOI">10.48550/arXiv.1711.05101</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx36"><label>Michelsen(1992)</label><mixed-citation>Michelsen, J.: Basis3D - a Platform for Development of Multiblock PDE Solvers: <inline-formula><mml:math id="M443" display="inline"><mml:mi mathvariant="italic">β</mml:mi></mml:math></inline-formula> – release, vol. AFM 92-05, Technical University of Denmark, <uri>https://orbit.dtu.dk/en/publications/basis3d-a-platform-for-development-of-multiblock-pde-solvers-%CE%B2-re/</uri> (last access: 4 August 2026), 1992.</mixed-citation></ref>
      <ref id="bib1.bibx37"><label>Misra(2020)</label><mixed-citation>Misra, D.: Mish: A Self Regularized Non-Monotonic Activation Function, 31st British Machine Vision Conference, BMVC 2020, <ext-link xlink:href="https://doi.org/10.5244/C.34.191" ext-link-type="DOI">10.5244/C.34.191</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx38"><label>Nygaard and Newcombe(2018)</label><mixed-citation>Nygaard, N. G. and Newcombe, A. C.: Wake behind an offshore wind farm observed with dual-Doppler radars, J. Phys. Conf. Ser., 1037, 072008, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/1037/7/072008" ext-link-type="DOI">10.1088/1742-6596/1037/7/072008</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx39"><label>Nygaard et al.(2020)Nygaard, Steen, Poulsen, and Pedersen</label><mixed-citation>Nygaard, N. G., Steen, S. T., Poulsen, L., and Pedersen, J. G.: Modelling cluster wakes and wind farm blockage, J. Phys. Conf. Ser., 1618, 062072, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/1618/6/062072" ext-link-type="DOI">10.1088/1742-6596/1618/6/062072</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx40"><label>Nygaard et al.(2022)Nygaard, Pedersen, Hansen, and Krastins</label><mixed-citation>Nygaard, N. G., Pedersen, J. G., Hansen, S. D., and Krastins, P.: A Turbulence Optimized Park model, Tech. rep., Ørsted, <uri>https://github.com/OrstedRD/TurbOPark/blob/main/TurbOPark description.pdf</uri> (last access: 4 August 2026), 2022.</mixed-citation></ref>
      <ref id="bib1.bibx41"><label>Ødegaard Bentsen et al.(2022)Ødegaard Bentsen, Warakagoda, Stenbro, and Engelstad</label><mixed-citation>Ødegaard Bentsen, L., Warakagoda, N. D., Stenbro, R., and Engelstad, P.: Wind Park Power Prediction: Attention-Based Graph Networks and Deep Learning to Capture Wake Losses, J. Phys. Conf. Ser., 2265, 022035, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/2265/2/022035" ext-link-type="DOI">10.1088/1742-6596/2265/2/022035</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx42"><label>Oktay et al.(2018)Oktay, Schlemper, Folgoc, Lee, Heinrich, Misawa, Mori, McDonagh, Hammerla, Kainz, Glocker, and Rueckert</label><mixed-citation>Oktay, O., Schlemper, J., Folgoc, L. L., Lee, M., Heinrich, M., Misawa, K., Mori, K., McDonagh, S., Hammerla, N. Y., Kainz, B., Glocker, B., and Rueckert, D.: Attention U-Net: Learning Where to Look for the Pancreas, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.1804.03999" ext-link-type="DOI">10.48550/arXiv.1804.03999</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx43"><label>Park and Park(2019)</label><mixed-citation>Park, J. and Park, J.: Physics-induced graph neural network: An application to wind-farm power estimation, Energy, 187, 115883, <ext-link xlink:href="https://doi.org/10.1016/j.energy.2019.115883" ext-link-type="DOI">10.1016/j.energy.2019.115883</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx44"><label>Paszke et al.(2019)Paszke, Gross, Massa, Lerer, Bradbury, Chanan, Killeen, Lin, Gimelshein, Antiga, Desmaison, Köpf, Yang, DeVito, Raison, Tejani, Chilamkurthy, Steiner, Fang, Bai, and Chintala</label><mixed-citation>Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen, T., Lin, Z., Gimelshein, N., Antiga, L., Desmaison, A., Köpf, A., Yang, E., DeVito, Z., Raison, M., Tejani, A., Chilamkurthy, S., Steiner, B., Fang, L., Bai, J., and Chintala, S.: PyTorch: An Imperative Style, High-Performance Deep Learning Library, in: Advances in Neural Information Processing Systems 32, edited by Wallach, H., Larochelle, H., Beygelzimer, A., d'Alché Buc, F., Fox, E., and Garnett, R., Curran Associates, Inc., 8024–8035, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.1912.01703" ext-link-type="DOI">10.48550/arXiv.1912.01703</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx45"><label>Pedersen et al.(2023)Pedersen, Forsting, Paul van der Laan, Romàn, Risco, Friis-Møller, Quick, Schøler, Rodrigues, Olsen, and Réthoré</label><mixed-citation>Pedersen, M. M., Forsting, A. M., Paul van der Laan, R. R., Romàn, L. A. A., Risco, J. C., Friis-Møller, M., Quick, J., Schøler, J. P., Rodrigues, R. V., Olsen, B. T., and Réthoré, P.-E.: PyWake 2.5.0: An open-source wind farm simulation tool, GitHub [code] <uri>https://gitlab.windenergy.dtu.dk/TOPFARM/PyWake</uri> (last access: 3 August 2026), 2023.</mixed-citation></ref>
      <ref id="bib1.bibx46"><label>Peña et al.(2022)Peña, Mirocha, and van der Laan</label><mixed-citation>Peña, A., Mirocha, J. D., and van der Laan, M. P.: Evaluation of the Fitch Wind-Farm Wake Parameterization with Large-Eddy Simulations of Wakes Using the Weather Research and Forecasting Model, Mon. Weather Rev., 150, 3051–3064, <ext-link xlink:href="https://doi.org/10.1175/MWR-D-22-0118.1" ext-link-type="DOI">10.1175/MWR-D-22-0118.1</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx47"><label>Pfaff et al.(2021)Pfaff, Fortunato, Sanchez-Gonzalez, and Battaglia</label><mixed-citation>Pfaff, T., Fortunato, M., Sanchez-Gonzalez, A., and Battaglia, P. W.: Learning Mesh-Based Simulation with Graph Networks, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.2010.03409" ext-link-type="DOI">10.48550/arXiv.2010.03409</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx48"><label>Platis et al.(2018)Platis, Siedersleben, Bange, Lampert, Bärfuss, Hankers, Cañadillas, Foreman, Schulz-Stellenfleth, Djath, Neumann, and Emeis</label><mixed-citation>Platis, A., Siedersleben, S. K., Bange, J., Lampert, A., Bärfuss, K., Hankers, R., Cañadillas, B., Foreman, R., Schulz-Stellenfleth, J., Djath, B., Neumann, T., and Emeis, S.: First in situ evidence of wakes in the far field behind offshore wind farms, Scientific reports, 8, <ext-link xlink:href="https://doi.org/10.1038/S41598-018-20389-Y" ext-link-type="DOI">10.1038/S41598-018-20389-Y</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx49"><label>Porté-Agel et al.(2020)Porté-Agel, Bastankhah, and Shamsoddin</label><mixed-citation>Porté-Agel, F., Bastankhah, M., and Shamsoddin, S.: Wind-Turbine and Wind-Farm Flows: A Review, Bound.-Lay. Meteorol., 174, 1–59, <ext-link xlink:href="https://doi.org/10.1007/s10546-019-00473-0" ext-link-type="DOI">10.1007/s10546-019-00473-0</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx50"><label>Rasmussen et al.(2026)Rasmussen, van der Laan, Peña, and Réthoré</label><mixed-citation> Rasmussen, F. P. W., van der Laan, P., Peña, A., and Réthoré, P.-E.: Transfer Learning Approach for Improved Wind Farm Wake Prediction Using Multi-Fidelity Convolutional Neural Networks, in: Proceedings of the ASME 2026 45th International Conference on Ocean, Offshore and Arctic Engineering (OMAE2026), OMAE2026-181761,  2026.</mixed-citation></ref>
      <ref id="bib1.bibx51"><label>Ronneberger et al.(2015)Ronneberger, Fischer, and Brox</label><mixed-citation>Ronneberger, O., Fischer, P., and Brox, T.: U-net: Convolutional networks for biomedical image segmentation, Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), 9351, 234–241, <ext-link xlink:href="https://doi.org/10.1007/978-3-319-24574-4_28" ext-link-type="DOI">10.1007/978-3-319-24574-4_28</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx52"><label>Sanchez-Lengeling et al.(2021)Sanchez-Lengeling, Reif, Pearce, and Wiltschko</label><mixed-citation>Sanchez-Lengeling, B., Reif, E., Pearce, A., and Wiltschko, A.: A Gentle Introduction to Graph Neural Networks, Distill, 6, <ext-link xlink:href="https://doi.org/10.23915/distill.00033" ext-link-type="DOI">10.23915/distill.00033</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx53"><label>Schneemann et al.(2020)Schneemann, Rott, Dörenkämper, Steinfeld, and Kühn</label><mixed-citation>Schneemann, J., Rott, A., Dörenkämper, M., Steinfeld, G., and Kühn, M.: Cluster wakes impact on a far-distant offshore wind farm's power, Wind Energ. Sci., 5, 29–49, <ext-link xlink:href="https://doi.org/10.5194/wes-5-29-2020" ext-link-type="DOI">10.5194/wes-5-29-2020</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx54"><label>Schøler et al.(2026)Schøler, Peder Weilmann Rasmussen, Quick, and Réthoré</label><mixed-citation>Schøler, J. P., Peder Weilmann Rasmussen, F., Quick, J., and Réthoré, P.-E.: Graph neural operator for wind farm wake flow, Wind Energ. Sci., 11, 2229–2256, <ext-link xlink:href="https://doi.org/10.5194/wes-11-2229-2026" ext-link-type="DOI">10.5194/wes-11-2229-2026</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx55"><label>Sørensen(1995)</label><mixed-citation>Sørensen, N.: General purpose flow solver applied to flow over hills, Ph.D. thesis, Risø National Laboratory, <uri>https://orbit.dtu.dk/en/publications/general-purpose-flow-solver-applied-to-flow-over-hills/</uri> (last access: 3 August 2026), 1995.</mixed-citation></ref>
      <ref id="bib1.bibx56"><label>Sørensen et al.(2007)Sørensen, Bechmann, Johansen, Myllerup, Botha, Vinther, and Nielsen</label><mixed-citation>Sørensen, N. N., Bechmann, A., Johansen, J., Myllerup, L., Botha, P., Vinther, S., and Nielsen, B. S.: Identification of severe wind conditions using a Reynolds Averaged Navier-Stokes solver, J. Phys. Conf. Ser., 75, 1–13, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/75/1/012053" ext-link-type="DOI">10.1088/1742-6596/75/1/012053</ext-link>, 2007. </mixed-citation></ref>
      <ref id="bib1.bibx57"><label>Technical University of Denmark(2019)</label><mixed-citation>Technical University of Denmark: Sophia HPC Cluster, DTU Sophia, <ext-link xlink:href="https://doi.org/10.57940/FAFC-6M81" ext-link-type="DOI">10.57940/FAFC-6M81</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx58"><label>Thuerey et al.(2019)Thuerey, Weißenow, Prantl, and Hu</label><mixed-citation>Thuerey, N., Weißenow, K., Prantl, L., and Hu, X.: Deep Learning Methods for Reynolds-Averaged Navier–Stokes Simulations of Airfoil Flows, AIAA, 58, 25–36, <ext-link xlink:href="https://doi.org/10.2514/1.J058291" ext-link-type="DOI">10.2514/1.J058291</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx59"><label>van der Laan et al.(2015)van der Laan, Sørensen, Réthoré, Mann, Kelly, and Troldborg</label><mixed-citation>van der Laan, M. P., Sørensen, N. N., Réthoré, P. E., Mann, J., Kelly, M. C., and Troldborg, N.: The <inline-formula><mml:math id="M444" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>-<inline-formula><mml:math id="M445" display="inline"><mml:mi mathvariant="italic">ε</mml:mi></mml:math></inline-formula>-<inline-formula><mml:math id="M446" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> model applied to double wind turbine wakes using different actuator disk force methods, Wind Energy, 18, 2223–2240, <ext-link xlink:href="https://doi.org/10.1002/we.1816" ext-link-type="DOI">10.1002/we.1816</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx60"><label>van der Laan et al.(2023)van der Laan, García-Santiago, Kelly, Meyer Forsting, Dubreuil-Boisclair, Sponheim Seim, Imberger, Peña, Sørensen, and Réthoré</label><mixed-citation>van der Laan, M. P., García-Santiago, O., Kelly, M., Meyer Forsting, A., Dubreuil-Boisclair, C., Sponheim Seim, K., Imberger, M., Peña, A., Sørensen, N. N., and Réthoré, P.-E.: A new RANS-based wind farm parameterization and inflow model for wind farm cluster modeling, Wind Energ. Sci., 8, 819–848, <ext-link xlink:href="https://doi.org/10.5194/wes-8-819-2023" ext-link-type="DOI">10.5194/wes-8-819-2023</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx61"><label>van der Laan et al.(2026a)van der Laan, Meyer Forsting, and Réthoré</label><mixed-citation>van der Laan, M. P., Meyer Forsting, A., and Réthoré, P.-E.: A Computational Fluid Dynamics surrogate model for wind turbine interaction including atmospheric stability, Wind Energ. Sci. Discuss. [preprint], <ext-link xlink:href="https://doi.org/10.5194/wes-2025-287" ext-link-type="DOI">10.5194/wes-2025-287</ext-link>, in review, 2026a.</mixed-citation></ref>
      <ref id="bib1.bibx62"><label>van der Laan et al.(2026b)</label><mixed-citation>van der Laan, M. P., Schøler, J. P., Rasmussen, F. P. W., Réthoré, P.-E., and Peña, A.: RANS-AWF Random Cluster Layouts, Zenodo [data set], <ext-link xlink:href="https://doi.org/10.5281/zenodo.20543178" ext-link-type="DOI">10.5281/zenodo.20543178</ext-link>, 2026b.</mixed-citation></ref>
      <ref id="bib1.bibx63"><label>Wang et al.(2022)Wang, Luo, Wu, Mu, Tan, and Fan</label><mixed-citation>Wang, Q., Luo, K., Wu, C., Mu, Y., Tan, J., and Fan, J.: Diurnal impact of atmospheric stability on inter-farm wake and power generation efficiency at neighboring onshore wind farms in complex terrain, Energ. Convers. Manage., 267, 115897, <ext-link xlink:href="https://doi.org/10.1016/J.ENCONMAN.2022.115897" ext-link-type="DOI">10.1016/J.ENCONMAN.2022.115897</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx64"><label>Wang et al.(2023)Wang, Luo, Wu, Tan, He, Ye, and Fan</label><mixed-citation>Wang, Q., Luo, K., Wu, C., Tan, J., He, R., Ye, S., and Fan, J.: Inter-farm cluster interaction of the operational and planned offshore wind power base, J. Clean. Prod., 396, 136529, <ext-link xlink:href="https://doi.org/10.1016/J.JCLEPRO.2023.136529" ext-link-type="DOI">10.1016/J.JCLEPRO.2023.136529</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx65"><label>Wang et al.(2026)Wang, Hu, Yang, Ti, and Deng</label><mixed-citation>Wang, Q., Hu, J., Yang, S., Ti, Z., and Deng, X.: Knowledge-Fusion Graph Transformer network for wind farm assessment with sparse data, Renewable Energy, 256, 124654, <ext-link xlink:href="https://doi.org/10.1016/j.renene.2025.124654" ext-link-type="DOI">10.1016/j.renene.2025.124654</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx66"><label>Zong and Porté-Agel(2020)</label><mixed-citation>Zong, H. and Porté-Agel, F.: A momentum-conserving wake superposition method for wind farm power prediction, J. Fluid Mech., 889, A8, <ext-link xlink:href="https://doi.org/10.1017/jfm.2020.77" ext-link-type="DOI">10.1017/jfm.2020.77</ext-link>, 2020.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>Convolutional versus graph-based surrogate models for inter-farm wake prediction using multi-fidelity transfer learning</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Agarap(2019)</label><mixed-citation>
      
Agarap, A. F.: Deep Learning using Rectified Linear Units (ReLU), arXiv [preprint],
<a href="https://doi.org/10.48550/arXiv.1803.08375" target="_blank">https://doi.org/10.48550/arXiv.1803.08375</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Akiba et al.(2019)Akiba, Sano, Yanase, Ohta, and Koyama</label><mixed-citation>
      
Akiba, T., Sano, S., Yanase, T., Ohta, T., and Koyama, M.: Optuna: A
Next-generation Hyperparameter Optimization Framework, Proceedings of the ACM
SIGKDD International Conference on Knowledge Discovery and Data Mining,
2623–2631, <a href="https://doi.org/10.1145/3292500.3330701" target="_blank">https://doi.org/10.1145/3292500.3330701</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Anagnostopoulos et al.(2023)Anagnostopoulos, Bauer, Clare, and
Piggott</label><mixed-citation>
      
Anagnostopoulos, S. J., Bauer, J., Clare, M. C., and Piggott, M. D.:
Accelerated wind farm yaw and layout optimisation with multi-fidelity deep
transfer learning wake models, Renewable Energy, 218, 119293,
<a href="https://doi.org/10.1016/J.RENENE.2023.119293" target="_blank">https://doi.org/10.1016/J.RENENE.2023.119293</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Bak et al.(2013)Bak, Zahle, Bitsche, Kim, Yde, Henriksen, Hansen,
Blasques, Gaunaa, and Natarajan</label><mixed-citation>
      
Bak, C., Zahle, F., Bitsche, R., Kim, T., Yde, A., Henriksen, L., Hansen, M.,
Blasques, J., Gaunaa, M., and Natarajan, A.: The DTU 10-MW Reference Wind
Turbine,
<a href="https://orbit.dtu.dk/en/publications/the-dtu-10-mw-reference-wind-turbine/" target="_blank"/> (last access: 3 August 2026),
2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Bastankhah and Porté-Agel(2014)</label><mixed-citation>
      
Bastankhah, M. and Porté-Agel, F.: A new analytical model for wind-turbine
wakes, Renewable Energy, 70, 116–123, <a href="https://doi.org/10.1016/j.renene.2014.01.002" target="_blank">https://doi.org/10.1016/j.renene.2014.01.002</a>,
2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Bleeg(2020)</label><mixed-citation>
      
Bleeg, J.: A Graph Neural Network Surrogate Model for the Prediction of Turbine
Interaction Loss, J. Phys. Conf. Ser., 1618,  <a href="https://doi.org/10.1088/1742-6596/1618/6/062054" target="_blank">https://doi.org/10.1088/1742-6596/1618/6/062054</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Bradbury et al.(2018)Bradbury, Frostig, Hawkins, Johnson, Leary,
Maclaurin, Necula, Paszke, VanderPlas, Wanderman-Milne, and
Zhang</label><mixed-citation>
      
Bradbury, J., Frostig, R., Hawkins, P., Johnson, M. J., Leary, C., Maclaurin,
D., Necula, G., Paszke, A., VanderPlas, J., Wanderman-Milne, S., and
Zhang, Q.: JAX: composable transformations of Python+NumPy programs, GitHub [code],
<a href="http://github.com/jax-ml/jax" target="_blank"/> (last access: 4 August 2026), 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Bronstein et al.(2021)Bronstein, Bruna, Cohen, and
Veličković</label><mixed-citation>
      
Bronstein, M. M., Bruna, J., Cohen, T., and Veličković, P.: Geometric Deep
Learning: Grids, Groups, Graphs, Geodesics, and Gauges, arxiv [preprint], <a href="https://doi.org/10.48550/arXiv.2104.13478" target="_blank">https://doi.org/10.48550/arXiv.2104.13478</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Cañadillas et al.(2022)Cañadillas, Beckenbauer, Trujillo,
Dörenkämper, Foreman, Neumann, and Lampert</label><mixed-citation>
      
Cañadillas, B., Beckenbauer, M., Trujillo, J. J., Dörenkämper, M., Foreman, R., Neumann, T., and Lampert, A.: Offshore wind farm cluster wakes as observed by long-range-scanning wind lidar measurements and mesoscale modeling, Wind Energ. Sci., 7, 1241–1262, <a href="https://doi.org/10.5194/wes-7-1241-2022" target="_blank">https://doi.org/10.5194/wes-7-1241-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Daenens et al.(2025)Daenens, Verstraeten, Daems, Nowé, and
Helsen</label><mixed-citation>
      
Daenens, S., Verstraeten, T., Daems, P.-J., Nowé, A., and Helsen, J.: Spatio-temporal graph neural networks for power prediction in offshore wind farms using SCADA data, Wind Energ. Sci., 10, 1137–1152, <a href="https://doi.org/10.5194/wes-10-1137-2025" target="_blank">https://doi.org/10.5194/wes-10-1137-2025</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Dimitrov et al.(2018)Dimitrov, Kelly, Vignaroli, and
Berg</label><mixed-citation>
      
Dimitrov, N., Kelly, M. C., Vignaroli, A., and Berg, J.: From wind to loads: wind turbine site-specific load estimation with surrogate models trained on high-fidelity load databases, Wind Energ. Sci., 3, 767–790, <a href="https://doi.org/10.5194/wes-3-767-2018" target="_blank">https://doi.org/10.5194/wes-3-767-2018</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Djath et al.(2018)Djath, Schulz-Stellenfleth, and
Cañadillas</label><mixed-citation>
      
Djath, B., Schulz-Stellenfleth, J., and Cañadillas, B.: Impact of atmospheric
stability on X-band and C-band synthetic aperture radar imagery of offshore
windpark wakes, J. Renew. Sustain. Ener., 10, 17,
<a href="https://doi.org/10.1063/1.5020437" target="_blank">https://doi.org/10.1063/1.5020437</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>DTU Wind and Energy Systems(2026)</label><mixed-citation>
      
DTU Wind and Energy Systems: PyWakeEllipSys v6.0 [code],
<a href="https://topfarm.pages.windenergy.dtu.dk/cuttingedge/pywake/pywake_ellipsys" target="_blank"/>, last
access: 4 August 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Duthé et al.(2023)Duthé, de Nolasco Santos, Abdallah, Réthore,
Weijtjens, Chatzi, and Devriendt</label><mixed-citation>
      
Duthé, G., de Nolasco Santos, F., Abdallah, I., Réthore, P.-E., Weijtjens,
W., Chatzi, E., and Devriendt, C.: Local flow and loads estimation on
wake-affected wind turbines using graph neural networks and PyWake, J. Phys. Conf. Ser., 2505, 012014,
<a href="https://doi.org/10.1088/1742-6596/2505/1/012014" target="_blank">https://doi.org/10.1088/1742-6596/2505/1/012014</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Duthé et al.(2024)Duthé, de N Santos, Abdallah, Weijtjens,
Devriendt, and Chatzi</label><mixed-citation>
      
Duthé, G., de N Santos, F., Abdallah, I., Weijtjens, W., Devriendt, C., and
Chatzi, E.: Flexible multi-fidelity framework for load estimation of wind
farms through graph neural networks and transfer learning, Data-Centric
Engineering, 5, e29, <a href="https://doi.org/10.1017/dce.2024.35" target="_blank">https://doi.org/10.1017/dce.2024.35</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Duthé et al.(2025)Duthé, Abdallah, and Chatzi</label><mixed-citation>
      
Duthé, G., Abdallah, I., and Chatzi, E.: Graph Transformers for inverse
physics: reconstructing flows around arbitrary 2D airfoils, arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.2501.17081" target="_blank">https://doi.org/10.48550/arXiv.2501.17081</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Fey and Lenssen(2019)</label><mixed-citation>
      
Fey, M. and Lenssen, J. E.: Fast Graph Representation Learning with PyTorch
Geometric, arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.1903.02428" target="_blank">https://doi.org/10.48550/arXiv.1903.02428</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Frandsen(2007)</label><mixed-citation>
      
Frandsen, S. T.: Turbulence and turbulence-generated structural loading in wind
turbine clusters, Ph.D. thesis, Risø, ISBN 87-550-3458-6,
<a href="https://orbit.dtu.dk/en/publications/turbulence-and-turbulence-generated-structural-loading-in-wind-tu/" target="_blank"/> (last access: 4 August 2026),
2007.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>García-Santiago et al.(2024)García-Santiago, Hahmann, Badger,
and Peña</label><mixed-citation>
      
García-Santiago, O., Hahmann, A. N., Badger, J., and Peña, A.: Evaluation of wind farm parameterizations in the WRF model under different atmospheric stability conditions with high-resolution wake simulations, Wind Energ. Sci., 9, 963–979, <a href="https://doi.org/10.5194/wes-9-963-2024" target="_blank">https://doi.org/10.5194/wes-9-963-2024</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Godwin et al.(2020)Godwin, Keck, Battaglia, Bapst, Kipf, Li,
Stachenfeld, Veličković, and Sanchez-Gonzalez</label><mixed-citation>
      
Godwin, J., Keck, T., Battaglia, P., Bapst, V., Kipf, T., Li, Y., Stachenfeld,
K., Veličković, P., and Sanchez-Gonzalez, A.: Jraph: A library
for graph neural networks in jax, GitHub [code],
<a href="http://github.com/deepmind/jraph" target="_blank"/> (last access: 4 August 2026), 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Harrison-Atlas et al.(2024)Harrison-Atlas, Glaws, King, and
Lantz</label><mixed-citation>
      
Harrison-Atlas, D., Glaws, A., King, R. N., and Lantz, E.: Artificial
intelligence-aided wind plant optimization for nationwide evaluation of land
use and economic benefits of wake steering, Nature Energy, 9, 735–749,
<a href="https://doi.org/10.1038/s41560-024-01516-8" target="_blank">https://doi.org/10.1038/s41560-024-01516-8</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Hasager et al.(2015)Hasager, Vincent, Badger, Badger, Bella, Peña,
Husson, and Volker</label><mixed-citation>
      
Hasager, C. B., Vincent, P., Badger, J., Badger, M., Bella, A. D., Peña, A.,
Husson, R., and Volker, P. J.: Using Satellite SAR to Characterize the Wind
Flow around Offshore Wind Farms, Energies, 8, 5413–5439,
<a href="https://doi.org/10.3390/EN8065413" target="_blank">https://doi.org/10.3390/EN8065413</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>Hasanpoor et al.(2025)Hasanpoor, Romero, Moran, and
Amon</label><mixed-citation>
      
Hasanpoor, S., Romero, D. A., Moran, J. E., and Amon, C. H.: Physics-informed
deep convolutional hierarchical encoder-decoder neural network for flow field
prediction in wind farms, Energy and AI, 21, 100553,
<a href="https://doi.org/10.1016/J.EGYAI.2025.100553" target="_blank">https://doi.org/10.1016/J.EGYAI.2025.100553</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Heek et al.(2024)Heek, Levskaya, Oliver, Ritter, Rondepierre,
Steiner, and van Zee</label><mixed-citation>
      
Heek, J., Levskaya, A., Oliver, A., Ritter, M., Rondepierre, B., Steiner, A.,
and van Zee, M.: Flax: A neural network library and ecosystem for JAX, GitHub [code],
<a href="http://github.com/google/flax" target="_blank"/> (last access: 4 August 2026), 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Hou et al.(2026)Hou, Zhang, Huang, and Huang</label><mixed-citation>
      
Hou, G., Zhang, F., Huang, C., and Huang, T.: Multivariate modeling on
wake-affected wind farms by two-stage hybrid graph neural network, Applied
Energy, 402, 127018, <a href="https://doi.org/10.1016/j.apenergy.2025.127018" target="_blank">https://doi.org/10.1016/j.apenergy.2025.127018</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Hu et al.(2021)Hu, Shen, Wallis, Allen-Zhu, Li, Wang, Wang, and
Chen</label><mixed-citation>
      
Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., and
Chen, W.: LoRA: Low-Rank Adaptation of Large Language Models,
arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.2106.09685" target="_blank">https://doi.org/10.48550/arXiv.2106.09685</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>Hu et al.(2018)Hu, Shen, and Sun</label><mixed-citation>
      
Hu, J., Shen, L., and Sun, G.: Squeeze-and-Excitation Networks, Proceedings of
the IEEE Computer Society Conference on Computer Vision and Pattern
Recognition, 7132–7141, <a href="https://doi.org/10.1109/CVPR.2018.00745" target="_blank">https://doi.org/10.1109/CVPR.2018.00745</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>IEC 61400-1 (2019 ed. 4)()</label><mixed-citation>
      
IEC 61400-1 (2019 ed. 4): Wind energy generation systems – Part 1: Design
requirements (IEC 61400-1:2019 ed. 4), 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Jensen(1983)</label><mixed-citation>
      
Jensen, N. O.: A note on wind generator interaction – RISØ-M-2411, Tech. rep.,
Risø National Laboratories, <a href="https://orbit.dtu.dk/en/publications/a-note-on-wind-generator-interaction/" target="_blank"/> (last access: 4 August 2026), 1983.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>Joe and Kuo(2008)</label><mixed-citation>
      
Joe, S. and Kuo, F. Y.: Constructing Sobol Sequences with Better
Two-Dimensional Projections, SIAM J. Sci. Comput., 30,
2635–2654, <a href="https://doi.org/10.1137/070709359" target="_blank">https://doi.org/10.1137/070709359</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>Kingma and Ba(2014)</label><mixed-citation>
      
Kingma, D. P. and Ba, J.: Adam: A Method for Stochastic Optimization, arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.1412.6980" target="_blank">https://doi.org/10.48550/arXiv.1412.6980</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Li et al.(2022a)Li, Zhang, and Zhao</label><mixed-citation>
      
Li, R., Zhang, J., and Zhao, X.: Multi-fidelity modeling of wind farm wakes
based on a novel super-fidelity network, Energ. Convers. Manage.,
270, 116185, <a href="https://doi.org/10.1016/j.enconman.2022.116185" target="_blank">https://doi.org/10.1016/j.enconman.2022.116185</a>, 2022a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Li et al.(2022b)Li, Zhang, and Piggott</label><mixed-citation>
      
Li, S., Zhang, M., and Piggott, M. D.: End-to-end Wind Turbine Wake Modelling
with Deep Graph Representation Learning, Applied Energy, 339,
<a href="https://doi.org/10.1016/j.apenergy.2023.120928" target="_blank">https://doi.org/10.1016/j.apenergy.2023.120928</a>, 2022b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>Li et al.(2024)Li, Robert, Faisal, and Piggott</label><mixed-citation>
      
Li, S., Robert, A., Faisal, A. A., and Piggott, M. D.: Learning to optimise
wind farms with graph transformers, Applied Energy, 359, 122758,
<a href="https://doi.org/10.1016/j.apenergy.2024.122758" target="_blank">https://doi.org/10.1016/j.apenergy.2024.122758</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Loshchilov and Hutter(2019)</label><mixed-citation>
      
Loshchilov, I. and Hutter, F.: Decoupled Weight Decay Regularization,
arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.1711.05101" target="_blank">https://doi.org/10.48550/arXiv.1711.05101</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Michelsen(1992)</label><mixed-citation>
      
Michelsen, J.: Basis3D - a Platform for Development of Multiblock PDE Solvers:
<i>β</i> – release, vol. AFM 92-05, Technical University of Denmark,
<a href="https://orbit.dtu.dk/en/publications/basis3d-a-platform-for-development-of-multiblock-pde-solvers-%CE%B2-re/" target="_blank"/> (last access: 4 August 2026),
1992.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Misra(2020)</label><mixed-citation>
      
Misra, D.: Mish: A Self Regularized Non-Monotonic Activation Function, 31st
British Machine Vision Conference, BMVC 2020, <a href="https://doi.org/10.5244/C.34.191" target="_blank">https://doi.org/10.5244/C.34.191</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>Nygaard and Newcombe(2018)</label><mixed-citation>
      
Nygaard, N. G. and Newcombe, A. C.: Wake behind an offshore wind farm observed
with dual-Doppler radars, J. Phys. Conf. Ser., 1037,
072008, <a href="https://doi.org/10.1088/1742-6596/1037/7/072008" target="_blank">https://doi.org/10.1088/1742-6596/1037/7/072008</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Nygaard et al.(2020)Nygaard, Steen, Poulsen, and
Pedersen</label><mixed-citation>
      
Nygaard, N. G., Steen, S. T., Poulsen, L., and Pedersen, J. G.: Modelling
cluster wakes and wind farm blockage, J. Phys. Conf.
Ser., 1618, 062072,
<a href="https://doi.org/10.1088/1742-6596/1618/6/062072" target="_blank">https://doi.org/10.1088/1742-6596/1618/6/062072</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>Nygaard et al.(2022)Nygaard, Pedersen, Hansen, and
Krastins</label><mixed-citation>
      
Nygaard, N. G., Pedersen, J. G., Hansen, S. D., and Krastins, P.: A Turbulence
Optimized Park model, Tech. rep., Ørsted,
<a href="https://github.com/OrstedRD/TurbOPark/blob/main/TurbOPark description.pdf" target="_blank"/> (last access: 4 August 2026),
2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>Ødegaard Bentsen et al.(2022)Ødegaard Bentsen, Warakagoda, Stenbro,
and Engelstad</label><mixed-citation>
      
Ødegaard Bentsen, L., Warakagoda, N. D., Stenbro, R., and Engelstad, P.: Wind
Park Power Prediction: Attention-Based Graph Networks and Deep Learning to
Capture Wake Losses, J. Phys. Conf. Ser., 2265, 022035,
<a href="https://doi.org/10.1088/1742-6596/2265/2/022035" target="_blank">https://doi.org/10.1088/1742-6596/2265/2/022035</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>Oktay et al.(2018)Oktay, Schlemper, Folgoc, Lee, Heinrich, Misawa,
Mori, McDonagh, Hammerla, Kainz, Glocker, and Rueckert</label><mixed-citation>
      
Oktay, O., Schlemper, J., Folgoc, L. L., Lee, M., Heinrich, M., Misawa, K.,
Mori, K., McDonagh, S., Hammerla, N. Y., Kainz, B., Glocker, B., and
Rueckert, D.: Attention U-Net: Learning Where to Look for the Pancreas,
arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.1804.03999" target="_blank">https://doi.org/10.48550/arXiv.1804.03999</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>Park and Park(2019)</label><mixed-citation>
      
Park, J. and Park, J.: Physics-induced graph neural network: An application to
wind-farm power estimation, Energy, 187, 115883,
<a href="https://doi.org/10.1016/j.energy.2019.115883" target="_blank">https://doi.org/10.1016/j.energy.2019.115883</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>Paszke et al.(2019)Paszke, Gross, Massa, Lerer, Bradbury, Chanan,
Killeen, Lin, Gimelshein, Antiga, Desmaison, Köpf, Yang, DeVito, Raison,
Tejani, Chilamkurthy, Steiner, Fang, Bai, and Chintala</label><mixed-citation>
      
Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen,
T., Lin, Z., Gimelshein, N., Antiga, L., Desmaison, A., Köpf, A., Yang,
E., DeVito, Z., Raison, M., Tejani, A., Chilamkurthy, S., Steiner, B., Fang,
L., Bai, J., and Chintala, S.: PyTorch: An Imperative Style,
High-Performance Deep Learning Library, in: Advances in Neural Information
Processing Systems 32, edited by Wallach, H., Larochelle, H., Beygelzimer,
A., d'Alché Buc, F., Fox, E., and Garnett, R., Curran
Associates, Inc., 8024–8035, arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.1912.01703" target="_blank">https://doi.org/10.48550/arXiv.1912.01703</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>Pedersen et al.(2023)Pedersen, Forsting, Paul van der Laan, Romàn,
Risco, Friis-Møller, Quick, Schøler, Rodrigues, Olsen, and
Réthoré</label><mixed-citation>
      
Pedersen, M. M., Forsting, A. M., Paul van der Laan, R. R., Romàn, L. A. A.,
Risco, J. C., Friis-Møller, M., Quick, J., Schøler, J. P., Rodrigues,
R. V., Olsen, B. T., and Réthoré, P.-E.: PyWake 2.5.0: An open-source wind
farm simulation tool, GitHub [code]
<a href="https://gitlab.windenergy.dtu.dk/TOPFARM/PyWake" target="_blank"/> (last access: 3 August 2026), 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>Peña et al.(2022)Peña, Mirocha, and van der Laan</label><mixed-citation>
      
Peña, A., Mirocha, J. D., and van der Laan, M. P.: Evaluation of the
Fitch Wind-Farm Wake Parameterization with Large-Eddy Simulations of Wakes
Using the Weather Research and Forecasting Model, Mon. Weather Rev.,
150, 3051–3064, <a href="https://doi.org/10.1175/MWR-D-22-0118.1" target="_blank">https://doi.org/10.1175/MWR-D-22-0118.1</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib47"><label>Pfaff et al.(2021)Pfaff, Fortunato, Sanchez-Gonzalez, and
Battaglia</label><mixed-citation>
      
Pfaff, T., Fortunato, M., Sanchez-Gonzalez, A., and Battaglia, P. W.: Learning
Mesh-Based Simulation with Graph Networks,
arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.2010.03409" target="_blank">https://doi.org/10.48550/arXiv.2010.03409</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib48"><label>Platis et al.(2018)Platis, Siedersleben, Bange, Lampert, Bärfuss,
Hankers, Cañadillas, Foreman, Schulz-Stellenfleth, Djath, Neumann, and
Emeis</label><mixed-citation>
      
Platis, A., Siedersleben, S. K., Bange, J., Lampert, A., Bärfuss, K., Hankers,
R., Cañadillas, B., Foreman, R., Schulz-Stellenfleth, J., Djath, B.,
Neumann, T., and Emeis, S.: First in situ evidence of wakes in the far field
behind offshore wind farms, Scientific reports, 8,
<a href="https://doi.org/10.1038/S41598-018-20389-Y" target="_blank">https://doi.org/10.1038/S41598-018-20389-Y</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib49"><label>Porté-Agel et al.(2020)Porté-Agel, Bastankhah, and
Shamsoddin</label><mixed-citation>
      
Porté-Agel, F., Bastankhah, M., and Shamsoddin, S.: Wind-Turbine and Wind-Farm
Flows: A Review, Bound.-Lay. Meteorol., 174, 1–59,
<a href="https://doi.org/10.1007/s10546-019-00473-0" target="_blank">https://doi.org/10.1007/s10546-019-00473-0</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib50"><label>Rasmussen et al.(2026)Rasmussen, van der Laan, Peña, and
Réthoré</label><mixed-citation>
      
Rasmussen, F. P. W., van der Laan, P., Peña, A., and Réthoré,
P.-E.: Transfer Learning Approach for Improved Wind Farm Wake Prediction
Using Multi-Fidelity Convolutional Neural Networks, in: Proceedings of the
ASME 2026 45th International Conference on Ocean, Offshore and Arctic
Engineering (OMAE2026), OMAE2026-181761,  2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib51"><label>Ronneberger et al.(2015)Ronneberger, Fischer, and
Brox</label><mixed-citation>
      
Ronneberger, O., Fischer, P., and Brox, T.: U-net: Convolutional networks for
biomedical image segmentation, Lecture Notes in Computer Science (including
subseries Lecture Notes in Artificial Intelligence and Lecture Notes in
Bioinformatics), 9351, 234–241, <a href="https://doi.org/10.1007/978-3-319-24574-4_28" target="_blank">https://doi.org/10.1007/978-3-319-24574-4_28</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib52"><label>Sanchez-Lengeling et al.(2021)Sanchez-Lengeling, Reif, Pearce, and
Wiltschko</label><mixed-citation>
      
Sanchez-Lengeling, B., Reif, E., Pearce, A., and Wiltschko, A.: A Gentle
Introduction to Graph Neural Networks, Distill, 6,
<a href="https://doi.org/10.23915/distill.00033" target="_blank">https://doi.org/10.23915/distill.00033</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib53"><label>Schneemann et al.(2020)Schneemann, Rott, Dörenkämper, Steinfeld,
and Kühn</label><mixed-citation>
      
Schneemann, J., Rott, A., Dörenkämper, M., Steinfeld, G., and Kühn, M.: Cluster wakes impact on a far-distant offshore wind farm's power, Wind Energ. Sci., 5, 29–49, <a href="https://doi.org/10.5194/wes-5-29-2020" target="_blank">https://doi.org/10.5194/wes-5-29-2020</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib54"><label>Schøler et al.(2026)Schøler, Peder Weilmann Rasmussen, Quick,
and Réthoré</label><mixed-citation>
      
Schøler, J. P., Peder Weilmann Rasmussen, F., Quick, J., and Réthoré, P.-E.: Graph neural operator for wind farm wake flow, Wind Energ. Sci., 11, 2229–2256, <a href="https://doi.org/10.5194/wes-11-2229-2026" target="_blank">https://doi.org/10.5194/wes-11-2229-2026</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib55"><label>Sørensen(1995)</label><mixed-citation>
      
Sørensen, N.: General purpose flow solver applied to flow over hills, Ph.D.
thesis, Risø National Laboratory,
<a href="https://orbit.dtu.dk/en/publications/general-purpose-flow-solver-applied-to-flow-over-hills/" target="_blank"/> (last access: 3 August 2026),
1995.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib56"><label>Sørensen et al.(2007)Sørensen, Bechmann, Johansen, Myllerup,
Botha, Vinther, and Nielsen</label><mixed-citation>
      
Sørensen, N. N., Bechmann, A., Johansen, J., Myllerup, L., Botha, P.,
Vinther, S., and Nielsen, B. S.: Identification of severe wind conditions
using a Reynolds Averaged Navier-Stokes solver, J. Phys.
Conf. Ser., 75, 1–13, <a href="https://doi.org/10.1088/1742-6596/75/1/012053" target="_blank">https://doi.org/10.1088/1742-6596/75/1/012053</a>, 2007.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib57"><label>Technical University of Denmark(2019)</label><mixed-citation>
      
Technical University of Denmark: Sophia HPC Cluster, DTU Sophia,
<a href="https://doi.org/10.57940/FAFC-6M81" target="_blank">https://doi.org/10.57940/FAFC-6M81</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib58"><label>Thuerey et al.(2019)Thuerey, Weißenow, Prantl, and Hu</label><mixed-citation>
      
Thuerey, N., Weißenow, K., Prantl, L., and Hu, X.: Deep Learning Methods for
Reynolds-Averaged Navier–Stokes Simulations of Airfoil Flows, AIAA,
58, 25–36, <a href="https://doi.org/10.2514/1.J058291" target="_blank">https://doi.org/10.2514/1.J058291</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib59"><label>van der Laan et al.(2015)van der Laan, Sørensen, Réthoré,
Mann, Kelly, and Troldborg</label><mixed-citation>
      
van der Laan, M. P., Sørensen, N. N., Réthoré, P. E., Mann, J., Kelly,
M. C., and Troldborg, N.: The <i>k</i>-<i>ε</i>-<i>f</i><sub><i>p</i></sub> model applied to double
wind turbine wakes using different actuator disk force methods, Wind Energy,
18, 2223–2240, <a href="https://doi.org/10.1002/we.1816" target="_blank">https://doi.org/10.1002/we.1816</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib60"><label>van der Laan et al.(2023)van der Laan, García-Santiago, Kelly,
Meyer Forsting, Dubreuil-Boisclair, Sponheim Seim, Imberger, Peña,
Sørensen, and Réthoré</label><mixed-citation>
      
van der Laan, M. P., García-Santiago, O., Kelly, M., Meyer Forsting, A., Dubreuil-Boisclair, C., Sponheim Seim, K., Imberger, M., Peña, A., Sørensen, N. N., and Réthoré, P.-E.: A new RANS-based wind farm parameterization and inflow model for wind farm cluster modeling, Wind Energ. Sci., 8, 819–848, <a href="https://doi.org/10.5194/wes-8-819-2023" target="_blank">https://doi.org/10.5194/wes-8-819-2023</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib61"><label>van der Laan et al.(2026a)van der Laan, Meyer Forsting, and
Réthoré</label><mixed-citation>
      
van der Laan, M. P., Meyer Forsting, A., and Réthoré, P.-E.: A Computational Fluid Dynamics surrogate model for wind turbine interaction including atmospheric stability, Wind Energ. Sci. Discuss. [preprint], <a href="https://doi.org/10.5194/wes-2025-287" target="_blank">https://doi.org/10.5194/wes-2025-287</a>, in review, 2026a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib62"><label>van der Laan et al.(2026b)</label><mixed-citation>
      
van der Laan, M. P., Schøler, J. P., Rasmussen, F. P. W., Réthoré, P.-E., and Peña, A.: RANS-AWF Random Cluster Layouts, Zenodo [data set], <a href="https://doi.org/10.5281/zenodo.20543178" target="_blank">https://doi.org/10.5281/zenodo.20543178</a>, 2026b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib63"><label>Wang et al.(2022)Wang, Luo, Wu, Mu, Tan, and Fan</label><mixed-citation>
      
Wang, Q., Luo, K., Wu, C., Mu, Y., Tan, J., and Fan, J.: Diurnal impact of
atmospheric stability on inter-farm wake and power generation efficiency at
neighboring onshore wind farms in complex terrain, Energ. Convers.
Manage., 267, 115897, <a href="https://doi.org/10.1016/J.ENCONMAN.2022.115897" target="_blank">https://doi.org/10.1016/J.ENCONMAN.2022.115897</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib64"><label>Wang et al.(2023)Wang, Luo, Wu, Tan, He, Ye, and Fan</label><mixed-citation>
      
Wang, Q., Luo, K., Wu, C., Tan, J., He, R., Ye, S., and Fan, J.: Inter-farm
cluster interaction of the operational and planned offshore wind power base,
J. Clean. Prod., 396, 136529,
<a href="https://doi.org/10.1016/J.JCLEPRO.2023.136529" target="_blank">https://doi.org/10.1016/J.JCLEPRO.2023.136529</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib65"><label>Wang et al.(2026)Wang, Hu, Yang, Ti, and Deng</label><mixed-citation>
      
Wang, Q., Hu, J., Yang, S., Ti, Z., and Deng, X.: Knowledge-Fusion Graph
Transformer network for wind farm assessment with sparse data, Renewable
Energy, 256, 124654, <a href="https://doi.org/10.1016/j.renene.2025.124654" target="_blank">https://doi.org/10.1016/j.renene.2025.124654</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib66"><label>Zong and Porté-Agel(2020)</label><mixed-citation>
      
Zong, H. and Porté-Agel, F.: A momentum-conserving wake superposition method
for wind farm power prediction, J. Fluid Mech., 889, A8,
<a href="https://doi.org/10.1017/jfm.2020.77" target="_blank">https://doi.org/10.1017/jfm.2020.77</a>, 2020.

    </mixed-citation></ref-html>--></article>
