«Идентификация вихрей» относится к процессу обнаружения и определения характеристик вихрей в различных научных и инженерных приложениях. Вихри — это закрученные структуры жидкости, обычно встречающиеся в гидродинамике, метеорологии и других областях. Вот несколько методов идентификации вихрей вместе с примерами кода:
- Методы, основанные на завихренности:
Завихренность — это векторная величина, описывающая локальное вращение жидкости. Идентификацию вихря можно выполнить путем анализа поля завихренности. Одним из популярных методов является критерий Окубо-Вейсса, который идентифицирует вихри на основе локального совмещения главных осей тензора скорости деформации с собственными векторами тензора завихренности. Вот пример фрагмента кода с использованием 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
- 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
- Метод 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