В настоящее время я разрабатываю метод декомпозиции области для решения задачи рассеяния. По сути, я решаю систему BVP Гельмгольца итеративно. Я дискретизирую уравнения, используя метод конечных элементов по треугольным или тетраэдрическим сеткам. Я разрабатываю код для моей кандидатской диссертации. Мне известны некоторые из существующих библиотек конечных элементов, такие как deal.ii или DUNE, и хотя я думаю, что они великолепны, с вдохновляющим дизайном и API, для целей обучения я хотел разработать собственное небольшое приложение с нуля.
Я нахожусь в точке, где у меня запущены серийные версии, и теперь я хочу распараллелить их. В конце концов, одной из сильных сторон структуры декомпозиции доменов является разработка алгоритмов, которые легко распараллелить, по крайней мере, в принципе. На практике, однако, есть много деталей, которые необходимо учитывать. Управление сеткой является одним из них. Если приложения должны достигать высокого разрешения при хорошем масштабировании на множество процессоров, репликация всей сетки на каждом процессоре неэффективна.
Я хотел спросить тех разработчиков, которые работают над подобными приложениями в высокопроизводительных вычислительных средах, как они решают эту проблему.
Существует библиотека p4est для распределенного управления сеткой. Мне не нужна AMR, так что это может быть излишним, так как меня интересует только использование равномерных сеток, и я не уверен, может ли это улучшить треугольные сетки. Я также мог бы просто создать однородную сетку, затем подать ее в один из разделителей сетки и выполнить некоторую постобработку вывода.
Кажется, что самый простой подход - создать отдельный файл для каждого раздела, содержащий информацию о сетке, относящуюся только к этому конкретному разделу. Этот файл будет читаться одним процессором, который будет отвечать за сборку дискретной системы в этой части сетки. Конечно, некоторая глобальная информация о связности разделов / окрестностях также должна храниться в файле, читаемом всеми процессорами, для межпроцессного взаимодействия.
Какие еще есть подходы? Если некоторые из вас могли бы поделиться, каковы некоторые из наиболее часто используемых в отрасли методологий или государственных исследовательских учреждений, связанных с решением этой проблемы? Я совершенно новичок в программировании параллельного решателя конечных элементов, и мне хотелось понять, правильно ли я думаю об этой проблеме и как другие к ней подходят. Будем весьма благодарны за любые советы или ссылки на соответствующие исследовательские статьи!
Заранее спасибо!