Презентаци_Раумов_Сергей

advertisement
Кафедра
параллельных алгоритмов
Математико-Механический факультет
Санкт-Петербургский Государственный Университет
Дипломная работа на тему:
Применение распараллеливания для
итерационной триангуляции с
измельчением вблизи границы
Студент: Наумов Сергей Сергеевич 543 группа
Научный руководитель: Демьянович Юрий Казимирович
Постановка задачи
• Для заданной прямоугольной области разработать
параллельные версии алгоритмов измельчения
триангуляции при приближении к границе области версии
алгоритмов
• Результат применить к курантовской аппроксимации
функции с особенностью вблизи границы
• Разработать пакет программ, реализующий
аппроксимацию задаваемой функции с априори
указанной точностью.
Актуальность задачи
• Триангуляция широко используется
• при решении задач аппроксимации
• при вэйвлетной обработке числовых потоков
информации
• при численном решении задач математической
физики в методе конечных элементов (МКЭ), который
применяется для численного решения краевых задач,
встречающихся на практике.
• При решении этих задач требуется подразделить
заданную область на треугольники так, чтобы углы
между их ребрами были ограничены снизу
некоторым положительным числом, не зависящим
от мелкости подразделения.
Описание алгоритма
• Рассмотрим прямоугольник
П = { (x,y) | 0<= x <= x*, 0<=y<=y*}
• Разобьем прямоугольник П на
треугольники, вершины
которых
лежат только на прямых:
A0 = { (x,y) | 0<=x<= x*, y=0}
A1 = { (x,y) | 0<=x<= x*, y=y*}
Подразделение треугольника
• Выберем на каждой стороне
этого треугольника одну точку,
а именно:
d1,2 ϵ ( d1,d2 ), d1,3 ϵ ( d1,d3 ), d2,3 ϵ ( d2,d3 )
• Соединим упомянутые точки
отрезками
• Получим разбиение исходного
треугольника на четыре
треугольника:
(d1, d1,2, d1,3),
( d1,2, d2, d2,3),
(d1,2, d1,3, d2,3),
( d1,3, d2,3, d3)
Измельчение области на треугольники
• Теперь разобьем описанным
методом на треугольники всю
область
• Прямоугольник, состоящий из
треугольников, хотя бы одна
вершина которых лежит на
прямой A0, назовем нижней
полосой
A0 = { (x,y) | 0<=x<= x*, y=0}
• Прямоугольник, состоящий из
треугольников, хотя бы одна
вершина которых лежит на
прямой A1, назовем верхней
полосой
A1 = { (x,y) | 0<=x<= x*, y=y*}
Измельчение нижней полосы
• Нижняя полоса представляет
вид двух прямоугольных
областей
(d1, d1,2, d1,3, d1,4)
(d4, d1,4, d1,3, d3,4)
• Каждую из этих областей
можно измельчить на
треугольники методом,
описанным в предыдущем
пункте
Измельчение верхней полосы
• Для сохранения
топологической правильности
триангуляции после
измельчения нижней полосы
требуется добавить ребра в
верхней полосе:
(e2, d2,3) и (e5, d3)
Детали реализации
• две прямоугольные таблицы:
– таблицы координат вершин VС
(содержащей в i-ой строке
координаты i-ой вершины)
– таблица инциденций TV
(содержит в строке индексы
вершин из таблицы VС )
•
•
xi и yi – координаты i-ой вершины
v’j, v’’j и v’’’j, - номера вершин j-го
треугольника
( i = 1, 2, ..., NV , j = 1, 2, ..., NT)
Построение триангуляции
Задача построения новой триангуляции состоит:
1. в перенумерации всех треугольников с тем, чтобы
охватить нумерацией и вновь появившиеся
2. в перенумерации вершин ( в том числе и вновь
появившихся)
3. в выработке таблицы ТV1 инциденций для нового
подразделения
4. построении таблицы VC1 координат вершин нового
подразделения
Построение триангуляции
1. Перенумерация всех треугольников:
• Если подразделяется i-й треугольник нижней полосы
прежней триангуляции, то полученные четыре
треугольника новой триангуляции пронумеруем числами
4i-3, 4i-2, 4i-1, 4i
• Если подразделяется i-й треугольник верхней полосы
прежней триангуляции, то полученные два треугольника
новой триангуляции пронумеруем числами 4i-1, 4i
Построение триангуляции
2. Перенумерация вершин:
• определяем число k разрядов в числе nV (относящемся к
старой триангуляции)
• новой вершине, которая получена делением ребра с
номерами j1 и j2 (при старой триангуляции), j1< j2,
приписываем номер j1*10k+ j2
• Старой вершине с номером j приписываем номер j*10k
В результате выполнения этих пунктов нумерация вершин
новой триангуляции не имеет повторений и все вершины
в Т1 пронумерованы
Построение триангуляции
3. Пункты 1) и 2) реализуются одновременно, что позволяет
в то же время заполнять трехстолбцовую таблицу
инциденций ТV1, состоящую из nV1 строк
(здесь nV1=4 nV, а строка с номером i1 заполняется вновь
образованными номерами вершин нового треугольника с
номером i1)
4. Вновь появляющиеся вершины будем брать в середине
соединяющей их стороны
Распараллеливание алгоритма
• Работа алгоритма состоит
из итеративного
повторения
рассмотренных ранее
шагов
• Каждое повторение
приводит к разделению
всех треугольников
нижней полосы и
частичному разделению
треугольников верхней
полосы
Распараллеливание алгоритма
• Основная идея: разобьем
текущую вычисляемую
полосу на несколько
областей, затем для
каждой области создадим
свой поток выполнения
• В результате можно
независимо провести все
вычисления внутри
каждой области
Распараллеливание алгоритма
• для каждого потока
делаем отдельный набор
таблиц
• все потоки будут работать
со своими данными
независимо
Распараллеливание алгоритма
Если в потоке будет
большое разбиение, и
нижний слой будет
состоять из 2*x
прямоугольников:
• создаем новый поток
• старый поток будет
продолжать вычислять
левые x прямоугольников
• новый правые x
прямоугольников
Распараллеливание алгоритма
•
Далее при увеличении
разбиения в потоках
делим их еще на потоки
тем же методом (их уже
получилось 4-е)
• Разделение будет
продолжаться до тех пор,
пока не кончаться
свободные процессоры
или не будет достигнута
нужная точность
Способы контроля точности аппроксимации
• Фиксированное количество шагов
В качестве параметра программы задается количество шагов, которые
должен совершить алгоритм, что уменьшает время, затраченное на
проверку точности полученной аппроксимации на каждом шаге
• Оценка отклонения значения в соседних вершинах
Так как при таком подходе можно использовать значение функции,
вычисленное в добавленной вершине, сравнивается со значением
функции в соседних вершинах. Как только разность значений функции
в соседних вершинах нижней грани не будет ограничена некоторой
априори указанной точностью, процесс триангуляции остановится.
Заключение
• В данной работе создан параллельный алгоритм, выполняющий
построение триангуляции области с итерационным измельчением при
приближении к границе. В качестве базового алгоритма
использовался алгоритм, полученный на основе описанных методов в
статье “Алгоритмы невырожденного симплициального
подразделения с измельчением вблизи границы” Арсентьевой Е.П.,
Демьяновича Ю. К. [2].
• Результатом работы полученного алгоритма является топологически
правильная триангуляция заданного прямоугольника,
измельчающаяся при приближении к его нижнему основанию. Как
описано в (2), полученное разбиение сохраняет углы начального
разбиения прямоугольника, и, таким образом, является
невырожденным при выполнении соответствующих условий для
заданного разбиения.
Download