В отличие от гиперболических уравнений, построение схем высокого порядка аппроксимации параболических уравнений необходимо только для узкого класса сильно нелинейных задач. Кроме того, монотонность параболических схем не является столь существенным свойством, поскольку эти уравнения сами по себе содержат диффузионный член, сглаживающий нефизические осцилляции решения. Поэтому поиск оптимального шаблона не так сильно улучшает качества численного метода, и эффективность реализации этого поиска на основе объектов не так важна. С другой стороны, желательно избегать применения явных параболических схем, особенно для нелинейных уравнений, так как условие Куранта для них (
) гораздо более ограничительное, чем для явных гиперболических схем ( ).Рассмотрим сначала случай регулярной сетки. Если на верхнем слое аппроксимировать только значения пространственных производных искомой функции, то рассчитывать неявную схему можно методом прогонки, а в многомерном случае – также методом переменных направлений или методом дробных шагов с независимыми прогонками по каждой координате. С точки зрения ООП метод переменных направлений предпочтительнее метода многоточечной прогонки, поскольку позволяет использовать те же объекты схемы трёхточечной прогонки, что и в одномерных задачах. Для этого даже необязательно создавать специальный класс метода переменных направлений, поскольку n объектов метода трёхточечной прогонки имеют все необходимые данные (одну связь со своим сеточным узлом, две связи с такими же объектами-схемами для соседних узлов и набор коэффициентов схемы) и не должны быть связаны между собой. Таким образом, на этапе подготовки к расчётам «рядом» со структурой связанных внутренних сеточных узлов строится n аналогичных структур из объектов трёхточечной прогонки. Перед каждым шагом узел изменяет в соответствующем ему объекте метода лишь коэффициенты схемы (если коэффициенты уравнения переменные), а структура связей на протяжении всех расчётов остаётся неизменной. Граничные узлы (в которых заданы краевые условия первого рода) привязаны к объектам метода, соответствующим ближайшему внутреннему узлу; кроме того, на разных границах области интегрирования граничные узлы должны быть двух разных типов. Узлы первого типа инициируют прямой ход прогонки в цепочке объектов метода, а узлы второго типа инициируют обратный ход в цепочке внутренних узлов (после того, как до них дойдет очередь прямого хода прогонки – см. рис. 3.3).
В случае явных схем объект области интегрирования содержит неструктурированное множество сеточных узлов, которые он может в произвольном порядке переводить на следующий шаг по времени. Однако области интегрирования, предназначенная для узлов с неявными методами, должна отличать от остальных граничные узлы первого типа, самостоятельно переводя на следующий шаг только эти узлы. Для реализации метода переменных направлений такая область должна также иметь счётчик кратности (в двумерном случае – чётности) шага, а также несколько массивов граничных узлов первого типа (число массивов равно размерности пространства). Если коэффициенты и/или правая часть уравнения зависят от решения, то метод прогонки и метод переменных направлений можно дополнить дополнительными простыми итерациями на каждом (полном) шаге по времени (значения искомой функции на предыдущем временном слое являются хорошим начальным приближением, поэтому более сложные итерационные методы здесь избыточны). За эти итерации (происходящие вплоть до получения заданной точности) также отвечает объект области интегрирования.
Рис. 3.3. Связи объектов, реализующих метод переменных направлений в случае 2D. Стрелки обозначают направление вычислений, пунктирные линии – связи по данным.
Следует заметить, что изложенный алгоритм расчёта неявной схемы в многомерном случае существенно опирается на регулярность сетки, в то время как большинство реальных задач имеют сложную геометрию. Поэтому, какой бы удобной ни была объектно-ориентированная реализация метода переменных направлений, необходимо рассмотреть также алгоритм метода многоточечной прогонки, который возможен и на нерегулярной сетке. Этот алгоритм включает, во-первых, построение связей между элементами и схемами сеточных узлов и, во-вторых, несколько этапов вычислительного процесса на каждом шаге по времени, соответствующих расчёту приграничных коэффициентов, прямому ходу и обратному ходу прогонки.
Для аппроксимации параболического уравнения с первым порядком в n-мерном случае требуется шаблон, содержащий (2n+1) сеточных узлов (включая рассчитываемый). Если фиксировать этот шаблон (как это было сделано в случае регулярной сетки), то построение связей происходит только один раз перед расчётами. Если же коэффициенты уравнения сильно изменяются в ходе расчётов, то построение оптимального шаблона можно проводить на каждом шаге или через несколько шагов (как для нелинейных гиперболических уравнений), однако в силу резкого понижения быстродействия это делать нецелесообразно (см. также начало данного раздела). Поэтому каждый внутренний узел необходимо связать с 2n ближайшими узлами, как и для гиперболических схем (см. 3.3.2.1), что позволяет использовать для «параболических» и «гиперболических» элементов один и тот же суперкласс. Последующий алгоритм связывания объектов схемы многоточечной прогонки, присоединенных ко внутренним узлам, более сложен. Для того, чтобы реализация метода не слишком зависела от размерности, предлагается создавать специальные объекты связей между объектами схемы, которые на этапе расчёта будут хранить соответствующие прогоночные коэффициенты. Эти связи в объекте схемы делятся на n входных и n выходных связей. Входные связи необходимы при вычислении прогоночных коэффициентов для выходных связей на прямом ходу прогонки, а выходные связи используются самими сеточными узлами для расчёта их значений на обратном ходу. Разделение на входные и выходные связи происходит автоматически в ходе процесса связывания, который инициируется граничным сеточным узлом первого типа (см. выше), беспорядочным образом распространяясь по сетке вплоть до граничных узлов второго типа. Следует заметить, что перед беспорядочным связыванием объектов схем внутри области интегрирования необходимо, чтобы все граничные узлы образовали связи с n приграничными объектами схемы; в противном случае граничный узел (как узел первого типа) может связаться с объектом схемы, который уже связал себя с данным узлом (как с узлом второго типа). Запрещение двунаправленных связей между граничным узлом и объектом схемы позволяет самостоятельно (без затухания) распространяться по сетке как процессу построения связей, так и процессам расчёта, основанным на этих связях. Тем не менее целесообразно проводить связывание объектов схемы более упорядоченно; а именно, нужно строить сначала связи с узлом, направление на который составляет наименьший угол с направлением на предыдущий узел цепочки (см. рис. 3.4). Чем более прямыми являются цепочки сеточных узлов, тем более устойчивым является метод прогонки.
Алгоритм перехода некоторой области интегрирования на один шага по времени, как было отмечено выше, состоит из нескольких этапов. В случае регулярной сетки для последовательного выполнения всех этих этапов область интегрирования на каждом шаге инициирует процесс расчёта только один раз (точнее, делает это в цикле, каждая итерация которого полностью рассчитывает одномерную цепочку объектов). В данном случае сначала граничными узлами первого типа рассчитываются все приграничные прогоночные коэффициенты, затем инициируется процесс расчёта объектами схемы всех остальных прогоночных коэффициентов в их связях, и только после его окончания через какой-либо граничный узел второго типа инициируется расчёт внутренних узлов (последние два процесса самостоятельно распространяются по сетке). Разделение на узлы первого и второго типа происходит автоматически при построении связей (если какой-либо объект схемы связался с некоторым граничным узлом, то он помечается как узел второго типа; в противном случае – остаётся узлом первого типа). Поэтому на первом этапе шага по времени можно не вычислять прогоночные коэффициенты в схемах, связанных с граничными узлами второго типа.