Здавалка
Главная | Обратная связь

И ПОСТРОЕНИЕ ПЕРКОЛЯЦИОННОГО КЛАСТЕРА»

По дисциплине: «процессы на поверхности раздела фаз»

 

 

Выполнил: студент группы НМ-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 Все права принадлежат авторам размещенных материалов.