Главная  Журналы 

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

При каждом вызове HEART пересчитывает коэффициенты. Под термином «итерация» обычно подразумевается внешняя итерация, которая совершается для учета нелинейностей путем пересчета коэффициентов. Внутренние итерации в SOLVE обычно описываются как повторы алгоритма решения. Таким образом, повторы алгоритма в SOLVE дают решение системы линейных алгебраических уравнений, в SOLVE коэффициенты не пересчитываются; внешние итерации служат для пересчета коэффициентов при учете нелинейности.

Из вышеприведенных рассуждений следует, что для линейной задачи нужно выполнить только одну итерацию, так как не требуется пересчитывать коэффициенты. Конечно, мы должны использовать достаточно большое значение NTIMES (NF) и достаточно малое значение CRIT (NF), для того чтобы подпрограмма SOLVE дала хорошо сошедшееся решение системы алгебраических уравнений. Хотя для решения линейной задачи достаточно даже одной итерации, мы будем использовать три. Тогда, анализируя после каждой итерации значения некоторых характерных величин, можно убедиться, что решение действительно сошлось. Если вдруг окажется, что число повторов в SOLVE недостаточно для получения удовлетворительного по точности решения на первой итерации, то дополнительные расчеты на второй и третьей итерациях помогут получить действительно сошедшееся решение.

Число итераций, необходимое для нелинейных задач, нельзя предсказать заранее. Можно выбрать это число исходя из предварительных расчетов или ввести приемлемый критерий сходимости в адаптируемую часть программы. В неизменяемую часть программы встроено только одно условие прекращения вычислений: они прерываются, когда число завершенных итераций станет равным значению переменной LAST, которой можно присвоить любое желаемое значение. Каким образом критерий сходимости для конкретной задачи может быть введен в адаптируемую часть программы, показано в примере 2 (см. гл. 8).

Рассмотрим нестационарные задачи. При расчетах нестационарных процессов выполнение каждого шага по времени, строго говоря, эквивалентно решению полной стационарной задачи, а на следующем шаге по времени начинается новая задача. Если задача нелинейная, то должны реализовываться итерации на одном и том же шаге по времени. Однако в CONDUCT не существует такой возможности. Одна внешняя итерация в стационарной задаче рассматривается как один шаг по времени в нестационарной. Для большинства приложений эта особенность CONDUCT не должна вызывать каких-либо проблем. Если же вы захотите изменить это свойство CONDUCT, то можете ознакомиться с рекомендациями, приведенными в § 12.4.



5.8. ОТНОСИТЕЛЬНЫЕ ЗАВИСИМЫЕ ПЕРЕМЕННЫЕ

Для некоторых зависимых переменных заданные граничные условия могут привести к ситуации, когда и ф, и ф + с, где с - произвольная константа, являются приемлемыми решениями. Это справедливо, например, для задачи о стационарной теплопроводности при заданных плотностях тепловых потоков на всех границах. Аналогичная ситуация встречается в задачах о течении в каналах с заданными плотностями тепловых потоков на стенках. В гюдобных случаях абсолютные значения переменной ф не важны, имеют смысл только разности между значениями ф в различных точках, которые не меняются при добавлении к полю ф произвольной константы. Подобные переменные называются относительными зависимыми переменными.

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

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

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

При выводе на печать относительной переменной желательно каким-либо удобным способом устранить произвольность абсолютных значений ф. Например, если температура Г в поперечном сече)!ии канала ведет себя как относительная переменная, то на печать лучше выводить Т - (где Tj - среднемассовая температура) или Г -(где - температура в центре) и т.п. Кроме того, если абсолютные значения Г будут очень большими, то может быть полностью потеряна очень важная информация об их разности.

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



Глава 6

НЕИЗМЕНЯЕМАЯ ЧАСТЬ ВЫЧИСЛИТЕЛЬНОЙ

ПРОГРАММЫ

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

6.1. ВАЖНЫЕ ИМЕНА НА ЯЗЫКЕ ФОРТРАН

Все важные переменные неизменяемой части программы объединены в common-блоки, которые используются в различных подпрограммах CONDUCT. Во избежание повторов этих блоков в каждой подпрограмме все common-блоки записаны в файл с именем «common», который подключается к соответствующим подпрограммам с помощью оператора include. Синтаксис, использованный для include в приведенном в конце книги листинге программы (см. прил. 1), применяется в Microsoft FORTRAN Compiler для IBM PC. Если используется другой компилятор, то необходимо изменить синтаксис согласно его требованиям. Если же компилятор не допускает использования оператора include, то нужно везде, где встречаются эти операторы, заменить их содержимым файла common.

Этот файл начинается с оператора pap.ameter, определяющего значения констант n1, nj, nfmax и nzmax, которые используются при задании размеров различных массивов. Эти константы определяют размеры массивов, для которых выделяется компьютерная память, но они не задают конкретное число расчетных точек, используемых при вычислениях.

Все зависимые неременные ф сохраняются в массиве f{i, j,nf), где индексы i и j соответствуют номерам расчетных точек по осям х и у. а значение nf указывает на конкретную зависимую переменную, например на температуру, скорость и др. Размер массива f задан как f (n1, nj, nfmax). Таким образом, максимальные допустимые значения i и j заданы через n1 и nj соответственно. Из этого следует, что число расчетных точек по каждой оси, обозначенное через l1 и ml, не может превыщать n1 и nj соответственно; l1 и ml не могут быть также меньше четырех. Константа nfmax представляет собой максимальное число различных зависи-





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