Представлена семантика разработанной библиотеки pde++ для программирования конечно-разностных методов в операторном стиле.
Основными объектами библиотеки являются сеточная функция, сеточная ячейка и сеточные операторы, арифметические связи между которыми максимально приближают программный код к его математической записи.
Библиотека pde++ состоит всего из нескольких заголовочных файлов, не имеет внешних зависимостей и использует концепцию ленивых вычислений.
Большое количество задач математического моделирования сводятся к численному решению уравнений в частных производных (УЧП) с использованием сеточных методов.
В теории разностных схем (Самарский А.
А.
) соответствующие сеточные операторы образуют линейное пространство над сеточными функциями, для которых нет прямого представления в языках программирования общего назначения, таких как С++.
Как следствие, в программной реализации широко используется практика записи результата применения сеточных операторов к сеточным функциям с использованием многомерных массивов или матриц.
Практика показывает, что отмеченный выше подход весьма полезен при освоении навыков реализации численных методов, прежде всего, благодаря своей наглядности при работе с заранее написанными аппроксимациями УЧП в индексной форме.
Существенных проблем также не возникает при распространении этой методики на обобщенные УЧП, если предполагается однократная реализация разностной схемы с параметрами и повторное использование соответствующего программного кода без дальнейших модификаций.
В общем случае компьютерная программа может модифицироваться в различных направлениях, поэтому описанная выше методика потребует написания значительного объема программного кода, а это, в свою очередь, увеличит вероятность опечаток и непоследовательного написания одинаковых операторов сетки в различные программные модули.
Также стоит отметить проблему дублирования программного кода при вариативности пространственных измерений (1D, 2D, 3D) и методов аппроксимации УЧП.
Таким образом, альтернативой является разработка и использование специализированных программных библиотек с высокоуровневыми абстракциями предметной области, приближающими программный код к его математической записи.
В библиотеке Blitz++ такой абстракцией являются тензорные вычисления на разностных шаблонах, реализованные с помощью техники шаблонного метапрограммирования.
Библиотека бесплатноPOOMA расширяет концепцию Blitz++ разностными аналогами операторов дифференциальной дивергенции и градиента, а также возможностью работы с многопроцессорными вычислительными системами.
К сожалению, эти библиотеки долгое время не поддерживались, имея в то же время ряд ограничений (о них речь пойдет в следующей части) при использовании для достаточно классических конечно-разностных аппроксимаций УЧП, рассматриваемых в данной работе.
Разработанная автором библиотека с открытым исходным кодом pde++ идеологически вдохновлена библиотекой бесплатноPOOMA и предназначен для записи в операторной форме конечно-разностных схем для скалярных и векторных сеточных функций, заданных в 2D постановке (в работе 1D и 3D) на равномерных прямоугольных сетках.
Внимание: Код тестировался только под Windows.
Теги: #математика #программирование #C++ #методы конечных разностей#include "pdepp.h" double sln_u(double x, double y) {
-
Самодельное Освещение Для Квадрокоптера
19 Oct, 24 -
Вудикаст #05. Полуюбилейный
19 Oct, 24 -
Хабрафутбол-4: Старт
19 Oct, 24