list input-output-variable ON unconditional domain
input-output-variable :
name-variable-on-domain [ attributes ]
declaration-of-output :
OUTPUT list-output-scalar
OUTPUT output-on-domain
output-scalar :
name-scalar [ attributes ]
output-on-domain :
list- input-output-variable ON domain
attributes :
( list-attribute )
attribute :
string
ORDER( list-name-index )
FILE = ' file-name '
ALL
format
format :
I int-constant
{ F,E,D } int-constant . int-constant
Описание входных (выходных) величин означает, что подлежат вводу (выводу) значения всех величин, указанных в списке ввода (вывода). Например, описания
B1 , B2 : B / Z<Eps.
INPUT Velocity ON A. OUTPUT Tau ON B1.
INPUT X, ALPHA.
являются запросами на ввод значений скаляров X, ALPHA, величины Velocity во всех точках области A, а также на вывод значений величины Tau во всех точках области B1, в которых выполнено условие Z<Eps .
Порядок, в котором будут вводиться (выводиться) величины при этом не задается - он определяется в процессе трансляции. Минимальная единица информации, которая вводится (выводится) как единое целое - скаляр или величина на области. Управление вводом (выводом) этих единиц может осуществляться при помощи атрибутов.
Атрибуты действуют на величину (список величин), после которой они указаны. Например, описание
INPUT R2 (FILE ='myfile') ON Grid, R1 ON Grid.
является запросом на ввод из файла myfile значений величины R2 в области Grid, то есть для всех значений индексов этой области, и величины R1 в области Grid из файла norma.dat (имя файла по умолчанию).
Атрибуты позволяют управлять формой входных и выходных данных и связывать данные с входными и выходными файлами:
'string' задает вывод текстовой константы string;
ORDER указывает порядок изменения индексов при выводе: самым старшим индексом является самый правый, самым младшим - самый левый; для очередного значения каждого старшего индекса младшие принимают все свои значения;
FILE задает имя входного или выходного файла; способ задания имени файла определяется при реализации (если атрибут FILE не задан, то ввод осуществляется из файла norma.dat, а вывод -- на экран дисплея);
ALL приводит к выводу имени величины и ее координат (значений индексов) для каждого значения величины на области.
format задает формат для числовых значений при вводе и выводе и соответствует спецификаторам формата I, F, E, D в языке Фортран. По умолчанию установлены форматы: E15.8 для величин типа REAL, D15.8 для величин типа DOUBLE, I5 для величин типа INTEGER.
Для входных величин разрешены только атрибуты format и FILE.
Примеры описания входных величин:
INPUT One (FILE='file1',F10.2), Two(FILE='file2.dat' ) ON Grid2.
Примеры описания выходных величин:
OUTPUT Velocity(' Velocity = ' ,F9.1) .
OUTPUT X(FILE='FILE17' , ORDER(J,K,I), ALL, F5.1) ON Grid.
OUTPUT Y('Matrix of values Y parameter', FILE='OT5' ,ALL,F15.2) ON ABC.
Для вывода данных в более сложной форме (таблицы, графики и т.п.) следует использовать либо средства стандартных библиотек и пакетов, либо собственные программы, написанные на других языках (см. п. 5.2.5).
Синтаксис файла исходных данных:
file :
input-element { input-element }*
input-element :
name-scalar = arithm-constant;
name-variable-on-domain ( list-index-range ) = data ;
index-range :
name-index = int-constant .. int-constant
data :
list-data-element
data-element :
int-constant
body
int-constant ( data )
Пример содержимого файла исходных данных:
C(K=1..10)=5(-10.1) ,5(1.01);
ALPHA=3.17; BETA=-0.12; GAMMA=0.000000001;
C(K=11..20)=5(10.1),5(-1.01);
Пример содержимого файла data исходных данных для программы Gauss:
MAIN PART Gauss.
! Solution of linear equations by Gauss-Jourdan method.
FOR OtiEQtj1 ASSUME m = m[t-1,i=t]/m[t-1,i=t,j=t].
FOR OiEQj1 ASSUME r = r[t-1,i=t]/m[t-1,i=t,j=t].
FOR OiNEtj1 ASSUME m = m[t-1]-m[t-1,j=t]*m[i=t].
FOR OiNEti1 ASSUME r = r[t-1]-m[t-1,j=t]*m[i=t].
FOR Oi ASSUME x = r [t=n].
END PART.
Входной файл data:
B(I=1..3)=5.0, 13.0, 3.0;
A(I=1..5,J=1..5)=2.0, 3.0, -4.0, 5.0, -1.0,
3.0, 4.0, -1.0, 6.0, 1.0,
2.0, 0.0, -3.0, 0.0, 4.0,
0.0, 2.0, 0.0, 0.3, 0.0,
3.0, -1.0, 2(0.0), 1.0;
B(I=4..5)= 5.0, 3.0;
Значения многомерных массивов данных располагаются в файле в соответствии с указанными индексами, причем первыми меняются значения более правого индекса - в приведенном примере матрица A(I,J) задана по строкам, то есть I =1, J = 1,2,3,4,5, затем I = 2, J = 1,2,3,4,5 и так далее до I =5, J = 1,2,3,4,5.
Способ задания входного файла data, конечно, не является единственным.