1 | MAIN PART Parabol. |
2 | BEGIN |
3 | Wx : (i=0..M). |
4 | Wt : (j=0..K). |
5 | Wxt : (Wx;Wt). |
6 | Wx1 : Wx-LEFT(1)-RIGHT(1). |
7 | Wt1 : Wt-LEFT(1). |
8 | Wxt1 : (Wx1;Wt1). |
9 | Wxt2 : ((i=0); Wt1). |
10 | Wxt3 : ((i=M); Wt1). |
11 | VARIABLE u0, u1 DEFINED ON Wt1 DOUBLE. |
12 | VARIABLE u DEFINED ON Wxt DOUBLE. |
13 | DOMAIN PARAMETERS M=10, K=20. |
14 | EXTERNAL FUNCTION BOUND DOUBLE. |
15 | INPUT u0(FILE='parabol') ON Wt1. |
16 | INPUT u1(FILE='parabol') ON Wt1. |
17 | FOR Wxt2 ASSUME u=u0. |
18 | FOR Wxt3 ASSUME u=u1. |
19 | FOR Wxt/j=0 ASSUME u=BOUND(i,M). |
20 | FOR Wxt1 ASSUME u=(u[i+1,j-1]+u[i-1,j-1])/2.0. |
21 | OUTPUT u(FILE='parabol.out') ON Wxt. |
22 | END PART. |
23 | FUNCTION BOUND DOUBLE. |
24 | k1,k2 |
25 | BEGIN |
26 | VARIABLE k1,k2 DOUBLE. |
27 | VARIABLE pi DOUBLE. |
28 | pi=3.1415. |
29 | BOUND=SIN(pi*k1/k2). |
30 | END PART. |
Рассмотрим эту программу более подробно (используемые ниже номера совпадают с нумерацией строк программы).
(1) Заголовок главного раздела программы Parabol.
(2) Начало главного раздела.
(3-5) Определяются одномерные области Wx, Wt и многомерная область Wxt.
(6-7) Определяются одномерные области Wx1, Wt1 с помощью операций модификации области (исключаются границы областей Wx и Wt).
(8) Определяется многомерная область Wxt1 - область, на которой производится расчет (i=1..M-1; j=1..K).
(9-10) Определяются Wxt2, Wxt3 - области, на которых определены начальные значения задачи.
(11-12) Описание переменных u0, u1 и u. u0 - значения u(0,t), u1 - значения u(1,t), u - результат решения уравнения.
(13) Задание параметров областей (количество шагов по оси x - 10, по оси t - 20).
(14) Описание внешней функции пользователя.
(15-16) Ввод начальных данных u0 и u1 из файла parabol.dat, содержащего следующие строки:
u0(j=1..20)=20(0.0);
u1(j=1..20)=20(0.0);(17-18) Задание значений u(0,t) и u(1,t).
(19) Задание значений u(x,0), происходит вызов функции пользователя BOUND.
(20) Вычисления u по соответствующей разностной схеме.
(21) Вывод результата в файл parabol.out
(22) Конец главного раздела.
(23) Заголовок внешней функции пользователя BOUND.
(24) Обозначение входных k1, k2 параметров функции.
(25) Начало функции пользователя.
(26) Описание переменных , являющихся параметрами функции - k1, k2.
(27-28) Описание переменной pi.
(29) Вычисление значения функции.
(30) Конец функции пользователя.