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

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

не обязательно должны равномерно отстоять одна от другой, но их координаты XU(I) и YV(J) с увеличением I и J соответственно должны расти. Для MODE = 2 или 3 значения YV(J) должны увеличиваться в радиальном направлении. Значения XU(2) или YV (2 ) не обязательно должны равняться нулю. Значение R (1) может быть ненулевым, но никогда не может быть отрицательным.

Если требуется равномерная сетка, то вместо XU (I), YV (J), L1 и Ml следует задать длины XL и YL, число контрольных объемов в переменных NCVLX и NCVLY, а затем вызвать EZGRID. Можно также задать некоторые простые неравномерности с помощью значений POWERX или POWERY, как описано в § 6.6.

Использование неравномерной сетки является мощным средством эффективного расположения заданного числа расчетных точек. Можно легко учесть разрывы в граничных условиях, свойствах материала и распределении источников, совместив места разрывов с гранями контрольных объемов. Для создания приемлемой неравномерной сетки часто бывает полезно использование предварительных расчетов на грубых сетках, которые можно создавать с помощью EZGRID, ZGRID, а также самостоятельно разработав GRID.

При построении GRID помните, что ни одна составляющая неизменяемой части программы (за исключением DEFLT) еще не была выполнена. Поэтому ни геометрические величины, ни целые числа, такие как L2 или М2, еще не были рассчитаны. То, что GRID является самой первой вызываемой процедурой, предполагает множесл-во возможностей при ее написании. Например, можно распечатать заголовок для задачи, открыть какие-нибудь файлы, выполнить некоторые предварительные действия и ввести данные оператором READ. В примерах, приведенных в книге, мы будем задавать в GRID желаемые значения текстовых переменных HEADER, PRINTF и PLOTF, которые соответствуют заголовку задачи, имени файла для вывода результатов и имени файла для графической обработки.

Вывод результатов требует некоторых пояснений. В настоящее время основным устройством вывода для большинства компьютеров является монитор. Поэтому при обычном выводе результаты быстро «пробегут» по экрану и будут потеряны. В CONDUCT реализована возможность сохранения результатов в файле. Имя файла, который используется для этой цели, содержится в PRINTF. Этот файл открывается в начале процедуры READY как UNIT = 7. Стандартному устройству вывода (экрану) соответствует UNIT = 6. Имеется три возможности вывода результатов: только на экран, только в файл или на экран и в файл одновременно. Для выбора одной из этих возможностей служит переменная KOUT, равная 1, 2 или 3 соответственно. Значение, заданное KOUT по умолчанию, равно 3, что приводит к выводу



результатов на экран и в файл. Если же нужно изменить значение КОит, то это должно быть сделано в процедуре GRID, так как KOUT используется сразу же после этого в процедуре READY.

Весь вывод результатов в CONDUCT помещен в цикл вида

DO 100 IUNIT=iu1,iu2

WRITE(lUNIT,110)---

110 FORMAT (---)

100 CONTINUE Значения lUl и iu2 определяются в начале процедуры READY на основании заданного значения KOUT.

7.4. ПРОЦЕДУРА BEGIN

Основная функция BEGIN заключается в определении начальных значений F(I,J,NF) для соответствующих NF. В случае стационарных задач начальные значения представляют собой только первое приближение. Для нестационарных задач эти значения соответствуют известным данным в момент времени t = 0. Если где-либо на границе известны значения F, то желательно сразу же их задать в соответствующих граничных точках для каждого F(I,J,NF). Эти значения останутся неизменными, если соответствующие значения КВС в PHI будут сохранены равными единице.

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

В демонстрационных примерах процедура BEGIN начинается с задания значений переменным TITLE (NF), KSOLVE(NF), KPRINT (NF) и др. для соответствующих зависимых переменных, затем определяются константы для свойств материала и граничных условий и, наконец, заполняется массив F(I, J,NF).

7.5. ПРОЦЕДУРА OUTPUT

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



важную функцию. Основная задача OUTPUT - обеспечить вывод результатов на печать. Пользователь имеет полную свободу в разработке деталей вывода результатов.

Обычно желательно вывести краткую информацию (не больше одкой-двух строк) после каждой итерации и распечатать двумерные поля нужных переменных ф после заключительной итерации. Краткий вывод после каждой итерации полезен для наблюдения за процессами сходимости стационарного решения или эволюции во времени нестационарного решения. Распечатка двумерных полей может быть произведена вызовом процедуры PRINT, созданной специально для этого.

С помощью OUTPUT можно обработать полученные результаты после завершения расчетов. Можно, например, рассчитать число Нуссельта, коэффициент трения, суммарный тепловой поток, среднюю температуру и др. Если необходимо, зависимые переменные F (I, J, NF) перед тем, как их распечатает PRINT, могут быть переведены в безразмерные величины.

В OUTPUT также может быть введен какой-либо критерий сходимости для остановки вычислений. Например, можно следить за изменениями некоторой представляющей интерес величины (коэффициента трения, теплового потока, максимальной температуры в области и др.) и сделать KSTOP ненулевым, когда изменения от итерации к итерации станут достаточно малыми, или же можно наблюдать за изменениями F (I, J, NF) в некоторой выбранной точке.

Желательно проверить выполнение теплового баланса во всей расчетной области. Для этого рассчитываются суммарный теплоперенос через границы области и суммарная генерация тепла внутри нее. Удобно проводить эти вычисления в OUTPUT и выводить тепловой баланс на каждой итерации. Когда решение сойдется, тепловой баланс должен в точности выполниться (с учетом погрешностей округления).

Так как подпрограмма OUTPUT вызывается 1 раз на каждой итерации, то в ней удобно изменять любые величины, которые меняются в зависимости от номера итерации или временных шагов. Если нужно изменить значения переменной KSOLVE (NF) для «включения» или «выключения» решения уравнения для соответствующего ф, то это должно быть сделано в OUTPUT. В случае нестационарной задачи пересчитывать температуру границы или менять шаг по времени At также следует в OUTPUT.

7.6. ПРОЦЕДУРА PHI

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





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