Компактная Библиотека C++ Для Программирования Методов Конечных Разностей В Операторном Стиле. Часть 1. Семантика

Представлена семантика разработанной библиотеки pde++ для программирования конечно-разностных методов в операторном стиле.

Основными объектами библиотеки являются сеточная функция, сеточная ячейка и сеточные операторы, арифметические связи между которыми максимально приближают программный код к его математической записи.

Библиотека pde++ состоит всего из нескольких заголовочных файлов, не имеет внешних зависимостей и использует концепцию ленивых вычислений.

Большое количество задач математического моделирования сводятся к численному решению уравнений в частных производных (УЧП) с использованием сеточных методов.

В теории разностных схем (Самарский А.

А.

) соответствующие сеточные операторы образуют линейное пространство над сеточными функциями, для которых нет прямого представления в языках программирования общего назначения, таких как С++.

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

Практика показывает, что отмеченный выше подход весьма полезен при освоении навыков реализации численных методов, прежде всего, благодаря своей наглядности при работе с заранее написанными аппроксимациями УЧП в индексной форме.

Существенных проблем также не возникает при распространении этой методики на обобщенные УЧП, если предполагается однократная реализация разностной схемы с параметрами и повторное использование соответствующего программного кода без дальнейших модификаций.

В общем случае компьютерная программа может модифицироваться в различных направлениях, поэтому описанная выше методика потребует написания значительного объема программного кода, а это, в свою очередь, увеличит вероятность опечаток и непоследовательного написания одинаковых операторов сетки в различные программные модули.

Также стоит отметить проблему дублирования программного кода при вариативности пространственных измерений (1D, 2D, 3D) и методов аппроксимации УЧП.

Таким образом, альтернативой является разработка и использование специализированных программных библиотек с высокоуровневыми абстракциями предметной области, приближающими программный код к его математической записи.

В библиотеке Blitz++ такой абстракцией являются тензорные вычисления на разностных шаблонах, реализованные с помощью техники шаблонного метапрограммирования.

Библиотека бесплатноPOOMA расширяет концепцию Blitz++ разностными аналогами операторов дифференциальной дивергенции и градиента, а также возможностью работы с многопроцессорными вычислительными системами.

К сожалению, эти библиотеки долгое время не поддерживались, имея в то же время ряд ограничений (о них речь пойдет в следующей части) при использовании для достаточно классических конечно-разностных аппроксимаций УЧП, рассматриваемых в данной работе.

Разработанная автором библиотека с открытым исходным кодом pde++ идеологически вдохновлена библиотекой бесплатноPOOMA и предназначен для записи в операторной форме конечно-разностных схем для скалярных и векторных сеточных функций, заданных в 2D постановке (в работе 1D и 3D) на равномерных прямоугольных сетках.

Внимание: Код тестировался только под Windows.

   

#include "pdepp.h" double sln_u(double x, double y) {

Теги: #математика #программирование #C++ #методы конечных разностей
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.