Кафедра параллельных алгоритмов Математико-Механический факультет Санкт-Петербургский Государственный Университет Дипломная работа на тему: Применение распараллеливания для итерационной триангуляции с измельчением вблизи границы Студент: Наумов Сергей Сергеевич 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), полученное разбиение сохраняет углы начального разбиения прямоугольника, и, таким образом, является невырожденным при выполнении соответствующих условий для заданного разбиения.