.. _capabilities:


Capabilities and Roadmap
========================

This section documents a non-exhaustive list of current AMR-Wind
capabilities and roadmap for future capabilities.

.. tip::

   If your project relies on a capability that is not yet present in
   AMR-Wind, please create an issue on the code project page.

   Please acknowledge as a publication co-author any developer that
   has significantly contributed to implementing or improving specific
   capability that was used for that publication.


Capabilities
------------

.. tip::

   The capabilities are linked to the relevant input file references
   (keyword `inp`) and documentation (keyword `doc`). Searching for
   those keywords in the `test/test_files` directory will give
   concrete examples of the feature usage.


Methods and models
~~~~~~~~~~~~~~~~~~

* Numerical methods

   * Advection: second order, piecewise parabolic, piecewise linear, WENO, Bell-Dawson-Shubin [:ref:`doc <discretization>`, :ref:`inp <inputs_incflo_advection>`]

   * Diffusion: second order, explicit, Crank-Nicolson, and implicit [:ref:`doc <discretization>`, :ref:`inp <inputs_incflo_diffusion>`]

   * Mesh refinement: static refinement for specified regions [:ref:`inp <inputs_static_refinement>`], adaptive mesh refinement [:ref:`inp <inputs_amr>`] (e.g., field based, curvature, q-criterion, vorticity [:ref:`inp <inputs_tagging>`])

   * Mesh mapping for non-uniform cartesian grids [:ref:`doc <mapping>`, :ref:`inp <inputs_geometry>`]

* Equations systems

   * Incompressible and low Mach formulations of Navier-Stokes :ref:`[doc] <governing_equations>`

   * Temperature

   * Level set

   * Subgrid scale kinetic energy :ref:`[doc] <turbulence>`

   * Specific dissipation rate :ref:`[doc] <turbulence>`

   * Passive scalar

   * Source terms for these PDEs [:ref:`doc <source_terms>`, :ref:`inp <inputs_momentum_sources>`]

* Turbulence modeling

   * Large Eddy Simulation: constant Smagorinsky,  AMD, one equation :math:`k_{sgs}`, Kosovic [:ref:`doc <turbulence>`, :ref:`inp <inputs_turbulence>`]

   * Wall models: log-law, constant stress, Schumann [:ref:`doc <wall_models>`, :ref:`inp <inputs_abl>`], dynamic (wave model) [:ref:`doc <wall_models>`, :ref:`inp <inputs_boundary_conditions>` 

   * Reynolds-Average Navier-Stokes: :math:`k`-:math:`\omega` SST (and IDDES variant) and One-equation TKE model of Axell and Liungman [:ref:`doc <turbulence>`, :ref:`inp <inputs_turbulence>`]

* Transport models

   * Constant transport coefficients [:ref:`inp <inputs_transport>`]

   * Two phase transport (separate coefficients for each material) [:ref:`inp <inputs_transport>`]

Flow physics
~~~~~~~~~~~~

* Wind energy physics

   * Atmospheric boundary layer (ABL): various stability states (stable, unstable, neutral), precursor simulations with inflow boundary planes for wind farm simulations, anelastic formulation, mesoscale forcing, geostrophic forcing, Coriolis forcing, Monin-Obukhov similarity theory, gravity forcing, gravity wave damping [:ref:`inp <inputs_abl>`]

   * Actuator turbine representations: Joukowsky disks, uniform disks, actuator line [:ref:`inp <inputs_actuator>`]

   * Coupling with OpenFAST

   * Coupling with Nalu-Wind for blade resolved simulations

* Multiphase flows [:ref:`doc <multiphase>`]

   * Prescribed flow cases for verification of volume-of-fluid transport: Zalesak disk, vortex patch

   * Prescribed flow cases for verification of momentum equation coupled to volume-of-fluid transport: Zalesak disk scalar vel, vortex patch scalar vel

   * Validation and demonstration cases: sloshing tank, dam break, breaking waves, falling or inertial droplet

   * Methods to initialize volume-of-fluid field from an initial levelset field

   * Monitors conservation of mass and momentum

* Ocean wave forcing (for multiphase flows) [:ref:`inp <inputs_ocean_waves>`]

   * Wave types: linear (monochromatic), Stokes (second to fifth order), irregular (input by modes files from HOS-Ocean)

   * Relaxation zones force wave profile to generate waves at lower x boundary or force toward quiescent flat interface at upper x boundary. Wave profile can also be enforced (instead of numerical beach) at upper x boundary for periodic simulations.

* Boundary conditions

   * Periodic, outflow, inflow, walls, user-defined inflows [:ref:`inp <inputs_boundary_conditions>`]

   * Wall models (e.g., wall functions, stress) [:ref:`doc <wall_models>`, :ref:`inp <inputs_abl>`]

   * Inflow planes from precursor simulations [:ref:`doc <amrwind-abl-bndry-io>`, :ref:`inp <inputs_abl>`]

   * Mesoscale forcing [:ref:`doc <mesoscale_forcing>`, :ref:`inp <inputs_meso_forcing>`]

   * Synthetic turbulence [:ref:`inp <inputs_synthetic_turbulence>`]

   * Arbitrarily spatially and time varying boundary conditions using Python tools [:ref:`inp <inputs_native_boundary_plane>`]

   * Sponge layer driven ABL simulations 

* Geometry

   * Immersed boundary forcing method with stair-case type terrain and wall function [:ref:`doc <terrain>`]

   * Coupling with Nalu-Wind for body-conforming meshes with overset methodology

* Miscellaneous cases

  * Verification and validation cases: method of manufactured solutions, convecting Taylor-Vortex, Rayleigh-Taylor, passive scalar, Burggraf flow, channel flow, Ekman spiral, vortex dipole, vortex ring

* Postprocessing

   * Visualization with VisIt, Paraview, yt

   * Sampling of fields with planes, point probes, lines, volumes, lidar, and radar [:ref:`doc <post_processing>`, :ref:`inp <inputs_sampling>`]

   * Sampling of fields at probes that follow free surface of liquid-gas flows [:ref:`inp <inputs_sampling_freesurface_sampler>`]

   * Scalar outputs such as kinetic energy, enstrophy, total wave energy, and norms [:ref:`doc <post_processing>`, :ref:`inp <inputs_sampling>`]

   * Turbulence averaging quantities such as Reynolds stresses [:ref:`inp <inputs_averaging>`]

   * Field plane averaging and second and third order moments

   * Derived fields and field operators such as vorticity, q-criterion, strain-rates, gradients, divergence, Laplacian [:ref:`inp <inputs_io_derived>`]

   * in-situ post-processing with Ascent

High performance computing
~~~~~~~~~~~~~~~~~~~~~~~~~~

* Highly parallelized and performance portable

   * Shared memory parallelism with OpenMP threading

   * Distributed memory parallelism with MPI

   * Supports all major compilers (e.g., GCC, Intel, LLVM)

   * Runs on all major GPU vendors (NVIDIA, AMD, Intel)

   * Supported build systems: cmake, spack

* Supported linear solvers

   * native AMReX solvers such as MLMG [:ref:`inp <inputs_mlmg>`]

   * hypre


Roadmap
-------

The roadmap is an evolving, living document and does not purport to
track every future capability. It is not a promise of future
capabilities. The main use case is to inform users of
potential upcoming new capabilities.

Current development
~~~~~~~~~~~~~~~~~~~

* Inflow-outflow BCs to enable coupling amr-wind to ERF mesoscale modeling software

* Temporal and spatial varying MMC forcing