Главная Журналы проще выполнить как Q = 3.7 Аргументы с четт,1ми номерами при вызове VALUES могут бьпь коиста1Гга\П1, переменными njni выражениями. Например, можем ис-пользова! ь CALL DATA3 (RHO, 1.2,U,22.,CP, 127.) CALL DATA2 (RHOCP,RHO*CP,USQ, U*U) Внимание. В вызовах вида DATA9, DATA8, ... все аргументы Д0ЛЖ1ПЛ бьт, вс1цссгвсчпп,1ми переменными, а вида IKTA9, т:-;ТАс, ... - целыми. Выражхмтя вила CALL DATA2(А,12,В,3.5) CALL INTA3(1,1,J,10.,К5) привел)! к псверпым значениям А п J. Кроме чого. числовая часть н имени точки входа должна в гочпости соответствовать числу задаваемых переменных. Например, вы пе можете вызвать DATA4 и задать значения более чем четырех переменных. Выражения вп.та CALL DATA3(А,1.2,В,1.5) CALL DATA3(A,1.2,E,1.5,C,27.,D,108.) невер1и>1. Компилятор, возмомспо, н не сообпитт об ошибке, ио результат будет непредсказуем. Глава 7 АДАПТИРУЕМАЯ ЧАСТЬ ВЫЧИСЛИТЕЛЬНОЙ ПРОГРАММЫ в отличие от неизменяемой части CONDUCT, завершенной во всех отношениях, адаптируемая часть представляет собой только «каркас». Она наполняется содержанием исходя из конкретной задачи и искомой информации. Примеры различных приложений CONDUCT, приведенные в этой книге, являются демонстрационными. При их подборе вовсе не требовалось, чтобы они были универсальными или важными с практической точки зрения. Эти примеры должны помочь в освоении вычислительной программы. Прежде чем приступить к рассмотрению примеров, необходимо изучить основную информацию по подпрограмме ADAPT. 7.1. СТРУКТУРА ПОДПРОГРАММЫ ADAPT Подпрограмма ADAPT состоит из четырех отдельных процедур: GRID, BEGIN, OUTPUT и PHI. Она связана с неизменяемой частью программы посредством выражений COMMON из подключаемого файла COMMON. Мы также используем структуру ENTRY-RETURN, рассмотренную в § 6.3, для объединения нескольких процедур в одну подпрограмму. Таким образом, не надо повторять операторы COMMON во всех процедурах. Более важным преимуществом является возможность введения новых переменных без включения их в COMMON, так как они автоматически будут доступны из любой части ADAPT. Это преимущество является основанием для применения ADAPT с указанной структурой вместо написания четырех отдельных подпрограмм. Такая реализация сохраняет также всю информацию, зависящую от конкретных деталей задачи, физически в одном месте. Конкретная реализация четырех процедур в ADAPT выполнена согласно блок-схеме, представленной на рис. 4.1. Поэтому при построении какой-либо процедуры полезно знать, что к моменту ее вызова все ранее определенные процедуры уже как минимум 1 раз были выполнены. Важно изучить структуру программы (см. рис. 4.1) для определения частоты вызова различных частей ADAPT. Процедуры GRID и BEGIN вызываются только единожды, OUTPUT - 1 раз на каждой итерации, PHI - по I ра:зу на каждой итерации для каждого NF, для которого KSOLVE (NF) 0. Знание частоты вызова полезно при нестандартном применении частей ADAPT. Эти процедуры представляют собой стратегически важные фрагменты программы, в которых пользователь может прерывать вычисления или корректировать исполнение неизменяемой части. Например, величины, которые не будут меняться при вычислениях, удобно ввести в GRID или BEGIN. В то же время нежелательно включать в GRID или BEGIN операции, которые зависят от изменения величин при итерационном процессе. 7.2. ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ Ранее уже отмечалось, что различным частям массива F можно присвоить удобные и имеющие некоторый смысл имена с помощью использования оператора DIMENSION и EQUIVALENCE. Например, если в задаче о течении в канале F(I,J,1) и F(I,J,2) содержат значения продольной скорости w и температуры Т, то можно ввести переменные W (I, J) hT(I,J) следующим образом: DIMENSION W(N1,NJ) ,Т (N1,NJ) EQUIVALENCE (F(1,1,1),W(1,1)),(F(1,1,2),T(1,1)) Для некоторых из вас концепция использования двумерных массивов, эквивалентных некоторой части трехмерных, может оказаться новой. Это возможно потому, что в ФОРТРАНе при сохранении массива F (I, J, NF) сначала сохраняются все элементы F (I, J, 1), затем элементы F(I, J,2) и т.д. Таким образом, трехмерный массив сохраняется в виде совокупности двумерных массивов, которым можно присвоить эквивалентные имена Т(1, J) или W(I, J). Это возможно также потому, что NF - третий индекс. Если бы мы использовали F(NF,I,J) или F(I,NF,J),TO не смогли бы сделать массив Т (I, J) эквивалентным соответствующей части F. Если планируется использование дополнительных массивов, то их следует объявить в начале процедуры. Для уменьшения объема требуемой памяти предпочтительнее использовать уже имеющиеся массивы вместо объявления новых. Некоторые части массива F в заданной задаче могут остаться свободными, поэтому можно их использовать для других целей, возможно, сделав их эквивалентными массивам с другими именами. 7.3. ПРОЦЕДУРА GRID Функция процедуры GRID - предоставление информации о расчетной сетке. В частности, необходимо задать значения MODE, Ll, Ml, XU (I) для I = 2, L2 и YV( J) для J = 2, М2. При MODE = 2 или 3 дополнительно должно быть задано значение радиуса R(l) для нижней границы области. Грани контрольных объемов 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 |