Красавин Компютерныы практикум в среде МатЛаб 2015
.pdf
Рис. 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.
