You are on page 1of 27

Carbophene: effective mass

true
true
true
September 03, 2019

Abstract
This document is the result of our efforts to compute the effective masses of each N-
carbophene. It is the result of compiling an R Markdown file, thus code given within this
document is the actual code that was used to compute the results shown. We use the usual
method for determining the effective mass of electrons and holes involving the fitting a parabola
to the band energy vs. kpoint data. Our results show parabolic dispersions for only grapheny-
lene, 3-carbophene, and 4-carbophene. Starting at the conduction data for 5-carbophene, all the
subsequent curves should not be fitted with parabolas, because they show steps and the energy
variation is extremely small.

0.0.1 Band dispersion plots to determine the Valence and Conduction bands

We manually determined the valence and conduction bands by selecting out a band and then
overlaying the band dispersion plot of all of the bands with just the selected band in blue. The plots
of the results are shown here, while the underlying code helps us later for computing the effective
masses. The values “V25”, “V26”, and such, are how the R code contained in this document
represents the band value.

1
graphenylene, valence: V25 3−carbophene, valence: V64
1.0

0.5

0.0

−0.5

−1.0
4−carbophene, valence: V103 5−carbophene, valence: V142
1.0

0.5

0.0

−0.5

−1.0
6−carbophene, valence: V181 7−carbophene, valence: V220
1.0

0.5
Energy [eV]

0.0

−0.5

−1.0
8−carbophene, valence: V259 9−carbophene, valence: V298
1.0

0.5

0.0

−0.5

−1.0
M Gamma K M
10−carbophene, valence: V337
1.0

0.5

0.0

−0.5

−1.0
M Gamma K M

2
0.0.2 Finding the step size between kpoints along the band dispersion path for each car-
bophene

When computing the band dispersion in DFTB+ we specified the kpoint path using the command
KPointsAndWeights [relative]= Klines {
1 0.5 0.0 0.0 # M
35 0 0 0 # Gamma
33 0.3333333333333333 0.66666666666666667 0.0 #K
26 0.5 0.0 0.0 # M
}
where the k-points given in relative coordinate form. Because the kpoints are given in relative
coordinate form they will need “to be adjusted to the physical size of the unit cell, which will
‘compress’ the shown band plots with increasing unit cell size. For example, the spacing between
the M and the gamma point is (2pi)/(3a), where a is the unit cell size in real space.”(Referee 2, 27
August 2019) Note that there was a typo in what the referee wrote. The distance between the M
high symmetry kpoint and the Gamma high symmetry kpoint is (2pi)/(sqrt(3)a).(Reich, Thomsen,
and Maultzsch 2008)
To go about this in a sane manner, we will first define a function to transform from lattice vectors
(LVS), in units of angstroms, to reciprocal lattice vectors (RLV), also in units of angstroms.
LVS.to.RLV <- function(lvs1, lvs2, lvs3){

pi <- 3.141592653589793

b1 <- 2*pi*cross(lvs2, lvs3)/dot(lvs1, cross(lvs2, lvs3))


b2 <- 2*pi*cross(lvs3, lvs1)/dot(lvs1, cross(lvs2, lvs3))
b3 <- 2*pi*cross(lvs1, lvs2)/dot(lvs1, cross(lvs2, lvs3))

return(data.frame(b1,b2,b3))

We’ll also define a function to find the euclidean distance between two vectors in cartesian space,
euclidean <- function(v1,v2){sqrt( (v1[1] - v2[1])^2 + (v1[2] - v2[2])^2 + (v1[3] - v2[3])^2)}

and a function to find the magnitude of a vector in cartesian space


magnitude <- function(v1){sqrt( (v1[1])^2 + (v1[2])^2 + (v1[3])^2)}

0.0.2.1 kpoint step size for graphenylene


We are now in a position where we can determine the step size between k-points
RLV.2carbophene <- LVS.to.RLV(c(5.915432549426214, 3.415276574784299, 0.0), c(5.915432549426214,

RLV.2carbophene[[1]]

3
[1] 0.5310842 0.9198648 0.0000000
RLV.2carbophene[[2]]

[1] 0.5310842 -0.9198648 0.0000000


M <- 0.5 * RLV.2carbophene[[1]]
K <- 1/3 * RLV.2carbophene[[1]] + 2/3 * RLV.2carbophene[[2]]
G <- c(0,0,0)

We can compare our results with the value that the referee said we should have
#referee:
2*pi/sqrt(3)/magnitude(c(5.915432549426214, 3.415276574784299, 0.0))

[1] 0.5310842
#us
euclidean(M,G)

[1] 0.5310842
Thus we see that, the euclidean distance of M and Gamma as computed using our method and the
value that the referee said it should be (after the typo correction) are the same for graphenylene.
We’ll take the euclidean distances a step further and divide the distances between the high symmetry
kpoints by the number of kpoints to give us the proper distance between adjacent kpoints.
N2MGsize <- euclidean(M,G)/35
N2GKsize <- euclidean(K,G)/33
N2KMsize <- euclidean(K,M)/26

0.0.2.2 kpoint step size for carbophenes


Now that we are confident with the distances found for graphenylene (2-carbophene), we will
determine the step size between kpoints for each carbophene.
RLV.3carbophene <- LVS.to.RLV(c(0.1165958156E+02, 0.6731662554E+01, 0.0), c(0.1165958156E+02,-0.

M.3 <- 0.5 * RLV.3carbophene[[1]]


K.3 <- 1/3 * RLV.3carbophene[[1]] + 2/3 * RLV.3carbophene[[2]]
G.3 <- c(0,0,0)

N3MGsize <- euclidean(M.3,G.3)/35


N3GKsize <- euclidean(K.3,G.3)/33
N3KMsize <- euclidean(K.3,M.3)/26

RLV.4carbophene <- LVS.to.RLV(c(0.1744640388E+02,0.1007268598E+02, 0.0), c(0.1744640388E+02,-0.1

M.4 <- 0.5 * RLV.4carbophene[[1]]

4
K.4 <- 1/3 * RLV.4carbophene[[1]] + 2/3 * RLV.4carbophene[[2]]
G.4 <- c(0,0,0)

N4MGsize <- euclidean(M.4,G.4)/35


N4GKsize <- euclidean(K.4,G.4)/33
N4KMsize <- euclidean(K.4,M.4)/26

RLV.5carbophene <- LVS.to.RLV(c(0.2323141986E+02,0.1341266651E+02, 0.0), c(0.2323141986E+02,-0.1

M.5 <- 0.5 * RLV.5carbophene[[1]]


K.5 <- 1/3 * RLV.5carbophene[[1]] + 2/3 * RLV.5carbophene[[2]]
G.5 <- c(0,0,0)

N5MGsize <- euclidean(M.5,G.5)/35


N5GKsize <- euclidean(K.5,G.5)/33
N5KMsize <- euclidean(K.5,M.5)/26

RLV.6carbophene <- LVS.to.RLV(c(0.2902644535E+02,0.1675842604E+02, 0.0), c(0.2902644535E+02,-0.1

M <- 0.5 * RLV.6carbophene[[1]]


K <- 1/3 * RLV.6carbophene[[1]] + 2/3 * RLV.6carbophene[[2]]
G <- c(0,0,0)

N6MGsize <- euclidean(M,G)/35


N6GKsize <- euclidean(K,G)/33
N6KMsize <- euclidean(K,M)/26

RLV.7carbophene <- LVS.to.RLV(c(0.3481842102E+02, 0.2010242475E+02, 0.0), c(0.3481842102E+02,-0.

M <- 0.5 * RLV.7carbophene[[1]]


K <- 1/3 * RLV.7carbophene[[1]] + 2/3 * RLV.7carbophene[[2]]
G <- c(0,0,0)

N7MGsize <- euclidean(M,G)/35


N7GKsize <- euclidean(K,G)/33
N7KMsize <- euclidean(K,M)/26

5
RLV.8carbophene <- LVS.to.RLV(c(0.4060453675E+02, 0.2344304022E+02, 0.0), c(0.4060453675E+02,-0.

M <- 0.5 * RLV.8carbophene[[1]]


K <- 1/3 * RLV.8carbophene[[1]] + 2/3 * RLV.8carbophene[[2]]
G <- c(0,0,0)

N8MGsize <- euclidean(M,G)/35


N8GKsize <- euclidean(K,G)/33
N8KMsize <- euclidean(K,M)/26

RLV.9carbophene <- LVS.to.RLV(c(0.4638858111E+02,0.2678245979E+02, 0.0), c(0.4638858111E+02,-0.2

M <- 0.5 * RLV.9carbophene[[1]]


K <- 1/3 * RLV.9carbophene[[1]] + 2/3 * RLV.9carbophene[[2]]
G <- c(0,0,0)

N9MGsize <- euclidean(M,G)/35


N9GKsize <- euclidean(K,G)/33
N9KMsize <- euclidean(K,M)/26

RLV.10carbophene <- LVS.to.RLV(c(0.5218228466E+02, 0.3012745610E+02, 0.0), c(0.5218228466E+02,-

M <- 0.5 * RLV.10carbophene[[1]]


K <- 1/3 * RLV.10carbophene[[1]] + 2/3 * RLV.10carbophene[[2]]
G <- c(0,0,0)

N10MGsize <- euclidean(M,G)/35


N10GKsize <- euclidean(K,G)/33
N10KMsize <- euclidean(K,M)/26

0.0.2.3 Raw and processed data kpoint versus band energy of 3-Carbophene
The original band structure data that DFTB+ gives us is a text file of m lines, where m is the number
of kpoints in the band dispersion path. Each line starts with an integer stating the kpoint (in the
relative coordinate representation) of all of the data in that line, the rest of the elements on that line
are the energies of each band the kpoint. Thus, a system with only a 10 bands will have a total of 11
elements on a line, while a system with 300 bands will have 301 elements on a line. Upon reading
in the data into R, we subject the data to some slight manipulation to turn it into a form that is
more easy to use. Here is an example of the 3-carbophene data after manipulation:
## variable kpoint Energy
## 1 V2 1 -15.952
## 2 V2 2 -15.954

6
## 3 V2 3 -15.959
## 4 V2 4 -15.967
## 5 V2 5 -15.978
## 6 V2 6 -15.991
where the “variable” column specifies the band (counting from 2), kpoint is the relative coordinate
kpoint value, and Energy is the energy of the band at the kpoint in eV.
The data undergoes some light data manipulation to take it from the data file that DFTB+ gives us:
## kpoint Energy
## 1 30 0.9675
## 2 31 0.9625
## 3 32 0.9575
## 4 33 0.9535
## 5 34 0.9495
## 6 35 0.9465
## 7 36 0.9465
## 8 37 0.9465
## 9 38 0.9495
## 10 39 0.9535
## 11 40 0.9595
## 12 41 0.9665
## 13 42 0.9745
and transforms it into a format that is easy to understand as a parabola centered at the origin.
To make this transformation we define a function that takes the dataframe, the band of interest,
kpoint step sizes, amongst other input, and spits out the parabola-like data of the band around the
kpoint of interest with the k-points “adjusted to the physical size of the unit cell.” Note that for
3-carbophene the 36th kpoint is the maximum of the valence band (the valence band is called “V65”
in this code).
compute.parabolic.data <- function(input.dataframe, nrings, vari, kp, ksize1, ksize2){

h <- 4.135667662*10^(-15) #Plank's constant in units of eV*s


pi <- 3.1415926535897932 #pi
emass <- 9.10938356*10^(-31) #mass of an electron in units of kg

#Energy of the local maximum for valence bands or local minimum for conduction bands
en <- filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoin

#Selection of the data around the maximum or minimum, and moving the minimum to be at origin.
test.data1 <- rbind(
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==

7
mutate(kpoint = kpoint - kp) %>%
mutate(kpoint = kpoint*ksize1)

test.data2 <- rbind(


filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
mutate(kpoint = kpoint - kp) %>%
mutate(kpoint = kpoint*ksize2)

test.data <- rbind(test.data1, test.data2) %>% mutate(Energy = Energy - en) %>% select(kpoint,

return(test.data)
}

compute.parabolic.data(bandDF, 3, "V65", 36, N3MGsize, N3GKsize)

## kpoint Energy
## 1 -0.046190229 0.021
## 2 -0.038491857 0.016
## 3 -0.030793486 0.011
## 4 -0.023095114 0.007
## 5 -0.015396743 0.003
## 6 -0.007698371 0.000
## 7 0.000000000 0.000
## 8 0.009428060 0.000
## 9 0.018856120 0.003
## 10 0.028284180 0.007
## 11 0.037712240 0.013
## 12 0.047140300 0.020
## 13 0.056568360 0.028

0.0.3 Computing effective mass of valence hole and conducting electron.

Below are graphs of the processed DFTB+ data along with the curve predicted by the fit of that
data. The title of each graph specifies the type of carbophene (2-carbophene is graphenylene), if it
is the conduction band or valence band, the high symmetry kpoint, the xˆ2 coefficient of the curve
fit, and the effective mass due to the curve fit.
Looking at these results we find that we have parabolic dispersion for structures 2, 3 and 4 only.
The other band structures present flat lines near the minimum and cannot be considered parabolic,
making a parabolic fit inadequate. One indication of this is the fact that the range in energy for 6, 7,
8, 9 and 10 -carbophene are orders of magnitude smaller than that found in 2,3 and 4-carb cases.

8
5-carbophene is a limiting case, for which the energy range is reasonable, but the data appears in
steps and is consequently not parabolic.
Regarding the small values and the precision of output numbers, especially when we are dealing
with an approximation like DFTB, an energy variation of 1x10ˆ-3 or 1x10ˆ-4 or smaller can be
considered the same as zero.
compute.effective.mass <- function(input.dataframe, nrings, vari, kp, nvstr, kpstring, ksize1, k

h <- 4.135667662*10^(-15) #Plank's constant in units of eV*s


pi <- 3.1415926535897932 #pi
emass <- 9.10938356*10^(-31) #mass of an electron in units of kg

#Energy of the local maximum for valence bands or local minimum for conduction bands
en <- filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoin

#Selection of the data around the maximum or minimum, and moving the minimum to be at origin.
test.data1 <- rbind(
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
mutate(kpoint = kpoint - kp) %>%
mutate(kpoint = kpoint*ksize1)

test.data2 <- rbind(


filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
) %>%
mutate(kpoint = kpoint - kp) %>%
mutate(kpoint = kpoint*ksize2)

test.data <- rbind(test.data1, test.data2) %>% mutate(Energy = Energy - en, Data = "DFTB+") %>

#Polynomial Fit of the data


fit <- lm(data=test.data, formula = Energy ~ poly(kpoint, 2, raw=TRUE) ) #Polynomial Fit
eq <- function(x) {fit$coefficients[3]*x*x + fit$coefficients[2]*x + fit$coefficients[1]} #Equat

9
fit.data <- test.data %>% mutate(Energy = eq(kpoint), Data = "fit") %>% select(Data, kpoint, Ene

combined.data <- rbind(test.data, fit.data) #combination of DFTB+ data and fit data

effmass <- 1 / (2*fit$coefficients[3]*(h/2/pi)^(-2))/emass # computing the effective mass


#effmass <- (h/(2*pi))^(2) / (2*fit$coefficients[3] *emass) # computing the effective mass

strng <- paste(nvstr,kpstring, " Coeff:", round(fit$coefficients[3], digits = 5), " effmass:",

#Defining the plot


eff.mass <-qplot(data=combined.data, x=kpoint ,y=Energy, color=Data,main = strng)+
theme_bw() +
xlab("") +
ylab("Energy [eV]") +
scale_y_continuous(expand = c(0, 0)) +
scale_color_manual(values = c("red", "blue")) +
theme(axis.text.y = element_text(size=14),
axis.text.x = element_text(size=12),
axis.title.x=element_text(size=18),
axis.title.y=element_text(size=18),
legend.title = element_text(size=16),
legend.text = element_text(size = 14))

return(eff.mass) #output of the function

10
2−Carb Conduction K Coeff: 9.96316 effmass: 0.02387

0.3
Energy [eV]

0.2
Data
DFTB+
fit

0.1

0.0
−0.1 0.0 0.1 0.2
2−Carb Valence K Coeff: −8.58067 effmass: −0.02771
0.0
Energy [eV]

−0.1
Data
DFTB+
fit

−0.2

−0.1 0.0 0.1 0.2

11
3−Carb Conduction Gamma Coeff: 9.45131 effmass: 0.02516

0.02
Energy [eV]

Data
DFTB+
fit
0.01

0.00
−0.03 0.00 0.03 0.06
3−Carb Valence Gamma Coeff: −6.76836 effmass: −0.03513
0.000

−0.005
Energy [eV]

Data
−0.010 DFTB+
fit

−0.015

−0.020
−0.03 0.00 0.03 0.06

12
4−Carb Conduction K Coeff: 3.44301 effmass: 0.06907

0.0125

0.0100
Energy [eV]

0.0075 Data
DFTB+
fit
0.0050

0.0025

0.0000
−0.025 0.000 0.025 0.050
4−Carb Valence Gamma Coeff: −3.18548 effmass: −0.07465
0.000

−0.001
Energy [eV]

−0.002 Data
DFTB+
−0.003 fit

−0.004

−0.02 0.00 0.02 0.04

13
5−Carb Conduction Gamma Coeff: 2.78225 effmass: 0.08547
0.003

0.002
Energy [eV]

Data
DFTB+
fit
0.001

0.000
−0.02 −0.01 0.00 0.01 0.02 0.03
5−Carb Valence Gamma Coeff: −5.64825 effmass: −0.0421
0.000

−0.001
Energy [eV]

−0.002 Data
DFTB+
−0.003 fit

−0.004

−0.02 −0.01 0.00 0.01 0.02 0.03

14
6−Carb Conduction Gamma Coeff: 2.523 effmass: 0.09425

0.00125

0.00100
Energy [eV]

0.00075 Data
DFTB+
fit
0.00050

0.00025

0.00000
−0.02 −0.01 0.00 0.01 0.02
6−Carb Valence Gamma Coeff: −4.34342 effmass: −0.05475
0.000

−0.001
Energy [eV]

Data
DFTB+
fit
−0.002

−0.003
−0.02 −0.01 0.00 0.01 0.02

15
7−Carb Conduction Gamma Coeff: 1.36394 effmass: 0.17435

0.00075
Energy [eV]

Data
0.00050
DFTB+
fit
0.00025

0.00000

−0.01 0.00 0.01 0.02


7−Carb Valence Gamma Coeff: −5.40873 effmass: −0.04397

0.0000

−0.0005
Energy [eV]

Data
DFTB+
−0.0010
fit

−0.0015

−0.01 0.00 0.01 0.02

16
Energy [eV] 8−Carb Conduction Gamma Coeff: 0 effmass: Inf

Data
0 DFTB+
fit

−0.01 0.00 0.01


8−Carb Valence Gamma Coeff: −5.45092 effmass: −0.04363

0.00000

−0.00025
Energy [eV]

Data
−0.00050 DFTB+
fit

−0.00075

−0.00100
−0.01 0.00 0.01

17
9−Carb Conduction Gamma Coeff: 7.11448 effmass: 0.03342

0.00100

0.00075
Energy [eV]

Data
0.00050
DFTB+
fit
0.00025

0.00000

−0.010 −0.005 0.000 0.005 0.010 0.015


9−Carb Valence Gamma Coeff: −7.53332 effmass: −0.03157
0.00000

−0.00025
Energy [eV]

−0.00050 Data
DFTB+
−0.00075 fit

−0.00100

−0.00125
−0.010 −0.005 0.000 0.005 0.010 0.015

18
10−Carb Conduction Gamma Coeff: 8.62327 effmass: 0.02758

1e−03
Energy [eV]

Data
DFTB+
fit
5e−04

0e+00
−0.010 −0.005 0.000 0.005 0.010
10−Carb Valence Gamma Coeff: 0 effmass: Inf
Energy [eV]

Data
0 DFTB+
fit

−0.010 −0.005 0.000 0.005 0.010

19
0.0.4 Re-evaluating 3-carbophene, 4-carbophene, and 5-carbophene

The graphs above show that even for 3-carbophene and 4-carbophene there are problems with the
data we are fitting. The conduction band data for 3-carbophene shows that the two points closest
to the Gamma high symmetry kpoint also have energies of zero. The same is true for both the
valence and conduction bands of 4-carbophene. We thus optimized the band structure calculations
decreasing the number of kpoints between the high symmetry kpoints until neighboring points did
not have the same energy. In the case of 4-carbophene we also decreased the number of kpoints
used in the fitting procedure. We tried the same reduction of connecting kpoints with 5-carbophene
resulting in a possibly better fit for the valence band (hole effective mass) but without creating a
better fit of the conduction band data.
N3MGsize <- euclidean(M.3,G.3)/30
N3GKsize <- euclidean(K.3,G.3)/27

bandDF.KGK <- rbind(


graphene.bdplot("/Users/junky/carbopheneBG/LESS/n6ring_3/carbophene..3..band.txt", carbophene..3
) %>% mutate(kpoint = V1, Energy = value) %>% select(-c(V1, value)) %>% mutate(Calculation="BAND
mutate(eigenvec = as.integer(substring(variable, 2)) - 1)

compute.effective.mass(bandDF.KGK, 3, "V65", 31, "3-Carb Conduction", "Gamma", N3MGsize, N3GKsiz

3−Carb Conduction Gamma Coeff: 9.12852 effmass: 0.02605

0.04

0.03
Energy [eV]

Data
0.02 DFTB+
fit

0.01

0.00
−0.050 −0.025 0.000 0.025 0.050 0.075

20
compute.effective.mass(bandDF.KGK, 3, "V64", 31, "3-Carb Valence","Gamma", N3MGsize, N3MGsize)

3−Carb Valence Gamma Coeff: −8.409 effmass: −0.02828


0.00
Energy [eV]

−0.01
Data
DFTB+
fit

−0.02

−0.03 0.00 0.03


compute.effective.mass <- function(input.dataframe, nrings, vari, kp, nvstr, kpstring, ksize1, k

h <- 4.135667662*10^(-15) #Plank's constant in units of eV*s


pi <- 3.1415926535897932 #pi
emass <- 9.10938356*10^(-31) #mass of an electron in units of kg

#Energy of the local maximum for valence bands or local minimum for conduction bands
en <- filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoin

#Selection of the data around the maximum or minimum, and moving the minimum to be at origin.
test.data1 <- rbind(
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
mutate(kpoint = kpoint - kp) %>%
mutate(kpoint = kpoint*ksize1)

test.data2 <- rbind(


filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==

21
filter(input.dataframe, Calculation == "BAND", nRings == nrings, variable == vari, kpoint ==
) %>%
mutate(kpoint = kpoint - kp) %>%
mutate(kpoint = kpoint*ksize2)

test.data <- rbind(test.data1, test.data2) %>% mutate(Energy = Energy - en, Data = "DFTB+") %>

#Polynomial Fit of the data


fit <- lm(data=test.data, formula = Energy ~ poly(kpoint, 2, raw=TRUE) ) #Polynomial Fit
eq <- function(x) {fit$coefficients[3]*x*x + fit$coefficients[2]*x + fit$coefficients[1]} #Equat

fit.data <- test.data %>% mutate(Energy = eq(kpoint), Data = "fit") %>% select(Data, kpoint, Ene

combined.data <- rbind(test.data, fit.data) #combination of DFTB+ data and fit data

effmass <- 1 / (2*fit$coefficients[3]*(h/2/pi)^(-2))/emass # computing the effective mass


#effmass <- (h/(2*pi))^(2) / (2*fit$coefficients[3] *emass) # computing the effective mass

strng <- paste(nvstr,kpstring, " Coeff:", round(fit$coefficients[3], digits = 5), " effmass:",

#Defining the plot


eff.mass <-qplot(data=combined.data, x=kpoint ,y=Energy, color=Data,main = strng)+
theme_bw() +
xlab("") +
ylab("Energy [eV]") +
scale_y_continuous(expand = c(0, 0)) +
scale_color_manual(values = c("red", "blue")) +
theme(axis.text.y = element_text(size=14),
axis.text.x = element_text(size=12),
axis.title.x=element_text(size=18),
axis.title.y=element_text(size=18),
legend.title = element_text(size=16),
legend.text = element_text(size = 14))

return(eff.mass) #output of the function

N4MGsize <- euclidean(M.4,G.4)/15


N4GKsize <- euclidean(K.4,G.4)/15
N4KMsize <- euclidean(K.4,M.4)/20

bandDF.KGK <- rbind(

22
graphene.bdplot("/Users/junky/carbopheneBG/LESS/n6ring_4/carbophene..4..band.txt", carbophene..4
) %>% mutate(kpoint = V1, Energy = value) %>% select(-c(V1, value)) %>% mutate(Calculation="BAND
mutate(eigenvec = as.integer(substring(variable, 2)) - 1)

compute.effective.mass(bandDF.KGK , 4, "V104", 31, "4-Carb Conduction", "K", N4GKsize, N4KMsize)

4−Carb Conduction K Coeff: 3.9964 effmass: 0.0595


0.008

0.006
Energy [eV]

Data
0.004 DFTB+
fit

0.002

0.000
−0.025 0.000 0.025
compute.effective.mass(bandDF.KGK , 4, "V103", 16, "4-Carb Valence","Gamma", N4MGsize, N4GKsize)

23
4−Carb Valence Gamma Coeff: −3.10971 effmass: −0.07647
0.000

−0.001

−0.002
Energy [eV]

Data
−0.003 DFTB+
fit
−0.004

−0.005

−0.006
−0.02 0.00 0.02 0.04
N5MGsize <- euclidean(M.5,G.5)/15
N5GKsize <- euclidean(K.5,G.5)/15
N5KMsize <- euclidean(K.5,M.5)/20

bandDF.KGK <- rbind(


graphene.bdplot("/Users/junky/carbopheneBG/LESS/n6ring_5/carbophene..5..band.txt", carbophene..5
) %>% mutate(kpoint = V1, Energy = value) %>% select(-c(V1, value)) %>% mutate(Calculation="BAND
mutate(eigenvec = as.integer(substring(variable, 2)) - 1)

compute.effective.mass(bandDF.KGK , 5, "V104", 16, "5-Carb Conduction", "K", N5GKsize, N5KMsize)

24
5−Carb Conduction K Coeff: 2.65904 effmass: 0.08943

0.003
Energy [eV]

0.002
Data
DFTB+
fit

0.001

0.000
−0.02 0.00 0.02
compute.effective.mass(bandDF.KGK , 5, "V103", 16, "5-Carb Valence","Gamma", N5MGsize, N5GKsize)

5−Carb Valence Gamma Coeff: −8.03715 effmass: −0.02959


0.000

−0.002
Energy [eV]

Data
−0.004 DFTB+
fit

−0.006

−0.008
−0.02 −0.01 0.00 0.01 0.02 0.03
## R version 3.4.3 (2017-11-30)

25
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS 10.14.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] bindrcpp_0.2.2 pracma_2.2.5 Rpdb_2.3
## [4] rgl_0.99.16 cowplot_0.9.3 xtable_1.8-3
## [7] knitr_1.20 latex2exp_0.4.0 captioner_2.2.3
## [10] gridExtra_2.3 viridis_0.5.1 viridisLite_0.3.0
## [13] reshape2_1.4.3 data.table_1.11.4 dplyr_0.7.6
## [16] ggplot2_3.0.0
##
## loaded via a namespace (and not attached):
## [1] tidyselect_0.2.4 purrr_0.2.5
## [3] colorspace_1.3-2 miniUI_0.1.1.1
## [5] htmltools_0.3.6 yaml_2.2.0
## [7] rlang_0.2.2 manipulateWidget_0.10.0
## [9] pillar_1.3.0 later_0.7.4
## [11] glue_1.3.0 withr_2.1.2
## [13] bindr_0.1.1 plyr_1.8.4
## [15] stringr_1.3.1 munsell_0.5.0
## [17] gtable_0.2.0 htmlwidgets_1.2
## [19] evaluate_0.11 labeling_0.3
## [21] httpuv_1.4.5 crosstalk_1.0.0
## [23] Rcpp_0.12.18 scales_1.0.0
## [25] backports_1.1.2 promises_1.0.1
## [27] webshot_0.5.1 jsonlite_1.5
## [29] mime_0.5 digest_0.6.17
## [31] stringi_1.2.4 shiny_1.1.0
## [33] grid_3.4.3 rprojroot_1.3-2
## [35] tools_3.4.3 magrittr_1.5
## [37] lazyeval_0.2.1 tibble_1.4.2
## [39] crayon_1.3.4 pkgconfig_2.0.2
## [41] assertthat_0.2.0 rmarkdown_1.10
## [43] R6_2.2.2 compiler_3.4.3

26
Bibliography

Reich, Stephanie, Christian Thomsen, and Janina Maultzsch. 2008. Carbon Nanotubes: Basic Concepts
and Physical Properties. John Wiley & Sons.

27

You might also like