Главная Журналы CRIT, меньшие l.E-6. Кроме того, ваш компьютер может не поддерживать достаточное число значащих цифр в вещественных переменных для удовлетворения очень сильному критерию сходимости. На машинах с длиной слова в 32 бита действительные числа содержат только около семи значащих цифр, поэтому значения CRIT < 1.Е-6 бесполезны. Если используется большее число расчетных точек, то обычно необходимо большее число повторов алгоритма решения, чтобы погрешность е стала меньше CRIT. В этом случае нужно использовать большее значение NTIMES. Мы могли бы всегда использовать очень большое значение NTIMES, например 1000, но если задача сформулирована неверно и система алгебраических уравнений не имеет сошедшегося решения, то компьютер будет делать лишние 1000 повторов алгоритма. Предосторожность при выборе значения NTIMES (NF) полезна - вдруг что-то пойдет не так. Фактическое число повторов алгоритма, выполненных в SOLVE, сохраняется в переменной NTC(NF). Эти результаты могут выводиться на печать для того, чтобы убедиться, сошелся ли алгоритм (при заданном значении CRIT) до того, как был достигнут максимальный предел, установленный переменной NTIMES. 5.7. НЕЛИНЕЙНОСТЬ И РЕЛАКСАЦИИ Обращение с нелинейностью. Мы уже видели, что задачи, решаемые с помощью CONDUCT, могут быть нелинейными. В этом случае коэффициенты в дискретном аналоге зав\1сят от ф. Так как математическое описание задачи может включать несколько взаимосвязанных дифференциальных уравнений, то коэффициенты для одного ф могут зависеть от некоторых других ф. Из-за этих связей и нелинейностей итоговое решение получается итерационно. На любом этапе коэффициенты дискретного аналога рассчитываются исходя из текущих приближенных значений всех ф. Следующая итерация улучшает это приближение, которое затем используется при пересчете коэффициентов. Если после многочисленных повторений алгоритма все значения ф перестают меняться, то достигается сошедшееся решение. Для одномерного случая эти процедуры были рассмотрены в п. 2.5.3. Те же выводы применимы и к двумерным задачам. Применение релаксаций. Итерационный процесс не всегда приводит к сошедшемуся решению. Иногда значения ф колеблются от итерации к итерации или все время «плывут». Такой расходимости итерационного процесса следует избегать. Хотя для линейных уравнений метод переменных направлений, используемый в CONDUCT, гарантированно приводит к сходимости решения, для нелинейных и взаимосвязанных задач такой уверенности не существует. Действительно, различные составляющие вычислительной схемы разрабатывались с учетом минимизации щанса получить расходимость, но для обеспечения сходимости тем не менее часто требовались дополнительные усилия. Один из способов достижения сходимости, известный как метод релаксации, заключается в замедлении изменения коэффициентов от итерации к итерации вследствие замедления изменения значений ф. Идея метода релаксации была рассмотрена в п. 2.5.6. Распространим ее на случай обобщенного дискретного аналога. В CONDUCT обобщенный дискретный аналог Мр = Х«аФ"А + * (5.62) преобразован в уравнение [ар + /)фр = Х««аФ„а + b + /Ф; , (5.63) где / - так называемая инерция, которая определяется формулой = Х««*- (5.64) Здесь а - коэффициент релаксации, сохраняемый в массиве переменных RELAX (NF) для всех зависимых переменных. При а = 1 релаксация отсутствует. При приближении а к нулю изменения значений ф сильно замедляются. Если выбрать а > 1, то получим так называемую верхнюю релаксацию (в отличие от определенной ранее нижней при О < а < 1, которую мы называли просто релаксацией), т.е. изменения значений ф будут увеличены. В общем случае выбирать а > 1 не рекомендуется. В CONDUCT все значения RELAX (NF) по умолчанию равны единице. Как уже было отмечено, коэффициент aj, в дискретном аналоге для нестационарной задачи (5.21) играет ту же роль, что и инерция / для стационарного случая. Поэтому использование конечного шага по времени А? для решения стационарной задачи эквивалентно релаксации. Выбор техники введения релаксации зависит от типа задачи, опыта и вкуса пользователя. В примерах применения CONDUCT, приведенных в этой книге, нет необходимости в использовании релаксаций с помощью различных значений RELAX (NF) из-за того, что нелинейности в показательных задачах не столь сильные, чтобы с ними нельзя было справиться без релаксаций. Однако, когда CONDUCT будет применяться Метод решения стационарных задач, основанный на поиске асимптотического (установившегося) решения соответствующей нестационарной задачи, в отечественной литературе известен как метод установления (Прим. ред.). для решения гораздо более сложных задач, может понадобиться введение релаксации на зависимую переменную. В этом случае необходимо будет задать приемлемое значение RELAX (NF), меньшее единицы. Релаксации для вспомогательных переменных. В дополнение к релаксации зависимых переменных можно применить ее и для других величин. Хотя в неизменяемой части CONDUCT для этого ничего не сделано, можно ввести необходимые релаксации в адап-труемую часть. Формула для введения релаксации на вспомогательную переменную, например коэффициент диффузии Г, имеет вид Г = аГ„ + (1-а)Г,„ (5.65) где индексы «н» и «ст» обозначают «новое» и «старое» значения Г. Релаксации вида (5.65) используются в примерах 11 и 13 (см. гл. 11). Таким же образом можно ввести релаксации для источниковых членов и граничных условий. Эта возможность также рассматривалась в п. 2.5.6. Итерации для нестационарных задач. Если нестационарная задача нелинейна, то в CONDUCT не реализована возможность на некотором шаге по времени выполнять несколько итераций и постоянно пересчитывать коэффициенты дискретных аналогов. Предполагается, что значения коэффициентов, полученные по известным значениям ф в момент времени t, достаточно точны в течение всего шага по времени. Из этого следует, что для нелинейных задач шаг по времени At должен быть достаточно мал. При решении нестационарных задач коэффициенты релаксации RELAX (NF) всегда должны быть равными единице. Иначе нестационарное решение будет представлять собой результат, соответствующий искусственно измененному уравнению (5.63), а не первоначальной постановке (5.62). Внешние и внутренние итерации. На этом этапе вы должны хорошо усвоить реализацию итераций, шагов по времени и повторов алгоритма в SOLVE. Для начала обсудим только стационарные задачи. Задача может быть линейной или нелинейной. Для линейной задачи коэффициенты дискретных аналогов (5.14) а, а, a, и др. постоянны. Поэтому нужно только решить систему уравнений в SOLVE и получить итоговое решение. Процедура, которую мы используем в SOLVE, итерационная, поэтому нужны многочисленные повторы для получения удовлетворительного решения. Они контролируются параметрами NTIMES (NF) и CRIT(NF). Повторы алгоритма в SOLVE рассматриваются как внутренние итерации. Внешний итерационный цикл, показанный на блок-схеме программы (см. рис. 4.1), служит для учета нелинейностей за счет пересчета на каждой итерации коэффициентов дискретных аналогов. Эти внешние итерации учитываются с помощью переменной ITER - на любом этапе ITER содержит число завершенных итераций. На каждой внешней итерации мы вызываем HEART, которая, в свою очередь, вызывает SOLVE для каждой рассматриваемой зависимой переменной. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [ 27 ] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |