Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности

Материал из Алговики
Перейти к навигации Перейти к поиску

Участник:Popko Fedor

Свойства и структура алгоритма

Общее описание алгоритма

Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности [1] с правой частью имеет вид:

[math]\displaystyle{ \frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t), }[/math]

где [math]\displaystyle{ u(x, t) }[/math] — температура в точке [math]\displaystyle{ x }[/math] в момент времени [math]\displaystyle{ t }[/math], [math]\displaystyle{ a }[/math] — коэффициент теплопроводности материала, [math]\displaystyle{ f(x, t) }[/math] — правая часть, описывающая внешний источник или сток тепла. Также необходимо задать:

1. Граничные условия:

Граничные условия задаются на краях области [math]\displaystyle{ x = 0 }[/math] и [math]\displaystyle{ x = L }[/math] и бывают нескольких типов.

  • Граничные условия первого рода (условия Дирихле):

Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.

[math]\displaystyle{ \begin{cases} u(0, t) = u_{\text{left}}(t), \\ u(L, t) = u_{\text{right}}(t), \end{cases} }[/math]

где [math]\displaystyle{ u_{\text{left}}(t) }[/math] и [math]\displaystyle{ u_{\text{right}}(t) }[/math] — заданные значения температуры на левой и правой границах области.

  • Граничные условия второго рода (условия Неймана):

Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.

[math]\displaystyle{ \begin{cases} \frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\ \frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t), \end{cases} }[/math]

где [math]\displaystyle{ q_{\text{left}}(t) }[/math] и [math]\displaystyle{ q_{\text{right}}(t) }[/math] — заданные значения теплового потока на левой и правой границах.

2. Начальные условия:

Задаются для всего стержня при начальном времени [math]\displaystyle{ t = 0 }[/math]: [math]\displaystyle{ u(x, 0) = u_0(x), }[/math] где [math]\displaystyle{ u_0(x) }[/math] — начальное распределение температуры по всей длине стержня.


Далее будем рассматривать граничные условия первого рода равные нулю. Тогда итоговая система будет иметь вид:

[math]\displaystyle{ \begin{cases} \frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), & 0 \lt x \lt L, \, t \gt 0, \\ u(0, t) = u(L, t) = 0, \\ u(x, 0) = u_0(x), & 0 \leq x \leq L . \end{cases} }[/math]


Математическое описание алгоритма

Для явной разностной схемы[2] приближаем производные конечными разностями на каждом временном шаге, обновляя [math]\displaystyle{ u(x, t) }[/math] в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть [math]\displaystyle{ \Delta x }[/math] — шаг по пространству, а [math]\displaystyle{ \Delta t }[/math] — шаг по времени.

1. Аппроксимация производной по пространству:

Вторую производную по [math]\displaystyle{ x }[/math] можно аппроксимировать следующим образом: [math]\displaystyle{ \frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2}, }[/math] где [math]\displaystyle{ u_i^n }[/math] — значение температуры в узле [math]\displaystyle{ i }[/math] на временном слое [math]\displaystyle{ n }[/math].

2. Аппроксимация производной по времени:

Первую производную по [math]\displaystyle{ t }[/math] можно аппроксимировать так: [math]\displaystyle{ \frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}. }[/math]

3. Схема явного метода:

Подставляем аппроксимации производных в исходное уравнение теплопроводности:

[math]\displaystyle{ \frac{u_i^{n+1} - u_i^n}{\Delta t} = a \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2} + f(x_i, t_n). }[/math]

Теперь выразим [math]\displaystyle{ u_i^{n+1} }[/math]:

[math]\displaystyle{ u_i^{n+1} - u_i^n = \Delta t \cdot \left( a \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2} + f(x_i, t_n) \right). }[/math]

[math]\displaystyle{ u_i^{n+1} = u_i^n + \Delta t \cdot \left( a \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2} + f(x_i, t_n) \right). }[/math]

У нас получилось явное выражение для [math]\displaystyle{ u_i^{n+1} }[/math], которое позволяет вычислить температуру в узле [math]\displaystyle{ i }[/math] на следующем временном слое, используя значения с текущего временного слоя [math]\displaystyle{ n }[/math].


4. Граничные условия:

Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, [math]\displaystyle{ u(0, t) = 0 }[/math] и [math]\displaystyle{ u(L, t) =0 }[/math] для закрепленных концов стержня.

5. Начальные условия:

Начальные условия для температуры по всему стержню [math]\displaystyle{ u(x, 0) = u_0(x) }[/math] для начального распределения температуры. В результате, итоговая система уравнений для каждого временного слоя [math]\displaystyle{ n+1 }[/math] и каждого узла [math]\displaystyle{ i }[/math] в сетке может быть записана как:

[math]\displaystyle{ \begin{cases} u_i^{n+1} = u_i^n + \Delta t \cdot \left( a \frac{u_{i+1}^n - 2 u_i^n + u_{i-1}^n}{(\Delta x)^2} + f(x_i, t_n) \right), i = 1, \dots, L-1, \\ u_0^{n+1} = u_L^{n+1} = 0, \\ u_i^0 = u_0(x_i), i = 0, \dots, L. \end{cases} }[/math]


Вычислительное ядро алгоритма

[3]

Макроструктура алгоритма

Схема реализации последовательного алгоритма

Последовательная сложность алгоритма

Информационный граф

Ресурс параллелизма алгоритма

Входные и выходные данные алгоритма

Программная реализация алгоритма

Масштабируемость алгоритма и его реализации

Существующие реализации алгоритма

Литература

  1. ↑ Тихонов А.Н., Самарский А.А. Уравнения математической физики.
  2. ↑ Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.
  3. ↑ Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.