A type and accompanying methods for vortex filaments in Julia.
Author diederikb
0 Stars
Updated Last
2 Years Ago
Started In
May 2021


Dev Build Status Coverage

This package provides tools to create and plot vortex filaments and to compute the velocity they induce in three dimensions with support for infinite and semi-infinite vortex filaments.

VortexFilaments.jl is registered in the general Julia registry. To install, type e.g.,

] add VortexFilaments

Then, in any version, type

using VortexFilaments

The package introduces the VortexFilament type, which represents a vortex filament that is discretized with vertices and segments connecting those vertices. A vortex filament can be created by calling the provided constructor,

vertices = [[0.0,0.0,0.0], [0.0,1.0,0.0], [1.0,1.0,0.0], [1.0,0.0,0.0]]
Γ = 1.0 # strength of the vortex filament
vf = VortexFilament(Γ,vertices)

which can then be plotted with the provided type recipe.



The velocity that the vortex filament vf induces at a location x can be computed using as inducevelocity(vf,x), which returns a 3-element vector representing the velocity vector.

x = [0.5,0.5,0.5]

If you don't want the filament to be closed, provide the constructor with the keyword isclosed=false.

vf = VortexFilament(Γ,vertices,isclosed=false)


The vortex filament can also be an infinite vortex filament or a semi-infinite vortex element. If you want to plot these filaments, you have to provide the plot axis limits for the direction in which the vortex filament extends to infinity.

vertices = [[-Inf,0.0,0.0], [Inf,0.0,0.0]]
Γ = 1.0 # strength of the vortex filament
vf = VortexFilament(Γ,vertices) # infinite vortex filament


vertices = [[0,0.0,0.0], [Inf,0.0,0.0]]
Γ = 1.0 # strength of the vortex filament
vf = VortexFilament(Γ,vertices) # semi-infinite vortex filament


These (semi-)infinite filaments also work with the inducevelocity method. This provides the possibility to model a horseshoe vortex.

b = 1
Γ = 1.0 # sign depends on the order of the vertices
v1 = [Inf,-b/2,0]
v2 = [0,-b/2,0]
v3 = [0,b/2,0]
v4 = [Inf,b/2,0]
vf = VortexFilament(Γ,[v1,v2,v3,v4])
yrange1 = range(-b/2,b/2,length=20)
xevals = [[0.0,y,0.0] for y in yrange1[2:end-1]];
w = inducevelocity.(Ref(vf),xevals);

We will compare the induced velocity with the formula for the downwash for a horseshoe vortex.

yrange2 = range(-b/2,b/2,length=100)
downwash(Γ,b,y) = -Γ/(4π)*b/((b/2)^2-y^2);
wvec = [[xevals[i],xevals[i]+w[i]] for i in 1:length(w)];
p = plot(vf,xlims=[-1,4],ylims=[-0.6*b,0.6*b],label=false)
for i in 1:length(wvec)
plot3d!(zeros(length(yrange2)),yrange2,downwash.(1.0,b,yrange2),label="downwash formula")


Used By Packages

No packages found.