align="justify"> readln (newconf); (newconf = 'y') then
write ('число часток в ряду ='); (nrow); ('максимальна швидкість =');
readln (vmax);: = N div nrow;: = Ly/nrow;: = Lx/ncol;: = 0; icol: = 1 to ncol doirow: = 1 to nrow do p>
i: = i +1; [i]: = ay * (irow-0.5);
if ((irow mod 2) = 0) to N do
vx [i]: = vx [i]-vxcum; [i]: = vy [i]-vycum;
end;
{write ('ім'я файлу з конфігурацією');
readln (fname);} ('відносна зміна швидкості =');
readln (vscale); (datain, 'novij.txt'); (datain); (datain, N, Mx, My);: = Lx/Mx;: = Ly/My; i : = 1 to N do (datain, x [i], y [i], vx [i], vy [i]); [i]: = x [i] * xscale; [i]: = y [i ] * yscale;
vx [i]: = vx [i] * vscale; [i]: = vy [i] * vscale;
end; (datain);;;
В
Рис. 5.4 Початкові умови, використані в задачі 5.1 з параметрами, наведеними в підпрограмі initiаl
Потім ми реалізуємо алгоритм Верле для чисельного рішення рівнянь руху Ньютона. Зверніть увагу на те, що швидкість частково оновлюється з використанням старого прискорення. Далі викликається підпрограма ассеl, яка обчислює прискорення, використовуючи нову координату, і швидкість ще раз змінюється. Підпрограма Vеrlеt звертається до підпрограми реriоdiс, яка в свою чергу забезпечує розгляд частинок тільки в центральній клітинці. br/>
procedure Verlef (var x, y, vx, vy, ax, ay: component;
N: integer;, Ly, dt, dt2: real;
var virial, xflux, yflux, pe, ke: real);
i: integer;, ynew: real; i: = 1 to N do: = x [i] + vx [i] * dt +0.5 * ax [i] * dt2;
periodic (xnew, ynew, xflux, yflux, vx [i], vy [i], Lx, Ly); [i]: = xnew; [i]: = ynew;; p>
accel (x, y, ax, ay, N, Lx, Ly, pe);
for i: = 1 to N do
end;;
У підпрограмі ассеl для знаходження повної сили, що діє і кожну частку, використовується третій закон Ньютона. (Нагадаємо, що нашій системі одиниць маса частки дорівнює одиниці.) Звернення до підпрограми sераrаtiоn забезпечує, що відстань між частинками ніколи не буде більше Lх/2 в х-напрямку і Lу/2 у у-напрямку. br/>
procedure accel (var x, y, ax, ay: component;: integer;, Ly: real; pe: real);
var, j: integer;, dy, r, force, potential: real; i: = 1 to N do [i]: = 0.0; [i]: = 0.0;; i: = 1 to (N-1) doj: = (i +1) to N do
dx: = x [i]-x [j];: = y [i]-y [j];
separation (dx, dy, Lx, Ly);
r: = sqrt (dx * dx + dy * dy);
Потенціа...