Методы идентификации вихрей: методы и примеры кода

«Идентификация вихрей» относится к процессу обнаружения и определения характеристик вихрей в различных научных и инженерных приложениях. Вихри — это закрученные структуры жидкости, обычно встречающиеся в гидродинамике, метеорологии и других областях. Вот несколько методов идентификации вихрей вместе с примерами кода:

  1. Методы, основанные на завихренности:
    Завихренность — это векторная величина, описывающая локальное вращение жидкости. Идентификацию вихря можно выполнить путем анализа поля завихренности. Одним из популярных методов является критерий Окубо-Вейсса, который идентифицирует вихри на основе локального совмещения главных осей тензора скорости деформации с собственными векторами тензора завихренности. Вот пример фрагмента кода с использованием Python и NumPy:
import numpy as np
def identify_vortices(vorticity):
    # Calculate strain rate tensor
    grad_vorticity = np.gradient(vorticity)
    du_dy, dv_dx = grad_vorticity[0], grad_vorticity[1]

    # Calculate vorticity tensor
    dv_dy, du_dx = np.gradient(vorticity)

    # Calculate eigenvalues and eigenvectors of tensors
    strain_tensor = np.array([[du_dx, du_dy], [dv_dx, dv_dy]])
    eigvals, eigvecs = np.linalg.eig(strain_tensor)

    # Calculate Okubo-Weiss criterion
    okubo_weiss = du_dx2 + dv_dy2 - du_dy2 - dv_dx2

    # Identify vortices based on Okubo-Weiss criterion
    vortices = np.where(okubo_weiss < 0)

    return vortices
  1. Q-критерий:
    Q-критерий — еще один широко используемый метод идентификации вихрей. Он определяет наличие вихря на основе местного вращения и скорости деформации жидкости. Вот пример фрагмента кода с использованием MATLAB:
function vortices = identifyVortices(vorticity, strainRate)
    % Calculate the Q-criterion
    qCriterion = 0.5 * (norm(vorticity + strainRate) - norm(vorticity - strainRate));

    % Identify vortices based on the Q-criterion threshold
    threshold = 0.1; % Adjust this threshold as needed
    vortices = find(qCriterion > threshold);
end
  1. Метод Lambda2:
    Метод Lambda2 идентифицирует вихри, анализируя второе по величине собственное значение тензора градиента скорости. Он характеризует области с отрицательными значениями лямбда2 как вихревые области. Вот пример фрагмента кода с использованием MATLAB:
function vortices = identifyVortices(velocity)
    % Calculate velocity gradient tensor
    [gradU, gradV] = gradient(velocity);
    lambda2 = zeros(size(velocity));

    for i = 1:size(velocity, 1)
        for j = 1:size(velocity, 2)
            gradUi = gradU(i, j);
            gradVj = gradV(i, j);
            gradUj = gradU(j, i);
            gradVi = gradV(j, i);
            lambda2(i, j) = 0.5 * (gradUi^2 + gradVj^2 + gradUj^2 + gradVi^2) ...
                - sqrt((gradUi^2 + gradVj^2 - gradUj^2 - gradVi^2)^2 + 4 * (gradUi * gradVj - gradUj * gradVi)^2);
        end
    end

    % Identify vortices based on the lambda2 threshold
    threshold = -0.1; % Adjust this threshold as needed
    vortices = find(lambda2 < threshold);
end