/laplace

Primary LanguageC++

Решение уравнения Лапласа. Принцип распараллеливания кода Смирнова:

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