<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Popko+Fedor</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Popko+Fedor"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Popko_Fedor"/>
	<updated>2026-10-22T17:52:56Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29680</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29680"/>
		<updated>2024-12-10T11:03:20Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству: Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N_x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее количество временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Вершины графа соответствуют операциям вычисления температуры в узлах сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел.&lt;br /&gt;
Дуги графа отражают информационные зависимости между операциями. Дуга из узла &amp;lt;math&amp;gt;(n−1,j)&amp;lt;/math&amp;gt; к узлу &amp;lt;math&amp;gt;(n,i)&amp;lt;/math&amp;gt; указывает на то, что для вычисления &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; требуется значение &amp;lt;math&amp;gt;u_j^{n-1}&amp;lt;/math&amp;gt; .&lt;br /&gt;
Так как вычисление каждого узла на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; зависит только от значений узлов предыдущего слоя &amp;lt;math&amp;gt;n−1&amp;lt;/math&amp;gt;, все операции внутри одного временного слоя могут выполняться независимо друг от друга.&lt;br /&gt;
[[Файл:Output.png|300px|thumb|center|Рис.1. Информационная структура]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Шаблон явной схемы для уравнения теплопроводности..png|300px|thumb|center|Рис.2. Шаблон явной схемы для уравнения теплопроводности.]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
Параллельная сложность явной разностной схемы для уравнения теплопроводности определяется числом временных слоёв &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt;,так как узлы каждого слоя могут вычисляться параллельно. Каждый временной слой зависит только от значений предыдущего слоя, на каждом ярусе ярусно-параллельной формы выполняются одинаковые операции (сложение, вычитание, умножение) с шириной яруса, равной &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
# Входные данные: Параметры задачи: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Начальные условия: функция &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt;, задающая начальное распределение температуры. Правая часть: функция &amp;lt;math&amp;gt;f(x,t)&amp;lt;/math&amp;gt;, описывающая внешний источник тепла. Параметры сетки: шаг по пространству &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, шаг по времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Общий объём входных данных (все параметры представлены как &#039;&#039;double&#039;&#039;): &amp;lt;math&amp;gt;V_{\text{input}} = 8 \times (3 + 2 + N_x) \, \text{байт}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Выходные данные: распределение температуры &amp;lt;math&amp;gt;u(x,t)&amp;lt;/math&amp;gt; в узлах сетки для каждого временного шага или для выбранных моментов времени. Общий объём выходных данных: &amp;lt;math&amp;gt;V_{\text{output}} = N_x \times N_t \times 8 \, \text{байт}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Масштабируемость алгоритма решения уравнения теплопроводности с использованием явной разностной схемы зависит от нескольких факторов. Один из них разделение пространства на блоки, которые обрабатываются параллельно: чем больше блоков данных на процесс, тем меньше потерь на взаимодействие между процессами. Обмен граничными значениями между соседними процессами является основной проблемой&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt; и для хорошей производительности необходимо минимизировать количество обменов. При увеличении числа узлов на процесс потери на обмены уменьшаются. Эффективность масштабируемости зависит от размеров задачи: при увеличении числа узлов и временных шагов объём вычислений растёт пропорционально. Для небольших задач накладные расходы на синхронизацию могут привести к снижению эффективности.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Существует множество последовательных реализаций алгоритма&amp;lt;ref&amp;gt;Разностные методы решения задач теплопроводности: учебное&lt;br /&gt;
пособие. / Г.В. Кузнецов, М.А. Шеремет. – Томск: Изд-во ТПУ,&lt;br /&gt;
2007.&amp;lt;/ref&amp;gt;, где вычисления выполняются на одном процессоре, что позволяет легко реализовать алгоритм и использовать его для небольших задач, однако его производительность ограничена. Для больших задач последовательный подход становится неэффективным, так как время выполнения растет.&lt;br /&gt;
Для решения крупных задач применяются параллельные реализации, распределяющие вычисления между несколькими процессами, например: &lt;br /&gt;
* Реализиция явной разностной схемы с использованием Tensorflow&amp;lt;ref&amp;gt;https://habr.com/ru/articles/321734/&amp;lt;/ref&amp;gt;, позволяющем использовать GPU для вычислений.&lt;br /&gt;
* Реализация  с использованием OpenMP&amp;lt;ref&amp;gt;https://github.com/UoB-HPC/openmp-tutorial/blob/master/Solutions/heat_data_reg.c&amp;lt;/ref&amp;gt;, которая использует возможности многопоточности для распараллеливания вычислений на многоядерных процессорах.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Output.png&amp;diff=29679</id>
		<title>Файл:Output.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Output.png&amp;diff=29679"/>
		<updated>2024-12-10T10:49:46Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Информационный граф для явной схемы&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29678</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29678"/>
		<updated>2024-12-10T10:25:23Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству: Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N_x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее количество временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|center|Рис.1. Информационная структура]]&lt;br /&gt;
[[Файл:Шаблон явной схемы для уравнения теплопроводности..png|300px|thumb|center|Рис.2. Шаблон явной схемы для уравнения теплопроводности.]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
Параллельная сложность явной разностной схемы для уравнения теплопроводности определяется числом временных слоёв &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt;,так как узлы каждого слоя могут вычисляться параллельно. Каждый временной слой зависит только от значений предыдущего слоя, на каждом ярусе ярусно-параллельной формы выполняются одинаковые операции (сложение, вычитание, умножение) с шириной яруса, равной &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
# Входные данные: Параметры задачи: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Начальные условия: функция &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt;, задающая начальное распределение температуры. Правая часть: функция &amp;lt;math&amp;gt;f(x,t)&amp;lt;/math&amp;gt;, описывающая внешний источник тепла. Параметры сетки: шаг по пространству &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, шаг по времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Общий объём входных данных (все параметры представлены как &#039;&#039;double&#039;&#039;): &amp;lt;math&amp;gt;V_{\text{input}} = 8 \times (3 + 2 + N_x) \, \text{байт}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Выходные данные: распределение температуры &amp;lt;math&amp;gt;u(x,t)&amp;lt;/math&amp;gt; в узлах сетки для каждого временного шага или для выбранных моментов времени. Общий объём выходных данных: &amp;lt;math&amp;gt;V_{\text{output}} = N_x \times N_t \times 8 \, \text{байт}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Масштабируемость алгоритма решения уравнения теплопроводности с использованием явной разностной схемы зависит от нескольких факторов. Один из них разделение пространства на блоки, которые обрабатываются параллельно: чем больше блоков данных на процесс, тем меньше потерь на взаимодействие между процессами. Обмен граничными значениями между соседними процессами является основной проблемой&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt; и для хорошей производительности необходимо минимизировать количество обменов. При увеличении числа узлов на процесс потери на обмены уменьшаются. Эффективность масштабируемости зависит от размеров задачи: при увеличении числа узлов и временных шагов объём вычислений растёт пропорционально. Для небольших задач накладные расходы на синхронизацию могут привести к снижению эффективности.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Существует множество последовательных реализаций алгоритма&amp;lt;ref&amp;gt;Разностные методы решения задач теплопроводности: учебное&lt;br /&gt;
пособие. / Г.В. Кузнецов, М.А. Шеремет. – Томск: Изд-во ТПУ,&lt;br /&gt;
2007.&amp;lt;/ref&amp;gt;, где вычисления выполняются на одном процессоре, что позволяет легко реализовать алгоритм и использовать его для небольших задач, однако его производительность ограничена. Для больших задач последовательный подход становится неэффективным, так как время выполнения растет.&lt;br /&gt;
Для решения крупных задач применяются параллельные реализации, распределяющие вычисления между несколькими процессами, например: &lt;br /&gt;
* Реализиция явной разностной схемы с использованием Tensorflow&amp;lt;ref&amp;gt;https://habr.com/ru/articles/321734/&amp;lt;/ref&amp;gt;, позволяющем использовать GPU для вычислений.&lt;br /&gt;
* Реализация  с использованием OpenMP&amp;lt;ref&amp;gt;https://github.com/UoB-HPC/openmp-tutorial/blob/master/Solutions/heat_data_reg.c&amp;lt;/ref&amp;gt;, которая использует возможности многопоточности для распараллеливания вычислений на многоядерных процессорах.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29677</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29677"/>
		<updated>2024-12-10T10:12:19Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству: Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N_x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее количество временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|center|Рис.1. Информационная структура]]&lt;br /&gt;
[[Файл:Шаблон явной схемы для уравнения теплопроводности..png|300px|thumb|center|Рис.2. Шаблон явной схемы для уравнения теплопроводности.]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
Параллельная сложность явной разностной схемы для уравнения теплопроводности определяется числом временных слоёв &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt;,так как узлы каждого слоя могут вычисляться параллельно. Каждый временной слой зависит только от значений предыдущего слоя, на каждом ярусе ярусно-параллельной формы выполняются одинаковые операции (сложение, вычитание, умножение) с шириной яруса, равной &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
# Входные данные: Параметры задачи: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Начальные условия: функция &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt;, задающая начальное распределение температуры. Правая часть: функция &amp;lt;math&amp;gt;f(x,t)&amp;lt;/math&amp;gt;, описывающая внешний источник тепла. Параметры сетки: шаг по пространству &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, шаг по времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Выходные данные: распределение температуры &amp;lt;math&amp;gt;u(x,t)&amp;lt;/math&amp;gt; в узлах сетки для каждого временного шага или для выбранных моментов времени.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Масштабируемость алгоритма решения уравнения теплопроводности с использованием явной разностной схемы зависит от нескольких факторов. Один из них разделение пространства на блоки, которые обрабатываются параллельно: чем больше блоков данных на процесс, тем меньше потерь на взаимодействие между процессами. Обмен граничными значениями между соседними процессами является основной проблемой&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt; и для хорошей производительности необходимо минимизировать количество обменов. При увеличении числа узлов на процесс потери на обмены уменьшаются. Эффективность масштабируемости зависит от размеров задачи: при увеличении числа узлов и временных шагов объём вычислений растёт пропорционально. Для небольших задач накладные расходы на синхронизацию могут привести к снижению эффективности.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Существует множество последовательных реализаций алгоритма&amp;lt;ref&amp;gt;Разностные методы решения задач теплопроводности: учебное&lt;br /&gt;
пособие. / Г.В. Кузнецов, М.А. Шеремет. – Томск: Изд-во ТПУ,&lt;br /&gt;
2007.&amp;lt;/ref&amp;gt;, где вычисления выполняются на одном процессоре, что позволяет легко реализовать алгоритм и использовать его для небольших задач, однако его производительность ограничена. Для больших задач последовательный подход становится неэффективным, так как время выполнения растет.&lt;br /&gt;
Для решения крупных задач применяются параллельные реализации, распределяющие вычисления между несколькими процессами, например: &lt;br /&gt;
* Реализиция явной разностной схемы с использованием Tensorflow&amp;lt;ref&amp;gt;https://habr.com/ru/articles/321734/&amp;lt;/ref&amp;gt;, позволяющем использовать GPU для вычислений.&lt;br /&gt;
* Реализация  с использованием OpenMP&amp;lt;ref&amp;gt;https://github.com/UoB-HPC/openmp-tutorial/blob/master/Solutions/heat_data_reg.c&amp;lt;/ref&amp;gt;, которая использует возможности многопоточности для распараллеливания вычислений на многоядерных процессорах.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29676</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29676"/>
		<updated>2024-12-06T21:27:26Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству: Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N_x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее количество временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|center|Рис.1. Информационная структура]]&lt;br /&gt;
[[Файл:Шаблон явной схемы для уравнения теплопроводности..png|300px|thumb|center|Рис.2. Шаблон явной схемы для уравнения теплопроводности.]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
Параллельная сложность явной разностной схемы для уравнения теплопроводности определяется числом временных слоёв &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt;,так как узлы каждого слоя могут вычисляться параллельно. Каждый временной слой зависит только от значений предыдущего слоя, на каждом ярусе ярусно-параллельной формы выполняются одинаковые операции (сложение, вычитание, умножение) с шириной яруса, равной &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
# Входные данные: Параметры задачи: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Начальные условия: функция &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt;, задающая начальное распределение температуры. Правая часть: функция &amp;lt;math&amp;gt;f(x,t)&amp;lt;/math&amp;gt;, описывающая внешний источник тепла. Параметры сетки: шаг по пространству &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, шаг по времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Выходные данные: распределение температуры &amp;lt;math&amp;gt;u(x,t)&amp;lt;/math&amp;gt; в узлах сетки для каждого временного шага или для выбранных моментов времени.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Масштабируемость алгоритма решения уравнения теплопроводности с использованием явной разностной схемы зависит от нескольких факторов. Один из них разделение пространства на блоки, которые обрабатываются параллельно: чем больше блоков данных на процесс, тем меньше потерь на взаимодействие между процессами. Обмен граничными значениями между соседними процессами является основной проблемой&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt; и для хорошей производительности необходимо минимизировать количество обменов. При увеличении числа узлов на процесс потери на обмены уменьшаются. Эффективность масштабируемости зависит от размеров задачи: при увеличении числа узлов и временных шагов объём вычислений растёт пропорционально. Для небольших задач накладные расходы на синхронизацию могут привести к снижению эффективности.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Существует множество последовательных реализаций алгоритма&amp;lt;ref&amp;gt;Разностные методы решения задач теплопроводности: учебное&lt;br /&gt;
пособие. / Г.В. Кузнецов, М.А. Шеремет. – Томск: Изд-во ТПУ,&lt;br /&gt;
2007.&amp;lt;/ref&amp;gt;, где вычисления выполняются на одном процессоре, что позволяет легко реализовать алгоритм и использовать его для небольших задач, однако его производительность ограничена. Для больших задач последовательный подход становится неэффективным, так как время выполнения растет.&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29640</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29640"/>
		<updated>2024-12-05T21:40:09Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|center|Рис.1. Информационная структура]]&lt;br /&gt;
[[Файл:Шаблон явной схемы для уравнения теплопроводности..png|300px|thumb|center|Рис.2. Шаблон явной схемы для уравнения теплопроводности.]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
Параллельная сложность явной разностной схемы для уравнения теплопроводности определяется числом временных слоёв &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt;,так как узлы каждого слоя могут вычисляться параллельно. Каждый временной слой зависит только от значений предыдущего слоя, на каждом ярусе ярусно-параллельной формы выполняются одинаковые операции (сложение, вычитание, умножение) с шириной яруса, равной &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
# Входные данные: Параметры задачи: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Начальные условия: функция &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt;, задающая начальное распределение температуры. Правая часть: функция &amp;lt;math&amp;gt;f(x,t)&amp;lt;/math&amp;gt;, описывающая внешний источник тепла. Параметры сетки: шаг по пространству &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, шаг по времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Выходные данные: распределение температуры &amp;lt;math&amp;gt;u(x,t)&amp;lt;/math&amp;gt; в узлах сетки для каждого временного шага или для выбранных моментов времени.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Масштабируемость алгоритма решения уравнения теплопроводности с использованием явной разностной схемы зависит от нескольких факторов. Один из них разделение пространства на блоки, которые обрабатываются параллельно: чем больше блоков данных на процесс, тем меньше потерь на взаимодействие между процессами. Обмен граничными значениями между соседними процессами является основной проблемой&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt; и для хорошей производительности необходимо минимизировать количество обменов. При увеличении числа узлов на процесс потери на обмены уменьшаются. Эффективность масштабируемости зависит от размеров задачи: при увеличении числа узлов и временных шагов объём вычислений растёт пропорционально. Для небольших задач накладные расходы на синхронизацию могут привести к снижению эффективности.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Существует множество последовательных реализаций алгоритма&amp;lt;ref&amp;gt;Разностные методы решения задач теплопроводности: учебное&lt;br /&gt;
пособие. / Г.В. Кузнецов, М.А. Шеремет. – Томск: Изд-во ТПУ,&lt;br /&gt;
2007.&amp;lt;/ref&amp;gt;, где вычисления выполняются на одном процессоре, что позволяет легко реализовать алгоритм и использовать его для небольших задач, однако его производительность ограничена. Для больших задач последовательный подход становится неэффективным, так как время выполнения растет.&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29639</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29639"/>
		<updated>2024-12-05T16:06:10Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|center|Рис.1. Информационная структура]]&lt;br /&gt;
[[Файл:Шаблон явной схемы для уравнения теплопроводности..png|300px|thumb|center|Рис.2. Шаблон явной схемы для уравнения теплопроводности.]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
Параллельная сложность явной разностной схемы для уравнения теплопроводности определяется числом временных слоёв &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt;,так как узлы каждого слоя могут вычисляться параллельно. Каждый временной слой зависит только от значений предыдущего слоя, на каждом ярусе ярусно-параллельной формы выполняются одинаковые операции (сложение, вычитание, умножение) с шириной яруса, равной &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt;&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
# Входные данные:&lt;br /&gt;
* Параметры задачи: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Начальные условия: функция &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt;, задающая начальное распределение температуры. Правая часть: функция &amp;lt;math&amp;gt;f(x,t)&amp;lt;/math&amp;gt;, описывающая внешний источник тепла.&lt;br /&gt;
* Параметры сетки: шаг по пространству &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, шаг по времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Выходные данные:&lt;br /&gt;
* Распределение температуры &amp;lt;math&amp;gt;u(x,t)&amp;lt;/math&amp;gt; в узлах сетки для каждого временного шага или для выбранных моментов времени.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29638</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29638"/>
		<updated>2024-12-05T15:37:21Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|слева|Рис.1. Информационная структура]]&lt;br /&gt;
[[Файл:Шаблон явной схемы для уравнения теплопроводности..png|300px|thumb| слева |Рис.2. Шаблон явной схемы для уравнения теплопроводности.]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8..png&amp;diff=29637</id>
		<title>Файл:Шаблон явной схемы для уравнения теплопроводности..png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8..png&amp;diff=29637"/>
		<updated>2024-12-05T15:34:26Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Шаблон явной схемы для уравнения теплопроводности.&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29636</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29636"/>
		<updated>2024-12-05T15:29:51Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|слева|Рис.1. Информационная структура]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29635</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29635"/>
		<updated>2024-12-05T15:29:16Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|слева|Рис.1. Информационная структура]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29634</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29634"/>
		<updated>2024-12-05T15:25:01Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф представляет параллельную структуру явной разностной схемы для решения уравнения &lt;br /&gt;
* Вершины графа соответствуют узлам сетки, обозначаемым координатами &amp;lt;math&amp;gt;(n,i,p)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — временной слой, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — пространственный узел, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; — номер процессора.&lt;br /&gt;
* Дуги графа: черным показаны локальные зависимости между узлами, обрабатываемые одним процессором, красным - связь между процессами.&lt;br /&gt;
[[Файл:Информационный граф для явной схемы.png|300px|thumb|center|Рис.1. Информационная структура]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84_%D0%B4%D0%BB%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B.png&amp;diff=29633</id>
		<title>Файл:Информационный граф для явной схемы.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84_%D0%B4%D0%BB%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B.png&amp;diff=29633"/>
		<updated>2024-12-05T15:20:25Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Информационная структура для параллельной реализации явной схемы&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29632</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29632"/>
		<updated>2024-12-05T11:06:35Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Output1.png|мини]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29631</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29631"/>
		<updated>2024-12-04T15:58:00Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Последовательный алгоритм реализуется в виде вложенных циклов:&lt;br /&gt;
&lt;br /&gt;
* Цикл по времени: Для каждого временного шага выполняется обновление температур в пространстве.&lt;br /&gt;
* Цикл по пространству:Обновление значений &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt; для всех внутренних точек сетки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инициализация параметров и массивов;&lt;br /&gt;
&lt;br /&gt;
Для n от 0 до N_t - 1:&lt;br /&gt;
    Для i от 1 до N_x - 1:&lt;br /&gt;
        u_new[i] = u_old[i] + Δt * (a * (u_old[i+1] - 2*u_old[i] + u_old[i-1]) / (Δx)^2 + f(x_i, t_n));&lt;br /&gt;
    Конец цикла по i;&lt;br /&gt;
    &lt;br /&gt;
    Применение граничных условий для u_new;&lt;br /&gt;
    &lt;br /&gt;
    u_old = u_new;&lt;br /&gt;
    &lt;br /&gt;
Конец цикла по n;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Для каждого временного шага необходимо обновить значения температуры во всех внутренних точках сетки. Если сетка содержит &amp;lt;math&amp;gt;N_x&amp;lt;/math&amp;gt; пространственных узлов, то на каждом временном шаге требуется выполнить &amp;lt;math&amp;gt;N_x-2&amp;lt;/math&amp;gt; обновлений (исключая граничные узлы). Каждое обновление включает три арифметические операции: два вычитания и одно сложение, а также умножение на константу. Таким образом, общее число арифметических операций на один временной шаг пропорционально &amp;lt;math&amp;gt;\mathcal{O}(N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Для всех временных шагов общее количество операций составляет: &amp;lt;math&amp;gt;\mathcal{O}(N_t \cdot N_x)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;N_t&amp;lt;/math&amp;gt; — общее число временных шагов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Output1.png|мини]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Output1.png&amp;diff=29630</id>
		<title>Файл:Output1.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Output1.png&amp;diff=29630"/>
		<updated>2024-12-04T15:56:43Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Информационный граф&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29629</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29629"/>
		<updated>2024-12-04T13:54:15Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: пункты добавлены&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. &#039;&#039;&#039;Устойчивость схемы &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для явной разностной схемы, описывающей решение уравнения теплопроводности, важно учитывать условие устойчивости, которое определяет, при каких параметрах схемы решение будет сходиться.&lt;br /&gt;
Основное условие устойчивости для явной схемы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a \Delta t}{(\Delta x)^2} \leq \frac{1}{2},&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где: &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени, &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Вычислительное ядро алгоритма состоит в обновлении значений температуры в каждой точке сетки на каждом временном шаге согласно явной разностной схеме. Основная вычислительная операция заключается в вычислении новой температуры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
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), \quad i = 1, \dots, L-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это обновление выполняется для каждой внутренней точки сетки на каждом временном шаге. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Инициализация&#039;&#039;&#039;: На этом этапе задаются все входные параметры: коэффициент теплопроводности &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, шаги по пространству и времени &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, длина стержня &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, общее время моделирования &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, а также начальные и граничные условия. Этот этап не требует параллелизации.&lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по времени&#039;&#039;&#039;: Для каждого временного шага &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вычисляются новые значения температуры для всех внутренних точек стержня. Каждый временной слой обрабатывается отдельно, и для каждой внутренней точки стержня вычисляется температура в следующем временном слое, а также происходит обновление граничных условий для новых значений &amp;lt;math&amp;gt;u_0^{n+1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;u_L^{n+1}&amp;lt;/math&amp;gt;. &lt;br /&gt;
# &#039;&#039;&#039;Основной цикл по пространству&#039;&#039;&#039;: На каждом временном шаге, для каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, выполняется вычисление новой температуры по следующей формуле: &amp;lt;math&amp;gt;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)&amp;lt;/math&amp;gt;. Этап является параллельным, так как каждое вычисление для узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; зависит только от значений на предыдущем временном шаге, что позволяет выполнять вычисления независимо для каждого узла на одном временном шаге. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor&amp;diff=29605</id>
		<title>Участник:Popko Fedor</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor&amp;diff=29605"/>
		<updated>2024-11-03T12:30:40Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: Удалено перенаправление на Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Статьи:==&lt;br /&gt;
# [[Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности]]&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29604</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29604"/>
		<updated>2024-11-03T12:26:55Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:Popko Fedor]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor&amp;diff=29603</id>
		<title>Участник:Popko Fedor</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor&amp;diff=29603"/>
		<updated>2024-11-03T12:23:46Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: Перенаправление на Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности]]&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29602</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29602"/>
		<updated>2024-11-03T12:21:47Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности &amp;lt;ref&amp;gt;Тихонов А.Н., Самарский А.А. Уравнения математической физики.&amp;lt;/ref&amp;gt; с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы&amp;lt;ref&amp;gt; Самарский А.А. Теория разностных схем. — Москва: Наука, 1989.&amp;lt;/ref&amp;gt; приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&amp;lt;ref&amp;gt;Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29601</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29601"/>
		<updated>2024-11-03T12:01:23Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
Также необходимо задать:&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Граничные условия задаются на краях области &amp;lt;math&amp;gt;x = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x = L&amp;lt;/math&amp;gt; и бывают нескольких типов. &lt;br /&gt;
&lt;br /&gt;
* Граничные условия первого рода (условия Дирихле):&lt;br /&gt;
   &lt;br /&gt;
Граничные условия первого рода устанавливают фиксированные значения температуры на границах области, то есть она поддерживается постоянной и равной заранее заданной функции времени.&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
u(0, t) = u_{\text{left}}(t), \\&lt;br /&gt;
u(L, t) = u_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;u_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения температуры на левой и правой границах области.&lt;br /&gt;
&lt;br /&gt;
* Граничные условия второго рода (условия Неймана):&lt;br /&gt;
     &lt;br /&gt;
Граничные условия второго рода определяют тепловой поток через границы области, то есть устанавливают значение производной температуры по нормали к поверхности. Это означает, что на границах тепловой поток поддерживается постоянным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=0} = q_{\text{left}}(t), \\&lt;br /&gt;
\frac{\partial u}{\partial x}\Big|_{x=L} = q_{\text{right}}(t),&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
где &amp;lt;math&amp;gt;q_{\text{left}}(t)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q_{\text{right}}(t)&amp;lt;/math&amp;gt; — заданные значения теплового потока на левой и правой границах.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Задаются для всего стержня при начальном времени &amp;lt;math&amp;gt;t = 0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;u(x, 0) = u_0(x),&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_0(x)&amp;lt;/math&amp;gt; — начальное распределение температуры по всей длине стержня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее будем рассматривать граничные условия первого рода равные нулю.&lt;br /&gt;
Тогда итоговая система будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\frac{\partial u}{\partial t} = a \frac{\partial^2 u}{\partial x^2} + f(x, t), &amp;amp; 0 &amp;lt; x &amp;lt; L, \, t &amp;gt; 0, \\&lt;br /&gt;
u(0, t) = u(L, t) = 0, \\&lt;br /&gt;
u(x, 0) = u_0(x), &amp;amp; 0 \leq x \leq L .&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для явной разностной схемы приближаем производные конечными разностями на каждом временном шаге, обновляя &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; в каждой точке сетки по пространству, используя значения с предыдущего временного шага. Пусть &amp;lt;math&amp;gt;\Delta x&amp;lt;/math&amp;gt; — шаг по пространству, а &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; — шаг по времени.&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Аппроксимация производной по пространству&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Вторую производную по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; можно аппроксимировать следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}}{(\Delta x)^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;u_i^n&amp;lt;/math&amp;gt; — значение температуры в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на временном слое &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Аппроксимация производной по времени&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Первую производную по &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; можно аппроксимировать так:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} \approx \frac{u_i^{n+1} - u_i^n}{\Delta t}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Схема явного метода&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Подставляем аппроксимации производных в исходное уравнение теплопроводности:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь выразим &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;:    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;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).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
У нас получилось явное выражение для &amp;lt;math&amp;gt;u_i^{n+1}&amp;lt;/math&amp;gt;, которое позволяет вычислить температуру в узле &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; на следующем временном слое, используя значения с текущего временного слоя &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Граничные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Устанавливаем граничные условия для расчёта на краях области, в зависимости от физической постановки задачи, например, &amp;lt;math&amp;gt;u(0, t) = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;u(L, t) =0&amp;lt;/math&amp;gt; для закрепленных концов стержня.&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Начальные условия&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Начальные условия для температуры по всему стержню &amp;lt;math&amp;gt;u(x, 0) = u_0(x)&amp;lt;/math&amp;gt; для начального распределения температуры.&lt;br /&gt;
В результате, итоговая система уравнений для каждого временного слоя &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; и каждого узла &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в сетке может быть записана как:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
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, \\&lt;br /&gt;
u_0^{n+1} = u_L^{n+1} = 0, \\&lt;br /&gt;
u_i^0 = u_0(x_i),  i = 0, \dots, L.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[en:Description of algorithm properties and structure]]&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, N 7, С. 36-39.&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29600</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29600"/>
		<updated>2024-10-25T12:05:13Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Явная разностная схема для решения уравнения теплопроводности с правой частью предназначена для моделирования процессов теплопередачи в материале с учётом внешнего источника тепла. Уравнение теплопроводности с правой частью имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial u}{\partial t} = a\frac{\partial^2 u}{\partial x^2} + f(x, t),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;u(x, t)&amp;lt;/math&amp;gt; — температура в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; — коэффициент теплопроводности материала, &amp;lt;math&amp;gt;f(x, t)&amp;lt;/math&amp;gt; — правая часть, описывающая внешний источник или сток тепла.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29599</id>
		<title>Участник:Popko Fedor/Параллельная реализация явной разностной схемы для решения уравнения теплопроводности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%8F%D0%B2%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D1%82%D0%B5%D0%BF%D0%BB%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=29599"/>
		<updated>2024-10-25T11:45:26Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: Добавлена Структура описания свойств алгоритмов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor&amp;diff=29598</id>
		<title>Участник:Popko Fedor</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popko_Fedor&amp;diff=29598"/>
		<updated>2024-10-25T11:24:41Z</updated>

		<summary type="html">&lt;p&gt;Popko Fedor: Создана пустая страница&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Popko Fedor</name></author>
	</entry>
</feed>