Реализация мультигрид-метода для решения уравнения Пуассона

Цена договорная • безналичный расчёт
26 декабря 2018, 21:59 • 3 отклика • 65 просмотров
Добрый день!

Меня зовут Андрей. Я участвую в разработке программы для моделирования электронных пушек и ионных источников https://github.com/epicf/ef/wiki (питон-версия https://github.com/epicf/ef_python , си-версия https://github.com/epicf/ef ). На данный момент для расчета динамики заряженных частиц в этих устройствах в программе используется т.н. метод частиц в ячейке в электростатическом приближении https://en.wikipedia.org/wiki/Particle-in-cell .

Для ускорения этой программы нам нужно реализовать численное решение уравнения Пуассона методом конечных разностей с помощью мультигрид-метода https://en.wikipedia.org/wiki/Multigrid_method . Именно это я хотел бы попросить сделать.

Вначале нужно рассмотреть 2д прямоугольную область, потом - 3д (параллелепипед), потом - 3д с “объектами” внутри (т.е. чтобы можно было посчитать распределение потенциала внутри проводящей трубки ( https://github.com/epicf/ef/wiki/Potential-well-of-cylindrical-beam-in-tube ) или от проводящей сферы ( https://github.com/epicf/ef/wiki/Conducting-Sphere-Potential ) ) . Граничные условия везде можно считать 1 рода (известно значение функции на границе).

Что касается деталей алгоритма - они остаются на ваш выбор, но для начала лучше наиболее простой и понятный, чем самый быстрый. Дополнительным плюсом будет, если будет понятно, как распараллеливать алгоритм для запуска на видеокарте.

Детали реализации:
Код нужет на Python. Лицензия - MIT.
Отдельно можно обсудить реализацию на Cи и распараллеливание. Также я хотел бы, чтобы работа в целом была оформлена в виде Jupyter-блокнота и помимо кода в этот блокнот было включено описание метода таким образом, чтобы блокнот получился более-менее самодостаточным.

Примерно так, как была попытка это сделать для метода, использующего преобразование Фурье (пока не работает):
https://colab.research.google.com/drive/12YzZmcz-8hz_hCBMKR-Z5nIInAurA7w3

Контакты:
Если вас заинтересовала эта задача, пожалуйста, ответьте в комментариях или свяжитесь со мной по одному из контактов, указанных в профиле.
Оцените сроки и стоимость работы.
Если есть возможность, пришлите примеры вашего кода.