И ПОСТРОЕНИЕ ПЕРКОЛЯЦИОННОГО КЛАСТЕРА»
По дисциплине: «процессы на поверхности раздела фаз»
Выполнил: студент группы НМ-11б Гранкин Николай Проверил: преподаватель кафедры НТ Стороженко Анастасия Михайловна
Курск 2013г Цель работы: освоить методику моделирования процесса перколяции в пористом материале на основе стохастической модели.
Программное обеспечение: среда Delphi–7.
ЗАДАНИЕ ПО РАБОТЕ
1. По предложенным алгоритмам в среде Borland Delphi–7 составить программу, моделирующую пористую среду и процесс перколяции. Организовать вычисление коэффициента связности. 2. Реализовать в среде Delphi–7 алгоритм визуализации процесса перколяции. 3. Составить отчет по работе. 1. Sreda_create а) Входные данные: p: real – коэффициент пористости; n: integer – размер матрицы среды; б) Выходные данные: spread: array of array of integer – матрица среды. в) Процедура spread_create организует заполнение элементов матрицы среды числами 0 и 1 в зависимости от коэффициента пористости. г) Блок-схема 2. show_sreda а) Входные данные: sreda: array of array of integer – матрица среды; б) Выходные данные: Form1.Canvas – компонент формы программы. в) Процедура графически отображает матрицу среды на форме.
г) Блок-схема 3. fill_first а) Входные данные: sreda: array of array of integer – матрица среды. б) Выходные данные: sreda: array of array of integer – матрица среды. в) В 1-ой строке ячейкам, содержащим значение 0, присваивается значение 2. г) Блок-схема 4. clear а) Входные данные: sreda: array of array of integer – матрица среды. б) Выходные данные: sreda: array of array of integer – матрица среды. в) «Очистка» среды – ячейкам, содержащим значение 2, присваивается значение 0.
г) Блок-схема 5. calculate а) Входные данные: sreda: array of array of integer – матрица среды. б) Выходные данные: pp: real – полная пористость, ep: real – эффективная пористость, ks: real – коэффициент связности, porog: boolean – переменная достижения порога перколяции. в) Рассчитывает полную пористость, эффективную пористость, коэффициент связности, а также присваивает переменной достижения порога перколяции значение true, если в последней строке массива среды есть ячейки со значением 2.
г) Блок-схема 6. inject а) Входные данные: sreda: array of array of integer – матрица среды. б) Выходные данные: sreda: array of array of integer – матрица среды, k: boolean – переменная выхода из цикла заполнения заполнения матрицы среды. в) «Заполнение» среды – если в строке рядом с ячейкой со значением 2 есть ячейка со значением 0, то этой ячейке присваивается переходное значение 3, иначе программа будет работать неправильно; затем всем элементам матрицы со значением 3 присваивается значение 2; крайние строки и столбцы, а также крайние ячейки массива «заполняются» отдельно. г) Блок-схема
7. Button1.Click а) Входные данные: sreda: array of array of integer – матрица среды; p: real – коэффициент пористости. б) Выходные данные: sreda: array of array of integer – матрица среды. в) При нажатии заполняет матрицу среды числами 0 и 1 в зависимости от коэффициента пористости, а также графически отображает матрицу среды на форме. г) Блок-схема 8. Button2.Click а) Входные данные: sreda: array of array of integer – матрица среды; p: real – коэффициент пористости. б) Выходные данные: sreda: array of array of integer – матрица среды. в) При нажатии в 1-ой строке ячейкам, содержащим значение 0, присваивает значение 2, а также графически отображает матрицу среды на форме.
г) Блок-схема 9. Button3.Click а) Входные данные: sreda: array of array of integer – матрица среды, k: boolean – переменная выхода из цикла заполнения среды. б) Выходные данные: sreda: array of array of integer – матрица среды. в) При нажатии происходит «заполнение» среды, после чего среда отображается графически на форме. г) Блок-схема 10. Button4.Click а) Входные данные: sreda: array of array of integer – матрица среды. б) Выходные данные: sreda: array of array of integer – матрица среды. в) При нажатии происходит «очистка» среды – ячейкам, содержащим значение 2, присваивается значение 0, после чего среда отображается графически на форме.
г)Блок-схема 11. Button5.Click а) Входные данные: sreda: array of array of integer – матрица среды. б) Выходные данные: pp: real – полная пористость, ep: real – эффективная пористость, ks: real – коэффициент связности, porog: boolean – переменная достижения порога перколяции, Label.Caption: string – свойство элемента Label. в) Рассчитывает полную пористость, эффективную пористость, коэффициент связности, и выводит значения этих величин на форму программы; присваивает переменной достижения порога перколяции значение true, если в последней строке массива среды есть ячейки со значением 2, после чего выводит сообщение о достижении порога перколяции на форму программы.
г) Блок-схема
Рисунок 1-Окно моделирующей программы
Полный текст программы interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm} const n=70; var sreda: array [1..n] of array [1..n] of integer;
procedure sreda_create(var p: real); var i,j: integer; begin for i:=1 to n do for j:=1 to n do if random < p then sreda[i,j]:=0 else sreda[i,j]:=1; end;
procedure show_sreda; var i,j: integer; begin with Form1.Canvas do for i:=1 to n do for j:=1 to n do begin if sreda[i,j] = 0 then brush.Color:=clwhite; if sreda[i,j] = 1 then brush.Color:=clblack; if sreda[i,j] = 2 then brush.Color:=clred; rectangle(i*5,j*5,(i+1)*5,(j+1)*5); end; end;
procedure fill_first; var i: integer; begin for i:=1 to n do if sreda[i,1] = 0 then sreda[i,1]:=2; end;
procedure clear; var i,j: integer; begin for i:=1 to n do for j:=1 to n do if sreda[i,j] = 2 then sreda[i,j]:=0 end;
procedure calculate(var pp,ep,ks: real; var porog: boolean); var i,j,nf,n0: integer; begin nf:=0; n0:=0; for i:=1 to n do for j:=1 to n do begin if sreda[i,j]=0 then n0:=n0+1; if sreda[i,j]=2 then nf:=nf+1; end; pp:=(nf+n0)/(n*n); ep:=nf/(n*n); ks:=ep/pp; porog:=false; for i:=1 to n do if sreda[i,n] = 2 then porog:=true; end;
procedure inject(var k: boolean); var i,j: integer; begin for i:=2 to (n-1) do for j:=2 to (n-1) do if (sreda[i,j] = 0) and ((sreda[i,j-1] = 2) or (sreda[i,j+1] = 2) or (sreda[i-1,j] = 2) or (sreda[i+1,j] = 2)) then sreda[i,j]:=3; for j:=2 to (n-1) do if (sreda[1,j] = 0) and ((sreda[1,j-1] = 2) or (sreda[1,j+1] = 2) or (sreda[2,j] = 2)) then sreda[1,j]:=3; for j:=2 to (n-1) do if (sreda[n,j] = 0) and ((sreda[n,j-1] = 2) or (sreda[n,j+1] = 2) or (sreda[n-1,j] = 2)) then sreda[n,j]:=3; for i:=2 to (n-1) do if (sreda[i,n] = 0) and ((sreda[i-1,n] = 2) or (sreda[i+1,n] = 2) or (sreda[i,n-1] = 2)) then sreda[i,n]:=3; if (sreda[1,n] = 0) and ((sreda[1,n-1] = 2) or (sreda[2,n] = 2)) then sreda[1,n]:=3; if (sreda[n,n] = 0) and ((sreda[n,n-1] = 2) or (sreda[n-1,n] = 2)) then sreda[n,n]:=3;
k:=false; for i:=1 to n do for j:=1 to n do if sreda[i,j] = 3 then begin sreda[i,j]:=2; k:=true; end; end;
procedure TForm1.Button1Click(Sender: TObject); var p: real; begin randomize; p:=strtofloat(Edit1.Text); sreda_create(p); show_sreda; end;
procedure TForm1.Button2Click(Sender: TObject); begin fill_first; show_sreda; end;
procedure TForm1.Button3Click(Sender: TObject); var k: boolean; begin k:=true; while k = true do begin inject(k); show_sreda; end; end;
procedure TForm1.Button5Click(Sender: TObject); begin clear; show_sreda; end;
procedure TForm1.Button4Click(Sender: TObject); var pp,ep,ks: real; porog: boolean; begin calculate(pp,ep,ks,porog); label2.Caption:='Полная пористость = '+floattostr(round(pp*100)/100); label3.Caption:='Эффективная пористость = '+floattostr(round(ep*100)/100); label4.Caption:='Коэффициент связности = '+floattostr(round(ks*100)/100); if porog then showmessage('Порог перколяции достигнут!'); end;
end. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|