Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lecture10.ppt
Скачиваний:
4
Добавлен:
11.06.2024
Размер:
198.66 Кб
Скачать

Границы области – константные выражения, константы задаются в описании, например:

DOMAIN PARAMETER Nx=388, MyJ=4, Ny=122

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

Например, трехмерная область oijm может быть задана с помощью операции произведения одномерных областей:

oijm: (oi ; oj ; om).

Величины в языке Норма соответствуют расчетным переменным в расчетных формулах.

VARIABLE Velocity DEFINED ON oijm.

Величина Velocity определена на области oijm,

то есть эта величина имеет индексы i, j, m и может принимать значения во всех точках области oijm

Соотношения позволяют описывать вычисления, которые должны быть реализованы в программе.

FOR oijm ASSUME Velocity = 1.0.

Оператор ASSUME в общем виде:

FOR <область> ASSUME <формула> .

и является запросом на вычисление формулы во всех точках области.

Формула имеет вид <левая часть> = <правая часть>.

В результате выполнения оператора ASSUME величина, указанная в <левой части>, получает значения во всех точках <области>, по формуле, указанной в <правой части>.

Каким образом это вычисление реализуется – последовательно, параллельно, в каком порядке – в языке не определяется (декларативность)

Язык Норма. Пример программы 1 Решение системы линейных уравнений:

m

Ai, j X j bi ,

i 1,...,m

 

j 1

 

 

Метод решения

Xi0 X 0,

 

i 1,..., m

 

 

 

 

 

Xin 1

1

(bi Ai, j X nj

).

 

 

 

i 1,...,m

Ai,i

 

 

i j

 

 

 

 

 

Условие выхода

 

 

X n

X n 1

 

 

 

 

 

 

 

 

Программа решения системы линейных уравнений на языке Норма

MAIN PART Linear. BEGIN

Oi: (I=1..M) . Oj : (J=1..M) . Oij : (Oi ; Oj). O1,O2 : Oj / j <> i.

VARIABLE X0,X,b DEFINED ON Oi. VARIABLE A DEFINED ON Oij. VARIABLE E.

DOMAIN PARAMETERS M = 20. DISTRIBUTION INDEX I=1..5.

INPUT X0, b ON Oi, A ON Oij. INPUT E.

OUTPUT X ON Oi.

ITERATION X ON N.

INI T I AL N=0 :

FOR Oi ASSUME X = X0. END INITIAL

FOR Oi ASSUME X = 1/A[j=i] * (b - SUM( (O1)A * X[I=J,N-1]). EXIT WHEN MAX( (Oi) ABS(X[N] - X[N-1] ) ) < E.

END ITERATION N. END PART

Язык Норма. Пример программы 2

PART GOD21. NTEND,HX,DT,GAMMA,PVAC,PRECIT,NITER,P0,R0,U0

RESULT P,R,U

BEGIN

!Описание переменных

VARIABLE NTEND,NITER INTEGER.

VARIABLE DT, HX, GAMMA, PVAC, PRECIT REAL. !Сетка, на которой определены основные переменные GRIDSOL : (I=1..LX).

VARIABLE R, U, P, R0, U0, P0, E DEFINED ON GRIDSOL. !Вспомогательные сетки и переменные GRIDAUX:(I=1..LX1).

VARIABLE PX, RX, UX, EX DEFINED ON GRIDAUX. GRIDIN:(I=2..LX1-1). GRIDL:(I=1). GRIDR:(I=LX+1). GRIDJ(J=1).

DOMAIN PARAMETERS LX=200, LX1=201.

! Распределение для конфигурации (10 х 1) процессоров

DISTRIBUTION INDEX I=1..10, J=1.

!Итерации по времени

ITERATION R, P, U, E, ON NT.

!Начальные значения для итераций по времени

INITIAL NT=0:

FOR GRIDSOL ASSUME P=P0; R=R0; U=U0.

FOR GRIDSOL ASSUME E=P/(R*(GAMMA-1.0)) + U*U*0.5.

END INITIAL

!Тело итерации по времени

!Подпрограмма RIEMANN вычисляет “распадные” параметры

FOR GRIDIN ASSUME

COMPUTE RIEMANN(GAMMA,NITER,PVAC,ITPREC,R[NT-1,I-1],P[NT-1,I-1], U[NT-1,I-1],R[NT-1],P[NT-1],U[NT-1] RESULT RX,PX,UX,EX).

FOR GRIDL ASSUME

COMPUTE RIEMANN(GAMMA,NITER,PVAC,ITPREC,R[NT-1], P[NT-1], U[NT-1],R[NT-1],P[NT-1],U[NT-1] RESULT RX,PX,UX,EX).

FOR GRIDR ASSUME

COMPUTE RIEMANN(GAMMA,NITER,PVAC,ITPREC,R[NT-1,I-1],P[NT-1,I-1], U[NT-1,I-1],R[NT-1,I-1],P[NT-1,I-1],U[NT-1,I-1]

RESULT RX,PX,UX,EX).

FOR GRIDSOL ASSUME

R=R[NT-1]+(DT/HX)*(RX*UX-RX[I+1]*UX[I+1]);

U=(R[NT-1]*U[NT-1]+(DT/HX)*((RX*UX*UX+PX)- (RX[I+1]*UX[I+1]*UX[I+1]+PX[I+1])))/R;

E=(R[NT-1]*E[NT-1]+(DT/HX)*((RX*UX*EX+PX*UX)- (RX[I+1]*UX[I+1]*EX[I+1]+PX[I+1]*UX[I+1])))/R;

P=(GAMMA-1.0)*R*(E-U*U*0.5). ! Условие завершения итерации EXIT WHEN NT=NTEND.

END ITERATION NT.

END PART.

Основные возможности языка

НОРМА

Возможность

Используется для

 

представления

 

понятия

Области и операции над

Индексное

областями

пространство

Скалярные переменные

Вектора,

и переменные,

матрицы,

определенные на

массивы

областях

 

Соотношения

Расчетные формулы

Разделы

Части задачи

 

(подпрограммы)

Ввод/Вывод

Ввод/Вывод данных

Итерации

Итеративные

 

вычисления

Редукционные функции

, , min, max

Стандартные

sin,cos,sqrt,exp,…

арифметические

 

функции

 

Интерфейс

Вызов подпрограмм на

с Фортраном

Фортране

Организация вычислений. ASSUME - не форма записи цикла.

j

i

X

Y

X(i,j)=F(X(i-1,j),Y(i,j)) Y(i,j)=G(X(i,j-1),Y(i+1,j))

! Неверный вариант DO i = 1,…

DO j = 1,… X(i,j)=F(X(i-1,j),Y(i,j)) Y(i,j)=G(X(i,j-1),Y(i+1,j))

ENDDO

ENDOO

Обмен информацией между процессорами (модель распараллеливания по данным)

j

i

X(i,j)=Y(i-1,j+1)

 

Соседние файлы в папке Лекции