Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Красавин Компютерныы практикум в среде МатЛаб 2015

.pdf
Скачиваний:
218
Добавлен:
12.11.2022
Размер:
9.22 Mб
Скачать

Рис. 24.3. Квадратная решетка 8 8. Координаты и нумерация узлов

На рис. 24.4 показана структура lattice квадратной решетки. Поле structure содержит x-координаты атомов (первая строка), y-координаты атомов (вторая строка) и их номера (третья строка); а поле radiuses – матрицу, определяющую расстояния между каждыми двумя атомами на решетке; поле neighbors для каждого атома содержит информацию о числе и номерах атомов, входящих в соответствующую координационную сферу; для решетки 8 8 с периодическими граничными условиями имеется 14 координационных сфер.

271

Рис. 24.4. Структура lattice квадратной решетки

Решетка графена (пример 24.2) представляет собой гексагональную решетку, образованную атомами углерода. Из физическиз соображений ее удобно представлять как две треугольные подрешетки A и B, вложенные друг в друга (рис. 24.5– 24.7).

Атомы, входящие в четные координационные сферы, относятся к той же подрешетке, что и рассматриваемый атом; атомы, входящие в нечетные координационные сферы, – к другой подрешетке.

272

Рис. 24.5. Решетка графена

Пример 24.2. Программный код аналогичен коду из примера 24.1 с той разницей, что атомы делятся на две подрешетки, и базисные векторы неортогональны друг другу:

function [lattice]=GrapheneLattice(Lx,Ly)

% Lx - количество атомов по оси X, Ly*2 - количество атомов по оси Y

eY=0.5;

eX=sqrt(1-0.5^2); % eY и eX - базисные векторы решетки xMax=Lx*eX*2;

N=Lx*Ly; fullN=Lx*Ly*2; % N - количество атомов в одной из двух подрешеток, fullN - общее количество атомов

ACoord=zeros(3,N);

BCoord=zeros(3,N);

ACoord(3,:)=1:1:N;

BCoord(3,:)=ACoord(3,:)+Lx*Ly;

ACoord(1,:)=(floor((ACoord(3,:)-1)/Lx)+2*mod(ACoord(3,:)- 1,Lx))*eX;

ACoord(2,:)=floor((ACoord(3,:)-1)/Lx)*3*eY; ACoord(1,(ACoord(1,:)>=xMax))=ACoord(1,(ACoord(1,:)>=xMax))-xMax; BCoord(1,:)=ACoord(1,:);

BCoord(2,:)=ACoord(2,:)+2*eY;

fullCoord=[ACoord,BCoord];

lattice.structure=fullCoord;

yMax=max(fullCoord(2,:))+eY;

fullCoord(1,:)=fullCoord(1,:)+xMax/2;

fullCoord(2,:)=fullCoord(2,:)+yMax/2;

fullCoord(1,(fullCoord(1,:)>=xMax))=fullCoord(1,(fullCoord(1,:)>=

273

xMax))-xMax; fullCoord(2,(fullCoord(2,:)>=yMax))=fullCoord(2,(fullCoord(2,:)>= yMax))-yMax;

lattice.radiuses=zeros(fullN,fullN); for i=1:1:N

for j=1:1:fullN lattice.radiuses(i,j)=round(10^8*sqrt((fullCoord(1,i)-

fullCoord(1,j))^2+(fullCoord(2,i)-fullCoord(2,j))^2))/(10^8); end

fullCoord(1,:)=fullCoord(1,:)-eX*(mod(i,Lx)==0)-2*eX; fullCoord(2,:)=fullCoord(2,:)-eY*3*(mod(i,Lx)==0);

fullCoord(1,(fullCoord(1,:)<0))=fullCoord(1,(fullCoord(1,:)<0))+

xMax;

fullCoord(2,(fullCoord(2,:)<0))=fullCoord(2,(fullCoord(2,:)<0))+

yMax; end

fullCoord=lattice.structure;

fullCoord(1,:)=fullCoord(1,:)+xMax/2; fullCoord(2,:)=fullCoord(2,:)+yMax/2-2*eY; fullCoord(1,(fullCoord(1,:)>=xMax))=fullCoord(1,(fullCoord(1,:)>= xMax))-xMax; fullCoord(2,(fullCoord(2,:)>=yMax))=fullCoord(2,(fullCoord(2,:)>= yMax))-yMax;

for i=(N+1):1:fullN for j=1:1:fullN

lattice.radiuses(i,j)=round(10^8*sqrt((fullCoord(1,i)- fullCoord(1,j))^2+(fullCoord(2,i)-fullCoord(2,j))^2))/(10^8);

end fullCoord(1,:)=fullCoord(1,:)-eX*(mod(i,Lx)==0)-2*eX; fullCoord(2,:)=fullCoord(2,:)-eY*3*(mod(i,Lx)==0);

fullCoord(1,(fullCoord(1,:)<0))=fullCoord(1,(fullCoord(1,:)<0))+

xMax;

fullCoord(2,(fullCoord(2,:)<0))=fullCoord(2,(fullCoord(2,:)<0))+

yMax;

end

uniqueRadiuses=unique(lattice.radiuses);

numberOfUniqueRadiuses=size(uniqueRadiuses,1);

lattice.neighbors=cell(fullN,numberOfUniqueRadiuses-1);

for i=1:1:fullN

for j=1:1:fullN

for k=2:1:numberOfUniqueRadiuses

if uniqueRadiuses(k)==lattice.radiuses(i,j) lattice.neighbors{i,k-1}=[lattice.neighbors{i,k- 1} j];

274

end

end

end

end

function GrapheneLatticePlot(lattice)

N=size(lattice.radiuses,1);

xMax=max(lattice.structure(1,:));

yMax=max(lattice.structure(2,:));

lattice_A=lattice.structure(:,1:N/2); lattice_B=lattice.structure(:,N/2+1:N);

figure % рис. 24.6, 24.7

plot(lattice_A(1,:),lattice_A(2,:),'b.','MarkerSize',20) hold on plot(lattice_B(1,:),lattice_B(2,:),'r.','MarkerSize',20)

for i=1:1:size(lattice_A,2) text(lattice_A(1,i)+0.15,lattice_A(2,i),num2str(lattice_A(3,i))) text(lattice_B(1,i)+0.15,lattice_B(2,i),num2str(lattice_B(3,i))) end

axis([-1 (xMax+1) -1 (yMax+1)]); end

Рис. 24.6. Решетка графена4 4. Координаты и нумерация узлов

275

Рис. 24.7. Структура lattice решетки графена

276

Список литературы и интернет-ресурсов

1.Ануфриев И.Е., Смирнов А.Б., Смирнова Е.Н. MATLAB 7. – СПб.: БХВ-Петербург, 2005. – 1104 с.

2.Dan Green. One Hundred Physics Visualizations with Matlab. – World Scientific Publishing Company, 2013. – 200 p.

3.Mengliu Zhao, 2014. http://www.mathworks.com/matlabcentral/fileexchange/41613-plot-

spherical-harmonics/content/spharmPlot.m

4.Поршнев С.В. Компьютерное моделирование физических процессов в пакете MATLAB: Учебное пособие. СПб.: Лань, 2011. – 736 с.

5.Кроновер Р.М. Фракталы и хаос в динамических системах. Основы теории. М.: Постмаркет, 2000. – 352 с.

277

А.В. Красавин, Я.В. Жумагулов

Компьютерный практикум в среде MatLab

Редактор М.В. Макарова

Подписано в печать 20.11.2015. Формат 60х84 1/16

Уч.-изд.л. 17,5. П.л. 17,5. Тираж 200 экз.

Изд. № 1/35. Заказ № 47.

Национальный исследовательский ядерный университет «МИФИ». 115409, г. Москва, Каширское ш., 31.

ООО «Баркас».

115230, г. Москва, Каширское ш., 4.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]