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

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

мых переменных, которые мы можем сохранять, а константа NZMAX- максимальное число зон для утилиты ZGRID, которая будет описана ниже. Значения, использованные в PARAMETER, чрезвычайно важны. Если вы хотите использовать более мелкие сетки, большее число зависимых переменных или большее число зон, то легко можете изменить соответствующие значения в PARAMETER.

Смысловое значение массива F(I, J,NF) для каждого NF заранее не определено. Любому NF вы можете приписать любое желаемое значение и задать приемлемые X, Г, S. Sf, и граничные условия. В зависимости от выбранного смыслового значения конкретного NF вы можете также ввести более содержательное имя для части массива F. Таким образом, если вы хотите использовать NF = 2 для температуры, то можете ввести массив Т (I, J) в подпрограмму ADAPT и сделать его эквивалентным массиву F (I, J, 2 ). В дальнейшем такая практика будет использоваться во всех рассматриваемых примерах.

Не во всех задачах число зависимых переменных достигает NFMAX. Часто бывает удобно использовать свободное место в массиве F для сохранения значений вспомогательных величин, которые получаются из простых алгебраических соотношений, а не из решения дифференциального уравнения для ф. Например, в дополнение к температуре можно хранить в массиве F соответствующую безразмерную температуру. Далее, на некоторой итерации не обязательно решать уравнения для всех зависимых переменных. Для обеспечения всех этих возможностей введен массив KSOLVE(NF). Если какой-либо элемент массива KSOLVE (NF) равен нулю, то соответствующее ему дифференциальное уравнение для F(I, J,NF) не решается. Таким образом различаются зависимые переменные в массиве F и вспомогательные величины. Значение KSOLVE (NF) можно изменять после каждой итерации. Итак, во время итерационного процесса можем «включать» или «выключать» решение уравнений для зависимых переменных. Существует множество других возможностей, появляющихся при использовании KSOLVE.

Есть и другие массивы, которые непосредственно связаны с массивом F. Из НИХ KBLOC (NF) , NTIMES (NF) , CRIT (NF) и NTC (NF) используются при решении дискретных аналогов и были определены выше (см. § 5.6). Массив RELAX (NF) применяется для задания коэффициента релаксации а (см. § 5.7). Вывод двумерного поля F (I, J, NF) производится в подпрограмме PRINT, если соответствующий индикатор KPRINT (NF) ненулевой, в противном случае вывод на печать для данного NF не происходит. При выводе на печать используется заголовок для переменной F (I, J, NF) длиной 18 символов, который должен быть записан в массив TITLE (NF) . Переменная KPLOT(NF) используется в подготовке файла для графической обработки, функция этой переменной подобна функции



KPRINT (NF). Когда значение KPLOT (NF) ненулевое, то соответствующая переменная F(I,J,NF) включается в выходной графический файл. Две важные вспомогательные переменные X и Г сохраняются в массивах ALAM (I, J) и GAM (I, J).

Все имена переменных, соответствующих используемым геометрическим характеристикам, были рассмотрены в § 5.1, 5.2. Имена коэффициентов дискретных аналогов были представлены в § 5.4. Индикаторы граничных условий KBCI1 (J), KBCL1 (J) и др. были определены в п. 5.5.3. В п. 5.5.6 были даны ссылки на массивы, содержащие значения потоков на границах и использующиеся для вывода результатов на печать, такие как FLUXI1 (J, NF).

Переменная ITER включает в себя число итераций, выполненных на любом заданном этапе. В нестационарном случае переменная ITER содержит число соверщенных шагов по времени. Для задания шага по времени А/ используется переменная DT, значение времени в предшествующий момент / сохраняется в переменной TIME. Индикатор KSTOP определяет, когда вычисления должны быть прерваны. Сначала KSTOP равен нулю, когда он становится ненулевым, итерационный процесс прекращается. Единственным критерием остановки итераций в неизменяемой части служит равенство ITER значению LAST, где LAST - общее число итераций (или шагов по времени), заданное пользователем. Однако вы свободно можете вводить условие остановки вычислений в подпрограмме ADAPT, делая KSTOP ненулевым, когда решение достигает желаемого результата.

Переменные SMALL и BIG равны очень маленькому и очень большому числу соответственно. Полагается, что SMALL = 1.Е-20, а BIG = 1.Е20. Если компьютер имеет другой диапазон и не поддерживает такие числа, то требуется изменить их должным образом. Часто переменная SMALL добавляется к знаменателю, чтобы избежать деления на нуль. Переменная BIG используется для аппроксимации бесконечности.

Познакомившись с основными переменными, можно приступить к рассмотрению различных подпрограмм неизменяемой части программы. При чтении их описания будет полезно обращаться к рис. 4.1 и к листингу неизменяемой части программы (см. прил. 1). Список переменных на ФОРТРАНе приведен в прил. 2.

6.2. ПОДПРОГРАММА MAIN

Эта часть программы настолько короткая, что фактически не требует пояснений. Сначала вызывается подпрограмма DEFLT для задания значений по умолчанию многих важных переменных (далее это



будет коротко описано). Затем вызывается подпрограмма GRID для получения информации о геометрических характеристиках расчетной области, рассматриваемой в задаче, и сетки, определенной пользователем. Далее производится вызов подпрограммы READY для расчета геометрических характеристик. Начальная стадия заканчивается вызовом подпрограмма BEGIN, где определяются начальные значения зависимых переменных. Итерационный процесс начинается с оператора CALL OUTPUT. В зависимости от значения переменной KSTOP или прекращаются вычисления, или вызывается подпрограмма HEART, где производится один (внешний) итерационный цикл для определения всех соответствующих переменных.

6.3. ПОДПРОГРАММА DEFRD

Из листинга (см. прил. 1) видно, что DEFRD состоит из двух процедур - DEFLT и READY. Это отражено также на рис. 4.1. Для объединения их в одну подпрограмму используется выражение ENTRY. Структура такой конструкции выглядит следующим образом:

SUBROUTINE DEFRD

ENTRY DEFLT

RETURN ENTRY READY

RETURN END

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

Процедура DEFLT. Когда многоцелевая программа типа CONDUCT содержит такое большое число важных переменных и индикаторов, их правильное определение для каждой задачи является серьезной проблемой. Однако в CONDUCT эта задача облегчается разумным использованием значений, заданных по умолчанию для большинства этих параметров. В качестве значений по умолчанию для каждой переменной выбраны логически оправданные или наиболее часто встречающиеся значения. Было бы хорошо выучить все значения, задаваемые по умолчанию в программе. Тогда в подпрограмме ADAPT можно ограничиться только теми величинами, значения которых должны отличаться от их значений по умолчанию. Список всех пере-





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