# Viscous vortex domains method

The viscous vortex domains (VVD) method is a mesh-free method of computational fluid dynamics for directly numerically solving 2D Navier-Stokes equations in Lagrange coordinates. It doesn't implement any turbulence model and free of arbitrary parameters. The main idea of this method is to present vorticity field with discrete regions (domains), which travel with diffusive velocity relatively to fluid and conserve their circulation. The same approach was used in Diffusion Velocity method of Ogami and Akamatsu, but VVD uses other discrete formulas

## Features

The VVD method deals with viscous incompressible fluid. The viscosity and density of fluid is considered to be constant. Method can be extended for simulation of heat conductive fluid flows (viscous vortex-heat domains method)
The main features are:
* Direct solving Navier-Stokes equations (DNS)
* Calculation of the friction force at the body surfaces
* Proper description of the boundary layers (even turbulent)
* Infinite computation region
* Convenient simulation of deforming boundaries
* Investigation of the flow-structure interaction, even in case of zero mass
* Estimated numerical diffusion and stability criteria

## Governing equations

The VVD method is based on a theorem, that circulation in viscous fluid is conserved on contours travelling with speed
    $\mathbf {u} =\mathbf {V} +\mathbf {V} _{d};~~~\mathbf {V} _{d}=-\nu {\dfrac {\nabla \mathbf {\Omega } }{|\mathbf {\Omega } |}};~~~\mathbf {\Omega } =[\nabla \times \mathbf {V} ]$,
where V is fluid velocity, V$_d$ — diffusion velocity, ν — kinematic viscosity. This theorem shows resemblance with Kelvin's circulation theorem, but it works for viscous flows.
Basing on this theorem, flow region with non-zero circulation is presented with number of domains (small regions with finite volumes), which move with velocity u and thus their circulation $\gamma$ remains constant. The actual boundaries of every domain are not tracked, but coordinates of the only tracking point in every domain is saved. Array of domains' coordinates and circulations is known either from boundary conditions or from initial conditions. Such a motion results in vorticity evolution and satisfies Navier-Stokes equations.

## Discrete formulas

Fluid velocity V in point r can be calculated with help of Biot-savart law
    $\mathbf {V} (\mathbf {r} )={\dfrac {1}{2\pi }}\sum _{i}\gamma _{i}\cdot \left[\mathbf {e} _{z}\times {\dfrac {\mathbf {r} -\mathbf {r} _{i}}{(\mathbf {r} -\mathbf {r} _{i})^{2}+\delta ^{2}}}\right]$
where i indexes domains in flow, r$_i$ — tracking point of domain and γ$_i$ — his circulation. δ is a so-called "radius of discreteness" — small value that smooths the vortex and helps to get rid of singularity in the domain tracking point. It equals to mean distance between domains.
Calculation of diffusion velocity is more difficult
    $\mathbf {V} _{d}(\mathbf {r} )=\nu \left({\dfrac {\mathbf {I} _{2}(\mathbf {r} )}{I_{1}(\mathbf {r} )}}+{\dfrac {\mathbf {I} _{3}(\mathbf {r} )}{2\pi \varepsilon ^{2}-I_{0}(\mathbf {r} )}}\right)$
First fraction produces vortex-vortex interaction (i — vortex index).
    $\mathbf {I} _{2}(\mathbf {r} )=\sum \limits _{i}{\dfrac {\mathbf {r} -\mathbf {r} _{i}}{\varepsilon \left|\mathbf {r} -\mathbf {r} _{i}\right|}}\cdot \gamma _{i}\cdot \exp(-\left|\mathbf {r} -\mathbf {r} _{i}\right|/\varepsilon )$
    $I_{1}(\mathbf {r} )={\sum \limits _{i}\gamma _{i}\cdot \exp(-\left|\mathbf {r} -\mathbf {r} _{i}\right|/\varepsilon )}$
And second fraction represents vortex-boundary repulsion. It helps to calculate ∇Ω near body surface and properly describe boundary layer.
    $\mathbf {I} _{3}(\mathbf {r} )={\sum \limits _{k}d\mathbf {S} _{k}\cdot \exp(-\left|\mathbf {r} -\mathbf {r} _{k}\right|/\varepsilon )}$
    $I_{0}(\mathbf {r} )={\varepsilon ^{2}\sum \limits _{k}{\dfrac {\left|\mathbf {r} -\mathbf {r} _{k}\right|/\varepsilon +1}{(\mathbf {r} -\mathbf {r} _{k})^{2}}}\cdot ((\mathbf {r} -\mathbf {r} _{k})\cdot d\mathbf {S} _{k})\cdot \exp(-\left|\mathbf {r} -\mathbf {r} _{k}\right|/\varepsilon )}$
Here k indexes boundary segments, r$_k$ — its center, dS$_k$ — its normal multiplied to the length.