using Gmsh
using Gridap
using GridapGmsh
using GridapMakie
using GLMakie1 Моделирование теплового состояния радиатора охлаждения
1.1 Аннотация
- Предварительные знания: Основы линейной алгебры, дифференциальные уравнения в частных производных, понятие граничных условий Дирихле и Неймана.
- Освоенные численные методы: Метод конечных элементов (МКЭ), построение слабой формы уравнения теплопроводности, численное интегрирование на конечно-элементной сетке.
- Физическая задача: Расчёт температурного поля радиатора охлаждения при стационарном режиме теплопередачи с учётом конвективного теплообмена на боковых поверхностях.
1.2 Основные теоретические сведения
1.2.1 Теплопроводность в твёрдых телах
Теплопередача в инженерных конструкциях осуществляется тремя основными способами: теплопроводностью, конвекцией и тепловым излучением. Теплопроводность представляет собой процесс переноса теплоты при непосредственном контакте частиц тела, обусловленный хаотическим движением микрочастиц. Конвекция наблюдается в движущихся средах и связана с перемещением вещества в пространстве.
Температурное поле — совокупность значений температуры во всех точках пространства в данный момент времени. Температурный градиент — вектор, направленный по нормали к изотермической поверхности в сторону возрастания температуры. Тепловой поток — количество теплоты, переносимое через изотермическую поверхность в единицу времени.
Закон Фурье устанавливает пропорциональность между плотностью теплового потока и градиентом температуры:
\[\mathbf{q} = -\lambda \nabla T\]
где \(\mathbf{q}\) — плотность теплового потока, Вт/м²; \(\lambda\) — коэффициент теплопроводности, Вт/(м·К).
Дифференциальное уравнение энергии описывает изменение температуры во времени с учётом внутренних источников теплоты:
\[\rho c_p \frac{\partial T}{\partial t} = -\nabla \cdot \mathbf{q} + q_v\]
Подставляя закон Фурье, получаем уравнение Фурье-Кирхгофа:
\[\rho c_p \frac{\partial T}{\partial t} = \nabla \cdot (\lambda \nabla T) + q_v\]
Для стационарного режима производная по времени обращается в ноль, и уравнение принимает вид:
\[-\nabla \cdot (\lambda \nabla T) + q_v = 0\]
Граничные условия необходимы для однозначности решения:
- Условие Дирихле (I рода): задание температуры на границе \(T = T_D\)
- Условие Неймана (II рода): задание теплового потока \(-\lambda \nabla T \cdot \mathbf{n} = q_N\)
- Условие конвективного теплообмена (III рода): \(-\lambda \nabla T \cdot \mathbf{n} = \alpha(T - T_\infty)\)
1.2.2 Метод конечных элементов и слабая формулировка
Мультифизическое моделирование основано на дифференциальных уравнениях в частных производных (ДУЧП). Классическая (строгая) постановка дифференциальных уравнений требует высокой гладкости искомого решения — например, существования и непрерывности вторых производных. Однако в методе конечных элементов решение ищется в виде кусочно-полиномиальных функций, которые в общем случае могут иметь разрывные производные на границах элементов. Обойти это ограничение позволяет переход к интегральной формулировке. Такая формулировка носит название слабой формой, поскольку ослабляет требования к искомой функции. Кроме того, благодаря интегрированию по частям, она позволяет учесть граничные условия естественным образом.
Процедура получения слабой формы включает умножение уравнения на произвольную пробную функцию \(v\), интегрирование по области \(\Omega\) и применение интегрирования по частям:
\[ \int_\Omega \lambda \nabla v \cdot \nabla u \, d\Omega + \int_\Gamma v (\lambda \nabla u \cdot \mathbf{n}) \, d\Gamma = \int_\Omega v q_v \, d\Omega \]
При учёте граничного условия III рода получаем слабую форму:
\[\int_\Omega \lambda \nabla v \cdot \nabla u \, d\Omega + \int_\Gamma \alpha u v \, d\Gamma = \int_\Gamma \alpha T_\infty v \, d\Gamma\]
Функция \(u\) называется слабым решением, если она удовлетворяет этому уравнению для всего пространства пробных функций.
Переход от непрерывной слабой формы к дискретной компьютерной модели осуществляется с помощью метода Бубнова-Галеркина. Область разбивается на конечные элементы, а искомое решение и пробные функции аппроксимируются одинаковыми кусочными полиномами (функциями формы Лагранжа). Более основательный разбор метода Галеркина,конечно-элементной аппроксимации и интегральными постановками дифференциальных уравнений представлен в работах [1], [2], [3].
1.3 Практическая задача
1.3.1 Постановка задачи
Рассчитать температурное поле алюминиевого радиатора охлаждения в двумерной постановке. Радиатор имеет прямоугольное основание с рёбрами жёсткости.
Геометрические параметры: - Ширина основания: 100 мм - Толщина оснований: 10 мм - Высота: 50 мм - Толщина ребра: 7 мм - Количество рёбер: 5
Физические параметры: - Материал: алюминий, \(\lambda = 238\) Вт/(м·К) - Коэффициент теплоотдачи: \(\alpha = 62\) Вт/(м²·К) - Температура основания: \(T_D = 63\)°С - Температура окружающей среды: \(T_\infty = 17\)°С
Граничные условия: - Нижняя грань: условие Дирихле (\(T = 63\)°С) - Боковые грани и рёбра: условие конвективного теплообмена (III род)
1.3.2 Реализация в программном стеке
1.3.2.1 Знакомство с библиотекой
Для решения данной задачи мы будем использовать язык программирования Julia и библиотеку Gridap.jl для реализации метода конечных элементов. Кроме него, будут использоваться несколько вспомогательных библиотек, таких как:
Gmsh.jl- обертка для библиотеки Gmsh, используемой для создания геометрии и генерации сетки;GridapGmsh.jl- интеграция Gmsh с Gridap для загрузки геометрии и сетки;GridapMakie.jlиGLMakie.jl- библиотеки для визуализации результатов.
Заголовок с импортом представлен в листинге Список 1.1.
1.3.2.2 Геометрия в Gmsh
Создание геометрии радиатора с разметкой границ для наложения граничных условий представлено в листинге Список 1.2.
# инициализация gmsh
gmsh.initialize() # инициализация ядра gmsh
gmsh.option.setNumber("General.Terminal", 0); # отключение вывода в терминал логов
# порядок элементов
EL_ORDER = 1
#установка параметров gmsh
gmsh.option.setNumber("Mesh.MaxNumThreads3D", 1);
gmsh.option.setNumber("Mesh.ElementOrder", EL_ORDER);
# создание модели
gmsh.model.add("t4")
# параметры радиатора
height = 5e-2;
width = 10e-2;
base_th = 1e-2;
rib_th = 7e-3;
rib_num = 7;
# количество зазоров между ребрами и их ширина
gap_num = rib_num - 1;
sp = (width - rib_num * rib_th) / gap_num;
# размер элементов
Lc1 = 0.3e-2;
# создание "фабрики"
factory = gmsh.model.geo;
# создание угловых узлов
factory.addPoint(-width / 2, 0, 0, Lc1, 1);
factory.addPoint(width / 2, 0, 0, Lc1, 2);
factory.addPoint(width / 2, height, 0, Lc1, 3);
factory.addPoint(-width / 2, height, 0, Lc1, 4);
# создание угловых узлов зазоров между ребрами (по 4 узла на каждый зазор)
for i in 1:gap_num
# узлы зазора: левый верхний, левый нижний, правый нижний, правый верхний
x1 = -width / 2 + i * rib_th + (i - 1) * sp;
x2 = x1 + sp;
pt = 4 + 4 * (i - 1);
factory.addPoint(x1, height, 0, Lc1, pt + 1);
factory.addPoint(x1, base_th, 0, Lc1, pt + 2);
factory.addPoint(x2, base_th, 0, Lc1, pt + 3);
factory.addPoint(x2, height, 0, Lc1, pt + 4);
end
# обводка контура
factory.addLine(1, 2, 1);
factory.addLine(2, 3, 2);
factory.addLine(1, 4, 3);
# номер последнего узла верхней грани: 4 угловых узла плюс по 4 на каждый зазор
pt_last = 4 * rib_num;
for i in 4:(pt_last - 1)
factory.addLine(i, i + 1, i)
end
factory.addLine(pt_last, 3, pt_last);
# объявление границ, по которым будут накладыватся граничные условия
factory.addPhysicalGroup(1, collect(2:pt_last), -1, "free");
factory.addPhysicalGroup(1, [1], -1, "fixed");
factory.synchronize();
# объединение контура: две боковые линии и обход верхней грани с зазорами
loop_lines = [-2, -1, 3];
for i in 4:pt_last
push!(loop_lines, i)
end
factory.addCurveLoop(loop_lines, 17);
# создание поверхности внутр контур
factory.addPlaneSurface([17], 18)
factory.synchronize()
# создание группы с поверхностью -> необходимо для генерации геометрии
factory.addPhysicalGroup(2, [18], -1, "coller");
factory.synchronize()
# генерация сетки
gmsh.model.mesh.generate(2)
# результат пишем в файл geo.msh в папке урока
name = "geo.msh" |> tcf;
print(name)
# gmsh.fltk.run()
gmsh.write(name)
# заканчиваем работу gmsh
gmsh.finalize()На рисунке Рисунок 1.1 показана геометрия радиатора с тремя рёбрами. Нижняя грань (красный цвет) соответствует условию Дирихле, боковые поверхности и рёбра (синий цвет) — условию конвективного теплообмена.
1.3.2.3 Дискретизация в Gridap
Загрузка геометрии и построение конечно-элементных пространств для решения задачи теплопроводности представлены в листинге Список 1.3.
model = GmshDiscreteModel(name);
reffe = ReferenceFE(lagrangian, Float64, 1)
V0 = TestFESpace(model, reffe; conformity=:H1, dirichlet_tags=["fixed"]);
g(x) = 63.0
Ug = TrialFESpace(V0, g)
degree = 2
Ω = Triangulation(model)
dΩ = Measure(Ω, degree)
neumanntags = ["free"]
Γ = BoundaryTriangulation(model, tags=neumanntags)
dΓ = Measure(Γ, degree)
T_a = 17.0; α = 62.0; λ = 238.0;
h(x) = α * T_a;
a(u, v) = ∫(λ * ∇(v) ⋅ ∇(u)) * dΩ + ∫(α * u * v) * dΓ
b(v) = ∫(v * h) * dΓ
op = AffineFEOperator(a, b, Ug, V0)
ls = LUSolver()
solver = LinearFESolver(ls)
uh = solve(solver, op)1.3.3 Визуализация результатов
Визуализация результатов с использованием библиотек GridapMakie и CairoMakie представлена в листинге Список 1.4.
fig = Figure(size=(700, 360))
ax = Axis(fig[1,1],aspect=DataAspect())
plt = plot!(ax, Ω, uh)
wireframe!(ax, Ω, color=:black, linewidth=1)
Colorbar(fig[1,2], plt, height = Relative(1), label="T, °C")
figНа рисунке Рисунок 5.2 представлено распределение температуры по объёму радиатора. Видно, что максимальная температура (63°С) достигается на основании, а минимальная (59°C) — на удалённых участках рёбер.
1.4 Анализ и интерпретация результатов
Анализ полученного распределения температуры показывает характерное поведение для радиаторов с конвективным охлаждением. Температура плавно уменьшается от основания к верхней части рёбер.
Ключевые наблюдения: - Температура основания стабильно равна заданному значению 63°С благодаря условию Дирихле - Перепад температуры между основанием и концом рёбер составляет около 3°С - Рёбра отводят тепло благодаря увеличению площади теплообмена - Градиент температуры более выражен вблизи основания ребер
Сравнение с аналитическим решением: Для простейшего случая пластины без рёбер аналитическое решение даёт линейное распределение температуры. Наличие рёбер приводит к нелинейному распределению, обусловленному конвективным теплообменом по всей поверхности.
1.5 Контрольные вопросы и задания
1.5.1 Теоретические вопросы
- Почему для решения задач теплопроводности используется слабая форма уравнения, а не классическая дифференциальная форма?
- Какие граничные условия использованы в данной задаче и как они учитываются в слабой форме?
- Объясните физический смысл коэффициента теплопроводности \(\lambda\) и коэффициента теплоотдачи \(\alpha\).
- Как изменится распределение температуры при увеличении коэффициента теплоотдачи \(\alpha\)?
1.5.2 Практические задания
- Измените коэффициент теплопроводности на значение для меди (395 Вт/(м·К)) и сравните результаты.
- Рассчитайте радиатор с пятью рёбрами при тех же остальных параметрах.
- Добавьте внутренний источник теплоты в основание радиатора и решите задачу.
- Проведите исследование сходимости МКЭ, последовательно измельчая сетку.