Решение уравнения Лапласа. Принцип распараллеливания кода Смирнова:
- В fdm_grid создаётся сетка для подобласти, обрабатываемой конкретным процессом. В этом классе содержатся данные о том, какие вершины принадлежат границе области, а какие - границе между подобластями (interdomain boundary).
- В классе decomposition содержится информация о разбиении области на подобласти, которая необходима функции PCGM. В нём есть три массива:
- индексы всех вершин, значения которых необходимо посылать соседним процессам (m_vSendInd);
- ранки соседних процессов (m_vRank);
- сдвиги (m_vShift), соответствующие первому элементу в m_vSendInd, который нужно будет отправить в соответствующий процесс.
- У класса decomposition есть наследник square_decomp, где реализована инициализация массивов, соответствующая разбиению области на квадраты.
- В главной функции PCGM в главном цикле сначала происходит обмен вершинами, индексы которых лежат в m_vSendInd, со всеми процессами, ранки которых записаны в m_vRank. Пришедшие от соседних процессов вершины приписываются к вектору vP, на который надо умножить матрицу mA. Таким образом получается расширенные вектор vExtVal, на который умножается матрица mA.