library(tidyverse)
library(data.table)
funcDFT_buildtemp <- function(DFTinput_dir = "cd ~/PARADIM/HandsOn1",
DFTinputfn = "silicon-3.in",
DFTinputprefix = "silicon",
DFTinputecutwfc = "5",
DFTinputkp = "4 4 4 1 1 1"){
paste0("",DFTinput_dir,"
cat << EOF > ",DFTinputfn,"
&control
calculation = \"scf\",
prefix = \"",DFTinputprefix,"\",
pseudo_dir = \"./\",
outdir = \"./\"
/
&system
ibrav = 2,
celldm(1) = 10.28,
nat = 2,
ntyp = 1,
ecutwfc = ",DFTinputecutwfc,",
/
&electrons
/
ATOMIC_SPECIES
Si 28.086 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS automatic
",DFTinputkp,"
EOF
")
}
## function for building DFT input files in system
funcDFT_buildinput <- function(DFTfilename, DFTlooprange){
## variables
# DFTlooprange - loop terms appended to file names
# DFTfilename - file name
## format cp command string
paste0("cd qe
cat > ", DFTfilename,".tcsh << EOF
foreach ALAT (", DFTlooprange,")
cp ", DFTfilename,"_TEMP.in ", DFTfilename,"_\\${ALAT}.in
end
EOF
tcsh ", DFTfilename,".tcsh ") -> StringToTerminal
## send cp command to system
StringToTerminal %>%
cat() %>%
system()
}
## function for executing DFT in system
funcDFT_exec <- function(DFTfilename, DFTlooprange){
## variables
# DFTlooprange - loop terms appended to file names
# DFTfilename - file name
## format DFT command string
paste0(
"cd qe
cat > ", DFTfilename,".tcsh << EOF
foreach ALAT (", DFTlooprange,")
pw.x < ", DFTfilename,"_\\${ALAT}.in > ", DFTfilename,"_\\${ALAT}.out
end
EOF
tcsh ", DFTfilename,".tcsh") -> StringToTerminal
## send DFT command to system
StringToTerminal %>%
cat() %>%
system()
}
## function for parsing and displaying DFT output
funcDFT_plotout <- function(DFTfilename, DFTlooprange){
## variables
# DFTlooprange - loop terms appended to file names
# DFTfilename - file name
## format grep command string (DFT energy/ies)
paste0(
"cd qe
cat > ", DFTfilename,".tcsh << EOF
foreach ALAT (", DFTlooprange,")
grep \"!\" ", DFTfilename,"_\\${ALAT}.in
end
EOF
tcsh ", DFTfilename,".tcsh") -> StringToTerminal
## send grep command to system
StringToTerminal %>%
cat() %>%
system(intern = TRUE) -> DFTloopoutput
## extract numerical values from DFTloopoutput
DFTloopoutput_values <- parse_number(DFTloopoutput)
##create data table, inputs vs outputs
DFTresultstable <- data.table(DFTlooprange,
DFTloopoutput_values)
## max/min extrapolated from smooth
DFTresultsplot_data <- qplot(x = DFTlooprange,
y = DFTloopoutput_values,
data = DFTresultstable,
geom = c("smooth")) %>% layer_data()
# get y@x=MAX
DFTresultsplot_xmaxy <- DFTresultsplot_data[which.max(DFTresultsplot_data$x),]$y
## plot
DFTresultsplot <- qplot(x = DFTlooprange,
y = DFTloopoutput_values,
data = DFTresultstable,
geom = c("point", "smooth"))
+ geom_text(label = DFTresultsplot_xmaxy)
## display output
return(DFTresultsplot)
}
## install quantum espresso
#
#
## create paradim directory
system("mkdir ~/PARADIM/HandsOn1")
## download pseudopotential for Si to folder
system("
cd ~/PARADIM/HandsOn1
wget https://www.quantum-espresso.org/upf_files/Si.pz-vbc.UPF
")
HandsOn1_Out1
[1] ""
[2] " Program PWSCF v.6.7MaX starts on 25Jul2021 at 7: 7:26 "
[3] ""
[4] " This program is part of the open-source Quantum ESPRESSO suite"
[5] " for quantum simulation of materials; please cite"
[6] " \"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);"
[7] " \"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);"
[8] " URL http://www.quantum-espresso.org\", "
[9] " in publications or presentations arising from this work. More details at"
[10] " http://www.quantum-espresso.org/quote"
[11] ""
[12] " Parallel version (MPI), running on 1 processors"
[13] ""
[14] " MPI processes distributed on 1 nodes"
[15] " Waiting for input..."
[16] " Reading input from standard input"
[17] ""
[18] " Current dimensions of program PWSCF are:"
[19] " Max number of different atomic species (ntypx) = 10"
[20] " Max number of k-points (npk) = 40000"
[21] " Max angular momentum in pseudopotentials (lmaxx) = 3"
[22] ""
[23] " Subspace diagonalization in iterative solution of the eigenvalue problem:"
[24] " a serial algorithm will be used"
[25] ""
[26] ""
[27] " G-vector sticks info"
[28] " --------------------"
[29] " sticks: dense smooth PW G-vecs: dense smooth PW"
[30] " Sum 253 253 85 2741 2741 537"
[31] ""
[32] ""
[33] ""
[34] " bravais-lattice index = 2"
[35] " lattice parameter (alat) = 10.2800 a.u."
[36] " unit-cell volume = 271.5935 (a.u.)^3"
[37] " number of atoms/cell = 2"
[38] " number of atomic types = 1"
[39] " number of electrons = 8.00"
[40] " number of Kohn-Sham states= 4"
[41] " kinetic-energy cutoff = 18.0000 Ry"
[42] " charge density cutoff = 72.0000 Ry"
[43] " scf convergence threshold = 1.0E-06"
[44] " mixing beta = 0.7000"
[45] " number of iterations used = 8 plain mixing"
[46] " Exchange-correlation= SLA PZ NOGX NOGC"
[47] " ( 1 1 0 0 0 0 0)"
[48] ""
[49] " celldm(1)= 10.280000 celldm(2)= 0.000000 celldm(3)= 0.000000"
[50] " celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000"
[51] ""
[52] " crystal axes: (cart. coord. in units of alat)"
[53] " a(1) = ( -0.500000 0.000000 0.500000 ) "
[54] " a(2) = ( 0.000000 0.500000 0.500000 ) "
[55] " a(3) = ( -0.500000 0.500000 0.000000 ) "
[56] ""
[57] " reciprocal axes: (cart. coord. in units 2 pi/alat)"
[58] " b(1) = ( -1.000000 -1.000000 1.000000 ) "
[59] " b(2) = ( 1.000000 1.000000 1.000000 ) "
[60] " b(3) = ( -1.000000 1.000000 -1.000000 ) "
[61] ""
[62] ""
[63] " PseudoPot. # 1 for Si read from file:"
[64] " ./Si.pz-vbc.UPF"
[65] " MD5 check sum: 9f25e6ff280f3123e9b3a84715b2e9c9"
[66] " Pseudo is Norm-conserving, Zval = 4.0"
[67] " Generated by new atomic code, or converted to UPF format"
[68] " Using radial grid of 431 points, 2 beta functions with: "
[69] " l(1) = 0"
[70] " l(2) = 1"
[71] ""
[72] " atomic species valence mass pseudopotential"
[73] " Si 4.00 28.08600 Si( 1.00)"
[74] ""
[75] " 48 Sym. Ops., with inversion, found (24 have fractional translation)"
[76] ""
[77] ""
[78] ""
[79] " Cartesian axes"
[80] ""
[81] " site n. atom positions (alat units)"
[82] " 1 Si tau( 1) = ( 0.0000000 0.0000000 0.0000000 )"
[83] " 2 Si tau( 2) = ( 0.2500000 0.2500000 0.2500000 )"
[84] ""
[85] " number of k points= 10"
[86] " cart. coord. in units 2pi/alat"
[87] " k( 1) = ( -0.1250000 0.1250000 0.1250000), wk = 0.0625000"
[88] " k( 2) = ( -0.3750000 0.3750000 -0.1250000), wk = 0.1875000"
[89] " k( 3) = ( 0.3750000 -0.3750000 0.6250000), wk = 0.1875000"
[90] " k( 4) = ( 0.1250000 -0.1250000 0.3750000), wk = 0.1875000"
[91] " k( 5) = ( -0.1250000 0.6250000 0.1250000), wk = 0.1875000"
[92] " k( 6) = ( 0.6250000 -0.1250000 0.8750000), wk = 0.3750000"
[93] " k( 7) = ( 0.3750000 0.1250000 0.6250000), wk = 0.3750000"
[94] " k( 8) = ( -0.1250000 -0.8750000 0.1250000), wk = 0.1875000"
[95] " k( 9) = ( -0.3750000 0.3750000 0.3750000), wk = 0.0625000"
[96] " k( 10) = ( 0.3750000 -0.3750000 1.1250000), wk = 0.1875000"
[97] ""
[98] " Dense grid: 2741 G-vectors FFT dimensions: ( 20, 20, 20)"
[99] ""
[100] " Estimated max dynamical RAM per process > 2.11 MB"
[101] ""
[102] " Initial potential from superposition of free atoms"
[103] ""
[104] " starting charge 7.99901, renormalised to 8.00000"
[105] " Starting wfcs are 8 randomized atomic wfcs"
[106] ""
[107] " total cpu time spent up to now is 0.1 secs"
[108] ""
[109] " Self-consistent Calculation"
[110] ""
[111] " iteration # 1 ecut= 18.00 Ry beta= 0.70"
[112] " Davidson diagonalization with overlap"
[113] " ethr = 1.00E-02, avg # of iterations = 2.0"
[114] ""
[115] " Threshold (ethr) on eigenvalues was too large:"
[116] " Diagonalizing with lowered threshold"
[117] ""
[118] " Davidson diagonalization with overlap"
[119] " ethr = 6.64E-04, avg # of iterations = 1.0"
[120] ""
[121] " total cpu time spent up to now is 0.1 secs"
[122] ""
[123] " total energy = -15.84091085 Ry"
[124] " estimated scf accuracy < 0.05833236 Ry"
[125] ""
[126] " iteration # 2 ecut= 18.00 Ry beta= 0.70"
[127] " Davidson diagonalization with overlap"
[128] " ethr = 7.29E-04, avg # of iterations = 1.0"
[129] ""
[130] " total cpu time spent up to now is 0.1 secs"
[131] ""
[132] " total energy = -15.84376410 Ry"
[133] " estimated scf accuracy < 0.00219210 Ry"
[134] ""
[135] " iteration # 3 ecut= 18.00 Ry beta= 0.70"
[136] " Davidson diagonalization with overlap"
[137] " ethr = 2.74E-05, avg # of iterations = 2.5"
[138] ""
[139] " total cpu time spent up to now is 0.1 secs"
[140] ""
[141] " total energy = -15.84419420 Ry"
[142] " estimated scf accuracy < 0.00006955 Ry"
[143] ""
[144] " iteration # 4 ecut= 18.00 Ry beta= 0.70"
[145] " Davidson diagonalization with overlap"
[146] " ethr = 8.69E-07, avg # of iterations = 2.7"
[147] ""
[148] " total cpu time spent up to now is 0.2 secs"
[149] ""
[150] " total energy = -15.84421565 Ry"
[151] " estimated scf accuracy < 0.00000242 Ry"
[152] ""
[153] " iteration # 5 ecut= 18.00 Ry beta= 0.70"
[154] " Davidson diagonalization with overlap"
[155] " ethr = 3.03E-08, avg # of iterations = 4.1"
[156] ""
[157] " total cpu time spent up to now is 0.2 secs"
[158] ""
[159] " End of self-consistent calculation"
[160] ""
[161] " k =-0.1250 0.1250 0.1250 ( 335 PWs) bands (ev):"
[162] ""
[163] " -5.6893 4.4122 5.7211 5.7211"
[164] ""
[165] " k =-0.3750 0.3750-0.1250 ( 348 PWs) bands (ev):"
[166] ""
[167] " -4.6475 1.3946 3.6928 5.2321"
[168] ""
[169] " k = 0.3750-0.3750 0.6250 ( 354 PWs) bands (ev):"
[170] ""
[171] " -3.4768 -0.7303 3.7240 4.4440"
[172] ""
[173] " k = 0.1250-0.1250 0.3750 ( 344 PWs) bands (ev):"
[174] ""
[175] " -5.1549 2.7930 4.6893 4.7632"
[176] ""
[177] " k =-0.1250 0.6250 0.1250 ( 345 PWs) bands (ev):"
[178] ""
[179] " -4.1075 1.0935 3.3319 3.7972"
[180] ""
[181] " k = 0.6250-0.1250 0.8750 ( 356 PWs) bands (ev):"
[182] ""
[183] " -2.4328 -0.8871 1.9330 3.0394"
[184] ""
[185] " k = 0.3750 0.1250 0.6250 ( 350 PWs) bands (ev):"
[186] ""
[187] " -3.6810 0.1896 2.6803 4.0746"
[188] ""
[189] " k =-0.1250-0.8750 0.1250 ( 352 PWs) bands (ev):"
[190] ""
[191] " -2.6126 -0.7823 2.5617 3.3212"
[192] ""
[193] " k =-0.3750 0.3750 0.3750 ( 353 PWs) bands (ev):"
[194] ""
[195] " -4.2049 0.0704 4.9192 4.9192"
[196] ""
[197] " k = 0.3750-0.3750 1.1250 ( 358 PWs) bands (ev):"
[198] ""
[199] " -2.9754 -0.6089 2.0042 4.1195"
[200] ""
[201] " highest occupied level (ev): 5.7211"
[202] ""
[203] "! total energy = -15.84421704 Ry"
[204] " estimated scf accuracy < 0.00000012 Ry"
[205] ""
[206] " The total energy is the sum of the following terms:"
[207] " one-electron contribution = 4.61759400 Ry"
[208] " hartree contribution = 1.09594965 Ry"
[209] " xc contribution = -4.78951767 Ry"
[210] " ewald contribution = -16.76824302 Ry"
[211] ""
[212] " convergence has been achieved in 5 iterations"
[213] ""
[214] " Writing output data file ./silicon.save/"
[215] ""
[216] " init_run : 0.03s CPU 0.05s WALL ( 1 calls)"
[217] " electrons : 0.11s CPU 0.12s WALL ( 1 calls)"
[218] ""
[219] " Called by init_run:"
[220] " wfcinit : 0.01s CPU 0.03s WALL ( 1 calls)"
[221] " potinit : 0.00s CPU 0.00s WALL ( 1 calls)"
[222] " hinit0 : 0.01s CPU 0.01s WALL ( 1 calls)"
[223] ""
[224] " Called by electrons:"
[225] " c_bands : 0.10s CPU 0.10s WALL ( 6 calls)"
[226] " sum_band : 0.01s CPU 0.01s WALL ( 6 calls)"
[227] " v_of_rho : 0.00s CPU 0.00s WALL ( 6 calls)"
[228] " mix_rho : 0.00s CPU 0.00s WALL ( 6 calls)"
[229] ""
[230] " Called by c_bands:"
[231] " init_us_2 : 0.01s CPU 0.01s WALL ( 130 calls)"
[232] " cegterg : 0.09s CPU 0.09s WALL ( 60 calls)"
[233] ""
[234] " Called by *egterg:"
[235] " cdiaghg : 0.01s CPU 0.02s WALL ( 183 calls)"
[236] " h_psi : 0.07s CPU 0.07s WALL ( 203 calls)"
[237] " g_psi : 0.00s CPU 0.00s WALL ( 133 calls)"
[238] ""
[239] " Called by h_psi:"
[240] " h_psi:calbec : 0.00s CPU 0.00s WALL ( 203 calls)"
[241] " vloc_psi : 0.06s CPU 0.06s WALL ( 203 calls)"
[242] " add_vuspsi : 0.01s CPU 0.01s WALL ( 203 calls)"
[243] ""
[244] " General routines"
[245] " calbec : 0.00s CPU 0.00s WALL ( 203 calls)"
[246] " fft : 0.00s CPU 0.00s WALL ( 18 calls)"
[247] " ffts : 0.00s CPU 0.00s WALL ( 6 calls)"
[248] " fftw : 0.05s CPU 0.05s WALL ( 1738 calls)"
[249] ""
[250] " Parallel routines"
[251] ""
[252] " PWSCF : 0.16s CPU 0.19s WALL"
[253] ""
[254] ""
[255] " This run was terminated on: 7: 7:27 25Jul2021 "
[256] ""
[257] "=------------------------------------------------------------------------------="
[258] " JOB DONE."
[259] "=------------------------------------------------------------------------------="
## define input dir
input_dir <- "cd ~/PARADIM/HandsOn1"
## create 2 from 1
paste0("
", input_dir, "
cat << EOF > silicon-2.in
&control
calculation = \"scf\",
prefix = \"silicon\",
pseudo_dir = \"./\",
outdir = \"./\"
/
&system
ibrav = 2,
celldm(1) = 10.28,
nat = 2,
ntyp = 1,
ecutwfc = 25.0,
/
&electrons
/
ATOMIC_SPECIES
Si 28.086 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS automatic
8 8 8 1 1 1
EOF
") %>% system()
## run pw _2
system("
cd ~/PARADIM/HandsOn1
pw.x < silicon-2.in > silicon-2.out
")
Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG
## check output
# get and store
system("
cd ~/PARADIM/HandsOn1
more silicon-2.out
", intern = T) -> HandsOn1_Out2
# check
HandsOn1_Out2
[1] ""
[2] " Program PWSCF v.6.7MaX starts on 25Jul2021 at 7:23:58 "
[3] ""
[4] " This program is part of the open-source Quantum ESPRESSO suite"
[5] " for quantum simulation of materials; please cite"
[6] " \"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);"
[7] " \"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);"
[8] " URL http://www.quantum-espresso.org\", "
[9] " in publications or presentations arising from this work. More details at"
[10] " http://www.quantum-espresso.org/quote"
[11] ""
[12] " Parallel version (MPI), running on 1 processors"
[13] ""
[14] " MPI processes distributed on 1 nodes"
[15] " Waiting for input..."
[16] " Reading input from standard input"
[17] ""
[18] " Current dimensions of program PWSCF are:"
[19] " Max number of different atomic species (ntypx) = 10"
[20] " Max number of k-points (npk) = 40000"
[21] " Max angular momentum in pseudopotentials (lmaxx) = 3"
[22] ""
[23] " Subspace diagonalization in iterative solution of the eigenvalue problem:"
[24] " a serial algorithm will be used"
[25] ""
[26] ""
[27] " G-vector sticks info"
[28] " --------------------"
[29] " sticks: dense smooth PW G-vecs: dense smooth PW"
[30] " Sum 367 367 121 4621 4621 941"
[31] ""
[32] ""
[33] ""
[34] " bravais-lattice index = 2"
[35] " lattice parameter (alat) = 10.2800 a.u."
[36] " unit-cell volume = 271.5935 (a.u.)^3"
[37] " number of atoms/cell = 2"
[38] " number of atomic types = 1"
[39] " number of electrons = 8.00"
[40] " number of Kohn-Sham states= 4"
[41] " kinetic-energy cutoff = 25.0000 Ry"
[42] " charge density cutoff = 100.0000 Ry"
[43] " scf convergence threshold = 1.0E-06"
[44] " mixing beta = 0.7000"
[45] " number of iterations used = 8 plain mixing"
[46] " Exchange-correlation= SLA PZ NOGX NOGC"
[47] " ( 1 1 0 0 0 0 0)"
[48] ""
[49] " celldm(1)= 10.280000 celldm(2)= 0.000000 celldm(3)= 0.000000"
[50] " celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000"
[51] ""
[52] " crystal axes: (cart. coord. in units of alat)"
[53] " a(1) = ( -0.500000 0.000000 0.500000 ) "
[54] " a(2) = ( 0.000000 0.500000 0.500000 ) "
[55] " a(3) = ( -0.500000 0.500000 0.000000 ) "
[56] ""
[57] " reciprocal axes: (cart. coord. in units 2 pi/alat)"
[58] " b(1) = ( -1.000000 -1.000000 1.000000 ) "
[59] " b(2) = ( 1.000000 1.000000 1.000000 ) "
[60] " b(3) = ( -1.000000 1.000000 -1.000000 ) "
[61] ""
[62] ""
[63] " PseudoPot. # 1 for Si read from file:"
[64] " ./Si.pz-vbc.UPF"
[65] " MD5 check sum: 9f25e6ff280f3123e9b3a84715b2e9c9"
[66] " Pseudo is Norm-conserving, Zval = 4.0"
[67] " Generated by new atomic code, or converted to UPF format"
[68] " Using radial grid of 431 points, 2 beta functions with: "
[69] " l(1) = 0"
[70] " l(2) = 1"
[71] ""
[72] " atomic species valence mass pseudopotential"
[73] " Si 4.00 28.08600 Si( 1.00)"
[74] ""
[75] " 48 Sym. Ops., with inversion, found (24 have fractional translation)"
[76] ""
[77] ""
[78] ""
[79] " Cartesian axes"
[80] ""
[81] " site n. atom positions (alat units)"
[82] " 1 Si tau( 1) = ( 0.0000000 0.0000000 0.0000000 )"
[83] " 2 Si tau( 2) = ( 0.2500000 0.2500000 0.2500000 )"
[84] ""
[85] " number of k points= 60"
[86] " cart. coord. in units 2pi/alat"
[87] " k( 1) = ( -0.0625000 0.0625000 0.0625000), wk = 0.0078125"
[88] " k( 2) = ( -0.1875000 0.1875000 -0.0625000), wk = 0.0234375"
[89] " k( 3) = ( -0.3125000 0.3125000 -0.1875000), wk = 0.0234375"
[90] " k( 4) = ( -0.4375000 0.4375000 -0.3125000), wk = 0.0234375"
[91] " k( 5) = ( 0.4375000 -0.4375000 0.5625000), wk = 0.0234375"
[92] " k( 6) = ( 0.3125000 -0.3125000 0.4375000), wk = 0.0234375"
[93] " k( 7) = ( 0.1875000 -0.1875000 0.3125000), wk = 0.0234375"
[94] " k( 8) = ( 0.0625000 -0.0625000 0.1875000), wk = 0.0234375"
[95] " k( 9) = ( -0.0625000 0.3125000 0.0625000), wk = 0.0234375"
[96] " k( 10) = ( -0.1875000 0.4375000 -0.0625000), wk = 0.0468750"
[97] " k( 11) = ( -0.3125000 0.5625000 -0.1875000), wk = 0.0468750"
[98] " k( 12) = ( 0.5625000 -0.3125000 0.6875000), wk = 0.0468750"
[99] " k( 13) = ( 0.4375000 -0.1875000 0.5625000), wk = 0.0468750"
[100] " k( 14) = ( 0.3125000 -0.0625000 0.4375000), wk = 0.0468750"
[101] " k( 15) = ( 0.1875000 0.0625000 0.3125000), wk = 0.0468750"
[102] " k( 16) = ( -0.0625000 0.5625000 0.0625000), wk = 0.0234375"
[103] " k( 17) = ( -0.1875000 0.6875000 -0.0625000), wk = 0.0468750"
[104] " k( 18) = ( 0.6875000 -0.1875000 0.8125000), wk = 0.0468750"
[105] " k( 19) = ( 0.5625000 -0.0625000 0.6875000), wk = 0.0468750"
[106] " k( 20) = ( 0.4375000 0.0625000 0.5625000), wk = 0.0468750"
[107] " k( 21) = ( 0.3125000 0.1875000 0.4375000), wk = 0.0468750"
[108] " k( 22) = ( -0.0625000 0.8125000 0.0625000), wk = 0.0234375"
[109] " k( 23) = ( 0.8125000 -0.0625000 0.9375000), wk = 0.0468750"
[110] " k( 24) = ( 0.6875000 0.0625000 0.8125000), wk = 0.0468750"
[111] " k( 25) = ( 0.5625000 0.1875000 0.6875000), wk = 0.0468750"
[112] " k( 26) = ( 0.4375000 0.3125000 0.5625000), wk = 0.0468750"
[113] " k( 27) = ( -0.0625000 -0.9375000 0.0625000), wk = 0.0234375"
[114] " k( 28) = ( -0.1875000 -0.8125000 -0.0625000), wk = 0.0468750"
[115] " k( 29) = ( -0.3125000 -0.6875000 -0.1875000), wk = 0.0468750"
[116] " k( 30) = ( -0.0625000 -0.6875000 0.0625000), wk = 0.0234375"
[117] " k( 31) = ( -0.1875000 -0.5625000 -0.0625000), wk = 0.0468750"
[118] " k( 32) = ( -0.0625000 -0.4375000 0.0625000), wk = 0.0234375"
[119] " k( 33) = ( -0.1875000 0.1875000 0.1875000), wk = 0.0078125"
[120] " k( 34) = ( -0.3125000 0.3125000 0.0625000), wk = 0.0234375"
[121] " k( 35) = ( -0.4375000 0.4375000 -0.0625000), wk = 0.0234375"
[122] " k( 36) = ( 0.4375000 -0.4375000 0.8125000), wk = 0.0234375"
[123] " k( 37) = ( 0.3125000 -0.3125000 0.6875000), wk = 0.0234375"
[124] " k( 38) = ( 0.1875000 -0.1875000 0.5625000), wk = 0.0234375"
[125] " k( 39) = ( -0.1875000 0.4375000 0.1875000), wk = 0.0234375"
[126] " k( 40) = ( -0.3125000 0.5625000 0.0625000), wk = 0.0468750"
[127] " k( 41) = ( 0.5625000 -0.3125000 0.9375000), wk = 0.0468750"
[128] " k( 42) = ( 0.4375000 -0.1875000 0.8125000), wk = 0.0468750"
[129] " k( 43) = ( 0.3125000 -0.0625000 0.6875000), wk = 0.0468750"
[130] " k( 44) = ( -0.1875000 0.6875000 0.1875000), wk = 0.0234375"
[131] " k( 45) = ( 0.6875000 -0.1875000 1.0625000), wk = 0.0468750"
[132] " k( 46) = ( 0.5625000 -0.0625000 0.9375000), wk = 0.0468750"
[133] " k( 47) = ( 0.4375000 0.0625000 0.8125000), wk = 0.0468750"
[134] " k( 48) = ( -0.1875000 -1.0625000 0.1875000), wk = 0.0234375"
[135] " k( 49) = ( -0.3125000 -0.9375000 0.0625000), wk = 0.0468750"
[136] " k( 50) = ( -0.1875000 -0.8125000 0.1875000), wk = 0.0234375"
[137] " k( 51) = ( -0.3125000 0.3125000 0.3125000), wk = 0.0078125"
[138] " k( 52) = ( -0.4375000 0.4375000 0.1875000), wk = 0.0234375"
[139] " k( 53) = ( 0.4375000 -0.4375000 1.0625000), wk = 0.0234375"
[140] " k( 54) = ( 0.3125000 -0.3125000 0.9375000), wk = 0.0234375"
[141] " k( 55) = ( -0.3125000 0.5625000 0.3125000), wk = 0.0234375"
[142] " k( 56) = ( 0.5625000 -0.3125000 1.1875000), wk = 0.0468750"
[143] " k( 57) = ( 0.4375000 -0.1875000 1.0625000), wk = 0.0468750"
[144] " k( 58) = ( -0.3125000 -1.1875000 0.3125000), wk = 0.0234375"
[145] " k( 59) = ( -0.4375000 0.4375000 0.4375000), wk = 0.0078125"
[146] " k( 60) = ( 0.4375000 -0.4375000 1.3125000), wk = 0.0234375"
[147] ""
[148] " Dense grid: 4621 G-vectors FFT dimensions: ( 24, 24, 24)"
[149] ""
[150] " Estimated max dynamical RAM per process > 5.29 MB"
[151] ""
[152] " Initial potential from superposition of free atoms"
[153] ""
[154] " starting charge 7.99901, renormalised to 8.00000"
[155] " Starting wfcs are 8 randomized atomic wfcs"
[156] ""
[157] " total cpu time spent up to now is 0.2 secs"
[158] ""
[159] " Self-consistent Calculation"
[160] ""
[161] " iteration # 1 ecut= 25.00 Ry beta= 0.70"
[162] " Davidson diagonalization with overlap"
[163] " ethr = 1.00E-02, avg # of iterations = 2.0"
[164] ""
[165] " Threshold (ethr) on eigenvalues was too large:"
[166] " Diagonalizing with lowered threshold"
[167] ""
[168] " Davidson diagonalization with overlap"
[169] " ethr = 6.63E-04, avg # of iterations = 1.0"
[170] ""
[171] " total cpu time spent up to now is 0.6 secs"
[172] ""
[173] " total energy = -15.84766498 Ry"
[174] " estimated scf accuracy < 0.05857063 Ry"
[175] ""
[176] " iteration # 2 ecut= 25.00 Ry beta= 0.70"
[177] " Davidson diagonalization with overlap"
[178] " ethr = 7.32E-04, avg # of iterations = 1.0"
[179] ""
[180] " total cpu time spent up to now is 0.8 secs"
[181] ""
[182] " total energy = -15.85060646 Ry"
[183] " estimated scf accuracy < 0.00220460 Ry"
[184] ""
[185] " iteration # 3 ecut= 25.00 Ry beta= 0.70"
[186] " Davidson diagonalization with overlap"
[187] " ethr = 2.76E-05, avg # of iterations = 2.4"
[188] ""
[189] " total cpu time spent up to now is 1.0 secs"
[190] ""
[191] " total energy = -15.85105172 Ry"
[192] " estimated scf accuracy < 0.00006894 Ry"
[193] ""
[194] " iteration # 4 ecut= 25.00 Ry beta= 0.70"
[195] " Davidson diagonalization with overlap"
[196] " ethr = 8.62E-07, avg # of iterations = 3.4"
[197] ""
[198] " total cpu time spent up to now is 1.3 secs"
[199] ""
[200] " total energy = -15.85108167 Ry"
[201] " estimated scf accuracy < 0.00000137 Ry"
[202] ""
[203] " iteration # 5 ecut= 25.00 Ry beta= 0.70"
[204] " Davidson diagonalization with overlap"
[205] " ethr = 1.72E-08, avg # of iterations = 4.2"
[206] ""
[207] " total cpu time spent up to now is 1.6 secs"
[208] ""
[209] " End of self-consistent calculation"
[210] ""
[211] " k =-0.0625 0.0625 0.0625 ( 558 PWs) bands (ev):"
[212] ""
[213] " -5.8538 5.4604 5.9064 5.9064"
[214] ""
[215] " k =-0.1875 0.1875-0.0625 ( 565 PWs) bands (ev):"
[216] ""
[217] " -5.5836 3.9577 5.0886 5.7892"
[218] ""
[219] " k =-0.3125 0.3125-0.1875 ( 576 PWs) bands (ev):"
[220] ""
[221] " -4.9304 1.7189 4.5990 5.3234"
[222] ""
[223] " k =-0.4375 0.4375-0.3125 ( 579 PWs) bands (ev):"
[224] ""
[225] " -4.0139 -0.1872 4.3834 4.9131"
[226] ""
[227] " k = 0.4375-0.4375 0.5625 ( 574 PWs) bands (ev):"
[228] ""
[229] " -3.5526 -0.9018 4.4356 4.6918"
[230] ""
[231] " k = 0.3125-0.3125 0.4375 ( 579 PWs) bands (ev):"
[232] ""
[233] " -4.3289 0.3783 4.7110 4.7252"
[234] ""
[235] " k = 0.1875-0.1875 0.3125 ( 572 PWs) bands (ev):"
[236] ""
[237] " -5.1868 2.4538 4.9880 5.1930"
[238] ""
[239] " k = 0.0625-0.0625 0.1875 ( 566 PWs) bands (ev):"
[240] ""
[241] " -5.7180 4.7134 5.4739 5.6392"
[242] ""
[243] " k =-0.0625 0.3125 0.0625 ( 569 PWs) bands (ev):"
[244] ""
[245] " -5.4478 3.8282 4.9097 4.9998"
[246] ""
[247] " k =-0.1875 0.4375-0.0625 ( 572 PWs) bands (ev):"
[248] ""
[249] " -4.9187 2.3252 3.9259 4.7381"
[250] ""
[251] " k =-0.3125 0.5625-0.1875 ( 578 PWs) bands (ev):"
[252] ""
[253] " -4.0631 0.4459 3.4337 4.3195"
[254] ""
[255] " k = 0.5625-0.3125 0.6875 ( 573 PWs) bands (ev):"
[256] ""
[257] " -3.2831 -0.7863 3.1444 4.2242"
[258] ""
[259] " k = 0.4375-0.1875 0.5625 ( 575 PWs) bands (ev):"
[260] ""
[261] " -3.7534 -0.0815 3.0657 4.5142"
[262] ""
[263] " k = 0.3125-0.0625 0.4375 ( 574 PWs) bands (ev):"
[264] ""
[265] " -4.6678 1.6694 3.3607 5.0299"
[266] ""
[267] " k = 0.1875 0.0625 0.3125 ( 568 PWs) bands (ev):"
[268] ""
[269] " -5.3161 3.1443 4.5038 5.4083"
[270] ""
[271] " k =-0.0625 0.5625 0.0625 ( 570 PWs) bands (ev):"
[272] ""
[273] " -4.5153 1.8385 3.7843 3.9093"
[274] ""
[275] " k =-0.1875 0.6875-0.0625 ( 579 PWs) bands (ev):"
[276] ""
[277] " -3.7560 0.5979 2.9814 3.5550"
[278] ""
[279] " k = 0.6875-0.1875 0.8125 ( 572 PWs) bands (ev):"
[280] ""
[281] " -2.8424 -0.6159 2.1261 3.5233"
[282] ""
[283] " k = 0.5625-0.0625 0.6875 ( 574 PWs) bands (ev):"
[284] ""
[285] " -2.9121 -0.5225 1.7630 3.8735"
[286] ""
[287] " k = 0.4375 0.0625 0.5625 ( 571 PWs) bands (ev):"
[288] ""
[289] " -3.8226 0.4282 2.3829 4.4686"
[290] ""
[291] " k = 0.3125 0.1875 0.4375 ( 575 PWs) bands (ev):"
[292] ""
[293] " -4.5525 1.0454 4.0508 4.9301"
[294] ""
[295] " k =-0.0625 0.8125 0.0625 ( 577 PWs) bands (ev):"
[296] ""
[297] " -3.0981 -0.2659 3.0849 3.3100"
[298] ""
[299] " k = 0.8125-0.0625 0.9375 ( 578 PWs) bands (ev):"
[300] ""
[301] " -2.1778 -1.2602 2.5107 3.0583"
[302] ""
[303] " k = 0.6875 0.0625 0.8125 ( 574 PWs) bands (ev):"
[304] ""
[305] " -2.2654 -1.0997 1.7611 3.3781"
[306] ""
[307] " k = 0.5625 0.1875 0.6875 ( 570 PWs) bands (ev):"
[308] ""
[309] " -3.0260 -0.7241 2.3445 3.9886"
[310] ""
[311] " k = 0.4375 0.3125 0.5625 ( 579 PWs) bands (ev):"
[312] ""
[313] " -3.6428 -0.5940 3.8790 4.5888"
[314] ""
[315] " k =-0.0625-0.9375 0.0625 ( 580 PWs) bands (ev):"
[316] ""
[317] " -2.2322 -1.2797 2.9453 3.1876"
[318] ""
[319] " k =-0.1875-0.8125-0.0625 ( 576 PWs) bands (ev):"
[320] ""
[321] " -3.0100 -0.3291 2.6721 3.2197"
[322] ""
[323] " k =-0.3125-0.6875-0.1875 ( 572 PWs) bands (ev):"
[324] ""
[325] " -3.4805 -0.0953 2.7463 3.8281"
[326] ""
[327] " k =-0.0625-0.6875 0.0625 ( 574 PWs) bands (ev):"
[328] ""
[329] " -3.8633 0.7843 3.3646 3.5523"
[330] ""
[331] " k =-0.1875-0.5625-0.0625 ( 572 PWs) bands (ev):"
[332] ""
[333] " -4.3961 1.4843 3.4097 4.0745"
[334] ""
[335] " k =-0.0625-0.4375 0.0625 ( 572 PWs) bands (ev):"
[336] ""
[337] " -5.0455 2.8630 4.3394 4.3694"
[338] ""
[339] " k =-0.1875 0.1875 0.1875 ( 567 PWs) bands (ev):"
[340] ""
[341] " -5.4507 3.2258 5.4608 5.4608"
[342] ""
[343] " k =-0.3125 0.3125 0.0625 ( 570 PWs) bands (ev):"
[344] ""
[345] " -5.0548 2.3953 3.9220 5.4829"
[346] ""
[347] " k =-0.4375 0.4375-0.0625 ( 573 PWs) bands (ev):"
[348] ""
[349] " -4.2988 1.0270 2.8236 4.9715"
[350] ""
[351] " k = 0.4375-0.4375 0.8125 ( 572 PWs) bands (ev):"
[352] ""
[353] " -3.3869 -0.4886 2.6803 4.4327"
[354] ""
[355] " k = 0.3125-0.3125 0.6875 ( 574 PWs) bands (ev):"
[356] ""
[357] " -3.3718 -0.5166 2.9875 4.1092"
[358] ""
[359] " k = 0.1875-0.1875 0.5625 ( 575 PWs) bands (ev):"
[360] ""
[361] " -4.2828 1.0227 3.6066 4.0834"
[362] ""
[363] " k =-0.1875 0.4375 0.1875 ( 576 PWs) bands (ev):"
[364] ""
[365] " -4.7953 1.7215 4.4489 4.5070"
[366] ""
[367] " k =-0.3125 0.5625 0.0625 ( 573 PWs) bands (ev):"
[368] ""
[369] " -4.1619 0.9686 2.8814 4.3087"
[370] ""
[371] " k = 0.5625-0.3125 0.9375 ( 569 PWs) bands (ev):"
[372] ""
[373] " -3.2574 -0.1328 2.0747 3.7267"
[374] ""
[375] " k = 0.4375-0.1875 0.8125 ( 569 PWs) bands (ev):"
[376] ""
[377] " -2.7586 -0.7604 2.0846 3.4065"
[378] ""
[379] " k = 0.3125-0.0625 0.6875 ( 571 PWs) bands (ev):"
[380] ""
[381] " -3.5486 0.2660 2.5098 3.5904"
[382] ""
[383] " k =-0.1875 0.6875 0.1875 ( 574 PWs) bands (ev):"
[384] ""
[385] " -3.6598 0.3169 2.8544 3.7489"
[386] ""
[387] " k = 0.6875-0.1875 1.0625 ( 573 PWs) bands (ev):"
[388] ""
[389] " -2.8461 -0.4708 2.2577 3.0411"
[390] ""
[391] " k = 0.5625-0.0625 0.9375 ( 575 PWs) bands (ev):"
[392] ""
[393] " -2.0245 -1.2270 1.9264 2.5256"
[394] ""
[395] " k = 0.4375 0.0625 0.8125 ( 570 PWs) bands (ev):"
[396] ""
[397] " -2.6344 -0.6826 1.9237 3.0126"
[398] ""
[399] " k =-0.1875-1.0625 0.1875 ( 573 PWs) bands (ev):"
[400] ""
[401] " -2.1935 -1.2123 2.0351 3.4028"
[402] ""
[403] " k =-0.3125-0.9375 0.0625 ( 578 PWs) bands (ev):"
[404] ""
[405] " -2.0926 -1.2374 2.1309 2.7502"
[406] ""
[407] " k =-0.1875-0.8125 0.1875 ( 576 PWs) bands (ev):"
[408] ""
[409] " -2.9453 -0.4374 2.3109 3.5195"
[410] ""
[411] " k =-0.3125 0.3125 0.3125 ( 571 PWs) bands (ev):"
[412] ""
[413] " -4.6855 1.0067 5.0447 5.0447"
[414] ""
[415] " k =-0.4375 0.4375 0.1875 ( 575 PWs) bands (ev):"
[416] ""
[417] " -4.1993 0.4319 3.5607 4.9573"
[418] ""
[419] " k = 0.4375-0.4375 1.0625 ( 574 PWs) bands (ev):"
[420] ""
[421] " -3.3959 -0.0758 1.9936 4.3673"
[422] ""
[423] " k = 0.3125-0.3125 0.9375 ( 573 PWs) bands (ev):"
[424] ""
[425] " -2.5603 -0.8539 1.6413 3.8127"
[426] ""
[427] " k =-0.3125 0.5625 0.3125 ( 584 PWs) bands (ev):"
[428] ""
[429] " -3.8789 -0.1348 3.9076 4.3841"
[430] ""
[431] " k = 0.5625-0.3125 1.1875 ( 571 PWs) bands (ev):"
[432] ""
[433] " -3.2494 -0.4808 2.5727 3.8954"
[434] ""
[435] " k = 0.4375-0.1875 1.0625 ( 571 PWs) bands (ev):"
[436] ""
[437] " -2.4218 -0.9129 1.7348 3.1663"
[438] ""
[439] " k =-0.3125-1.1875 0.3125 ( 572 PWs) bands (ev):"
[440] ""
[441] " -2.8841 -0.7556 2.1648 3.9137"
[442] ""
[443] " k =-0.4375 0.4375 0.4375 ( 577 PWs) bands (ev):"
[444] ""
[445] " -3.7767 -0.6617 4.8224 4.8224"
[446] ""
[447] " k = 0.4375-0.4375 1.3125 ( 575 PWs) bands (ev):"
[448] ""
[449] " -3.4187 -0.8349 3.5854 4.5497"
[450] ""
[451] " highest occupied level (ev): 5.9064"
[452] ""
[453] "! total energy = -15.85108290 Ry"
[454] " estimated scf accuracy < 0.00000011 Ry"
[455] ""
[456] " The total energy is the sum of the following terms:"
[457] " one-electron contribution = 4.61125656 Ry"
[458] " hartree contribution = 1.09714067 Ry"
[459] " xc contribution = -4.79123717 Ry"
[460] " ewald contribution = -16.76824296 Ry"
[461] ""
[462] " convergence has been achieved in 5 iterations"
[463] ""
[464] " Writing output data file ./silicon.save/"
[465] ""
[466] " init_run : 0.18s CPU 0.18s WALL ( 1 calls)"
[467] " electrons : 1.46s CPU 1.45s WALL ( 1 calls)"
[468] ""
[469] " Called by init_run:"
[470] " wfcinit : 0.14s CPU 0.14s WALL ( 1 calls)"
[471] " potinit : 0.00s CPU 0.00s WALL ( 1 calls)"
[472] " hinit0 : 0.02s CPU 0.02s WALL ( 1 calls)"
[473] ""
[474] " Called by electrons:"
[475] " c_bands : 1.27s CPU 1.24s WALL ( 6 calls)"
[476] " sum_band : 0.19s CPU 0.19s WALL ( 6 calls)"
[477] " v_of_rho : 0.01s CPU 0.01s WALL ( 6 calls)"
[478] " mix_rho : 0.00s CPU 0.00s WALL ( 6 calls)"
[479] ""
[480] " Called by c_bands:"
[481] " init_us_2 : 0.06s CPU 0.06s WALL ( 780 calls)"
[482] " cegterg : 1.21s CPU 1.19s WALL ( 360 calls)"
[483] ""
[484] " Called by *egterg:"
[485] " cdiaghg : 0.04s CPU 0.04s WALL ( 1139 calls)"
[486] " h_psi : 1.06s CPU 1.07s WALL ( 1259 calls)"
[487] " g_psi : 0.01s CPU 0.01s WALL ( 839 calls)"
[488] ""
[489] " Called by h_psi:"
[490] " h_psi:calbec : 0.02s CPU 0.03s WALL ( 1259 calls)"
[491] " vloc_psi : 0.97s CPU 0.99s WALL ( 1259 calls)"
[492] " add_vuspsi : 0.05s CPU 0.04s WALL ( 1259 calls)"
[493] ""
[494] " General routines"
[495] " calbec : 0.02s CPU 0.02s WALL ( 1259 calls)"
[496] " fft : 0.01s CPU 0.01s WALL ( 18 calls)"
[497] " ffts : 0.00s CPU 0.00s WALL ( 6 calls)"
[498] " fftw : 0.95s CPU 0.96s WALL ( 10554 calls)"
[499] ""
[500] " Parallel routines"
[501] ""
[502] " PWSCF : 1.67s CPU 1.68s WALL"
[503] ""
[504] ""
[505] " This run was terminated on: 7:24: 0 25Jul2021 "
[506] ""
[507] "=------------------------------------------------------------------------------="
[508] " JOB DONE."
[509] "=------------------------------------------------------------------------------="
HandsOn1_Out3
[1] ""
[2] " Program PWSCF v.6.7MaX starts on 25Jul2021 at 7:23:58 "
[3] ""
[4] " This program is part of the open-source Quantum ESPRESSO suite"
[5] " for quantum simulation of materials; please cite"
[6] " \"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);"
[7] " \"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);"
[8] " URL http://www.quantum-espresso.org\", "
[9] " in publications or presentations arising from this work. More details at"
[10] " http://www.quantum-espresso.org/quote"
[11] ""
[12] " Parallel version (MPI), running on 1 processors"
[13] ""
[14] " MPI processes distributed on 1 nodes"
[15] " Waiting for input..."
[16] " Reading input from standard input"
[17] ""
[18] " Current dimensions of program PWSCF are:"
[19] " Max number of different atomic species (ntypx) = 10"
[20] " Max number of k-points (npk) = 40000"
[21] " Max angular momentum in pseudopotentials (lmaxx) = 3"
[22] ""
[23] " Subspace diagonalization in iterative solution of the eigenvalue problem:"
[24] " a serial algorithm will be used"
[25] ""
[26] ""
[27] " G-vector sticks info"
[28] " --------------------"
[29] " sticks: dense smooth PW G-vecs: dense smooth PW"
[30] " Sum 367 367 121 4621 4621 941"
[31] ""
[32] ""
[33] ""
[34] " bravais-lattice index = 2"
[35] " lattice parameter (alat) = 10.2800 a.u."
[36] " unit-cell volume = 271.5935 (a.u.)^3"
[37] " number of atoms/cell = 2"
[38] " number of atomic types = 1"
[39] " number of electrons = 8.00"
[40] " number of Kohn-Sham states= 4"
[41] " kinetic-energy cutoff = 25.0000 Ry"
[42] " charge density cutoff = 100.0000 Ry"
[43] " scf convergence threshold = 1.0E-06"
[44] " mixing beta = 0.7000"
[45] " number of iterations used = 8 plain mixing"
[46] " Exchange-correlation= SLA PZ NOGX NOGC"
[47] " ( 1 1 0 0 0 0 0)"
[48] ""
[49] " celldm(1)= 10.280000 celldm(2)= 0.000000 celldm(3)= 0.000000"
[50] " celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000"
[51] ""
[52] " crystal axes: (cart. coord. in units of alat)"
[53] " a(1) = ( -0.500000 0.000000 0.500000 ) "
[54] " a(2) = ( 0.000000 0.500000 0.500000 ) "
[55] " a(3) = ( -0.500000 0.500000 0.000000 ) "
[56] ""
[57] " reciprocal axes: (cart. coord. in units 2 pi/alat)"
[58] " b(1) = ( -1.000000 -1.000000 1.000000 ) "
[59] " b(2) = ( 1.000000 1.000000 1.000000 ) "
[60] " b(3) = ( -1.000000 1.000000 -1.000000 ) "
[61] ""
[62] ""
[63] " PseudoPot. # 1 for Si read from file:"
[64] " ./Si.pz-vbc.UPF"
[65] " MD5 check sum: 9f25e6ff280f3123e9b3a84715b2e9c9"
[66] " Pseudo is Norm-conserving, Zval = 4.0"
[67] " Generated by new atomic code, or converted to UPF format"
[68] " Using radial grid of 431 points, 2 beta functions with: "
[69] " l(1) = 0"
[70] " l(2) = 1"
[71] ""
[72] " atomic species valence mass pseudopotential"
[73] " Si 4.00 28.08600 Si( 1.00)"
[74] ""
[75] " 48 Sym. Ops., with inversion, found (24 have fractional translation)"
[76] ""
[77] ""
[78] ""
[79] " Cartesian axes"
[80] ""
[81] " site n. atom positions (alat units)"
[82] " 1 Si tau( 1) = ( 0.0000000 0.0000000 0.0000000 )"
[83] " 2 Si tau( 2) = ( 0.2500000 0.2500000 0.2500000 )"
[84] ""
[85] " number of k points= 60"
[86] " cart. coord. in units 2pi/alat"
[87] " k( 1) = ( -0.0625000 0.0625000 0.0625000), wk = 0.0078125"
[88] " k( 2) = ( -0.1875000 0.1875000 -0.0625000), wk = 0.0234375"
[89] " k( 3) = ( -0.3125000 0.3125000 -0.1875000), wk = 0.0234375"
[90] " k( 4) = ( -0.4375000 0.4375000 -0.3125000), wk = 0.0234375"
[91] " k( 5) = ( 0.4375000 -0.4375000 0.5625000), wk = 0.0234375"
[92] " k( 6) = ( 0.3125000 -0.3125000 0.4375000), wk = 0.0234375"
[93] " k( 7) = ( 0.1875000 -0.1875000 0.3125000), wk = 0.0234375"
[94] " k( 8) = ( 0.0625000 -0.0625000 0.1875000), wk = 0.0234375"
[95] " k( 9) = ( -0.0625000 0.3125000 0.0625000), wk = 0.0234375"
[96] " k( 10) = ( -0.1875000 0.4375000 -0.0625000), wk = 0.0468750"
[97] " k( 11) = ( -0.3125000 0.5625000 -0.1875000), wk = 0.0468750"
[98] " k( 12) = ( 0.5625000 -0.3125000 0.6875000), wk = 0.0468750"
[99] " k( 13) = ( 0.4375000 -0.1875000 0.5625000), wk = 0.0468750"
[100] " k( 14) = ( 0.3125000 -0.0625000 0.4375000), wk = 0.0468750"
[101] " k( 15) = ( 0.1875000 0.0625000 0.3125000), wk = 0.0468750"
[102] " k( 16) = ( -0.0625000 0.5625000 0.0625000), wk = 0.0234375"
[103] " k( 17) = ( -0.1875000 0.6875000 -0.0625000), wk = 0.0468750"
[104] " k( 18) = ( 0.6875000 -0.1875000 0.8125000), wk = 0.0468750"
[105] " k( 19) = ( 0.5625000 -0.0625000 0.6875000), wk = 0.0468750"
[106] " k( 20) = ( 0.4375000 0.0625000 0.5625000), wk = 0.0468750"
[107] " k( 21) = ( 0.3125000 0.1875000 0.4375000), wk = 0.0468750"
[108] " k( 22) = ( -0.0625000 0.8125000 0.0625000), wk = 0.0234375"
[109] " k( 23) = ( 0.8125000 -0.0625000 0.9375000), wk = 0.0468750"
[110] " k( 24) = ( 0.6875000 0.0625000 0.8125000), wk = 0.0468750"
[111] " k( 25) = ( 0.5625000 0.1875000 0.6875000), wk = 0.0468750"
[112] " k( 26) = ( 0.4375000 0.3125000 0.5625000), wk = 0.0468750"
[113] " k( 27) = ( -0.0625000 -0.9375000 0.0625000), wk = 0.0234375"
[114] " k( 28) = ( -0.1875000 -0.8125000 -0.0625000), wk = 0.0468750"
[115] " k( 29) = ( -0.3125000 -0.6875000 -0.1875000), wk = 0.0468750"
[116] " k( 30) = ( -0.0625000 -0.6875000 0.0625000), wk = 0.0234375"
[117] " k( 31) = ( -0.1875000 -0.5625000 -0.0625000), wk = 0.0468750"
[118] " k( 32) = ( -0.0625000 -0.4375000 0.0625000), wk = 0.0234375"
[119] " k( 33) = ( -0.1875000 0.1875000 0.1875000), wk = 0.0078125"
[120] " k( 34) = ( -0.3125000 0.3125000 0.0625000), wk = 0.0234375"
[121] " k( 35) = ( -0.4375000 0.4375000 -0.0625000), wk = 0.0234375"
[122] " k( 36) = ( 0.4375000 -0.4375000 0.8125000), wk = 0.0234375"
[123] " k( 37) = ( 0.3125000 -0.3125000 0.6875000), wk = 0.0234375"
[124] " k( 38) = ( 0.1875000 -0.1875000 0.5625000), wk = 0.0234375"
[125] " k( 39) = ( -0.1875000 0.4375000 0.1875000), wk = 0.0234375"
[126] " k( 40) = ( -0.3125000 0.5625000 0.0625000), wk = 0.0468750"
[127] " k( 41) = ( 0.5625000 -0.3125000 0.9375000), wk = 0.0468750"
[128] " k( 42) = ( 0.4375000 -0.1875000 0.8125000), wk = 0.0468750"
[129] " k( 43) = ( 0.3125000 -0.0625000 0.6875000), wk = 0.0468750"
[130] " k( 44) = ( -0.1875000 0.6875000 0.1875000), wk = 0.0234375"
[131] " k( 45) = ( 0.6875000 -0.1875000 1.0625000), wk = 0.0468750"
[132] " k( 46) = ( 0.5625000 -0.0625000 0.9375000), wk = 0.0468750"
[133] " k( 47) = ( 0.4375000 0.0625000 0.8125000), wk = 0.0468750"
[134] " k( 48) = ( -0.1875000 -1.0625000 0.1875000), wk = 0.0234375"
[135] " k( 49) = ( -0.3125000 -0.9375000 0.0625000), wk = 0.0468750"
[136] " k( 50) = ( -0.1875000 -0.8125000 0.1875000), wk = 0.0234375"
[137] " k( 51) = ( -0.3125000 0.3125000 0.3125000), wk = 0.0078125"
[138] " k( 52) = ( -0.4375000 0.4375000 0.1875000), wk = 0.0234375"
[139] " k( 53) = ( 0.4375000 -0.4375000 1.0625000), wk = 0.0234375"
[140] " k( 54) = ( 0.3125000 -0.3125000 0.9375000), wk = 0.0234375"
[141] " k( 55) = ( -0.3125000 0.5625000 0.3125000), wk = 0.0234375"
[142] " k( 56) = ( 0.5625000 -0.3125000 1.1875000), wk = 0.0468750"
[143] " k( 57) = ( 0.4375000 -0.1875000 1.0625000), wk = 0.0468750"
[144] " k( 58) = ( -0.3125000 -1.1875000 0.3125000), wk = 0.0234375"
[145] " k( 59) = ( -0.4375000 0.4375000 0.4375000), wk = 0.0078125"
[146] " k( 60) = ( 0.4375000 -0.4375000 1.3125000), wk = 0.0234375"
[147] ""
[148] " Dense grid: 4621 G-vectors FFT dimensions: ( 24, 24, 24)"
[149] ""
[150] " Estimated max dynamical RAM per process > 5.29 MB"
[151] ""
[152] " Initial potential from superposition of free atoms"
[153] ""
[154] " starting charge 7.99901, renormalised to 8.00000"
[155] " Starting wfcs are 8 randomized atomic wfcs"
[156] ""
[157] " total cpu time spent up to now is 0.2 secs"
[158] ""
[159] " Self-consistent Calculation"
[160] ""
[161] " iteration # 1 ecut= 25.00 Ry beta= 0.70"
[162] " Davidson diagonalization with overlap"
[163] " ethr = 1.00E-02, avg # of iterations = 2.0"
[164] ""
[165] " Threshold (ethr) on eigenvalues was too large:"
[166] " Diagonalizing with lowered threshold"
[167] ""
[168] " Davidson diagonalization with overlap"
[169] " ethr = 6.63E-04, avg # of iterations = 1.0"
[170] ""
[171] " total cpu time spent up to now is 0.6 secs"
[172] ""
[173] " total energy = -15.84766498 Ry"
[174] " estimated scf accuracy < 0.05857063 Ry"
[175] ""
[176] " iteration # 2 ecut= 25.00 Ry beta= 0.70"
[177] " Davidson diagonalization with overlap"
[178] " ethr = 7.32E-04, avg # of iterations = 1.0"
[179] ""
[180] " total cpu time spent up to now is 0.8 secs"
[181] ""
[182] " total energy = -15.85060646 Ry"
[183] " estimated scf accuracy < 0.00220460 Ry"
[184] ""
[185] " iteration # 3 ecut= 25.00 Ry beta= 0.70"
[186] " Davidson diagonalization with overlap"
[187] " ethr = 2.76E-05, avg # of iterations = 2.4"
[188] ""
[189] " total cpu time spent up to now is 1.0 secs"
[190] ""
[191] " total energy = -15.85105172 Ry"
[192] " estimated scf accuracy < 0.00006894 Ry"
[193] ""
[194] " iteration # 4 ecut= 25.00 Ry beta= 0.70"
[195] " Davidson diagonalization with overlap"
[196] " ethr = 8.62E-07, avg # of iterations = 3.4"
[197] ""
[198] " total cpu time spent up to now is 1.3 secs"
[199] ""
[200] " total energy = -15.85108167 Ry"
[201] " estimated scf accuracy < 0.00000137 Ry"
[202] ""
[203] " iteration # 5 ecut= 25.00 Ry beta= 0.70"
[204] " Davidson diagonalization with overlap"
[205] " ethr = 1.72E-08, avg # of iterations = 4.2"
[206] ""
[207] " total cpu time spent up to now is 1.6 secs"
[208] ""
[209] " End of self-consistent calculation"
[210] ""
[211] " k =-0.0625 0.0625 0.0625 ( 558 PWs) bands (ev):"
[212] ""
[213] " -5.8538 5.4604 5.9064 5.9064"
[214] ""
[215] " k =-0.1875 0.1875-0.0625 ( 565 PWs) bands (ev):"
[216] ""
[217] " -5.5836 3.9577 5.0886 5.7892"
[218] ""
[219] " k =-0.3125 0.3125-0.1875 ( 576 PWs) bands (ev):"
[220] ""
[221] " -4.9304 1.7189 4.5990 5.3234"
[222] ""
[223] " k =-0.4375 0.4375-0.3125 ( 579 PWs) bands (ev):"
[224] ""
[225] " -4.0139 -0.1872 4.3834 4.9131"
[226] ""
[227] " k = 0.4375-0.4375 0.5625 ( 574 PWs) bands (ev):"
[228] ""
[229] " -3.5526 -0.9018 4.4356 4.6918"
[230] ""
[231] " k = 0.3125-0.3125 0.4375 ( 579 PWs) bands (ev):"
[232] ""
[233] " -4.3289 0.3783 4.7110 4.7252"
[234] ""
[235] " k = 0.1875-0.1875 0.3125 ( 572 PWs) bands (ev):"
[236] ""
[237] " -5.1868 2.4538 4.9880 5.1930"
[238] ""
[239] " k = 0.0625-0.0625 0.1875 ( 566 PWs) bands (ev):"
[240] ""
[241] " -5.7180 4.7134 5.4739 5.6392"
[242] ""
[243] " k =-0.0625 0.3125 0.0625 ( 569 PWs) bands (ev):"
[244] ""
[245] " -5.4478 3.8282 4.9097 4.9998"
[246] ""
[247] " k =-0.1875 0.4375-0.0625 ( 572 PWs) bands (ev):"
[248] ""
[249] " -4.9187 2.3252 3.9259 4.7381"
[250] ""
[251] " k =-0.3125 0.5625-0.1875 ( 578 PWs) bands (ev):"
[252] ""
[253] " -4.0631 0.4459 3.4337 4.3195"
[254] ""
[255] " k = 0.5625-0.3125 0.6875 ( 573 PWs) bands (ev):"
[256] ""
[257] " -3.2831 -0.7863 3.1444 4.2242"
[258] ""
[259] " k = 0.4375-0.1875 0.5625 ( 575 PWs) bands (ev):"
[260] ""
[261] " -3.7534 -0.0815 3.0657 4.5142"
[262] ""
[263] " k = 0.3125-0.0625 0.4375 ( 574 PWs) bands (ev):"
[264] ""
[265] " -4.6678 1.6694 3.3607 5.0299"
[266] ""
[267] " k = 0.1875 0.0625 0.3125 ( 568 PWs) bands (ev):"
[268] ""
[269] " -5.3161 3.1443 4.5038 5.4083"
[270] ""
[271] " k =-0.0625 0.5625 0.0625 ( 570 PWs) bands (ev):"
[272] ""
[273] " -4.5153 1.8385 3.7843 3.9093"
[274] ""
[275] " k =-0.1875 0.6875-0.0625 ( 579 PWs) bands (ev):"
[276] ""
[277] " -3.7560 0.5979 2.9814 3.5550"
[278] ""
[279] " k = 0.6875-0.1875 0.8125 ( 572 PWs) bands (ev):"
[280] ""
[281] " -2.8424 -0.6159 2.1261 3.5233"
[282] ""
[283] " k = 0.5625-0.0625 0.6875 ( 574 PWs) bands (ev):"
[284] ""
[285] " -2.9121 -0.5225 1.7630 3.8735"
[286] ""
[287] " k = 0.4375 0.0625 0.5625 ( 571 PWs) bands (ev):"
[288] ""
[289] " -3.8226 0.4282 2.3829 4.4686"
[290] ""
[291] " k = 0.3125 0.1875 0.4375 ( 575 PWs) bands (ev):"
[292] ""
[293] " -4.5525 1.0454 4.0508 4.9301"
[294] ""
[295] " k =-0.0625 0.8125 0.0625 ( 577 PWs) bands (ev):"
[296] ""
[297] " -3.0981 -0.2659 3.0849 3.3100"
[298] ""
[299] " k = 0.8125-0.0625 0.9375 ( 578 PWs) bands (ev):"
[300] ""
[301] " -2.1778 -1.2602 2.5107 3.0583"
[302] ""
[303] " k = 0.6875 0.0625 0.8125 ( 574 PWs) bands (ev):"
[304] ""
[305] " -2.2654 -1.0997 1.7611 3.3781"
[306] ""
[307] " k = 0.5625 0.1875 0.6875 ( 570 PWs) bands (ev):"
[308] ""
[309] " -3.0260 -0.7241 2.3445 3.9886"
[310] ""
[311] " k = 0.4375 0.3125 0.5625 ( 579 PWs) bands (ev):"
[312] ""
[313] " -3.6428 -0.5940 3.8790 4.5888"
[314] ""
[315] " k =-0.0625-0.9375 0.0625 ( 580 PWs) bands (ev):"
[316] ""
[317] " -2.2322 -1.2797 2.9453 3.1876"
[318] ""
[319] " k =-0.1875-0.8125-0.0625 ( 576 PWs) bands (ev):"
[320] ""
[321] " -3.0100 -0.3291 2.6721 3.2197"
[322] ""
[323] " k =-0.3125-0.6875-0.1875 ( 572 PWs) bands (ev):"
[324] ""
[325] " -3.4805 -0.0953 2.7463 3.8281"
[326] ""
[327] " k =-0.0625-0.6875 0.0625 ( 574 PWs) bands (ev):"
[328] ""
[329] " -3.8633 0.7843 3.3646 3.5523"
[330] ""
[331] " k =-0.1875-0.5625-0.0625 ( 572 PWs) bands (ev):"
[332] ""
[333] " -4.3961 1.4843 3.4097 4.0745"
[334] ""
[335] " k =-0.0625-0.4375 0.0625 ( 572 PWs) bands (ev):"
[336] ""
[337] " -5.0455 2.8630 4.3394 4.3694"
[338] ""
[339] " k =-0.1875 0.1875 0.1875 ( 567 PWs) bands (ev):"
[340] ""
[341] " -5.4507 3.2258 5.4608 5.4608"
[342] ""
[343] " k =-0.3125 0.3125 0.0625 ( 570 PWs) bands (ev):"
[344] ""
[345] " -5.0548 2.3953 3.9220 5.4829"
[346] ""
[347] " k =-0.4375 0.4375-0.0625 ( 573 PWs) bands (ev):"
[348] ""
[349] " -4.2988 1.0270 2.8236 4.9715"
[350] ""
[351] " k = 0.4375-0.4375 0.8125 ( 572 PWs) bands (ev):"
[352] ""
[353] " -3.3869 -0.4886 2.6803 4.4327"
[354] ""
[355] " k = 0.3125-0.3125 0.6875 ( 574 PWs) bands (ev):"
[356] ""
[357] " -3.3718 -0.5166 2.9875 4.1092"
[358] ""
[359] " k = 0.1875-0.1875 0.5625 ( 575 PWs) bands (ev):"
[360] ""
[361] " -4.2828 1.0227 3.6066 4.0834"
[362] ""
[363] " k =-0.1875 0.4375 0.1875 ( 576 PWs) bands (ev):"
[364] ""
[365] " -4.7953 1.7215 4.4489 4.5070"
[366] ""
[367] " k =-0.3125 0.5625 0.0625 ( 573 PWs) bands (ev):"
[368] ""
[369] " -4.1619 0.9686 2.8814 4.3087"
[370] ""
[371] " k = 0.5625-0.3125 0.9375 ( 569 PWs) bands (ev):"
[372] ""
[373] " -3.2574 -0.1328 2.0747 3.7267"
[374] ""
[375] " k = 0.4375-0.1875 0.8125 ( 569 PWs) bands (ev):"
[376] ""
[377] " -2.7586 -0.7604 2.0846 3.4065"
[378] ""
[379] " k = 0.3125-0.0625 0.6875 ( 571 PWs) bands (ev):"
[380] ""
[381] " -3.5486 0.2660 2.5098 3.5904"
[382] ""
[383] " k =-0.1875 0.6875 0.1875 ( 574 PWs) bands (ev):"
[384] ""
[385] " -3.6598 0.3169 2.8544 3.7489"
[386] ""
[387] " k = 0.6875-0.1875 1.0625 ( 573 PWs) bands (ev):"
[388] ""
[389] " -2.8461 -0.4708 2.2577 3.0411"
[390] ""
[391] " k = 0.5625-0.0625 0.9375 ( 575 PWs) bands (ev):"
[392] ""
[393] " -2.0245 -1.2270 1.9264 2.5256"
[394] ""
[395] " k = 0.4375 0.0625 0.8125 ( 570 PWs) bands (ev):"
[396] ""
[397] " -2.6344 -0.6826 1.9237 3.0126"
[398] ""
[399] " k =-0.1875-1.0625 0.1875 ( 573 PWs) bands (ev):"
[400] ""
[401] " -2.1935 -1.2123 2.0351 3.4028"
[402] ""
[403] " k =-0.3125-0.9375 0.0625 ( 578 PWs) bands (ev):"
[404] ""
[405] " -2.0926 -1.2374 2.1309 2.7502"
[406] ""
[407] " k =-0.1875-0.8125 0.1875 ( 576 PWs) bands (ev):"
[408] ""
[409] " -2.9453 -0.4374 2.3109 3.5195"
[410] ""
[411] " k =-0.3125 0.3125 0.3125 ( 571 PWs) bands (ev):"
[412] ""
[413] " -4.6855 1.0067 5.0447 5.0447"
[414] ""
[415] " k =-0.4375 0.4375 0.1875 ( 575 PWs) bands (ev):"
[416] ""
[417] " -4.1993 0.4319 3.5607 4.9573"
[418] ""
[419] " k = 0.4375-0.4375 1.0625 ( 574 PWs) bands (ev):"
[420] ""
[421] " -3.3959 -0.0758 1.9936 4.3673"
[422] ""
[423] " k = 0.3125-0.3125 0.9375 ( 573 PWs) bands (ev):"
[424] ""
[425] " -2.5603 -0.8539 1.6413 3.8127"
[426] ""
[427] " k =-0.3125 0.5625 0.3125 ( 584 PWs) bands (ev):"
[428] ""
[429] " -3.8789 -0.1348 3.9076 4.3841"
[430] ""
[431] " k = 0.5625-0.3125 1.1875 ( 571 PWs) bands (ev):"
[432] ""
[433] " -3.2494 -0.4808 2.5727 3.8954"
[434] ""
[435] " k = 0.4375-0.1875 1.0625 ( 571 PWs) bands (ev):"
[436] ""
[437] " -2.4218 -0.9129 1.7348 3.1663"
[438] ""
[439] " k =-0.3125-1.1875 0.3125 ( 572 PWs) bands (ev):"
[440] ""
[441] " -2.8841 -0.7556 2.1648 3.9137"
[442] ""
[443] " k =-0.4375 0.4375 0.4375 ( 577 PWs) bands (ev):"
[444] ""
[445] " -3.7767 -0.6617 4.8224 4.8224"
[446] ""
[447] " k = 0.4375-0.4375 1.3125 ( 575 PWs) bands (ev):"
[448] ""
[449] " -3.4187 -0.8349 3.5854 4.5497"
[450] ""
[451] " highest occupied level (ev): 5.9064"
[452] ""
[453] "! total energy = -15.85108290 Ry"
[454] " estimated scf accuracy < 0.00000011 Ry"
[455] ""
[456] " The total energy is the sum of the following terms:"
[457] " one-electron contribution = 4.61125656 Ry"
[458] " hartree contribution = 1.09714067 Ry"
[459] " xc contribution = -4.79123717 Ry"
[460] " ewald contribution = -16.76824296 Ry"
[461] ""
[462] " convergence has been achieved in 5 iterations"
[463] ""
[464] " Writing output data file ./silicon.save/"
[465] ""
[466] " init_run : 0.18s CPU 0.18s WALL ( 1 calls)"
[467] " electrons : 1.46s CPU 1.45s WALL ( 1 calls)"
[468] ""
[469] " Called by init_run:"
[470] " wfcinit : 0.14s CPU 0.14s WALL ( 1 calls)"
[471] " potinit : 0.00s CPU 0.00s WALL ( 1 calls)"
[472] " hinit0 : 0.02s CPU 0.02s WALL ( 1 calls)"
[473] ""
[474] " Called by electrons:"
[475] " c_bands : 1.27s CPU 1.24s WALL ( 6 calls)"
[476] " sum_band : 0.19s CPU 0.19s WALL ( 6 calls)"
[477] " v_of_rho : 0.01s CPU 0.01s WALL ( 6 calls)"
[478] " mix_rho : 0.00s CPU 0.00s WALL ( 6 calls)"
[479] ""
[480] " Called by c_bands:"
[481] " init_us_2 : 0.06s CPU 0.06s WALL ( 780 calls)"
[482] " cegterg : 1.21s CPU 1.19s WALL ( 360 calls)"
[483] ""
[484] " Called by *egterg:"
[485] " cdiaghg : 0.04s CPU 0.04s WALL ( 1139 calls)"
[486] " h_psi : 1.06s CPU 1.07s WALL ( 1259 calls)"
[487] " g_psi : 0.01s CPU 0.01s WALL ( 839 calls)"
[488] ""
[489] " Called by h_psi:"
[490] " h_psi:calbec : 0.02s CPU 0.03s WALL ( 1259 calls)"
[491] " vloc_psi : 0.97s CPU 0.99s WALL ( 1259 calls)"
[492] " add_vuspsi : 0.05s CPU 0.04s WALL ( 1259 calls)"
[493] ""
[494] " General routines"
[495] " calbec : 0.02s CPU 0.02s WALL ( 1259 calls)"
[496] " fft : 0.01s CPU 0.01s WALL ( 18 calls)"
[497] " ffts : 0.00s CPU 0.00s WALL ( 6 calls)"
[498] " fftw : 0.95s CPU 0.96s WALL ( 10554 calls)"
[499] ""
[500] " Parallel routines"
[501] ""
[502] " PWSCF : 1.67s CPU 1.68s WALL"
[503] ""
[504] ""
[505] " This run was terminated on: 7:24: 0 25Jul2021 "
[506] ""
[507] "=------------------------------------------------------------------------------="
[508] " JOB DONE."
[509] "=------------------------------------------------------------------------------="
## create paradim directory
system("mkdir ~/PARADIM/HandsOn3")
## download pseudopotential for Si to folder
system("
cd ~/PARADIM/HandsOn3
wget http://www.quantum-espresso.org/upf_files/Cl.pz-bhs.UPF
")
## define input dir
input_dir <- "cd ~/PARADIM/HandsOn3"
## create template
paste0("
", input_dir, "
cat << EOF > cl2.in
&control
calculation = \"scf\",
prefix = \"Cl2\",
pseudo_dir = \"./\",
outdir = \"./\"
/
&system
ibrav = 1,
celldm(1) = 20.0,
nat = 2,
ntyp = 1,
ecutwfc = 100,
/
&electrons
/
ATOMIC_SPECIES
Cl 1.0 Cl.pz-bhs.UPF
ATOMIC_POSITIONS bohr
Cl 0.00 0.00 0.00
Cl 2.00 0.00 0.00
K_POINTS gamma
EOF
") %>% system()
## run pw _cl2 _1
system("
cd ~/PARADIM/HandsOn3
pw.x < cl2.in > cl2.out
")
## check output
# get and store
system("
cd ~/PARADIM/HandsOn3
more cl2.out
", intern = T) -> HandsOn3_Out1
# check
HandsOn3_Out1
## convert to dt for operation
# convert
HandsOn3_Out1_dt <- HandsOn3_Out1 %>% as.data.table()
colnames(HandsOn3_Out1_dt) <- "input"
# filter
HandsOn3_Out1_dt[input %like% "total energy"]
## loop to create multiple input files, varying molecular distance Cl-Cl
paste0(input_dir, "
cat > bl.tcsh << EOF
sed \"s/2.00/NEW/g\" cl2.in > tmp
foreach DIST ( 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 )
sed \"s/NEW/\\${DIST}/g\" tmp > cl2_\\${DIST}.in
end
EOF
tcsh bl.tcsh") %>% system()
## execulte pw for each
paste0(input_dir, "
cat > bl.tcsh << EOF
foreach DIST ( 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 )
pw.x < cl2_\\${DIST}.in > cl2_\\${DIST}.out
end
EOF
tcsh bl.tcsh") %>% system()
## extract values per file via grep
# get from system
paste0(input_dir, "
grep ! cl2_*out
") %>% system(intern = T) %>% as.data.table () -> HandsOn3_Out2
#fix colnames
colnames(HandsOn3_Out2) <- "Input"
# extract substring for Bond_Distance
HandsOn3_Out2[, Bond_Dist := as.numeric(substr(Input,5,7))]
# extract substring for total energy
SubStart <- nchar("cl2_2.2.out:! total energy = ") + 1
SubEnd <- nchar("-59.93293864") + SubStart
HandsOn3_Out2[, Total_Energy := as.numeric(substr(Input, SubStart, SubEnd))]
#check
HandsOn3_Out2$Bond_Dist
[1] 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6
HandsOn3_Out2$Total_Energy
[1] -57.51390 -58.54440 -59.17257 -59.55022 -59.77201 -59.89671 -59.96078 -59.98691 -59.98946 -59.97765
[11] -59.95749 -59.93294 -59.90658
## plot
# get extrapolated data
qplot(data=HandsOn3_Out2,
x=Bond_Dist,
y=Total_Energy,
geom=c("smooth"),
xlab="Cl-Cl Bond distance (bohr)",
ylab="total energy (Ry)") %>% layer_data() -> HandsOn3_Out2_Extrap
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
# find min and associated values in extrapolated ata
HandsOn3_Out2_Extrap_MinY <- HandsOn3_Out2_Extrap[which.min(HandsOn3_Out2_Extrap$y), ]$y
HandsOn3_Out2_Extrap_XMinY <- HandsOn3_Out2_Extrap[which.min(HandsOn3_Out2_Extrap$y), ]$x
# plot original data with extrapolated label
HandsOn3_Out2_Plot <- qplot(data=HandsOn3_Out2,
x=Bond_Dist,
y=Total_Energy,
geom=c("point", "smooth"),
xlab="Cl-Cl Bond distance (bohr)",
ylab="total energy (Ry)") +
annotate("text",
x = HandsOn3_Out2_Extrap_XMinY,
y = HandsOn3_Out2_Extrap_MinY + .8,
label = as.character(HandsOn3_Out2_Extrap_XMinY)) +
annotate("text",
x = HandsOn3_Out2_Extrap_XMinY,
y = HandsOn3_Out2_Extrap_MinY + 1,
label = as.character(HandsOn3_Out2_Extrap_MinY))
# run plot
HandsOn3_Out2_Plot
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
## generate new file with opt data from last run
# note specification of higher precision
paste0("
", input_dir, "
cat << EOF > cl2-2.in
&control
calculation = \"scf\",
prefix = \"Cl2\",
pseudo_dir = \"./\",
outdir = \"./\"
/
&system
ibrav = 1,
celldm(1) = 20.0,
nat = 2,
ntyp = 1,
ecutwfc = 100,
/
&electrons
conv_thr = 1.d-10
/
ATOMIC_SPECIES
Cl 1.0 Cl.pz-bhs.UPF
ATOMIC_POSITIONS bohr
Cl 0.00 0.00 0.00
Cl 3.725 0.00 0.00
K_POINTS gamma
EOF
") %>% system()
## run pw _cl2 _2
system("
cd ~/PARADIM/HandsOn3
pw.x < cl2-2.in > cl2-2.out
")
Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG IEEE_DENORMAL
## check output
# get and store
system("
cd ~/PARADIM/HandsOn3
more cl2-2.out
", intern = T) -> HandsOn3_Out3
HandsOn3_Cl_DissEnergy
[1] -0.2628745
## get PP for Si
paste0(input_dir,"
wget https://www.quantum-espresso.org/upf_files/Si.pz-vbc.UPF
") %>% system()
--2021-07-25 10:43:29-- https://www.quantum-espresso.org/upf_files/Si.pz-vbc.UPF
Resolving www.quantum-espresso.org (www.quantum-espresso.org)... 147.123.148.12
Connecting to www.quantum-espresso.org (www.quantum-espresso.org)|147.123.148.12|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 74552 (73K)
Saving to: ‘Si.pz-vbc.UPF.2’
0K .......... .......... .......... .......... .......... 68% 61.1K 0s
50K .......... .......... .. 100% 47.4M=0.8s
2021-07-25 10:43:32 (89.0 KB/s) - ‘Si.pz-vbc.UPF.2’ saved [74552/74552]
## generate template input file
paste0(input_dir,"
cat > silicon-3.in << EOF
&control
calculation = \"scf\"
prefix = \"silicon\",
pseudo_dir = \"./\",
outdir = \"./\"
/
&system
ibrav = 2,
celldm(1) = 10.28,
nat = 2,
ntyp = 1,
ecutwfc = 25.0,
/
&electrons
/
ATOMIC_SPECIES
Si 28.086 Si.pz-vbc.UPF
ATOMIC_POSITIONS
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
K_POINTS automatic
4 4 4 1 1 1
EOF") %>% system()
## make input file loop
paste0(input_dir,"
cat > silicon.tcsh << EOF
sed \"s/10.28/NEW/g\" silicon-3.in > tmp
foreach ALAT ( 9.95 10.0 10.05 10.1 10.15 10.2 10.25 10.3 10.35 10.4 10.45 10.5 )
sed \"s/NEW/\\${ALAT}/g\" tmp > silicon_\\${ALAT}.in
end
EOF
tcsh silicon.tcsh") %>% system()
## execute pw for loop
paste0(input_dir,"
cat > silicon.tcsh << EOF
foreach ALAT ( 9.95 10.0 10.05 10.1 10.15 10.2 10.25 10.3 10.35 10.4 10.45 10.5 )
pw.x < silicon_\\${ALAT}.in > silicon_\\${ALAT}.out
end
EOF
tcsh silicon.tcsh") %>% system()
silicon_9.95.in: No such file or directory.
silicon_10.0.in: No such file or directory.
silicon_10.05.in: No such file or directory.
silicon_10.1.in: No such file or directory.
silicon_10.15.in: No such file or directory.
silicon_10.2.in: No such file or directory.
silicon_10.25.in: No such file or directory.
silicon_10.3.in: No such file or directory.
silicon_10.35.in: No such file or directory.
silicon_10.4.in: No such file or directory.
silicon_10.45.in: No such file or directory.
silicon_10.5.in: No such file or directory.
## extract values per file via grep
# get from system
paste0(input_dir, "
grep ! silicon_*out
") %>% system(intern = T) %>% as.data.table () -> HandsOn3_Out4
#fix colnames
colnames(HandsOn3_Out4) <- "Input"
# extract substring for Bond_Distance
HandsOn3_Out4[, Bond_Dist := parse_number(Input)] ## pn takes first numbers found
# extract substring for total energy
HandsOn3_Out4[, Total_Energy := parse_number(substr(Input, str_locate(Input, "!"), ## search after !
nchar(Input)))]
#check
HandsOn3_Out4$Bond_Dist
[1] 10.00 10.05 10.10 10.15 10.20 10.25 10.30 10.35 10.40 10.45 10.50 9.95
HandsOn3_Out4$Total_Energy
[1] -15.84771 -15.84923 -15.85029 -15.85095 -15.85122 -15.85110 -15.85066 -15.84986 -15.84873
[10] -15.84731 -15.84558 -15.84578
## plot
# get extrapolated data
qplot(data=HandsOn3_Out4,
x=Bond_Dist,
y=Total_Energy,
geom=c("smooth"),
xlab="Cl-Cl Bond distance (bohr)",
ylab="total energy (Ry)") %>% layer_data() -> HandsOn3_Out4_Extrap
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
# find min and associated values in extrapolated ata
HandsOn3_Out4_Extrap_MinY <- HandsOn3_Out4_Extrap[which.min(HandsOn3_Out4_Extrap$y), ]$y
HandsOn3_Out4_Extrap_XMinY <- HandsOn3_Out4_Extrap[which.min(HandsOn3_Out4_Extrap$y), ]$x
# plot original data with extrapolated label
HandsOn3_Out4_Extrap_Plot <- qplot(data=HandsOn3_Out4,
x=Bond_Dist,
y=Total_Energy,
geom=c("point", "smooth"),
xlab="lattice parameter (bohr)",
ylab="total energy (Ry)") +
annotate("text",
x = HandsOn3_Out4_Extrap_XMinY,
y = HandsOn3_Out4_Extrap_MinY + .008,
label = as.character(HandsOn3_Out4_Extrap_XMinY)) +
annotate("text",
x = HandsOn3_Out4_Extrap_XMinY,
y = HandsOn3_Out4_Extrap_MinY + .01,
label = as.character(HandsOn3_Out4_Extrap_MinY))
# run plot
HandsOn3_Out4_Extrap_Plot
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

HandsOn3_Out5_CohEnergy
[1] -0.7767817
## maked dir for today
paste0("
mkdir ~/PARADIM/HandsOn5
") %>% system()
mkdir: /Users/owner/PARADIM/HandsOn5: File exists
# set as input
input_dir <- "cd ~/PARADIM/HandsOn5"
## get files
# create template
paste0("
", input_dir, "
cat << EOF > cl2.in
&control
calculation = \"relax\",
prefix = \"Cl2\",
forc_conv_thr = 1.d-5,
etot_conv_thr = 1.d-8,
pseudo_dir = \"./\",
outdir = \"./\"
/
&system
ibrav = 1,
celldm(1) = 20.0,
nat = 2,
ntyp = 1,
ecutwfc = 100,
/
&electrons
/
&ions
/
ATOMIC_SPECIES
Cl 1.0 Cl.pz-bhs.UPF
ATOMIC_POSITIONS bohr
Cl 0.00 0.00 0.00
Cl 5.00 0.00 0.00
K_POINTS gamma
EOF
") %>% system()
#execute
paste0(input_dir,
"
pw.x < cl2.in > cl2.out
") %>% system()
Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG IEEE_DENORMAL
# get output
paste0(input_dir,
"
more cl2.out
") %>% system(intern = T) %>% as.data.table -> HandsOn5_Out1
# add col name
colnames(HandsOn5_Out1) <- "Input"
# get cl energy
# note grep returns list
paste0(input_dir,
"
grep -A2 \"ATOMIC_POSITIONS\" cl2.out
") %>% system(intern=T) %>% as.data.table() -> HandsOn5_Out2
# add col names
colnames(HandsOn5_Out2) <- "Input"
# extract values from each columh
HandsOn5_Out2[, Values := as.numeric(lapply(Input, parse_number))]
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
Warning: 1 parsing failure.
row col expected actual
1 -- a number --
Warning: 1 parsing failure.
row col expected actual
1 -- a number ATOMIC_POSITIONS (bohr)
# calculate distance
HandsOn5_Out2[, Bond_Dist := Values - shift(Values)]
# drop empty
HandsOn5_Out3 <- HandsOn5_Out2[!is.na(Bond_Dist)][, .(.I, Bond_Dist)]
# plot
qplot(data = HandsOn5_Out3,
x = HandsOn5_Out3$I,
y = HandsOn5_Out3$Bond_Dist,
xlab = "iteration",
ylab = "bond distance (Bohr)",
geom = c("point", "smooth"))
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

#get files
##
## get files
# wget
paste0(input_dir,
"
wget https://www.quantum-espresso.org/upf_files/C.pz-vbc.UPF
") %>% system()
--2021-07-25 13:55:27-- https://www.quantum-espresso.org/upf_files/C.pz-vbc.UPF
Resolving www.quantum-espresso.org (www.quantum-espresso.org)... 147.123.148.12
Connecting to www.quantum-espresso.org (www.quantum-espresso.org)|147.123.148.12|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 41519 (41K)
Saving to: ‘C.pz-vbc.UPF.2’
0K .......... .......... .......... .......... 100% 49.5K=0.8s
2021-07-25 13:55:31 (49.5 KB/s) - ‘C.pz-vbc.UPF.2’ saved [41519/41519]
# create template
paste0("
", input_dir, "
cat > graphite.in << EOF
&control
calculation = \"vc-relax\"
prefix = \"graphite\",
pseudo_dir = \"./\",
outdir = \"./\"
/
&system
ibrav = 4,
celldm(1) = 4.0,
celldm(3) = 2.0,
nat = 4,
ntyp = 1,
ecutwfc = 100,
/
&electrons
/
&ions
/
&cell
/
ATOMIC_SPECIES
C 1.0 C.pz-vbc.UPF
ATOMIC_POSITIONS crystal
C 0.00 0.00 0.25
C 0.00 0.00 0.75
C 0.333333 0.666666 0.25
C 0.666666 0.333333 0.75
K_POINTS automatic
6 6 2 1 1 1
") %>% system()
paste0(input_dir,
"
pw.x < graphite.in > graphite.out
") %>% system()
Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG
## generate varous outputs
# lattice parameters
paste0(input_dir,
"
grep -A3 CELL_PARAMETERS graphite.out
") %>% system(intern=T) %>% as.data.table() -> HandsOn5_Out4
## generate loop to continuously reinput optimized parameters from previous run
DFTfilename <- "diamond"
DFTlooprange <- "3.75 4.0 4.25 4.5 4.75 5.0 5.25 5.5 5.75 6.0 6.25 6.5 6.75 7.0"
funcDFT_buildinput(DFTfilename, DFTlooprange)
cd qe
cat > diamond.tcsh << EOF
foreach ALAT (3.75 4.0 4.25 4.5 4.75 5.0 5.25 5.5 5.75 6.0 6.25 6.5 6.75 7.0)
cp diamond_TEMP.in diamond_\${ALAT}.in
end
EOF
tcsh diamond.tcsh
Error in system(.) : non-empty character argument expected
LS0tCnRpdGxlOiAiUEFSQURJTSAtIERGVCBTdW1tZXIgU2Nob29sIC0gSnVseSAxMS0yMCwgMjAyMSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyIC0gbGlicmFyaWVzfQoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZGF0YS50YWJsZSkKCmBgYAoKYGBge3IgLSBmdW5jdGlvbnN9CgojIyBidWlsZCB0ZW1wbGF0ZSBmaWxlIGZvciBsb29wIGV4ZWN1dGlvbnMKZnVuY0RGVF9idWlsZHRlbXAgPC0gZnVuY3Rpb24oREZUaW5wdXRfZGlyID0gImNkIH4vUEFSQURJTS9IYW5kc09uMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGVGlucHV0Zm4gPSAic2lsaWNvbi0zLmluIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGVGlucHV0cHJlZml4ID0gInNpbGljb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZUaW5wdXRlY3V0d2ZjID0gIjUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZUaW5wdXRrcCA9ICI0IDQgNCAxIDEgMSIpewogIApwYXN0ZTAoIiIsREZUaW5wdXRfZGlyLCIKY2F0IDw8IEVPRiA+ICIsREZUaW5wdXRmbiwiCiZjb250cm9sCmNhbGN1bGF0aW9uID0gXCJzY2ZcIiwKcHJlZml4ID0gXCIiLERGVGlucHV0cHJlZml4LCJcIiwKIHBzZXVkb19kaXIgPSBcIi4vXCIsCiBvdXRkaXIgPSBcIi4vXCIKLyAKJnN5c3RlbQogaWJyYXYgPSAyLAogY2VsbGRtKDEpID0gMTAuMjgsCiBuYXQgPSAyLAogbnR5cCA9IDEsCiBlY3V0d2ZjID0gIixERlRpbnB1dGVjdXR3ZmMsIiwKLwomZWxlY3Ryb25zCi8KQVRPTUlDX1NQRUNJRVMKIFNpICAyOC4wODYgIFNpLnB6LXZiYy5VUEYKQVRPTUlDX1BPU0lUSU9OUyBhbGF0CiBTaSAwLjAwIDAuMDAgMC4wMAogU2kgMC4yNSAwLjI1IDAuMjUKS19QT0lOVFMgYXV0b21hdGljIAoiLERGVGlucHV0a3AsIgpFT0YKIikKICAKfQoKCiMjIGZ1bmN0aW9uIGZvciBidWlsZGluZyBERlQgaW5wdXQgZmlsZXMgaW4gc3lzdGVtCmZ1bmNERlRfYnVpbGRpbnB1dCA8LSBmdW5jdGlvbihERlRmaWxlbmFtZSwgREZUbG9vcHJhbmdlKXsKICAjIyB2YXJpYWJsZXMKICAjIERGVGxvb3ByYW5nZSAtIGxvb3AgdGVybXMgYXBwZW5kZWQgdG8gZmlsZSBuYW1lcyAgCiAgIyBERlRmaWxlbmFtZSAtIGZpbGUgbmFtZQogIAogICMjIGZvcm1hdCBjcCBjb21tYW5kIHN0cmluZwogIHBhc3RlMCgiY2QgcWUKICAgIGNhdCA+ICIsIERGVGZpbGVuYW1lLCIudGNzaCA8PCBFT0YKICAgIGZvcmVhY2ggQUxBVCAoIiwgREZUbG9vcHJhbmdlLCIpCiAgICBjcCAiLCBERlRmaWxlbmFtZSwiX1RFTVAuaW4gIiwgREZUZmlsZW5hbWUsIl9cXCR7QUxBVH0uaW4KICAgIGVuZAogICAgRU9GCiAgICB0Y3NoICIsIERGVGZpbGVuYW1lLCIudGNzaCAiKSAtPiBTdHJpbmdUb1Rlcm1pbmFsIAogIAogICMjIHNlbmQgY3AgY29tbWFuZCB0byBzeXN0ZW0KICBTdHJpbmdUb1Rlcm1pbmFsICU+JQogICAgY2F0KCkgJT4lCiAgICBzeXN0ZW0oKSAgICAKCn0KCiMjIGZ1bmN0aW9uIGZvciBleGVjdXRpbmcgREZUIGluIHN5c3RlbQpmdW5jREZUX2V4ZWMgPC0gZnVuY3Rpb24oREZUZmlsZW5hbWUsIERGVGxvb3ByYW5nZSl7CiAgIyMgdmFyaWFibGVzCiAgIyBERlRsb29wcmFuZ2UgLSBsb29wIHRlcm1zIGFwcGVuZGVkIHRvIGZpbGUgbmFtZXMgIAogICMgREZUZmlsZW5hbWUgLSBmaWxlIG5hbWUKCiAgIyMgZm9ybWF0IERGVCBjb21tYW5kIHN0cmluZwogIHBhc3RlMCggIAogICAgImNkIHFlCiAgICBjYXQgPiAiLCBERlRmaWxlbmFtZSwiLnRjc2ggPDwgRU9GCiAgICBmb3JlYWNoIEFMQVQgKCIsIERGVGxvb3ByYW5nZSwiKQogICAgcHcueCA8ICIsIERGVGZpbGVuYW1lLCJfXFwke0FMQVR9LmluID4gIiwgREZUZmlsZW5hbWUsIl9cXCR7QUxBVH0ub3V0CiAgICBlbmQKICAgIEVPRgogICAgdGNzaCAiLCBERlRmaWxlbmFtZSwiLnRjc2giKSAtPiBTdHJpbmdUb1Rlcm1pbmFsIAogIAogICMjIHNlbmQgREZUIGNvbW1hbmQgdG8gc3lzdGVtCiAgU3RyaW5nVG9UZXJtaW5hbCAlPiUKICAgIGNhdCgpICU+JQogICAgc3lzdGVtKCkgICAgCgp9CgojIyBmdW5jdGlvbiBmb3IgcGFyc2luZyBhbmQgZGlzcGxheWluZyBERlQgb3V0cHV0CmZ1bmNERlRfcGxvdG91dCA8LSBmdW5jdGlvbihERlRmaWxlbmFtZSwgREZUbG9vcHJhbmdlKXsKICAjIyB2YXJpYWJsZXMKICAjIERGVGxvb3ByYW5nZSAtIGxvb3AgdGVybXMgYXBwZW5kZWQgdG8gZmlsZSBuYW1lcyAgCiAgIyBERlRmaWxlbmFtZSAtIGZpbGUgbmFtZQogIAogICMjIGZvcm1hdCBncmVwIGNvbW1hbmQgc3RyaW5nIChERlQgZW5lcmd5L2llcykKICBwYXN0ZTAoICAKICAgICJjZCBxZQogICAgY2F0ID4gIiwgREZUZmlsZW5hbWUsIi50Y3NoIDw8IEVPRgogICAgZm9yZWFjaCBBTEFUICgiLCBERlRsb29wcmFuZ2UsIikKICAgIGdyZXAgXCIhXCIgIiwgREZUZmlsZW5hbWUsIl9cXCR7QUxBVH0uaW4KICAgIGVuZAogICAgRU9GCiAgICB0Y3NoICIsIERGVGZpbGVuYW1lLCIudGNzaCIpIC0+IFN0cmluZ1RvVGVybWluYWwgCiAgCiAgIyMgc2VuZCBncmVwIGNvbW1hbmQgdG8gc3lzdGVtCiAgU3RyaW5nVG9UZXJtaW5hbCAlPiUKICAgIGNhdCgpICU+JQogICAgc3lzdGVtKGludGVybiA9IFRSVUUpIC0+IERGVGxvb3BvdXRwdXQgIAogIAogICMjIGV4dHJhY3QgbnVtZXJpY2FsIHZhbHVlcyBmcm9tIERGVGxvb3BvdXRwdXQKICBERlRsb29wb3V0cHV0X3ZhbHVlcyA8LSBwYXJzZV9udW1iZXIoREZUbG9vcG91dHB1dCkKCiAgIyNjcmVhdGUgZGF0YSB0YWJsZSwgaW5wdXRzIHZzIG91dHB1dHMKICBERlRyZXN1bHRzdGFibGUgPC0gZGF0YS50YWJsZShERlRsb29wcmFuZ2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGVGxvb3BvdXRwdXRfdmFsdWVzKQoKICAjIyBtYXgvbWluIGV4dHJhcG9sYXRlZCBmcm9tIHNtb290aAogIERGVHJlc3VsdHNwbG90X2RhdGEgPC0gcXBsb3QoeCA9IERGVGxvb3ByYW5nZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gREZUbG9vcG91dHB1dF92YWx1ZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERGVHJlc3VsdHN0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb20gPSBjKCJzbW9vdGgiKSkgJT4lIGxheWVyX2RhdGEoKQogICMgZ2V0IHlAeD1NQVgKICBERlRyZXN1bHRzcGxvdF94bWF4eSA8LSBERlRyZXN1bHRzcGxvdF9kYXRhW3doaWNoLm1heChERlRyZXN1bHRzcGxvdF9kYXRhJHgpLF0keQogIAogIAogICMjIHBsb3QKICBERlRyZXN1bHRzcGxvdCA8LSBxcGxvdCh4ID0gREZUbG9vcHJhbmdlLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBERlRsb29wb3V0cHV0X3ZhbHVlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gREZUcmVzdWx0c3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbSA9IGMoInBvaW50IiwgInNtb290aCIpKQogICsgZ2VvbV90ZXh0KGxhYmVsID0gREZUcmVzdWx0c3Bsb3RfeG1heHkpCiAgCiAgIyMgZGlzcGxheSBvdXRwdXQKICByZXR1cm4oREZUcmVzdWx0c3Bsb3QpCgogIAp9CgpgYGAKCmBgYHtyIC0gRGF5IDEgLSBzZXR1cCBkaXJlY3RvcnksIGdldCBmaWxlcywgZXRjfQoKIyMgaW5zdGFsbCBxdWFudHVtIGVzcHJlc3NvCiMKIwoKIyMgY3JlYXRlIHBhcmFkaW0gZGlyZWN0b3J5CnN5c3RlbSgibWtkaXIgfi9QQVJBRElNL0hhbmRzT24xIikKCiMjIGRvd25sb2FkIHBzZXVkb3BvdGVudGlhbCBmb3IgU2kgdG8gZm9sZGVyCnN5c3RlbSgiCiAgICAgICBjZCB+L1BBUkFESU0vSGFuZHNPbjEKICAgICAgIHdnZXQgaHR0cHM6Ly93d3cucXVhbnR1bS1lc3ByZXNzby5vcmcvdXBmX2ZpbGVzL1NpLnB6LXZiYy5VUEYKICAgICAgICIpCmBgYAoKYGBge3IgLSBEYXkgMSAtIFNpbGljb24gMX0KCiMjIGNyZWF0ZSBpbnB1dCBmaWxlIGZvciBzaWxpY29uCiMgZXNjYXBlLCB3aGVyZSBhcHByb3ByaWF0ZSAoXCkgCnN5c3RlbSgiCmNkIH4vUEFSQURJTS9IYW5kc09uMQoKY2F0IDw8IEVPRiA+IHNpbGljb24tMS5pbgomY29udHJvbApjYWxjdWxhdGlvbiA9IFwic2NmXCIsCnByZWZpeCA9IFwic2lsaWNvblwiLAogcHNldWRvX2RpciA9IFwiLi9cIiwKIG91dGRpciA9IFwiLi9cIgovIAomc3lzdGVtCiBpYnJhdiA9IDIsCiBjZWxsZG0oMSkgPSAxMC4yOCwKIG5hdCA9IDIsCiBudHlwID0gMSwKIGVjdXR3ZmMgPSAxOC4wLAovCiZlbGVjdHJvbnMKLwpBVE9NSUNfU1BFQ0lFUwogU2kgIDI4LjA4NiAgU2kucHotdmJjLlVQRgpBVE9NSUNfUE9TSVRJT05TIGFsYXQKIFNpIDAuMDAgMC4wMCAwLjAwCiBTaSAwLjI1IDAuMjUgMC4yNQpLX1BPSU5UUyBhdXRvbWF0aWMgCjQgNCA0IDEgMSAxCkVPRgoiKQoKIyMgcnVuIGZpcnN0IHB3CnN5c3RlbSgiCiAgICAgICBjZCB+L1BBUkFESU0vSGFuZHNPbjEKICAgICAgIHB3LnggPCBzaWxpY29uLTEuaW4gPiBzaWxpY29uLTEub3V0CiAgICAgICAiKQoKIyMgY2hlY2sgb3V0cHV0CiMgZ2V0IGFuZCBzdG9yZQpzeXN0ZW0oIgpjZCB+L1BBUkFESU0vSGFuZHNPbjEKbW9yZSBzaWxpY29uLTEub3V0CiIsIGludGVybiA9IFQpIC0+IEhhbmRzT24xX091dDEKCiMgY2hlY2sKSGFuZHNPbjFfT3V0MQoKCmBgYAoKYGBge3IgLSBEYXkgMSAtIFNpbGljb24gMn0KIyMgZGVmaW5lIGlucHV0IGRpcgppbnB1dF9kaXIgPC0gImNkIH4vUEFSQURJTS9IYW5kc09uMSIKCiMjIGNyZWF0ZSAyIGZyb20gMQpwYXN0ZTAoIgoiLCBpbnB1dF9kaXIsICIKCmNhdCA8PCBFT0YgPiBzaWxpY29uLTIuaW4KJmNvbnRyb2wKY2FsY3VsYXRpb24gPSBcInNjZlwiLApwcmVmaXggPSBcInNpbGljb25cIiwKIHBzZXVkb19kaXIgPSBcIi4vXCIsCiBvdXRkaXIgPSBcIi4vXCIKLyAKJnN5c3RlbQogaWJyYXYgPSAyLAogY2VsbGRtKDEpID0gMTAuMjgsCiBuYXQgPSAyLAogbnR5cCA9IDEsCiBlY3V0d2ZjID0gMjUuMCwKLwomZWxlY3Ryb25zCi8KQVRPTUlDX1NQRUNJRVMKIFNpICAyOC4wODYgIFNpLnB6LXZiYy5VUEYKQVRPTUlDX1BPU0lUSU9OUyBhbGF0CiBTaSAwLjAwIDAuMDAgMC4wMAogU2kgMC4yNSAwLjI1IDAuMjUKS19QT0lOVFMgYXV0b21hdGljIAo4IDggOCAxIDEgMQpFT0YKIikgJT4lIHN5c3RlbSgpCgojIyBydW4gcHcgXzIKc3lzdGVtKCIKICAgICAgIGNkIH4vUEFSQURJTS9IYW5kc09uMQogICAgICAgcHcueCA8IHNpbGljb24tMi5pbiA+IHNpbGljb24tMi5vdXQKICAgICAgICIpCgojIyBjaGVjayBvdXRwdXQKIyBnZXQgYW5kIHN0b3JlCnN5c3RlbSgiCmNkIH4vUEFSQURJTS9IYW5kc09uMQptb3JlIHNpbGljb24tMi5vdXQKIiwgaW50ZXJuID0gVCkgLT4gSGFuZHNPbjFfT3V0MgoKIyBjaGVjawpIYW5kc09uMV9PdXQyCgpgYGAKCmBgYHtyIC0gRGF5IDEgLSBTaWxpY29uIDN9CgojIyBjcmVhdGUgMyBmcm9tIHRlbXBsYXRlCnBhc3RlMCgiCiIsIGlucHV0X2RpciwgIgoKY2F0IDw8IEVPRiA+IHNpbGljb24tMy5pbgomY29udHJvbApjYWxjdWxhdGlvbiA9IFwic2NmXCIsCnByZWZpeCA9IFwic2lsaWNvblwiLAogcHNldWRvX2RpciA9IFwiLi9cIiwKIG91dGRpciA9IFwiLi9cIgovIAomc3lzdGVtCiBpYnJhdiA9IDIsCiBjZWxsZG0oMSkgPSAxMC4yOCwKIG5hdCA9IDIsCiBudHlwID0gMSwKIGVjdXR3ZmMgPSA1LjAsCi8KJmVsZWN0cm9ucwovCkFUT01JQ19TUEVDSUVTCiBTaSAgMjguMDg2ICBTaS5wei12YmMuVVBGCkFUT01JQ19QT1NJVElPTlMgYWxhdAogU2kgMC4wMCAwLjAwIDAuMDAKIFNpIDAuMjUgMC4yNSAwLjI1CktfUE9JTlRTIGF1dG9tYXRpYyAKOCA4IDggMSAxIDEKRU9GCiIpICU+JSBzeXN0ZW0oKQoKIyMgcnVuIHB3IF8yCnN5c3RlbSgiCiAgICAgICBjZCB+L1BBUkFESU0vSGFuZHNPbjEKICAgICAgIHB3LnggPCBzaWxpY29uLTMuaW4gPiBzaWxpY29uLTMub3V0CiAgICAgICAiKQoKIyMgY2hlY2sgb3V0cHV0CiMgZ2V0IGFuZCBzdG9yZQpzeXN0ZW0oIgpjZCB+L1BBUkFESU0vSGFuZHNPbjEKbW9yZSBzaWxpY29uLTIub3V0CiIsIGludGVybiA9IFQpIC0+IEhhbmRzT24xX091dDMKCiMgY2hlY2sKSGFuZHNPbjFfT3V0MwoKCmBgYAoKYGBge3IgLSBEYXkgMiAtIENobG9yaW5lIC0gc2V0dXAgZGlyZWN0b3J5LCBnZXQgZmlsZXMsIGV0Y30KCiMjIGNyZWF0ZSBwYXJhZGltIGRpcmVjdG9yeQpzeXN0ZW0oIm1rZGlyIH4vUEFSQURJTS9IYW5kc09uMyIpCgojIyBkb3dubG9hZCBwc2V1ZG9wb3RlbnRpYWwgZm9yIFNpIHRvIGZvbGRlcgpzeXN0ZW0oIgogICAgICAgY2Qgfi9QQVJBRElNL0hhbmRzT24zCiAgICAgICB3Z2V0IGh0dHA6Ly93d3cucXVhbnR1bS1lc3ByZXNzby5vcmcvdXBmX2ZpbGVzL0NsLnB6LWJocy5VUEYKICAgICAgICIpCgojIyBkZWZpbmUgaW5wdXQgZGlyCmlucHV0X2RpciA8LSAiY2Qgfi9QQVJBRElNL0hhbmRzT24zIgpgYGAKCmBgYHtyIC0gRGF5IDIgLSBDaGxvcmluZSAxfQoKIyMgY3JlYXRlIHRlbXBsYXRlCnBhc3RlMCgiCiIsIGlucHV0X2RpciwgIgoKY2F0IDw8IEVPRiA+IGNsMi5pbgomY29udHJvbApjYWxjdWxhdGlvbiA9IFwic2NmXCIsCnByZWZpeCA9IFwiQ2wyXCIsCiBwc2V1ZG9fZGlyID0gXCIuL1wiLAogb3V0ZGlyID0gXCIuL1wiCi8gCiZzeXN0ZW0KIGlicmF2ID0gMSwKIGNlbGxkbSgxKSA9IDIwLjAsCiBuYXQgPSAyLAogbnR5cCA9IDEsCiBlY3V0d2ZjID0gMTAwLAovCiZlbGVjdHJvbnMKLwpBVE9NSUNfU1BFQ0lFUwogQ2wgIDEuMCAgQ2wucHotYmhzLlVQRgpBVE9NSUNfUE9TSVRJT05TIGJvaHIKIENsIDAuMDAgMC4wMCAwLjAwCiBDbCAyLjAwIDAuMDAgMC4wMApLX1BPSU5UUyBnYW1tYSAKRU9GCiIpICU+JSBzeXN0ZW0oKQoKIyMgcnVuIHB3IF9jbDIgXzEKc3lzdGVtKCIKICAgICAgIGNkIH4vUEFSQURJTS9IYW5kc09uMwogICAgICAgcHcueCA8IGNsMi5pbiA+IGNsMi5vdXQKICAgICAgICIpCgojIyBjaGVjayBvdXRwdXQKIyBnZXQgYW5kIHN0b3JlCnN5c3RlbSgiCmNkIH4vUEFSQURJTS9IYW5kc09uMwptb3JlIGNsMi5vdXQKIiwgaW50ZXJuID0gVCkgLT4gSGFuZHNPbjNfT3V0MQoKIyBjaGVjawpIYW5kc09uM19PdXQxCgojIyBjb252ZXJ0IHRvIGR0IGZvciBvcGVyYXRpb24KIyBjb252ZXJ0CkhhbmRzT24zX091dDFfZHQgPC0gSGFuZHNPbjNfT3V0MSAlPiUgYXMuZGF0YS50YWJsZSgpCmNvbG5hbWVzKEhhbmRzT24zX091dDFfZHQpIDwtICJpbnB1dCIKIyBmaWx0ZXIKSGFuZHNPbjNfT3V0MV9kdFtpbnB1dCAlbGlrZSUgInRvdGFsIGVuZXJneSJdCgoKCmBgYAoKYGBge3IgLSBEYXkgMiAtIENobG9yaW5lIDEgLSBDaGVjayBBdG9taWMgRGlzdGFuY2UgdmlhIExvb3B9CiMjIGxvb3AgdG8gY3JlYXRlIG11bHRpcGxlIGlucHV0IGZpbGVzLCB2YXJ5aW5nIG1vbGVjdWxhciBkaXN0YW5jZSBDbC1DbApwYXN0ZTAoaW5wdXRfZGlyLCAiCmNhdCA+IGJsLnRjc2ggPDwgRU9GCnNlZCBcInMvMi4wMC9ORVcvZ1wiIGNsMi5pbiA+IHRtcApmb3JlYWNoIERJU1QgKCAyLjIgMi40IDIuNiAyLjggMy4wIDMuMiAzLjQgMy42IDMuOCA0LjAgNC4yIDQuNCA0LjYgKQogIHNlZCBcInMvTkVXL1xcJHtESVNUfS9nXCIgdG1wID4gY2wyX1xcJHtESVNUfS5pbgplbmQKRU9GCnRjc2ggYmwudGNzaCIpICU+JSBzeXN0ZW0oKQoKIyMgZXhlY3VsdGUgcHcgZm9yIGVhY2gKcGFzdGUwKGlucHV0X2RpciwgIgpjYXQgPiBibC50Y3NoIDw8IEVPRgpmb3JlYWNoIERJU1QgKCAyLjIgMi40IDIuNiAyLjggMy4wIDMuMiAzLjQgMy42IDMuOCA0LjAgNC4yIDQuNCA0LjYgKQogIHB3LnggPCBjbDJfXFwke0RJU1R9LmluID4gY2wyX1xcJHtESVNUfS5vdXQKZW5kCkVPRgp0Y3NoIGJsLnRjc2giKSAlPiUgc3lzdGVtKCkKYGBgCgpgYGB7ciAtIERheSAyIC0gQ2hsb3JpbmUgMSAtIEV4dHJhY3QgT3V0cHV0IERhdGEgYW5kIFBsb3R9CiMjIGV4dHJhY3QgdmFsdWVzIHBlciBmaWxlIHZpYSBncmVwCiMgZ2V0IGZyb20gc3lzdGVtCnBhc3RlMChpbnB1dF9kaXIsICIKZ3JlcCAhIGNsMl8qb3V0CiAgICAgICAiKSAlPiUgc3lzdGVtKGludGVybiA9IFQpICU+JSBhcy5kYXRhLnRhYmxlICgpIC0+IEhhbmRzT24zX091dDIKCiNmaXggY29sbmFtZXMKY29sbmFtZXMoSGFuZHNPbjNfT3V0MikgPC0gIklucHV0IgojIGV4dHJhY3Qgc3Vic3RyaW5nIGZvciBCb25kX0Rpc3RhbmNlCkhhbmRzT24zX091dDJbLCBCb25kX0Rpc3QgOj0gYXMubnVtZXJpYyhzdWJzdHIoSW5wdXQsNSw3KSldCiMgZXh0cmFjdCBzdWJzdHJpbmcgZm9yIHRvdGFsIGVuZXJneQpTdWJTdGFydCA8LSBuY2hhcigiY2wyXzIuMi5vdXQ6ISAgICB0b3RhbCBlbmVyZ3kgICAgICAgICAgICAgID0gICAgICIpICsgMQpTdWJFbmQgPC0gbmNoYXIoIi01OS45MzI5Mzg2NCIpICsgU3ViU3RhcnQKSGFuZHNPbjNfT3V0MlssIFRvdGFsX0VuZXJneSA6PSBhcy5udW1lcmljKHN1YnN0cihJbnB1dCwgU3ViU3RhcnQsIFN1YkVuZCkpXQoKI2NoZWNrCkhhbmRzT24zX091dDIkQm9uZF9EaXN0CkhhbmRzT24zX091dDIkVG90YWxfRW5lcmd5CgojIyBwbG90CiMgZ2V0IGV4dHJhcG9sYXRlZCBkYXRhCiAgICBxcGxvdChkYXRhPUhhbmRzT24zX091dDIsCiAgICAgICAgeD1Cb25kX0Rpc3QsCiAgICAgICAgeT1Ub3RhbF9FbmVyZ3ksCiAgICAgICAgZ2VvbT1jKCJzbW9vdGgiKSwKICAgICAgICB4bGFiPSJDbC1DbCBCb25kIGRpc3RhbmNlIChib2hyKSIsCiAgICAgICAgeWxhYj0idG90YWwgZW5lcmd5IChSeSkiKSAlPiUgbGF5ZXJfZGF0YSgpIC0+IEhhbmRzT24zX091dDJfRXh0cmFwCgojIGZpbmQgbWluIGFuZCBhc3NvY2lhdGVkIHZhbHVlcyBpbiBleHRyYXBvbGF0ZWQgYXRhCkhhbmRzT24zX091dDJfRXh0cmFwX01pblkgPC0gSGFuZHNPbjNfT3V0Ml9FeHRyYXBbd2hpY2gubWluKEhhbmRzT24zX091dDJfRXh0cmFwJHkpLCBdJHkKSGFuZHNPbjNfT3V0Ml9FeHRyYXBfWE1pblkgPC0gSGFuZHNPbjNfT3V0Ml9FeHRyYXBbd2hpY2gubWluKEhhbmRzT24zX091dDJfRXh0cmFwJHkpLCBdJHgKCiMgcGxvdCBvcmlnaW5hbCBkYXRhIHdpdGggZXh0cmFwb2xhdGVkIGxhYmVsCiBIYW5kc09uM19PdXQyX1Bsb3QgPC0gIHFwbG90KGRhdGE9SGFuZHNPbjNfT3V0MiwKICAgICAgICB4PUJvbmRfRGlzdCwKICAgICAgICB5PVRvdGFsX0VuZXJneSwKICAgICAgICBnZW9tPWMoInBvaW50IiwgInNtb290aCIpLAogICAgICAgIHhsYWI9IkNsLUNsIEJvbmQgZGlzdGFuY2UgKGJvaHIpIiwKICAgICAgICB5bGFiPSJ0b3RhbCBlbmVyZ3kgKFJ5KSIpICsgCiAgICBhbm5vdGF0ZSgidGV4dCIsIAogICAgICAgICAgICAgeCA9IEhhbmRzT24zX091dDJfRXh0cmFwX1hNaW5ZLCAKICAgICAgICAgICAgIHkgPSBIYW5kc09uM19PdXQyX0V4dHJhcF9NaW5ZICsgLjgsIAogICAgICAgICAgICAgbGFiZWwgPSBhcy5jaGFyYWN0ZXIoSGFuZHNPbjNfT3V0Ml9FeHRyYXBfWE1pblkpKSArCiAgICAgICAgYW5ub3RhdGUoInRleHQiLCAKICAgICAgICAgICAgIHggPSBIYW5kc09uM19PdXQyX0V4dHJhcF9YTWluWSwgCiAgICAgICAgICAgICB5ID0gSGFuZHNPbjNfT3V0Ml9FeHRyYXBfTWluWSArIDEsIAogICAgICAgICAgICAgbGFiZWwgPSBhcy5jaGFyYWN0ZXIoSGFuZHNPbjNfT3V0Ml9FeHRyYXBfTWluWSkpCgojIHJ1biBwbG90CiBIYW5kc09uM19PdXQyX1Bsb3QKIApgYGAKCmBgYHtyIC0gRGF5IDIgLSBDaGxvcmluZSAyIC0gUnVuIHdpdGggT3B0fQoKIyMgZ2VuZXJhdGUgbmV3IGZpbGUgd2l0aCBvcHQgZGF0YSBmcm9tIGxhc3QgcnVuCiMgbm90ZSBzcGVjaWZpY2F0aW9uIG9mIGhpZ2hlciBwcmVjaXNpb24KcGFzdGUwKCIKIiwgaW5wdXRfZGlyLCAiCgpjYXQgPDwgRU9GID4gY2wyLTIuaW4KJmNvbnRyb2wKY2FsY3VsYXRpb24gPSBcInNjZlwiLApwcmVmaXggPSBcIkNsMlwiLAogcHNldWRvX2RpciA9IFwiLi9cIiwKIG91dGRpciA9IFwiLi9cIgovIAomc3lzdGVtCiBpYnJhdiA9IDEsCiBjZWxsZG0oMSkgPSAyMC4wLAogbmF0ID0gMiwKIG50eXAgPSAxLAogZWN1dHdmYyA9IDEwMCwKLwomZWxlY3Ryb25zCmNvbnZfdGhyID0gMS5kLTEwCi8KQVRPTUlDX1NQRUNJRVMKIENsICAxLjAgIENsLnB6LWJocy5VUEYKQVRPTUlDX1BPU0lUSU9OUyBib2hyCiBDbCAwLjAwIDAuMDAgMC4wMAogQ2wgMy43MjUgMC4wMCAwLjAwCktfUE9JTlRTIGdhbW1hIApFT0YKIikgJT4lIHN5c3RlbSgpCgojIyBydW4gcHcgX2NsMiBfMgpzeXN0ZW0oIgogICAgICAgY2Qgfi9QQVJBRElNL0hhbmRzT24zCiAgICAgICBwdy54IDwgY2wyLTIuaW4gPiBjbDItMi5vdXQKICAgICAgICIpCgojIyBjaGVjayBvdXRwdXQKc3lzdGVtKCIKY2Qgfi9QQVJBRElNL0hhbmRzT24zCmdyZXAgISBjbDItMi5vdXQKIikKCiMgZ2V0IGFuZCBzdG9yZSBlbmVyZ3kKc3lzdGVtKCIKY2Qgfi9QQVJBRElNL0hhbmRzT24zCmdyZXAgISBjbDItMi5vdXQKIiwgaW50ZXJuID0gVCkgJT4lIGRhdGEudGFibGUoKSAtPiBIYW5kc09uM19PdXQzCiMgcmVuYW1lIGlucHV0CmNvbG5hbWVzKEhhbmRzT24zX091dDMpIDwtICJJbnB1dCIKIyBleHRyYWN0IHN1YnN0cmluZyBmb3IgdG90YWwgZW5lcmd5CkhhbmRzT24zX091dDNbLCBUb3RhbF9FbmVyZ3kgOj0gZXh0cmFjdF9udW1lcmljKElucHV0KV0KCiMgY2hlY2sKSGFuZHNPbjNfT3V0MwoKCmBgYAoKYGBge3IgLSBEYXkgMiAtIENobG9yaW5lIDMgLSBDaGVjayBEaXNzb2NpYXRpb24gRW5lcmd5fQoKIyMgYnVpbGQgaW5wdXQgZmlsZQpwYXN0ZTAoIgoiLCBpbnB1dF9kaXIsICIKY2F0ID4gY2wuaW4gPDwgRU9GCiZjb250cm9sCiBjYWxjdWxhdGlvbiA9IFwic2NmXCIKIHByZWZpeCA9IFwiQ2xcIiwKIHBzZXVkb19kaXIgPSBcIi4vXCIsCiBvdXRkaXIgPSBcIi4vXCIKLwogJnN5c3RlbQogaWJyYXYgPSAxLAogY2VsbGRtKDEpID0gMjAuMCwKIG5hdCA9IDEsCiBudHlwID0gMSwKIGVjdXR3ZmMgPSAxMDAsCiBuc3BpbiA9IDIsCiB0b3RfbWFnbmV0aXphdGlvbiA9IDEuMCwKIG9jY3VwYXRpb25zID0gXCJzbWVhcmluZ1wiLApkZWdhdXNzID0gMC4wMDEsCi8KJmVsZWN0cm9ucwovCkFUT01JQ19TUEVDSUVTCiBDbCAxLjAgQ2wucHotYmhzLlVQRgpBVE9NSUNfUE9TSVRJT05TCiBDbCAwLjAwIDAuMDAgMC4wMApLX1BPSU5UUyBnYW1tYQpFT0YKIikgJT4lIHN5c3RlbSgpCgojIyBleGVjdXRlCnN5c3RlbSgiCiAgICAgICBjZCB+L1BBUkFESU0vSGFuZHNPbjMKICAgICAgIHB3LnggPCBjbC5pbiA+IGNsLm91dAogICAgICAgIikKCiMjIGNoZWNrIG91dHB1dApzeXN0ZW0oIgpjZCB+L1BBUkFESU0vSGFuZHNPbjMKZ3JlcCAhIGNsLm91dAoiKQoKIyBnZXQgYW5kIHN0b3JlIGVuZXJneQpzeXN0ZW0oIgpjZCB+L1BBUkFESU0vSGFuZHNPbjMKZ3JlcCAhIGNsLm91dAoiLCBpbnRlcm4gPSBUKSAlPiUgZGF0YS50YWJsZSgpIC0+IEhhbmRzT24zX091dDQKIyByZW5hbWUgaW5wdXQKY29sbmFtZXMoSGFuZHNPbjNfT3V0NCkgPC0gIklucHV0IgojIGV4dHJhY3Qgc3Vic3RyaW5nIGZvciB0b3RhbCBlbmVyZ3kKSGFuZHNPbjNfT3V0NFssIFRvdGFsX0VuZXJneSA6PSBleHRyYWN0X251bWVyaWMoSW5wdXQpXQoKIyBjaGVjawpIYW5kc09uM19PdXQ0CgojIyBjYWxjdWxhdGUgZGlzc29jaWF0aW9uIGVuZXJneQojIGNhbGN1bGF0ZQpIYW5kc09uM19DbF9EaXNzRW5lcmd5IDwtIEhhbmRzT24zX091dDMkVG90YWxfRW5lcmd5IC0gMipIYW5kc09uM19PdXQ0JFRvdGFsX0VuZXJneQojIGNoZWNrIGNhbGN1bGF0aW9uCkhhbmRzT24zX0NsX0Rpc3NFbmVyZ3kKCmBgYAoKYGBge3IgLSBEYXkgMiAtIEJ1bGsgQ3J5c3RhbCBFcXVpbGlicml1bSBTdHJ1Y3R1cmV9CiMjIGdldCBQUCBmb3IgU2kKcGFzdGUwKGlucHV0X2RpciwiCiAgICAgICB3Z2V0IGh0dHBzOi8vd3d3LnF1YW50dW0tZXNwcmVzc28ub3JnL3VwZl9maWxlcy9TaS5wei12YmMuVVBGCiAgICAgICAiKSAlPiUgc3lzdGVtKCkKCiMjIGdlbmVyYXRlIHRlbXBsYXRlIGlucHV0IGZpbGUKCnBhc3RlMChpbnB1dF9kaXIsIgoKY2F0ID4gc2lsaWNvbi0zLmluIDw8IEVPRgomY29udHJvbAogY2FsY3VsYXRpb24gPSBcInNjZlwiCiBwcmVmaXggPSBcInNpbGljb25cIiwKIHBzZXVkb19kaXIgPSBcIi4vXCIsCiBvdXRkaXIgPSBcIi4vXCIKLyAKJnN5c3RlbQogaWJyYXYgPSAyLAogY2VsbGRtKDEpID0gMTAuMjgsCiBuYXQgPSAyLAogbnR5cCA9IDEsCiBlY3V0d2ZjID0gMjUuMCwKLwomZWxlY3Ryb25zCi8KQVRPTUlDX1NQRUNJRVMKIFNpICAyOC4wODYgIFNpLnB6LXZiYy5VUEYKQVRPTUlDX1BPU0lUSU9OUwogU2kgMC4wMCAwLjAwIDAuMDAKIFNpIDAuMjUgMC4yNSAwLjI1CktfUE9JTlRTIGF1dG9tYXRpYwo0IDQgNCAxIDEgMQpFT0YiKSAlPiUgc3lzdGVtKCkKCiMjIG1ha2UgaW5wdXQgZmlsZSBsb29wCnBhc3RlMChpbnB1dF9kaXIsIgoKY2F0ID4gc2lsaWNvbi50Y3NoIDw8IEVPRgogICAgICAgc2VkIFwicy8xMC4yOC9ORVcvZ1wiIHNpbGljb24tMy5pbiA+IHRtcAogICAgICAgZm9yZWFjaCBBTEFUICggOS45NSAxMC4wIDEwLjA1IDEwLjEgMTAuMTUgMTAuMiAxMC4yNSAxMC4zIDEwLjM1IDEwLjQgMTAuNDUgMTAuNSApCiAgICAgICBzZWQgXCJzL05FVy9cXCR7QUxBVH0vZ1wiIHRtcCA+IHNpbGljb25fXFwke0FMQVR9LmluCmVuZApFT0YKCnRjc2ggc2lsaWNvbi50Y3NoIikgJT4lIHN5c3RlbSgpCgojIyBleGVjdXRlIHB3IGZvciBsb29wCnBhc3RlMChpbnB1dF9kaXIsIgogICAgICAgY2F0ID4gc2lsaWNvbi50Y3NoIDw8IEVPRgogICAgICAgZm9yZWFjaCBBTEFUICggOS45NSAxMC4wIDEwLjA1IDEwLjEgMTAuMTUgMTAuMiAxMC4yNSAxMC4zIDEwLjM1IDEwLjQgMTAuNDUgMTAuNSApCiAgICAgICBwdy54IDwgc2lsaWNvbl9cXCR7QUxBVH0uaW4gPiBzaWxpY29uX1xcJHtBTEFUfS5vdXQKZW5kCkVPRgoKdGNzaCBzaWxpY29uLnRjc2giKSAlPiUgc3lzdGVtKCkKYGBgCgpgYGB7ciAtIERheSAyIC0gT3B0aW1hbCBMYXR0aWNlIFBhcmFtZXRlciBQbG90IH0KCiMjIGV4dHJhY3QgdmFsdWVzIHBlciBmaWxlIHZpYSBncmVwCiMgZ2V0IGZyb20gc3lzdGVtCnBhc3RlMChpbnB1dF9kaXIsICIKZ3JlcCAhIHNpbGljb25fKm91dAogICAgICAgIikgJT4lIHN5c3RlbShpbnRlcm4gPSBUKSAlPiUgYXMuZGF0YS50YWJsZSAoKSAtPiBIYW5kc09uM19PdXQ0CgojZml4IGNvbG5hbWVzCmNvbG5hbWVzKEhhbmRzT24zX091dDQpIDwtICJJbnB1dCIKIyBleHRyYWN0IHN1YnN0cmluZyBmb3IgQm9uZF9EaXN0YW5jZQpIYW5kc09uM19PdXQ0WywgQm9uZF9EaXN0IDo9IHBhcnNlX251bWJlcihJbnB1dCldICMjIHBuIHRha2VzIGZpcnN0IG51bWJlcnMgZm91bmQKIyBleHRyYWN0IHN1YnN0cmluZyBmb3IgdG90YWwgZW5lcmd5CkhhbmRzT24zX091dDRbLCBUb3RhbF9FbmVyZ3kgOj0gcGFyc2VfbnVtYmVyKHN1YnN0cihJbnB1dCwgc3RyX2xvY2F0ZShJbnB1dCwgIiEiKSwgIyMgc2VhcmNoIGFmdGVyICEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jaGFyKElucHV0KSkpXQoKI2NoZWNrCkhhbmRzT24zX091dDQkQm9uZF9EaXN0CkhhbmRzT24zX091dDQkVG90YWxfRW5lcmd5CgojIyBwbG90CiMgZ2V0IGV4dHJhcG9sYXRlZCBkYXRhCiAgICBxcGxvdChkYXRhPUhhbmRzT24zX091dDQsCiAgICAgICAgeD1Cb25kX0Rpc3QsCiAgICAgICAgeT1Ub3RhbF9FbmVyZ3ksCiAgICAgICAgZ2VvbT1jKCJzbW9vdGgiKSwKICAgICAgICB4bGFiPSJDbC1DbCBCb25kIGRpc3RhbmNlIChib2hyKSIsCiAgICAgICAgeWxhYj0idG90YWwgZW5lcmd5IChSeSkiKSAlPiUgbGF5ZXJfZGF0YSgpIC0+IEhhbmRzT24zX091dDRfRXh0cmFwCgojIGZpbmQgbWluIGFuZCBhc3NvY2lhdGVkIHZhbHVlcyBpbiBleHRyYXBvbGF0ZWQgYXRhCkhhbmRzT24zX091dDRfRXh0cmFwX01pblkgPC0gSGFuZHNPbjNfT3V0NF9FeHRyYXBbd2hpY2gubWluKEhhbmRzT24zX091dDRfRXh0cmFwJHkpLCBdJHkKSGFuZHNPbjNfT3V0NF9FeHRyYXBfWE1pblkgPC0gSGFuZHNPbjNfT3V0NF9FeHRyYXBbd2hpY2gubWluKEhhbmRzT24zX091dDRfRXh0cmFwJHkpLCBdJHgKCiMgcGxvdCBvcmlnaW5hbCBkYXRhIHdpdGggZXh0cmFwb2xhdGVkIGxhYmVsCiBIYW5kc09uM19PdXQ0X0V4dHJhcF9QbG90IDwtICBxcGxvdChkYXRhPUhhbmRzT24zX091dDQsCiAgICAgICAgeD1Cb25kX0Rpc3QsCiAgICAgICAgeT1Ub3RhbF9FbmVyZ3ksCiAgICAgICAgZ2VvbT1jKCJwb2ludCIsICJzbW9vdGgiKSwKICAgICAgICB4bGFiPSJsYXR0aWNlIHBhcmFtZXRlciAoYm9ocikiLAogICAgICAgIHlsYWI9InRvdGFsIGVuZXJneSAoUnkpIikgKyAKICAgIGFubm90YXRlKCJ0ZXh0IiwgCiAgICAgICAgICAgICB4ID0gSGFuZHNPbjNfT3V0NF9FeHRyYXBfWE1pblksIAogICAgICAgICAgICAgeSA9IEhhbmRzT24zX091dDRfRXh0cmFwX01pblkgKyAuMDA4LCAKICAgICAgICAgICAgIGxhYmVsID0gYXMuY2hhcmFjdGVyKEhhbmRzT24zX091dDRfRXh0cmFwX1hNaW5ZKSkgKwogICAgICAgIGFubm90YXRlKCJ0ZXh0IiwgCiAgICAgICAgICAgICB4ID0gSGFuZHNPbjNfT3V0NF9FeHRyYXBfWE1pblksIAogICAgICAgICAgICAgeSA9IEhhbmRzT24zX091dDRfRXh0cmFwX01pblkgKyAuMDEsIAogICAgICAgICAgICAgbGFiZWwgPSBhcy5jaGFyYWN0ZXIoSGFuZHNPbjNfT3V0NF9FeHRyYXBfTWluWSkpCgojIHJ1biBwbG90CiBIYW5kc09uM19PdXQ0X0V4dHJhcF9QbG90CgpgYGAKCmBgYHtyIC0gRGF5IDIgLSBDb2hlc2l2ZSBFbmVyZ3kgb2YgQnVsayBDcnlzdGFsfQojIyBpbnB1dCBmaWxlCnBhc3RlMChpbnB1dF9kaXIsCiIKY2F0ID4gc2kuaW4gPDwgRU9GCiZjb250cm9sCiAgY2FsY3VsYXRpb24gPSBcInNjZlwiLAogcHJlZml4ID0gXCJzaWxpY29uXCIsCiBwc2V1ZG9fZGlyID0gXCIuL1wiLAogb3V0ZGlyID0gXCIuL1wiCi8gCiZzeXN0ZW0KIGlicmF2ID0gMSwKIGNlbGxkbSgxKSA9IDIwLjAsCiBuYXQgPSAxLAogbnR5cCA9IDEsCiBlY3V0d2ZjID0gMjUuMCwKIG5zcGluID0gMiwKIHRvdF9tYWduZXRpemF0aW9uID0gMi4wLAogb2NjdXBhdGlvbnMgPSBcInNtZWFyaW5nXCIsCiBkZWdhdXNzID0gMC4wMDEKLwomZWxlY3Ryb25zCi8KQVRPTUlDX1NQRUNJRVMKU2kgMjguMDg2IFNpLnB6LXZiYy5VUEYKQVRPTUlDX1BPU0lUSU9OUyBhbGF0ClNpIDAuMDAgMC4wMCAwLjAwCktfUE9JTlRTIGdhbW1hCkVPRgoiKSAlPiUgc3lzdGVtKCkKCiMjIGV4ZWN1dGUKCnBhc3RlMChpbnB1dF9kaXIsCiAgICAgICAiCiAgICAgICBwdy54IDwgc2kuaW4gPiBzaS5vdXQKICAgICAgICIpICU+JSBzeXN0ZW0oKQoKIyMgZ2V0IGRhdGEKcGFzdGUwKGlucHV0X2RpciwKICAiCiAgZ3JlcCAhIHNpLm91dCIKKSAlPiUgc3lzdGVtKGludGVybiA9IFQpICU+JSBhcy5kYXRhLnRhYmxlKCkgLT4gSGFuZHNPbjNfT3V0NQojIGNvbG5hbWUKY29sbmFtZXMoSGFuZHNPbjNfT3V0NSkgPC0gIklucHV0IgoKIyBnZXQgdmFsdWUKSGFuZHNPbjNfT3V0NV9Db2hFbmVyZ3kgPC0gSGFuZHNPbjNfT3V0NF9FeHRyYXBfTWluWSAtIDIqcGFyc2VfbnVtYmVyKEhhbmRzT24zX091dDUkSW5wdXQpCgojb3V0cHV0IHZhbHVlCkhhbmRzT24zX091dDVfQ29oRW5lcmd5CgpgYGAKCgpgYGB7ciAtIERheSAzIC0gU2V0dXAgRmlsZX0KIyMgbWFrZWQgZGlyIGZvciB0b2RheQpwYXN0ZTAoIgogICAgICAgbWtkaXIgfi9QQVJBRElNL0hhbmRzT241CiAgICAgICAiKSAlPiUgc3lzdGVtKCkKCiMgc2V0IGFzIGlucHV0CmlucHV0X2RpciA8LSAiY2Qgfi9QQVJBRElNL0hhbmRzT241IgoKIyMgZ2V0IGZpbGVzCiMgY3JlYXRlIHRlbXBsYXRlCnBhc3RlMCgiCiIsIGlucHV0X2RpciwgIgoKY2F0IDw8IEVPRiA+IGNsMi5pbgomY29udHJvbApjYWxjdWxhdGlvbiA9IFwicmVsYXhcIiwKcHJlZml4ID0gXCJDbDJcIiwKIGZvcmNfY29udl90aHIgPSAxLmQtNSwKIGV0b3RfY29udl90aHIgPSAxLmQtOCwKIHBzZXVkb19kaXIgPSBcIi4vXCIsCiBvdXRkaXIgPSBcIi4vXCIKLyAKJnN5c3RlbQogaWJyYXYgPSAxLAogY2VsbGRtKDEpID0gMjAuMCwKIG5hdCA9IDIsCiBudHlwID0gMSwKIGVjdXR3ZmMgPSAxMDAsCi8KJmVsZWN0cm9ucwovCiZpb25zCi8KQVRPTUlDX1NQRUNJRVMKIENsICAxLjAgIENsLnB6LWJocy5VUEYKQVRPTUlDX1BPU0lUSU9OUyBib2hyCiBDbCAwLjAwIDAuMDAgMC4wMAogQ2wgNS4wMCAwLjAwIDAuMDAKS19QT0lOVFMgZ2FtbWEgCkVPRgoiKSAlPiUgc3lzdGVtKCkKCgoKCmBgYAoKYGBge3IgLSBEYXkgMyAtIEV4ZWN1dGUgUmVsYXhlZCBSdW4gKENsKX0KCiNleGVjdXRlCnBhc3RlMChpbnB1dF9kaXIsCiAgICAgICAiCiAgICAgICBwdy54IDwgY2wyLmluID4gY2wyLm91dAogICAgICAgIikgJT4lIHN5c3RlbSgpCgojIGdldCBvdXRwdXQKcGFzdGUwKGlucHV0X2RpciwKICAgICAgICIKICAgICAgIG1vcmUgY2wyLm91dAogICAgICAgIikgJT4lIHN5c3RlbShpbnRlcm4gPSBUKSAlPiUgYXMuZGF0YS50YWJsZSAtPiBIYW5kc09uNV9PdXQxCiMgYWRkIGNvbCBuYW1lCmNvbG5hbWVzKEhhbmRzT241X091dDEpIDwtICJJbnB1dCIKCiMgZ2V0IGNsIGVuZXJneQojIG5vdGUgZ3JlcCByZXR1cm5zIGxpc3QKcGFzdGUwKGlucHV0X2RpciwKICAgICAgICIKICAgICAgIGdyZXAgLUEyIFwiQVRPTUlDX1BPU0lUSU9OU1wiIGNsMi5vdXQKICAgICAgICIpICU+JSBzeXN0ZW0oaW50ZXJuPVQpICU+JSBhcy5kYXRhLnRhYmxlKCkgLT4gSGFuZHNPbjVfT3V0MgojIGFkZCBjb2wgbmFtZXMKY29sbmFtZXMoSGFuZHNPbjVfT3V0MikgPC0gIklucHV0IgoKCiMgZXh0cmFjdCB2YWx1ZXMgZnJvbSBlYWNoIGNvbHVtaApIYW5kc09uNV9PdXQyWywgVmFsdWVzIDo9IGFzLm51bWVyaWMobGFwcGx5KElucHV0LCBwYXJzZV9udW1iZXIpKV0KCiMgY2FsY3VsYXRlIGRpc3RhbmNlCkhhbmRzT241X091dDJbLCBCb25kX0Rpc3QgOj0gVmFsdWVzIC0gc2hpZnQoVmFsdWVzKV0KCiMgZHJvcCBlbXB0eQpIYW5kc09uNV9PdXQzIDwtIEhhbmRzT241X091dDJbIWlzLm5hKEJvbmRfRGlzdCldWywgLiguSSwgQm9uZF9EaXN0KV0KIAojIHBsb3QKcXBsb3QoZGF0YSA9IEhhbmRzT241X091dDMsCiAgICAgIHggPSBIYW5kc09uNV9PdXQzJEksCiAgICAgIHkgPSBIYW5kc09uNV9PdXQzJEJvbmRfRGlzdCwKICAgICAgeGxhYiA9ICJpdGVyYXRpb24iLAogICAgICB5bGFiID0gImJvbmQgZGlzdGFuY2UgKEJvaHIpIiwKICAgICAgZ2VvbSA9IGMoInBvaW50IiwgInNtb290aCIpKQoKYGBgCgpgYGB7ciAtIERheSAzIC0gT3B0aW1pemF0aW9uIG9mIEF0b21pYyBDb29yZGluYXRlcyAtIEdyYXBoaXRlIF8xfQojZ2V0IGZpbGVzCgojIyAKIyMgZ2V0IGZpbGVzCiMgd2dldApwYXN0ZTAoaW5wdXRfZGlyLAogICAgICAgIgogICAgICAgd2dldCBodHRwczovL3d3dy5xdWFudHVtLWVzcHJlc3NvLm9yZy91cGZfZmlsZXMvQy5wei12YmMuVVBGCiAgICAgICAiKSAlPiUgc3lzdGVtKCkKCiMgY3JlYXRlIHRlbXBsYXRlCnBhc3RlMCgiCiIsIGlucHV0X2RpciwgIgpjYXQgPiBncmFwaGl0ZS5pbiA8PCBFT0YKJmNvbnRyb2wKIGNhbGN1bGF0aW9uID0gXCJ2Yy1yZWxheFwiCiBwcmVmaXggPSBcImdyYXBoaXRlXCIsCiBwc2V1ZG9fZGlyID0gXCIuL1wiLAogb3V0ZGlyID0gXCIuL1wiCi8gCiZzeXN0ZW0KaWJyYXYgPSA0LAogY2VsbGRtKDEpID0gNC4wLAogY2VsbGRtKDMpID0gMi4wLAogbmF0ID0gNCwKIG50eXAgPSAxLAogZWN1dHdmYyA9IDEwMCwKLwomZWxlY3Ryb25zCi8KJmlvbnMKLwomY2VsbAovCkFUT01JQ19TUEVDSUVTCiBDIDEuMCBDLnB6LXZiYy5VUEYKQVRPTUlDX1BPU0lUSU9OUyBjcnlzdGFsCiBDIDAuMDAgMC4wMCAwLjI1CiBDIDAuMDAgMC4wMCAwLjc1CiBDIDAuMzMzMzMzIDAuNjY2NjY2IDAuMjUKIEMgMC42NjY2NjYgMC4zMzMzMzMgMC43NQpLX1BPSU5UUyBhdXRvbWF0aWMgCjYgNiAyIDEgMSAxCiIpICU+JSBzeXN0ZW0oKQoKYGBgCgpgYGB7ciAtIERheSAzIC0gU3RyZXNzIE9wdGltaXphdGlvbiBHcmFwaGl0ZSBfMX0KCnBhc3RlMChpbnB1dF9kaXIsCiAgICAgICAiCiAgICAgICBwdy54IDwgZ3JhcGhpdGUuaW4gPiBncmFwaGl0ZS5vdXQKICAgICAgICIpICU+JSBzeXN0ZW0oKQoKCmBgYAoKYGBge3IgLSBEYXkgMyAtIFN0cmVzcyBPcHRpbWl6YXRpb24gR3JhcGhpdGUgXzIgLy8gb3V0cHV0fQoKIyMgZ2VuZXJhdGUgdmFyb3VzIG91dHB1dHMKCiMgbGF0dGljZSBwYXJhbWV0ZXJzCnBhc3RlMChpbnB1dF9kaXIsCiAgICAgICAiCiAgICAgICBncmVwIC1BMyBDRUxMX1BBUkFNRVRFUlMgZ3JhcGhpdGUub3V0CiAgICAgICAiKSAlPiUgc3lzdGVtKGludGVybj1UKSAlPiUgYXMuZGF0YS50YWJsZSgpIC0+IEhhbmRzT241X091dDQKCmBgYAoKYGBge3IgLSBEYXkgMyAtIFN0cmVzcyBPcHRpbWl6YXRpb24gR3JhcGhpdGUgXzIgLy8gb3B0aW1pemVkIHZhbHVlc30KCiMjIGdlbmVyYXRlIGxvb3AgdG8gY29udGludW91c2x5IHJlaW5wdXQgb3B0aW1pemVkIHBhcmFtZXRlcnMgZnJvbSBwcmV2aW91cyBydW4KCmBgYAoKCgpgYGB7ciAtIERheSAxfQpERlRmaWxlbmFtZSA8LSAiZGlhbW9uZCIKREZUbG9vcHJhbmdlIDwtICIgMy43NSA0LjAgNC4yNSA0LjUgNC43NSA1LjAgNS4yNSA1LjUgNS43NSA2LjAgNi4yNSA2LjUgNi43NSA3LjAgIgoKZnVuY0RGVF9idWlsZGlucHV0KERGVGZpbGVuYW1lLCBERlRsb29wcmFuZ2UpCmZ1bmNERlRfZXhlYyhERlRmaWxlbmFtZSwgREZUbG9vcHJhbmdlKQpmdW5jREZUX3Bsb3RvdXQoREZUZmlsZW5hbWUsIERGVGxvb3ByYW5nZSkKCgpgYGAKCg==