-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAddRectAtomicArray.m
55 lines (42 loc) · 1.52 KB
/
AddRectAtomicArray.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function AddRectAtomicArray(LAtoms, WAtoms, X0, Y0, VX0, VY0, InitDist, Temp, Type)
global C
global x y AtomSpacing
global nAtoms
global AtomType Vx Vy Mass0 Mass1 Mass2
if Type == 0
Mass = Mass0;
elseif Type ==1
Mass = Mass1;
else
Mass = Mass2;
end
L = (LAtoms - 1) * AtomSpacing;
W = (WAtoms - 1) * AtomSpacing;
numAtoms = LAtoms * WAtoms;
xp(1, :) = linspace(0, L, LAtoms);
yp(1, :) = linspace(0, W, WAtoms);
x(nAtoms + 1:nAtoms+LAtoms) = xp-L/2;
y(nAtoms + 1:nAtoms+LAtoms) = yp(1)-W/2;
for i = 1:WAtoms-1
x(nAtoms + i * LAtoms + 1:nAtoms + (i + 1) * LAtoms) = xp - L / 2;
y(nAtoms + i * LAtoms + 1:nAtoms + (i + 1) * LAtoms) = yp(i + 1) - W / 2;
end
x(nAtoms + 1:nAtoms + numAtoms) = x(nAtoms + 1:nAtoms + numAtoms) + ...
(rand(1, numAtoms) - 0.5) * AtomSpacing * InitDist + X0;
y(nAtoms + 1:nAtoms + numAtoms) = y(nAtoms + 1:nAtoms + numAtoms) + ...
(rand(1, numAtoms) - 0.5) * AtomSpacing * InitDist + Y0;
AtomType(nAtoms + 1:nAtoms + numAtoms) = Type;
if Temp == 0
Vx(nAtoms + 1:nAtoms + numAtoms) = 0;
Vy(nAtoms + 1:nAtoms + numAtoms) = 0;
else
std0 = sqrt(C.kb * Temp / Mass);
Vx(nAtoms + 1:nAtoms + numAtoms) = std0 * randn(1, numAtoms);
Vy(nAtoms + 1:nAtoms + numAtoms) = std0 * randn(1, numAtoms);
end
Vx(nAtoms + 1:nAtoms + numAtoms) = Vx(nAtoms + 1:nAtoms + numAtoms) - ...
mean(Vx(nAtoms + 1:nAtoms + numAtoms)) + VX0;
Vy(nAtoms + 1:nAtoms + numAtoms) = Vy(nAtoms + 1:nAtoms + numAtoms) - ...
mean(Vy(nAtoms + 1:nAtoms + numAtoms)) + VY0;
nAtoms = nAtoms + numAtoms;
end