Подбор вентилятора охлаждения ЦП
Author
using Interpolations
# Универсальная функция расчета матрицы расходов методом передискретизации кривых
function calculate_fan_matrix(p_passport, q_passport, v_input, n_ref)
m = length(p_passport)
n = length(v_input)
# Инициализируем результирующую матрицу размерностью n x m
flow_matrix = zeros(n, m)
for i in 1:n
N_current = v_input[i]
# Коэффициенты подобия для давлений и расходов (для данного типа вентиляторов кубический/квадратичный закон)
k_p = (N_current / n_ref)^2
k_q = (N_current / n_ref)^2 # Масштабирование расхода в этой модели также квадратично
# 1. Создаем физически смасштабированную кривую для текущей скорости
p_scaled = p_passport .* k_p
q_scaled = q_passport .* k_q
# 2. Строим интерполятор по получившейся СМАШТАБИРОВАННОЙ кривой
# Вне зоны работы вентилятора (давление выше максимального для этой скорости) ставим 0.001
interp_current_speed = LinearInterpolation(p_scaled, q_scaled, extrapolation_bc=0.001)
# 3. Переносим (интерполируем) значения расхода на общую фиксированную сетку давлений блока
for j in 1:m
p_target = p_passport[j]
# Если фиксированная точка давления выше, чем вентилятор может выдать на этой скорости
if p_target > maximum(p_scaled)
flow_matrix[i, j] = 0.001
else
q_val = interp_current_speed(p_target)
flow_matrix[i, j] = max(q_val, 0.001)
end
end
end
return flow_matrix
end