Одномерное уравнение теплопроводности. Буй Ван Шань. 6 курс — различия между версиями
(→Релизация MPI) |
(→Ссылки для скачивания) |
||
(не показана 81 промежуточная версия 2 участников) | |||
Строка 1: | Строка 1: | ||
− | == | + | ==Постановка задачи== |
− | + | [[File:Heat eqn.gif|thumb|Пример численного решения уравнения теплопроводности. Цветом и высотой поверхности передана температура данной точки.]] | |
− | + | Решается однородное [https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%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 уравнение теплопроводности] на промежутке <math>\left[a\ldots b\right]</math> | |
− | + | :<math>\frac{\partial U\left(x,t\right)}{\partial t} - k^2\frac{\partial^2 U\left(x,t\right)}{\partial x^2} = f(x,t)</math> | |
− | + | С граничными условиями | |
− | + | :<math> \begin{cases} | |
− | * | + | U(a,t) = M1(t) \\ |
− | + | U(b,t) = M2(t) | |
− | + | \end{cases}</math> | |
− | + | и начальным распределением температуры | |
− | + | :<math>U(x,0) = U0(x)</math> | |
+ | *Где :<math>f(x,t), U0(x), M1(t), M2(t)</math> - Известные функции | ||
− | == | + | ==Реализация== |
+ | ===Конечно-разностная схема=== | ||
+ | [[File:Zavnuischeme.PNG|thumb|300px|Явная разностная схема|right]] | ||
+ | Задача содержит производную по времени первого порядка и производную по пространственной координате второго порядка. | ||
+ | Запишем исходное уравнение в виде | ||
+ | :<math>\frac{\partial U\left(x,t\right)}{\partial t} = a^2\frac{\partial^2 U\left(x,t\right)}{\partial x^2}</math> | ||
+ | |||
+ | Введем равномерную сетку <math>0 < x_i < L</math> с шагом разбиения <math>Δx</math>. Шаг по времени назовем <math>Δt</math> | ||
+ | Построим явную конечно-разностную схему: | ||
+ | :<math>\frac{U_i^{n+1}-U_i^{n}}{Δ t} = \frac{a^2}{Δx^2}\left(U_{i+1}^{n} - 2U_{i}^{n}+U_{i-1}^{n}\right)</math> | ||
+ | Где, <math>U_i</math> — значение температуры в <math>i</math>-ом узле. | ||
+ | * Условие сходимости явной схемы:<math>dt<dx^2/2</math>, где dt - шаг по времени, dx - шаг по координате | ||
+ | |||
+ | ===Применение технологии MPI=== | ||
+ | Разветвление для уравнения теплопроводности осуществляется путем разбиением отрезка интегрирования на некоторые интервалы. На каждом интервале, процесс интегрирования осуществляется отдельным процессом, при этом в связи с использованием явной схемы, соседние процессы должны обменивать крайними значениями, получены на предыдущем шаге, для выполнения следующего шага. | ||
+ | [[File:Sendandreceive.png|Схема передачи данных между процессами|center]] | ||
+ | : Первый процесс обменивается данными только с вторым процессом | ||
+ | : Последний процесс обменивается данными только с предпоследним процессом | ||
+ | : Все центральные процессы обмениваются с процессами слево, и справо | ||
+ | * Начальные и краиние значения на каждом шаге вычисляются по начальным и граничным условиям. | ||
+ | |||
+ | ===Данные для расчета=== | ||
+ | :<math> \begin{cases} | ||
+ | a=0;b=1\\ | ||
+ | M1(t)=6t+0.887\\ | ||
+ | M2(t)=0.0907\\ | ||
+ | U0(x)=cos(x+0.48)\\ | ||
+ | f(x,t)=0\\ | ||
+ | k=1 | ||
+ | \end{cases}</math> | ||
+ | |||
+ | ==Результаты== | ||
+ | * Решение | ||
+ | ** 2 процесса | ||
+ | [[File:Result.PNG|thumb|500px|Решение при запуске 2-х процессов|center]] | ||
+ | *4 процесса | ||
+ | [[File:Result2.png|thumb|500px|Решение при запуске 4-х процессов|center]] | ||
+ | * Погрешность вычисления | ||
+ | * Зависимость времени расчета от количества процессов при постоянных шагах вычисления: dx = 0.001; dt = 0.000001 | ||
+ | |||
+ | [[File:Processing time.PNG|thumb|500px|Зависимость времени расчета от кол. процессов|center]] | ||
+ | {| class="wikitable" width="300" floating="center" | ||
+ | !Количество процессов | ||
+ | !Время рассчета (сек) | ||
+ | |- | ||
+ | |2 | ||
+ | |96.58 | ||
+ | |- | ||
+ | |4 | ||
+ | |49.4 | ||
+ | |- | ||
+ | |8 | ||
+ | |28.66 | ||
+ | |- | ||
+ | |10 | ||
+ | |23.63 | ||
+ | |- | ||
+ | |20 | ||
+ | |12.89 | ||
+ | |- | ||
+ | |30 | ||
+ | |9.27 | ||
+ | |- | ||
+ | |40 | ||
+ | | 7.52 | ||
+ | |} | ||
+ | Для малого числа узлов в сетке использовать многопроцессорные вычисления не выгодно: время работы программы неуменьшается. | ||
+ | Заметим что при увеличении количества процессов, скорость расчета параллельно повысилась | ||
+ | ==Полезные ссылки== | ||
+ | [https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%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 Уравнение теплопроводности] |
Текущая версия на 22:38, 14 января 2016
Содержание
Постановка задачи[править]
Решается однородное уравнение теплопроводности на промежутке
С граничными условиями
и начальным распределением температуры
- Где : - Известные функции
Реализация[править]
Конечно-разностная схема[править]
Задача содержит производную по времени первого порядка и производную по пространственной координате второго порядка. Запишем исходное уравнение в виде
Введем равномерную сетку
с шагом разбиения . Шаг по времени назовем Построим явную конечно-разностную схему:Где,
— значение температуры в -ом узле.- Условие сходимости явной схемы: , где dt - шаг по времени, dx - шаг по координате
Применение технологии MPI[править]
Разветвление для уравнения теплопроводности осуществляется путем разбиением отрезка интегрирования на некоторые интервалы. На каждом интервале, процесс интегрирования осуществляется отдельным процессом, при этом в связи с использованием явной схемы, соседние процессы должны обменивать крайними значениями, получены на предыдущем шаге, для выполнения следующего шага.
- Первый процесс обменивается данными только с вторым процессом
- Последний процесс обменивается данными только с предпоследним процессом
- Все центральные процессы обмениваются с процессами слево, и справо
- Начальные и краиние значения на каждом шаге вычисляются по начальным и граничным условиям.
Данные для расчета[править]
Результаты[править]
- Решение
- 2 процесса
- 4 процесса
- Погрешность вычисления
- Зависимость времени расчета от количества процессов при постоянных шагах вычисления: dx = 0.001; dt = 0.000001
Количество процессов | Время рассчета (сек) |
---|---|
2 | 96.58 |
4 | 49.4 |
8 | 28.66 |
10 | 23.63 |
20 | 12.89 |
30 | 9.27 |
40 | 7.52 |
Для малого числа узлов в сетке использовать многопроцессорные вычисления не выгодно: время работы программы неуменьшается. Заметим что при увеличении количества процессов, скорость расчета параллельно повысилась