Updated 24 Jul 2020
Based on and inspired by Sebastian Endrikat https://www.mathworks.com/matlabcentral/fileexchange/52343-find-vortices-in-velocity-fields
Underlying math presented by L Graftieaux "Combining PIV, POD and vortex identification algorithms for the study of unsteady turbulent swirling flows" https://iopscience.iop.org/article/10.1088/0957-0233/12/9/307/pdf
Thanks a lot!
Sebastian's code is rather slow, though, because it uses 4 nested for loops. Producing the gamma1 map can be done more efficiently in Matlab by realizing that the operations described in the Graftieaux's paper can be rearranged into two convolutions. This code does that, basically. It also find the maximum gamma 1 by fitting a spline curve, therefore not being limited by the grid resolution of the vector field.
The drawback is that it'll find only one vortex core, which might not be desired in some applications where multiple vortices form. One can, however, use the second output (G1) to perform their own peak finding/thresholding to find multiple vortex cores.
Write-up of the details on https://zigunov.com/2019/07/08/finding-vortex-cores-with-gamma-1/
Hope it was useful!
Fernando Zigunov (2020). 2D Vortex Core Tracking - Gamma 1 - Super Fast (https://www.mathworks.com/matlabcentral/fileexchange/72092-2d-vortex-core-tracking-gamma-1-super-fast), MATLAB Central File Exchange. Retrieved .
Hi, Mingtao Wang, I think the problem is that the code wasn't finding minima of gamma1, only maxima. I'm now taking abs(Gamma) and feeding that into the maximum locator. Sorry about the bug!
Hello, thank you for you sharing. When I use you project to find vortex core of wind field(ASACT), I meet some problems: the line 117 shows Index out of matrix dimension. If you want to contect me, my e-mail is email@example.com.
Fixed bug when Gamma<0 it needs to find minimum instead of maximum (using abs(Gamma) now).
Just added the website with some further description and math.