Преобразование объекта
В предыдущих статьях цикла было описан переход от аналитической постановки задачи Дирихле к её вычислительному аналогу. В этой статье я начну описывать свои программные изыски для реализации просчётов на кластере. Это всё ещё не код, но уже довольно близко к нему. Самого кода скорее всего не будет, потому что не вижу смысла его выкладывать на сайте, возможно ограничусь какими-то краткими частями и комметрированием почему я сделал так, а не иначе. Об этом позже, а сейчас описание преобразования объекта.
Преобразование объекта
В качестве задачи для параллелизации, было выбрано двухмерное уравнение Лапласа:
с граничным условием первого рода
.
Для решения этого уравнения был использован метод конечных разностей. В результате сведения задачи к этому методу объект заменяется сеткой, узловые значения которой записываются в матрицу, как и граничное условие.
Рис. 1. Создание маски объекта для метода конечных разностей.
Для упрощения программной реализации было решено заменить интерполяцию второго порядка в нерегулярных узлах на интерполяцию нулевого порядка, т.е. значение в нерегулярном узле заменялось значением ближайшего граничного узла.
Кроме матрицы значений создаётся вторая матрица, которая описывает форму объекта, т.е. она является маской. В реализации это могут быть целочисленная или символьная матрица, содержащая какие-либо числа или символы, где каждое число или символ обозначает определённую область, т.е. для пустой области одно число или символ, для границы второе и для внутренней области объекта третье. Это можно увидеть на рис. 1. где граница обозначена серыми точками, внутренняя область чёрными, а внешняя ничем не обозначена.
Таким образом, входные данные это две матрицы: матрица значений и матрица геометрии объекта (маска). Для параллелизации задачи объект разбивается на подобласти. Все манипуляции в данном случае производятся с маской. Внутренняя область объекта заполняется числами — номерами компьютеров, на которых будет производиться решение (далее решателями). Следует заметить, что компьютер клиента так же является решателем. Разделение осуществляется не произвольным образом, а так, чтобы каждый решатель получил часть матрицы соизмеримую по объему с частями других решателей. Кроме того части матрицы имею прямоугольную форму и, наконец, число соседей следует минимизировать. Поскольку в данном примере вся область является объектом, то нет требования на полное вхождение объекта в ту или иную подматрицу.
После разделения маски происходит так же и разбиение матрицы значений. Этот процесс напоминает «вырезание» из матрицы подобласти, назначенной определённому решателю, и сохранение это подобласти в отдельный файл. Для каждого решателя будет создан свой файл с подматрицей значений и подмаской.
Comment ( 1 )