Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности: различия между версиями
Строка 7: | Строка 7: | ||
где <math>u(x, t)</math> — температура в точке <math>x</math> в момент времени <math>t</math>, <math>a</math> — коэффициент теплопроводности материала, <math>f(x, t)</math> — правая часть, описывающая внешний источник или сток тепла. | где <math>u(x, t)</math> — температура в точке <math>x</math> в момент времени <math>t</math>, <math>a</math> — коэффициент теплопроводности материала, <math>f(x, t)</math> — правая часть, описывающая внешний источник или сток тепла. | ||
+ | Также необходимо задать: | ||
+ | |||
+ | 1. '''Граничные условия''': | ||
+ | |||
+ | Граничные условия задаются на краях области <math>x = 0</math> и <math>x = L</math> и бывают нескольких типов. | ||
+ | |||
+ | * Граничные условия первого рода (условия Дирихле): | ||
+ | |||
+ | Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени. | ||
+ | |||
+ | <math> | ||
+ | \begin{cases} | ||
+ | u(0, t) = u_{\text{left}}(t), \\ | ||
+ | u(L, t) = u_{\text{right}}(t), | ||
+ | \end{cases} | ||
+ | </math> | ||
+ | |||
+ | где <math>u_{\text{left}}(t)</math> и <math>u_{\text{right}}(t)</math> — заданные значения температуры на левой и правой границах области. | ||
+ | |||
+ | * Граничные условия второго рода (условия Неймана): | ||
+ | |||
+ | Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным. | ||
+ | |||
+ | <math> | ||
+ | \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>q_{\text{left}}(t)</math> и <math>q_{\text{right}}(t)</math> — заданные значения теплового потока на левой и правой границах. | ||
+ | |||
+ | 2. '''Начальные условия''': | ||
+ | |||
+ | Задаются для всего стержня при начальном времени <math>t = 0</math>: | ||
+ | <math>u(x, 0) = u_0(x),</math> | ||
+ | где <math>u_0(x)</math> — начальное распределение температуры по всей длине стержня. | ||
+ | |||
+ | |||
+ | Далее будем рассматривать граничные условия первого рода равные нулю. | ||
+ | Тогда итоговая система будет иметь вид: | ||
+ | |||
+ | <math> | ||
+ | \begin{cases} | ||
+ | \frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), & 0 < x < L, \, t > 0, \\ | ||
+ | u(0, t) = u(L, t) = 0, \\ | ||
+ | u(x, 0) = u_0(x), & 0 \leq x \leq L . | ||
+ | \end{cases} | ||
+ | </math> | ||
=== Математическое описание алгоритма === | === Математическое описание алгоритма === | ||
+ | Для явной разностной схемы приближаем производные конечными разностями на каждом временном шаге, обновляя <math>u(x, t)</math> в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть <math>\Delta x</math> — шаг по пространству, а <math>\Delta t</math> — шаг по времени. | ||
+ | |||
+ | 1. '''Аппроксимация производной по пространству''': | ||
+ | |||
+ | Вторую производную по <math>x</math> можно аппроксимировать следующим образом: | ||
+ | <math>\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>u_i^n</math> — значение температуры в узле <math>i</math> на временном слое <math>n</math>. | ||
+ | |||
+ | 2. '''Аппроксимация производной по времени''': | ||
+ | |||
+ | Первую производную по <math>t</math> можно аппроксимировать так: | ||
+ | <math>\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.</math> | ||
+ | |||
+ | 3. '''Схема явного метода''': | ||
+ | |||
+ | Подставляем аппроксимации производных в исходное уравнение теплопроводности: | ||
+ | <math>\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>u_i^{n+1}</math>: | ||
+ | |||
+ | <math>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>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>u_i^{n+1}</math>, которое позволяет вычислить температуру в узле <math>i</math> на следующем временном слое, используя значения с текущего временного слоя <math>n</math>. | ||
+ | |||
+ | |||
+ | 4. '''Граничные условия''': | ||
+ | |||
+ | Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, <math>u(0, t) = 0</math> и <math>u(L, t) =0</math> для закрепленных концов стержня. | ||
+ | |||
+ | 5. '''Начальные условия''': | ||
+ | |||
+ | Начальные условия для температуры по всему стержню <math>u(x, 0) = u_0(x)</math> для начального распределения температуры. | ||
+ | В результате, итоговая система уравнений для каждого временного слоя <math>n+1</math> и каждого узла <math>i</math> в сетке может быть записана как: | ||
+ | |||
+ | <math> | ||
+ | \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> | ||
Строка 35: | Строка 126: | ||
== Литература == | == Литература == | ||
+ | <references> | ||
+ | |||
+ | [[en:Description of algorithm properties and structure]] | ||
+ | <references /> | ||
+ | Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39. |
Версия 15:01, 3 ноября 2024
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 2 Программная реализация алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности с правой частью имеет вид:
[math]\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),[/math]
где [math]u(x, t)[/math] — температура в точке [math]x[/math] в момент времени [math]t[/math], [math]a[/math] — коэффициент теплопроводности материала, [math]f(x, t)[/math] — правая часть, описывающая внешний источник или сток тепла. Также необходимо задать:
1. Граничные условия:
Граничные условия задаются на краях области [math]x = 0[/math] и [math]x = L[/math] и бывают нескольких типов.
- Граничные условия первого рода (условия Дирихле):
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.
[math] \begin{cases} u(0, t) = u_{\text{left}}(t), \\ u(L, t) = u_{\text{right}}(t), \end{cases} [/math]
где [math]u_{\text{left}}(t)[/math] и [math]u_{\text{right}}(t)[/math] — заданные значения температуры на левой и правой границах области.
- Граничные условия второго рода (условия Неймана):
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.
[math] \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]q_{\text{left}}(t)[/math] и [math]q_{\text{right}}(t)[/math] — заданные значения теплового потока на левой и правой границах.
2. Начальные условия:
Задаются для всего стержня при начальном времени [math]t = 0[/math]: [math]u(x, 0) = u_0(x),[/math] где [math]u_0(x)[/math] — начальное распределение температуры по всей длине стержня.
Далее будем рассматривать граничные условия первого рода равные нулю.
Тогда итоговая система будет иметь вид:
[math] \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]
1.2 Математическое описание алгоритма
Для явной разностной схемы приближаем производные конечными разностями на каждом временном шаге, обновляя [math]u(x, t)[/math] в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть [math]\Delta x[/math] — шаг по пространству, а [math]\Delta t[/math] — шаг по времени.
1. Аппроксимация производной по пространству:
Вторую производную по [math]x[/math] можно аппроксимировать следующим образом: [math]\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]u_i^n[/math] — значение температуры в узле [math]i[/math] на временном слое [math]n[/math].
2. Аппроксимация производной по времени:
Первую производную по [math]t[/math] можно аппроксимировать так: [math]\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.[/math]
3. Схема явного метода:
Подставляем аппроксимации производных в исходное уравнение теплопроводности:
[math]\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]u_i^{n+1}[/math]:
[math]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]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]u_i^{n+1}[/math], которое позволяет вычислить температуру в узле [math]i[/math] на следующем временном слое, используя значения с текущего временного слоя [math]n[/math].
4. Граничные условия:
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, [math]u(0, t) = 0[/math] и [math]u(L, t) =0[/math] для закрепленных концов стержня.
5. Начальные условия:
Начальные условия для температуры по всему стержню [math]u(x, 0) = u_0(x)[/math] для начального распределения температуры. В результате, итоговая система уравнений для каждого временного слоя [math]n+1[/math] и каждого узла [math]i[/math] в сетке может быть записана как:
[math] \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]
1.3 Вычислительное ядро алгоритма
1.4 Макроструктура алгоритма
1.5 Схема реализации последовательного алгоритма
1.6 Последовательная сложность алгоритма
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
1.9 Входные и выходные данные алгоритма
2 Программная реализация алгоритма
2.1 Масштабируемость алгоритма и его реализации
2.2 Существующие реализации алгоритма
3 Литература
<references>
Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.