Описанный объектно-ориентированный алгоритм реализации неявных схем для уравнений в частных производных методом многоточечной прогонки на нерегулярной сетке не имеет известных автору процедурных аналогов. Основным его преимуществом является то, что многомерная область перед прогонкой не преобразуется в квазиодномерную структуру (в квазидиагональную матрицу). Распространение всех объектных алгоритмов для неявных численных методов на случай более сложных краевых условий (выше предполагались условия первого рода) идейно ничем не отличается от случая чисто процедурных алгоритмов.
Возможность использования для решения эллиптических уравнений расчётные классы, реализованные для параболических уравнений, делает нецелесообразным создание классов, основанных на принципиально отличных методах. Поэтому нужно лишь рассмотреть вопрос об использовании описанных в разделе 3.3.2.2 объектов для эллиптических задач. Поскольку основное отличие между параболическими и эллиптическими схемами заключается в алгоритме выбора оптимального шага по времени (итерационного параметра), то поставленный вопрос касается только одного из расчётных объектов – области интегрирования. Так как классов области интегрирования, соответствующих различным численным методам, может быть несколько, то нецелесообразно расширять возможности каждого из них алгоритмом изменения итерационного параметра. Лучше реализовать этот алгоритм в отдельном классе (который и является, собственно, схемой эллиптического уравнения). Поскольку и для параболических уравнений должен быть предусмотрен объект, выбирающий шаг по времени (многие нелинейные параболические уравнения – это жесткие системы в бесконечномерном пространстве), то не нужно создавать многочисленные подклассы «параболических» областей интегрирования, умеющие взаимодействовать с эллиптической схемой. Достаточно привязывать к обычным «параболическим» областям какую-либо эллиптическую схему в качестве объекта выбора шага. При таком подходе методы решения эллиптических уравнений и вспомогательные по отношению к ним «параболические» методы можно развивать независимо друг от друга.
Наконец, следует рассмотреть ещё один вычислительный алгоритм, который пригоден для расчёта эллиптических уравнений, но не описывался при анализе параболических задач (в разделе 3.3.2.2) ввиду низкого порядка аппроксимации по времени. Речь идёт о методе Зейделя, относящегося к классу треугольных итерационных методов. Реализация этого метода, формально являющегося неявным, в случае применения процедурного подхода практически ничем не отличается от явных методов, а в случае объектного подхода – даже проще явных. Алгоритм состоит в неупорядоченном переводе сеточных узлов на следующую итерацию таким образом, что позже рассчитывающиеся узлы используют те значения в ранее рассчитанных узлах, которые относятся к верхнему слою. Очевидно, при этом не требуется хранить в узле информацию о том, был ли этот узел рассчитан на текущей итерации. Замечательной особенностью метода Зейделя является то, что он не требует вычисления границ спектра итерационной матрицы, что в случае методов с выбором итерационного параметра приводит к громоздким вычислениям, плохо согласующимся с объектным подходом.
Описанный в данной главе подход реализует объектно-ориентированная библиотека численных методов, которая содержит более сорока элементов и в настоящее время участвует в решении задач комплексного моделирования организма человека (см. раздел 2.3). Об эффективности подхода свидетельствует то, что эта библиотека, способная рассчитывать основные типы алгебраических, дифференциальных, дифференциально-разностных уравнений и уравнений математической физики, была разработана всего за один (человеко-)месяц. Это говорит о том, что не только описанный в разделе 2.2.1 процесс создания модели, но и процесс разработки логических блоков этой модели в случае использования объектно-ориентированного подхода намного быстрее процедурно-ориентированного. Эти два подхода отличаются друг от друга тем же, чем сборка компьютера из микросхем отличается от его сборки из отдельных транзисторов.
Предлагаемая библиотека предназначена для простейших гидродинамических расчётов течений жидкости (газа) и расчётов переноса (веществ или тепла) этими течениями. Среда, несущая жидкость, может быть относительно произвольной: от дискретной системы трубок до пористой среды с таким же законом пропорциональности между потоком и градиентом давления. Очевидно, уравнения, аналогичные гидродинамическим, (уравнения Кирхгоффа) описывают токи в электрических цепях или проводящих средах; поэтому часть элементов данной библиотеки подходит также к электротехническим задачам.
Следует заметить, что рассматриваемая библиотека не столь универсальна, как описанные в разделе 3.3 численные методы. Кроме того, она использует отнюдь не все преимущества объектно-ориентированного подхода, упомянутые в разделе 3.2. В частности, в силу простоты применяемых численных методов они не разделяются на два объекта – элемент и схему, что сильно уменьшает возможности их дальнейшего развития.
При описании библиотеки используется понятие среды, не упомянутое в основной части главы по той причине, что оно необходимо отнюдь не во всех моделях. Среда – это набор глобальных данных, которые заведомо используются большим числом расчётных элементов, имеющих для хранения ссылки на среду специальное поле. Название данного объекта определилось физическим смыслом элементов данной библиотеки, которые хранят в нём свойства протекающей по ним субстанции. Применение среды позволяет экономить память, поскольку в противном случае многие элементы содержали бы одинаковые данные; кроме того, одновременное изменение этих данных было бы затруднено.
Рассматриваемая библиотека может использоваться двумя способами. Во-первых, её классы легко встраиваются в любую объектно-ориентированную программу (естественно, написанную на том же языке, что и сама библиотека, то есть на языке Java). При этом разработчик программы, целью которого является реализация конкретной модели или небольшого набора однотипных моделей, может при необходимости путём наследования от элементов библиотеки создавать свои расчётные классы, более приспособленные для решения его задач. Во-вторых, данная библиотека классов может быть использована как составная часть инструментальных средств визуальной разработки моделей. При этом создание новых классов не обязательно (хотя возможно!), поскольку даже из нескольких десятков элементов библиотеки, визуально связывая их в разных комбинациях, можно построить очень большое число моделей соответствующей предметной области. Пример модели, созданный с помощью инструментального средства на базе данной библиотеки, описан в разделе 2.3.2.
В обоих рассмотренных случаях библиотека входит в состав исполняемого кода программы. Однако максимальной гибкостью обладает разрабатываемое автором инструментальное средство, которое рассматривает классы библиотеки как данные, которые можно в наглядном виде представлять, изменять и расширять новыми классами. Перед запуском расчётов эти данные компилируются в исполняемый код, причём особенности языка Java (в частности, его интерпретируемость) позволяют использовать этот код в той же программе, которая редактирует классы библиотеки, не перезапуская её. Такой подход даёт возможность не разделять систему моделирования на расчётные и интерфейсные программы (что затруднило бы управление моделированием и визуализацию получаемых результатов).
Описание библиотеки с точки зрения её использования приведено в приложении к данной работе – ввиду большого объёма этого описания. Для использования библиотеки при конструировании разнообразных моделей достаточно приведённой в приложении информации, в то время как для расширения возможностей библиотеки и для приспособления её к конкретным предметным областям необходима также объектно-ориентированная структура библиотеки, описанная ниже в разделе 3.4.2.